@crewx/sdk 0.9.0-rc.4 → 0.9.0-rc.41

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.
Files changed (70) hide show
  1. package/README.md +1 -1
  2. package/dist/config/canonicalize-agent-options.d.ts +16 -0
  3. package/dist/config/global-settings.d.ts +19 -0
  4. package/dist/config/models.generated.d.ts +22 -0
  5. package/dist/config/models.remote.d.ts +4 -0
  6. package/dist/config/overdrive.d.ts +29 -0
  7. package/dist/config/pricing.d.ts +8 -8
  8. package/dist/config/pricing.generated.d.ts +2 -0
  9. package/dist/config/pricing.remote.d.ts +4 -0
  10. package/dist/config/pricing.types.d.ts +5 -0
  11. package/dist/config/timeout.config.d.ts +3 -0
  12. package/dist/config/wi-boards.d.ts +15 -0
  13. package/dist/esm/index.js +125 -82
  14. package/dist/esm/plugins/index.js +118 -71
  15. package/dist/esm/repository/index.js +122 -75
  16. package/dist/esm/testing/index.js +1 -1
  17. package/dist/events/types.d.ts +2 -0
  18. package/dist/facade/Crewx.d.ts +12 -0
  19. package/dist/index.browser.d.ts +1 -1
  20. package/dist/index.browser.js +2 -2
  21. package/dist/index.d.ts +17 -6
  22. package/dist/index.js +126 -83
  23. package/dist/internal/windows-spawn.d.ts +10 -0
  24. package/dist/migrations/0008_careful_black_bird.sql +17 -0
  25. package/dist/migrations/0009_hot_dark_phoenix.sql +1 -0
  26. package/dist/migrations/0010_analyze_stats.sql +6 -0
  27. package/dist/migrations/0011_far_black_tarantula.sql +1 -0
  28. package/dist/migrations/0012_blue_turbo.sql +23 -0
  29. package/dist/migrations/0013_hesitant_adam_destine.sql +15 -0
  30. package/dist/migrations/meta/0008_snapshot.json +1327 -0
  31. package/dist/migrations/meta/0009_snapshot.json +1335 -0
  32. package/dist/migrations/meta/0010_snapshot.json +1335 -0
  33. package/dist/migrations/meta/0011_snapshot.json +1342 -0
  34. package/dist/migrations/meta/0012_snapshot.json +1494 -0
  35. package/dist/migrations/meta/0013_snapshot.json +1592 -0
  36. package/dist/migrations/meta/_journal.json +42 -0
  37. package/dist/plugin/types.d.ts +1 -0
  38. package/dist/plugins/index.js +118 -71
  39. package/dist/provider/acp/adapters/claude.d.ts +0 -4
  40. package/dist/provider/acp/connection.d.ts +4 -0
  41. package/dist/provider/acp/meta.d.ts +4 -0
  42. package/dist/provider/bridge.d.ts +13 -1
  43. package/dist/provider/cli/adapter.types.d.ts +1 -0
  44. package/dist/provider/cli/adapters/claude.d.ts +0 -1
  45. package/dist/provider/cli/adapters/cli-knob.util.d.ts +2 -0
  46. package/dist/provider/cli/meta.d.ts +10 -2
  47. package/dist/provider/errors.d.ts +1 -0
  48. package/dist/provider/idle-watchdog.d.ts +19 -0
  49. package/dist/provider/models.d.ts +23 -0
  50. package/dist/provider/order.d.ts +1 -0
  51. package/dist/provider/parse-usage.d.ts +6 -0
  52. package/dist/provider/provider-selection.d.ts +8 -0
  53. package/dist/repository/agent-suggestion.repository.d.ts +34 -0
  54. package/dist/repository/index.d.ts +7 -1
  55. package/dist/repository/index.js +122 -75
  56. package/dist/repository/notification.repository.d.ts +58 -0
  57. package/dist/repository/task.repository.d.ts +79 -0
  58. package/dist/repository/thread.repository.d.ts +16 -2
  59. package/dist/repository/usage-report.repository.d.ts +27 -0
  60. package/dist/schema/agent-suggestions.d.ts +199 -0
  61. package/dist/schema/index.d.ts +3 -0
  62. package/dist/schema/notifications.d.ts +303 -0
  63. package/dist/schema/usage-reports.d.ts +252 -0
  64. package/dist/testing/index.d.ts +2 -0
  65. package/dist/testing/index.js +1 -1
  66. package/dist/types/index.d.ts +141 -3
  67. package/dist/utils/id.d.ts +1 -1
  68. package/package.json +3 -2
  69. package/templates/agents/default.yaml +175 -117
  70. package/templates/documents/crewx-manual.md +138 -138
package/dist/index.js CHANGED
@@ -1,64 +1,59 @@
1
- 'use strict';var so=require('fs'),G=require('path'),child_process=require('child_process'),string_decoder=require('string_decoder'),sdk=require('@agentclientprotocol/sdk'),jsYaml=require('js-yaml'),zod=require('zod'),module$1=require('module'),ge=require('handlebars'),promises=require('fs/promises'),crypto$1=require('crypto'),events=require('events'),async_hooks=require('async_hooks'),drizzleOrm=require('drizzle-orm'),Ci=require('os'),sqliteCore=require('drizzle-orm/sqlite-core'),mcp_js=require('@modelcontextprotocol/sdk/server/mcp.js'),webStandardStreamableHttp_js=require('@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js'),perf_hooks=require('perf_hooks');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var so__namespace=/*#__PURE__*/_interopNamespace(so);var G__namespace=/*#__PURE__*/_interopNamespace(G);var ge__namespace=/*#__PURE__*/_interopNamespace(ge);var Ci__default=/*#__PURE__*/_interopDefault(Ci);var ir=Object.defineProperty;var Yo=Object.getOwnPropertyDescriptor;var Qo=Object.getOwnPropertyNames;var Zo=Object.prototype.hasOwnProperty;var J=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var N=(n,e)=>()=>(n&&(e=n(n=0)),e);var bt=(n,e)=>{for(var t in e)ir(n,t,{get:e[t],enumerable:true});},es=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Qo(e))!Zo.call(n,o)&&o!==t&&ir(n,o,{get:()=>e[o],enumerable:!(r=Yo(e,o))||r.enumerable});return n};var wn=n=>es(ir({},"__esModule",{value:true}),n);var c=N(()=>{});function Mt(n){return typeof n!="string"?void 0:n.trim()||void 0}function Nt(n){return Mt(n)?.toLowerCase()??""}function Ge(n){try{return so.statSync(n).isFile()}catch{return false}}function vn(n,e){if(n.includes("/")||n.includes("\\")||G__namespace.default.isAbsolute(n))return n;let r=(e.PATH??e.Path??process.env.PATH??process.env.Path??"").split(";").map(a=>a.trim()).filter(Boolean),o=G__namespace.default.extname(n).length>0,s=e.PATHEXT??e.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",i=o?[""]:s.split(";").map(a=>a.trim()).filter(Boolean).map(a=>a.startsWith(".")?a:`.${a}`);for(let a of r)for(let d of i){let l=Nt(d),u=d.toUpperCase();for(let p of [d,l,u]){let f=G__namespace.default.join(a,`${n}${p}`);if(Ge(f))return f}}return n}function ps(n){if(!Ge(n))return null;try{let e=so.readFileSync(n,"utf8"),t=G__namespace.default.dirname(n),r=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let u=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!u)continue;let p=u.replace(/[\\/]+/g,G__namespace.default.sep).replace(/^[\\/]+/,""),f=G__namespace.default.resolve(t,p);Ge(f)&&r.push(f);}let o=[],s=new Map;for(let a of e.matchAll(/SET\s+"(\w+)=%~?dp0%?[\\/]?([^"]+)"/gi)){let d=a[1].toUpperCase(),l=a[2].trim().replace(/[\\/]+/g,G__namespace.default.sep).replace(/^[\\/]+/,"");s.set(d,G__namespace.default.resolve(t,l));}for(let a of e.split(/\r?\n/))if(a.includes("%*"))for(let d of a.matchAll(/"%(\w+)%"/g)){let l=s.get(d[1].toUpperCase());l&&Ge(l)&&o.push(l);}let i=a=>a.find(d=>{let l=Nt(G__namespace.default.basename(d));return l!=="node.exe"&&l!=="node"})??null;return i(o)??i(r)}catch{return null}}function gs(n,e){if(typeof e=="string")return Mt(e)||null;if(!e||typeof e!="object")return null;if(n){let t=e[n],r=typeof t=="string"?Mt(t):void 0;if(r)return r}for(let t of Object.values(e)){let r=typeof t=="string"?Mt(t):void 0;if(r)return r}return null}function ms(n,e){if(!e)return null;let t=G__namespace.default.dirname(n),r=[G__namespace.default.resolve(t,"..",e),G__namespace.default.resolve(t,"node_modules",e)];for(let o of r){let s=G__namespace.default.join(o,"package.json");if(Ge(s))try{let i=JSON.parse(so.readFileSync(s,"utf8")),a=gs(e,i.bin);if(!a)continue;let d=G__namespace.default.resolve(o,a);if(Ge(d))return d}catch{}}return null}function fs(n){let e=n.platform??process.platform,t=n.env??process.env,r=n.execPath??process.execPath;if(e!=="win32")return {command:n.command,leadingArgv:[],resolution:"direct"};let o=vn(n.command,t),s=Nt(G__namespace.default.extname(o));if(s===".js"||s===".cjs"||s===".mjs")return {command:r,leadingArgv:[o],resolution:"node-entrypoint",windowsHide:true};if(s===".cmd"||s===".bat"){let i=ps(o)??ms(o,n.packageName);return i?Nt(G__namespace.default.extname(i))===".exe"?{command:i,leadingArgv:[],resolution:"exe-entrypoint",windowsHide:true}:{command:r,leadingArgv:[i],resolution:"node-entrypoint",windowsHide:true}:{command:o,leadingArgv:[],resolution:"unresolved-wrapper"}}return {command:o,leadingArgv:[],resolution:"direct"}}function ys(n){if(n.candidate.resolution!=="unresolved-wrapper")return {command:n.candidate.command,leadingArgv:n.candidate.leadingArgv,resolution:n.candidate.resolution,windowsHide:n.candidate.windowsHide};if(n.allowShellFallback===true)return {command:n.candidate.command,leadingArgv:[],resolution:"shell-fallback",shell:true};throw new Error(`${G__namespace.default.basename(n.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function nt(n){let e=fs(n);return ys({candidate:e,allowShellFallback:n.allowShellFallback})}function ot(n,e){return {command:n.command,argv:[...n.leadingArgv,...e],resolution:n.resolution,shell:n.shell,windowsHide:n.windowsHide}}var Dt=N(()=>{c();});function hs(n){if(n.type!=="usage"||!("input_tokens"in n))return null;let e=Number(n.input_tokens??0),t=Number(n.output_tokens??0),o="cache_read_input_tokens"in n?Number(n.cache_read_input_tokens):void 0,s="cached_input_tokens"in n?Number(n.cached_input_tokens):void 0,i=o!==void 0?o:s??0;return {inputTokens:o!==void 0?e+o:e,outputTokens:t,cachedInputTokens:i}}function ws(n){let e=n.usage;if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(!("input_tokens"in t))return null;let r=Number(t.input_tokens??0),o=Number(t.output_tokens??0),i="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,a="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,d=i!==void 0?i:a??0;return {inputTokens:i!==void 0?r+i:r,outputTokens:o,cachedInputTokens:d}}function xs(n){if(n.type!=="step_finish")return null;let t=n.part?.tokens;if(!t)return null;let r=Number(t.input??0),o=Number(t.output??0),s=t.cache,i=s?Number(s.read??0):0;return {inputTokens:r+i,outputTokens:o,cachedInputTokens:i}}function ye(n){if(!n||!n.trim())return;let e=null;for(let t of n.split(`
2
- `))if(t.trim())try{let r=JSON.parse(t),o=hs(r)??ws(r)??xs(r);o&&(e=o);}catch{}return e??void 0}var Xe=N(()=>{c();});exports.ProviderError=void 0;var Ie,st=N(()=>{c();exports.ProviderError=class extends Error{constructor(t,r,o){super(t);this.providerStr=r;this.name="ProviderError",this.code=o?.code??"UNKNOWN",this.kind=o?.kind??(this.code==="UNKNOWN"?"transient":void 0),this.retryAfterMs=o?.retryAfterMs;}providerStr;code;kind;retryAfterMs},Ie=class extends exports.ProviderError{constructor(e,t){super(e,t,{code:"TIMEOUT_TOTAL",kind:"permanent"}),this.name="TotalTimeoutError";}};});exports.RateLimitError=void 0;var dr=N(()=>{c();st();exports.RateLimitError=class extends exports.ProviderError{name="RateLimitError";constructor(e,t="cli/claude"){super(e,t,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function se(n){return /crewx\s+(x|execute)\s/.test(n)}function ie(n,e){let t=e.match(/@(\S+)/);return {timestamp:n,type:"agent_call",targetAgent:t?.[1]?.replace(/["']/g,""),toolInput:e}}var Je=N(()=>{c();});function ae(n){if(typeof n=="string")return n;if(!n||typeof n!="object")return JSON.stringify(n??{});let e=n;return typeof e.command=="string"?e.command:typeof e.file_path=="string"?e.file_path:typeof e.filePath=="string"?e.filePath:typeof e.path=="string"?e.path:typeof e.query=="string"?e.query:typeof e.pattern=="string"?e.pattern:typeof e.url=="string"?e.url:typeof e.prompt=="string"?e.prompt.length>200?e.prompt.slice(0,200)+"\u2026":e.prompt:typeof e.description=="string"?e.description:JSON.stringify(e)}var Ye=N(()=>{c();});function Lt(n){if(!n)return {};let e=n.match(/^(.+?)\[([^\]]+)\]$/);if(e){let t=e[2].toLowerCase();return ks.has(t)?{model:e[1],effort:e[2]}:{model:n}}return {model:n}}function An(n){switch(n){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["--sandbox","read-only"];case "agent":return ["--sandbox","workspace-write"];default:return []}}function Rn(n){return n?["-c",`model_reasoning_effort=${n}`]:[]}function En(n){if(!n)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),t=n==="auto"?"default":n;return e.has(t)?["--permission-mode",t]:[]}var ks,lr=N(()=>{c();ks=new Set(["minimal","low","medium","high","xhigh"]);});function _s(n,e){let t=e.type;if(t==="text"){let r=String(e.text||"");return r?{timestamp:n,type:"text",content:r}:null}if(t==="thinking"){let r=String(e.thinking||"");return {timestamp:n,type:"thinking",content:r||"(thinking)"}}if(t==="tool_use"){let r=String(e.name||""),o=e.id,s=e.input,i=ae(s);return r==="Bash"&&se(i)?ie(n,i):{timestamp:n,type:"tool_use",toolUseId:o,toolName:r,toolInput:i}}if(t==="tool_result"){let r=!!e.is_error,o=e.tool_use_id,s=e.output??e.content??"",i;return typeof s=="string"?i=s:Array.isArray(s)?i=s.filter(a=>a.type==="text"&&typeof a.text=="string").map(a=>a.text).join(`
3
- `):i=JSON.stringify(s),{timestamp:n,type:"tool_result",toolUseId:o,resultPreview:i,isError:r}}return null}var Cn;exports.claudeAdapter=void 0;var cr=N(()=>{c();dr();Je();Ye();lr();Cn=false,exports.claudeAdapter={command:"claude",meta:{displayName:"Claude",capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=Lt(e.model);(e.effort??o)&&!Cn&&(Cn=true,console.warn("[crewx] claude-cli: effort option has no equivalent CLI flag and will be ignored"));let i=En(e.mode),a=r?["--model",r]:[],d=e.resumeSessionId?["--resume",e.resumeSessionId]:[];if(e.additionalArgs!==void 0){let u=[...e.additionalArgs];return u.indexOf("-p")!==-1?{args:["--output-format","stream-json","--verbose",...d,...i,...a,...u],stdinMessage:n}:{args:["--output-format","stream-json","--verbose",...d,...i,...a,...u],stdinMessage:n}}return {args:["-p","--output-format","stream-json","--verbose",...d,...i,...a],stdinMessage:n}},extractText(n){let e=n.split(`
4
- `).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant"&&Array.isArray(s.message?.content))for(let i of s.message.content)i.type==="text"&&typeof i.text=="string"&&i.text.trim()&&t.push(i.text.trim());s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t.join(`
1
+ 'use strict';var rs=require('fs'),K=require('path'),child_process=require('child_process'),string_decoder=require('string_decoder'),sdk=require('@agentclientprotocol/sdk'),jsYaml=require('js-yaml'),zod=require('zod'),module$1=require('module'),_e=require('handlebars'),promises=require('fs/promises'),crypto$1=require('crypto'),events=require('events'),async_hooks=require('async_hooks'),drizzleOrm=require('drizzle-orm'),qa=require('os'),sqliteCore=require('drizzle-orm/sqlite-core'),mcp_js=require('@modelcontextprotocol/sdk/server/mcp.js'),webStandardStreamableHttp_js=require('@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js'),perf_hooks=require('perf_hooks');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var rs__namespace=/*#__PURE__*/_interopNamespace(rs);var K__namespace=/*#__PURE__*/_interopNamespace(K);var _e__namespace=/*#__PURE__*/_interopNamespace(_e);var qa__default=/*#__PURE__*/_interopDefault(qa);var $r=Object.defineProperty;var Zs=Object.getOwnPropertyDescriptor;var ei=Object.getOwnPropertyNames;var ti=Object.prototype.hasOwnProperty;var te=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var M=(n,e)=>()=>(n&&(e=n(n=0)),e);var tr=(n,e)=>{for(var t in e)$r(n,t,{get:e[t],enumerable:true});},ri=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ei(e))!ti.call(n,o)&&o!==t&&$r(n,o,{get:()=>e[o],enumerable:!(r=Zs(e,o))||r.enumerable});return n};var io=n=>ri($r({},"__esModule",{value:true}),n);var p=M(()=>{});function ir(n){return typeof n!="string"?void 0:n.trim()||void 0}function ar(n){return ir(n)?.toLowerCase()??""}function pt(n){try{return rs.statSync(n).isFile()}catch{return false}}function yi(n,e){if(n===e)return true;let t=K__namespace.default.relative(n,e);return t!==""&&!t.startsWith("..")&&!K__namespace.default.isAbsolute(t)}function hi(n,e){if(K__namespace.default.basename(n)!==".bin")return false;let t=K__namespace.default.dirname(n);if(K__namespace.default.basename(t)!=="node_modules")return false;let r=K__namespace.default.dirname(t);return yi(r,e)}function Et(n,e={}){if(n.includes("/")||n.includes("\\")||K__namespace.default.isAbsolute(n))return n;let t=e.platform??process.platform,r=e.env??process.env,o=K__namespace.default.resolve(e.cwd??process.cwd()),s=(e.resolution??"global_first")==="global_first",i=r.PATH??r.Path??process.env.PATH??process.env.Path??"",a=t==="win32"?";":":",d=i.split(a).map(g=>g.trim()).filter(Boolean),l=K__namespace.default.extname(n).length>0,c=r.PATHEXT??r.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",f=t==="win32"?l?[""]:c.split(";").map(g=>g.trim()).filter(Boolean).map(g=>g.startsWith(".")?g:`.${g}`):[""];for(let g of d){let m=K__namespace.default.resolve(o,g);if(!(s&&hi(m,o)))for(let w of f){let k=ar(w),v=w.toUpperCase();for(let h of [w,k,v]){let _=K__namespace.default.join(m,`${n}${h}`);if(pt(_))return _}}}return n}function wi(n,e){return Et(n,{env:e,platform:"win32",resolution:"local_first"})}function _i(n){if(!pt(n))return null;try{let e=rs.readFileSync(n,"utf8"),t=K__namespace.default.dirname(n),r=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let c=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!c)continue;let f=c.replace(/[\\/]+/g,K__namespace.default.sep).replace(/^[\\/]+/,""),g=K__namespace.default.resolve(t,f);pt(g)&&r.push(g);}let o=[],s=new Map;for(let a of e.matchAll(/SET\s+"(\w+)=%~?dp0%?[\\/]?([^"]+)"/gi)){let d=a[1].toUpperCase(),l=a[2].trim().replace(/[\\/]+/g,K__namespace.default.sep).replace(/^[\\/]+/,"");s.set(d,K__namespace.default.resolve(t,l));}for(let a of e.split(/\r?\n/))if(a.includes("%*"))for(let d of a.matchAll(/"%(\w+)%"/g)){let l=s.get(d[1].toUpperCase());l&&pt(l)&&o.push(l);}let i=a=>a.find(d=>{let l=ar(K__namespace.default.basename(d));return l!=="node.exe"&&l!=="node"})??null;return i(o)??i(r)}catch{return null}}function vi(n,e){if(typeof e=="string")return ir(e)||null;if(!e||typeof e!="object")return null;if(n){let t=e[n],r=typeof t=="string"?ir(t):void 0;if(r)return r}for(let t of Object.values(e)){let r=typeof t=="string"?ir(t):void 0;if(r)return r}return null}function ki(n,e){if(!e)return null;let t=K__namespace.default.dirname(n),r=[K__namespace.default.resolve(t,"..",e),K__namespace.default.resolve(t,"node_modules",e)];for(let o of r){let s=K__namespace.default.join(o,"package.json");if(pt(s))try{let i=JSON.parse(rs.readFileSync(s,"utf8")),a=vi(e,i.bin);if(!a)continue;let d=K__namespace.default.resolve(o,a);if(pt(d))return d}catch{}}return null}function xi(n){let e=n.platform??process.platform,t=n.env??process.env,r=n.execPath??process.execPath,o=n.cwd,s=n.resolution;if(e!=="win32")return {command:Et(n.command,{cwd:o,env:t,platform:e,resolution:s}),leadingArgv:[],resolution:"direct"};let i=Et(n.command,{cwd:o,env:t,platform:e,resolution:s}),a=ar(K__namespace.default.extname(i));if(a===".js"||a===".cjs"||a===".mjs")return {command:r,leadingArgv:[i],resolution:"node-entrypoint",windowsHide:true};if(a===".cmd"||a===".bat"){let d=_i(i)??ki(i,n.packageName);return d?ar(K__namespace.default.extname(d))===".exe"?{command:d,leadingArgv:[],resolution:"exe-entrypoint",windowsHide:true}:{command:r,leadingArgv:[d],resolution:"node-entrypoint",windowsHide:true}:{command:i,leadingArgv:[],resolution:"unresolved-wrapper"}}return {command:i,leadingArgv:[],resolution:"direct"}}function Ai(n){if(n.candidate.resolution!=="unresolved-wrapper")return {command:n.candidate.command,leadingArgv:n.candidate.leadingArgv,resolution:n.candidate.resolution,windowsHide:n.candidate.windowsHide};if(n.allowShellFallback===true)return {command:n.candidate.command,leadingArgv:[],resolution:"shell-fallback",shell:true};throw new Error(`${K__namespace.default.basename(n.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function Ke(n){let e=xi(n);return Ai({candidate:e,allowShellFallback:n.allowShellFallback})}function Ge(n,e){return {command:n.command,argv:[...n.leadingArgv,...e],resolution:n.resolution,shell:n.shell,windowsHide:n.windowsHide}}var gt=M(()=>{p();});function Ei(n){if(n.type!=="usage"||!("input_tokens"in n))return null;let e=Number(n.input_tokens??0),t=Number(n.output_tokens??0),o="cache_read_input_tokens"in n?Number(n.cache_read_input_tokens):void 0,s="cached_input_tokens"in n?Number(n.cached_input_tokens):void 0,i=o!==void 0?o:s??0;return {inputTokens:o!==void 0?e+o:e,outputTokens:t,cachedInputTokens:i}}function Ri(n){let e=n.usage;if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(!("input_tokens"in t))return null;let r=Number(t.input_tokens??0),o=Number(t.output_tokens??0),i="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,a="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,d=i!==void 0?i:a??0;return {inputTokens:i!==void 0?r+i:r,outputTokens:o,cachedInputTokens:d}}function Ci(n){if(n.type!=="step_finish")return null;let t=n.part?.tokens;if(!t)return null;let r=Number(t.input??0),o=Number(t.output??0),s=t.cache,i=s?Number(s.read??0):0;return {inputTokens:r+i,outputTokens:o,cachedInputTokens:i}}function uo(n){let e=new Map,t;for(let s of n.split(`
2
+ `))if(s.trim())try{let i=JSON.parse(s);if(i.type!=="assistant")continue;let a=i.message,d=a?.id,l=a?.usage;if(typeof d!="string"||!l)continue;let c=Number(l.input_tokens??0),f=Number(l.cache_read_input_tokens??0);e.set(d,{inputTokens:c+f,cachedInputTokens:f});let g=a?.model;typeof g=="string"&&g&&(t=g);}catch{}if(e.size===0)return;let r=0,o=0;for(let s of e.values())r+=s.inputTokens,o+=s.cachedInputTokens;return {inputTokens:r,cachedInputTokens:o,model:t}}function Ce(n){if(!n||!n.trim())return;let e=null,t=null;for(let r of n.split(`
3
+ `))if(r.trim())try{let o=JSON.parse(r),s=Ci(o);if(s){t||(t={inputTokens:0,outputTokens:0,cachedInputTokens:0}),t.inputTokens+=s.inputTokens,t.outputTokens+=s.outputTokens,t.cachedInputTokens+=s.cachedInputTokens;continue}let i=Ei(o)??Ri(o);i&&(e=i);}catch{}return t||(e??void 0)}var Ve=M(()=>{p();});exports.ProviderError=void 0;var Je,Xe,Rt=M(()=>{p();exports.ProviderError=class extends Error{constructor(t,r,o){super(t);this.providerStr=r;this.name="ProviderError",this.code=o?.code??"UNKNOWN",this.kind=o?.kind??(this.code==="UNKNOWN"?"transient":void 0),this.retryAfterMs=o?.retryAfterMs;}providerStr;code;kind;retryAfterMs;stdout},Je=class extends exports.ProviderError{constructor(e,t){super(e,t,{code:"TIMEOUT_IDLE",kind:"permanent"}),this.name="IdleTimeoutError";}},Xe=class extends exports.ProviderError{constructor(e,t){super(e,t,{code:"TIMEOUT_TOTAL",kind:"permanent"}),this.name="TotalTimeoutError";}};});exports.RateLimitError=void 0;var jr=M(()=>{p();Rt();exports.RateLimitError=class extends exports.ProviderError{name="RateLimitError";constructor(e,t="cli/claude"){super(e,t,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function le(n){return /crewx\s+(x|execute)\s/.test(n)}function ce(n,e){let t=e.match(/@(\S+)/);return {timestamp:n,type:"agent_call",targetAgent:t?.[1]?.replace(/["']/g,""),toolInput:e}}var ft=M(()=>{p();});function ue(n){if(typeof n=="string")return n;if(!n||typeof n!="object")return JSON.stringify(n??{});let e=n;return typeof e.command=="string"?e.command:typeof e.file_path=="string"?e.file_path:typeof e.filePath=="string"?e.filePath:typeof e.path=="string"?e.path:typeof e.query=="string"?e.query:typeof e.pattern=="string"?e.pattern:typeof e.url=="string"?e.url:typeof e.prompt=="string"?e.prompt.length>200?e.prompt.slice(0,200)+"\u2026":e.prompt:typeof e.description=="string"?e.description:JSON.stringify(e)}var mt=M(()=>{p();});function dr(n){if(!n)return {};let e=n.match(/^(.+?)\[([^\]]+)\]$/);if(e){let t=e[2].toLowerCase();return Ti.has(t)?{model:e[1],effort:e[2]}:{model:n}}return {model:n}}function po(n){switch(n){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["--sandbox","read-only"];case "agent":return ["--sandbox","workspace-write"];default:return []}}function go(n){switch(n){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["-c","sandbox_mode=read-only"];case "agent":return ["-c","sandbox_mode=workspace-write"];default:return []}}function fo(n){return n?["-c",`model_reasoning_effort=${n}`]:[]}function mo(n){if(!n)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),t=n==="auto"?"default":n;return e.has(t)?["--permission-mode",t]:[]}function yo(n){return n?new Set(["low","medium","high","xhigh","max"]).has(n)?["--effort",n]:[]:[]}var Ti,Fr=M(()=>{p();Ti=new Set(["minimal","low","medium","high","xhigh","max"]);});var Hr,ho=M(()=>{p();Hr={claude:{models:[{id:"claude-fable-5",name:"Claude Fable 5"},{id:"claude-opus-5",name:"Claude Opus 5"},{id:"claude-sonnet-5",name:"Claude Sonnet 5"},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8 (Extended)"},{id:"claude-opus-4-8",name:"Claude Opus 4.8"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7 (Extended)"},{id:"claude-opus-4-7",name:"Claude Opus 4.7"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6 (Extended)"},{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6 (Extended)"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5"}],modes:[{id:"default",name:"Default"},{id:"acceptEdits",name:"Accept Edits"},{id:"plan",name:"Plan"},{id:"auto",name:"Auto"},{id:"dontAsk",name:"Don't Ask"},{id:"bypassPermissions",name:"Bypass Permissions"}],effort:["low","medium","high"],modelOverrides:{"claude-fable-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-opus-4-6":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}}},codex:{models:[{id:"gpt-5.6-sol",name:"GPT-5.6 Sol"},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra"},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna"},{id:"gpt-5.5",name:"GPT-5.5"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark"}],modes:[{id:"agent",name:"Agent"},{id:"read-only",name:"Read Only"},{id:"plan",name:"Plan"},{id:"agent-full-access",name:"Agent Full Access"},{id:"yolo",name:"YOLO"}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-5.6-sol":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["minimal","low","medium","high","xhigh"],defaultEffort:"high"}}},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"gpt-5.5",name:"GPT-5.5"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro"}],modes:[{id:"interactive",name:"Interactive"},{id:"plan",name:"Plan"},{id:"autopilot",name:"Autopilot"}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{}},antigravity:{models:[{id:"Gemini 3.5 Flash (Medium)",name:"Gemini 3.5 Flash (Medium)"},{id:"Gemini 3.5 Flash (High)",name:"Gemini 3.5 Flash (High)"},{id:"Gemini 3.5 Flash (Low)",name:"Gemini 3.5 Flash (Low)"},{id:"Gemini 3.1 Pro (Low)",name:"Gemini 3.1 Pro (Low)"},{id:"Gemini 3.1 Pro (High)",name:"Gemini 3.1 Pro (High)"},{id:"Claude Sonnet 4.6 (Thinking)",name:"Claude Sonnet 4.6 (Thinking)"},{id:"Claude Opus 4.6 (Thinking)",name:"Claude Opus 4.6 (Thinking)"},{id:"GPT-OSS 120B (Medium)",name:"GPT-OSS 120B (Medium)"}],modes:[],effort:[],modelOverrides:{}}},Object.fromEntries(Object.entries(Hr).map(([n,e])=>[n,e.models]));});function wo(){return {models:[],modes:[],effort:[],modelOverrides:{}}}function Pi(n){return Array.isArray(n)?{models:n,modes:[],effort:[],modelOverrides:{}}:n?{models:n.models??[],modes:n.modes??[],effort:n.effort??[],modelOverrides:n.modelOverrides??{}}:wo()}function Wr(n){qr=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,Pi(t)]));}function bi(){qr={};}function Qe(n){return yt(n).models}function yt(n){return qr[n]??Hr[n]??wo()}function Ct(n){return yt(n).modes}function Tt(n,e){let t=yt(n);return e?t.modelOverrides[e]?.effort??t.effort:t.effort}function _o(n){return yt(n).modelOverrides}function Pt(){return Qe("claude")}function Br(){return Qe("codex")}function zr(){return Qe("copilot")}function Kr(){return Qe("antigravity")}function bt(n,e){let t=new Map;for(let r of [...n,...e]){let o=t.get(r.id);(!o||!o.name&&r.name)&&t.set(r.id,r);}return Array.from(t.values())}var qr,ye=M(()=>{p();ho();qr={};});function Ii(n){let t=n.message?.content;return Array.isArray(t)?t.map(r=>typeof r.text=="string"?r.text.trim():"").filter(Boolean).join(`
5
4
 
6
- `):r||n.trim()},extractFailure(n){if(n.includes('"rate_limit_event"'))try{let e=JSON.parse(n);if(e.type==="rate_limit_event"){let t=e.rate_limit_info??{};if(t.status==="rejected")return new exports.RateLimitError(`Claude rate limit: ${t.rateLimitType??"unknown"} (status: ${t.status})`)}}catch{}return null},parseResultMeta(n){let e=n.split(`
7
- `);for(let t of e)if(t.trim())try{let r=JSON.parse(t);if(r.type==="result"){let o=r.usage,s=o?{inputTokens:Number(o.input_tokens??0)+Number(o.cache_read_input_tokens??0),outputTokens:Number(o.output_tokens??0),cachedInputTokens:Number(o.cache_read_input_tokens??0),costUsd:Number(r.total_cost_usd??0)}:null,i=r.modelUsage,a=i?Object.keys(i)[0]??null:null;return {usage:s,model:a}}}catch{}return {usage:null,model:null}},parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(r!=="assistant"&&r!=="user")return [];let s=t.message?.content;if(!Array.isArray(s))return [];let i=e??new Date().toISOString(),a=[];for(let d of s){let l=_s(i,d);l&&a.push(l);}return a}};});exports.copilotAdapter=void 0;var ur=N(()=>{c();Xe();Je();Ye();exports.copilotAdapter={command:"copilot",buildArgs(n,e,t){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),{args:r,stdinMessage:n}},extractText(n){let e=n.split(`
8
- `).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant.message"&&typeof s.data?.content=="string"){let i=s.data.content;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t.join(`
9
-
10
- `):r||n.trim()},parseResultMeta(n){let e=ye(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(!r.startsWith("tool.execution")&&!r.startsWith("assistant.")&&r!=="user.message")return [];let o=t.data;if(!o)return [];let s=e??new Date().toISOString(),i=o.toolCallId;if(r==="tool.execution_start"){let a=String(o.toolName||""),d=o.arguments,l=ae(d);return (a==="bash"||a==="Bash")&&se(l)?[ie(s,l)]:[{timestamp:s,type:"tool_use",toolName:a,toolInput:l,...i&&{toolUseId:i}}]}if(r==="tool.execution_complete"){let a=o.error;if(a)return [{timestamp:s,type:"tool_result",isError:true,resultPreview:String(a.message||""),...i&&{toolUseId:i}}];let d=o.result,l=String(d?.content||"");return [{timestamp:s,type:"tool_result",resultPreview:l,isError:false,...i&&{toolUseId:i}}]}if(r==="assistant.message"){let a=String(o.content||"");return a?[{timestamp:s,type:"text",content:a}]:[]}return []}};});function pr(n){return n.replace(/\}\s*\{/g,`}
11
- {`).split(`
12
- `).map(e=>e.trim()).filter(Boolean)}function As(n){switch(n){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];default:return []}}function Rs(n,e){let t=e.type;if(t==="command_execution"){let r=String(e.command||"");return se(r)?[ie(n,r)]:[{timestamp:n,type:"tool_use",toolName:"Bash",toolInput:r}]}return t==="web_search"?[]:t==="file_change"?[]:[]}function Es(n,e){let t=e.type;if(t==="message"||t==="text"){let r=e.content;if(Array.isArray(r))for(let o of r){let s=Cs(n,o);if(s)return s}if(typeof e.text=="string")return {timestamp:n,type:"text",content:e.text}}if(t==="agent_message"&&typeof e.text=="string")return {timestamp:n,type:"text",content:e.text};if(t==="reasoning")return {timestamp:n,type:"text",content:String(e.text||"")};if(t==="command_execution"){let r=String(e.aggregated_output||e.output||""),o=!!e.is_error;return {timestamp:n,type:"tool_result",resultPreview:r,isError:o}}if(t==="tool_use"){let r=String(e.name||e.tool_name||""),o=e.input,s=ae(o);return r==="Bash"&&se(s)?ie(n,s):{timestamp:n,type:"tool_use",toolName:r,toolInput:s}}if(t==="tool_result"){let r=!!e.is_error,o=String(e.output||e.content||"");return {timestamp:n,type:"tool_result",resultPreview:o,isError:r}}if(t==="web_search"){let r=e.action,o;if(r?.type==="search"){let s=r.queries;o=String(r.query||"")||(s?.length?s.join(", "):"")||String(e.query||"");}else o=e.query?"open: "+String(e.query):"";return o?{timestamp:n,type:"tool_use",toolName:"WebSearch",toolInput:o}:null}if(t==="file_change"){let r=e.changes;if(!Array.isArray(r)||r.length===0)return null;let o=r.map(i=>String(i.path||"")).filter(Boolean);if(o.length===0)return null;let s=o.length===1?o[0]:`${o.slice(0,2).join(", ")}${o.length>2?` (+${o.length-2})`:""}`;return {timestamp:n,type:"tool_use",toolName:"Edit",toolInput:s}}return null}function Cs(n,e){let t=e.type;if(t==="text")return {timestamp:n,type:"text",content:String(e.text||"")};if(t==="tool_use"){let r=String(e.name||""),o=e.input,s=ae(o);return r==="Bash"&&se(s)?ie(n,s):{timestamp:n,type:"tool_use",toolName:r,toolInput:s}}return null}var vs;exports.codexAdapter=void 0;var gr=N(()=>{c();Xe();Je();Ye();lr();vs=new Set(["thread.started","turn.started","turn.completed","item.updated"]);exports.codexAdapter={command:"codex",meta:{displayName:"Codex",capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=Lt(e.model),s=e.effort??o,i=e.resumeSessionId?As(e.mode):An(e.mode),a=Rn(s),d=r?["-m",r]:[],l=e.additionalArgs??[],u=l.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...u,...i,...a,...d,...l,e.resumeSessionId,"-"],stdinMessage:n}:{args:["exec",...u,...i,...a,...d,...l],stdinMessage:n}},extractText(n){let e=pr(n),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="item.completed"&&(s.item?.type==="message"||s.item?.type==="agent_message")&&typeof s.item?.text=="string"){let i=s.item.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t.join(`
13
-
14
- `):r||n.trim()},parseResultMeta(n){let e=ye(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t=pr(n),r=e??new Date().toISOString(),o=[];for(let s of t){let i;try{i=JSON.parse(s);}catch{continue}let a=i.type;if(!a||!a.startsWith("item.")&&!a.startsWith("turn.")&&!a.startsWith("thread."))continue;let d=i.item;if(d){if(a==="item.started"){o.push(...Rs(r,d));continue}if(a==="item.completed"){let l=Es(r,d);l&&o.push(l);continue}}}return o},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}")||pr(e).length!==1)return false;try{let o=JSON.parse(e).type;return o?vs.has(o):!1}catch{return false}}};});function Ss(n){return n?n==="default"||n==="build"?{agent:"build",skipPermissions:false}:n==="plan"?{agent:"plan",skipPermissions:false}:bs.has(n)?{agent:"build",skipPermissions:true}:{agent:Ps.has(n)?n:"build",skipPermissions:false}:{agent:void 0,skipPermissions:false}}function mr(n){return n.replace(/\}\s*\{/g,`}
15
- {`).split(`
16
- `).map(e=>e.trim()).filter(Boolean)}var Ts,bs,Ps;exports.opencodeAdapter=void 0;var fr=N(()=>{c();Xe();Ye();Ts=new Set(["step_start","step_finish"]),bs=new Set(["bypassPermissions","yolo","agent-full-access"]),Ps=new Set(["build","plan"]);exports.opencodeAdapter={command:"opencode",buildArgs(n,e,t){let r=e.additionalArgs,o=r!==void 0?[...r]:["run"];o.includes("--format")||o.push("--format","json");let{agent:s,skipPermissions:i}=Ss(e.mode);return o.includes("--agent")||s!==void 0&&o.push("--agent",s),t&&i&&!o.includes("--dangerously-skip-permissions")&&o.push("--dangerously-skip-permissions"),e.effort!==void 0&&!o.includes("--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model),{args:o,stdinMessage:n}},extractText(n){let e=mr(n),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="text"&&typeof s.part?.text=="string"){let i=s.part.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t.join(""):r||n.trim()},parseResultMeta(n){let e=ye(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t=mr(n),r=e??new Date().toISOString(),o=[];for(let s of t){let i;try{i=JSON.parse(s);}catch{continue}let a=i.type;if(a){if(a==="text"){let l=i.part?.text;l&&o.push({timestamp:r,type:"text",content:l});continue}if(a==="tool_use"){let d=i.part;if(!d)continue;let l=String(d.tool||""),u=String(d.callID||""),p=d.state,f=String(p?.status||""),g=p?.input,h=ae(g);if(o.push({timestamp:r,type:"tool_use",toolName:l,toolUseId:u,toolInput:h}),f==="completed"&&p?.output!==void 0){let x=p.output,v=typeof x=="string"?x:JSON.stringify(x);o.push({timestamp:r,type:"tool_result",toolUseId:u,resultPreview:v,isError:false});}else f==="error"&&o.push({timestamp:r,type:"tool_result",toolUseId:u,resultPreview:String(p?.error||"tool error"),isError:true});continue}}}return o},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}")||mr(e).length!==1)return false;try{let o=JSON.parse(e).type;return o?Ts.has(o):!1}catch{return false}}};});var Is,yr,hr=N(()=>{c();st();Is=[{id:"Gemini 3.5 Flash (Medium)",name:"Gemini 3.5 Flash (Medium)"},{id:"Gemini 3.5 Flash (High)",name:"Gemini 3.5 Flash (High)"},{id:"Gemini 3.5 Flash (Low)",name:"Gemini 3.5 Flash (Low)"},{id:"Gemini 3.1 Pro (Low)",name:"Gemini 3.1 Pro (Low)"},{id:"Gemini 3.1 Pro (High)",name:"Gemini 3.1 Pro (High)"},{id:"Claude Sonnet 4.6 (Thinking)",name:"Claude Sonnet 4.6 (Thinking)"},{id:"Claude Opus 4.6 (Thinking)",name:"Claude Opus 4.6 (Thinking)"},{id:"GPT-OSS 120B (Medium)",name:"GPT-OSS 120B (Medium)"}],yr={command:"agy",meta:{displayName:"Antigravity",models:Is,defaultTimeoutMs:{query:12e4,execute:3e5}},buildArgs(n,e,t){if(e.additionalArgs!==void 0){let o=[...e.additionalArgs];return o.includes("--print")||o.unshift("--print",n),e.model&&o.push("--model",e.model),o.push("--dangerously-skip-permissions"),{args:o}}let r=["--print",n,"--dangerously-skip-permissions"];return e.model&&r.push("--model",e.model),{args:r}},extractText(n){let e=n.trim();if(!e)throw new exports.ProviderError("Antigravity CLI returned empty output with exit code 0. agy may have hidden an auth/quota/model error in its log file; inspect ~/.gemini/antigravity-cli/log for details.","cli/antigravity",{code:"EMPTY_OUTPUT",kind:"transient"});return e},parseResultMeta(n){return {usage:null,model:null}},parseEvent(n,e){return []}};});var Tn,bn=N(()=>{c();Je();Ye();Tn={parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(r!=="message"&&r!=="tool_use"&&r!=="tool_result")return [];let o=e??new Date().toISOString();if(r==="message"){if(t.role!=="assistant")return [];let i=t.content;return i?[{timestamp:o,type:"text",content:i}]:[]}if(r==="tool_use"){let s=String(t.tool_name||""),i=t.tool_id,a=t.parameters,d=ae(a);return /^bash$/i.test(s)&&se(d)?[ie(o,d)]:[{timestamp:o,type:"tool_use",toolName:s,toolUseId:i,toolInput:d}]}if(r==="tool_result"){let s=t.tool_id,i=String(t.output||""),a=t.status!=="success";return [{timestamp:o,type:"tool_result",toolUseId:s,resultPreview:i,isError:a}]}return []}};});function at(n,e,t){if(t){let r=exports.BUILTIN_ADAPTERS[t];if(r?.parseEvent)return r.parseEvent(e,n);let o=Os[t];if(o?.parseEvent)return o.parseEvent(e,n)}for(let r of Object.values(exports.BUILTIN_ADAPTERS)){let o=r.parseEvent?.(e,n)??[];if(o.length>0)return o}return []}exports.BUILTIN_ADAPTERS=void 0;var Os,Ee=N(()=>{c();cr();ur();gr();fr();hr();bn();cr();ur();gr();fr();hr();Je();exports.BUILTIN_ADAPTERS={codex:exports.codexAdapter,claude:exports.claudeAdapter,opencode:exports.opencodeAdapter,antigravity:yr,copilot:exports.copilotAdapter},Os={gemini:Tn};});function Ns(n){let e=n.split(`
17
- `).filter(d=>d.trim()),t=[],r=[],o=[],s=[],i=[],a=null;for(let d of e)try{let l=JSON.parse(d);if(l.type==="assistant"&&Array.isArray(l.message?.content))for(let u of l.message.content)u.type==="text"&&typeof u.text=="string"&&u.text.trim()&&t.push(u.text.trim());if(l.type==="message"&&l.role==="assistant"&&l.delta===!0&&typeof l.content=="string"&&r.push(l.content),l.type==="assistant.message"&&typeof l.data?.content=="string"){let u=l.data.content;u.trim()&&o.push(u.trim());}if(l.type==="item.completed"&&(l.item?.type==="message"||l.item?.type==="agent_message")&&typeof l.item?.text=="string"){let u=l.item.text;u.trim()&&s.push(u.trim());}if(l.type==="text"&&typeof l.part?.text=="string"){let u=l.part.text;u.trim()&&i.push(u.trim());}l.type==="result"&&typeof l.result=="string"&&(a=l.result);}catch{}return t.length>0?t.join(`
5
+ `):""}function Oi(n){let e=n.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function Mi(n,e){let t=e.type;if(t==="text"){let r=String(e.text||"");return r?{timestamp:n,type:"text",content:r}:null}if(t==="thinking"){let r=String(e.thinking||"");return {timestamp:n,type:"thinking",content:r||"(thinking)"}}if(t==="tool_use"){let r=String(e.name||""),o=e.id,s=e.input,i=ue(s);return r==="Bash"&&le(i)?ce(n,i):{timestamp:n,type:"tool_use",toolUseId:o,toolName:r,toolInput:i}}if(t==="tool_result"){let r=!!e.is_error,o=e.tool_use_id,s=e.output??e.content??"",i;return typeof s=="string"?i=s:Array.isArray(s)?i=s.filter(a=>a.type==="text"&&typeof a.text=="string").map(a=>a.text).join(`
6
+ `):i=JSON.stringify(s),{timestamp:n,type:"tool_result",toolUseId:o,resultPreview:i,isError:r}}return null}var Si;exports.claudeAdapter=void 0;var Gr=M(()=>{p();jr();ft();mt();Fr();ye();Ve();Si=new Set(["tool_progress"]),exports.claudeAdapter={command:"claude",meta:{displayName:"Claude",models:Pt(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=dr(e.model),s=e.effort??o,i=mo(e.mode),a=yo(s),d=r?["--model",r]:[],l=e.resumeSessionId?["--resume",e.resumeSessionId]:[];if(e.additionalArgs!==void 0){let f=[...e.additionalArgs];return f.indexOf("-p")!==-1?{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...f],stdinMessage:n}:{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...f],stdinMessage:n}}return {args:["-p","--output-format","stream-json","--verbose",...l,...i,...a,...d],stdinMessage:n}},extractText(n){let e=n.split(`
7
+ `).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant"&&Array.isArray(s.message?.content))for(let i of s.message.content)i.type==="text"&&typeof i.text=="string"&&i.text.trim()&&t.push(i.text.trim());s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},extractFailure(n){try{let e=JSON.parse(n);if(e.type==="rate_limit_event"){let t=e.rate_limit_info??{};if(t.status==="rejected")return new exports.RateLimitError(`Claude rate limit: ${t.rateLimitType??"unknown"} (status: ${t.status})`)}if(e.error==="rate_limit"){let t=Ii(e);return new exports.RateLimitError(t?`Claude rate limit: ${t}`:"Claude rate limit")}if(e.type==="result"&&e.is_error===!0){let t=typeof e.result=="string"?e.result:"";if(Oi(t))return new exports.RateLimitError(`Claude rate limit: ${t}`)}}catch{}return null},parseResultMeta(n){let e=n.split(`
8
+ `);for(let r of e)if(r.trim())try{let o=JSON.parse(r);if(o.type==="result"){let s=o.usage,i=s?{inputTokens:Number(s.input_tokens??0)+Number(s.cache_read_input_tokens??0),outputTokens:Number(s.output_tokens??0),cachedInputTokens:Number(s.cache_read_input_tokens??0),costUsd:Number(o.total_cost_usd??0)}:null,a=o.modelUsage,d=a?Object.keys(a)[0]??null:null;return {usage:i,model:d}}}catch{}let t=uo(n);return t?{usage:{inputTokens:t.inputTokens,outputTokens:0,cachedInputTokens:t.cachedInputTokens,costUsd:0},model:t.model??null}:{usage:null,model:null}},parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(r!=="assistant"&&r!=="user")return [];let s=t.message?.content;if(!Array.isArray(s))return [];let i=e??new Date().toISOString(),a=[];for(let d of s){let l=Mi(i,d);l&&a.push(l);}return a},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?Si.has(r):!1}catch{return false}}};});var Ni,Di;exports.copilotAdapter=void 0;var Vr=M(()=>{p();Ve();ft();mt();ye();Ni=new Set(["interactive","plan","autopilot"]),Di=new Set(["none","low","medium","high","xhigh","max"]),exports.copilotAdapter={command:"copilot",meta:{displayName:"Copilot",models:zr()},buildArgs(n,e,t){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&Ni.has(e.mode)&&r.push("--mode",e.mode),e.effort&&Di.has(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:n}},extractText(n){let e=n.split(`
9
+ `).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant.message"&&typeof s.data?.content=="string"){let i=s.data.content;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Ce(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(!r.startsWith("tool.execution")&&!r.startsWith("assistant.")&&r!=="user.message")return [];let o=t.data;if(!o)return [];let s=e??new Date().toISOString(),i=o.toolCallId;if(r==="tool.execution_start"){let a=String(o.toolName||""),d=o.arguments,l=ue(d);return (a==="bash"||a==="Bash")&&le(l)?[ce(s,l)]:[{timestamp:s,type:"tool_use",toolName:a,toolInput:l,...i&&{toolUseId:i}}]}if(r==="tool.execution_complete"){let a=o.error;if(a)return [{timestamp:s,type:"tool_result",isError:true,resultPreview:String(a.message||""),...i&&{toolUseId:i}}];let d=o.result,l=String(d?.content||"");return [{timestamp:s,type:"tool_result",resultPreview:l,isError:false,...i&&{toolUseId:i}}]}if(r==="assistant.message"){let a=String(o.content||"");return a?[{timestamp:s,type:"text",content:a}]:[]}return []}};});function $i(n){let e=[],t=0,r=false,o=false,s=0;for(let a=0;a<n.length;a++){let d=n[a];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")t++;else if(d==="}"&&(t--,t===0)){let l=n.slice(s,a+1).trim();l&&e.push(l),s=a+1;}}}let i=n.slice(s).trim();return i&&e.push(i),e}function Ui(n){return n[0]==="exec"?n.slice(1):n}function ji(n,e){let t=e.type;if(t==="command_execution"){let r=String(e.command||"");return le(r)?[ce(n,r)]:[{timestamp:n,type:"tool_use",toolName:"Bash",toolInput:r}]}return t==="web_search"?[]:t==="file_change"?[]:[]}function Fi(n,e){let t=e.type;if(t==="message"||t==="text"){let r=e.content;if(Array.isArray(r))for(let o of r){let s=Hi(n,o);if(s)return s}if(typeof e.text=="string")return {timestamp:n,type:"text",content:e.text}}if(t==="agent_message"&&typeof e.text=="string")return {timestamp:n,type:"text",content:e.text};if(t==="reasoning")return {timestamp:n,type:"text",content:String(e.text||"")};if(t==="command_execution"){let r=String(e.aggregated_output||e.output||""),o=!!e.is_error;return {timestamp:n,type:"tool_result",resultPreview:r,isError:o}}if(t==="tool_use"){let r=String(e.name||e.tool_name||""),o=e.input,s=ue(o);return r==="Bash"&&le(s)?ce(n,s):{timestamp:n,type:"tool_use",toolName:r,toolInput:s}}if(t==="tool_result"){let r=!!e.is_error,o=String(e.output||e.content||"");return {timestamp:n,type:"tool_result",resultPreview:o,isError:r}}if(t==="web_search"){let r=e.action,o;if(r?.type==="search"){let s=r.queries;o=String(r.query||"")||(s?.length?s.join(", "):"")||String(e.query||"");}else o=e.query?"open: "+String(e.query):"";return o?{timestamp:n,type:"tool_use",toolName:"WebSearch",toolInput:o}:null}if(t==="file_change"){let r=e.changes;if(!Array.isArray(r)||r.length===0)return null;let o=r.map(i=>String(i.path||"")).filter(Boolean);if(o.length===0)return null;let s=o.length===1?o[0]:`${o.slice(0,2).join(", ")}${o.length>2?` (+${o.length-2})`:""}`;return {timestamp:n,type:"tool_use",toolName:"Edit",toolInput:s}}return null}function Hi(n,e){let t=e.type;if(t==="text")return {timestamp:n,type:"text",content:String(e.text||"")};if(t==="tool_use"){let r=String(e.name||""),o=e.input,s=ue(o);return r==="Bash"&&le(s)?ce(n,s):{timestamp:n,type:"tool_use",toolName:r,toolInput:s}}return null}var Li;exports.codexAdapter=void 0;var Jr=M(()=>{p();Ve();ft();mt();Fr();ye();Li=new Set(["turn.started","turn.completed","item.updated"]);exports.codexAdapter={command:"codex",meta:{displayName:"Codex",models:Br(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=dr(e.model),s=e.effort??o,i=e.resumeSessionId?go(e.mode):po(e.mode),a=fo(s),d=r?["-m",r]:[],l=Ui(e.additionalArgs??[]),f=l.includes("--json")||l.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...f,...i,...a,...d,...l,e.resumeSessionId,"-"],stdinMessage:n}:{args:["exec",...f,...i,...a,...d,...l],stdinMessage:n}},extractText(n){let e=n.split(`
10
+ `).map(o=>o.trim()).filter(Boolean),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="item.completed"&&(s.item?.type==="message"||s.item?.type==="agent_message")&&typeof s.item?.text=="string"){let i=s.item.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Ce(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t=e??new Date().toISOString(),r=[],o;try{JSON.parse(n),o=[n];}catch{o=$i(n),o.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let i;try{i=JSON.parse(s);}catch{continue}let a=i.type;if(!a||!a.startsWith("item.")&&!a.startsWith("turn.")&&!a.startsWith("thread."))continue;let d=i.item;if(d){if(a==="item.started"){r.push(...ji(t,d));continue}if(a==="item.completed"){let l=Fi(t,d);l&&r.push(l);continue}}}return r},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?Li.has(r):!1}catch{return false}}};});function zi(n){return n?n==="default"||n==="build"?{agent:"build",skipPermissions:false}:n==="plan"?{agent:"plan",skipPermissions:false}:Wi.has(n)?{agent:"build",skipPermissions:true}:{agent:Bi.has(n)?n:"build",skipPermissions:false}:{agent:void 0,skipPermissions:false}}function Ki(n){let e=[],t=0,r=false,o=false,s=0;for(let a=0;a<n.length;a++){let d=n[a];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")t++;else if(d==="}"&&(t--,t===0)){let l=n.slice(s,a+1).trim();l&&e.push(l),s=a+1;}}}let i=n.slice(s).trim();return i&&e.push(i),e}var qi,Wi,Bi;exports.opencodeAdapter=void 0;var Xr=M(()=>{p();Ve();mt();qi=new Set(["step_start","step_finish"]),Wi=new Set(["bypassPermissions","yolo","agent-full-access"]),Bi=new Set(["build","plan"]);exports.opencodeAdapter={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(n,e,t){let r=e.additionalArgs,o=r!==void 0?[...r]:["run"];o.includes("--format")||o.push("--format","json"),e.resumeSessionId&&!o.includes("-s")&&!o.includes("--session")&&o.push("-s",e.resumeSessionId);let{agent:s,skipPermissions:i}=zi(e.mode);o.includes("--agent")||s!==void 0&&o.push("--agent",s),t&&i&&!o.includes("--dangerously-skip-permissions")&&o.push("--dangerously-skip-permissions"),e.effort!==void 0&&!o.includes("--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let a;return !t&&!e.env?.OPENCODE_PERMISSION&&(a={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:o,stdinMessage:n,env:a}},extractText(n){let e=n.split(`
11
+ `).map(o=>o.trim()).filter(Boolean),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="text"&&typeof s.part?.text=="string"){let i=s.part.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Ce(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t=e??new Date().toISOString(),r=[],o;try{JSON.parse(n),o=[n];}catch{o=Ki(n),o.length>1&&console.warn("[opencode] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let i;try{i=JSON.parse(s);}catch{continue}let a=i.type;if(a){if(a==="text"){let l=i.part?.text;l&&r.push({timestamp:t,type:"text",content:l});continue}if(a==="tool_use"){let d=i.part;if(!d)continue;let l=String(d.tool||""),c=String(d.callID||""),f=d.state,g=String(f?.status||""),m=f?.input,w=ue(m);if(r.push({timestamp:t,type:"tool_use",toolName:l,toolUseId:c,toolInput:w}),g==="completed"&&f?.output!==void 0){let k=f.output,v=typeof k=="string"?k:JSON.stringify(k);r.push({timestamp:t,type:"tool_result",toolUseId:c,resultPreview:v,isError:false});}else g==="error"&&r.push({timestamp:t,type:"tool_result",toolUseId:c,resultPreview:String(f?.error||"tool error"),isError:true});continue}}}return r},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?qi.has(r):!1}catch{return false}}};});var Yr,Qr=M(()=>{p();Rt();ye();Yr={command:"agy",meta:{displayName:"Antigravity",models:Kr(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(n,e,t){if(e.additionalArgs!==void 0){let o=[...e.additionalArgs];return o.includes("--print")||o.unshift("--print",n),e.model&&o.push("--model",e.model),o.push("--dangerously-skip-permissions"),{args:o}}let r=["--print",n,"--dangerously-skip-permissions"];return e.model&&r.push("--model",e.model),{args:r}},extractText(n){let e=n.trim();if(!e)throw new exports.ProviderError("Antigravity CLI returned empty output with exit code 0. agy may have hidden an auth/quota/model error in its log file; inspect ~/.gemini/antigravity-cli/log for details.","cli/antigravity",{code:"EMPTY_OUTPUT",kind:"transient"});return e},parseResultMeta(n){return {usage:null,model:null}},parseEvent(n,e){return []}};});var vo,ko=M(()=>{p();ft();mt();vo={parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(r!=="message"&&r!=="tool_use"&&r!=="tool_result")return [];let o=e??new Date().toISOString();if(r==="message"){if(t.role!=="assistant")return [];let i=t.content;return i?[{timestamp:o,type:"text",content:i}]:[]}if(r==="tool_use"){let s=String(t.tool_name||""),i=t.tool_id,a=t.parameters,d=ue(a);return /^bash$/i.test(s)&&le(d)?[ce(o,d)]:[{timestamp:o,type:"tool_use",toolName:s,toolUseId:i,toolInput:d}]}if(r==="tool_result"){let s=t.tool_id,i=String(t.output||""),a=t.status!=="success";return [{timestamp:o,type:"tool_result",toolUseId:s,resultPreview:i,isError:a}]}return []}};});function St(n,e,t){if(t){let r=exports.BUILTIN_ADAPTERS[t];if(r?.parseEvent)return r.parseEvent(e,n);let o=Gi[t];if(o?.parseEvent)return o.parseEvent(e,n)}for(let r of Object.values(exports.BUILTIN_ADAPTERS)){let o=r.parseEvent?.(e,n)??[];if(o.length>0)return o}return []}exports.BUILTIN_ADAPTERS=void 0;var Gi,Ne=M(()=>{p();Gr();Vr();Jr();Xr();Qr();ko();Gr();Vr();Jr();Xr();Qr();ft();exports.BUILTIN_ADAPTERS={codex:exports.codexAdapter,claude:exports.claudeAdapter,opencode:exports.opencodeAdapter,antigravity:Yr,copilot:exports.copilotAdapter},Gi={gemini:vo};});var ht,Zr=M(()=>{p();ht=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 xo(n,e){if(n===void 0||n==="")return e;let t=parseInt(n,10);return Number.isNaN(t)?e:t}function en(n=process.env){let e=n.CREWX_TIMEOUT_IDLE;if(e===void 0||e==="")return;let t=parseInt(e,10);if(!(!Number.isFinite(t)||t<=0))return t}function Ao(n=process.env){return {queryMs:xo(n.CREWX_TIMEOUT_QUERY,288e5),executeMs:xo(n.CREWX_TIMEOUT_EXECUTE,288e5),idleMs:en(n)??6e5}}var gr=M(()=>{p();});function Ji(n){let e=n.split(`
12
+ `).filter(d=>d.trim()),t=[],r=[],o=[],s=[],i=[],a=null;for(let d of e)try{let l=JSON.parse(d);if(l.type==="assistant"&&Array.isArray(l.message?.content))for(let c of l.message.content)c.type==="text"&&typeof c.text=="string"&&c.text.trim()&&t.push(c.text.trim());if(l.type==="message"&&l.role==="assistant"&&l.delta===!0&&typeof l.content=="string"&&r.push(l.content),l.type==="assistant.message"&&typeof l.data?.content=="string"){let c=l.data.content;c.trim()&&o.push(c.trim());}if(l.type==="item.completed"&&(l.item?.type==="message"||l.item?.type==="agent_message")&&typeof l.item?.text=="string"){let c=l.item.text;c.trim()&&s.push(c.trim());}if(l.type==="text"&&typeof l.part?.text=="string"){let c=l.part.text;c.trim()&&i.push(c.trim());}l.type==="result"&&typeof l.result=="string"&&(a=l.result);}catch{}return t.length>0?t.join(`
18
13
 
19
14
  `):r.length>0?r.join(""):o.length>0?o.join(`
20
15
 
21
16
  `):s.length>0?s.join(`
22
17
 
23
- `):i.length>0?i.join(""):a||n.trim()}function Ds(n){let e=ye(n);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function Ls(n,e,t=process.platform){return n==="copilot"&&t==="win32"&&e instanceof exports.ProviderError&&e.message.includes('CLI command "copilot" not found')}function In(n,e,t,r,o,s,i){return new Promise((a,d)=>{let l=o?.timeoutMs??288e5,u=nt({command:n,allowShellFallback:true}),p=ot(u,e),f=child_process.spawn(p.command,p.argv,{env:{...process.env,...o?.env??{}},cwd:o?.cwd,stdio:["pipe","pipe","pipe"],shell:p.shell??false,windowsHide:p.windowsHide,detached:process.platform!=="win32"});s!==void 0&&f.stdin.write(s),f.stdin.end(),f.pid!==void 0&&o?.onPid?.(f.pid);let g=false,h=false,x=()=>{try{f.kill("SIGKILL");}catch{}},w=setTimeout(()=>{if(!g){h=true;try{f.kill("SIGTERM");}catch{}setTimeout(x,Sn).unref();}},l);w.unref();let _=new string_decoder.StringDecoder("utf8"),k=new string_decoder.StringDecoder("utf8"),S="",b="",B="",q="";f.stdout.on("data",A=>{let H=_.write(A);S+=H,B+=H;let z=B.split(`
24
- `);B=z.pop()??"";for(let W of z)if(W.trim()&&(o?.onOutput?.(W,"stdout"),i?.extractFailure)){let j=i.extractFailure(W);if(j){g=true,clearTimeout(w);try{f.kill("SIGTERM");}catch{}setTimeout(x,Sn).unref(),d(j);return}}}),f.stderr.on("data",A=>{let H=k.write(A);b+=H,q+=H;let z=q.split(`
25
- `);q=z.pop()??"";for(let W of z)W.trim()&&o?.onOutput?.(W,"stderr");}),f.on("error",A=>{g=true,clearTimeout(w),A.code==="ENOENT"?d(new exports.ProviderError(`CLI command "${n}" not found. Is ${t} installed?`,t)):d(new exports.ProviderError(`Spawn error: ${A.message}`,t));}),f.on("close",(A,H)=>{if(g)return;g=true,clearTimeout(w);let z=_.end(),W=k.end();z&&(S+=z,B+=z),W&&(b+=W,q+=W),B.trim()&&o?.onOutput?.(B,"stdout"),q.trim()&&o?.onOutput?.(q,"stderr");let j=A??0;if(o?.onExitCode?.(j),h)return d(new Ie(`Total runtime exceeded ${l}ms; process killed.`,t));if(H)return d(new exports.ProviderError(`Process terminated by signal ${H}`,t,{code:"PROVIDER_CRASHED",kind:"permanent"}));if(j!==0){if(i?.interpretExit){let F=i.interpretExit(j,b);if(F){d(F);return}}d(new exports.ProviderError(`Process exited with code ${j}: ${b.slice(0,500)}`,t));return}let K;try{K=i?i.extractText(S):Ns(S);}catch(F){d(F instanceof Error?F:new exports.ProviderError(String(F),t));return}a({stdout:S,parsed:K});});})}function he(n,e){On.set(n,e);}function we(n){let e=n.split("/");if(e.length!==2)throw new exports.ProviderError(`Invalid provider format: "${n}". Expected namespace/id (e.g., cli/claude)`,n);let[t,r]=e,o=On.get(t);if(o)return o(r,n);if(t==="cli"){let s=exports.BUILTIN_ADAPTERS[r];if(!s)throw new exports.ProviderError(`Unknown CLI provider id: "${r}". Supported: ${Object.keys(exports.BUILTIN_ADAPTERS).join(", ")}`,n);return new wr(r,s,n)}throw new exports.ProviderError(`Unsupported provider namespace: "${t}". Register a factory with registerProviderFactory('${t}', factory).`,n)}var Sn;exports.ClientToolCallRequiredError=void 0;var On,wr,pe=N(()=>{c();Dt();Xe();Ee();st();st();Sn=2e3;exports.ClientToolCallRequiredError=class extends Error{constructor(t,r){super(`Client tool call required: ${t.toolName}`);this.toolCall=t;this.continuationState=r;}toolCall;continuationState;name="ClientToolCallRequiredError"},On=new Map;wr=class{constructor(e,t,r){this.providerId=e;this.adapter=t;this.providerStr=r;}providerId;adapter;providerStr;async execute(e,t){let r=this.composeMessage(e,t),{args:o,stdinMessage:s,env:i}=this.adapter.buildArgs(r,t??{},true);t?.onCommand?.(`${this.adapter.command} ${o.join(" ")}`);let a=i?{...t,env:{...t?.env??{},...i}}:t,{stdout:d,parsed:l}=await this.runProcess(o,a,s);return this.handleResultMeta(d,t),l}async query(e,t){let r=this.composeMessage(e,t),{args:o,stdinMessage:s,env:i}=this.adapter.buildArgs(r,t??{},false);t?.onCommand?.(`${this.adapter.command} ${o.join(" ")}`);let a=i?{...t,env:{...t?.env??{},...i}}:t,{stdout:d,parsed:l}=await this.runProcess(o,a,s);return this.handleResultMeta(d,t),l}composeMessage(e,t){return t?.systemPrompt?`${t.systemPrompt}
18
+ `):i.length>0?i.join(""):a||n.trim()}function Xi(n){let e=Ce(n);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function Yi(n,e,t=process.platform){return n==="copilot"&&t==="win32"&&e instanceof exports.ProviderError&&e.message.includes('CLI command "copilot" not found')}function Ro(n,e,t,r,o,s,i){return new Promise((a,d)=>{let l=o?.timeoutMs??288e5,c=o?.idleMs??6e5,f={...process.env,...o?.env??{}},g=o?.cwd??process.cwd(),m=Ke({command:n,env:f,cwd:g,allowShellFallback:true}),w=Ge(m,e),k=child_process.spawn(w.command,w.argv,{env:f,cwd:o?.cwd,stdio:["pipe","pipe","pipe"],shell:w.shell??false,windowsHide:w.windowsHide,detached:process.platform!=="win32"});k.stdin.on("error",U=>{U.code!=="EPIPE"&&o?.onOutput?.(`stdin error: ${U.message}`,"stderr");}),s!==void 0&&k.stdin.write(s),k.stdin.end(),k.pid!==void 0&&o?.onPid?.(k.pid);let v=false,h=false,_=U=>{if(k.pid!==void 0)try{process.platform==="win32"?k.kill(U):process.kill(-k.pid,U);}catch{}},A=()=>{_("SIGKILL");},b=setTimeout(()=>{v||(h=true,V?.stop(),_("SIGTERM"),setTimeout(A,It).unref());},l);b.unref();let V=c>0?new ht({timeoutMs:c,onIdle:()=>{if(v)return;v=true,clearTimeout(b),_("SIGTERM"),setTimeout(A,It).unref();let U=Math.round(c/6e4);Z(new Je(`${t} produced no output for ${U}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,t));}}):null;V?.start();let $=new string_decoder.StringDecoder("utf8"),S=new string_decoder.StringDecoder("utf8"),N="",se="",Y="",D="",Z=U=>{U instanceof Error&&(U.stdout=N),d(U);};k.stdout.on("data",U=>{V?.refresh();let ee=$.write(U);N+=ee,Y+=ee;let W=Y.split(`
19
+ `);Y=W.pop()??"";for(let H of W)if(H.trim()&&(o?.onOutput?.(H,"stdout"),i?.extractFailure)){let Q=i.extractFailure(H);if(Q){v=true,clearTimeout(b),V?.stop(),_("SIGTERM"),setTimeout(A,It).unref(),Z(Q);return}}}),k.stderr.on("data",U=>{V?.refresh();let ee=S.write(U);se+=ee,D+=ee;let W=D.split(`
20
+ `);D=W.pop()??"";for(let H of W)H.trim()&&o?.onOutput?.(H,"stderr");}),k.on("error",U=>{v=true,clearTimeout(b),V?.stop(),U.code==="ENOENT"?Z(new exports.ProviderError(`CLI command "${n}" not found. Is ${t} installed?`,t)):Z(new exports.ProviderError(`Spawn error: ${U.message}`,t));}),k.on("close",(U,ee)=>{if(v)return;v=true,clearTimeout(b),V?.stop();let W=$.end(),H=S.end();W&&(N+=W,Y+=W),H&&(se+=H,D+=H),Y.trim()&&o?.onOutput?.(Y,"stdout"),D.trim()&&o?.onOutput?.(D,"stderr");let Q=U??0;if(o?.onExitCode?.(Q),h)return Z(new Xe(`Total runtime exceeded ${l}ms; process killed.`,t));if(ee)return Z(new exports.ProviderError(`Process terminated by signal ${ee}`,t,{code:"PROVIDER_CRASHED",kind:"permanent"}));if(Q!==0){if(i?.interpretExit){let B=i.interpretExit(Q,se);if(B){Z(B);return}}Z(new exports.ProviderError(`Process exited with code ${Q}: ${se.slice(0,500)}`,t));return}let J;try{J=i?i.extractText(N):Ji(N);}catch(B){Z(B instanceof Error?B:new exports.ProviderError(String(B),t));return}a({stdout:N,parsed:J});});})}function Te(n,e){Co.set(n,e);}function Pe(n,e){let t=n.split("/");if(t.length!==2)throw new exports.ProviderError(`Invalid provider format: "${n}". Expected namespace/id (e.g., cli/claude)`,n);let[r,o]=t,s=Co.get(r);if(s)return s(o,n);if(r==="cli"){let i=exports.BUILTIN_ADAPTERS[o];if(!i)throw new exports.ProviderError(`Unknown CLI provider id: "${o}". Supported: ${Object.keys(exports.BUILTIN_ADAPTERS).join(", ")}`,n);return new tn(o,i,n,e)}throw new exports.ProviderError(`Unsupported provider namespace: "${r}". Register a factory with registerProviderFactory('${r}', factory).`,n)}function To(n,e,t){if(!n||!e)return n??{};let r=e({providerStr:t.providerStr,providerId:t.providerId,mode:n.mode});return r.length===0?n:{...n,additionalArgs:[...n.additionalArgs??[],...r]}}var It;exports.ClientToolCallRequiredError=void 0;var Co,tn,we=M(()=>{p();gt();Ve();Ne();Rt();Zr();gr();Rt();It=2e3;exports.ClientToolCallRequiredError=class extends Error{constructor(t,r){super(`Client tool call required: ${t.toolName}`);this.toolCall=t;this.continuationState=r;}toolCall;continuationState;name="ClientToolCallRequiredError"},Co=new Map;tn=class{constructor(e,t,r,o){this.providerId=e;this.adapter=t;this.providerStr=r;this.additionalArgsProvider=o;}providerId;adapter;providerStr;additionalArgsProvider;async execute(e,t){let r=this.composeMessage(e,t),o=this.applyAdditionalArgs(t),{args:s,stdinMessage:i,env:a}=this.adapter.buildArgs(r,o,true);o.onCommand?.(`${this.adapter.command} ${s.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:l,parsed:c}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),c}async query(e,t){let r=this.composeMessage(e,t),o=this.applyAdditionalArgs(t),{args:s,stdinMessage:i,env:a}=this.adapter.buildArgs(r,o,false);o.onCommand?.(`${this.adapter.command} ${s.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:l,parsed:c}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),c}applyAdditionalArgs(e){return To(e,this.additionalArgsProvider,{providerStr:this.providerStr,providerId:this.providerId})}composeMessage(e,t){return t?.systemPrompt?`${t.systemPrompt}
26
21
 
27
22
  ---
28
23
 
29
- ${e}`:e}async runProcess(e,t,r){try{return await In(this.adapter.command,e,this.providerStr,this.providerId,t,r,this.adapter)}catch(o){if(Ls(this.providerId,o)){let s=e[0]==="copilot"?e:["copilot",...e];return In("gh",s,this.providerStr,this.providerId,t,r,this.adapter)}throw o}}handleResultMeta(e,t){if(!this.adapter.parseResultMeta){let i=Ds(e);i&&t?.onUsage&&t.onUsage(i);return}let{usage:r,model:o}=this.adapter.parseResultMeta(e);r&&t?.onUsage&&t.onUsage(r);let s=o??(this.providerId==="opencode"?t?.model??null:null);s&&t?.onModel&&t.onModel(s);}};});function Mr(n){let e=n.update;if(e.sessionUpdate==="agent_message_chunk"){let t=e.content;if(t.type==="text"&&typeof t.text=="string")return t.text}return null}function le(n,e){try{let t=JSON.parse(n);if(t!=null&&typeof t=="object"&&typeof t.type=="string"&&Ai.has(t.type)){let r=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||r}]}}catch{}return []}var Ai,Ce=N(()=>{c();Ai=new Set(["text","tool_use","tool_result","error","running_instruction","agent_call"]);});var go,mo;exports.VercelProviderRuntime=void 0;var Fr=N(()=>{c();pe();go=10,mo=50,exports.VercelProviderRuntime=class{config;constructor(e){this.config=e;}async query(e,t){return this._run(e,"query",t)}async execute(e,t){return this._run(e,"execute",t)}async _run(e,t,r){let{generateText:o,tool:s}=await import('ai'),i=this.convertTools(r?.tools??[],s),a=this.createModel(r?.model),d=Math.min(r?.maxSteps??this.config.maxSteps??go,mo);try{let l=0,u=await o({model:a,system:r?.systemPrompt??void 0,prompt:e,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens},onStepFinish:f=>{if(l++,!!r?.onOutput){if(f.toolCalls&&f.toolCalls.length>0)for(let g of f.toolCalls)r.onOutput(JSON.stringify({type:"assistant",message:{content:[{type:"tool_use",id:g.toolCallId,name:g.toolName,input:g.args}]}}),"stdout");if(f.toolResults&&f.toolResults.length>0)for(let g of f.toolResults){let h=typeof g.result=="string"?g.result:JSON.stringify(g.result);r.onOutput(JSON.stringify({type:"user",message:{content:[{type:"tool_result",tool_use_id:g.toolCallId,output:h,is_error:!1}]}}),"stdout");}}}}),p=new Set((r?.tools??[]).filter(f=>!f.execute).map(f=>f.name));if(u.finishReason==="tool-calls"&&Array.isArray(u.toolCalls)&&u.toolCalls.length>0){let f=u.toolCalls.filter(g=>p.has(g.toolName));if(f.length>0){let g=f[0];throw new exports.ClientToolCallRequiredError({toolCallId:g.toolCallId,toolName:g.toolName,args:g.args},{userMessage:e,responseMessages:u.response?.messages??[],toolDefinitions:r?.tools??[],maxSteps:d,systemPrompt:r?.systemPrompt,modelOverride:r?.model})}}if(r?.onUsage&&u.usage){let f={inputTokens:u.usage.promptTokens??0,outputTokens:u.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};r.onUsage(f);}return r?.onModel&&r.onModel(r.model??this.config.model),u.text??""}catch(l){throw l instanceof exports.ClientToolCallRequiredError?l:l.status===401?new exports.ProviderError(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):l.status===429?new exports.ProviderError(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new exports.ProviderError(`Provider error: ${l.message}`,this.config.provider)}}async continueWithToolResults(e,t,r){let{generateText:o,tool:s}=await import('ai'),i=this.convertTools(e.toolDefinitions,s),a=this.createModel(e.modelOverride),d=Math.min(e.maxSteps??this.config.maxSteps??go,mo),l=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:t.map(u=>({type:"tool-result",toolCallId:u.toolCallId,toolName:u.toolName,result:typeof u.result=="string"?u.result:JSON.stringify(u.result)}))}];try{let u=await o({model:a,system:e.systemPrompt??void 0,messages:l,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens}}),p=new Set(e.toolDefinitions.filter(f=>!f.execute).map(f=>f.name));if(u.finishReason==="tool-calls"&&Array.isArray(u.toolCalls)&&u.toolCalls.length>0){let f=u.toolCalls.filter(g=>p.has(g.toolName));if(f.length>0){let g=f[0];throw new exports.ClientToolCallRequiredError({toolCallId:g.toolCallId,toolName:g.toolName,args:g.args},{userMessage:e.userMessage,responseMessages:[...e.responseMessages,{role:"tool",content:t.map(h=>({type:"tool-result",toolCallId:h.toolCallId,toolName:h.toolName,result:typeof h.result=="string"?h.result:JSON.stringify(h.result)}))},...u.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return r?.onUsage&&u.usage&&r.onUsage({inputTokens:u.usage.promptTokens??0,outputTokens:u.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),r?.onModel&&r.onModel(e.modelOverride??this.config.model),u.text??""}catch(u){throw u instanceof exports.ClientToolCallRequiredError?u:new exports.ProviderError(`Provider error: ${u.message}`,this.config.provider)}}convertTools(e,t){let{z:r}=J("zod"),o={};for(let s of e){let i=this.jsonSchemaToZod(s.parameters??{},r);s.execute?o[s.name]=t({description:s.description,parameters:i,execute:async a=>s.execute(a)}):o[s.name]=t({description:s.description,parameters:i});}return o}jsonSchemaToZod(e,t){if(!e||!e.properties)return t.object({});let r={},o=e.properties,s=e.required??[];for(let[i,a]of Object.entries(o)){let d;switch(a.type){case "string":d=t.string();break;case "number":d=t.number();break;case "integer":d=t.number().int();break;case "boolean":d=t.boolean();break;case "array":d=t.array(t.any());break;default:d=t.any();}a.description&&(d=d.describe(a.description)),s.includes(i)||(d=d.optional()),r[i]=d;}return t.object(r)}createModel(e){let{provider:t,apiKey:r,baseURL:o}=this.config,s=e||this.config.model;switch(t){case "api/openrouter":{let{createOpenAI:i}=J("@ai-sdk/openai");return i({apiKey:r||process.env.OPENROUTER_API_KEY,baseURL:o||"https://openrouter.ai/api/v1"})(s)}case "api/openai":{let{createOpenAI:i}=J("@ai-sdk/openai");return i({apiKey:r||process.env.OPENAI_API_KEY,...o&&{baseURL:o}})(s)}case "api/anthropic":{let{createAnthropic:i}=J("@ai-sdk/anthropic");return i({apiKey:r||process.env.ANTHROPIC_API_KEY,...o&&{baseURL:o}})(s)}case "api/google":{let{createGoogleGenerativeAI:i}=J("@ai-sdk/google");return i({apiKey:r||process.env.GOOGLE_API_KEY})(s)}default:throw new exports.ProviderError(`Unsupported API provider: ${t}`,t)}}};});var yo={};bt(yo,{registerApiProviders:()=>fo});function fo(n){he("api",(e,t)=>{let r=n?.apiKeys?.[e];return new exports.VercelProviderRuntime({provider:t,model:"",apiKey:r,maxSteps:n?.defaults?.maxSteps,temperature:n?.defaults?.temperature})});}var qr=N(()=>{c();pe();Fr();});exports.AcpProtocolError=void 0;var Br=N(()=>{c();exports.AcpProtocolError=class extends Error{constructor(t,r,o){super(t);this.code=r;this.data=o;}code;data;name="AcpProtocolError"};});var xa,ka,ho,wo,_a;exports.AcpConnection=void 0;var Jt=N(()=>{c();Br();pe();xa=-32e3,ka=2e3,ho=3e4,wo=1e4,_a=8*36e5,exports.AcpConnection=class{constructor(e){this.options=e;}options;proc=null;sdkConnection=null;disposed=false;stderrBuffer="";collectedStderr="";pendingUpdateCallback=null;authMethods=[];_initResponse=null;get initResponse(){return this._initResponse}async connect(e){if(this.disposed)throw new exports.ProviderError("AcpConnection has been disposed","acp");let t=this.options.spawn,r=process.platform==="win32"&&(t.shellOnWindows??true),o=child_process.spawn(t.command,t.args,{stdio:["pipe","pipe","pipe"],env:{...process.env,...this.options.env??{}},cwd:this.options.cwd,shell:r,windowsHide:true,detached:process.platform!=="win32"});o.pid!==void 0&&this.options.onPid?.(o.pid),o.stderr.on("data",g=>{let h=g.toString();this.collectedStderr+=h,this.stderrBuffer+=h;let x=this.stderrBuffer.split(`
30
- `);this.stderrBuffer=x.pop()??"";for(let v of x)v.trim()&&this.options.onStderr?.(v);}),this.proc=o;let s=new WritableStream({write:g=>new Promise((h,x)=>{o.stdin.write(g,v=>{v?x(v):h();});}),close:()=>{o.stdin.end();}}),i=new ReadableStream({start:g=>{o.stdout.on("data",h=>{g.enqueue(new Uint8Array(h));}),o.stdout.on("end",()=>{g.close();}),o.stdout.on("error",h=>{g.error(h);});}}),a=sdk.ndJsonStream(s,i),d=this,l=new sdk.ClientSideConnection(g=>({requestPermission:async h=>{if(d.options.configOptions?.allow_all!==void 0){let x=h.options;if(Array.isArray(x)&&x.length>0)return {outcome:{outcome:"selected",optionId:(x.find(w=>w.kind==="allow_once")??x.find(w=>w.kind?.startsWith("allow_"))??x[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async h=>{d.pendingUpdateCallback?.(h);}}),a);this.sdkConnection=l;let u=new Promise((g,h)=>{o.on("error",x=>{if(x.code==="ENOENT"){let w=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;h(new exports.ProviderError(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${w}`,"acp"));}else h(new exports.ProviderError(`ACP spawn error: ${x.message}`,"acp"));});}),p=this.doInitialize(l,e),f=new Promise((g,h)=>{setTimeout(()=>{h(new exports.AcpProtocolError(`ACP connect timeout after ${ho}ms. The ACP adapter may not be installed or may require interactive setup.`));},ho).unref();});await Promise.race([p,f,u]);}async doInitialize(e,t){let r=await e.initialize({protocolVersion:1,clientCapabilities:{auth:{}},clientInfo:{name:t?.name??"crewx-sdk",version:t?.version??"0.8.4"}});this._initResponse=r,this.authMethods=r.authMethods??[];}async newSession(e){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionWithTimeout(e)}catch(t){if(!this.isAuthError(t))throw t;return await this.tryAuthenticate(),this.newSessionWithTimeout(e)}}async newSessionWithTimeout(e){return (await this.newSessionRawTimeout(e)).sessionId}async newSessionRaw(e){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionRawTimeout(e)}catch(t){if(!this.isAuthError(t))throw t;return await this.tryAuthenticate(),this.newSessionRawTimeout(e)}}async newSessionRawTimeout(e){let t=this.sdkConnection.newSession(e),r=new Promise((o,s)=>{setTimeout(()=>{s(new exports.AcpProtocolError(`ACP session/new timeout after ${wo}ms`));},wo).unref();});return Promise.race([t,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===xa}async tryAuthenticate(){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected.","acp");let e=this.authMethods.find(r=>r.type==="env_var"&&this.hasEnvVarsFor(r));if(e){await this.sdkConnection.authenticate({methodId:e.id});return}let t=this.authMethods.map(r=>`${r.id} (${r.type??"agent"})`).join(", ");if(this.authMethods.length>0){let r=this.authMethods.filter(o=>o.type==="env_var");if(r.length>0){let o=r.flatMap(s=>(s.vars??[]).filter(i=>!i.optional&&!process.env[i.name]).map(i=>i.name));throw new exports.AcpProtocolError(`ACP authentication required. Missing environment variables: ${o.join(", ")}. Set them in your shell or crewx.yaml env block.`)}throw new exports.AcpProtocolError(`ACP authentication required but no supported method found. Available methods: ${t}. CrewX currently supports env_var authentication only.`)}throw new exports.AcpProtocolError("ACP agent requires authentication but advertised no auth methods.")}hasEnvVarsFor(e){return !e.vars||e.vars.length===0?true:e.vars.filter(t=>!t.optional).every(t=>!!process.env[t.name])}async setModel(e,t){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.unstable_setSessionModel({sessionId:e,modelId:t});}async setMode(e,t){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionMode({sessionId:e,modeId:t});}async setConfigOption(e,t,r){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionConfigOption({sessionId:e,configId:t,value:r});}async prompt(e,t,r,o){if(!this.sdkConnection||!this.proc)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");this.pendingUpdateCallback=r??null;let s=this.sdkConnection,i=this.proc,a=o??_a,d=false,l=s.prompt({sessionId:e,prompt:t}).finally(()=>{d=true;}),u=new Promise((f,g)=>{setTimeout(()=>{s.cancel({sessionId:e}).catch(()=>{}),g(new Ie(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),p=new Promise((f,g)=>{let h=(_,k,S)=>{if(d)return;let b=k!=null?`signal=${k}`:`code=${String(_)}`;g(new exports.ProviderError(`ACP process terminated unexpectedly (${b}) [${S}]: ${this.collectedStderr.slice(-500)}`,"acp"));},x=(_,k)=>h(_,k,"exit"),v=(_,k)=>h(_,k,"close");i.once("exit",x),i.once("close",v);let w=()=>{i.off("exit",x),i.off("close",v);};l.then(w,w);});try{return await Promise.race([l,u,p])}finally{this.pendingUpdateCallback=null;}}async dispose(){if(this.disposed)return;this.disposed=true,this.pendingUpdateCallback=null,this.sdkConnection=null;let e=this.proc;if(!e)return;this.proc=null,this.stderrBuffer.trim()&&(this.options.onStderr?.(this.stderrBuffer),this.stderrBuffer="");let t=e.pid,r=o=>{if(t!==void 0&&process.platform!=="win32")try{process.kill(-t,o);}catch{}else try{e.kill(o);}catch{}};await new Promise(o=>{let s=()=>{clearTimeout(i),o();};e.once("close",s),e.once("error",s);try{r("SIGTERM");}catch{s();return}let i=setTimeout(()=>{r("SIGKILL");},ka);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function xo(n,e){if(n!=null&&typeof n=="object"){let t=n;if(typeof t.command=="string")return t.command;if(typeof t.file_path=="string")return t.file_path;if(typeof t.filePath=="string")return t.filePath;if(typeof t.path=="string")return t.path;if(typeof t.query=="string")return t.query;if(typeof t.pattern=="string")return t.pattern;if(typeof t.url=="string")return t.url;if(Object.keys(t).length>0)return JSON.stringify(t)}if(e&&e.length>0)return e.map(t=>t.path).join(", ")}var va;exports.AcpProviderRuntime=void 0;var Wr=N(()=>{c();Ce();Jt();va={read:"Read",edit:"Edit",delete:"Delete",move:"Move",search:"Search",execute:"Bash",think:"Think",fetch:"WebFetch",switch_mode:"SwitchMode"};exports.AcpProviderRuntime=class{constructor(e,t,r){this.adapter=t;}adapter;async query(e,t){return this.runPrompt(e,t)}async execute(e,t){return this.runPrompt(e,t)}async dispose(){}async runPrompt(e,t){let{command:r,args:o}=this.adapter.spawn;t?.onCommand?.(`${r} ${o.join(" ")}`);let s=this.adapter.buildSpawnEnv?.(t?.model??""),i=s?{...t?.env,...s}:t?.env,a=new exports.AcpConnection({spawn:this.adapter.spawn,env:i,cwd:t?.cwd,timeoutMs:t?.timeoutMs,onPid:t?.onPid,onStderr:d=>t?.onOutput?.(d,"stderr"),configOptions:t?.configOptions});try{await a.connect(this.adapter.clientInfo);let d=this.adapter.buildSessionParams({cwd:t?.cwd,env:t?.env,model:t?.model,systemPrompt:t?.systemPrompt}),l=await a.newSession(d);await this.applySessionOptions(a,l,t);let u=this.composePrompt(e,t),p=[],f=await a.prompt(l,u,g=>this.handleUpdate(g,t,p),t?.timeoutMs);return this.handleUsage(f,t),p.join("")}finally{await a.dispose().catch(()=>{});}}async applySessionOptions(e,t,r){if(r?.model&&r.model!=="default"&&!this.adapter.buildSpawnEnv){let o=this.adapter.buildEffortAction?.(r.effort??"",r.model);try{o?.type==="set_model"?await e.setModel(t,o.modelId):await e.setModel(t,r.model);}catch(s){console.warn(`[acp] setModel(${r.model}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.mode){let o=this.adapter.resolveMode?.(r.mode)??r.mode;if(o)try{await e.setMode(t,o);}catch(s){console.warn(`[acp] setMode(${o}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.effort){let o=this.adapter.buildEffortAction?.(r.effort,r.model);if(o&&o.type==="set_config_option")try{await e.setConfigOption(t,o.configId,o.value);}catch(s){console.warn(`[acp] setConfigOption(${o.configId}) effort failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.configOptions)for(let[o,s]of Object.entries(r.configOptions))try{await e.setConfigOption(t,o,s);}catch(i){console.warn(`[acp] setConfigOption(${o}) failed, retrying: ${i instanceof Error?i.message:String(i)}`);try{await new Promise(a=>setTimeout(a,500)),await e.setConfigOption(t,o,s);}catch(a){console.warn(`[acp] setConfigOption(${o}) retry failed: ${a instanceof Error?a.message:String(a)}`);}}}composePrompt(e,t){let r=[];return t?.systemPrompt?.trim()&&(r.push(t.systemPrompt),r.push("---")),t?.context&&(r.push(t.context),r.push("---")),r.push(e),[{type:"text",text:r.join(`
24
+ ${e}`:e}async runProcess(e,t,r){try{return await Ro(this.adapter.command,e,this.providerStr,this.providerId,t,r,this.adapter)}catch(o){if(Yi(this.providerId,o)){let s=e[0]==="copilot"?e:["copilot",...e];try{return await Ro("gh",s,this.providerStr,this.providerId,t,r,this.adapter)}catch(i){throw this.recoverPartialUsage(i,t),i}}throw this.recoverPartialUsage(o,t),o}}recoverPartialUsage(e,t){let r=e instanceof Error?e.stdout:void 0;typeof r=="string"&&r.length>0&&this.handleResultMeta(r,t);}handleResultMeta(e,t){if(!this.adapter.parseResultMeta){let i=Xi(e);i&&t?.onUsage&&t.onUsage(i);return}let{usage:r,model:o}=this.adapter.parseResultMeta(e);r&&t?.onUsage&&t.onUsage(r);let s=o??(this.providerId==="opencode"?t?.model??null:null);s&&t?.onModel&&t.onModel(s);}};});function _n(n){let e=n.update;if(e.sessionUpdate==="agent_message_chunk"){let t=e.content;if(t.type==="text"&&typeof t.text=="string")return t.text}return null}function ge(n,e){try{let t=JSON.parse(n);if(t!=null&&typeof t=="object"&&typeof t.type=="string"&&ja.has(t.type)){let r=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||r}]}}catch{}return []}var ja,De=M(()=>{p();ja=new Set(["text","tool_use","tool_result","error","running_instruction","agent_call"]);});var ls,cs;exports.VercelProviderRuntime=void 0;var Cn=M(()=>{p();we();ls=10,cs=50,exports.VercelProviderRuntime=class{config;constructor(e){this.config=e;}async query(e,t){return this._run(e,"query",t)}async execute(e,t){return this._run(e,"execute",t)}async _run(e,t,r){let{generateText:o,tool:s}=await import('ai'),i=this.convertTools(r?.tools??[],s),a=this.createModel(r?.model),d=Math.min(r?.maxSteps??this.config.maxSteps??ls,cs);try{let l=0,c=await o({model:a,system:r?.systemPrompt??void 0,prompt:e,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens},onStepFinish:g=>{if(l++,!!r?.onOutput){if(g.toolCalls&&g.toolCalls.length>0)for(let m of g.toolCalls)r.onOutput(JSON.stringify({type:"assistant",message:{content:[{type:"tool_use",id:m.toolCallId,name:m.toolName,input:m.args}]}}),"stdout");if(g.toolResults&&g.toolResults.length>0)for(let m of g.toolResults){let w=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:w,is_error:!1}]}}),"stdout");}}}}),f=new Set((r?.tools??[]).filter(g=>!g.execute).map(g=>g.name));if(c.finishReason==="tool-calls"&&Array.isArray(c.toolCalls)&&c.toolCalls.length>0){let g=c.toolCalls.filter(m=>f.has(m.toolName));if(g.length>0){let m=g[0];throw new exports.ClientToolCallRequiredError({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e,responseMessages:c.response?.messages??[],toolDefinitions:r?.tools??[],maxSteps:d,systemPrompt:r?.systemPrompt,modelOverride:r?.model})}}if(r?.onUsage&&c.usage){let g={inputTokens:c.usage.promptTokens??0,outputTokens:c.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};r.onUsage(g);}return r?.onModel&&r.onModel(r.model??this.config.model),c.text??""}catch(l){throw l instanceof exports.ClientToolCallRequiredError?l:l.status===401?new exports.ProviderError(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):l.status===429?new exports.ProviderError(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new exports.ProviderError(`Provider error: ${l.message}`,this.config.provider)}}async continueWithToolResults(e,t,r){let{generateText:o,tool:s}=await import('ai'),i=this.convertTools(e.toolDefinitions,s),a=this.createModel(e.modelOverride),d=Math.min(e.maxSteps??this.config.maxSteps??ls,cs),l=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:t.map(c=>({type:"tool-result",toolCallId:c.toolCallId,toolName:c.toolName,result:typeof c.result=="string"?c.result:JSON.stringify(c.result)}))}];try{let c=await o({model:a,system:e.systemPrompt??void 0,messages:l,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens}}),f=new Set(e.toolDefinitions.filter(g=>!g.execute).map(g=>g.name));if(c.finishReason==="tool-calls"&&Array.isArray(c.toolCalls)&&c.toolCalls.length>0){let g=c.toolCalls.filter(m=>f.has(m.toolName));if(g.length>0){let m=g[0];throw new exports.ClientToolCallRequiredError({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e.userMessage,responseMessages:[...e.responseMessages,{role:"tool",content:t.map(w=>({type:"tool-result",toolCallId:w.toolCallId,toolName:w.toolName,result:typeof w.result=="string"?w.result:JSON.stringify(w.result)}))},...c.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return r?.onUsage&&c.usage&&r.onUsage({inputTokens:c.usage.promptTokens??0,outputTokens:c.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),r?.onModel&&r.onModel(e.modelOverride??this.config.model),c.text??""}catch(c){throw c instanceof exports.ClientToolCallRequiredError?c:new exports.ProviderError(`Provider error: ${c.message}`,this.config.provider)}}convertTools(e,t){let{z:r}=te("zod"),o={};for(let s of e){let i=this.jsonSchemaToZod(s.parameters??{},r);s.execute?o[s.name]=t({description:s.description,parameters:i,execute:async a=>s.execute(a)}):o[s.name]=t({description:s.description,parameters:i});}return o}jsonSchemaToZod(e,t){if(!e||!e.properties)return t.object({});let r={},o=e.properties,s=e.required??[];for(let[i,a]of Object.entries(o)){let d;switch(a.type){case "string":d=t.string();break;case "number":d=t.number();break;case "integer":d=t.number().int();break;case "boolean":d=t.boolean();break;case "array":d=t.array(t.any());break;default:d=t.any();}a.description&&(d=d.describe(a.description)),s.includes(i)||(d=d.optional()),r[i]=d;}return t.object(r)}createModel(e){let{provider:t,apiKey:r,baseURL:o}=this.config,s=e||this.config.model;switch(t){case "api/openrouter":{let{createOpenAI:i}=te("@ai-sdk/openai");return i({apiKey:r||process.env.OPENROUTER_API_KEY,baseURL:o||"https://openrouter.ai/api/v1"})(s)}case "api/openai":{let{createOpenAI:i}=te("@ai-sdk/openai");return i({apiKey:r||process.env.OPENAI_API_KEY,...o&&{baseURL:o}})(s)}case "api/anthropic":{let{createAnthropic:i}=te("@ai-sdk/anthropic");return i({apiKey:r||process.env.ANTHROPIC_API_KEY,...o&&{baseURL:o}})(s)}case "api/google":{let{createGoogleGenerativeAI:i}=te("@ai-sdk/google");return i({apiKey:r||process.env.GOOGLE_API_KEY})(s)}default:throw new exports.ProviderError(`Unsupported API provider: ${t}`,t)}}};});var ps={};tr(ps,{registerApiProviders:()=>us});function us(n){Te("api",(e,t)=>{let r=n?.apiKeys?.[e];return new exports.VercelProviderRuntime({provider:t,model:"",apiKey:r,maxSteps:n?.defaults?.maxSteps,temperature:n?.defaults?.temperature})});}var Tn=M(()=>{p();we();Cn();});exports.AcpProtocolError=void 0;var Pn=M(()=>{p();exports.AcpProtocolError=class extends Error{constructor(t,r,o){super(t);this.code=r;this.data=o;}code;data;name="AcpProtocolError"};});var Bd,zd,gs,fs,Kd;exports.AcpConnection=void 0;var Tr=M(()=>{p();gt();Pn();we();Zr();gr();Bd=-32e3,zd=2e3,gs=3e4,fs=1e4,Kd=8*36e5,exports.AcpConnection=class{constructor(e){this.options=e;}options;proc=null;sdkConnection=null;disposed=false;stderrBuffer="";collectedStderr="";pendingUpdateCallback=null;idleWatchdog=null;idleReject=null;idlePromise=null;authMethods=[];_initResponse=null;get initResponse(){return this._initResponse}async connect(e){if(this.disposed)throw new exports.ProviderError("AcpConnection has been disposed","acp");let t=this.options.spawn,r=process.platform==="win32"&&(t.shellOnWindows??true),o={...process.env,...this.options.env??{}},s=this.options.cwd??process.cwd(),i;try{let h=Ke({command:t.command,env:o,cwd:s,allowShellFallback:r});i=Ge(h,t.args);}catch(h){throw new exports.ProviderError(h instanceof Error?h.message:String(h),"acp")}let a=child_process.spawn(i.command,i.argv,{stdio:["pipe","pipe","pipe"],env:o,cwd:this.options.cwd,shell:i.shell??false,windowsHide:true,detached:process.platform!=="win32"});a.pid!==void 0&&this.options.onPid?.(a.pid),a.stderr.on("data",h=>{let _=h.toString();this.collectedStderr+=_,this.stderrBuffer+=_;let A=this.stderrBuffer.split(`
25
+ `);this.stderrBuffer=A.pop()??"";for(let I of A)I.trim()&&this.options.onStderr?.(I);}),this.proc=a;let d=this.options.idleMs??6e5;d>0&&(this.idlePromise=new Promise((h,_)=>{this.idleReject=_;}),this.idlePromise.catch(()=>{}),this.idleWatchdog=new ht({timeoutMs:d,onIdle:()=>{let h=Math.round(d/6e4),_=new Je(`acp produced no output for ${h}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,"acp");this.idleReject?.(_),this.dispose();}}),this.idleWatchdog.start()),a.stdin.on("error",h=>{h.code!=="EPIPE"&&this.options.onStderr?.(`ACP stdin error: ${h.message}`);});let l=new WritableStream({write:h=>new Promise((_,A)=>{a.stdin.write(h,I=>{I?A(I):_();});}),close:()=>{a.stdin.end();}}),c=new ReadableStream({start:h=>{a.stdout.on("data",_=>{this.idleWatchdog?.refresh(),h.enqueue(new Uint8Array(_));}),a.stdout.on("end",()=>{h.close();}),a.stdout.on("error",_=>{h.error(_);});}}),f=sdk.ndJsonStream(l,c),g=this,m=new sdk.ClientSideConnection(h=>({requestPermission:async _=>{if(g.options.configOptions?.allow_all!==void 0){let A=_.options;if(Array.isArray(A)&&A.length>0)return {outcome:{outcome:"selected",optionId:(A.find(b=>b.kind==="allow_once")??A.find(b=>b.kind?.startsWith("allow_"))??A[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async _=>{g.pendingUpdateCallback?.(_);}}),f);this.sdkConnection=m;let w=new Promise((h,_)=>{a.on("error",A=>{if(A.code==="ENOENT"){let b=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;_(new exports.ProviderError(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${b}`,"acp"));}else _(new exports.ProviderError(`ACP spawn error: ${A.message}`,"acp"));});}),k=this.doInitialize(m,e),v=new Promise((h,_)=>{setTimeout(()=>{_(new exports.AcpProtocolError(`ACP connect timeout after ${gs}ms. The ACP adapter may not be installed or may require interactive setup.`));},gs).unref();});await Promise.race([k,v,w]);}async doInitialize(e,t){let r=await e.initialize({protocolVersion:1,clientCapabilities:{auth:{}},clientInfo:{name:t?.name??"crewx-sdk",version:t?.version??"0.8.4"}});this._initResponse=r,this.authMethods=r.authMethods??[];}async newSession(e){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionWithTimeout(e)}catch(t){if(!this.isAuthError(t))throw t;return await this.tryAuthenticate(),this.newSessionWithTimeout(e)}}async newSessionWithTimeout(e){return (await this.newSessionRawTimeout(e)).sessionId}async newSessionRaw(e){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionRawTimeout(e)}catch(t){if(!this.isAuthError(t))throw t;return await this.tryAuthenticate(),this.newSessionRawTimeout(e)}}async newSessionRawTimeout(e){let t=this.sdkConnection.newSession(e),r=new Promise((o,s)=>{setTimeout(()=>{s(new exports.AcpProtocolError(`ACP session/new timeout after ${fs}ms`));},fs).unref();});return Promise.race([t,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===Bd}async tryAuthenticate(){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected.","acp");let e=this.authMethods.find(r=>r.type==="env_var"&&this.hasEnvVarsFor(r));if(e){await this.sdkConnection.authenticate({methodId:e.id});return}let t=this.authMethods.map(r=>`${r.id} (${r.type??"agent"})`).join(", ");if(this.authMethods.length>0){let r=this.authMethods.filter(o=>o.type==="env_var");if(r.length>0){let o=r.flatMap(s=>(s.vars??[]).filter(i=>!i.optional&&!process.env[i.name]).map(i=>i.name));throw new exports.AcpProtocolError(`ACP authentication required. Missing environment variables: ${o.join(", ")}. Set them in your shell or crewx.yaml env block.`)}throw new exports.AcpProtocolError(`ACP authentication required but no supported method found. Available methods: ${t}. CrewX currently supports env_var authentication only.`)}throw new exports.AcpProtocolError("ACP agent requires authentication but advertised no auth methods.")}hasEnvVarsFor(e){return !e.vars||e.vars.length===0?true:e.vars.filter(t=>!t.optional).every(t=>!!process.env[t.name])}async setModel(e,t){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.unstable_setSessionModel({sessionId:e,modelId:t});}async setMode(e,t){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionMode({sessionId:e,modeId:t});}async setConfigOption(e,t,r){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionConfigOption({sessionId:e,configId:t,value:r});}async prompt(e,t,r,o){if(!this.sdkConnection||!this.proc)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");this.pendingUpdateCallback=r??null;let s=this.sdkConnection,i=this.proc,a=o??Kd,d=false,l=s.prompt({sessionId:e,prompt:t}).finally(()=>{d=true;}),c=new Promise((m,w)=>{setTimeout(()=>{s.cancel({sessionId:e}).catch(()=>{}),w(new Xe(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),f=new Promise((m,w)=>{let k=(A,I,b)=>{if(d)return;let V=I!=null?`signal=${I}`:`code=${String(A)}`;w(new exports.ProviderError(`ACP process terminated unexpectedly (${V}) [${b}]: ${this.collectedStderr.slice(-500)}`,"acp"));},v=(A,I)=>k(A,I,"exit"),h=(A,I)=>k(A,I,"close");i.once("exit",v),i.once("close",h);let _=()=>{i.off("exit",v),i.off("close",h);};l.then(_,_);}),g=[l,c,f];this.idlePromise&&g.push(this.idlePromise);try{return await Promise.race(g)}finally{this.pendingUpdateCallback=null;}}async dispose(){if(this.disposed)return;this.disposed=true,this.idleWatchdog?.stop(),this.pendingUpdateCallback=null,this.sdkConnection=null;let e=this.proc;if(!e)return;this.proc=null,this.stderrBuffer.trim()&&(this.options.onStderr?.(this.stderrBuffer),this.stderrBuffer="");let t=e.pid,r=o=>{if(t!==void 0&&process.platform!=="win32")try{process.kill(-t,o);}catch{}else try{e.kill(o);}catch{}};await new Promise(o=>{let s=()=>{clearTimeout(i),o();};e.once("close",s),e.once("error",s);try{r("SIGTERM");}catch{s();return}let i=setTimeout(()=>{r("SIGKILL");},zd);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function ms(n,e){if(n!=null&&typeof n=="object"){let t=n;if(typeof t.command=="string")return t.command;if(typeof t.file_path=="string")return t.file_path;if(typeof t.filePath=="string")return t.filePath;if(typeof t.path=="string")return t.path;if(typeof t.query=="string")return t.query;if(typeof t.pattern=="string")return t.pattern;if(typeof t.url=="string")return t.url;if(Object.keys(t).length>0)return JSON.stringify(t)}if(e&&e.length>0)return e.map(t=>t.path).join(", ")}var Gd;exports.AcpProviderRuntime=void 0;var bn=M(()=>{p();De();Tr();Gd={read:"Read",edit:"Edit",delete:"Delete",move:"Move",search:"Search",execute:"Bash",think:"Think",fetch:"WebFetch",switch_mode:"SwitchMode"};exports.AcpProviderRuntime=class{constructor(e,t,r){this.adapter=t;}adapter;async query(e,t){return this.runPrompt(e,t)}async execute(e,t){return this.runPrompt(e,t)}async dispose(){}async runPrompt(e,t){let{command:r,args:o}=this.adapter.spawn;t?.onCommand?.(`${r} ${o.join(" ")}`);let s=this.adapter.buildSpawnEnv?.(t?.model??""),i=s?{...t?.env,...s}:t?.env,a=new exports.AcpConnection({spawn:this.adapter.spawn,env:i,cwd:t?.cwd,timeoutMs:t?.timeoutMs,idleMs:t?.idleMs,onPid:t?.onPid,onStderr:d=>t?.onOutput?.(d,"stderr"),configOptions:t?.configOptions});try{await a.connect(this.adapter.clientInfo);let d=this.adapter.buildSessionParams({cwd:t?.cwd,env:t?.env,model:t?.model,systemPrompt:t?.systemPrompt}),l=await a.newSession(d);await this.applySessionOptions(a,l,t);let c=this.composePrompt(e,t),f=[],g=await a.prompt(l,c,m=>this.handleUpdate(m,t,f),t?.timeoutMs);return this.handleUsage(g,t),f.join("")}finally{await a.dispose().catch(()=>{});}}async applySessionOptions(e,t,r){if(r?.model&&r.model!=="default"&&!this.adapter.buildSpawnEnv){let o=this.adapter.buildEffortAction?.(r.effort??"",r.model);try{o?.type==="set_model"?await e.setModel(t,o.modelId):await e.setModel(t,r.model);}catch(s){console.warn(`[acp] setModel(${r.model}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.mode){let o=this.adapter.resolveMode?.(r.mode)??r.mode;if(o)try{await e.setMode(t,o);}catch(s){console.warn(`[acp] setMode(${o}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.effort){let o=this.adapter.buildEffortAction?.(r.effort,r.model);if(o&&o.type==="set_config_option")try{await e.setConfigOption(t,o.configId,o.value);}catch(s){console.warn(`[acp] setConfigOption(${o.configId}) effort failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.configOptions)for(let[o,s]of Object.entries(r.configOptions))try{await e.setConfigOption(t,o,s);}catch(i){console.warn(`[acp] setConfigOption(${o}) failed, retrying: ${i instanceof Error?i.message:String(i)}`);try{await new Promise(a=>setTimeout(a,500)),await e.setConfigOption(t,o,s);}catch(a){console.warn(`[acp] setConfigOption(${o}) retry failed: ${a instanceof Error?a.message:String(a)}`);}}}composePrompt(e,t){let r=[];return t?.systemPrompt?.trim()&&(r.push(t.systemPrompt),r.push("---")),t?.context&&(r.push(t.context),r.push("---")),r.push(e),[{type:"text",text:r.join(`
31
26
 
32
- `)}]}handleUpdate(e,t,r){let o=e.update;if(o.sessionUpdate==="agent_message_chunk"){let s=null;this.adapter.extractTextFromUpdate?s=this.adapter.extractTextFromUpdate(e):s=Mr(e),s!==null&&(r.push(s),t?.onOutput?.(s,"stdout"));}else if(o.sessionUpdate==="tool_call"){this.pushBlockBoundary(r);let s=new Date().toISOString(),i=o,a={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},d=this.resolveToolCall(a),l={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:d.toolName,toolInput:d.toolInput};t?.onTaskLog?.([l]);}else if(o.sessionUpdate==="tool_call_update"){let s=new Date().toISOString(),i=o;if(i.status==="completed"||i.status==="failed"){let d=this.extractResultPreview(i.rawOutput),l={timestamp:s,type:"tool_result",toolUseId:i.toolCallId,resultPreview:d,isError:i.status==="failed"};t?.onTaskLog?.([l]);}else if(i.rawInput!=null&&typeof i.rawInput=="object"&&Object.keys(i.rawInput).length>0){this.pushBlockBoundary(r);let d={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},l=this.resolveToolCall(d),u={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:l.toolName,toolInput:l.toolInput};t?.onTaskLog?.([u]);}}else o.sessionUpdate;}pushBlockBoundary(e){e.length===0||e[e.length-1].endsWith(`
27
+ `)}]}handleUpdate(e,t,r){let o=e.update;if(o.sessionUpdate==="agent_message_chunk"){let s=null;this.adapter.extractTextFromUpdate?s=this.adapter.extractTextFromUpdate(e):s=_n(e),s!==null&&(r.push(s),t?.onOutput?.(s,"stdout"));}else if(o.sessionUpdate==="tool_call"){this.pushBlockBoundary(r);let s=new Date().toISOString(),i=o,a={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},d=this.resolveToolCall(a),l={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:d.toolName,toolInput:d.toolInput};t?.onTaskLog?.([l]);}else if(o.sessionUpdate==="tool_call_update"){let s=new Date().toISOString(),i=o;if(i.status==="completed"||i.status==="failed"){let d=this.extractResultPreview(i.rawOutput),l={timestamp:s,type:"tool_result",toolUseId:i.toolCallId,resultPreview:d,isError:i.status==="failed"};t?.onTaskLog?.([l]);}else if(i.rawInput!=null&&typeof i.rawInput=="object"&&Object.keys(i.rawInput).length>0){this.pushBlockBoundary(r);let d={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},l=this.resolveToolCall(d),c={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:l.toolName,toolInput:l.toolInput};t?.onTaskLog?.([c]);}}else o.sessionUpdate;}pushBlockBoundary(e){e.length===0||e[e.length-1].endsWith(`
33
28
 
34
29
  `)||e.push(`
35
30
 
36
- `);}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:xo(e.rawInput,e.locations)??(e.title||void 0)};if(this.adapter.parseToolCall){let s=this.adapter.parseToolCall(e);if(s)return {toolName:s.toolName??e.title??"unknown",toolInput:s.toolInput}}let r=va[e.kind??""]??e.title??"unknown",o=xo(e.rawInput,e.locations)??(e.title||void 0);return {toolName:r,toolInput:o}}extractResultPreview(e){if(e!=null){if(typeof e=="string")return e;if(Array.isArray(e)){let t=e.filter(r=>r!=null&&typeof r=="object"&&r.type==="text"&&typeof r.text=="string").map(r=>r.text);if(t.length>0)return t.join(`
37
- `)}if(typeof e=="object"){let t=e;if(typeof t.formatted_output=="string")return t.formatted_output;if(typeof t.content=="string")return t.content;if(Array.isArray(t.content)){let r=this.extractResultPreview(t.content);if(r)return r}if(typeof t.output=="string")return t.output;if(typeof t.text=="string")return t.text;if(typeof t.message=="string")return t.message;if(t.result!=null){let r=this.extractResultPreview(t.result);if(r)return r}if(t.error!=null){let r=this.extractResultPreview(t.error);if(r)return r}}return JSON.stringify(e)}}handleUsage(e,t){if(!t?.onUsage)return;if(this.adapter.extractUsage){let o=this.adapter.extractUsage(e);if(o){t.onUsage(o);return}}let r=e.usage;r&&t.onUsage({inputTokens:r.inputTokens??0,outputTokens:r.outputTokens??0,cachedInputTokens:r.cachedReadTokens??0,costUsd:0});}};});var ko;exports.claudeAcpAdapter=void 0;var Qt=N(()=>{c();Ce();ko=[{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8 (Extended)"},{id:"claude-opus-4-8",name:"Claude Opus 4.8"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7 (Extended)"},{id:"claude-opus-4-7",name:"Claude Opus 4.7"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6 (Extended)"},{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6 (Extended)"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5"}],exports.claudeAcpAdapter={spawn:{command:"npx",args:["-y","@agentclientprotocol/claude-agent-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/claude-agent-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Claude",defaultMode:"default"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},extractUsage(n){let e=n.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"bypassPermissions",buildEffortAction(n){return n?{type:"set_config_option",configId:"effort",value:n}:null},buildSpawnEnv(n){if(!(!n||n==="default"))return {ANTHROPIC_MODEL:n}},resolveMode(n){return {yolo:"bypassPermissions"}[n]??n},parseEvent:le};});exports.codexAcpAdapter=void 0;var zr=N(()=>{c();Ce();exports.codexAcpAdapter={spawn:{command:"npx",args:["-y","@agentclientprotocol/codex-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/codex-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Codex",defaultMode:"agent"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},extractUsage(n){let e=n.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"agent-full-access",buildEffortAction(n,e){if(!e)return null;let t=e.match(/^(.+?)\[([^\]]+)\]$/),r=t?t[1]:e,o=t?t[2]:void 0;return {type:"set_model",modelId:`${r}[${n||o||"medium"}]`}},resolveMode(n){return {yolo:"agent-full-access",default:"agent",plan:"read-only"}[n]??n},parseEvent:le};});var et;exports.copilotAcpAdapter=void 0;var Kr=N(()=>{c();Ce();et="https://agentclientprotocol.com/protocol/session-modes",exports.copilotAcpAdapter={spawn:{command:"copilot",args:["--acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"GitHub Copilot"},buildSessionParams(n){return {cwd:n.cwd?G.resolve(n.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${et}#autopilot`,buildEffortAction(n){return n?{type:"set_config_option",configId:"reasoning_effort",value:n}:null},resolveMode(n){return n.startsWith("https://")?n:{yolo:`${et}#autopilot`,default:`${et}#agent`,agent:`${et}#agent`,plan:`${et}#plan`,autopilot:`${et}#autopilot`}[n]??null},parseEvent:le};});exports.opencodeAcpAdapter=void 0;var Vr=N(()=>{c();Ce();exports.opencodeAcpAdapter={spawn:{command:"opencode",args:["acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"OpenCode"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},yoloModeId:void 0,buildEffortAction(n){return null},resolveMode(n){let e={default:"build"};return n==="yolo"?null:e[n]??n},parseEvent:le};});exports.ACP_ADAPTERS=void 0;var rr=N(()=>{c();Qt();zr();Kr();Vr();Qt();zr();Kr();Vr();exports.ACP_ADAPTERS={codex:exports.codexAcpAdapter,claude:exports.claudeAcpAdapter,opencode:exports.opencodeAcpAdapter,copilot:exports.copilotAcpAdapter};});var vo={};bt(vo,{registerAcpProviders:()=>_o});function _o(n){if(n){he("acp",n);return}he("acp",(e,t)=>{let r=exports.ACP_ADAPTERS[e];if(!r)throw new exports.ProviderError(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(exports.ACP_ADAPTERS).join(", ")}`,t);return new exports.AcpProviderRuntime(e,r,t)});}var Gr=N(()=>{c();pe();Wr();rr();pe();});function Ra(n){if(!n)return n;let e=n.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}exports.McpHttpTransport=void 0;var Xr=N(()=>{c();exports.McpHttpTransport=class{endpoint;headers;timeoutMs;constructor(e){let t=Ra(e.url);this.endpoint=`${t}/mcp`,this.headers={"Content-Type":"application/json",...e.headers??{}},e.apiKey&&(this.headers.Authorization=`Bearer ${e.apiKey}`),this.timeoutMs=e.timeoutMs??3e4;}async send(e){let t=new AbortController,r=setTimeout(()=>t.abort(),this.timeoutMs);try{let o=await fetch(this.endpoint,{method:"POST",headers:this.headers,body:JSON.stringify(e),signal:t.signal});if(clearTimeout(r),!o.ok){let a=await o.text();throw new Error(`HTTP ${o.status}: ${o.statusText}${a?` - ${a}`:""}`)}let s=o.headers.get("content-type");if(s?.includes("application/json"))return await o.json();let i=await o.text();return {jsonrpc:"2.0",id:e.id,error:{code:-32600,message:`Unexpected response content-type: ${s}`,data:i}}}catch(o){throw clearTimeout(r),o instanceof Error&&o.name==="AbortError"?new Error(`MCP-HTTP request timeout after ${this.timeoutMs}ms to ${this.endpoint}`):o}}async close(){}};});exports.RemoteAgentManager=void 0;var Jr=N(()=>{c();Xr();exports.RemoteAgentManager=class{logger;configs=new Map;transports=new Map;constructor(e={}){this.logger=e.logger??(()=>{});}loadConfig(e,t){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,new exports.McpHttpTransport({url:t.url,apiKey:t.apiKey,headers:t.headers,timeoutMs:t.timeoutMs})),this.logger(`Loaded remote agent config for: ${e}`,"debug");}loadConfigWithTransport(e,t,r){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,r),this.logger(`Loaded remote agent config for: ${e} (custom transport)`,"debug");}getConfig(e){return this.configs.get(e)}isRemoteAgent(e){return this.configs.has(e)}getRemoteAgentIds(){return Array.from(this.configs.keys())}async query(e,t){let r=this.requireConfig(e),o=r.tools?.query??"crewx_queryAgent",i={agentId:r.agentId??e,query:t.query};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote query failed for agent ${e}: ${d}`,"error"),a}}async execute(e,t){let r=this.requireConfig(e),o=r.tools?.execute??"crewx_executeAgent",i={agentId:r.agentId??e,task:t.task};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote execute failed for agent ${e}: ${d}`,"error"),a}}mapToolNames(e,t){let r=this.requireConfig(e);r.tools={query:t.query??r.tools?.query??"crewx_queryAgent",execute:t.execute??r.tools?.execute??"crewx_executeAgent"},this.logger(`Updated tool name mapping for agent ${e}`,"debug");}async clearConfigs(){for(let e of this.transports.values())await e.close();this.configs.clear(),this.transports.clear(),this.logger("Cleared all remote agent configurations","debug");}requireConfig(e){let t=this.configs.get(e);if(!t)throw new Error(`Agent ${e} is not configured as a remote agent`);return t}async callRemoteTool(e,t,r){let o=this.transports.get(e);if(!o)throw new Error(`No transport available for agent ${e}`);let s={jsonrpc:"2.0",id:`${t}-${Date.now()}`,method:"tools/call",params:{name:t,arguments:r}};this.logger(`Calling remote MCP tool ${t} for agent ${e}`,"debug");let i=await o.send(s);if(i.error)throw new Error(i.error.message||"MCP server returned an error");return i.result}normalizeResponse(e){if(!e)return {success:false,content:[{type:"text",text:"Remote agent returned no response."}]};let t=e;if(Array.isArray(t.content)&&t.content.length>0)return t;let r=t.response??t.implementation??t.message??t.output,o=typeof r=="string"?r:JSON.stringify(r??e,null,2);return {...t,content:[{type:"text",text:o}]}}validateConfig(e){if(!e.url)throw new Error("Remote agent configuration requires a URL");if(!e.url.startsWith("http://")&&!e.url.startsWith("https://"))throw new Error("Remote agent URL must start with http:// or https://");if(e.type!=="mcp-http")throw new Error(`Unsupported remote agent type: ${e.type}`)}};});var Ro={};bt(Ro,{RemoteProviderRuntime:()=>exports.RemoteProviderRuntime,createRemoteProviderFactory:()=>Ao,resolveFileRemoteAgent:()=>Oa});function Sa(n){let e=so.readFileSync(n,"utf-8"),t=jsYaml.load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function Ia(n){let e=Array.isArray(n.provider)?n.provider[0]:n.provider;return e||(Array.isArray(n.inline?.provider)?n.inline.provider[0]:n.inline?.provider)}function Oa(n,e=Sa,t=so.existsSync){let r=n.location.replace("file://","");if(!t(r))throw new Error(`Remote config file not found: ${r}`);if(!n.external_agent_id)throw new Error(`external_agent_id is required for file:// remote provider "${n.id}"`);let s=e(r).agents?.find(d=>d.id===n.external_agent_id);if(!s)throw new Error(`Agent "${n.external_agent_id}" not found in ${r}`);let i=Ia(s);if(!i)throw new Error(`Agent "${n.external_agent_id}" in ${r} has no provider configured`);if(i.startsWith("remote/"))throw new Error(`Chained remotes not allowed: ${n.id} \u2192 ${i}`);let a=G.resolve(G.dirname(r),s.working_directory??".");return {agent:{...s,working_directory:a},provider:i}}function Ao(n,e=we){return (t,r)=>{let o=n.get(t);if(!o)throw new Error(`Remote provider "${t}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`);if(o.location.startsWith("file://"))throw new Error(`Remote provider "${t}" uses file:// location which is not supported at the SDK level. Use the CLI commands (crewx query / crewx execute) which handle file:// remotes automatically.`);return new exports.RemoteProviderRuntime(t,o,e)}}function Ma(n,e){let t=e.location;if(!t)throw new Error("Remote provider config requires a location");if(!t.startsWith("http://")&&!t.startsWith("https://"))throw new Error(`Unsupported remote location protocol for MCP-HTTP: ${t}`);return {type:"mcp-http",url:t,apiKey:e.apiKey,headers:e.headers,timeoutMs:e.timeout?.query??3e4,agentId:e.external_agent_id??n}}exports.RemoteProviderRuntime=void 0;var Yr=N(()=>{c();pe();Jr();exports.RemoteProviderRuntime=class{manager;agentId;constructor(e,t,r=we){this.agentId=t.external_agent_id??e,this.manager=new exports.RemoteAgentManager;let o=Ma(e,t);this.manager.loadConfig(this.agentId,o);}async query(e,t){return (await this.manager.query(this.agentId,{agentId:this.agentId,query:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
31
+ `);}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:ms(e.rawInput,e.locations)??(e.title||void 0)};if(this.adapter.parseToolCall){let s=this.adapter.parseToolCall(e);if(s)return {toolName:s.toolName??e.title??"unknown",toolInput:s.toolInput}}let r=Gd[e.kind??""]??e.title??"unknown",o=ms(e.rawInput,e.locations)??(e.title||void 0);return {toolName:r,toolInput:o}}extractResultPreview(e){if(e!=null){if(typeof e=="string")return e;if(Array.isArray(e)){let t=e.filter(r=>r!=null&&typeof r=="object"&&r.type==="text"&&typeof r.text=="string").map(r=>r.text);if(t.length>0)return t.join(`
32
+ `)}if(typeof e=="object"){let t=e;if(typeof t.formatted_output=="string")return t.formatted_output;if(typeof t.content=="string")return t.content;if(Array.isArray(t.content)){let r=this.extractResultPreview(t.content);if(r)return r}if(typeof t.output=="string")return t.output;if(typeof t.text=="string")return t.text;if(typeof t.message=="string")return t.message;if(t.result!=null){let r=this.extractResultPreview(t.result);if(r)return r}if(t.error!=null){let r=this.extractResultPreview(t.error);if(r)return r}}return JSON.stringify(e)}}handleUsage(e,t){if(!t?.onUsage)return;if(this.adapter.extractUsage){let o=this.adapter.extractUsage(e);if(o){t.onUsage(o);return}}let r=e.usage;r&&t.onUsage({inputTokens:r.inputTokens??0,outputTokens:r.outputTokens??0,cachedInputTokens:r.cachedReadTokens??0,costUsd:0});}};});exports.claudeAcpAdapter=void 0;var Sn=M(()=>{p();De();exports.claudeAcpAdapter={spawn:{command:"npx",args:["-y","@agentclientprotocol/claude-agent-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/claude-agent-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Claude",defaultMode:"default"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},extractUsage(n){let e=n.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"bypassPermissions",buildEffortAction(n){return n?{type:"set_config_option",configId:"effort",value:n}:null},buildSpawnEnv(n){if(!(!n||n==="default"))return {ANTHROPIC_MODEL:n}},resolveMode(n){return {yolo:"bypassPermissions"}[n]??n},parseEvent:ge};});exports.codexAcpAdapter=void 0;var In=M(()=>{p();De();exports.codexAcpAdapter={spawn:{command:"npx",args:["-y","@agentclientprotocol/codex-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/codex-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Codex",defaultMode:"agent"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},extractUsage(n){let e=n.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"agent-full-access",buildEffortAction(n,e){if(!e)return null;let t=e.match(/^(.+?)\[([^\]]+)\]$/),r=t?t[1]:e,o=t?t[2]:void 0;return {type:"set_model",modelId:`${r}[${n||o||"medium"}]`}},resolveMode(n){return {yolo:"agent-full-access",default:"agent",plan:"read-only"}[n]??n},parseEvent:ge};});var xt;exports.copilotAcpAdapter=void 0;var On=M(()=>{p();De();xt="https://agentclientprotocol.com/protocol/session-modes",exports.copilotAcpAdapter={spawn:{command:"copilot",args:["--acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"GitHub Copilot"},buildSessionParams(n){return {cwd:n.cwd?K.resolve(n.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${xt}#autopilot`,buildEffortAction(n){return n?{type:"set_config_option",configId:"reasoning_effort",value:n}:null},resolveMode(n){return n.startsWith("https://")?n:{yolo:`${xt}#autopilot`,default:`${xt}#agent`,agent:`${xt}#agent`,plan:`${xt}#plan`,autopilot:`${xt}#autopilot`}[n]??null},parseEvent:ge};});exports.opencodeAcpAdapter=void 0;var Mn=M(()=>{p();De();exports.opencodeAcpAdapter={spawn:{command:"opencode",args:["acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"OpenCode"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},yoloModeId:void 0,buildEffortAction(n){return null},resolveMode(n){let e={default:"build"};return n==="yolo"?null:e[n]??n},parseEvent:ge};});exports.ACP_ADAPTERS=void 0;var Or=M(()=>{p();Sn();In();On();Mn();Sn();In();On();Mn();exports.ACP_ADAPTERS={codex:exports.codexAcpAdapter,claude:exports.claudeAcpAdapter,opencode:exports.opencodeAcpAdapter,copilot:exports.copilotAcpAdapter};});var hs={};tr(hs,{registerAcpProviders:()=>ys});function ys(n){if(n){Te("acp",n);return}Te("acp",(e,t)=>{let r=exports.ACP_ADAPTERS[e];if(!r)throw new exports.ProviderError(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(exports.ACP_ADAPTERS).join(", ")}`,t);return new exports.AcpProviderRuntime(e,r,t)});}var Nn=M(()=>{p();we();bn();Or();we();});function Jd(n){if(!n)return n;let e=n.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}exports.McpHttpTransport=void 0;var Dn=M(()=>{p();exports.McpHttpTransport=class{endpoint;headers;timeoutMs;constructor(e){let t=Jd(e.url);this.endpoint=`${t}/mcp`,this.headers={"Content-Type":"application/json",...e.headers??{}},e.apiKey&&(this.headers.Authorization=`Bearer ${e.apiKey}`),this.timeoutMs=e.timeoutMs??3e4;}async send(e){let t=new AbortController,r=setTimeout(()=>t.abort(),this.timeoutMs);try{let o=await fetch(this.endpoint,{method:"POST",headers:this.headers,body:JSON.stringify(e),signal:t.signal});if(clearTimeout(r),!o.ok){let a=await o.text();throw new Error(`HTTP ${o.status}: ${o.statusText}${a?` - ${a}`:""}`)}let s=o.headers.get("content-type");if(s?.includes("application/json"))return await o.json();let i=await o.text();return {jsonrpc:"2.0",id:e.id,error:{code:-32600,message:`Unexpected response content-type: ${s}`,data:i}}}catch(o){throw clearTimeout(r),o instanceof Error&&o.name==="AbortError"?new Error(`MCP-HTTP request timeout after ${this.timeoutMs}ms to ${this.endpoint}`):o}}async close(){}};});exports.RemoteAgentManager=void 0;var Ln=M(()=>{p();Dn();exports.RemoteAgentManager=class{logger;configs=new Map;transports=new Map;constructor(e={}){this.logger=e.logger??(()=>{});}loadConfig(e,t){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,new exports.McpHttpTransport({url:t.url,apiKey:t.apiKey,headers:t.headers,timeoutMs:t.timeoutMs})),this.logger(`Loaded remote agent config for: ${e}`,"debug");}loadConfigWithTransport(e,t,r){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,r),this.logger(`Loaded remote agent config for: ${e} (custom transport)`,"debug");}getConfig(e){return this.configs.get(e)}isRemoteAgent(e){return this.configs.has(e)}getRemoteAgentIds(){return Array.from(this.configs.keys())}async query(e,t){let r=this.requireConfig(e),o=r.tools?.query??"crewx_queryAgent",i={agentId:r.agentId??e,query:t.query};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote query failed for agent ${e}: ${d}`,"error"),a}}async execute(e,t){let r=this.requireConfig(e),o=r.tools?.execute??"crewx_executeAgent",i={agentId:r.agentId??e,task:t.task};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote execute failed for agent ${e}: ${d}`,"error"),a}}mapToolNames(e,t){let r=this.requireConfig(e);r.tools={query:t.query??r.tools?.query??"crewx_queryAgent",execute:t.execute??r.tools?.execute??"crewx_executeAgent"},this.logger(`Updated tool name mapping for agent ${e}`,"debug");}async clearConfigs(){for(let e of this.transports.values())await e.close();this.configs.clear(),this.transports.clear(),this.logger("Cleared all remote agent configurations","debug");}requireConfig(e){let t=this.configs.get(e);if(!t)throw new Error(`Agent ${e} is not configured as a remote agent`);return t}async callRemoteTool(e,t,r){let o=this.transports.get(e);if(!o)throw new Error(`No transport available for agent ${e}`);let s={jsonrpc:"2.0",id:`${t}-${Date.now()}`,method:"tools/call",params:{name:t,arguments:r}};this.logger(`Calling remote MCP tool ${t} for agent ${e}`,"debug");let i=await o.send(s);if(i.error)throw new Error(i.error.message||"MCP server returned an error");return i.result}normalizeResponse(e){if(!e)return {success:false,content:[{type:"text",text:"Remote agent returned no response."}]};let t=e;if(Array.isArray(t.content)&&t.content.length>0)return t;let r=t.response??t.implementation??t.message??t.output,o=typeof r=="string"?r:JSON.stringify(r??e,null,2);return {...t,content:[{type:"text",text:o}]}}validateConfig(e){if(!e.url)throw new Error("Remote agent configuration requires a URL");if(!e.url.startsWith("http://")&&!e.url.startsWith("https://"))throw new Error("Remote agent URL must start with http:// or https://");if(e.type!=="mcp-http")throw new Error(`Unsupported remote agent type: ${e.type}`)}};});var _s={};tr(_s,{RemoteProviderRuntime:()=>exports.RemoteProviderRuntime,createRemoteProviderFactory:()=>ws,resolveFileRemoteAgent:()=>nl});function tl(n){let e=rs.readFileSync(n,"utf-8"),t=jsYaml.load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function rl(n){let e=Array.isArray(n.provider)?n.provider[0]:n.provider;return e||(Array.isArray(n.inline?.provider)?n.inline.provider[0]:n.inline?.provider)}function nl(n,e=tl,t=rs.existsSync){let r=n.location.replace("file://","");if(!t(r))throw new Error(`Remote config file not found: ${r}`);if(!n.external_agent_id)throw new Error(`external_agent_id is required for file:// remote provider "${n.id}"`);let s=e(r).agents?.find(d=>d.id===n.external_agent_id);if(!s)throw new Error(`Agent "${n.external_agent_id}" not found in ${r}`);let i=rl(s);if(!i)throw new Error(`Agent "${n.external_agent_id}" in ${r} has no provider configured`);if(i.startsWith("remote/"))throw new Error(`Chained remotes not allowed: ${n.id} \u2192 ${i}`);let a=K.resolve(K.dirname(r),s.working_directory??".");return {agent:{...s,working_directory:a},provider:i}}function ws(n,e=Pe){return (t,r)=>{let o=n.get(t);if(!o)throw new Error(`Remote provider "${t}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`);if(o.location.startsWith("file://"))throw new Error(`Remote provider "${t}" uses file:// location which is not supported at the SDK level. Use the CLI commands (crewx query / crewx execute) which handle file:// remotes automatically.`);return new exports.RemoteProviderRuntime(t,o,e)}}function ol(n,e){let t=e.location;if(!t)throw new Error("Remote provider config requires a location");if(!t.startsWith("http://")&&!t.startsWith("https://"))throw new Error(`Unsupported remote location protocol for MCP-HTTP: ${t}`);return {type:"mcp-http",url:t,apiKey:e.apiKey,headers:e.headers,timeoutMs:e.timeout?.query??3e4,agentId:e.external_agent_id??n}}exports.RemoteProviderRuntime=void 0;var $n=M(()=>{p();we();Ln();exports.RemoteProviderRuntime=class{manager;agentId;constructor(e,t,r=Pe){this.agentId=t.external_agent_id??e,this.manager=new exports.RemoteAgentManager;let o=ol(e,t);this.manager.loadConfig(this.agentId,o);}async query(e,t){return (await this.manager.query(this.agentId,{agentId:this.agentId,query:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
38
33
  `)}async execute(e,t){return (await this.manager.execute(this.agentId,{agentId:this.agentId,task:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
39
- `)}};});var bo={};bt(bo,{PluginProviderRuntime:()=>exports.PluginProviderRuntime,createPluginProviderFactory:()=>To});function To(n){return (e,t)=>{let r=n.get(e);if(!r)throw new exports.ProviderError(`Plugin provider "${e}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new exports.PluginProviderRuntime(e,r)}}function Eo(n,e,t,r){let o=n.map(s=>s.replace(/\{model\}/g,e));return r&&o.push(t),o}function Da(n){if(!n||typeof n!="string")throw new Error("Plugin provider requires a cli_command")}function Co(n){if(!Array.isArray(n))throw new Error("CLI arguments must be an array");for(let e of n)if(typeof e!="string")throw new Error("Each CLI argument must be a string")}function La(n){for(let{pattern:e}of n)if(typeof e!="string")throw new Error("Error pattern must be a string")}function $a(n){for(let[e,t]of Object.entries(n))if(typeof e!="string"||typeof t!="string")throw new Error("env entries must be string key/value pairs")}exports.PluginProviderRuntime=void 0;var Qr=N(()=>{c();pe();Dt();exports.PluginProviderRuntime=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,Da(t.cli_command),Co(t.query_args),Co(t.execute_args),t.error_patterns&&La(t.error_patterns),t.env&&$a(t.env);}config;providerStr;async query(e,t){let r=t?.model??this.config.default_model??"default",o=Eo(this.config.query_args,r,e,this.config.prompt_in_args),s=this.config.prompt_in_args?void 0:e;t?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let i=this.config.timeout?.query??6e5;return this.runProcess(o,t,s,i)}async execute(e,t){let r=t?.model??this.config.default_model??"default",o=Eo(this.config.execute_args,r,e,this.config.prompt_in_args),s=this.config.prompt_in_args?void 0:e;t?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let i=this.config.timeout?.execute??6e5;return this.runProcess(o,t,s,i)}runProcess(e,t,r,o){return new Promise((s,i)=>{let a={...process.env,...this.config.env??{}},d=nt({command:this.config.cli_command,allowShellFallback:true}),l=ot(d,e),u=child_process.spawn(l.command,l.argv,{env:a,shell:l.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:l.windowsHide});r!==void 0&&u.stdin.write(r),u.stdin.end(),u.pid!==void 0&&t?.onPid?.(u.pid);let p="",f="",g="",h="";u.stdout.on("data",v=>{let w=v.toString();p+=w,g+=w;let _=g.split(`
40
- `);g=_.pop()??"";for(let k of _)k.trim()&&t?.onOutput?.(k,"stdout");}),u.stderr.on("data",v=>{let w=v.toString();f+=w,h+=w;let _=h.split(`
41
- `);h=_.pop()??"";for(let k of _)k.trim()&&t?.onOutput?.(k,"stderr");});let x=setTimeout(()=>{u.kill("SIGTERM"),i(new exports.ProviderError(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);u.on("error",v=>{if(clearTimeout(x),v.code==="ENOENT"){let w=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;i(new exports.ProviderError(w,this.providerStr));}else i(new exports.ProviderError(`Spawn error: ${v.message}`,this.providerStr));}),u.on("close",v=>{clearTimeout(x),g.trim()&&t?.onOutput?.(g,"stdout"),h.trim()&&t?.onOutput?.(h,"stderr");let w=v??0;if(t?.onExitCode?.(w),this.config.error_patterns){let _=f||p;for(let k of this.config.error_patterns)if(_.includes(k.pattern)){i(new exports.ProviderError(k.message,this.providerStr));return}}if(v!==0){i(new exports.ProviderError(`Process exited with code ${v}: ${f.slice(0,500)}`,this.providerStr));return}s(p.trim());});})}};});c();c();c();function ts(n){let e=o=>o.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=n.split("/").map(o=>o==="**"?".*":o.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function ue(n,e){try{return ts(e).test(n)}catch{return false}}c();c();var rs=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()),xn=zod.z.object({include:zod.z.array(zod.z.string()).optional()}).optional(),ns=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:rs.optional(),skills:xn}).catchall(zod.z.unknown()),kn=zod.z.object({agents:zod.z.array(ns).optional(),hooks:zod.z.array(zod.z.unknown()).optional(),settings:zod.z.record(zod.z.unknown()).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 Pe=class extends Error{constructor(t,r){super(t);this.cause=r;this.name="ConfigLoadError";}cause};function Pt(n){if(!n||typeof n!="string"||!n.trim())throw new Pe("YAML content must be a non-empty string");let e;try{e=jsYaml.load(n);}catch(o){throw new Pe(`YAML parse error: ${o.message}`,o)}let t=is(e),r=kn.safeParse(t);if(!r.success)throw new Pe(`Config validation error: ${r.error.message}`);return r.data}function St(n){let e;try{e=so.readFileSync(n,"utf-8");}catch(t){throw new Pe(`Cannot read file: ${n}`,t)}return Pt(e)}function is(n){if(!n||typeof n!="object")return {agents:[]};let e=n,t;if(e.agents&&typeof e.agents=="object"&&!Array.isArray(e.agents)){let o=e.agents;t=Object.entries(o).map(([s,i])=>({id:s,...i&&typeof i=="object"?i:{}}));}else if(Array.isArray(e.agents))t=e.agents;else return {...e,agents:[]};let r=t.map(o=>{if(o.provider===void 0&&o.inline&&typeof o.inline=="object"){let s=o.inline;if(s.provider!==void 0)return {...o,provider:s.provider}}return o});return {...e,agents:r}}c();var Se=G.join("templates","agents");function ls(){try{let e=(typeof J=="function"?J:module$1.createRequire(typeof __filename<"u"?__filename:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return G.dirname(e)}catch{return null}}function Ve(n){if(n&&so.existsSync(n))return n;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&so.existsSync(e))return e;let t=ls();if(t){let o=G.join(t,Se);if(so.existsSync(o))return o}let r=[G.join(__dirname,"..",Se),G.join(__dirname,"..","..",Se),G.join(__dirname,"..","..","..",Se),G.join(process.cwd(),"packages","sdk",Se),G.join(process.cwd(),Se)];for(let o of r)if(so.existsSync(o))return o;throw new Error(`[@crewx/sdk] Templates directory not found.
42
- `+(t?` package anchor: ${G.join(t,Se)}
34
+ `)}};});var As={};tr(As,{PluginProviderRuntime:()=>exports.PluginProviderRuntime,createPluginProviderFactory:()=>xs});function xs(n){return (e,t)=>{let r=n.get(e);if(!r)throw new exports.ProviderError(`Plugin provider "${e}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new exports.PluginProviderRuntime(e,r)}}function vs(n,e,t,r){let o=n.map(s=>s.replace(/\{model\}/g,e));return r&&o.push(t),o}function il(n){if(!n||typeof n!="string")throw new Error("Plugin provider requires a cli_command")}function ks(n){if(!Array.isArray(n))throw new Error("CLI arguments must be an array");for(let e of n)if(typeof e!="string")throw new Error("Each CLI argument must be a string")}function al(n){for(let{pattern:e}of n)if(typeof e!="string")throw new Error("Error pattern must be a string")}function dl(n){for(let[e,t]of Object.entries(n))if(typeof e!="string"||typeof t!="string")throw new Error("env entries must be string key/value pairs")}exports.PluginProviderRuntime=void 0;var Un=M(()=>{p();we();gt();exports.PluginProviderRuntime=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,il(t.cli_command),ks(t.query_args),ks(t.execute_args),t.error_patterns&&al(t.error_patterns),t.env&&dl(t.env);}config;providerStr;async query(e,t){let r=t?.model??this.config.default_model??"default",o=vs(this.config.query_args,r,e,this.config.prompt_in_args),s=this.config.prompt_in_args?void 0:e;t?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let i=this.config.timeout?.query??6e5;return this.runProcess(o,t,s,i)}async execute(e,t){let r=t?.model??this.config.default_model??"default",o=vs(this.config.execute_args,r,e,this.config.prompt_in_args),s=this.config.prompt_in_args?void 0:e;t?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let i=this.config.timeout?.execute??6e5;return this.runProcess(o,t,s,i)}runProcess(e,t,r,o){return new Promise((s,i)=>{let a={...process.env,...this.config.env??{}},d=Ke({command:this.config.cli_command,env:a,cwd:process.cwd(),resolution:this.config.prefer_local_bin?"local_first":"global_first",allowShellFallback:true}),l=Ge(d,e),c=child_process.spawn(l.command,l.argv,{env:a,shell:l.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:l.windowsHide});r!==void 0&&c.stdin.write(r),c.stdin.end(),c.pid!==void 0&&t?.onPid?.(c.pid);let f="",g="",m="",w="";c.stdout.on("data",v=>{let h=v.toString();f+=h,m+=h;let _=m.split(`
35
+ `);m=_.pop()??"";for(let A of _)A.trim()&&t?.onOutput?.(A,"stdout");}),c.stderr.on("data",v=>{let h=v.toString();g+=h,w+=h;let _=w.split(`
36
+ `);w=_.pop()??"";for(let A of _)A.trim()&&t?.onOutput?.(A,"stderr");});let k=setTimeout(()=>{c.kill("SIGTERM"),i(new exports.ProviderError(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);c.on("error",v=>{if(clearTimeout(k),v.code==="ENOENT"){let h=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;i(new exports.ProviderError(h,this.providerStr));}else i(new exports.ProviderError(`Spawn error: ${v.message}`,this.providerStr));}),c.on("close",v=>{clearTimeout(k),m.trim()&&t?.onOutput?.(m,"stdout"),w.trim()&&t?.onOutput?.(w,"stderr");let h=v??0;if(t?.onExitCode?.(h),this.config.error_patterns){let _=g||f;for(let A of this.config.error_patterns)if(_.includes(A.pattern)){i(new exports.ProviderError(A.message,this.providerStr));return}}if(v!==0){i(new exports.ProviderError(`Process exited with code ${v}: ${g.slice(0,500)}`,this.providerStr));return}s(f.trim());});})}};});p();p();p();function ni(n){let e=o=>o.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=n.split("/").map(o=>o==="**"?".*":o.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function me(n,e){try{return ni(e).test(n)}catch{return false}}p();p();var oi=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()),ao=zod.z.object({include:zod.z.array(zod.z.string()).optional()}).optional(),si=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:oi.optional(),skills:ao}).catchall(zod.z.unknown()),ii=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()}),ai=zod.z.object({bin_resolution:zod.z.enum(["global_first","local_first"]).optional(),wi:zod.z.object({boards:zod.z.array(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()),lo=zod.z.object({agents:zod.z.array(si).optional(),hooks:zod.z.array(zod.z.unknown()).optional(),settings:ai.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 Be=class extends Error{constructor(t,r){super(t);this.cause=r;this.name="ConfigLoadError";}cause};function rr(n){if(!n||typeof n!="string"||!n.trim())throw new Be("YAML content must be a non-empty string");let e;try{e=jsYaml.load(n);}catch(o){throw new Be(`YAML parse error: ${o.message}`,o)}let t=ci(e),r=lo.safeParse(t);if(!r.success)throw new Be(`Config validation error: ${r.error.message}`);return r.data}function nr(n){let e;try{e=rs.readFileSync(n,"utf-8");}catch(t){throw new Be(`Cannot read file: ${n}`,t)}return rr(e)}function ci(n){if(!n||typeof n!="object")return {agents:[]};let e=n,t;if(e.agents&&typeof e.agents=="object"&&!Array.isArray(e.agents)){let o=e.agents;t=Object.entries(o).map(([s,i])=>({id:s,...i&&typeof i=="object"?i:{}}));}else if(Array.isArray(e.agents))t=e.agents;else return {...e,agents:[]};let r=t.map(o=>{if(o.provider===void 0&&o.inline&&typeof o.inline=="object"){let s=o.inline;if(s.provider!==void 0)return {...o,provider:s.provider}}return o});return {...e,agents:r}}p();var ze=K.join("templates","agents");function gi(){try{let e=(typeof te=="function"?te:module$1.createRequire(typeof __filename<"u"?__filename:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return K.dirname(e)}catch{return null}}function ut(n){if(n&&rs.existsSync(n))return n;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&rs.existsSync(e))return e;let t=gi();if(t){let o=K.join(t,ze);if(rs.existsSync(o))return o}let r=[K.join(__dirname,"..",ze),K.join(__dirname,"..","..",ze),K.join(__dirname,"..","..","..",ze),K.join(process.cwd(),"packages","sdk",ze),K.join(process.cwd(),ze)];for(let o of r)if(rs.existsSync(o))return o;throw new Error(`[@crewx/sdk] Templates directory not found.
37
+ `+(t?` package anchor: ${K.join(t,ze)}
43
38
  `:` package anchor: (unresolved)
44
39
  `)+r.map(o=>` candidate: ${o}`).join(`
45
40
  `)+`
46
- Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function ar(){let n=Ve();return {yamlPath:G.join(n,"default.yaml"),dir:n}}c();var fe=class extends Error{constructor(e,t){let r=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},cs={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function Ot(n,e){let t=n.startsWith("@")?n.slice(1):n,r=e.find(s=>s.id===t);if(r)return r;let o=cs[t];if(o)return o;throw new fe(n,e.map(s=>s.id))}pe();c();function Mn(n,e){if(n===void 0||n==="")return e;let t=parseInt(n,10);return Number.isNaN(t)?e:t}function Nn(n=process.env){return {queryMs:Mn(n.CREWX_TIMEOUT_QUERY,288e5),executeMs:Mn(n.CREWX_TIMEOUT_EXECUTE,288e5)}}c();var dt={"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-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-5.5":{input:5,cachedInput:1.25,output:15},"gpt-5.4":{input:2.5,cachedInput:.625,output:10},"gpt-5.3-codex":{input:1.5,cachedInput:.375,output:6},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.1":{input:.5,cachedInput:.05,output:2},copilot:{input:0,cachedInput:0,output:0}},$s={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"},xr={input:0,cachedInput:0,output:0};function Us(n){let e=n.toLowerCase().trim();e=e.replace(/\[[^\]]*\]$/g,"");let t=e.lastIndexOf("/");return t>=0&&(e=e.slice(t+1)),e=e.replace(/-\d{8}$/,""),e}function js(n){if(!n)return xr;let e=Us(n),t=$s[e];if(t)return dt[t]??xr;if(dt[e])return dt[e];for(let r of Object.keys(dt))if(e.includes(r))return dt[r];return console.warn(`[pricing] Unknown model: ${n}, cost_usd=0`),xr}function Hs(n,e,t,r=0){let o=js(t),s=Math.min(r,n),a=(n-s)*o.input/1e6,d=s*o.cachedInput/1e6,l=e*o.output/1e6;return a+d+l}function kr(n,e,t,r,o){return n&&n>0?n:!e&&!t?0:Hs(e??0,t??0,o,r??0)}c();c();var qs=[/^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],Bs=/[;|&`$(){}!><\n\r]/,Ws=2,zs=["*","**","*:*","* *","**/*"];function Ks(){let n={};for(let[e,t]of Object.entries(process.env))t!==void 0&&(qs.some(r=>r.test(e))||(n[e]=t));return n}function Vs(n){if(Bs.test(n))throw new Error(`exec blocked: shell metacharacter detected in "${n}"`)}function Gs(n){return /^npx\s+@crewx\/[\w-]+/.test(n)}function Xs(n){if(zs.includes(n.trim()))throw new Error(`exec config error: overly broad pattern "${n}" is not allowed`);if(!/^[\w./@-]/.test(n))throw new Error("exec config error: pattern must start with a command name")}function Js(n,e){let t=e.allow??[],r=e.deny??[];for(let o of [...t,...r])Xs(o);return r.some(o=>ue(n,o))?false:Gs(n)?true:t.some(o=>ue(n,o))}var Dn=false;function Ys(n){Dn=n;}function lt(n){if(!Dn)return;let e=JSON.stringify({span:"template_exec",...n,timestamp:new Date().toISOString()});console.error(e);}function Qs(n){let e=[],t="",r=false,o=false;for(let s=0;s<n.length;s++){let i=n[s];i==="'"&&!o?r=!r:i==='"'&&!r?o=!o:i===" "&&!r&&!o?t.length>0&&(e.push(t),t=""):t+=i;}return t.length>0&&e.push(t),e}function Ln(n,e){let t=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=Ws)return lt({command:n,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{Vs(n);}catch{return lt({command:n,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${n}")`}if(!Js(n,e))return lt({command:n,status:"denied",reason:"not in allow list"}),`(exec blocked: ${n})`;try{let o=Qs(n),[s,...i]=o;if(!s)return `(exec failed: ${n})`;let a=Ks(),d=child_process.execFileSync(s,i,{timeout:e.timeout??5e3,maxBuffer:64*1024,encoding:"utf-8",env:{...a,CREWX_EXEC_DEPTH:String(r+1)},stdio:["pipe","pipe","pipe"]}),l=Date.now()-t;return lt({command:n,status:"allowed",allowed_by:"policy",duration_ms:l}),`<exec-output cmd="${n}">
41
+ Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function Ur(){let n=ut();return {yamlPath:K.join(n,"default.yaml"),dir:n}}p();var Re=class extends Error{constructor(e,t){let r=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},fi={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function sr(n,e){let t=n.startsWith("@")?n.slice(1):n,r=e.find(s=>s.id===t);if(r)return r;let o=fi[t];if(o)return o;throw new Re(n,e.map(s=>s.id))}we();gr();p();p();var wt={"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-5":{input:5,cachedInput:.5,output:25},"claude-opus-4-8":{input:5,cachedInput:.5,output:25},"claude-opus-4-7":{input:5,cachedInput:.5,output:25},"claude-opus-4-6":{input:5,cachedInput:.5,output:25},"claude-sonnet-5":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-5.6-sol":{input:5,cachedInput:.5,output:30},"gpt-5.6-terra":{input:2.5,cachedInput:.25,output:15},"gpt-5.6-luna":{input:1,cachedInput:.1,output:6},"gpt-5.5":{input:5,cachedInput:1.25,output:15},"gpt-5.4":{input:2.5,cachedInput:.625,output:10},"gpt-5.3-codex":{input:1.5,cachedInput:.375,output:6},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4}};var Qi={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"},rn={input:0,cachedInput:0,output:0},Mt={};function Po(n){Mt=n;}function nn(n){let e=n.toLowerCase().trim();e=e.replace(/\[[^\]]*\]$/g,"");let t=e.lastIndexOf("/");return t>=0&&(e=e.slice(t+1)),e=e.replace(/-\d{8}$/,""),e}function Zi(n){if(!n)return rn;let e=nn(n),t=Qi[e];if(t)return Mt[t]??wt[t]??rn;if(Mt[e])return Mt[e];if(wt[e])return wt[e];let r={...wt,...Mt};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${n}, cost_usd=0`),rn}function ea(n,e,t,r=0,o){let s=Zi(t),i=Math.min(r,n),d=(n-i)*s.input/1e6,l=i*s.cachedInput/1e6,c=e*s.output/1e6;return d+l+c}function bo(n,e,t,r,o,s){return n&&n>0?n:!e&&!t?0:ea(e??0,t??0,o,r??0)}p();function fr(n){if(!n||typeof n!="object"||Array.isArray(n))return;let e=n,t={};return typeof e.provider=="string"&&e.provider.trim()&&(t.provider=e.provider.trim()),typeof e.model=="string"&&e.model.trim()&&(t.model=e.model.trim()),typeof e.mode=="string"&&e.mode.trim()&&(t.mode=e.mode.trim()),typeof e.effort=="string"&&e.effort.trim()&&(t.effort=e.effort.trim()),t}function mr(n){if(n==null||n===false)return {active:false};if(n===true)return {active:true};if(typeof n=="object"){let e=n.mode;return {active:true,mode:e==="count"||e==="latch"?e:void 0}}return {active:false}}function yr(n,e,t,r){if(!r.active)return {active:false,crossProvider:false};if(!n||typeof n!="object"||Array.isArray(n))return {active:false,crossProvider:false};let s=n[e];if(!s||typeof s!="object"||Array.isArray(s))return {active:false,crossProvider:false};let i=fr(s.overdrive);if(!i||!i.provider||!i.model)return {active:false,crossProvider:false};let a=i.provider!==t;return {active:true,provider:i.provider,model:i.model,mode:i.mode,effort:i.effort,crossProvider:a}}function hr(n,e){if(!n||typeof n!="object"||Array.isArray(n))return {};let r=n[e];if(!r||typeof r!="object"||Array.isArray(r))return {};let o=r,s={};return o.provider!==void 0&&(typeof o.provider=="string"?o.provider.trim()&&(s.provider=o.provider.trim()):console.warn(`[crewx] options.${e}.provider must be a single string; ignoring non-string value (${JSON.stringify(o.provider)})`)),typeof o.model=="string"&&o.model.trim()&&(s.model=o.model.trim()),s}p();p();var ra=[/^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],na=/[;|&`$(){}!><\n\r]/,oa=2,sa=["*","**","*:*","* *","**/*"];function ia(){let n={};for(let[e,t]of Object.entries(process.env))t!==void 0&&(ra.some(r=>r.test(e))||(n[e]=t));return n}function aa(n){if(na.test(n))throw new Error(`exec blocked: shell metacharacter detected in "${n}"`)}function da(n){return /^npx\s+@crewx\/[\w-]+/.test(n)}function la(n){if(sa.includes(n.trim()))throw new Error(`exec config error: overly broad pattern "${n}" is not allowed`);if(!/^[\w./@-]/.test(n))throw new Error("exec config error: pattern must start with a command name")}function ca(n,e){let t=e.allow??[],r=e.deny??[];for(let o of [...t,...r])la(o);return r.some(o=>me(n,o))?false:da(n)?true:t.some(o=>me(n,o))}var So=false;function ua(n){So=n;}function Nt(n){if(!So)return;let e=JSON.stringify({span:"template_exec",...n,timestamp:new Date().toISOString()});console.error(e);}function pa(n){let e=[],t="",r=false,o=false;for(let s=0;s<n.length;s++){let i=n[s];i==="'"&&!o?r=!r:i==='"'&&!r?o=!o:i===" "&&!r&&!o?t.length>0&&(e.push(t),t=""):t+=i;}return t.length>0&&e.push(t),e}function Io(n,e){let t=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=oa)return Nt({command:n,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{aa(n);}catch{return Nt({command:n,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${n}")`}if(!ca(n,e))return Nt({command:n,status:"denied",reason:"not in allow list"}),`(exec blocked: ${n})`;try{let o=pa(n),[s,...i]=o;if(!s)return `(exec failed: ${n})`;let a=ia(),d=child_process.execFileSync(s,i,{timeout:e.timeout??5e3,maxBuffer:64*1024,encoding:"utf-8",env:{...a,CREWX_EXEC_DEPTH:String(r+1)},stdio:["pipe","pipe","pipe"]}),l=Date.now()-t;return Nt({command:n,status:"allowed",allowed_by:"policy",duration_ms:l}),`<exec-output cmd="${n}">
47
42
  ${d.trim()}
48
- </exec-output>`}catch{return lt({command:n,status:"error",reason:"execution failed"}),`(exec failed: ${n})`}}c();function $n(n){return n==null?"":String(n)}c();function Un(n,e){return `\`\`\`${e?.hash?.lang??""}
43
+ </exec-output>`}catch{return Nt({command:n,status:"error",reason:"execution failed"}),`(exec failed: ${n})`}}p();function Oo(n){return n==null?"":String(n)}p();function Mo(n,e){return `\`\`\`${e?.hash?.lang??""}
49
44
  ${n??""}
50
- \`\`\``}c();function _r(n,e){if(!n)return "";if(n.length<=e)return n;let t=n.length-e;return `${n.substring(0,e)} (...+${t} chars)`}function vr(n){return Array.isArray(n)||typeof n=="string"?n.length:0}function Ar(n){return typeof n!="string"?"":n.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}var jn=["B","KB","MB","GB"];function Rr(n){if(n===0)return "0 B";let e=Math.min(Math.floor(Math.log(n)/Math.log(1024)),jn.length-1);return `${Math.round(n/Math.pow(1024,e)*100)/100} ${jn[e]}`}function Er(n){if(!n)return "";try{let e=n instanceof Date?n:new Date(n);return isNaN(e.getTime())?"":e.toLocaleString("ko-KR",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}catch{return ""}}var ct=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=ge__namespace.create(),this.execPolicy=e.execPolicy??{allow:[],deny:[]},this.execEnabled=e.execEnabled??true,this.registerHelpers();}registerHelpers(){let e=this.hbs,t=this.execPolicy,r=this.execEnabled;e.registerHelper("exec",function(o){return typeof o!="string"?"":r?new e.SafeString(Ln(o,t)):"(exec disabled)"}),e.registerHelper("include",function(o){return new e.SafeString($n(o))}),e.registerHelper("fenced_code",function(o,s){return new e.SafeString(Un(o,s))}),e.registerHelper("eq",function(o,s){return o===s}),e.registerHelper("ne",function(o,s){return o!==s}),e.registerHelper("and",function(o,s){return o&&s}),e.registerHelper("or",function(o,s){return o||s}),e.registerHelper("not",function(o){return !o}),e.registerHelper("contains",function(o,s){return Array.isArray(o)&&o.includes(s)}),e.registerHelper("json",function(o){return JSON.stringify(o,null,2)}),e.registerHelper("truncate",function(o,s){return _r(o,s)}),e.registerHelper("length",function(o){return vr(o)}),e.registerHelper("escapeHandlebars",function(o){return new e.SafeString(Ar(o))}),e.registerHelper("formatFileSize",function(o){return Rr(o)}),e.registerHelper("formatTimestamp",function(o){return Er(o)});}async render(e,t={}){return this.hbs.compile(e,{noEscape:true})(t)}};c();c();var Ft=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?G.resolve(e[0]):G.resolve(G.join(...e))}isAbsolute(e){return G.isAbsolute(e)}async readdir(e){try{return await promises.readdir(e)}catch{return []}}},Oe=new Ft;var Me=class{docs=new Map;fs;constructor(e){this.fs=e??Oe;}async load(e,t){if(e)for(let[r,o]of Object.entries(e)){let s=o;if(typeof s=="string")this.docs.set(r,{content:s});else if(s&&typeof s=="object"){let i=s;"content"in i&&typeof i.content=="string"?this.docs.set(r,{content:i.content}):"path"in i&&typeof i.path=="string"?await this.loadFromFile(r,i.path,t):console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}else console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}}async getContent(e){return this.docs.get(e)?.content}async getToc(e){let t=this.docs.get(e);if(!t)return;let r=[];for(let o of t.content.split(`
45
+ \`\`\``}p();function on(n,e){if(!n)return "";if(n.length<=e)return n;let t=n.length-e;return `${n.substring(0,e)} (...+${t} chars)`}function sn(n){return Array.isArray(n)||typeof n=="string"?n.length:0}function an(n){return typeof n!="string"?"":n.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}var No=["B","KB","MB","GB"];function dn(n){if(n===0)return "0 B";let e=Math.min(Math.floor(Math.log(n)/Math.log(1024)),No.length-1);return `${Math.round(n/Math.pow(1024,e)*100)/100} ${No[e]}`}function ln(n){if(!n)return "";try{let e=n instanceof Date?n:new Date(n);return isNaN(e.getTime())?"":e.toLocaleString("ko-KR",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}catch{return ""}}var Dt=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=_e__namespace.create(),this.execPolicy=e.execPolicy??{allow:[],deny:[]},this.execEnabled=e.execEnabled??true,this.registerHelpers();}registerHelpers(){let e=this.hbs,t=this.execPolicy,r=this.execEnabled;e.registerHelper("exec",function(o){return typeof o!="string"?"":r?new e.SafeString(Io(o,t)):"(exec disabled)"}),e.registerHelper("include",function(o){return new e.SafeString(Oo(o))}),e.registerHelper("fenced_code",function(o,s){return new e.SafeString(Mo(o,s))}),e.registerHelper("eq",function(o,s){return o===s}),e.registerHelper("ne",function(o,s){return o!==s}),e.registerHelper("and",function(o,s){return o&&s}),e.registerHelper("or",function(o,s){return o||s}),e.registerHelper("not",function(o){return !o}),e.registerHelper("contains",function(o,s){return Array.isArray(o)&&o.includes(s)}),e.registerHelper("json",function(o){return JSON.stringify(o,null,2)}),e.registerHelper("truncate",function(o,s){return on(o,s)}),e.registerHelper("length",function(o){return sn(o)}),e.registerHelper("escapeHandlebars",function(o){return new e.SafeString(an(o))}),e.registerHelper("formatFileSize",function(o){return dn(o)}),e.registerHelper("formatTimestamp",function(o){return ln(o)});}async render(e,t={}){return this.hbs.compile(e,{noEscape:true})(t)}};p();p();var wr=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?K.resolve(e[0]):K.resolve(K.join(...e))}isAbsolute(e){return K.isAbsolute(e)}async readdir(e){try{return await promises.readdir(e)}catch{return []}}},Ze=new wr;var et=class{docs=new Map;fs;constructor(e){this.fs=e??Ze;}async load(e,t){if(e)for(let[r,o]of Object.entries(e)){let s=o;if(typeof s=="string")this.docs.set(r,{content:s});else if(s&&typeof s=="object"){let i=s;"content"in i&&typeof i.content=="string"?this.docs.set(r,{content:i.content}):"path"in i&&typeof i.path=="string"?await this.loadFromFile(r,i.path,t):console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}else console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}}async getContent(e){return this.docs.get(e)?.content}async getToc(e){let t=this.docs.get(e);if(!t)return;let r=[];for(let o of t.content.split(`
51
46
  `)){let s=/^(#{1,6})\s+(.+)$/.exec(o.trim());s&&r.push({depth:s[1].length,text:s[2].trim()});}if(r.length!==0)return r.map(({depth:o,text:s})=>`${" ".repeat(o-1)}- ${s}`).join(`
52
- `)}getPath(e){return this.docs.get(e)?.path}getNames(){return Array.from(this.docs.keys())}async buildContext(){let e={};for(let t of this.docs.keys()){let r=await this.getContent(t)??"",o=await this.getToc(t),s=this.getPath(t);e[t]={content:r,toc:o,...s?{path:s}:{}};}return e}async loadFromFile(e,t,r){try{let o=this.resolve(t,r),s=await this.fs.readFile(o);this.docs.set(e,{content:s,path:o});}catch(o){let s=o instanceof Error?o.message:String(o);console.warn(`[DocumentLoader] Failed to load '${e}' from '${t}': ${s}`);}}resolve(e,t){return this.fs.isAbsolute(e)?e:t?this.fs.resolvePath(t,e):this.fs.resolvePath(e)}};c();c();var Q=class extends Error{constructor(t,r,o){super(t);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},xe=class extends Error{constructor(t,r=[],o){super(t);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var di={validationMode:"lenient",fallbackLayoutId:"crewx/default"},ut=class{layouts=new Map;options;constructor(e){this.options={...di,...e,templatesPath:e?.templatesPath??Ve()},this.loadAllLayouts();}load(e,t){let r=this.layouts.get(e);if(!r){let o=this.normalizeLayoutId(e);r=this.layouts.get(o);}if(!r&&(console.warn(`Layout not found: ${e}, falling back to ${this.options.fallbackLayoutId}`),r=this.layouts.get(this.options.fallbackLayoutId),!r))throw new Q(`Fallback layout not found: ${this.options.fallbackLayoutId}`,this.options.fallbackLayoutId);return t&&Object.keys(t).length>0?{...r,defaultProps:{...r.defaultProps,...t}}:r}getLayoutIds(){return Array.from(this.layouts.keys())}hasLayout(e){if(this.layouts.has(e))return true;let t=this.normalizeLayoutId(e);return this.layouts.has(t)}reload(){this.layouts.clear(),this.loadAllLayouts();}registerLayout(e,t){if(!e||typeof e!="string")throw new Q("Layout ID must be a non-empty string",e);let r=typeof t=="string"?{template:t}:t,o=typeof r.template=="string"?r.template:"";if(!o||o.trim().length===0)throw new Q(`Custom layout template is empty for ${e}`,e);let s=r.propsSchema||{},i=this.extractDefaultProps(s),a=r.defaultProps||{},d={id:e,version:r.version||"1.0.0",description:r.description||`Custom layout ${e}`,template:o,propsSchema:this.parsePropsSchema(s),defaultProps:{...i,...a}},l=this.layouts.get(e),u=l?.template===o&&JSON.stringify(l?.defaultProps??{})===JSON.stringify(d.defaultProps??{})&&JSON.stringify(l?.propsSchema??{})===JSON.stringify(d.propsSchema??{});this.layouts.set(e,d),process.env.CREWX_VERBOSE==="1"&&(l?u||console.error(`Updated custom layout: ${e}`):console.error(`Registered custom layout: ${e}`));}registerLayouts(e){for(let[t,r]of Object.entries(e))try{this.registerLayout(t,r);}catch(o){console.warn(`Failed to register custom layout ${t}:`,o instanceof Error?o.message:o);}}loadAllLayouts(){let e=this.options.templatesPath;if(!so.existsSync(e))throw new Q(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=so.readdirSync(e).filter(r=>r.endsWith(".yaml")||r.endsWith(".yml"));t.length===0&&console.warn(`No layout files found in ${e}`);for(let r of t){let o=r.replace(/\.(yaml|yml)$/,""),s=G__namespace.join(e,r);try{let i=this.loadLayoutFile(s,o),a=`crewx/${o}`;this.layouts.set(a,i),a!=="crewx/minimal"&&process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded layout: ${a} from ${r}`);}catch(i){console.error(`Failed to load layout file ${r}:`,i);}}process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded ${this.layouts.size} layouts from ${e}`);}catch(t){throw new Q(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let r=so.readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new Q(`Empty YAML file: ${e}`,t,new Error("File content is empty"));let o=jsYaml.load(r);if(!o||typeof o!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof o}), will use fallback`),new Q(`Invalid or empty YAML in ${e}`,t,new Error("YAML parsing returned null/undefined or non-object"));if(o.layouts&&typeof o.layouts=="object"){let s=this.resolveLayoutEntry(o.layouts,t);if(!s||s.template.trim().length===0)throw console.warn(`Empty or missing layout template in ${e} for ${t}`),new Q(`Layout template not found or empty in layouts map: ${t}`,t);let i=s.propsSchema||o.propsSchema||{};return {id:`crewx/${t}`,version:o.version||"1.0.0",description:o.description||`CrewX ${t} layout`,template:s.template,propsSchema:this.parsePropsSchema(i),defaultProps:this.extractDefaultProps(i)}}else {if(!o.template||typeof o.template=="string"&&o.template.trim().length===0)throw console.warn(`Empty or missing template field in ${e}`),new Q(`Layout template is missing or empty in ${e}`,t);return {id:o.id||`crewx/${t}`,version:o.version||"1.0.0",description:o.description||"",template:o.template,propsSchema:this.parsePropsSchema(o.propsSchema||{}),defaultProps:this.extractDefaultProps(o.propsSchema||{})}}}catch(r){throw new Q(`Failed to load layout file: ${e}`,t,r instanceof Error?r:new Error(String(r)))}}parsePropsSchema(e){let t={};for(let[r,o]of Object.entries(e))typeof o=="object"&&o!==null&&(t[r]=o);return t}extractDefaultProps(e){let t={};for(let[r,o]of Object.entries(e))o&&typeof o=="object"&&("defaultValue"in o?t[r]=o.defaultValue:"default"in o&&(t[r]=o.default));return t}normalizeLayoutId(e){return e?e.includes("/")?e:`crewx/${e}`:this.options.fallbackLayoutId}resolveLayoutEntry(e,t){let r=new Set;if(t)if(r.add(t),t.includes("/")){let o=t.split("/"),s=o[o.length-1];s&&r.add(s);}else r.add(`crewx/${t}`);r.add("default");for(let o of r){let s=e[o];if(typeof s=="string"&&s.trim().length>0)return {template:s};if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}for(let o of Object.values(e)){if(typeof o=="string"&&o.trim().length>0)return {template:o};let s=o;if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}}};c();c();c();function Ne(n){return String(Math.floor(Math.abs(n))).padStart(2,"0")}function pt(n){if(!(n instanceof Date)||Number.isNaN(n.getTime()))return "";let e=-n.getTimezoneOffset(),t=e>=0?"+":"-";return `${n.getFullYear()}-${Ne(n.getMonth()+1)}-${Ne(n.getDate())}T${Ne(n.getHours())}:${Ne(n.getMinutes())}:${Ne(n.getSeconds())}${t}${Ne(e/60)}:${Ne(e%60)}`}function li(n){return n.map(e=>{let t=typeof e?.timestamp=="number"?e.timestamp:null;return t===null?e:{...e,created_at:pt(new Date(t))}})}function ci(n){let e=[];for(let t of n)t?.isAssistant&&t?.metadata?.agent_id?e.push(String(t.metadata.agent_id)):!t?.isAssistant&&t?.metadata?.caller_agent_id&&e.push(String(t.metadata.caller_agent_id));return Array.from(new Set(e))}function Bn(...n){let e=n[n.length-1],t=n[0],r=n[1],o=typeof n[2]=="string"?n[2]:"",s=typeof n[3]=="string"?n[3]:"";if(!Array.isArray(t)||t.length===0||!(e&&typeof e.fn=="function"))return "";let a=ci(t),d=a.length>0?a[0]:"",l=Date.now(),u={messages:li(t),platform:typeof r=="string"?r:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:pt(new Date(l))};return e.fn(u)}c();var gt=class{defaultMode;constructor(e={}){this.defaultMode=e.defaultMode??"lenient";}validate(e,t,r=this.defaultMode){let o=[],s=this.validateObject(e??{},t,r,["props"],o);if(o.length>0&&r==="strict")throw new xe("Props validation failed in strict mode",o);return {valid:o.length===0,props:s,errors:o}}validateObject(e,t,r,o,s){let i={};if(r==="strict")for(let a of Object.keys(e))t[a]||s.push({path:this.buildPath([...o,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(t)){let l=[...o,a],u=e[a],p=this.resolveProp(u,d,l,r,s);p.shouldAssign&&(i[a]=p.value);}return i}resolveProp(e,t,r,o,s){let i=this.buildPath(r);if(this.isNil(e)){if(t.isRequired&&s.push({path:i,message:`Required prop '${r[r.length-1]}' is missing`}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}let a=this.validateType(e,t,r,o,s);if(!a.valid){if(t.type==="shape"&&a.value&&this.isPlainObject(a.value))return {shouldAssign:true,value:a.value};if(s.push({path:i,message:a.error??"Invalid value",value:e}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}return {shouldAssign:true,value:a.value}}validateType(e,t,r,o,s){let{type:i}=t;switch(i){case "string":return this.validateString(e,t);case "number":return this.validateNumber(e,t);case "bool":return this.validateBoolean(e);case "array":return this.validateArray(e,t);case "arrayOf":return this.validateArrayOf(e,t,r,o,s);case "object":return this.validatePlainObject(e);case "shape":return this.validateShape(e,t,r,o,s);case "oneOfType":return this.validateOneOfType(e,t);case "func":return this.validateFunction(e);case "node":return {valid:true,value:e};default:return {valid:true,value:e}}}validateString(e,t){return typeof e!="string"?{valid:false,error:`Expected string, got ${this.describeType(e)}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`String length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`String length must be <= ${t.maxLength}`}:t.pattern&&!new RegExp(t.pattern).test(e)?{valid:false,error:`String does not match pattern ${t.pattern}`}:{valid:true,value:e}}validateNumber(e,t){return typeof e!="number"||Number.isNaN(e)?{valid:false,error:`Expected number, got ${this.describeType(e)}`}:t.min!==void 0&&e<t.min?{valid:false,error:`Number must be >= ${t.min}`}:t.max!==void 0&&e>t.max?{valid:false,error:`Number must be <= ${t.max}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:{valid:true,value:e}}validateBoolean(e){return typeof e!="boolean"?{valid:false,error:`Expected boolean, got ${this.describeType(e)}`}:{valid:true,value:e}}validateArray(e,t){return Array.isArray(e)?t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`Array length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`Array length must be <= ${t.maxLength}`}:{valid:true,value:[...e]}:{valid:false,error:`Expected array, got ${this.describeType(e)}`}}validateArrayOf(e,t,r,o,s){let i=this.validateArray(e,t);if(!i.valid)return i;let a=[],d=t.itemType,l=t.itemOneOf,u=s.length;return i.value.forEach((p,f)=>{let g=[...r,String(f)];if(d){let h=this.validateType(p,{type:d},g,o,s);h.valid?a.push(h.value):s.push({path:this.buildPath(g),message:h.error??"Invalid array item",value:p});}else a.push(p);l&&!l.includes(p)&&s.push({path:this.buildPath(g),message:`Array item must be one of: ${l.join(", ")}`,value:p});}),{valid:s.length===u,value:a}}validatePlainObject(e){return this.isPlainObject(e)?{valid:true,value:{...e}}:{valid:false,error:`Expected object, got ${this.describeType(e)}`}}validateFunction(e){return typeof e!="function"?{valid:false,error:`Expected function, got ${this.describeType(e)}`}:{valid:true,value:e}}validateShape(e,t,r,o,s){if(!this.isPlainObject(e))return {valid:false,error:`Expected object, got ${this.describeType(e)}`};let i=s.length,a=this.validateObject(e,t.shape??{},o,r,s);return {valid:s.length===i,value:a}}validateOneOfType(e,t){let r=t.types??[];return r.some(s=>this.matchesType(e,s))?{valid:true,value:e}:{valid:false,error:`Value does not match any allowed type: ${r.join(", ")}`}}matchesType(e,t){switch(t){case "string":return typeof e=="string";case "number":return typeof e=="number"&&!Number.isNaN(e);case "bool":case "boolean":return typeof e=="boolean";case "array":return Array.isArray(e);case "object":return this.isPlainObject(e);case "func":case "function":return typeof e=="function";case "shape":return this.isPlainObject(e);case "node":return e==null||typeof e!="symbol";default:return true}}applyDefaults(e){let t={};for(let[r,o]of Object.entries(e)){if(o.defaultValue!==void 0){t[r]=this.cloneValue(o.defaultValue);continue}if(o.type==="shape"&&o.shape){let s=this.applyDefaults(o.shape);Object.keys(s).length>0&&(t[r]=s);}}return t}cloneValue(e){if(Array.isArray(e))return e.map(t=>this.cloneValue(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneValue(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}isNil(e){return e==null}buildPath(e){return e.join(".")}describeType(e){return Array.isArray(e)?"array":e===null?"null":typeof e}};var mt=class{handlebars;propsValidator;constructor(e){this.handlebars=ge__namespace.default.create(),this.propsValidator=e??new gt,this.registerHelpers();}render(e,t,r={}){try{let o=this.prepareRenderContext(e,t,r);return this.handlebars.compile(e.template,{noEscape:!0})(o)}catch(o){throw o instanceof Error?new Error(`Template rendering failed for layout '${e.id}': ${o.message}`):new Error(`Unknown error rendering layout '${e.id}'`)}}validate(e,t,r="lenient"){return this.executeValidation(e,t,r)}resolveProps(e,t,r="lenient"){let o=this.mergeProps(e.defaultProps,t);return !e.propsSchema||Object.keys(e.propsSchema).length===0?{valid:true,props:o,errors:[]}:this.executeValidation(o,e.propsSchema,r)}prepareRenderContext(e,t,r){let{validationMode:o="lenient",skipValidation:s=false}=r,i=s?this.mergeProps(e.defaultProps,t.props):this.resolveProps(e,t.props,o).props;return {...t,vars:this.sanitizeVars(t.vars),props:i}}registerHelpers(){this.handlebars.registerHelper("formatConversation",Bn),ge__namespace.default.helpers.each&&this.handlebars.registerHelper("each",ge__namespace.default.helpers.each),ge__namespace.default.helpers.if&&this.handlebars.registerHelper("if",ge__namespace.default.helpers.if),ge__namespace.default.helpers.unless&&this.handlebars.registerHelper("unless",ge__namespace.default.helpers.unless),ge__namespace.default.helpers.with&&this.handlebars.registerHelper("with",ge__namespace.default.helpers.with),this.handlebars.registerHelper("eq",function(e,t){return e===t}),this.handlebars.registerHelper("ne",function(e,t){return e!==t}),this.handlebars.registerHelper("gt",function(e,t){return e>t}),this.handlebars.registerHelper("lt",function(e,t){return e<t}),this.handlebars.registerHelper("json",function(e){return new ge__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,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}),this.handlebars.registerHelper("formatFileSize",function(e){if(e===0)return "0 B";let t=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,r)*100)/100+" "+t[r]});}executeValidation(e,t,r){try{return this.propsValidator.validate(e,t,r)}catch(o){if(o instanceof xe&&o.errors&&o.errors.length>0){let s=o.errors[0];if(s)throw new xe(s.message,o.errors)}throw o}}mergeProps(e,t){let r=this.cloneDeep(e??{});return t?this.deepMerge(r,t):r}deepMerge(e,t){for(let[r,o]of Object.entries(t)){if(this.isPlainObject(o)){let s=e[r];e[r]=this.deepMerge(this.isPlainObject(s)?s:{},o);continue}if(Array.isArray(o)){e[r]=this.cloneDeep(o);continue}e[r]=o;}return e}cloneDeep(e){if(Array.isArray(e))return e.map(t=>this.cloneDeep(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneDeep(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}sanitizeVars(e){if(!e)return {};let t={...e};if(typeof e.user_input=="string"){t.user_input_raw=e.user_input;let r=e.user_input.replace(/\{\{\{/g,"&#123;&#123;&#123;").replace(/\}\}\}/g,"&#125;&#125;&#125;").replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;");t.user_input=this.handlebars.escapeExpression(r);}return t}};c();var Cr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function ui(n){let e=crypto$1.randomBytes(n*2),t="";for(let r=0;r<e.length&&t.length<n;r++){let o=e[r];o<248&&(t+=Cr[o%62]);}for(;t.length<n;)t+=Cr[crypto$1.randomBytes(1)[0]%62];return t}function De(n){return `${n}_${ui(8)}`}function pi(n,e){let{createHash:t}=J("crypto"),r=t("sha256").update(e).digest(),o=Buffer.alloc(8);for(let i=0;i<32;i++)o[i%8]^=r[i];let s="";for(let i of o)s+=Cr[i%62];return `${n}_${s}`}c();function Tr(n){let e=t=>String(t).padStart(2,"0");return `${n.getFullYear()}${e(n.getMonth()+1)}${e(n.getDate())}T${e(n.getHours())}${e(n.getMinutes())}${e(n.getSeconds())}`}c();function zn(n,e){return t=>{try{let r=e(t);r instanceof Promise&&r.catch(o=>{console.error(`[crewx] event listener error (${n}): ${o instanceof Error?o.message:String(o)}`);});}catch(r){console.error(`[crewx] event listener error (${n}): ${r instanceof Error?r.message:String(r)}`);}}}var ft=class{_emitter=new events.EventEmitter;on(e,t){let r=zn(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=zn(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};c();function br(n){let e=new Map,t=r=>r.startsWith(`${n}::`)?r:`${n}::${r}`;return {async get(r){let o=e.get(t(r));return o?o.value:void 0},async set(r,o){e.set(t(r),{value:o});},async delete(r){return e.delete(t(r))},async list(r){let o=r?t(r):`${n}::`,s=[];for(let i of e.keys())i.startsWith(o)&&s.push(i.slice(n.length+2));return s}}}c();var Pr=new async_hooks.AsyncLocalStorage;function fi(){return Pr}function yi(n,e){return Pr.run(n,e)}function Sr(n){let e=n.log??n.logger??{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},t=n.agentRunner??{run:async()=>({output:""})},r=n.db??{get:async()=>{},set:async()=>{},delete:async()=>false,list:async()=>[]},o=n.storage??{put:async()=>"",get:async()=>{},delete:async()=>false},s=n.audit??{log:async()=>{}},i=n.onInbound??(async()=>({accepted:true})),a=n.onEmitEvent??(async()=>({accepted:true})),d=n.onUpdateMessage??(async()=>{}),l=n.onResolveUser??(async f=>({userId:f,displayName:f})),u=async f=>{let g=Pr.getStore();if(!g){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof f=="object"&&"text"in f?f.text.slice(0,80):void 0});return}let h="text"in f?f.text:"";g.res.status(200).json({text:h});},p=n.httpRouter??{registerRoute:()=>{e.warn("httpRouter not configured \u2014 registerRoute is a no-op");}};return {instanceId:n.instanceId,config:n.config,capabilities:n.capabilities,log:e,agentRunner:t,db:r,storage:o,audit:s,abortSignal:n.abortSignal??new AbortController().signal,httpRouter:p,inbound:i,emitEvent:a,updateMessage:d,resolveUser:l,respondSync:u}}Ee();c();var hi=/^-\s*Status:\s*active/m,wi=/^---\n([\s\S]*?)\n---/,xi=/^type:\s*goal\s*$/m;async function Kn(n,e=Oe,t){let r=typeof t=="string"?[t]:Array.isArray(t)?t:void 0;if(r){let a=[];for(let d of r){let l=e.resolvePath(n,d);await e.exists(l)&&a.push(await e.readFile(l));}return a.join(`
47
+ `)}getPath(e){return this.docs.get(e)?.path}getNames(){return Array.from(this.docs.keys())}async buildContext(){let e={};for(let t of this.docs.keys()){let r=await this.getContent(t)??"",o=await this.getToc(t),s=this.getPath(t);e[t]={content:r,toc:o,...s?{path:s}:{}};}return e}async loadFromFile(e,t,r){try{let o=this.resolve(t,r),s=await this.fs.readFile(o);this.docs.set(e,{content:s,path:o});}catch(o){let s=o instanceof Error?o.message:String(o);console.warn(`[DocumentLoader] Failed to load '${e}' from '${t}': ${s}`);}}resolve(e,t){return this.fs.isAbsolute(e)?e:t?this.fs.resolvePath(t,e):this.fs.resolvePath(e)}};p();p();var ne=class extends Error{constructor(t,r,o){super(t);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},be=class extends Error{constructor(t,r=[],o){super(t);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var xa={validationMode:"lenient",fallbackLayoutId:"crewx/default"},Lt=class{layouts=new Map;options;constructor(e){this.options={...xa,...e,templatesPath:e?.templatesPath??ut()},this.loadAllLayouts();}load(e,t){let r=this.layouts.get(e);if(!r){let o=this.normalizeLayoutId(e);r=this.layouts.get(o);}if(!r&&(console.warn(`Layout not found: ${e}, falling back to ${this.options.fallbackLayoutId}`),r=this.layouts.get(this.options.fallbackLayoutId),!r))throw new ne(`Fallback layout not found: ${this.options.fallbackLayoutId}`,this.options.fallbackLayoutId);return t&&Object.keys(t).length>0?{...r,defaultProps:{...r.defaultProps,...t}}:r}getLayoutIds(){return Array.from(this.layouts.keys())}hasLayout(e){if(this.layouts.has(e))return true;let t=this.normalizeLayoutId(e);return this.layouts.has(t)}reload(){this.layouts.clear(),this.loadAllLayouts();}registerLayout(e,t){if(!e||typeof e!="string")throw new ne("Layout ID must be a non-empty string",e);let r=typeof t=="string"?{template:t}:t,o=typeof r.template=="string"?r.template:"";if(!o||o.trim().length===0)throw new ne(`Custom layout template is empty for ${e}`,e);let s=r.propsSchema||{},i=this.extractDefaultProps(s),a=r.defaultProps||{},d={id:e,version:r.version||"1.0.0",description:r.description||`Custom layout ${e}`,template:o,propsSchema:this.parsePropsSchema(s),defaultProps:{...i,...a}},l=this.layouts.get(e),c=l?.template===o&&JSON.stringify(l?.defaultProps??{})===JSON.stringify(d.defaultProps??{})&&JSON.stringify(l?.propsSchema??{})===JSON.stringify(d.propsSchema??{});this.layouts.set(e,d),process.env.CREWX_VERBOSE==="1"&&(l?c||console.error(`Updated custom layout: ${e}`):console.error(`Registered custom layout: ${e}`));}registerLayouts(e){for(let[t,r]of Object.entries(e))try{this.registerLayout(t,r);}catch(o){console.warn(`Failed to register custom layout ${t}:`,o instanceof Error?o.message:o);}}loadAllLayouts(){let e=this.options.templatesPath;if(!rs.existsSync(e))throw new ne(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=rs.readdirSync(e).filter(r=>r.endsWith(".yaml")||r.endsWith(".yml"));t.length===0&&console.warn(`No layout files found in ${e}`);for(let r of t){let o=r.replace(/\.(yaml|yml)$/,""),s=K__namespace.join(e,r);try{let i=this.loadLayoutFile(s,o),a=`crewx/${o}`;this.layouts.set(a,i),a!=="crewx/minimal"&&process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded layout: ${a} from ${r}`);}catch(i){console.error(`Failed to load layout file ${r}:`,i);}}process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded ${this.layouts.size} layouts from ${e}`);}catch(t){throw new ne(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let r=rs.readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new ne(`Empty YAML file: ${e}`,t,new Error("File content is empty"));let o=jsYaml.load(r);if(!o||typeof o!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof o}), will use fallback`),new ne(`Invalid or empty YAML in ${e}`,t,new Error("YAML parsing returned null/undefined or non-object"));if(o.layouts&&typeof o.layouts=="object"){let s=this.resolveLayoutEntry(o.layouts,t);if(!s||s.template.trim().length===0)throw console.warn(`Empty or missing layout template in ${e} for ${t}`),new ne(`Layout template not found or empty in layouts map: ${t}`,t);let i=s.propsSchema||o.propsSchema||{};return {id:`crewx/${t}`,version:o.version||"1.0.0",description:o.description||`CrewX ${t} layout`,template:s.template,propsSchema:this.parsePropsSchema(i),defaultProps:this.extractDefaultProps(i)}}else {if(!o.template||typeof o.template=="string"&&o.template.trim().length===0)throw console.warn(`Empty or missing template field in ${e}`),new ne(`Layout template is missing or empty in ${e}`,t);return {id:o.id||`crewx/${t}`,version:o.version||"1.0.0",description:o.description||"",template:o.template,propsSchema:this.parsePropsSchema(o.propsSchema||{}),defaultProps:this.extractDefaultProps(o.propsSchema||{})}}}catch(r){throw new ne(`Failed to load layout file: ${e}`,t,r instanceof Error?r:new Error(String(r)))}}parsePropsSchema(e){let t={};for(let[r,o]of Object.entries(e))typeof o=="object"&&o!==null&&(t[r]=o);return t}extractDefaultProps(e){let t={};for(let[r,o]of Object.entries(e))o&&typeof o=="object"&&("defaultValue"in o?t[r]=o.defaultValue:"default"in o&&(t[r]=o.default));return t}normalizeLayoutId(e){return e?e.includes("/")?e:`crewx/${e}`:this.options.fallbackLayoutId}resolveLayoutEntry(e,t){let r=new Set;if(t)if(r.add(t),t.includes("/")){let o=t.split("/"),s=o[o.length-1];s&&r.add(s);}else r.add(`crewx/${t}`);r.add("default");for(let o of r){let s=e[o];if(typeof s=="string"&&s.trim().length>0)return {template:s};if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}for(let o of Object.values(e)){if(typeof o=="string"&&o.trim().length>0)return {template:o};let s=o;if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}}};p();p();p();function tt(n){return String(Math.floor(Math.abs(n))).padStart(2,"0")}function $t(n){if(!(n instanceof Date)||Number.isNaN(n.getTime()))return "";let e=-n.getTimezoneOffset(),t=e>=0?"+":"-";return `${n.getFullYear()}-${tt(n.getMonth()+1)}-${tt(n.getDate())}T${tt(n.getHours())}:${tt(n.getMinutes())}:${tt(n.getSeconds())}${t}${tt(e/60)}:${tt(e%60)}`}function Aa(n){return n.map(e=>{let t=typeof e?.timestamp=="number"?e.timestamp:null;return t===null?e:{...e,created_at:$t(new Date(t))}})}function Ea(n){let e=[];for(let t of n)t?.isAssistant&&t?.metadata?.agent_id?e.push(String(t.metadata.agent_id)):!t?.isAssistant&&t?.metadata?.caller_agent_id&&e.push(String(t.metadata.caller_agent_id));return Array.from(new Set(e))}function Uo(...n){let e=n[n.length-1],t=n[0],r=n[1],o=typeof n[2]=="string"?n[2]:"",s=typeof n[3]=="string"?n[3]:"";if(!Array.isArray(t)||t.length===0||!(e&&typeof e.fn=="function"))return "";let a=Ea(t),d=a.length>0?a[0]:"",l=Date.now(),c={messages:Aa(t),platform:typeof r=="string"?r:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:$t(new Date(l))};return e.fn(c)}p();var Ut=class{defaultMode;constructor(e={}){this.defaultMode=e.defaultMode??"lenient";}validate(e,t,r=this.defaultMode){let o=[],s=this.validateObject(e??{},t,r,["props"],o);if(o.length>0&&r==="strict")throw new be("Props validation failed in strict mode",o);return {valid:o.length===0,props:s,errors:o}}validateObject(e,t,r,o,s){let i={};if(r==="strict")for(let a of Object.keys(e))t[a]||s.push({path:this.buildPath([...o,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(t)){let l=[...o,a],c=e[a],f=this.resolveProp(c,d,l,r,s);f.shouldAssign&&(i[a]=f.value);}return i}resolveProp(e,t,r,o,s){let i=this.buildPath(r);if(this.isNil(e)){if(t.isRequired&&s.push({path:i,message:`Required prop '${r[r.length-1]}' is missing`}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}let a=this.validateType(e,t,r,o,s);if(!a.valid){if(t.type==="shape"&&a.value&&this.isPlainObject(a.value))return {shouldAssign:true,value:a.value};if(s.push({path:i,message:a.error??"Invalid value",value:e}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}return {shouldAssign:true,value:a.value}}validateType(e,t,r,o,s){let{type:i}=t;switch(i){case "string":return this.validateString(e,t);case "number":return this.validateNumber(e,t);case "bool":return this.validateBoolean(e);case "array":return this.validateArray(e,t);case "arrayOf":return this.validateArrayOf(e,t,r,o,s);case "object":return this.validatePlainObject(e);case "shape":return this.validateShape(e,t,r,o,s);case "oneOfType":return this.validateOneOfType(e,t);case "func":return this.validateFunction(e);case "node":return {valid:true,value:e};default:return {valid:true,value:e}}}validateString(e,t){return typeof e!="string"?{valid:false,error:`Expected string, got ${this.describeType(e)}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`String length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`String length must be <= ${t.maxLength}`}:t.pattern&&!new RegExp(t.pattern).test(e)?{valid:false,error:`String does not match pattern ${t.pattern}`}:{valid:true,value:e}}validateNumber(e,t){return typeof e!="number"||Number.isNaN(e)?{valid:false,error:`Expected number, got ${this.describeType(e)}`}:t.min!==void 0&&e<t.min?{valid:false,error:`Number must be >= ${t.min}`}:t.max!==void 0&&e>t.max?{valid:false,error:`Number must be <= ${t.max}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:{valid:true,value:e}}validateBoolean(e){return typeof e!="boolean"?{valid:false,error:`Expected boolean, got ${this.describeType(e)}`}:{valid:true,value:e}}validateArray(e,t){return Array.isArray(e)?t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`Array length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`Array length must be <= ${t.maxLength}`}:{valid:true,value:[...e]}:{valid:false,error:`Expected array, got ${this.describeType(e)}`}}validateArrayOf(e,t,r,o,s){let i=this.validateArray(e,t);if(!i.valid)return i;let a=[],d=t.itemType,l=t.itemOneOf,c=s.length;return i.value.forEach((f,g)=>{let m=[...r,String(g)];if(d){let w=this.validateType(f,{type:d},m,o,s);w.valid?a.push(w.value):s.push({path:this.buildPath(m),message:w.error??"Invalid array item",value:f});}else a.push(f);l&&!l.includes(f)&&s.push({path:this.buildPath(m),message:`Array item must be one of: ${l.join(", ")}`,value:f});}),{valid:s.length===c,value:a}}validatePlainObject(e){return this.isPlainObject(e)?{valid:true,value:{...e}}:{valid:false,error:`Expected object, got ${this.describeType(e)}`}}validateFunction(e){return typeof e!="function"?{valid:false,error:`Expected function, got ${this.describeType(e)}`}:{valid:true,value:e}}validateShape(e,t,r,o,s){if(!this.isPlainObject(e))return {valid:false,error:`Expected object, got ${this.describeType(e)}`};let i=s.length,a=this.validateObject(e,t.shape??{},o,r,s);return {valid:s.length===i,value:a}}validateOneOfType(e,t){let r=t.types??[];return r.some(s=>this.matchesType(e,s))?{valid:true,value:e}:{valid:false,error:`Value does not match any allowed type: ${r.join(", ")}`}}matchesType(e,t){switch(t){case "string":return typeof e=="string";case "number":return typeof e=="number"&&!Number.isNaN(e);case "bool":case "boolean":return typeof e=="boolean";case "array":return Array.isArray(e);case "object":return this.isPlainObject(e);case "func":case "function":return typeof e=="function";case "shape":return this.isPlainObject(e);case "node":return e==null||typeof e!="symbol";default:return true}}applyDefaults(e){let t={};for(let[r,o]of Object.entries(e)){if(o.defaultValue!==void 0){t[r]=this.cloneValue(o.defaultValue);continue}if(o.type==="shape"&&o.shape){let s=this.applyDefaults(o.shape);Object.keys(s).length>0&&(t[r]=s);}}return t}cloneValue(e){if(Array.isArray(e))return e.map(t=>this.cloneValue(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneValue(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}isNil(e){return e==null}buildPath(e){return e.join(".")}describeType(e){return Array.isArray(e)?"array":e===null?"null":typeof e}};var jt=class{handlebars;propsValidator;constructor(e){this.handlebars=_e__namespace.default.create(),this.propsValidator=e??new Ut,this.registerHelpers();}render(e,t,r={}){try{let o=this.prepareRenderContext(e,t,r);return this.handlebars.compile(e.template,{noEscape:!0})(o)}catch(o){throw o instanceof Error?new Error(`Template rendering failed for layout '${e.id}': ${o.message}`):new Error(`Unknown error rendering layout '${e.id}'`)}}validate(e,t,r="lenient"){return this.executeValidation(e,t,r)}resolveProps(e,t,r="lenient"){let o=this.mergeProps(e.defaultProps,t);return !e.propsSchema||Object.keys(e.propsSchema).length===0?{valid:true,props:o,errors:[]}:this.executeValidation(o,e.propsSchema,r)}prepareRenderContext(e,t,r){let{validationMode:o="lenient",skipValidation:s=false}=r,i=s?this.mergeProps(e.defaultProps,t.props):this.resolveProps(e,t.props,o).props;return {...t,vars:this.sanitizeVars(t.vars),props:i}}registerHelpers(){this.handlebars.registerHelper("formatConversation",Uo),_e__namespace.default.helpers.each&&this.handlebars.registerHelper("each",_e__namespace.default.helpers.each),_e__namespace.default.helpers.if&&this.handlebars.registerHelper("if",_e__namespace.default.helpers.if),_e__namespace.default.helpers.unless&&this.handlebars.registerHelper("unless",_e__namespace.default.helpers.unless),_e__namespace.default.helpers.with&&this.handlebars.registerHelper("with",_e__namespace.default.helpers.with),this.handlebars.registerHelper("eq",function(e,t){return e===t}),this.handlebars.registerHelper("ne",function(e,t){return e!==t}),this.handlebars.registerHelper("gt",function(e,t){return e>t}),this.handlebars.registerHelper("lt",function(e,t){return e<t}),this.handlebars.registerHelper("json",function(e){return new _e__namespace.default.SafeString(JSON.stringify(e))}),this.handlebars.registerHelper("raw",function(e){return typeof e?.fn=="function"?e.fn(this):""}),this.handlebars.registerHelper("escapeHandlebars",function(e){return typeof e!="string"?"":e.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}),this.handlebars.registerHelper("formatFileSize",function(e){if(e===0)return "0 B";let t=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,r)*100)/100+" "+t[r]});}executeValidation(e,t,r){try{return this.propsValidator.validate(e,t,r)}catch(o){if(o instanceof be&&o.errors&&o.errors.length>0){let s=o.errors[0];if(s)throw new be(s.message,o.errors)}throw o}}mergeProps(e,t){let r=this.cloneDeep(e??{});return t?this.deepMerge(r,t):r}deepMerge(e,t){for(let[r,o]of Object.entries(t)){if(this.isPlainObject(o)){let s=e[r];e[r]=this.deepMerge(this.isPlainObject(s)?s:{},o);continue}if(Array.isArray(o)){e[r]=this.cloneDeep(o);continue}e[r]=o;}return e}cloneDeep(e){if(Array.isArray(e))return e.map(t=>this.cloneDeep(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneDeep(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}sanitizeVars(e){if(!e)return {};let t={...e};if(typeof e.user_input=="string"){t.user_input_raw=e.user_input;let r=e.user_input.replace(/\{\{\{/g,"&#123;&#123;&#123;").replace(/\}\}\}/g,"&#125;&#125;&#125;").replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;");t.user_input=this.handlebars.escapeExpression(r);}return t}};p();var cn="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function Ra(n){let e=crypto$1.randomBytes(n*2),t="";for(let r=0;r<e.length&&t.length<n;r++){let o=e[r];o<248&&(t+=cn[o%62]);}for(;t.length<n;)t+=cn[crypto$1.randomBytes(1)[0]%62];return t}function rt(n){return `${n}_${Ra(8)}`}function Ca(n,e){let{createHash:t}=te("crypto"),r=t("sha256").update(e).digest(),o=Buffer.alloc(8);for(let i=0;i<32;i++)o[i%8]^=r[i];let s="";for(let i of o)s+=cn[i%62];return `${n}_${s}`}p();function un(n){let e=t=>String(t).padStart(2,"0");return `${n.getFullYear()}${e(n.getMonth()+1)}${e(n.getDate())}T${e(n.getHours())}${e(n.getMinutes())}${e(n.getSeconds())}`}p();function Fo(n,e){return t=>{try{let r=e(t);r instanceof Promise&&r.catch(o=>{console.error(`[crewx] event listener error (${n}): ${o instanceof Error?o.message:String(o)}`);});}catch(r){console.error(`[crewx] event listener error (${n}): ${r instanceof Error?r.message:String(r)}`);}}}var Ft=class{_emitter=new events.EventEmitter;on(e,t){let r=Fo(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=Fo(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};p();function pn(n){let e=new Map,t=r=>r.startsWith(`${n}::`)?r:`${n}::${r}`;return {async get(r){let o=e.get(t(r));return o?o.value:void 0},async set(r,o){e.set(t(r),{value:o});},async delete(r){return e.delete(t(r))},async list(r){let o=r?t(r):`${n}::`,s=[];for(let i of e.keys())i.startsWith(o)&&s.push(i.slice(n.length+2));return s}}}p();var gn=new async_hooks.AsyncLocalStorage;function ba(){return gn}function Sa(n,e){return gn.run(n,e)}function fn(n){let e=n.log??n.logger??{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},t=n.agentRunner??{run:async()=>({output:""})},r=n.db??{get:async()=>{},set:async()=>{},delete:async()=>false,list:async()=>[]},o=n.storage??{put:async()=>"",get:async()=>{},delete:async()=>false},s=n.audit??{log:async()=>{}},i=n.onInbound??(async()=>({accepted:true})),a=n.onEmitEvent??(async()=>({accepted:true})),d=n.onUpdateMessage??(async()=>{}),l=n.onResolveUser??(async g=>({userId:g,displayName:g})),c=async g=>{let m=gn.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 w="text"in g?g.text:"";m.res.status(200).json({text:w});},f=n.httpRouter??{registerRoute:()=>{e.warn("httpRouter not configured \u2014 registerRoute is a no-op");}};return {instanceId:n.instanceId,config:n.config,capabilities:n.capabilities,log:e,agentRunner:t,db:r,storage:o,audit:s,abortSignal:n.abortSignal??new AbortController().signal,httpRouter:f,inbound:i,emitEvent:a,updateMessage:d,resolveUser:l,respondSync:c}}Ne();p();var Ia=/^-\s*Status:\s*active/m,Oa=/^---\n([\s\S]*?)\n---/,Ma=/^type:\s*goal\s*$/m;async function Ho(n,e=Ze,t){let r=typeof t=="string"?[t]:Array.isArray(t)?t:void 0;if(r){let a=[];for(let d of r){let l=e.resolvePath(n,d);await e.exists(l)&&a.push(await e.readFile(l));}return a.join(`
53
48
  ---
54
- `)}let s=(await e.readdir(n)).filter(a=>a.endsWith(".md"));if(s.length===0)return "";let i=[];for(let a of s){let d=e.resolvePath(n,a),l=await e.readFile(d),u=wi.exec(l);!u||!xi.test(u[1])||hi.test(l)&&i.push(l);}return i.join(`
49
+ `)}let s=(await e.readdir(n)).filter(a=>a.endsWith(".md"));if(s.length===0)return "";let i=[];for(let a of s){let d=e.resolvePath(n,a),l=await e.readFile(d),c=Oa.exec(l);!c||!Ma.test(c[1])||Ia.test(l)&&i.push(l);}return i.join(`
55
50
  ---
56
- `)}c();function ki(){let n=new Date,e=n.getFullYear(),t=String(n.getMonth()+1).padStart(2,"0"),r=String(n.getDate()).padStart(2,"0");return `${e}-${t}-${r}`}async function Vn(n,e=Oe){let t=e.resolvePath(n,`${ki()}.md`);return await e.exists(t)?e.readFile(t):""}Ee();c();var yt=new async_hooks.AsyncLocalStorage;function Ir(n){if(n)return {parentTaskId:n.parentTaskId??null,rootTraceId:n.rootTraceId,callerAgentId:n.callerAgentId??null}}c();function vi(n){return typeof n!="string"?"":n.replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Or(n){return n.messages.map(e=>({text:vi(e.text),isAssistant:e.isAssistant,timestamp:e.timestamp,metadata:e.metadata,files:void 0}))}c();Ee();Ce();c();c();var Qe=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:G.join(Ci__default.default.homedir(),".crewx","crewx.db")}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return so.existsSync(e??this.resolveDbPath())}};c();function ke(n){let e=J("better-sqlite3"),{drizzle:t}=J("drizzle-orm/better-sqlite3"),r=new e(n);return r.exec("PRAGMA journal_mode = WAL"),r.exec("PRAGMA busy_timeout = 5000"),r.exec("PRAGMA foreign_keys = ON"),{db:t(r),runRaw:(o,s=[])=>r.prepare(o).run(...s),close:()=>r.close()}}c();var Gn=new Set,Ti={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 Nr(n,e){return (n.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function bi(n,e){if(e>0||!Nr(n,"tasks"))return;let t=n.all("PRAGMA table_info(tasks)"),r=new Set(t.map(o=>o.name));for(let[o,s]of Object.entries(Ti))r.has(o)||n.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}var Pi={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"}};function Si(n,e,t){if(!Nr(n,"__drizzle_migrations")||!Nr(n,"tasks"))return;let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(so.readFileSync(G__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=Pi[i.tag];if(!a)continue;let d=G__namespace.default.join(e,`${i.tag}.sql`);if(!so.existsSync(d))continue;let l=so.readFileSync(d,"utf-8"),u=crypto$1.createHash("sha256").update(l).digest("hex");if(o.has(u))continue;let p=n.all("PRAGMA table_info(tasks)"),f=new Set(p.map(g=>g.name));for(let[g,h]of Object.entries(a))f.has(g)||(n.run(`ALTER TABLE tasks ADD COLUMN ${g} ${h}`),f.add(g));}}function Ii(n,e,t){let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(so.readFileSync(G__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=G__namespace.default.join(e,`${i.tag}.sql`);if(!so.existsSync(a))continue;let d=so.readFileSync(a,"utf-8"),l=crypto$1.createHash("sha256").update(d).digest("hex");if(o.has(l))continue;let u=/ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+[`"]?(\w+)[`"]?/gi,p=[],f;for(;(f=u.exec(d))!==null;)p.push({table:f[1],column:f[2]});if(p.length===0||!d.split(/-->\s*statement-breakpoint/).map(x=>x.trim()).filter(Boolean).every(x=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(x)))continue;p.every(({table:x,column:v})=>n.all(`PRAGMA table_info("${x}")`).some(_=>_.name===v))&&n.run(t`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${l}, ${i.when})`);}}function Oi(n){let{migrate:e}=J("drizzle-orm/better-sqlite3/migrator"),{sql:t}=J("drizzle-orm"),r=[G__namespace.default.join(__dirname,"../migrations"),G__namespace.default.join(__dirname,"migrations"),G__namespace.default.join(__dirname,"../../../../drizzle/migrations"),G__namespace.default.join(process.cwd(),"drizzle/migrations")],o=r.find(l=>so.existsSync(G__namespace.default.join(l,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
51
+ `)}p();function Na(){let n=new Date,e=n.getFullYear(),t=String(n.getMonth()+1).padStart(2,"0"),r=String(n.getDate()).padStart(2,"0");return `${e}-${t}-${r}`}async function qo(n,e=Ze){let t=e.resolvePath(n,`${Na()}.md`);return await e.exists(t)?e.readFile(t):""}p();gt();Ne();function mn(n){if(n.startsWith("cli/"))return exports.BUILTIN_ADAPTERS[n.slice(4)]}function La(n,e={}){if(!n.startsWith("cli/"))return true;let r=(e.lookupAdapter??mn)(n);if(!r?.command)return false;let o=Et(r.command,{env:e.env});return K__namespace.default.isAbsolute(o)}function yn(n,e={}){if(!Array.isArray(n))return n;if(n.length===0)return "cli/claude";for(let t of n)if(La(t,e))return t;return n[0]}p();var Ht=new async_hooks.AsyncLocalStorage;function hn(n){if(n)return {parentTaskId:n.parentTaskId??null,rootTraceId:n.rootTraceId,callerAgentId:n.callerAgentId??null}}p();function Ua(n){return typeof n!="string"?"":n.replace(/</g,"&lt;").replace(/>/g,"&gt;")}function wn(n){return n.messages.map(e=>({text:Ua(e.text),isAssistant:e.isAssistant,timestamp:e.timestamp,metadata:e.metadata,files:void 0}))}p();Ne();De();p();p();var _t=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:K.join(qa__default.default.homedir(),".crewx","crewx.db")}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return rs.existsSync(e??this.resolveDbPath())}};p();function ve(n){let e=te("better-sqlite3"),{drizzle:t}=te("drizzle-orm/better-sqlite3"),r=new e(n);return r.exec("PRAGMA journal_mode = WAL"),r.exec("PRAGMA busy_timeout = 5000"),r.exec("PRAGMA foreign_keys = ON"),r.exec("PRAGMA analysis_limit = 400"),r.exec("PRAGMA optimize"),{db:t(r),runRaw:(o,s=[])=>r.prepare(o).run(...s),close:()=>r.close()}}p();var Wo=new Set,Wa={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 vn(n,e){return (n.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function Ba(n,e){if(e>0||!vn(n,"tasks"))return;let t=n.all("PRAGMA table_info(tasks)"),r=new Set(t.map(o=>o.name));for(let[o,s]of Object.entries(Wa))r.has(o)||n.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}var za={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"}};function Ka(n,e,t){if(!vn(n,"__drizzle_migrations")||!vn(n,"tasks"))return;let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(rs.readFileSync(K__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=za[i.tag];if(!a)continue;let d=K__namespace.default.join(e,`${i.tag}.sql`);if(!rs.existsSync(d))continue;let l=rs.readFileSync(d,"utf-8"),c=crypto$1.createHash("sha256").update(l).digest("hex");if(o.has(c))continue;let f=n.all("PRAGMA table_info(tasks)"),g=new Set(f.map(m=>m.name));for(let[m,w]of Object.entries(a))g.has(m)||(n.run(`ALTER TABLE tasks ADD COLUMN ${m} ${w}`),g.add(m));}}function Ga(n,e,t){let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(rs.readFileSync(K__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=K__namespace.default.join(e,`${i.tag}.sql`);if(!rs.existsSync(a))continue;let d=rs.readFileSync(a,"utf-8"),l=crypto$1.createHash("sha256").update(d).digest("hex");if(o.has(l))continue;let c=/ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+[`"]?(\w+)[`"]?/gi,f=[],g;for(;(g=c.exec(d))!==null;)f.push({table:g[1],column:g[2]});if(f.length===0||!d.split(/-->\s*statement-breakpoint/).map(k=>k.trim()).filter(Boolean).every(k=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(k)))continue;f.every(({table:k,column:v})=>n.all(`PRAGMA table_info("${k}")`).some(_=>_.name===v))&&n.run(t`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${l}, ${i.when})`);}}function Va(n){let{migrate:e}=te("drizzle-orm/better-sqlite3/migrator"),{sql:t}=te("drizzle-orm"),r=[K__namespace.default.join(__dirname,"../migrations"),K__namespace.default.join(__dirname,"migrations"),K__namespace.default.join(__dirname,"../../../../drizzle/migrations"),K__namespace.default.join(process.cwd(),"drizzle/migrations")],o=r.find(l=>rs.existsSync(K__namespace.default.join(l,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
57
52
  ${r.join(`
58
- `)}`);let s=n.get(t`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),i=0;s?.cnt&&(i=n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),bi(n,i),s?.cnt&&(Ii(n,o,t),Si(n,o,t)),e(n,{migrationsFolder:o});let d=(n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(d>0){let l=s?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${l} (${d} migration${d>1?"s":""} applied).`);}}function Bt(n,e){Gn.has(e)||(Oi(n),Gn.add(e));}c();var M=class extends Error{code;cause;constructor(e,t,r){super(t),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};c();c();var Jn=sqliteCore.sqliteTable("workspaces",{id:sqliteCore.text("id").primaryKey(),slug:sqliteCore.text("slug").notNull().unique(),name:sqliteCore.text("name").notNull(),workspace_path:sqliteCore.text("workspace_path"),description:sqliteCore.text("description"),is_active:sqliteCore.integer("is_active").notNull().default(1),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()});c();var m=sqliteCore.sqliteTable("tasks",{id:sqliteCore.text("id").primaryKey(),agent_id:sqliteCore.text("agent_id").notNull(),user_id:sqliteCore.text("user_id"),prompt:sqliteCore.text("prompt").notNull(),mode:sqliteCore.text("mode").notNull().default("execute"),status:sqliteCore.text("status").notNull().default("running"),result:sqliteCore.text("result"),error:sqliteCore.text("error"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),metadata:sqliteCore.text("metadata"),workspace_id:sqliteCore.text("workspace_id"),trace_id:sqliteCore.text("trace_id"),parent_task_id:sqliteCore.text("parent_task_id"),caller_agent_id:sqliteCore.text("caller_agent_id"),model:sqliteCore.text("model"),platform:sqliteCore.text("platform").default("cli"),crewx_version:sqliteCore.text("crewx_version"),input_tokens:sqliteCore.integer("input_tokens").default(0),output_tokens:sqliteCore.integer("output_tokens").default(0),cost_usd:sqliteCore.real("cost_usd").default(0),pid:sqliteCore.integer("pid"),rendered_prompt:sqliteCore.text("rendered_prompt"),command:sqliteCore.text("command"),coding_agent_command:sqliteCore.text("coding_agent_command"),exit_code:sqliteCore.integer("exit_code"),logs:sqliteCore.text("logs"),thread_id:sqliteCore.text("thread_id"),workspace_ref:sqliteCore.text("workspace_ref"),project_id:sqliteCore.text("project_id"),project_ref:sqliteCore.text("project_ref"),cached_input_tokens:sqliteCore.integer("cached_input_tokens").default(0),run_epoch:sqliteCore.integer("run_epoch").default(0)},n=>({idx_tasks_agent_id:sqliteCore.index("idx_tasks_agent_id").on(n.agent_id),idx_tasks_status:sqliteCore.index("idx_tasks_status").on(n.status),idx_tasks_started_at:sqliteCore.index("idx_tasks_started_at").on(n.started_at),idx_tasks_trace_id:sqliteCore.index("idx_tasks_trace_id").on(n.trace_id),idx_tasks_parent_task_id:sqliteCore.index("idx_tasks_parent_task_id").on(n.parent_task_id),idx_tasks_crewx_version:sqliteCore.index("idx_tasks_crewx_version").on(n.crewx_version),idx_tasks_pid:sqliteCore.index("idx_tasks_pid").on(n.pid),idx_tasks_thread_id:sqliteCore.index("idx_tasks_thread_id").on(n.thread_id),idx_tasks_workspace_id:sqliteCore.index("idx_tasks_workspace_id").on(n.workspace_id),idx_tasks_workspace_ref:sqliteCore.index("idx_tasks_workspace_ref").on(n.workspace_ref),idx_tasks_project_id:sqliteCore.index("idx_tasks_project_id").on(n.project_id),idx_tasks_ws_started:sqliteCore.index("idx_tasks_ws_started").on(n.workspace_id,n.started_at)}));c();var Qn=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>Jn.id,{onDelete:"set null"}),platform:sqliteCore.text("platform").notNull().default("cli"),title:sqliteCore.text("title"),first_message:sqliteCore.text("first_message"),last_message:sqliteCore.text("last_message"),message_count:sqliteCore.integer("message_count").notNull().default(0),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),metadata:sqliteCore.text("metadata"),title_locked:sqliteCore.integer("title_locked").notNull().default(0),pinned:sqliteCore.integer("pinned").notNull().default(0),starred:sqliteCore.integer("starred").notNull().default(0)},n=>({idx_threads_updated_at:sqliteCore.index("idx_threads_updated_at").on(n.updated_at),idx_threads_workspace_id:sqliteCore.index("idx_threads_workspace_id").on(n.workspace_id)}));c();var Ue=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>m.id,{onDelete:"set null"}),parent_span_id:sqliteCore.text("parent_span_id").references(()=>Ue.id,{onDelete:"set null"}),name:sqliteCore.text("name").notNull(),kind:sqliteCore.text("kind").notNull().default("internal"),status:sqliteCore.text("status").notNull().default("ok"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),error:sqliteCore.text("error"),attributes:sqliteCore.text("attributes")},n=>({idx_spans_task_id:sqliteCore.index("idx_spans_task_id").on(n.task_id),idx_spans_parent_span_id:sqliteCore.index("idx_spans_parent_span_id").on(n.parent_span_id)}));c();sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>m.id,{onDelete:"cascade"}),session_id:sqliteCore.text("session_id"),tool_name:sqliteCore.text("tool_name").notNull(),files:sqliteCore.text("files"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),duration_ms:sqliteCore.integer("duration_ms"),timestamp:sqliteCore.text("timestamp").notNull()},n=>({idx_tool_calls_task_id:sqliteCore.index("idx_tool_calls_task_id").on(n.task_id),idx_tool_calls_tool_name:sqliteCore.index("idx_tool_calls_tool_name").on(n.tool_name),idx_tool_calls_timestamp:sqliteCore.index("idx_tool_calls_timestamp").on(n.timestamp)}));c();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>Qn.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),first_task_id:sqliteCore.text("first_task_id").notNull(),mid_task_id:sqliteCore.text("mid_task_id").notNull(),last_task_id:sqliteCore.text("last_task_id").notNull(),task_count:sqliteCore.integer("task_count").notNull(),summary:sqliteCore.text("summary"),source_tokens:sqliteCore.integer("source_tokens").notNull(),summary_tokens:sqliteCore.integer("summary_tokens"),created_at:sqliteCore.text("created_at").notNull()},n=>({idx_thread_boxes_thread_id:sqliteCore.index("idx_thread_boxes_thread_id").on(n.thread_id),idx_thread_boxes_seq:sqliteCore.index("idx_thread_boxes_seq").on(n.thread_id,n.seq),uniq_thread_boxes_thread_seq:sqliteCore.unique().on(n.thread_id,n.seq)}));c();sqliteCore.sqliteTable("request_logs",{id:sqliteCore.text("id").primaryKey(),path:sqliteCore.text("path").notNull(),method:sqliteCore.text("method").notNull(),status_code:sqliteCore.integer("status_code").notNull(),duration_ms:sqliteCore.integer("duration_ms").notNull(),ip:sqliteCore.text("ip"),request_headers:sqliteCore.text("request_headers"),response_headers:sqliteCore.text("response_headers"),request_body:sqliteCore.text("request_body"),response_body:sqliteCore.text("response_body"),query:sqliteCore.text("query"),user_id:sqliteCore.text("user_id"),project_id:sqliteCore.text("project_id"),partition_key:sqliteCore.text("partition_key").notNull(),timestamp:sqliteCore.text("timestamp").notNull().default(drizzleOrm.sql`(datetime('now'))`),metadata:sqliteCore.text("metadata")},n=>({idx_request_logs_timestamp:sqliteCore.index("idx_request_logs_timestamp").on(n.timestamp),idx_request_logs_path:sqliteCore.index("idx_request_logs_path").on(n.path),idx_request_logs_status_code:sqliteCore.index("idx_request_logs_status_code").on(n.status_code),idx_request_logs_partition_key:sqliteCore.index("idx_request_logs_partition_key").on(n.partition_key)}));c();sqliteCore.sqliteTable("usage_limit_snapshots",{id:sqliteCore.text("id").primaryKey(),provider:sqliteCore.text("provider").notNull(),account_ref:sqliteCore.text("account_ref").notNull().default("default"),limit_window:sqliteCore.text("limit_window").notNull(),bucket_start:sqliteCore.text("bucket_start").notNull(),captured_at:sqliteCore.text("captured_at").notNull(),used_percent:sqliteCore.integer("used_percent").notNull(),remaining_percent:sqliteCore.integer("remaining_percent").notNull(),resets_at:sqliteCore.text("resets_at"),source:sqliteCore.text("source").notNull(),metadata:sqliteCore.text("metadata")},n=>({uniq_usage_limit_snapshots_bucket:sqliteCore.uniqueIndex("uniq_usage_limit_snapshots_bucket").on(n.provider,n.account_ref,n.limit_window,n.bucket_start),idx_usage_limit_snapshots_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_window_bucket").on(n.limit_window,n.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_provider_window_bucket").on(n.provider,n.limit_window,n.bucket_start)}));var Fe="2026-05-09",Zi="0.8.9-rc.13",qe=10,Be=parseInt(Zi.split("rc.")[1]),ht=class extends Qe{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=G.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=G.dirname(t);so.existsSync(o)||so.mkdirSync(o,{recursive:true});}else if(!so.existsSync(t))throw new M("NOT_FOUND","Database not found");let r=ke(t);if(e)try{Bt(r.db,t);}catch(o){throw r.close(),o}return r}startTask(e){let t=this.openHandle(true);try{t.db.insert(m).values({id:e.id,agent_id:e.agentId,prompt:e.prompt,mode:e.mode,status:e.status,started_at:e.startedAt,pid:e.pid??null,parent_task_id:e.parentTaskId??null,caller_agent_id:e.callerAgentId??null,trace_id:e.traceId??null,command:e.command??null,metadata:e.metadata??null,workspace_id:e.workspaceId??null,platform:e.platform??"cli",crewx_version:e.crewxVersion??null,thread_id:e.threadId??null,model:e.model??null,rendered_prompt:e.renderedPrompt??null,coding_agent_command:e.codingAgentCommand??null}).onConflictDoUpdate({target:m.id,set:{pid:drizzleOrm.sql`COALESCE(excluded.pid, ${m.pid})`},setWhere:drizzleOrm.eq(m.status,"running")}).run();}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to start task",r)}finally{t.close();}}finishTask(e){let t=this.openHandle(true);try{let r=e.runEpoch??null;t.runRaw(`UPDATE tasks SET status=?, result=?, error=?, completed_at=?, duration_ms=?,
53
+ `)}`);let s=n.get(t`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),i=0;s?.cnt&&(i=n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),Ba(n,i),s?.cnt&&(Ga(n,o,t),Ka(n,o,t)),e(n,{migrationsFolder:o});let d=(n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(d>0){let l=s?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${l} (${d} migration${d>1?"s":""} applied).`);}}function vr(n,e){Wo.has(e)||(Va(n),Wo.add(e));}p();var T=class extends Error{code;cause;constructor(e,t,r){super(t),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};p();p();var zo=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()});p();var u=sqliteCore.sqliteTable("tasks",{id:sqliteCore.text("id").primaryKey(),agent_id:sqliteCore.text("agent_id").notNull(),user_id:sqliteCore.text("user_id"),prompt:sqliteCore.text("prompt").notNull(),mode:sqliteCore.text("mode").notNull().default("execute"),status:sqliteCore.text("status").notNull().default("running"),result:sqliteCore.text("result"),error:sqliteCore.text("error"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),metadata:sqliteCore.text("metadata"),workspace_id:sqliteCore.text("workspace_id"),trace_id:sqliteCore.text("trace_id"),parent_task_id:sqliteCore.text("parent_task_id"),caller_agent_id:sqliteCore.text("caller_agent_id"),model:sqliteCore.text("model"),platform:sqliteCore.text("platform").default("cli"),crewx_version:sqliteCore.text("crewx_version"),input_tokens:sqliteCore.integer("input_tokens").default(0),output_tokens:sqliteCore.integer("output_tokens").default(0),cost_usd:sqliteCore.real("cost_usd").default(0),pid:sqliteCore.integer("pid"),rendered_prompt:sqliteCore.text("rendered_prompt"),command:sqliteCore.text("command"),coding_agent_command:sqliteCore.text("coding_agent_command"),exit_code:sqliteCore.integer("exit_code"),logs:sqliteCore.text("logs"),thread_id:sqliteCore.text("thread_id"),workspace_ref:sqliteCore.text("workspace_ref"),project_id:sqliteCore.text("project_id"),project_ref:sqliteCore.text("project_ref"),cached_input_tokens:sqliteCore.integer("cached_input_tokens").default(0),run_epoch:sqliteCore.integer("run_epoch").default(0)},n=>({idx_tasks_agent_id:sqliteCore.index("idx_tasks_agent_id").on(n.agent_id),idx_tasks_status:sqliteCore.index("idx_tasks_status").on(n.status),idx_tasks_started_at:sqliteCore.index("idx_tasks_started_at").on(n.started_at),idx_tasks_trace_id:sqliteCore.index("idx_tasks_trace_id").on(n.trace_id),idx_tasks_parent_task_id:sqliteCore.index("idx_tasks_parent_task_id").on(n.parent_task_id),idx_tasks_crewx_version:sqliteCore.index("idx_tasks_crewx_version").on(n.crewx_version),idx_tasks_pid:sqliteCore.index("idx_tasks_pid").on(n.pid),idx_tasks_thread_id:sqliteCore.index("idx_tasks_thread_id").on(n.thread_id),idx_tasks_workspace_id:sqliteCore.index("idx_tasks_workspace_id").on(n.workspace_id),idx_tasks_workspace_ref:sqliteCore.index("idx_tasks_workspace_ref").on(n.workspace_ref),idx_tasks_project_id:sqliteCore.index("idx_tasks_project_id").on(n.project_id),idx_tasks_ws_started:sqliteCore.index("idx_tasks_ws_started").on(n.workspace_id,n.started_at)}));p();var Ko=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>zo.id,{onDelete:"set null"}),platform:sqliteCore.text("platform").notNull().default("cli"),title:sqliteCore.text("title"),first_message:sqliteCore.text("first_message"),last_message:sqliteCore.text("last_message"),message_count:sqliteCore.integer("message_count").notNull().default(0),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),metadata:sqliteCore.text("metadata"),title_locked:sqliteCore.integer("title_locked").notNull().default(0),pinned:sqliteCore.integer("pinned").notNull().default(0),starred:sqliteCore.integer("starred").notNull().default(0)},n=>({idx_threads_updated_at:sqliteCore.index("idx_threads_updated_at").on(n.updated_at),idx_threads_workspace_id:sqliteCore.index("idx_threads_workspace_id").on(n.workspace_id),idx_threads_ws_updated:sqliteCore.index("idx_threads_ws_updated").on(n.workspace_id,n.updated_at),idx_threads_title:sqliteCore.index("idx_threads_title").on(n.title)}));p();var st=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>u.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")},n=>({idx_spans_task_id:sqliteCore.index("idx_spans_task_id").on(n.task_id),idx_spans_parent_span_id:sqliteCore.index("idx_spans_parent_span_id").on(n.parent_span_id)}));p();sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>u.id,{onDelete:"cascade"}),session_id:sqliteCore.text("session_id"),tool_name:sqliteCore.text("tool_name").notNull(),files:sqliteCore.text("files"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),duration_ms:sqliteCore.integer("duration_ms"),timestamp:sqliteCore.text("timestamp").notNull()},n=>({idx_tool_calls_task_id:sqliteCore.index("idx_tool_calls_task_id").on(n.task_id),idx_tool_calls_tool_name:sqliteCore.index("idx_tool_calls_tool_name").on(n.tool_name),idx_tool_calls_timestamp:sqliteCore.index("idx_tool_calls_timestamp").on(n.timestamp)}));p();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>Ko.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),first_task_id:sqliteCore.text("first_task_id").notNull(),mid_task_id:sqliteCore.text("mid_task_id").notNull(),last_task_id:sqliteCore.text("last_task_id").notNull(),task_count:sqliteCore.integer("task_count").notNull(),summary:sqliteCore.text("summary"),source_tokens:sqliteCore.integer("source_tokens").notNull(),summary_tokens:sqliteCore.integer("summary_tokens"),created_at:sqliteCore.text("created_at").notNull()},n=>({idx_thread_boxes_thread_id:sqliteCore.index("idx_thread_boxes_thread_id").on(n.thread_id),idx_thread_boxes_seq:sqliteCore.index("idx_thread_boxes_seq").on(n.thread_id,n.seq),uniq_thread_boxes_thread_seq:sqliteCore.unique().on(n.thread_id,n.seq)}));p();sqliteCore.sqliteTable("request_logs",{id:sqliteCore.text("id").primaryKey(),path:sqliteCore.text("path").notNull(),method:sqliteCore.text("method").notNull(),status_code:sqliteCore.integer("status_code").notNull(),duration_ms:sqliteCore.integer("duration_ms").notNull(),ip:sqliteCore.text("ip"),request_headers:sqliteCore.text("request_headers"),response_headers:sqliteCore.text("response_headers"),request_body:sqliteCore.text("request_body"),response_body:sqliteCore.text("response_body"),query:sqliteCore.text("query"),user_id:sqliteCore.text("user_id"),project_id:sqliteCore.text("project_id"),partition_key:sqliteCore.text("partition_key").notNull(),timestamp:sqliteCore.text("timestamp").notNull().default(drizzleOrm.sql`(datetime('now'))`),metadata:sqliteCore.text("metadata")},n=>({idx_request_logs_timestamp:sqliteCore.index("idx_request_logs_timestamp").on(n.timestamp),idx_request_logs_path:sqliteCore.index("idx_request_logs_path").on(n.path),idx_request_logs_status_code:sqliteCore.index("idx_request_logs_status_code").on(n.status_code),idx_request_logs_partition_key:sqliteCore.index("idx_request_logs_partition_key").on(n.partition_key)}));p();sqliteCore.sqliteTable("usage_limit_snapshots",{id:sqliteCore.text("id").primaryKey(),provider:sqliteCore.text("provider").notNull(),account_ref:sqliteCore.text("account_ref").notNull().default("default"),limit_window:sqliteCore.text("limit_window").notNull(),bucket_start:sqliteCore.text("bucket_start").notNull(),captured_at:sqliteCore.text("captured_at").notNull(),used_percent:sqliteCore.integer("used_percent").notNull(),remaining_percent:sqliteCore.integer("remaining_percent").notNull(),resets_at:sqliteCore.text("resets_at"),source:sqliteCore.text("source").notNull(),metadata:sqliteCore.text("metadata")},n=>({uniq_usage_limit_snapshots_bucket:sqliteCore.uniqueIndex("uniq_usage_limit_snapshots_bucket").on(n.provider,n.account_ref,n.limit_window,n.bucket_start),idx_usage_limit_snapshots_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_window_bucket").on(n.limit_window,n.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_provider_window_bucket").on(n.provider,n.limit_window,n.bucket_start)}));p();sqliteCore.sqliteTable("usage_reports",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),month:sqliteCore.text("month").notNull(),generated_at:sqliteCore.text("generated_at").notNull(),source_range:sqliteCore.text("source_range").notNull(),tier:sqliteCore.text("tier").notNull(),total_tokens:sqliteCore.integer("total_tokens").notNull(),total_cost_usd:sqliteCore.real("total_cost_usd").notNull(),payload:sqliteCore.text("payload").notNull(),payload_hash:sqliteCore.text("payload_hash"),signature:sqliteCore.text("signature"),signed_at:sqliteCore.text("signed_at"),issuer:sqliteCore.text("issuer")},n=>({uniq_usage_reports_ws_month:sqliteCore.uniqueIndex("uniq_usage_reports_ws_month").on(n.workspace_id,n.month)}));p();sqliteCore.sqliteTable("notifications",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id"),task_id:sqliteCore.text("task_id"),thread_id:sqliteCore.text("thread_id"),source:sqliteCore.text("source").notNull().default("agent"),level:sqliteCore.text("level").notNull().default("info"),title:sqliteCore.text("title").notNull(),body:sqliteCore.text("body"),target_user_id:sqliteCore.text("target_user_id"),created_at:sqliteCore.text("created_at").notNull(),metadata:sqliteCore.text("metadata")},n=>({idx_notifications_ws_created:sqliteCore.index("idx_notifications_ws_created").on(n.workspace_id,drizzleOrm.sql`${n.created_at} DESC`)}));sqliteCore.sqliteTable("notification_reads",{notification_id:sqliteCore.text("notification_id").notNull(),user_id:sqliteCore.text("user_id").notNull(),read_at:sqliteCore.text("read_at").notNull()},n=>({pk:sqliteCore.primaryKey({columns:[n.notification_id,n.user_id]})}));p();sqliteCore.sqliteTable("agent_suggestions",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id").notNull(),task_id:sqliteCore.text("task_id"),type:sqliteCore.text("type").notNull(),status:sqliteCore.text("status").notNull().default("pending"),payload:sqliteCore.text("payload").notNull(),applied_commit_sha:sqliteCore.text("applied_commit_sha"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},n=>({idx_agent_suggestions_ws_agent:sqliteCore.index("idx_agent_suggestions_ws_agent").on(n.workspace_id,n.agent_id),idx_agent_suggestions_ws_created:sqliteCore.index("idx_agent_suggestions_ws_created").on(n.workspace_id,n.created_at)}));var je="2026-05-09",Ad="0.8.9-rc.13",Fe=10,He=parseInt(Ad.split("rc.")[1]),Ed=new Set(["workflow","mcp"]),ts=600*1e3,Wt=class extends _t{dbPath;pidNullObservedSince=new Map;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=K.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=K.dirname(t);rs.existsSync(o)||rs.mkdirSync(o,{recursive:true});}else if(!rs.existsSync(t))throw new T("NOT_FOUND","Database not found");let r=ve(t);if(e)try{vr(r.db,t);}catch(o){throw r.close(),o}return r}startTask(e){let t=this.openHandle(true);try{t.db.insert(u).values({id:e.id,agent_id:e.agentId,prompt:e.prompt,mode:e.mode,status:e.status,started_at:e.startedAt,pid:e.pid??null,parent_task_id:e.parentTaskId??null,caller_agent_id:e.callerAgentId??null,trace_id:e.traceId??null,command:e.command??null,metadata:e.metadata??null,workspace_id:e.workspaceId??null,platform:e.platform??"cli",crewx_version:e.crewxVersion??null,thread_id:e.threadId??null,model:e.model??null,rendered_prompt:e.renderedPrompt??null,coding_agent_command:e.codingAgentCommand??null}).onConflictDoUpdate({target:u.id,set:{pid:drizzleOrm.sql`COALESCE(excluded.pid, ${u.pid})`},setWhere:drizzleOrm.eq(u.status,"running")}).run();}catch(r){throw r instanceof T?r:new T("DB_ERROR","Failed to start task",r)}finally{t.close();}}finishTask(e){let t=this.openHandle(true);try{let r=e.runEpoch??null;t.runRaw(`UPDATE tasks SET status=?, result=?, error=?, completed_at=?, duration_ms=?,
59
54
  exit_code=?, input_tokens=?, output_tokens=?, cached_input_tokens=?, cost_usd=?,
60
55
  model=COALESCE(?, model)
61
- WHERE id=? AND status='running' AND COALESCE(run_epoch, 0) = COALESCE(?, 0)`,[e.status,e.result??null,e.error??null,e.completedAt,e.durationMs??null,e.exitCode??null,e.inputTokens??0,e.outputTokens??0,e.cachedInputTokens??0,e.costUsd??0,e.model??null,e.id,r]);}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to finish task",r)}finally{t.close();}}appendLog(e,t){let r=this.openHandle(true);try{r.db.transaction(o=>{let s=o.select({logs:m.logs}).from(m).where(drizzleOrm.eq(m.id,e)).limit(1).get(),i=s?.logs?JSON.parse(s.logs):[];i.push(t),o.update(m).set({logs:JSON.stringify(i)}).where(drizzleOrm.eq(m.id,e)).run();},{behavior:"immediate"});}catch(o){throw o instanceof M?o:new M("DB_ERROR","Failed to append log",o)}finally{r.close();}}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(m).where(drizzleOrm.eq(m.status,"running")).orderBy(drizzleOrm.desc(m.started_at)).all()}catch(t){throw new M("DB_ERROR","Failed to get running tasks",t)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(m).orderBy(drizzleOrm.desc(m.started_at)).limit(100).all()}catch(t){throw new M("DB_ERROR","Failed to get all tasks",t)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(m).where(drizzleOrm.eq(m.id,e)).limit(1).get()??void 0}catch(r){throw new M("DB_ERROR","Failed to get task",r)}finally{t.close();}}killTask(e){if(!this.dbExists())return {killed:false};let t=this.openHandle(true);try{let r=t.db.select({id:m.id,status:m.status,pid:m.pid}).from(m).where(drizzleOrm.eq(m.id,e)).limit(1).get();if(!r||r.status!=="running")return {killed:!1};if(r.pid)try{process.kill(r.pid,"SIGTERM");}catch{}return t.db.update(m).set({status:"failed",error:"Killed by user",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(m.id,e),drizzleOrm.eq(m.status,"running"))).run(),{killed:!0,pid:r.pid??void 0}}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to kill task",r)}finally{t.close();}}reapOrphanedTasks(){if(!this.dbExists())return 0;let e=this.openHandle(true);try{let t=e.db.select({id:m.id,pid:m.pid}).from(m).where(drizzleOrm.eq(m.status,"running")).all(),r=0;for(let o of t){if(!o.pid)continue;let s=!1;try{process.kill(o.pid,0),s=!0;}catch{}s||(e.db.update(m).set({status:"failed",error:"Reaped: process not found (orphaned task)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(m.id,o.id),drizzleOrm.eq(m.status,"running"))).run(),r++);}return r}finally{e.close();}}findTaskStatus(e,t){let r=this.resolveDbPaths();for(let o of r){if(!so.existsSync(o))continue;let s=ke(o);try{let i=t?drizzleOrm.eq(m.workspace_id,t):void 0,a=i?drizzleOrm.and(drizzleOrm.eq(m.id,e),i):drizzleOrm.eq(m.id,e),d=s.db.select().from(m).where(a).limit(1).get()??void 0;if(!d){let l=drizzleOrm.or(drizzleOrm.eq(m.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(m.thread_id),drizzleOrm.like(m.command,`%--thread=${e}%`))),u=i?drizzleOrm.and(l,i):l;d=s.db.select().from(m).where(u).orderBy(drizzleOrm.desc(m.started_at)).limit(1).get()??void 0;}if(d)return d}catch(i){throw new M("DB_ERROR","Failed to find task status",i)}finally{s.close();}}}findChildTasks(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!so.existsSync(i))continue;let a=ke(i);try{let d=t?drizzleOrm.and(drizzleOrm.eq(m.parent_task_id,e),drizzleOrm.eq(m.workspace_id,t)):drizzleOrm.eq(m.parent_task_id,e),l=a.db.select().from(m).where(d).orderBy(drizzleOrm.asc(m.started_at)).all();for(let u of l)o.has(u.id)||(o.add(u.id),s.push(u));}catch(d){throw new M("DB_ERROR","Failed to find child tasks",d)}finally{a.close();}}return s}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.all(e?drizzleOrm.sql`
56
+ WHERE id=? AND status='running' AND COALESCE(run_epoch, 0) = COALESCE(?, 0)`,[e.status,e.result??null,e.error??null,e.completedAt,e.durationMs??null,e.exitCode??null,e.inputTokens??0,e.outputTokens??0,e.cachedInputTokens??0,e.costUsd??0,e.model??null,e.id,r]);}catch(r){throw r instanceof T?r:new T("DB_ERROR","Failed to finish task",r)}finally{t.close();}}appendLog(e,t){let r=this.openHandle(true);try{r.db.transaction(o=>{let s=o.select({logs:u.logs}).from(u).where(drizzleOrm.eq(u.id,e)).limit(1).get(),i=s?.logs?JSON.parse(s.logs):[];i.push(t),o.update(u).set({logs:JSON.stringify(i)}).where(drizzleOrm.eq(u.id,e)).run();},{behavior:"immediate"});}catch(o){throw o instanceof T?o:new T("DB_ERROR","Failed to append log",o)}finally{r.close();}}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(u).where(drizzleOrm.eq(u.status,"running")).orderBy(drizzleOrm.desc(u.started_at)).all()}catch(t){throw new T("DB_ERROR","Failed to get running tasks",t)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(u).orderBy(drizzleOrm.desc(u.started_at)).limit(100).all()}catch(t){throw new T("DB_ERROR","Failed to get all tasks",t)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(u).where(drizzleOrm.eq(u.id,e)).limit(1).get()??void 0}catch(r){throw new T("DB_ERROR","Failed to get task",r)}finally{t.close();}}killTask(e){if(!this.dbExists())return {killed:false};let t=this.openHandle(true);try{let r=t.db.select({id:u.id,status:u.status,pid:u.pid}).from(u).where(drizzleOrm.eq(u.id,e)).limit(1).get();if(!r||r.status!=="running")return {killed:!1};if(r.pid)try{process.kill(r.pid,"SIGTERM");}catch{}return t.db.update(u).set({status:"failed",error:"Killed by user",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(u.id,e),drizzleOrm.eq(u.status,"running"))).run(),{killed:!0,pid:r.pid??void 0}}catch(r){throw r instanceof T?r:new T("DB_ERROR","Failed to kill task",r)}finally{t.close();}}reapOrphanedTasks(){if(!this.dbExists())return 0;let e=this.openHandle(true);try{let t=e.db.select({id:u.id,pid:u.pid,platform:u.platform,run_epoch:u.run_epoch}).from(u).where(drizzleOrm.eq(u.status,"running")).all(),r=Date.now(),o=new Set,s=0;for(let i of t){if(i.pid){let l=!1;try{process.kill(i.pid,0),l=!0;}catch{}l||(e.db.update(u).set({status:"failed",error:"Reaped: process not found (orphaned task)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(u.id,i.id),drizzleOrm.eq(u.status,"running"))).run(),s++);continue}if(Ed.has(i.platform??"cli"))continue;let a=`${i.id}:${i.run_epoch??0}`;o.add(a);let d=this.pidNullObservedSince.get(a);if(d===void 0){this.pidNullObservedSince.set(a,r);continue}r-d>=ts&&(e.db.update(u).set({status:"failed",error:"Reaped: pid never recorded after resume (stale running_instruction)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(u.id,i.id),drizzleOrm.eq(u.status,"running"))).run(),s++,this.pidNullObservedSince.delete(a));}for(let i of Array.from(this.pidNullObservedSince.keys()))o.has(i)||this.pidNullObservedSince.delete(i);return s}finally{e.close();}}reapRunningWorkflowTasks(e=ts){if(!this.dbExists())return 0;let t=this.openHandle(true);try{let r=new Date(Date.now()-e).toISOString();return t.db.update(u).set({status:"failed",error:"Reaped: stale workflow run (finally not executed)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(u.status,"running"),drizzleOrm.eq(u.platform,"workflow"),drizzleOrm.isNull(u.pid),drizzleOrm.lt(u.started_at,r))).run().changes??0}finally{t.close();}}findTaskStatus(e,t){let r=this.resolveDbPaths();for(let o of r){if(!rs.existsSync(o))continue;let s=ve(o);try{let i=t?drizzleOrm.eq(u.workspace_id,t):void 0,a=i?drizzleOrm.and(drizzleOrm.eq(u.id,e),i):drizzleOrm.eq(u.id,e),d=s.db.select().from(u).where(a).limit(1).get()??void 0;if(!d){let l=drizzleOrm.or(drizzleOrm.eq(u.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(u.thread_id),drizzleOrm.like(u.command,`%--thread=${e}%`))),c=i?drizzleOrm.and(l,i):l;d=s.db.select().from(u).where(c).orderBy(drizzleOrm.desc(u.started_at)).limit(1).get()??void 0;}if(d)return d}catch(i){throw new T("DB_ERROR","Failed to find task status",i)}finally{s.close();}}}findChildTasks(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!rs.existsSync(i))continue;let a=ve(i);try{let d=t?drizzleOrm.and(drizzleOrm.eq(u.parent_task_id,e),drizzleOrm.eq(u.workspace_id,t)):drizzleOrm.eq(u.parent_task_id,e),l=a.db.select().from(u).where(d).orderBy(drizzleOrm.asc(u.started_at)).all();for(let c of l)o.has(c.id)||(o.add(c.id),s.push(c));}catch(d){throw new T("DB_ERROR","Failed to find child tasks",d)}finally{a.close();}}return s}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.all(e?drizzleOrm.sql`
62
57
  SELECT
63
58
  COALESCE(workspace_id, 'unknown') AS workspace_id,
64
59
  COALESCE(SUM(input_tokens), 0) AS input_tokens,
@@ -79,7 +74,7 @@ ${r.join(`
79
74
  FROM tasks
80
75
  GROUP BY workspace_id
81
76
  ORDER BY (COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0)) DESC
82
- `)}catch(r){throw new M("DB_ERROR","Failed to get workspace usage summary",r)}finally{t.close();}}getThreadTokenUsage(e,t){let r=this.resolveDbPaths(),o=new Set,s=0,i=0,a=0;for(let d of r){if(!so.existsSync(d))continue;let l=ke(d);try{let u=drizzleOrm.or(drizzleOrm.eq(m.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(m.thread_id),drizzleOrm.like(m.command,`%--thread=${e}%`))),p=t?drizzleOrm.and(u,drizzleOrm.eq(m.workspace_id,t)):u,f=l.db.select({id:m.id,input_tokens:m.input_tokens,output_tokens:m.output_tokens,cost_usd:m.cost_usd}).from(m).where(p).all();for(let g of f)o.has(g.id)||(o.add(g.id),s+=g.input_tokens??0,i+=g.output_tokens??0,a+=g.cost_usd??0);}catch(u){throw new M("DB_ERROR","Failed to get thread token usage",u)}finally{l.close();}}return {inputTokens:s,outputTokens:i,costUsd:a}}findTasksByThread(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!so.existsSync(i))continue;let a=ke(i);try{let d=drizzleOrm.or(drizzleOrm.eq(m.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(m.thread_id),drizzleOrm.like(m.command,`%--thread=${e}%`))),l=t?drizzleOrm.and(d,drizzleOrm.eq(m.workspace_id,t)):d,u=a.db.select().from(m).where(l).orderBy(drizzleOrm.asc(m.started_at)).all();for(let p of u)o.has(p.id)||(o.add(p.id),s.push(p));}catch(d){throw new M("DB_ERROR","Failed to find tasks by thread",d)}finally{a.close();}}return s}findAllTasks(e){if(!this.dbExists())return {rows:[],total:0};let t=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(m.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(drizzleOrm.inArray(m.agent_id,o));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&r.push(drizzleOrm.inArray(m.status,s));let i=e.q??e.search;i&&r.push(drizzleOrm.like(m.prompt,`%${i}%`)),e.from&&r.push(drizzleOrm.gte(m.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(m.started_at,e.to));let a=r.length>0?drizzleOrm.and(...r):void 0,d=t.db.select({count:drizzleOrm.sql`count(*)`}).from(m).where(a).get(),l=(e.sortDir??"DESC")==="ASC"?drizzleOrm.asc(m.started_at):drizzleOrm.desc(m.started_at);return {rows:t.db.select().from(m).where(a).orderBy(l).limit(e.limit).offset(e.offset).all(),total:d?.count??0}}catch(r){throw new M("DB_ERROR","Failed to find all tasks",r)}finally{t.close();}}getAgentUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?drizzleOrm.sql`
77
+ `)}catch(r){throw new T("DB_ERROR","Failed to get workspace usage summary",r)}finally{t.close();}}getThreadTokenUsage(e,t){let r=this.resolveDbPaths(),o=new Set,s=0,i=0,a=0;for(let d of r){if(!rs.existsSync(d))continue;let l=ve(d);try{let c=drizzleOrm.or(drizzleOrm.eq(u.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(u.thread_id),drizzleOrm.like(u.command,`%--thread=${e}%`))),f=t?drizzleOrm.and(c,drizzleOrm.eq(u.workspace_id,t)):c,g=l.db.select({id:u.id,input_tokens:u.input_tokens,output_tokens:u.output_tokens,cost_usd:u.cost_usd}).from(u).where(f).all();for(let m of g)o.has(m.id)||(o.add(m.id),s+=m.input_tokens??0,i+=m.output_tokens??0,a+=m.cost_usd??0);}catch(c){throw new T("DB_ERROR","Failed to get thread token usage",c)}finally{l.close();}}return {inputTokens:s,outputTokens:i,costUsd:a}}findTasksByThread(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!rs.existsSync(i))continue;let a=ve(i);try{let d=drizzleOrm.or(drizzleOrm.eq(u.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(u.thread_id),drizzleOrm.like(u.command,`%--thread=${e}%`))),l=t?drizzleOrm.and(d,drizzleOrm.eq(u.workspace_id,t)):d,c=a.db.select().from(u).where(l).orderBy(drizzleOrm.asc(u.started_at)).all();for(let f of c)o.has(f.id)||(o.add(f.id),s.push(f));}catch(d){throw new T("DB_ERROR","Failed to find tasks by thread",d)}finally{a.close();}}return s}parseWorkflowCardMetadata(e){if(!e)return {};try{let t=JSON.parse(e);return {kind:typeof t.kind=="string"?t.kind:void 0,workflowRunId:typeof t.workflowRunId=="string"?t.workflowRunId:void 0}}catch{return {}}}extractThreadIdFromCommand(e){return e?/--thread=(\S+)/.exec(e)?.[1]??null:null}batchFetchWorkflowCards(e,t){let r=new Map;if(e.length===0)return r;let o=new Set(e),s=new Map,i=t?drizzleOrm.eq(u.workspace_id,t):void 0,a=(d,l)=>{if(!d)return;let c=s.get(d);if(c&&l.started_at<=c)return;let f=this.parseWorkflowCardMetadata(l.metadata);f.kind==="workflow_card"&&(s.set(d,l.started_at),r.set(d,{taskId:l.id,workflowRunId:f.workflowRunId,raw:l.result??void 0}));};for(let d of this.resolveDbPaths()){if(!rs.existsSync(d))continue;let l=ve(d);try{let c=drizzleOrm.and(drizzleOrm.inArray(u.thread_id,e),drizzleOrm.like(u.metadata,'%"kind":"workflow_card"%')),f=l.db.select({id:u.id,thread_id:u.thread_id,metadata:u.metadata,result:u.result,started_at:u.started_at}).from(u).where(i?drizzleOrm.and(c,i):c).all();for(let w of f)a(w.thread_id,w);let g=drizzleOrm.and(drizzleOrm.isNull(u.thread_id),drizzleOrm.like(u.metadata,'%"kind":"workflow_card"%')),m=l.db.select({id:u.id,command:u.command,metadata:u.metadata,result:u.result,started_at:u.started_at}).from(u).where(i?drizzleOrm.and(g,i):g).all();for(let w of m){let k=this.extractThreadIdFromCommand(w.command);!k||!o.has(k)||a(k,w);}}catch(c){throw new T("DB_ERROR","Failed to batch fetch workflow cards",c)}finally{l.close();}}return r}findAllTasks(e){if(!this.dbExists())return {rows:[],total:0};let t=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(u.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(drizzleOrm.inArray(u.agent_id,o));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&r.push(drizzleOrm.inArray(u.status,s));let i=e.q??e.search;i&&r.push(drizzleOrm.like(u.prompt,`%${i}%`)),e.from&&r.push(drizzleOrm.gte(u.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(u.started_at,e.to));let a=r.length>0?drizzleOrm.and(...r):void 0,d=t.db.select({count:drizzleOrm.sql`count(*)`}).from(u).where(a).get(),l=(e.sortDir??"DESC")==="ASC"?drizzleOrm.asc(u.started_at):drizzleOrm.desc(u.started_at);return {rows:t.db.select().from(u).where(a).orderBy(l).limit(e.limit).offset(e.offset).all(),total:d?.count??0}}catch(r){throw new T("DB_ERROR","Failed to find all tasks",r)}finally{t.close();}}getAgentUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?drizzleOrm.sql`
83
78
  SELECT
84
79
  t.agent_id,
85
80
  t.workspace_id,
@@ -87,11 +82,11 @@ ${r.join(`
87
82
  COALESCE(SUM(
88
83
  COALESCE(t.input_tokens, 0)
89
84
  + CASE
90
- WHEN t.started_at >= ${Fe}
85
+ WHEN t.started_at >= ${je}
91
86
  AND (
92
87
  t.crewx_version IS NULL
93
88
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
94
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${qe}) AS INTEGER) < ${Be})
89
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Fe}) AS INTEGER) < ${He})
95
90
  )
96
91
  THEN COALESCE(t.cached_input_tokens, 0)
97
92
  ELSE 0
@@ -110,11 +105,11 @@ ${r.join(`
110
105
  COALESCE(SUM(
111
106
  COALESCE(t.input_tokens, 0)
112
107
  + CASE
113
- WHEN t.started_at >= ${Fe}
108
+ WHEN t.started_at >= ${je}
114
109
  AND (
115
110
  t.crewx_version IS NULL
116
111
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
117
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${qe}) AS INTEGER) < ${Be})
112
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Fe}) AS INTEGER) < ${He})
118
113
  )
119
114
  THEN COALESCE(t.cached_input_tokens, 0)
120
115
  ELSE 0
@@ -130,11 +125,11 @@ ${r.join(`
130
125
  COALESCE(SUM(
131
126
  COALESCE(t.input_tokens, 0)
132
127
  + CASE
133
- WHEN t.started_at >= ${Fe}
128
+ WHEN t.started_at >= ${je}
134
129
  AND (
135
130
  t.crewx_version IS NULL
136
131
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
137
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${qe}) AS INTEGER) < ${Be})
132
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Fe}) AS INTEGER) < ${He})
138
133
  )
139
134
  THEN COALESCE(t.cached_input_tokens, 0)
140
135
  ELSE 0
@@ -152,11 +147,11 @@ ${r.join(`
152
147
  COALESCE(SUM(
153
148
  COALESCE(t.input_tokens, 0)
154
149
  + CASE
155
- WHEN t.started_at >= ${Fe}
150
+ WHEN t.started_at >= ${je}
156
151
  AND (
157
152
  t.crewx_version IS NULL
158
153
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
159
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${qe}) AS INTEGER) < ${Be})
154
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Fe}) AS INTEGER) < ${He})
160
155
  )
161
156
  THEN COALESCE(t.cached_input_tokens, 0)
162
157
  ELSE 0
@@ -164,18 +159,18 @@ ${r.join(`
164
159
  ), 0)
165
160
  + COALESCE(SUM(t.output_tokens), 0)
166
161
  ) DESC
167
- `).map(i=>({agentId:i.agent_id,workspaceId:i.workspace_id??null,totalTasks:i.total_tasks,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd,totalTokens:i.input_tokens+i.output_tokens}))}catch(s){throw new M("DB_ERROR","Failed to get agent usage",s)}finally{o.close();}}getAgentUsageTrendRaw(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?drizzleOrm.sql`
162
+ `).map(i=>({agentId:i.agent_id,workspaceId:i.workspace_id??null,totalTasks:i.total_tasks,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd,totalTokens:i.input_tokens+i.output_tokens}))}catch(s){throw new T("DB_ERROR","Failed to get agent usage",s)}finally{o.close();}}getAgentUsageTrendRaw(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?drizzleOrm.sql`
168
163
  SELECT
169
164
  date(t.started_at) AS date,
170
165
  t.agent_id,
171
166
  COALESCE(SUM(
172
167
  COALESCE(t.input_tokens, 0)
173
168
  + CASE
174
- WHEN t.started_at >= ${Fe}
169
+ WHEN t.started_at >= ${je}
175
170
  AND (
176
171
  t.crewx_version IS NULL
177
172
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
178
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${qe}) AS INTEGER) < ${Be})
173
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Fe}) AS INTEGER) < ${He})
179
174
  )
180
175
  THEN COALESCE(t.cached_input_tokens, 0)
181
176
  ELSE 0
@@ -198,11 +193,11 @@ ${r.join(`
198
193
  COALESCE(SUM(
199
194
  COALESCE(t.input_tokens, 0)
200
195
  + CASE
201
- WHEN t.started_at >= ${Fe}
196
+ WHEN t.started_at >= ${je}
202
197
  AND (
203
198
  t.crewx_version IS NULL
204
199
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
205
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${qe}) AS INTEGER) < ${Be})
200
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Fe}) AS INTEGER) < ${He})
206
201
  )
207
202
  THEN COALESCE(t.cached_input_tokens, 0)
208
203
  ELSE 0
@@ -217,54 +212,102 @@ ${r.join(`
217
212
  AND t.started_at < ${t}
218
213
  GROUP BY date(t.started_at), t.agent_id
219
214
  ORDER BY date(t.started_at) ASC
220
- `).map(i=>({date:i.date,agentId:i.agent_id,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd,totalTokens:i.input_tokens+i.output_tokens}))}catch(s){throw new M("DB_ERROR","Failed to get agent usage trend",s)}finally{o.close();}}findTaskForStop(e,t){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(m).where(drizzleOrm.and(drizzleOrm.eq(m.id,e),drizzleOrm.eq(m.workspace_id,t))).limit(1).get()??void 0}catch(o){throw new M("DB_ERROR","Failed to find task for stop",o)}finally{r.close();}}markTaskFailed(e,t,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=new Date().toISOString(),i=r?drizzleOrm.and(drizzleOrm.eq(m.id,e),drizzleOrm.eq(m.status,"running"),drizzleOrm.eq(m.workspace_id,r)):drizzleOrm.and(drizzleOrm.eq(m.id,e),drizzleOrm.eq(m.status,"running"));o.db.update(m).set({status:"failed",error:t,completed_at:s}).where(i).run();}catch(s){throw s instanceof M?s:new M("DB_ERROR","Failed to mark task failed",s)}finally{o.close();}}findTasksByPromptHint(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!so.existsSync(i))continue;let a=ke(i);try{let d=t?drizzleOrm.and(drizzleOrm.like(m.prompt,`%${e}%`),drizzleOrm.eq(m.workspace_id,t)):drizzleOrm.like(m.prompt,`%${e}%`),l=a.db.select().from(m).where(d).orderBy(drizzleOrm.asc(m.started_at)).all();for(let u of l)o.has(u.id)||(o.add(u.id),s.push(u));}catch(d){throw new M("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{a.close();}}return s}getProviderUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=drizzleOrm.sql`
215
+ `).map(i=>({date:i.date,agentId:i.agent_id,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd,totalTokens:i.input_tokens+i.output_tokens}))}catch(s){throw new T("DB_ERROR","Failed to get agent usage trend",s)}finally{o.close();}}findTaskForStop(e,t){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(u).where(drizzleOrm.and(drizzleOrm.eq(u.id,e),drizzleOrm.eq(u.workspace_id,t))).limit(1).get()??void 0}catch(o){throw new T("DB_ERROR","Failed to find task for stop",o)}finally{r.close();}}findLatestTaskByMetadata(e){if(!this.dbExists())return null;let t=this.openHandle(false);try{return t.db.select({id:u.id,thread_id:u.thread_id,status:u.status,result:u.result,error:u.error,started_at:u.started_at,completed_at:u.completed_at}).from(u).where(drizzleOrm.and(drizzleOrm.eq(u.agent_id,e.agentId),drizzleOrm.eq(u.workspace_id,e.workspaceId),drizzleOrm.sql`${u.metadata} IS NOT NULL AND json_valid(${u.metadata}) AND json_extract(${u.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(drizzleOrm.desc(u.started_at)).limit(1).get()??null}catch(r){throw new T("DB_ERROR","Failed to find latest task by metadata",r)}finally{t.close();}}markTaskFailed(e,t,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=new Date().toISOString(),i=r?drizzleOrm.and(drizzleOrm.eq(u.id,e),drizzleOrm.eq(u.status,"running"),drizzleOrm.eq(u.workspace_id,r)):drizzleOrm.and(drizzleOrm.eq(u.id,e),drizzleOrm.eq(u.status,"running"));o.db.update(u).set({status:"failed",error:t,completed_at:s}).where(i).run();}catch(s){throw s instanceof T?s:new T("DB_ERROR","Failed to mark task failed",s)}finally{o.close();}}findTasksByPromptHint(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!rs.existsSync(i))continue;let a=ve(i);try{let d=t?drizzleOrm.and(drizzleOrm.like(u.prompt,`%${e}%`),drizzleOrm.eq(u.workspace_id,t)):drizzleOrm.like(u.prompt,`%${e}%`),l=a.db.select().from(u).where(d).orderBy(drizzleOrm.asc(u.started_at)).all();for(let c of l)o.has(c.id)||(o.add(c.id),s.push(c));}catch(d){throw new T("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{a.close();}}return s}getProviderUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=drizzleOrm.sql`
221
216
  CASE
222
- WHEN ${m.model} LIKE 'claude-%' OR ${m.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
223
- WHEN ${m.model} LIKE 'gpt-%' OR ${m.model} LIKE 'codex-%' THEN 'codex'
224
- WHEN ${m.model} LIKE 'gemini-%' THEN 'gemini'
225
- WHEN ${m.model} LIKE 'zai-%' OR ${m.model} LIKE 'openrouter/z-ai/%' THEN 'opencode'
226
- WHEN ${m.model} LIKE 'minimax/%' THEN 'minimax'
227
- WHEN ${m.model} LIKE 'qwen%' THEN 'qwen'
217
+ WHEN ${u.model} LIKE 'claude-%' OR ${u.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
218
+ WHEN ${u.model} LIKE 'gpt-%' OR ${u.model} LIKE 'codex-%' THEN 'codex'
219
+ WHEN ${u.model} LIKE 'gemini-%' THEN 'gemini'
220
+ WHEN ${u.model} LIKE 'zai-%' OR ${u.model} LIKE 'openrouter/z-ai/%' THEN 'opencode'
221
+ WHEN ${u.model} LIKE 'minimax/%' THEN 'minimax'
222
+ WHEN ${u.model} LIKE 'qwen%' THEN 'qwen'
228
223
  ELSE 'unknown'
229
224
  END
230
225
  `,i=drizzleOrm.sql`
231
- COALESCE(${m.input_tokens}, 0)
226
+ COALESCE(${u.input_tokens}, 0)
232
227
  + CASE
233
- WHEN ${m.started_at} >= ${Fe}
228
+ WHEN ${u.started_at} >= ${je}
234
229
  AND (
235
- ${m.crewx_version} IS NULL
236
- OR (${m.crewx_version} LIKE '0.8.%' AND ${m.crewx_version} NOT LIKE '0.8.9%')
237
- OR (${m.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${m.crewx_version}, ${qe}) AS INTEGER) < ${Be})
230
+ ${u.crewx_version} IS NULL
231
+ OR (${u.crewx_version} LIKE '0.8.%' AND ${u.crewx_version} NOT LIKE '0.8.9%')
232
+ OR (${u.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${u.crewx_version}, ${Fe}) AS INTEGER) < ${He})
238
233
  )
239
- THEN COALESCE(${m.cached_input_tokens}, 0)
234
+ THEN COALESCE(${u.cached_input_tokens}, 0)
240
235
  ELSE 0
241
236
  END
242
- `,a=r?drizzleOrm.sql`WHERE ${m.status} IN ('completed', 'success') AND ${m.started_at} >= ${e} AND ${m.started_at} < ${t} AND ${m.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${m.status} IN ('completed', 'success') AND ${m.started_at} >= ${e} AND ${m.started_at} < ${t}`;return o.db.all(drizzleOrm.sql`
237
+ `,a=r?drizzleOrm.sql`WHERE ${u.status} IN ('completed', 'success') AND ${u.started_at} >= ${e} AND ${u.started_at} < ${t} AND ${u.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${u.status} IN ('completed', 'success') AND ${u.started_at} >= ${e} AND ${u.started_at} < ${t}`;return o.db.all(drizzleOrm.sql`
243
238
  SELECT
244
239
  ${s} AS provider,
245
240
  COUNT(*) AS total_tasks,
246
241
  COALESCE(SUM(${i}), 0) AS input_tokens,
247
- COALESCE(SUM(${m.output_tokens}), 0) AS output_tokens,
248
- COALESCE(SUM(${m.cached_input_tokens}), 0) AS cached_input_tokens,
249
- COALESCE(SUM(${m.cost_usd}), 0) AS cost_usd,
250
- COALESCE(SUM(${m.duration_ms}), 0) AS active_duration_ms,
251
- MAX(${m.completed_at}) AS last_active_at
252
- FROM ${m}
242
+ COALESCE(SUM(${u.output_tokens}), 0) AS output_tokens,
243
+ COALESCE(SUM(${u.cached_input_tokens}), 0) AS cached_input_tokens,
244
+ COALESCE(SUM(${u.cost_usd}), 0) AS cost_usd,
245
+ COALESCE(SUM(${u.duration_ms}), 0) AS active_duration_ms,
246
+ MAX(${u.completed_at}) AS last_active_at
247
+ FROM ${u}
253
248
  ${a}
254
249
  GROUP BY provider
255
- ORDER BY (COALESCE(SUM(${i}), 0) + COALESCE(SUM(${m.output_tokens}), 0)) DESC
256
- `).map(l=>({provider:l.provider,totalTasks:l.total_tasks,inputTokens:l.input_tokens,outputTokens:l.output_tokens,cachedInputTokens:l.cached_input_tokens,costUsd:l.cost_usd,totalTokens:l.input_tokens+l.output_tokens,activeDurationMs:l.active_duration_ms??0,lastActiveAt:l.last_active_at??null}))}catch(s){throw new M("DB_ERROR","Failed to get provider usage",s)}finally{o.close();}}};var ea=new Set(["Read","Grep","Find","Glob"]),ta=["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"],ra=[/\bgit\s+(commit|push|pull|merge|rebase|reset|checkout|switch|add|rm)\b/,/\bnpm\s+(install|ci|publish|run\s+(test|lint|build))\b/,/\bnpx\s+tsc\b/,/\bpnpm\s+(install|run)\b/,/\bvitest\b/,/\bjest\b/];function na(n){let e=n.toLowerCase();return e==="bash"||e==="terminal"?"Bash":e==="read"||e==="view"?"Read":e==="edit"||e==="apply_patch"?"Edit":e==="write"?"Write":e==="grep"||e==="rg"?"Grep":e==="glob"||e==="find"?"Find":n}function oa(n,e){if(ea.has(n))return true;if(n!=="Bash"||!e)return false;let t=e.split(`
257
- `)[0].trimStart();return ra.some(r=>r.test(t))?false:ta.some(r=>t.startsWith(r))}function Xt(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function sa(n,e,t){if(n!=="Read"||!e)return "ok";let o=e.split(`
258
- `).find(s=>s.trim()&&!s.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let s=so__namespace.statSync(o);if(t){let i=Date.parse(t);if(!Number.isNaN(i)&&s.mtimeMs>i)return "stale"}return "ok"}catch{return "unknown"}}function ia(n){let e=new Set;for(let t of n)try{let r=JSON.parse(t);r.type&&e.add(r.type);}catch{}return e.has("turn.started")||e.has("thread.started")?"codex":e.has("assistant.message_delta")?"copilot":e.has("step_start")&&e.has("step_finish")?"opencode":e.has("system")&&e.has("result")?"claude":e.has("init")&&e.has("message")?"gemini":e.has("result")&&e.has("assistant")?"claude":null}function aa(n){if(!Array.isArray(n))return [];let e=n,t=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),r=ia(t),o=[];for(let a of e)a.level==="info"&&a.message?o.push(...le(a.message,a.timestamp)):a.level==="stdout"&&a.message&&r&&o.push(...at("",a.message,r));let s=new Map,i=[];for(let a of o)if(a.type==="tool_use"){let d={tool:na(a.toolName??""),input:a.toolInput??null,result:null,isError:false},l=a.toolUseId;if(l){if(s.has(l)){s.get(l).input=d.input;continue}s.set(l,d);}i.push(d);}else if(a.type==="tool_result"){if(a.toolUseId&&s.has(a.toolUseId)){let d=s.get(a.toolUseId);d.isError=a.isError===true,d.result=a.resultPreview??null;}else for(let d=i.length-1;d>=0;d--)if(i[d].result===null){i[d].isError=a.isError===true,i[d].result=a.resultPreview??null;break}}return i}function da(n,e){let t=aa(n),r=[];for(let o of t){let s=o.tool==="Bash"?o.input?.split(`
259
- `)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,i=oa(o.tool,o.input)&&!o.isError;r.push({tool:o.tool,cmd:s,result:o.result,status:sa(o.tool,o.input,e),reusable:i});}return r}function la(n,e,t){let r=["<activity_log>"];if(n.length===0&&e===0)r.push(" <!-- no activity found in previous tasks -->");else {r.push(" <!-- tool activity from previous tasks -->"),e>0&&r.push(` <!-- ${e} entries omitted (cap) -->`);for(let o of n){let s=`tool="${Xt(o.tool)}"`,i=o.cmd?` cmd="${Xt(o.cmd)}"`:"",a="";if(o.reusable&&(a=o.status==="stale"?' reused="stale"':' reused="ok"'),o.reusable&&o.status==="stale")r.push(` <entry ${s}${i}${a}>\u26A0\uFE0F changed since \u2014 re-read</entry>`);else if(o.result){r.push(` <entry ${s}${i}${a}>`);let d=t&&t>0?t:8e3,l=o.result;l.length>d?r.push(Xt(l.slice(0,d))+` \u2026 [truncated, ${d}/${l.length} chars shown]`):r.push(Xt(l)),r.push(" </entry>");}else r.push(` <entry ${s}${i}${a} />`);}}return r.push("</activity_log>"),r}function io(n){let{threadId:e,agentId:t,lookback:r,maxEntryChars:o,decayRate:s}=n;if(!r||!e||!t)return new Map;let i;try{i=new ht().findTasksByThread(e).filter(f=>!f.parent_task_id&&f.agent_id===t).sort((f,g)=>g.started_at>f.started_at?1:-1).slice(0,Math.min(r,5));}catch{return new Map}if(!i.length)return new Map;let a=[];for(let p of i){let f=[];try{let g=JSON.parse(p.logs??"[]");Array.isArray(g)&&(f=g);}catch{}a.push({taskId:p.id,entries:da(f,p.completed_at)});}let d=new Map,l=typeof s=="number"&&s>0&&s<=1?s:1,u=1e3;for(let p=0;p<a.length;p++){let{taskId:f,entries:g}=a[p];if(g.length===0)continue;let h=Math.max(Math.floor((o??8e3)*Math.pow(l,p)),u),x=Math.max(0,g.length-200),v=x>0?g.slice(x):g,w=la(v,x,h);d.set(f,w.join(`
260
- `));}return d}c();c();var ca={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")},ua={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 ao(n,e,t){n.tool("crewx_listAgents","List available CrewX agents exposed by this server",async()=>{let r=[];for(let o of t){let s=e.agents.get(o);s&&r.push({id:s.id,name:s.name??s.id,description:s.description??""});}return {content:[{type:"text",text:JSON.stringify(r,null,2)}]}}),n.tool("crewx_queryAgent","Query a CrewX agent with a read-only question",ca,async({agentId:r,query:o,context:s,thread:i})=>{if(!t.has(r))return {content:[{type:"text",text:`Agent '${r}' is not exposed by this server`}],isError:true};let a=await e.query(r,o,{context:s,threadId:i});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Query failed"}],isError:true}}),n.tool("crewx_executeAgent","Execute a task on a CrewX agent (may modify state)",ua,async({agentId:r,task:o,context:s,thread:i})=>{if(!t.has(r))return {content:[{type:"text",text:`Agent '${r}' is not exposed by this server`}],isError:true};let a=await e.execute(r,o,{context:s,threadId:i});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Execute failed"}],isError:true}});}c();function lo(n){return n.headers.get("Origin")?null:new Response(JSON.stringify({error:"Forbidden: Origin header required"}),{status:403,headers:{"Content-Type":"application/json"}})}async function co(n,e){return e?await e(n)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function ma(n,e){let t=new mcp_js.McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return ao(t,n,e),t}function jr(n,e){if(!e.agents||e.agents.length===0)throw new Error("crewx.handler() requires at least one agent in the agents option");let t=new Set(e.agents),r=new Map;return async o=>{let s=lo(o);if(s)return s;let i=await co(o,e.auth);if(i)return i;let a=o.headers.get("mcp-session-id");if(a&&r.has(a))return r.get(a).transport.handleRequest(o);let d=ma(n,t),l=new webStandardStreamableHttp_js.WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:u=>{r.set(u,{transport:l,server:d});},onsessionclosed:u=>{r.delete(u);},enableJsonResponse:true});return await d.connect(l),l.handleRequest(o)}}c();function po(n){let e=G__namespace.resolve(n);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(t,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function Hr(n){let e=po(n);return crypto$1.createHash("sha256").update(e).digest("hex")}function Fa(n){return n?n.settings?.template?.exec:void 0}function qa(){try{let n=new Uint8Array(8);return globalThis.crypto.getRandomValues(n),Array.from(n,e=>e.toString(16).padStart(2,"0")).join("")}catch{let{randomBytes:n}=J("crypto");return n(8).toString("hex")}}var tn=class n extends ft{_agents;_templateEngine;_documentLoader;_layoutLoader;_layoutRenderer;_config;_projectRoot;_workspaceId;_workspaceName;_plugins=[];_tools=new Map;_activeAdapters=new Map;_pendingThreads=new Map;_remoteFactory;_remoteTargets=new Map;constructor(e,t={},r,o,s){super(),this._agents=new Map(e.map(d=>[d.id,d])),this._config=r,this._projectRoot=s??(typeof process<"u"?process.cwd():"/");let i=s??(typeof process<"u"?process.env.CREWX_WORKSPACE??process.cwd():"/");this._workspaceId=Hr(i),this._workspaceName=G.basename(i);let a=Fa(r);this._templateEngine=new ct({execPolicy:t.execPolicy??a}),this._documentLoader=o??new Me,this._layoutLoader=new ut({templatesPath:Ve()}),this._layoutRenderer=new mt,this._remoteFactory=t.remoteFactory;}async resolveFileRemoteTarget(e){let t=this.getAgent(e),r=Array.isArray(t?.provider)?t?.provider[0]:t?.provider;if(!r?.startsWith("remote/"))return null;let o=r.slice(7),s=this.getRemoteProviderConfig(o);if(!s?.location?.startsWith("file://"))return null;let i=G.resolve(s.location.replace("file://","")),a=s.external_agent_id??e.replace(/^@/,""),d=this._remoteTargets.get(i);d||(d=(this._remoteFactory??(g=>n.loadYaml(g)))(i),this._remoteTargets.set(i,d),d.catch(()=>this._remoteTargets.delete(i)));let l=await d,u=l.getAgent("@"+a),p=Array.isArray(u?.provider)?u?.provider[0]:u?.provider;if(p?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${o}" \u2192 "${p}"`);return {target:l,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:t,dir:r}=ar(),o;try{o=so.readFileSync(t,"utf-8");}catch(i){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
261
- ${i.message}`)}let s=Pt(o);if(s.documents&&typeof s.documents=="object"){let i={};for(let[a,d]of Object.entries(s.documents))if(d&&typeof d=="object"){let l=d;typeof l.path=="string"&&!G.isAbsolute(l.path)?i[a]={...l,path:G.resolve(r,l.path)}:i[a]=l;}else i[a]=d;return {...s,documents:i}}return s}static mergeCrewxConfig(e,t){let r=new Map;for(let _ of e.agents??[])r.set(_.id,_);for(let _ of t.agents??[])r.has(_.id)&&console.warn(`[agent-loader] User agent "${_.id}" overrides built-in`),r.set(_.id,_);let o=Array.from(r.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,l=So(a.vars,d.vars),u=So(a.settings,d.settings),p;e.skills&&t.skills&&typeof e.skills=="object"&&typeof t.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(t.skills)?p={...e.skills,...t.skills}:p=t.skills??e.skills;let f=[...e.hooks??[],...t.hooks??[]],g=Ba(a.providers,d.providers),h={...e},x={...t};for(let _ of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete h[_],delete x[_];let w={...{...h,...x},agents:o,layouts:s,documents:i,skills:p};return f.length>0&&(w.hooks=f),l!==void 0&&(w.vars=l),u!==void 0&&(w.settings=u),g!==void 0&&(w.providers=g),w}static async loadYaml(e,t,r){let o=t?.includeBuiltIns!==false,s,i;if(o){let u=await n.loadBuiltInConfig(r);if(e!==void 0){let p=St(e);s=n.mergeCrewxConfig(u,p),i=G.dirname(e);}else s=u,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=St(e),i=G.dirname(e);}let a=new Me(r);await a.load(s.documents,i);let d=s.agents??[];return await Io(d,s,t),new n(d,t??{},s,a,i)}static async fromConfig(e,t,r,o){let s=t?.includeBuiltIns===true,i=e;if(s){let u=await n.loadBuiltInConfig(o);i=n.mergeCrewxConfig(u,e);}let a=new Me(o);await a.load(i.documents,r??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await Io(d,i,t),new n(d,t??{},i,a,r)}get agents(){return this._agents}get config(){return this._config}get plugins(){return this._plugins}get tools(){return this._tools}get workspaceId(){return this._workspaceId}get workspaceName(){return this._workspaceName}getAgent(e){let t=e.startsWith("@")?e.slice(1):e;return this._agents.get(t)}getRemoteProviderConfig(e){let t=this._config?.providers;return Array.isArray(t)?t.find(o=>o.type==="remote"&&o.id===e):void 0}computeTaskLogPath(e,t){let r=Tr(t);return G.join(this._projectRoot,".crewx","logs",`${r}_${e}.log`)}registerTool(e,t){this._tools.set(e,{name:e,...t});}async use(e){this._plugins.includes(e)||(await e.attach(this),this._plugins.push(e));}handler(e){return jr(this,e)}async registerChannelAdapter(e){let{adapter:t,instanceId:r,config:o}=e;if(this._activeAdapters.has(r))throw new Error(`Adapter instance already registered: ${r}`);let s=new Set(t.manifest.capabilities),i=e.store??br(r),a=e.defaultMode??"query",d=t.manifest.platform,l=e.agentRunner??{run:async(g,h,x)=>{let w=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${g}`,h,{threadId:x?.threadId,platform:d});return {output:w.ok?w.data:w.error?.message??""}}},u=e.onInbound??(async g=>{let h=g.routingHints?.agentId??e.defaultAgent;if(!h)return {accepted:false,reason:"no_agent"};let{output:x}=await l.run(h,g.text,{threadId:g.threadId});return {accepted:true,output:x}}),p=Sr({instanceId:r,config:o,capabilities:s,db:i,agentRunner:l,onInbound:u}),f={adapter:t,ctx:p,state:"starting"};this._activeAdapters.set(r,f),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await t.start(p),f.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(g){throw f.state="failed",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"failed",error:g instanceof Error?g:new Error(String(g)),timestamp:new Date}),this._activeAdapters.delete(r),g}}async unregisterChannelAdapter(e){let t=this._activeAdapters.get(e);if(t){t.state="stopping",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopping",timestamp:new Date});try{await t.adapter.stop(t.ctx),t.state="stopped",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopped",timestamp:new Date});}catch(r){t.state="failed",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"failed",error:r instanceof Error?r:new Error(String(r)),timestamp:new Date});}finally{this._activeAdapters.delete(e);}}}async stopAllAdapters(e={}){let t=e.timeoutMs??1e4,r=Array.from(this._activeAdapters.keys()),o=await Promise.allSettled(r.map(s=>Promise.race([this.unregisterChannelAdapter(s),new Promise((i,a)=>setTimeout(()=>a(new Error(`Adapter stop timeout: ${s}`)),t))])));for(let s=0;s<o.length;s++)o[s].status==="rejected"&&console.error(`[crewx] adapter stop error (${r[s]}): ${o[s].reason}`);}async close(){await this.stopAllAdapters({timeoutMs:1e4});let e=[...this._remoteTargets.values()];this._remoteTargets.clear(),await Promise.allSettled(e.map(async r=>{try{await(await r).close();}catch(o){console.error(`[crewx] remote target close error: ${o instanceof Error?o.message:String(o)}`);}}));let t=[...this._plugins].reverse();for(let r of t)try{await r.detach(this);}catch(o){console.error(`[crewx] plugin ${r.name} detach error: ${o instanceof Error?o.message:String(o)}`);}this._plugins.length=0;}filterAgents(e){let t=a=>a?a.split(",").map(d=>d.trim().toLowerCase()).filter(Boolean):void 0,r=t(e.role),o=t(e.team),s=t(e.provider),i=Array.from(this._agents.values());return r&&(i=i.filter(a=>a.role&&r.some(d=>ue(a.role.toLowerCase(),d)))),o&&(i=i.filter(a=>a.team&&o.some(d=>ue(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(l=>s.some(u=>ue(l.toLowerCase(),u))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new fe(t,Array.from(this._agents.keys()));return r.inline?.prompt??r.inline?.system_prompt??r.description??`You are an expert ${t}.`}async renderPrompt(e,t){let o={...await this._documentLoader.buildContext(),...t?.documents??{}},s={...t,documents:o};return this._templateEngine.render(e,s)}registerLayout(e,t){this._layoutLoader.registerLayout(e,t);}async renderAgentPromptFull(e,t){let r=e.startsWith("@")?e.slice(1):e,o=this._agents.get(r);if(!o)throw new fe(r,Array.from(this._agents.keys()));let s=this._resolveLayoutSpec(o,t?.layout),i=this._extractLayoutId(s),a=this._extractLayoutProps(o,s,t?.layout),d=this._layoutLoader.load(i,a),l=o.inline?.prompt??o.inline?.system_prompt??o.description??`You are an expert ${r}.`,u=await this._documentLoader.buildContext(),p=t?.env??(typeof process<"u"?process.env:{}),f=t?.vars?.security_key??qa(),g={...t?.vars??{},documents:u,env:p,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??""}},h=await this._templateEngine.render(l,g),x={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},v=o.provider,w=Array.isArray(v)?v:typeof v=="string"&&v.length>0?[v]:[],_=w.join(", ")||(typeof v=="string"?v:""),k=o.options,S=["goals","daily"],b={goals:false,daily:false},B;if(!Array.isArray(k)&&typeof k=="object"&&k!==null){let L=k;if("goals"in L){let ce=L.goals;typeof ce=="string"||Array.isArray(ce)?b.goals=ce:b.goals=!!ce;}"daily"in L&&(b.daily=!!L.daily);let V={};for(let[ce,tt]of Object.entries(L))S.includes(ce)||(V[ce]=tt);if(Object.keys(V).length>0){let ce=w.some(sr=>sr.startsWith("cli/")),tt={};for(let[sr,rt]of Object.entries(V)){let Ke={};if(Array.isArray(rt))ce&&(Ke.rawArgs=rt);else if(typeof rt=="object"&&rt!==null){let hn=rt;Object.keys(hn).length>0&&(Ke.named=hn);}(Ke.named||Ke.rawArgs&&Ke.rawArgs.length>0)&&(tt[sr]=Ke);}B=Object.keys(tt).length>0?tt:void 0;}}let q=Array.isArray(k)?k:void 0,A={};for(let[L,V]of Object.entries(u))A[L]={content:V.content??"",toc:V.toc,summary:V.summary,path:V.path};if(b.goals){let L=G.join(this._projectRoot,"docs","goal"),V=await Kn(L,void 0,b.goals);V&&(A.active_goals={content:V});}if(b.daily){let L=G.join(this._projectRoot,"docs","daily"),V=await Vn(L);V&&(A.today_daily={content:V});}let H=t?.vars?.user_input??void 0,j=this._config?.settings?.dreaming?.continuity,K=j?.reuseReadOnly!==false,F=typeof j?.lookback=="number"?j.lookback:5,R=typeof j?.maxEntryChars=="number"?j.maxEntryChars:8e3,I=typeof j?.decayRate=="number"?j.decayRate:.5,P=t?.threadId??"",E=o.id,$=K&&F>0&&P&&t?.messages&&t.messages.length>0?io({threadId:P,agentId:E,lookback:F,maxEntryChars:R,decayRate:I}):new Map,X=(t?.messages??[]).map(L=>{if(!L.isAssistant)return L;let V=L.metadata?.task_id;return !V||!$.has(V)?L:{...L,activity_log:$.get(V)}}),ee={user_input:H,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??"",provider:_,providerList:w,model:o.inline?.model,workingDirectory:o.working_directory??o.workingDirectory??".",inline:{...o.inline??{},prompt:h},specialties:o.specialties??[],capabilities:o.capabilities??[],remote:o.remote??null,optionsByMode:B,optionsArray:q},agentMetadata:{specialties:o.specialties??[],capabilities:o.capabilities??[],description:o.description??""},contextOptions:b,documents:A,skills:t?.skills??[],session:x,env:p,vars:{security_key:f,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:x.platform,mode:x.mode,thread_id:P,now:pt(new Date),has_activity_log:$.size>0,messages:X,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(L=>({name:L.name,description:L.description,parameters:L.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(L=>({name:L.name,description:L.description,parameters:L.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,ee)}_filterToolsByMode(e){return e?e.map(t=>this._tools.get(t)).filter(t=>t!==void 0):Array.from(this._tools.values())}_resolveLayoutSpec(e,t){if(t!==void 0)return t;let r=e.inline?.layout;if(r!==void 0)return r;let o=this._config?.layouts?.default;return typeof o=="string"&&o?o:"crewx/default"}_extractLayoutId(e){if(typeof e=="string")return e;if("id"in e)return e.id;let t=`crewx/__inline_${Date.now()}`;return this._layoutLoader.registerLayout(t,e.template),t}_extractLayoutProps(e,t,r){let o=e.inline?.layout,s=o&&typeof o=="object"&&"props"in o?o.props:void 0,i=r&&typeof r=="object"&&"id"in r?r.props:void 0;if(s||i)return {...s??{},...i??{}}}_getConversationProvider(){return this._plugins.find(t=>t.name==="conversation")?.conversationProvider}async _fetchHistoryMessages(e,t,r){if(r&&r.length>0)return r;if(!e)return;let o=this._getConversationProvider();if(o)try{let s=await o.fetchHistory(e,{currentTraceId:t});return s.messages.length===0?void 0:Or(s)}catch{return}}_resolveTimeout(e,t){let r=e==="query"?"CREWX_TIMEOUT_QUERY":"CREWX_TIMEOUT_EXECUTE";if(process.env[r]!=null&&process.env[r]!==""){let o=Nn();return e==="query"?o.queryMs:o.executeMs}if(t?.meta?.defaultTimeoutMs){let o=e==="query"?t.meta.defaultTimeoutMs.query:t.meta.defaultTimeoutMs.execute;if(o!==void 0)return o}return 8*36e5}_lookupCliAdapter(e){if(e.startsWith("cli/"))return exports.BUILTIN_ADAPTERS[e.slice(4)]}_resolveEffectiveCwd(e,t){return t?.cwd??(e.working_directory?G.resolve(this._projectRoot,e.working_directory):this._projectRoot)}_buildFileRemoteOptions(e,t){let r={path:this._projectRoot,id:this._workspaceId,name:this._workspaceName,agentRef:e};return {...t,cwd:void 0,metadata:{...t?.metadata??{},crewx:{...t?.metadata?.crewx??{},callerWorkspace:r}},vars:{...t?.vars??{},crewx_caller_workspace_path:r.path,crewx_caller_workspace_id:r.id,crewx_caller_workspace_name:r.name}}}emitToolEvents(e,t,r,o,s,i,a){try{let l=exports.BUILTIN_ADAPTERS[r]?.parseEvent?.(o)??at(new Date().toISOString(),o);for(let u of l)u.type==="tool_use"&&u.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:u.toolName,rawName:u.toolName,input:u.toolInput?this.tryParseJson(u.toolInput):void 0,toolUseId:u.toolUseId}}),u.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:u.toolName??"unknown",rawName:u.toolName??"unknown",toolUseId:u.toolUseId,result:u.resultPreview,isError:u.isError}});}catch{}}emitTaskLogEntries(e,t,r,o,s,i,a){try{for(let d of a)d.type==="tool_use"&&d.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:r,threadId:o,sessionId:s,provider:i,tool:{name:d.toolName,rawName:d.toolName,input:d.toolInput?this.tryParseJson(d.toolInput):void 0,toolUseId:d.toolUseId}}),d.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:r,threadId:o,sessionId:s,provider:i,tool:{name:d.toolName??"unknown",rawName:d.toolName??"unknown",toolUseId:d.toolUseId,result:d.resultPreview,isError:d.isError}});}catch{}}tryParseJson(e){try{return JSON.parse(e)}catch{return e}}async query(e,t,r){let o=await this.resolveFileRemoteTarget(e);if(o)return o.target.query(o.agentRef,t,this._buildFileRemoteOptions(e,r));let s=yt.getStore()??Ir(r?.trace),i=r?.taskId??De("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return yt.run(d,async()=>{let l=Date.now(),u=new Date,p;try{p=Ot(e,Array.from(this._agents.values()));}catch(R){if(R instanceof fe){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let I=Date.now()-l,P={code:"AGENT_NOT_FOUND",message:R.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:I,error:P,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:P,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:I,taskId:i}}}throw R}d.callerAgentId=p.id;let f=Array.isArray(p.provider)?p.provider[0]??"cli/claude":p.provider,g=r?.provider??f,h=r?.model??p.inline?.model;h&&h.includes("{{")&&(h=await this._templateEngine.render(h,{...r?.vars??{}}));let x;try{x=we(g);}catch(R){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let I=Date.now()-l,P={code:"PROVIDER_ERROR",message:R.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:I,error:P,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:P,meta:{agentId:p.id,provider:g,model:h,durationMs:I,taskId:i}}}let v=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),w;try{w=await this.renderAgentPromptFull(e,{session:{mode:"query",platform:r?.platform},vars:{user_input:t,...r?.vars??{}},messages:v,threadId:r?.threadId});}catch(R){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${R instanceof Error?R.message:String(R)}`);}let _,k,S,b=h,B=false,q=R=>{B||(B=true,this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",pid:R,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:b,provider:g,codingAgentCommand:_,renderedPrompt:w,metadata:{...r?.metadata??{},provider:g},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},A=p.options,H=Array.isArray(A?.query?.tools)?A.query.tools:void 0,z=this._tools.size>0?this._filterToolsByMode(H):[],W=(()=>{let R=A?.query;if(!R||Array.isArray(R))return;let{tools:I,effort:P,mode:E,...$}=R,X=Object.entries($).filter(([,ee])=>ee!=null);if(X.length!==0)return Object.fromEntries(X.map(([ee,L])=>[ee,String(L)]))})(),j=p.inline?.max_steps;g.startsWith("api/")&&q();let K=false,F=0;try{let R=await x.query(t,{model:h,effort:A?.query?.effort,mode:A?.query?.mode,context:r?.context,systemPrompt:w??p.inline?.system_prompt??p.inline?.prompt??p.description??`You are ${p.id}.`,additionalArgs:Array.isArray(A?.query)?A.query:void 0,resumeSessionId:r?.resumeSessionId,tools:z.length>0?z:void 0,maxSteps:j,configOptions:W,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(g)),cwd:this._resolveEffectiveCwd(p,r),env:{CREWX_AGENT_ID:p.id,CREWX_AGENT_ROLE:p.role??"",CREWX_AGENT_TEAM:p.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:g,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,u)},onPid:E=>q(E),onOutput:(E,$)=>{let X=exports.BUILTIN_ADAPTERS[g];$==="stdout"&&X?.suppressOutputLine?.(E)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:E,level:$}),$==="stdout"&&this.emitToolEvents(i,e,g,E,p.id,r?.threadId??"","");},onTaskLog:E=>{this.emitTaskLogEntries(i,e,p.id,r?.threadId??"","",g,E);for(let $ of E)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify($),level:"info"});},onCommand:E=>{_=E;},onUsage:E=>{k=E;},onExitCode:E=>{S=E;},onModel:E=>{b||(b=E);}});F=kr(k?.costUsd,k?.inputTokens,k?.outputTokens,k?.cachedInputTokens,b),q();let I=Date.now()-l,P={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:R,durationMs:I,exitCode:S,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:F,model:b,metadata:Object.keys(P).length>0?P:void 0}),K=!0,{ok:!0,data:R,meta:{agentId:p.id,provider:g,model:h,durationMs:I,taskId:i}}}catch(R){if(R instanceof exports.ClientToolCallRequiredError){let E=De("thd");return this._pendingThreads.set(E,{agentRef:p.id,providerStr:g,continuationState:R.continuationState,toolCall:R.toolCall,traceId:i,startMs:l,model:h}),K=true,{ok:true,status:"requires_action",data:"",toolCall:R.toolCall,threadId:E,meta:{agentId:p.id,provider:g,model:h,durationMs:Date.now()-l,taskId:i}}}q();let I=Date.now()-l,P={code:"QUERY_FAILED",message:R.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:I,error:P,exitCode:S,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:F,model:b,metadata:r?.metadata?{...r.metadata}:void 0}),K=true,{ok:false,data:"",error:P,meta:{agentId:p.id,provider:g,model:h,durationMs:I,taskId:i}}}finally{K||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:S??-1,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:F,model:b});}})}async continueQuery(e,t){let r=this._pendingThreads.get(e);if(!r)return {ok:false,data:"",error:{code:"THREAD_NOT_FOUND",message:`No pending thread: ${e}`},meta:{agentId:"",provider:"",durationMs:0}};this._pendingThreads.delete(e);let o=we(r.providerStr);if(!o.continueWithToolResults)return {ok:false,data:"",error:{code:"UNSUPPORTED",message:"Provider does not support client tool continuation"},meta:{agentId:r.agentRef,provider:r.providerStr,durationMs:0}};let s=t.map(i=>({...i,toolName:r.toolCall.toolCallId===i.toolCallId?r.toolCall.toolName:i.toolCallId}));try{let i=await o.continueWithToolResults(r.continuationState,s),a=Date.now()-r.startMs;return this.emit("task:end",{traceId:r.traceId,timestamp:new Date,agentRef:r.agentRef,mode:"query",result:i,durationMs:a}),{ok:!0,status:"complete",data:i,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}catch(i){if(i instanceof exports.ClientToolCallRequiredError)return this._pendingThreads.set(e,{...r,continuationState:i.continuationState,toolCall:i.toolCall}),{ok:true,status:"requires_action",data:"",toolCall:i.toolCall,threadId:e,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:Date.now()-r.startMs}};let a=Date.now()-r.startMs;return {ok:false,data:"",error:{code:"CONTINUE_FAILED",message:i.message},meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}}async execute(e,t,r){let o=await this.resolveFileRemoteTarget(e);if(o)return o.target.execute(o.agentRef,t,this._buildFileRemoteOptions(e,r));let s=yt.getStore()??Ir(r?.trace),i=r?.taskId??De("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return yt.run(d,async()=>{let l=Date.now(),u=new Date,p;try{p=Ot(e,Array.from(this._agents.values()));}catch(R){if(R instanceof fe){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let I=Date.now()-l,P={code:"AGENT_NOT_FOUND",message:R.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:I,error:P,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:P,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:I,taskId:i}}}throw R}d.callerAgentId=p.id;let f=Array.isArray(p.provider)?p.provider[0]??"cli/claude":p.provider,g=r?.provider??f,h=r?.model??p.inline?.model;h&&h.includes("{{")&&(h=await this._templateEngine.render(h,{...r?.vars??{}}));let x;try{x=we(g);}catch(R){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let I=Date.now()-l,P={code:"PROVIDER_ERROR",message:R.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:I,error:P,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:P,meta:{agentId:p.id,provider:g,model:h,durationMs:I,taskId:i}}}let v=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),w;try{w=await this.renderAgentPromptFull(e,{session:{mode:"execute",platform:r?.platform},vars:{user_input:t,...r?.vars??{}},messages:v,threadId:r?.threadId});}catch(R){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${R instanceof Error?R.message:String(R)}`);}let _,k,S,b=h,B=false,q=R=>{B||(B=true,this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",pid:R,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:b,provider:g,codingAgentCommand:_,renderedPrompt:w,metadata:{...r?.metadata??{},provider:g},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},A=p.options,H=Array.isArray(A?.execute?.tools)?A.execute.tools:void 0,z=this._tools.size>0?this._filterToolsByMode(H):[],W=(()=>{let R=A?.execute;if(!R||Array.isArray(R))return;let{tools:I,effort:P,mode:E,...$}=R,X=Object.entries($).filter(([,ee])=>ee!=null);if(X.length!==0)return Object.fromEntries(X.map(([ee,L])=>[ee,String(L)]))})(),j=p.inline?.max_steps;g.startsWith("api/")&&q();let K=false,F=0;try{let R=await x.execute(t,{model:h,effort:A?.execute?.effort,mode:A?.execute?.mode,context:r?.context,systemPrompt:w??p.inline?.system_prompt??p.inline?.prompt??p.description??`You are ${p.id}.`,additionalArgs:Array.isArray(A?.execute)?A.execute:void 0,resumeSessionId:r?.resumeSessionId,tools:z.length>0?z:void 0,maxSteps:j,configOptions:W,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(g)),cwd:this._resolveEffectiveCwd(p,r),env:{CREWX_AGENT_ID:p.id,CREWX_AGENT_ROLE:p.role??"",CREWX_AGENT_TEAM:p.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:g,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,u)},onPid:E=>q(E),onOutput:(E,$)=>{let X=exports.BUILTIN_ADAPTERS[g];$==="stdout"&&X?.suppressOutputLine?.(E)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:E,level:$}),$==="stdout"&&this.emitToolEvents(i,e,g,E,p.id,r?.threadId??"","");},onTaskLog:E=>{this.emitTaskLogEntries(i,e,p.id,r?.threadId??"","",g,E);for(let $ of E)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify($),level:"info"});},onCommand:E=>{_=E;},onUsage:E=>{k=E;},onExitCode:E=>{S=E;},onModel:E=>{b||(b=E);}});F=kr(k?.costUsd,k?.inputTokens,k?.outputTokens,k?.cachedInputTokens,b),q();let I=Date.now()-l,P={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:R,durationMs:I,exitCode:S,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:F,model:b,metadata:Object.keys(P).length>0?P:void 0}),K=!0,{ok:!0,data:R,meta:{agentId:p.id,provider:g,model:h,durationMs:I,taskId:i}}}catch(R){q();let I=Date.now()-l,P={code:"EXECUTE_FAILED",message:R.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:I,error:P,exitCode:S,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:F,model:b,metadata:r?.metadata?{...r.metadata}:void 0}),K=true,{ok:false,data:"",error:P,meta:{agentId:p.id,provider:g,model:h,durationMs:I,taskId:i}}}finally{K||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:S??-1,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:F,model:b});}})}};function So(n,e){let t=rn(n)?n:void 0,r=rn(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function rn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Ba(n,e){let t=Array.isArray(n)?n:void 0,r=Array.isArray(e)?e:void 0;if(!t&&!r)return;let o=a=>{if(!rn(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let l=a.name;if(typeof l=="string")return `name:${l}`},s=new Set;for(let a of r??[]){let d=o(a);d&&s.add(d);}let i=[];for(let a of t??[]){let d=o(a);d&&s.has(d)||i.push(a);}for(let a of r??[])i.push(a);return i}async function Io(n,e,t){if(n.some(o=>(Array.isArray(o.provider)?o.provider:[o.provider]).some(i=>i.startsWith("api/")))){let{registerApiProviders:o}=await Promise.resolve().then(()=>(qr(),yo));o(t?.api);}await za(n,e),Ka(n,e),Wa(n);}function Wa(n){if(!n.some(r=>(Array.isArray(r.provider)?r.provider:[r.provider]).some(s=>s.startsWith("acp/"))))return;let{registerAcpProviders:t}=(Gr(),wn(vo));t();}async function za(n,e){if(!n.some(i=>(Array.isArray(i.provider)?i.provider:[i.provider]).some(d=>d.startsWith("remote/"))))return;let r=e.providers;if(!Array.isArray(r))return;let{createRemoteProviderFactory:o}=await Promise.resolve().then(()=>(Yr(),Ro)),s=new Map;for(let i of r)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&he("remote",o(s,we));}function Ka(n,e){if(!n.some(i=>(Array.isArray(i.provider)?i.provider:[i.provider]).some(d=>d.startsWith("plugin/"))))return;let r=e.providers;if(!Array.isArray(r))return;let{createPluginProviderFactory:o}=(Qr(),wn(bo)),s=new Map;for(let i of r)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&he("plugin",o(s));}c();var nn=class{detach(e){}};c();var Va="crewx:fs:",on=class{prefix;store;constructor(e){this.prefix=e?.prefix??Va,this.store=e?.storage??new Map;}async readFile(e){let t=this.toKey(e),r=this.store.get(t);if(r===void 0)throw new Error(`BrowserFsAdapter: file not found: ${e}`);return r}async exists(e){return this.store.has(this.toKey(e))}resolvePath(...e){let t=e.map(i=>i.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),r=t.split("/"),o=[];for(let i of r)i==="."||i===""||(i===".."?o.pop():o.push(i));let s=o.join("/");return t.startsWith("/")?`/${s}`:s}isAbsolute(e){return e.startsWith("/")}setItem(e,t){this.store.set(this.toKey(e),t);}removeItem(e){this.store.delete(this.toKey(e));}keys(){return Array.from(this.store.keys()).filter(e=>e.startsWith(this.prefix)).map(e=>e.slice(this.prefix.length))}async readdir(e){let t=e.replace(/\\/g,"/").replace(/\/$/,""),r=this.toKey(t+"/"),o=[];for(let s of this.store.keys())if(s.startsWith(r)){let a=s.slice(r.length).split("/")[0];a&&!o.includes(a)&&o.push(a);}return o}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};c();function Ga(n,e){let t=n.skills?.include;if(t===void 0)return [...e];if(t.length===0)return [];let r=new Set(t);return e.filter(o=>r.has(o))}c();var sn=["codex","claude","opencode","antigravity","copilot"];function Xa(n){let e=n.indexOf("/");return e===-1?n:n.slice(e+1)}function an(n){let e=Xa(n),t=sn.indexOf(e);return t===-1?sn.length:t}function Rt(n,e){return an(n)-an(e)}pe();Fr();qr();c();Br();Ce();c();Jt();rr();Qt();var Ja="model",Ya="mode",Qa="thought_level";function dn(n){if(n.length===0)return [];if(n[0]?.group!=null){let e=[];for(let t of n)for(let r of t.options??[])e.push(r);return e}return n}function Za(n,e){let t=new Map;for(let r of [...n,...e]){let o=t.get(r.id);(!o||!o.name&&r.name)&&t.set(r.id,r);}return Array.from(t.values())}function ed(n,e){let t=new Map;for(let r of [...n,...e])t.has(r.id)||t.set(r.id,r);return Array.from(t.values())}function td(n,e,t,r){let o=t.agentInfo?.name,s=e??o??n,i=r.configOptions??[],d=(r.modes?.availableModes??[]).map(w=>({id:w.id,name:w.name,...w.description!=null?{description:w.description}:{}})),l=[];for(let w of i)if(w.category?.trim().toLowerCase()===Ya&&w.options!=null)for(let _ of dn(w.options))_.value!=null&&l.push({id:_.value,name:_.name??_.value});let u=ed(d,l),p=[];for(let w of i)if(w.category?.trim().toLowerCase()===Qa&&w.type==="select")for(let _ of dn(w.options??[]))_.value!=null&&p.push(_.value);if(n==="claude"){let w=ko.map(k=>({id:k.id,name:k.name})),_=Oo(t);return Mo(n,{models:w,modes:u,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${n}`,name:s,modes:u,effort:p,models:w,capabilities:_}}let g=(r.models?.availableModels??[]).map(w=>({id:w.modelId})),h=[];for(let w of i)if(w.category?.trim().toLowerCase()===Ja&&w.options!=null)for(let _ of dn(w.options))_.value!=null&&h.push({id:_.value,..._.name!=null?{name:_.name}:{}});let x=Za(g,h);Mo(n,{models:x,modes:u,availableModelsCount:g.length,configModelsCount:h.length,skipModelWarn:false});let v=Oo(t);return {id:`acp/${n}`,name:s,modes:u,effort:p,models:x,capabilities:v}}function Oo(n){let e=n.agentCapabilities??{};return {loadSession:e.loadSession??false,image:e.promptCapabilities?.image??false,audio:e.promptCapabilities?.audio??false,mcp:e.mcpCapabilities!=null}}function Mo(n,e){!e.skipModelWarn&&e.models.length===0&&console.warn(`[acp] ${n} meta: models empty (availableModels=${e.availableModelsCount}, configOptions[model]=${e.configModelsCount})`),e.modes.length===0&&console.warn(`[acp] ${n} meta: modes empty`);}async function No(n){let e=exports.ACP_ADAPTERS[n];if(!e)return null;let t=e.meta?.displayName,r=new exports.AcpConnection({spawn:e.spawn,cwd:process.cwd()});try{await r.connect(e.clientInfo);let o=r.initResponse;if(!o)return null;let s=e.buildSessionParams({cwd:process.cwd()}),i=await r.newSessionRaw(s);return td(n,t,o,i)}catch(o){return console.warn(`[acp] ${n} meta query failed: ${o instanceof Error?o.message:String(o)}`),null}finally{await r.dispose();}}async function rd(){let n=Object.keys(exports.ACP_ADAPTERS),e=await Promise.allSettled(n.map(r=>No(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t.sort((r,o)=>Rt(r.id,o.id))}Jt();Wr();rr();Gr();dr();Ee();c();Ee();function nd(n){return n.charAt(0).toUpperCase()+n.slice(1)}function od(n,e){if(!e.meta)return null;let t=e.meta.capabilities??{};return {id:`cli/${n}`,name:e.meta.displayName??nd(n),modes:[],effort:[],models:e.meta.models??[],capabilities:{loadSession:t.loadSession??false,resume:t.resume??false,image:t.image??false,audio:t.audio??false,mcp:t.mcp??false}}}function sd(){let n=[];for(let[e,t]of Object.entries(exports.BUILTIN_ADAPTERS)){let r=od(e,t);r&&n.push(r);}return n.sort((e,t)=>Rt(e.id,t.id))}c();var ln=0;function id(n){let e=n.meta?.taskId,t=e?` taskId=${e}`:"";if(n.ok)return `Task completed:${t}
250
+ ORDER BY (COALESCE(SUM(${i}), 0) + COALESCE(SUM(${u.output_tokens}), 0)) DESC
251
+ `).map(l=>({provider:l.provider,totalTasks:l.total_tasks,inputTokens:l.input_tokens,outputTokens:l.output_tokens,cachedInputTokens:l.cached_input_tokens,costUsd:l.cost_usd,totalTokens:l.input_tokens+l.output_tokens,activeDurationMs:l.active_duration_ms??0,lastActiveAt:l.last_active_at??null}))}catch(s){throw new T("DB_ERROR","Failed to get provider usage",s)}finally{o.close();}}getModelUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=drizzleOrm.sql`
252
+ CASE
253
+ WHEN ${u.model} LIKE 'claude-%' OR ${u.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
254
+ WHEN ${u.model} LIKE 'gpt-%' OR ${u.model} LIKE 'codex-%' THEN 'codex'
255
+ WHEN ${u.model} LIKE 'gemini-%' THEN 'gemini'
256
+ WHEN ${u.model} LIKE 'zai-%' OR ${u.model} LIKE 'openrouter/z-ai/%' THEN 'opencode'
257
+ WHEN ${u.model} LIKE 'minimax/%' THEN 'minimax'
258
+ WHEN ${u.model} LIKE 'qwen%' THEN 'qwen'
259
+ ELSE 'unknown'
260
+ END
261
+ `,i=drizzleOrm.sql`
262
+ COALESCE(${u.input_tokens}, 0)
263
+ + CASE
264
+ WHEN ${u.started_at} >= ${je}
265
+ AND (
266
+ ${u.crewx_version} IS NULL
267
+ OR (${u.crewx_version} LIKE '0.8.%' AND ${u.crewx_version} NOT LIKE '0.8.9%')
268
+ OR (${u.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${u.crewx_version}, ${Fe}) AS INTEGER) < ${He})
269
+ )
270
+ THEN COALESCE(${u.cached_input_tokens}, 0)
271
+ ELSE 0
272
+ END
273
+ `,a=r?drizzleOrm.sql`WHERE ${u.status} IN ('completed', 'success') AND ${u.started_at} >= ${e} AND ${u.started_at} < ${t} AND ${u.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${u.status} IN ('completed', 'success') AND ${u.started_at} >= ${e} AND ${u.started_at} < ${t}`,d=o.db.all(drizzleOrm.sql`
274
+ SELECT
275
+ ${u.model} AS model,
276
+ ${s} AS provider,
277
+ COUNT(*) AS total_tasks,
278
+ COALESCE(SUM(${i}), 0) AS input_tokens,
279
+ COALESCE(SUM(${u.output_tokens}), 0) AS output_tokens,
280
+ COALESCE(SUM(${u.cached_input_tokens}), 0) AS cached_input_tokens,
281
+ COALESCE(SUM(${u.cost_usd}), 0) AS cost_usd,
282
+ COALESCE(SUM(${u.duration_ms}), 0) AS active_duration_ms,
283
+ MAX(${u.completed_at}) AS last_active_at
284
+ FROM ${u}
285
+ ${a}
286
+ GROUP BY ${u.model}
287
+ `),l=new Map;for(let c of d){let f=nn(c.model??""),g=l.get(f);g?(g.totalTasks+=c.total_tasks,g.inputTokens+=c.input_tokens,g.outputTokens+=c.output_tokens,g.cachedInputTokens+=c.cached_input_tokens,g.costUsd+=c.cost_usd,g.totalTokens+=c.input_tokens+c.output_tokens,g.activeDurationMs+=c.active_duration_ms??0,c.last_active_at&&(!g.lastActiveAt||c.last_active_at>g.lastActiveAt)&&(g.lastActiveAt=c.last_active_at)):l.set(f,{model:f,provider:c.provider,totalTasks:c.total_tasks,inputTokens:c.input_tokens,outputTokens:c.output_tokens,cachedInputTokens:c.cached_input_tokens,costUsd:c.cost_usd,totalTokens:c.input_tokens+c.output_tokens,activeDurationMs:c.active_duration_ms??0,lastActiveAt:c.last_active_at??null});}return Array.from(l.values()).sort((c,f)=>f.costUsd-c.costUsd)}catch(s){throw new T("DB_ERROR","Failed to get model usage",s)}finally{o.close();}}getTasksForReport(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=r?drizzleOrm.sql`WHERE ${u.started_at} >= ${e} AND ${u.started_at} < ${t} AND ${u.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${u.started_at} >= ${e} AND ${u.started_at} < ${t}`;return o.db.all(drizzleOrm.sql`
288
+ SELECT
289
+ ${u.thread_id} AS thread_id,
290
+ ${u.agent_id} AS agent_id,
291
+ ${u.started_at} AS started_at,
292
+ ${u.status} AS status,
293
+ ${u.error} AS error,
294
+ ${u.exit_code} AS exit_code
295
+ FROM ${u}
296
+ ${s}
297
+ ORDER BY ${u.started_at} ASC
298
+ `).map(a=>({threadId:a.thread_id,agentId:a.agent_id,startedAt:a.started_at,status:a.status,error:a.error,exitCode:a.exit_code}))}catch(s){throw new T("DB_ERROR","Failed to get tasks for report",s)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(u.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(drizzleOrm.inArray(u.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(drizzleOrm.inArray(u.status,e.statuses)),e.from&&r.push(drizzleOrm.gte(u.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(u.started_at,e.to));let o=r.length>0?drizzleOrm.and(...r):void 0,s=(e.order??"DESC")==="ASC"?drizzleOrm.asc(u.started_at):drizzleOrm.desc(u.started_at),i={id:u.id,agent_id:u.agent_id,status:u.status,prompt:u.prompt,started_at:u.started_at,completed_at:u.completed_at,thread_id:u.thread_id};return e.limit?t.db.select(i).from(u).where(o).orderBy(s).limit(e.limit).all():t.db.select(i).from(u).where(o).orderBy(s).all()}catch(r){throw new T("DB_ERROR","Failed to find task evidence",r)}finally{t.close();}}findThreadChains(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let r=e.maxThreads??8,o=e.maxTurnsPerThread??4,s=[drizzleOrm.isNotNull(u.thread_id),drizzleOrm.isNull(u.parent_task_id),drizzleOrm.isNull(u.caller_agent_id),drizzleOrm.or(drizzleOrm.isNull(u.platform),drizzleOrm.ne(u.platform,"workflow")),drizzleOrm.or(drizzleOrm.isNull(u.metadata),drizzleOrm.notLike(u.metadata,'%"kind":"workflow_card"%')),drizzleOrm.or(drizzleOrm.isNull(u.metadata),drizzleOrm.notLike(u.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&s.push(drizzleOrm.eq(u.workspace_id,e.workspaceId)),e.from&&s.push(drizzleOrm.gte(u.started_at,e.from)),e.to&&s.push(drizzleOrm.lt(u.started_at,e.to));let i=t.db.select({id:u.id,agent_id:u.agent_id,status:u.status,prompt:u.prompt,started_at:u.started_at,completed_at:u.completed_at,thread_id:u.thread_id}).from(u).where(drizzleOrm.and(...s)).orderBy(drizzleOrm.asc(u.started_at),drizzleOrm.asc(u.id)).all(),a=new Map;for(let l of i){if(!l.thread_id)continue;let c={id:l.id,agentId:l.agent_id,status:l.status,prompt:l.prompt,startedAt:l.started_at,completedAt:l.completed_at},f=a.get(l.thread_id);f?f.push(c):a.set(l.thread_id,[c]);}let d=[];for(let[l,c]of a){let f=c.filter(g=>g.agentId===e.targetAgentId).length;f<2||d.push({threadId:l,targetAgentTurnCount:f,turns:c});}return d.sort((l,c)=>{let f=l.turns[l.turns.length-1].startedAt,g=c.turns[c.turns.length-1].startedAt;return f<g?1:f>g?-1:0}),d.slice(0,r).map(l=>({threadId:l.threadId,targetAgentTurnCount:l.targetAgentTurnCount,turns:l.turns.slice(-o)}))}catch(r){throw new T("DB_ERROR","Failed to find thread chains",r)}finally{t.close();}}};var Rd=new Set(["Read","Grep","Find","Glob"]),Cd=["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"],Td=[/\bgit\s+(commit|push|pull|merge|rebase|reset|checkout|switch|add|rm)\b/,/\bnpm\s+(install|ci|publish|run\s+(test|lint|build))\b/,/\bnpx\s+tsc\b/,/\bpnpm\s+(install|run)\b/,/\bvitest\b/,/\bjest\b/];function Pd(n){let e=n.toLowerCase();return e==="bash"||e==="terminal"?"Bash":e==="read"||e==="view"?"Read":e==="edit"||e==="apply_patch"?"Edit":e==="write"?"Write":e==="grep"||e==="rg"?"Grep":e==="glob"||e==="find"?"Find":n}function bd(n,e){if(Rd.has(n))return true;if(n!=="Bash"||!e)return false;let t=e.split(`
299
+ `)[0].trimStart();return Td.some(r=>r.test(t))?false:Cd.some(r=>t.startsWith(r))}function Cr(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function Sd(n,e,t){if(n!=="Read"||!e)return "ok";let o=e.split(`
300
+ `).find(s=>s.trim()&&!s.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let s=rs__namespace.statSync(o);if(t){let i=Date.parse(t);if(!Number.isNaN(i)&&s.mtimeMs>i)return "stale"}return "ok"}catch{return "unknown"}}function Id(n){let e=new Set;for(let t of n)try{let r=JSON.parse(t);r.type&&e.add(r.type);}catch{}return e.has("turn.started")||e.has("thread.started")?"codex":e.has("assistant.message_delta")?"copilot":e.has("step_start")&&e.has("step_finish")?"opencode":e.has("system")&&e.has("result")?"claude":e.has("init")&&e.has("message")?"gemini":e.has("result")&&e.has("assistant")?"claude":null}function Od(n){if(!Array.isArray(n))return [];let e=n,t=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),r=Id(t),o=[];for(let a of e)a.level==="info"&&a.message?o.push(...ge(a.message,a.timestamp)):a.level==="stdout"&&a.message&&r&&o.push(...St("",a.message,r));let s=new Map,i=[];for(let a of o)if(a.type==="tool_use"){let d={tool:Pd(a.toolName??""),input:a.toolInput??null,result:null,isError:false},l=a.toolUseId;if(l){if(s.has(l)){s.get(l).input=d.input;continue}s.set(l,d);}i.push(d);}else if(a.type==="tool_result"){if(a.toolUseId&&s.has(a.toolUseId)){let d=s.get(a.toolUseId);d.isError=a.isError===true,d.result=a.resultPreview??null;}else for(let d=i.length-1;d>=0;d--)if(i[d].result===null){i[d].isError=a.isError===true,i[d].result=a.resultPreview??null;break}}return i}function Md(n,e){let t=Od(n),r=[];for(let o of t){let s=o.tool==="Bash"?o.input?.split(`
301
+ `)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,i=bd(o.tool,o.input)&&!o.isError;r.push({tool:o.tool,cmd:s,result:o.result,status:Sd(o.tool,o.input,e),reusable:i});}return r}function Nd(n,e,t){let r=["<activity_log>"];if(n.length===0&&e===0)r.push(" <!-- no activity found in previous tasks -->");else {r.push(" <!-- tool activity from previous tasks -->"),e>0&&r.push(` <!-- ${e} entries omitted (cap) -->`);for(let o of n){let s=`tool="${Cr(o.tool)}"`,i=o.cmd?` cmd="${Cr(o.cmd)}"`:"",a="";if(o.reusable&&(a=o.status==="stale"?' reused="stale"':' reused="ok"'),o.reusable&&o.status==="stale")r.push(` <entry ${s}${i}${a}>\u26A0\uFE0F changed since \u2014 re-read</entry>`);else if(o.result){r.push(` <entry ${s}${i}${a}>`);let d=t&&t>0?t:8e3,l=o.result;l.length>d?r.push(Cr(l.slice(0,d))+` \u2026 [truncated, ${d}/${l.length} chars shown]`):r.push(Cr(l)),r.push(" </entry>");}else r.push(` <entry ${s}${i}${a} />`);}}return r.push("</activity_log>"),r}function ns(n){let{threadId:e,agentId:t,lookback:r,maxEntryChars:o,decayRate:s}=n;if(!r||!e||!t)return new Map;let i;try{i=new Wt().findTasksByThread(e).filter(g=>!g.parent_task_id&&g.agent_id===t).sort((g,m)=>m.started_at>g.started_at?1:-1).slice(0,Math.min(r,5));}catch{return new Map}if(!i.length)return new Map;let a=[];for(let f of i){let g=[];try{let m=JSON.parse(f.logs??"[]");Array.isArray(m)&&(g=m);}catch{}a.push({taskId:f.id,entries:Md(g,f.completed_at)});}let d=new Map,l=typeof s=="number"&&s>0&&s<=1?s:1,c=1e3;for(let f=0;f<a.length;f++){let{taskId:g,entries:m}=a[f];if(m.length===0)continue;let w=Math.max(Math.floor((o??8e3)*Math.pow(l,f)),c),k=Math.max(0,m.length-200),v=k>0?m.slice(k):m,h=Nd(v,k,w);d.set(g,h.join(`
302
+ `));}return d}p();p();var Dd={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")},Ld={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 os(n,e,t){n.tool("crewx_listAgents","List available CrewX agents exposed by this server",async()=>{let r=[];for(let o of t){let s=e.agents.get(o);s&&r.push({id:s.id,name:s.name??s.id,description:s.description??""});}return {content:[{type:"text",text:JSON.stringify(r,null,2)}]}}),n.tool("crewx_queryAgent","Query a CrewX agent with a read-only question",Dd,async({agentId:r,query:o,context:s,thread:i})=>{if(!t.has(r))return {content:[{type:"text",text:`Agent '${r}' is not exposed by this server`}],isError:true};let a=await e.query(r,o,{context:s,threadId:i});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Query failed"}],isError:true}}),n.tool("crewx_executeAgent","Execute a task on a CrewX agent (may modify state)",Ld,async({agentId:r,task:o,context:s,thread:i})=>{if(!t.has(r))return {content:[{type:"text",text:`Agent '${r}' is not exposed by this server`}],isError:true};let a=await e.execute(r,o,{context:s,threadId:i});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Execute failed"}],isError:true}});}p();function ss(n){return n.headers.get("Origin")?null:new Response(JSON.stringify({error:"Forbidden: Origin header required"}),{status:403,headers:{"Content-Type":"application/json"}})}async function is(n,e){return e?await e(n)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function jd(n,e){let t=new mcp_js.McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return os(t,n,e),t}function En(n,e){if(!e.agents||e.agents.length===0)throw new Error("crewx.handler() requires at least one agent in the agents option");let t=new Set(e.agents),r=new Map;return async o=>{let s=ss(o);if(s)return s;let i=await is(o,e.auth);if(i)return i;let a=o.headers.get("mcp-session-id");if(a&&r.has(a))return r.get(a).transport.handleRequest(o);let d=jd(n,t),l=new webStandardStreamableHttp_js.WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:c=>{r.set(c,{transport:l,server:d});},onsessionclosed:c=>{r.delete(c);},enableJsonResponse:true});return await d.connect(l),l.handleRequest(o)}}p();function ds(n){let e=K__namespace.resolve(n);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(t,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function Rn(n){let e=ds(n);return crypto$1.createHash("sha256").update(e).digest("hex")}function pl(n){return n?n.settings?.template?.exec:void 0}function gl(){try{let n=new Uint8Array(8);return globalThis.crypto.getRandomValues(n),Array.from(n,e=>e.toString(16).padStart(2,"0")).join("")}catch{let{randomBytes:n}=te("crypto");return n(8).toString("hex")}}var Hn=class n extends Ft{_agents;_templateEngine;_documentLoader;_layoutLoader;_layoutRenderer;_config;_projectRoot;_workspaceId;_workspaceName;_plugins=[];_tools=new Map;_activeAdapters=new Map;_pendingThreads=new Map;_activeTasks=new Map;_remoteFactory;_remoteTargets=new Map;_additionalArgsProvider;_callerIdentityOverrides=new Map;constructor(e,t={},r,o,s){super(),this._agents=new Map(e.map(d=>[d.id,d])),this._config=r,this._projectRoot=s??(typeof process<"u"?process.cwd():"/");let i=s??(typeof process<"u"?process.env.CREWX_WORKSPACE??process.cwd():"/");this._workspaceId=Rn(i),this._workspaceName=K.basename(i);let a=pl(r);this._templateEngine=new Dt({execPolicy:t.execPolicy??a}),this._documentLoader=o??new et,this._layoutLoader=new Lt({templatesPath:ut()}),this._layoutRenderer=new jt,this._remoteFactory=t.remoteFactory,this._additionalArgsProvider=t.additionalArgsProvider;}async resolveFileRemoteTarget(e){let t=this.getAgent(e),r=Array.isArray(t?.provider)?t?.provider[0]:t?.provider;if(!r?.startsWith("remote/"))return null;let o=r.slice(7),s=this.getRemoteProviderConfig(o);if(!s?.location?.startsWith("file://"))return null;let i=K.resolve(s.location.replace("file://","")),a=s.external_agent_id??e.replace(/^@/,""),d=this._remoteTargets.get(i);d||(d=(this._remoteFactory??(m=>n.loadYaml(m)))(i),this._remoteTargets.set(i,d),d.catch(()=>this._remoteTargets.delete(i)));let l=await d,c=l.getAgent("@"+a),f=Array.isArray(c?.provider)?c?.provider[0]:c?.provider;if(f?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${o}" \u2192 "${f}"`);return {target:l,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:t,dir:r}=Ur(),o;try{o=rs.readFileSync(t,"utf-8");}catch(i){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
303
+ ${i.message}`)}let s=rr(o);if(s.documents&&typeof s.documents=="object"){let i={};for(let[a,d]of Object.entries(s.documents))if(d&&typeof d=="object"){let l=d;typeof l.path=="string"&&!K.isAbsolute(l.path)?i[a]={...l,path:K.resolve(r,l.path)}:i[a]=l;}else i[a]=d;return {...s,documents:i}}return s}static mergeCrewxConfig(e,t){let r=new Map;for(let _ of e.agents??[])r.set(_.id,_);for(let _ of t.agents??[])r.has(_.id)&&console.warn(`[agent-loader] User agent "${_.id}" overrides built-in`),r.set(_.id,_);let o=Array.from(r.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,l=Rs(a.vars,d.vars),c=Rs(a.settings,d.settings),f;e.skills&&t.skills&&typeof e.skills=="object"&&typeof t.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(t.skills)?f={...e.skills,...t.skills}:f=t.skills??e.skills;let g=[...e.hooks??[],...t.hooks??[]],m=fl(a.providers,d.providers),w={...e},k={...t};for(let _ of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete w[_],delete k[_];let h={...{...w,...k},agents:o,layouts:s,documents:i,skills:f};return g.length>0&&(h.hooks=g),l!==void 0&&(h.vars=l),c!==void 0&&(h.settings=c),m!==void 0&&(h.providers=m),h}static async loadYaml(e,t,r){let o=t?.includeBuiltIns!==false,s,i;if(o){let c=await n.loadBuiltInConfig(r);if(e!==void 0){let f=nr(e);s=n.mergeCrewxConfig(c,f),i=K.dirname(e);}else s=c,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=nr(e),i=K.dirname(e);}let a=new et(r);await a.load(s.documents,i);let d=s.agents??[];return await Cs(d,s,t),new n(d,t??{},s,a,i)}static async fromConfig(e,t,r,o){let s=t?.includeBuiltIns===true,i=e;if(s){let c=await n.loadBuiltInConfig(o);i=n.mergeCrewxConfig(c,e);}let a=new et(o);await a.load(i.documents,r??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await Cs(d,i,t),new n(d,t??{},i,a,r)}get agents(){return this._agents}get config(){return this._config}get plugins(){return this._plugins}get tools(){return this._tools}get workspaceId(){return this._workspaceId}get workspaceName(){return this._workspaceName}getAgent(e){let t=e.startsWith("@")?e.slice(1):e;return this._agents.get(t)}getRemoteProviderConfig(e){let t=this._config?.providers;return Array.isArray(t)?t.find(o=>o.type==="remote"&&o.id===e):void 0}computeTaskLogPath(e,t){let r=un(t);return K.join(this._projectRoot,".crewx","logs",`${r}_${e}.log`)}registerTool(e,t){this._tools.set(e,{name:e,...t});}async use(e){this._plugins.includes(e)||(await e.attach(this),this._plugins.push(e));}handler(e){return En(this,e)}async registerChannelAdapter(e){let{adapter:t,instanceId:r,config:o}=e;if(this._activeAdapters.has(r))throw new Error(`Adapter instance already registered: ${r}`);let s=new Set(t.manifest.capabilities),i=e.store??pn(r),a=e.defaultMode??"query",d=t.manifest.platform,l=e.agentRunner??{run:async(m,w,k)=>{let h=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${m}`,w,{threadId:k?.threadId,platform:d});return {output:h.ok?h.data:h.error?.message??""}}},c=e.onInbound??(async m=>{let w=m.routingHints?.agentId??e.defaultAgent;if(!w)return {accepted:false,reason:"no_agent"};let{output:k}=await l.run(w,m.text,{threadId:m.threadId});return {accepted:true,output:k}}),f=fn({instanceId:r,config:o,capabilities:s,db:i,agentRunner:l,onInbound:c}),g={adapter:t,ctx:f,state:"starting"};this._activeAdapters.set(r,g),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await t.start(f),g.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(m){throw g.state="failed",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"failed",error:m instanceof Error?m:new Error(String(m)),timestamp:new Date}),this._activeAdapters.delete(r),m}}async unregisterChannelAdapter(e){let t=this._activeAdapters.get(e);if(t){t.state="stopping",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopping",timestamp:new Date});try{await t.adapter.stop(t.ctx),t.state="stopped",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopped",timestamp:new Date});}catch(r){t.state="failed",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"failed",error:r instanceof Error?r:new Error(String(r)),timestamp:new Date});}finally{this._activeAdapters.delete(e);}}}async stopAllAdapters(e={}){let t=e.timeoutMs??1e4,r=Array.from(this._activeAdapters.keys()),o=await Promise.allSettled(r.map(s=>Promise.race([this.unregisterChannelAdapter(s),new Promise((i,a)=>setTimeout(()=>a(new Error(`Adapter stop timeout: ${s}`)),t))])));for(let s=0;s<o.length;s++)o[s].status==="rejected"&&console.error(`[crewx] adapter stop error (${r[s]}): ${o[s].reason}`);}abortAll(){for(let[e,t]of this._activeTasks)if(t.pid!==void 0)try{process.platform==="win32"?process.kill(t.pid,"SIGTERM"):process.kill(-t.pid,"SIGTERM");}catch(r){console.error(`[crewx] abort task ${e} (pid=${t.pid}) error: ${r instanceof Error?r.message:String(r)}`);}}async _drainActiveTasks(e){let t=Array.from(this._activeTasks.values()).map(r=>r.done);t.length!==0&&await Promise.race([Promise.allSettled(t),new Promise(r=>setTimeout(r,e).unref())]);}async close(){this.abortAll(),await this._drainActiveTasks(It+1e3),await this.stopAllAdapters({timeoutMs:1e4});let e=[...this._remoteTargets.values()];this._remoteTargets.clear(),await Promise.allSettled(e.map(async r=>{try{await(await r).close();}catch(o){console.error(`[crewx] remote target close error: ${o instanceof Error?o.message:String(o)}`);}}));let t=[...this._plugins].reverse();for(let r of t)try{await r.detach(this);}catch(o){console.error(`[crewx] plugin ${r.name} detach error: ${o instanceof Error?o.message:String(o)}`);}this._plugins.length=0;}filterAgents(e){let t=a=>a?a.split(",").map(d=>d.trim().toLowerCase()).filter(Boolean):void 0,r=t(e.role),o=t(e.team),s=t(e.provider),i=Array.from(this._agents.values());return r&&(i=i.filter(a=>a.role&&r.some(d=>me(a.role.toLowerCase(),d)))),o&&(i=i.filter(a=>a.team&&o.some(d=>me(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(l=>s.some(c=>me(l.toLowerCase(),c))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new Re(t,Array.from(this._agents.keys()));return r.inline?.prompt??r.inline?.system_prompt??r.description??`You are an expert ${t}.`}async renderPrompt(e,t){let o={...await this._documentLoader.buildContext(),...t?.documents??{}},s={...t,documents:o};return this._templateEngine.render(e,s)}registerLayout(e,t){this._layoutLoader.registerLayout(e,t);}async renderAgentPromptFull(e,t){let r=e.startsWith("@")?e.slice(1):e,o=this._agents.get(r);if(!o)throw new Re(r,Array.from(this._agents.keys()));let s=this._resolveLayoutSpec(o,t?.layout),i=this._extractLayoutId(s),a=this._extractLayoutProps(o,s,t?.layout),d=this._layoutLoader.load(i,a),l=o.inline?.prompt??o.inline?.system_prompt??o.description??`You are an expert ${r}.`,c=await this._documentLoader.buildContext(),f=t?.env??(typeof process<"u"?process.env:{}),g=t?.vars?.security_key??gl(),m={...t?.vars??{},documents:c,env:f,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??""}},w=await this._templateEngine.render(l,m),k={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},v=o.provider,h=Array.isArray(v)?v:typeof v=="string"&&v.length>0?[v]:[],_=h.join(", ")||(typeof v=="string"?v:""),A=o.options,I=["goals","daily"],b={goals:false,daily:false},V;if(!Array.isArray(A)&&typeof A=="object"&&A!==null){let F=A;if("goals"in F){let O=F.goals;typeof O=="string"||Array.isArray(O)?b.goals=O:b.goals=!!O;}"daily"in F&&(b.daily=!!F.daily);let x={};for(let[O,j]of Object.entries(F))I.includes(O)||(x[O]=j);if(Object.keys(x).length>0){let O=h.some(C=>C.startsWith("cli/")),j={};for(let[C,z]of Object.entries(x)){let ie={};if(Array.isArray(z))O&&(ie.rawArgs=z);else if(typeof z=="object"&&z!==null){let ct=z;Object.keys(ct).length>0&&(ie.named=ct);}(ie.named||ie.rawArgs&&ie.rawArgs.length>0)&&(j[C]=ie);}V=Object.keys(j).length>0?j:void 0;}}let $=Array.isArray(A)?A:void 0,S={};for(let[F,x]of Object.entries(c))S[F]={content:x.content??"",toc:x.toc,summary:x.summary,path:x.path};if(b.goals){let F=K.join(this._projectRoot,"docs","goal"),x=await Ho(F,void 0,b.goals);x&&(S.active_goals={content:x});}if(b.daily){let F=K.join(this._projectRoot,"docs","daily"),x=await qo(F);x&&(S.today_daily={content:x});}let N=t?.vars?.user_input??void 0,D=this._config?.settings?.dreaming?.continuity,Z=D?.reuseReadOnly!==false,U=typeof D?.lookback=="number"?D.lookback:5,ee=typeof D?.maxEntryChars=="number"?D.maxEntryChars:8e3,W=typeof D?.decayRate=="number"?D.decayRate:.5,H=t?.threadId??"",Q=o.id,J=Z&&U>0&&H&&t?.messages&&t.messages.length>0?ns({threadId:H,agentId:Q,lookback:U,maxEntryChars:ee,decayRate:W}):new Map,B=(t?.messages??[]).map(F=>{if(!F.isAssistant)return F;let x=F.metadata?.task_id;return !x||!J.has(x)?F:{...F,activity_log:J.get(x)}}),We={user_input:N,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??"",provider:_,providerList:h,model:o.inline?.model,workingDirectory:o.working_directory??o.workingDirectory??".",inline:{...o.inline??{},prompt:w},specialties:o.specialties??[],capabilities:o.capabilities??[],remote:o.remote??null,optionsByMode:V,optionsArray:$},agentMetadata:{specialties:o.specialties??[],capabilities:o.capabilities??[],description:o.description??""},contextOptions:b,documents:S,skills:t?.skills??[],session:k,env:f,vars:{security_key:g,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:k.platform,mode:k.mode,thread_id:H,now:$t(new Date),has_activity_log:J.size>0,messages:B,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(F=>({name:F.name,description:F.description,parameters:F.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(F=>({name:F.name,description:F.description,parameters:F.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,We)}_filterToolsByMode(e){return e?e.map(t=>this._tools.get(t)).filter(t=>t!==void 0):Array.from(this._tools.values())}_resolveLayoutSpec(e,t){if(t!==void 0)return t;let r=e.inline?.layout;if(r!==void 0)return r;let o=this._config?.layouts?.default;return typeof o=="string"&&o?o:"crewx/default"}_extractLayoutId(e){if(typeof e=="string")return e;if("id"in e)return e.id;if("template"in e&&typeof e.template=="string"&&e.template.trim()){let t=`crewx/__inline_${Date.now()}`;return this._layoutLoader.registerLayout(t,e.template),t}return "crewx/default"}_extractLayoutProps(e,t,r){let o=e.inline?.layout,s=o&&typeof o=="object"&&"props"in o?o.props:void 0,i=r&&typeof r=="object"&&"id"in r?r.props:void 0;if(s||i)return {...s??{},...i??{}}}_getConversationProvider(){return this._plugins.find(t=>t.name==="conversation")?.conversationProvider}async _fetchHistoryMessages(e,t,r){if(r&&r.length>0)return r;if(!e)return;let o=this._getConversationProvider();if(o)try{let s=await o.fetchHistory(e,{currentTraceId:t});return s.messages.length===0?void 0:wn(s)}catch{return}}_resolveTimeout(e,t){let r=e==="query"?"CREWX_TIMEOUT_QUERY":"CREWX_TIMEOUT_EXECUTE";if(process.env[r]!=null&&process.env[r]!==""){let o=Ao();return e==="query"?o.queryMs:o.executeMs}if(t?.meta?.defaultTimeoutMs){let o=e==="query"?t.meta.defaultTimeoutMs.query:t.meta.defaultTimeoutMs.execute;if(o!==void 0)return o}return 8*36e5}_resolveIdleTimeout(e){let t=en();return t!==void 0?t:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){return mn(e)}_resolveEffectiveCost(e,t,r){return bo(e?.costUsd,e?.inputTokens,e?.outputTokens,e?.cachedInputTokens,t)}_resolveEffectiveCwd(e,t){return t?.cwd??(e.working_directory?K.resolve(this._projectRoot,e.working_directory):this._projectRoot)}_buildFileRemoteOptions(e,t){let r={path:this._projectRoot,id:this._workspaceId,name:this._workspaceName,agentRef:e};return {...t,cwd:void 0,callerIdentity:r,metadata:{...t?.metadata??{},crewx:{...t?.metadata?.crewx??{},callerWorkspace:r}},vars:{...t?.vars??{},crewx_caller_workspace_path:r.path,crewx_caller_workspace_id:r.id,crewx_caller_workspace_name:r.name}}}_registerCallerIdentityOverride(e,t,r){let o=Symbol("callerIdentityOverride");return this._callerIdentityOverrides.set(e,{token:o,callerIdentity:t,targetIdentity:r}),o}_clearCallerIdentityOverride(e,t){if(!t)return;let r=this._callerIdentityOverrides.get(e);r&&r.token===t&&this._callerIdentityOverrides.delete(e);}_rewriteCallerFacingPayload(e,t,r){let{callerIdentity:o,targetIdentity:s}=r,i={...t,agentRef:o.agentRef};if(e==="task:output")return i;let a=i,d=a.metadata??{},l=d.crewx??{};return {...a,workspaceId:o.id,workspaceName:o.name,metadata:{...d,crewx:{...l,remoteExecution:s}}}}emit(e,t){if(e==="task:start"||e==="task:end"||e==="task:output"){let r=t.traceId,o=this._callerIdentityOverrides.get(r);if(o){let s=this._rewriteCallerFacingPayload(e,t,o);super.emit(e,s);return}}super.emit(e,t);}emitToolEvents(e,t,r,o,s,i,a){try{let l=this._lookupCliAdapter(r)?.parseEvent?.(o)??St(new Date().toISOString(),o);for(let c of l)c.type==="tool_use"&&c.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:c.toolName,rawName:c.toolName,input:c.toolInput?this.tryParseJson(c.toolInput):void 0,toolUseId:c.toolUseId}}),c.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:c.toolName??"unknown",rawName:c.toolName??"unknown",toolUseId:c.toolUseId,result:c.resultPreview,isError:c.isError}});}catch{}}emitTaskLogEntries(e,t,r,o,s,i,a){try{for(let d of a)d.type==="tool_use"&&d.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:r,threadId:o,sessionId:s,provider:i,tool:{name:d.toolName,rawName:d.toolName,input:d.toolInput?this.tryParseJson(d.toolInput):void 0,toolUseId:d.toolUseId}}),d.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:r,threadId:o,sessionId:s,provider:i,tool:{name:d.toolName??"unknown",rawName:d.toolName??"unknown",toolUseId:d.toolUseId,result:d.resultPreview,isError:d.isError}});}catch{}}tryParseJson(e){try{return JSON.parse(e)}catch{return e}}async query(e,t,r){let o=await this.resolveFileRemoteTarget(e);if(o){let c=await o.target.query(o.agentRef,t,this._buildFileRemoteOptions(e,r));return {...c,meta:{...c.meta,agentId:e.replace(/^@/,"")}}}let s=Ht.getStore()??hn(r?.trace),i=r?.taskId??rt("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null},l=r?.callerIdentity?this._registerCallerIdentityOverride(i,r.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await Ht.run(d,async()=>{let c=Date.now(),f=new Date,g;try{g=sr(e,Array.from(this._agents.values()));}catch(x){if(x instanceof Re){this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let O=Date.now()-c,j={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:O,error:j,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:O,taskId:i}}}throw x}d.callerAgentId=g.id;let m=yn(g.provider),w=yr(g.options,"query",m,mr(r?.overdrive)),k=hr(g.options,"query"),v=w.active&&w.provider?w.provider:r?.provider??k.provider??m,h=w.active&&w.model?w.model:r?.model??k.model??g.inline?.model;h&&h.includes("{{")&&(h=await this._templateEngine.render(h,{...r?.vars??{}}));let _=v!==m?void 0:r?.resumeSessionId,A;try{A=Pe(v,this._additionalArgsProvider);}catch(x){this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let O=Date.now()-c,j={code:"PROVIDER_ERROR",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:O,error:j,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:g.id,provider:v,model:h,durationMs:O,taskId:i}}}let I=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),b;try{b=await this.renderAgentPromptFull(e,{session:{mode:"query",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:I,threadId:r?.threadId});}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let V,$,S,N=h,se=!1,Y=x=>{se||(se=!0,this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"query",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:N,provider:v,codingAgentCommand:V,renderedPrompt:b,metadata:{...r?.metadata??{},provider:v,...w.active?{overdrive:!0}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},D=g.options,Z=w.active?w.mode:D?.query?.mode,U=w.active?w.effort:D?.query?.effort,ee=Array.isArray(D?.query?.tools)?D.query.tools:void 0,W=this._tools.size>0?this._filterToolsByMode(ee):[],H=(()=>{let x=D?.query;if(!x||Array.isArray(x))return;let{tools:O,effort:j,mode:C,provider:z,model:ie,profiles:ct,...Dr}=x,At=Object.entries(Dr).filter(([,Ae])=>Ae!=null);if(At.length!==0)return Object.fromEntries(At.map(([Ae,Lr])=>[Ae,String(Lr)]))})(),Q=g.inline?.max_steps;v.startsWith("api/")&&Y();let J=!1,B=0,We=()=>{},F=new Promise(x=>{We=x;});this._activeTasks.set(i,{pid:void 0,done:F});try{let x=await A.query(t,{model:h,effort:U,mode:Z,context:r?.context,systemPrompt:b??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(D?.query)?D.query:void 0,resumeSessionId:_,tools:W.length>0?W:void 0,maxSteps:Q,configOptions:H,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(v)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(v)),cwd:this._resolveEffectiveCwd(g,r),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:v,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,f)},onPid:C=>{let z=this._activeTasks.get(i);z&&(z.pid=C),Y(C);},onOutput:(C,z)=>{let ie=this._lookupCliAdapter(v);z==="stdout"&&ie?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:C,level:z}),z==="stdout"&&this.emitToolEvents(i,e,v,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",v,C);for(let z of C)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(z),level:"info"});},onCommand:C=>{V=C;},onUsage:C=>{$=C;},onExitCode:C=>{S=C;},onModel:C=>{N||(N=C);}});B=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:x,durationMs:O,exitCode:S,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:B,model:N,metadata:Object.keys(j).length>0?j:void 0}),J=!0,{ok:!0,data:x,meta:{agentId:g.id,provider:v,model:h,durationMs:O,taskId:i}}}catch(x){if(x instanceof exports.ClientToolCallRequiredError){let C=rt("thd");return this._pendingThreads.set(C,{agentRef:g.id,providerStr:v,continuationState:x.continuationState,toolCall:x.toolCall,traceId:i,startMs:c,model:h}),J=!0,{ok:!0,status:"requires_action",data:"",toolCall:x.toolCall,threadId:C,meta:{agentId:g.id,provider:v,model:h,durationMs:Date.now()-c,taskId:i}}}B=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={code:"QUERY_FAILED",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:O,error:j,exitCode:S,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:B,model:N,metadata:r?.metadata?{...r.metadata}:void 0}),J=!0,{ok:!1,data:"",error:j,meta:{agentId:g.id,provider:v,model:h,durationMs:O,taskId:i}}}finally{J||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:S??-1,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:B,model:N}),this._activeTasks.delete(i),this._clearCallerIdentityOverride(i,l),We();}})}finally{this._clearCallerIdentityOverride(i,l);}}async continueQuery(e,t){let r=this._pendingThreads.get(e);if(!r)return {ok:false,data:"",error:{code:"THREAD_NOT_FOUND",message:`No pending thread: ${e}`},meta:{agentId:"",provider:"",durationMs:0}};this._pendingThreads.delete(e);let o=Pe(r.providerStr,this._additionalArgsProvider);if(!o.continueWithToolResults)return {ok:false,data:"",error:{code:"UNSUPPORTED",message:"Provider does not support client tool continuation"},meta:{agentId:r.agentRef,provider:r.providerStr,durationMs:0}};let s=t.map(i=>({...i,toolName:r.toolCall.toolCallId===i.toolCallId?r.toolCall.toolName:i.toolCallId}));try{let i=await o.continueWithToolResults(r.continuationState,s),a=Date.now()-r.startMs;return this.emit("task:end",{traceId:r.traceId,timestamp:new Date,agentRef:r.agentRef,mode:"query",result:i,durationMs:a}),{ok:!0,status:"complete",data:i,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}catch(i){if(i instanceof exports.ClientToolCallRequiredError)return this._pendingThreads.set(e,{...r,continuationState:i.continuationState,toolCall:i.toolCall}),{ok:true,status:"requires_action",data:"",toolCall:i.toolCall,threadId:e,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:Date.now()-r.startMs}};let a=Date.now()-r.startMs;return {ok:false,data:"",error:{code:"CONTINUE_FAILED",message:i.message},meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}}async execute(e,t,r){let o=await this.resolveFileRemoteTarget(e);if(o){let c=await o.target.execute(o.agentRef,t,this._buildFileRemoteOptions(e,r));return {...c,meta:{...c.meta,agentId:e.replace(/^@/,"")}}}let s=Ht.getStore()??hn(r?.trace),i=r?.taskId??rt("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null},l=r?.callerIdentity?this._registerCallerIdentityOverride(i,r.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await Ht.run(d,async()=>{let c=Date.now(),f=new Date,g;try{g=sr(e,Array.from(this._agents.values()));}catch(x){if(x instanceof Re){this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let O=Date.now()-c,j={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:O,error:j,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:O,taskId:i}}}throw x}d.callerAgentId=g.id;let m=yn(g.provider),w=yr(g.options,"execute",m,mr(r?.overdrive)),k=hr(g.options,"execute"),v=w.active&&w.provider?w.provider:r?.provider??k.provider??m,h=w.active&&w.model?w.model:r?.model??k.model??g.inline?.model;h&&h.includes("{{")&&(h=await this._templateEngine.render(h,{...r?.vars??{}}));let _=v!==m?void 0:r?.resumeSessionId,A;try{A=Pe(v,this._additionalArgsProvider);}catch(x){this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let O=Date.now()-c,j={code:"PROVIDER_ERROR",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:O,error:j,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:g.id,provider:v,model:h,durationMs:O,taskId:i}}}let I=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),b;try{b=await this.renderAgentPromptFull(e,{session:{mode:"execute",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:I,threadId:r?.threadId});}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let V,$,S,N=h,se=!1,Y=x=>{se||(se=!0,this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"execute",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:N,provider:v,codingAgentCommand:V,renderedPrompt:b,metadata:{...r?.metadata??{},provider:v,...w.active?{overdrive:!0}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},D=g.options,Z=w.active?w.mode:D?.execute?.mode,U=w.active?w.effort:D?.execute?.effort,ee=Array.isArray(D?.execute?.tools)?D.execute.tools:void 0,W=this._tools.size>0?this._filterToolsByMode(ee):[],H=(()=>{let x=D?.execute;if(!x||Array.isArray(x))return;let{tools:O,effort:j,mode:C,provider:z,model:ie,profiles:ct,...Dr}=x,At=Object.entries(Dr).filter(([,Ae])=>Ae!=null);if(At.length!==0)return Object.fromEntries(At.map(([Ae,Lr])=>[Ae,String(Lr)]))})(),Q=g.inline?.max_steps;v.startsWith("api/")&&Y();let J=!1,B=0,We=()=>{},F=new Promise(x=>{We=x;});this._activeTasks.set(i,{pid:void 0,done:F});try{let x=await A.execute(t,{model:h,effort:U,mode:Z,context:r?.context,systemPrompt:b??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(D?.execute)?D.execute:void 0,resumeSessionId:_,tools:W.length>0?W:void 0,maxSteps:Q,configOptions:H,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(v)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(v)),cwd:this._resolveEffectiveCwd(g,r),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:v,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,f)},onPid:C=>{let z=this._activeTasks.get(i);z&&(z.pid=C),Y(C);},onOutput:(C,z)=>{let ie=this._lookupCliAdapter(v);z==="stdout"&&ie?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:C,level:z}),z==="stdout"&&this.emitToolEvents(i,e,v,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",v,C);for(let z of C)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(z),level:"info"});},onCommand:C=>{V=C;},onUsage:C=>{$=C;},onExitCode:C=>{S=C;},onModel:C=>{N||(N=C);}});B=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:x,durationMs:O,exitCode:S,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:B,model:N,metadata:Object.keys(j).length>0?j:void 0}),J=!0,{ok:!0,data:x,meta:{agentId:g.id,provider:v,model:h,durationMs:O,taskId:i}}}catch(x){B=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={code:"EXECUTE_FAILED",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:O,error:j,exitCode:S,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:B,model:N,metadata:r?.metadata?{...r.metadata}:void 0}),J=!0,{ok:!1,data:"",error:j,meta:{agentId:g.id,provider:v,model:h,durationMs:O,taskId:i}}}finally{J||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:S??-1,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:B,model:N}),this._activeTasks.delete(i),this._clearCallerIdentityOverride(i,l),We();}})}finally{this._clearCallerIdentityOverride(i,l);}}};function Rs(n,e){let t=qn(n)?n:void 0,r=qn(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function qn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function fl(n,e){let t=Array.isArray(n)?n:void 0,r=Array.isArray(e)?e:void 0;if(!t&&!r)return;let o=a=>{if(!qn(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let l=a.name;if(typeof l=="string")return `name:${l}`},s=new Set;for(let a of r??[]){let d=o(a);d&&s.add(d);}let i=[];for(let a of t??[]){let d=o(a);d&&s.has(d)||i.push(a);}for(let a of r??[])i.push(a);return i}function ml(n){let e=Array.isArray(n.provider)?n.provider:[n.provider],t=n.options,r=[...e];for(let o of ["query","execute"]){let s=hr(t,o);s.provider&&r.push(s.provider);let i=t&&typeof t=="object"&&!Array.isArray(t)?t[o]:void 0,a=i&&typeof i=="object"&&!Array.isArray(i)?fr(i.overdrive):void 0;a?.provider&&r.push(a.provider);}return r}async function Cs(n,e,t){let r=n.flatMap(ml);if(r.some(s=>s.startsWith("api/"))){let{registerApiProviders:s}=await Promise.resolve().then(()=>(Tn(),ps));s(t?.api);}await hl(r,e),wl(r,e),yl(r);}function yl(n){if(!n.some(r=>r.startsWith("acp/")))return;let{registerAcpProviders:t}=(Nn(),io(hs));t();}async function hl(n,e){if(!n.some(i=>i.startsWith("remote/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createRemoteProviderFactory:o}=await Promise.resolve().then(()=>($n(),_s)),s=new Map;for(let i of r)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Te("remote",o(s,Pe));}function wl(n,e){if(!n.some(i=>i.startsWith("plugin/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createPluginProviderFactory:o}=(Un(),io(As)),s=new Map;for(let i of r)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Te("plugin",o(s));}p();var Wn=class{detach(e){}};p();var _l="crewx:fs:",Bn=class{prefix;store;constructor(e){this.prefix=e?.prefix??_l,this.store=e?.storage??new Map;}async readFile(e){let t=this.toKey(e),r=this.store.get(t);if(r===void 0)throw new Error(`BrowserFsAdapter: file not found: ${e}`);return r}async exists(e){return this.store.has(this.toKey(e))}resolvePath(...e){let t=e.map(i=>i.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),r=t.split("/"),o=[];for(let i of r)i==="."||i===""||(i===".."?o.pop():o.push(i));let s=o.join("/");return t.startsWith("/")?`/${s}`:s}isAbsolute(e){return e.startsWith("/")}setItem(e,t){this.store.set(this.toKey(e),t);}removeItem(e){this.store.delete(this.toKey(e));}keys(){return Array.from(this.store.keys()).filter(e=>e.startsWith(this.prefix)).map(e=>e.slice(this.prefix.length))}async readdir(e){let t=e.replace(/\\/g,"/").replace(/\/$/,""),r=this.toKey(t+"/"),o=[];for(let s of this.store.keys())if(s.startsWith(r)){let a=s.slice(r.length).split("/")[0];a&&!o.includes(a)&&o.push(a);}return o}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};p();var zn="default",Kn="archive",Ts=/^[a-zA-Z0-9_-]{1,64}$/;function Ps(n){return n===zn||n===Kn}function vl(n){let e={id:zn,name:"Default",workflowId:"wi-default-flow",system:true,readOnly:false},t={id:Kn,name:"Archive",workflowId:"",system:true,readOnly:true},r=n?.settings?.wi?.boards;if(!Array.isArray(r)||r.length===0)return [e,t];let o=new Set,s=[];for(let i of r){if(!i||typeof i!="object")continue;let a=i,d=a.id,l=a.name,c=a.workflow_id;if(typeof d!="string"||d.length===0||typeof l!="string"||l.length===0||typeof c!="string"||c.length===0||Ps(d)||!Ts.test(d)||o.has(d))continue;o.add(d);let f=typeof a.description=="string"?a.description:void 0,g=typeof a.goal_id=="string"?a.goal_id:void 0;s.push({id:d,name:l,workflowId:c,...f!==void 0?{description:f}:{},...g!==void 0?{goalId:g}:{},system:false,readOnly:false});}return [e,...s,t]}p();function Xt(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function bs(n,e){let t={...n};for(let[r,o]of Object.entries(e))Xt(o)&&Xt(t[r])?t[r]=bs(t[r],o):t[r]=o;return t}function Il(n){let e=n?.filePath??K.join(qa.homedir(),".crewx","crewx.yaml"),t=null,r=null;function o(){try{return rs.statSync(e).mtimeMs}catch{return null}}function s(){let i=o();if(i===null)return t=null,r=null,{};if(r!==null&&t===i)return r;let a=null;try{a=jsYaml.load(rs.readFileSync(e,"utf-8"));}catch{a=null;}let d=Xt(a)?a:{};return r=d,t=i,d}return {get path(){return e},read(){let i=s();return Xt(i.settings)?i.settings:{}},update(i){let a=s(),d=Xt(a.settings)?a.settings:{},l=bs(d,i),c={...a,settings:l};rs.mkdirSync(K.dirname(e),{recursive:true});let f=`${e}.tmp`;return rs.writeFileSync(f,jsYaml.dump(c)),rs.renameSync(f,e),t=null,r=null,l}}}p();ye();function Gn(n){if(!n)return "";let e=n.lastIndexOf("/");return e===-1?n.trim():n.slice(e+1).trim()}function Ss(n){return n?yt(n).models.length>0:false}function Vn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Ol(n,e,t){let r=n,o=false,s=[],i=()=>(o||(r={...n},o=true),r),a=typeof r.provider=="string"&&r.provider.trim()?Gn(r.provider):e,d=typeof r.model=="string"&&r.model.trim()?r.model.trim():t;Ss(a)&&(typeof r.mode=="string"&&(Ct(a).map(f=>f.id).includes(r.mode)||(delete i().mode,s.push("mode"))),typeof r.effort=="string"&&(Tt(a,d).includes(r.effort)||(delete i().effort,s.push("effort"))));let l=r.overdrive;if(Vn(l)){let c=Gn(typeof l.provider=="string"?l.provider:void 0),f=typeof l.model=="string"?l.model:void 0;if(Ss(c)){let g,m=()=>(g||(g={...l},i().overdrive=g),g);typeof l.mode=="string"&&(Ct(c).map(k=>k.id).includes(l.mode)||(delete m().mode,s.push("overdrive.mode"))),typeof l.effort=="string"&&(Tt(c,f).includes(l.effort)||(delete m().effort,s.push("overdrive.effort")));}}return {block:r,removed:s}}function Ml(n){let{options:e}=n;if(!Vn(e))return {options:e,changed:false,removed:[]};let t=Gn(n.provider),r=[],o=e,s=false,i=()=>(s||(o={...e},s=true),o);for(let a of ["query","execute"]){let d=e[a];if(!Vn(d))continue;let{block:l,removed:c}=Ol(d,t,n.model);c.length>0&&(i()[a]=l,r.push(...c.map(f=>`${a}.${f}`)));}return {options:o,changed:r.length>0,removed:r}}p();var Nl="https://api.crewx.dev/v1/models",Dl=3600*1e3,Is=0;async function Ll(n){let e=n?.ttlMs??Dl,t=Date.now();if(!(t-Is<e)){Is=t;try{let r=await fetch(n?.endpoint??Nl);if(!r.ok)return;let o=await r.json();if(!o?.models||typeof o.models!="object")return;let s={};for(let[i,a]of Object.entries(o.models))a!=null&&(s[i]={input:a.input,cachedInput:a.cachedInput,output:a.output});Po(s);}catch{}}}p();ye();var $l="https://api.crewx.dev/v1/models",Ul=900*1e3,Os=0;async function jl(n){let e=n?.ttlMs??Ul,t=Date.now();if(!(t-Os<e)){Os=t;try{let r=await fetch(n?.endpoint??$l);if(!r.ok)return;let o=await r.json();if(!o?.providers||typeof o.providers!="object")return;let s={};for(let[i,a]of Object.entries(o.providers)){let d=Array.isArray(a)?a:a.models??[],l=Array.isArray(a)?[]:a.modes??[],c=Array.isArray(a)?[]:a.effort??[],f=Array.isArray(a)?{}:a.modelOverrides??{},g=d.filter(m=>m!=null&&typeof m.id=="string").map(m=>({id:m.id,name:m.name??m.id,...m.description!=null?{description:m.description}:{}}));s[i]={models:g,modes:l.filter(m=>m!=null&&typeof m.id=="string").map(m=>({id:m.id,name:m.name??m.id,...m.description!=null?{description:m.description}:{}})),effort:c.filter(m=>typeof m=="string"),modelOverrides:f};}Wr(s);}catch{}}}p();function Fl(n,e){let t=n.skills?.include;if(t===void 0)return [...e];if(t.length===0)return [];let r=new Set(t);return e.filter(o=>r.has(o))}p();var Jn=["codex","claude","opencode","antigravity","copilot"];function Hl(n){let e=n.indexOf("/");return e===-1?n:n.slice(e+1)}function Xn(n){let e=Hl(n),t=Jn.indexOf(e);return t===-1?Jn.length:t}function Yt(n,e){return Xn(n)-Xn(e)}var ql=new Set(["claude","copilot","codex","opencode"]);function Wl(n){if(!n)return "";if(n.startsWith("acp/")){let e=n.slice(4);if(ql.has(e))return `cli/${e}`}return n}ye();we();Cn();Tn();p();Pn();De();p();Tr();Or();ye();var Bl="model",zl="mode",Kl="thought_level";function Yn(n){if(n.length===0)return [];if(n[0]?.group!=null){let e=[];for(let t of n)for(let r of t.options??[])e.push(r);return e}return n}function Gl(n,e){let t=new Map;for(let r of [...n,...e])t.has(r.id)||t.set(r.id,r);return Array.from(t.values())}function Vl(n,e,t,r){let o=t.agentInfo?.name,s=e??o??n,i=r.configOptions??[],d=(r.modes?.availableModes??[]).map(h=>({id:h.id,name:h.name,...h.description!=null?{description:h.description}:{}})),l=[];for(let h of i)if(h.category?.trim().toLowerCase()===zl&&h.options!=null)for(let _ of Yn(h.options))_.value!=null&&l.push({id:_.value,name:_.name??_.value});let c=Gl(d,l),f=[];for(let h of i)if(h.category?.trim().toLowerCase()===Kl&&h.type==="select")for(let _ of Yn(h.options??[]))_.value!=null&&f.push(_.value);if(n==="claude"){let h=Pt().map(A=>({id:A.id,name:A.name})),_=Ms(t);return Ns(n,{models:h,modes:c,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${n}`,name:s,modes:c,effort:f,models:h,capabilities:_}}let m=(r.models?.availableModels??[]).map(h=>({id:h.modelId})),w=[];for(let h of i)if(h.category?.trim().toLowerCase()===Bl&&h.options!=null)for(let _ of Yn(h.options))_.value!=null&&w.push({id:_.value,..._.name!=null?{name:_.name}:{}});let k=bt(m,w);Ns(n,{models:k,modes:c,availableModelsCount:m.length,configModelsCount:w.length,skipModelWarn:false});let v=Ms(t);return {id:`acp/${n}`,name:s,modes:c,effort:f,models:k,capabilities:v}}function Ms(n){let e=n.agentCapabilities??{};return {loadSession:e.loadSession??false,image:e.promptCapabilities?.image??false,audio:e.promptCapabilities?.audio??false,mcp:e.mcpCapabilities!=null}}function Ns(n,e){!e.skipModelWarn&&e.models.length===0&&console.warn(`[acp] ${n} meta: models empty (availableModels=${e.availableModelsCount}, configOptions[model]=${e.configModelsCount})`),e.modes.length===0&&console.warn(`[acp] ${n} meta: modes empty`);}async function Ds(n){let e=exports.ACP_ADAPTERS[n];if(!e)return null;let t=e.meta?.displayName,r=new exports.AcpConnection({spawn:e.spawn,cwd:process.cwd()});try{await r.connect(e.clientInfo);let o=r.initResponse;if(!o)return null;let s=e.buildSessionParams({cwd:process.cwd()}),i=await r.newSessionRaw(s);return Vl(n,t,o,i)}catch(o){return console.warn(`[acp] ${n} meta query failed: ${o instanceof Error?o.message:String(o)}`),null}finally{await r.dispose();}}async function Jl(){let n=Object.keys(exports.ACP_ADAPTERS),e=await Promise.allSettled(n.map(r=>Ds(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t.sort((r,o)=>Yt(r.id,o.id))}Tr();bn();Or();Nn();jr();Ne();p();Ne();ye();function Yl(n){return n.charAt(0).toUpperCase()+n.slice(1)}async function Ls(){return new Promise(n=>{child_process.execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(t,r)=>{if(t){n([]);return}let o=r.split(`
304
+ `).map(s=>s.trim()).filter(s=>s.length>0).map(s=>({id:s}));n(o);}).on("error",()=>n([]));})}function Ql(n,e,t){if(!e.meta)return null;let r=e.meta.capabilities??{},o=Qe(n),s=o.length>0?o:e.meta.models??[],i=t!==void 0?bt(t,s):s;return {id:`cli/${n}`,name:e.meta.displayName??Yl(n),modes:Ct(n),effort:Tt(n),models:i,modelOverrides:_o(n),capabilities:{loadSession:r.loadSession??false,resume:r.resume??false,image:r.image??false,audio:r.audio??false,mcp:r.mcp??false}}}async function Zl(n={}){let e=n.includeOpencodeRuntimeModels?await Ls():void 0,t=[];for(let[r,o]of Object.entries(exports.BUILTIN_ADAPTERS)){let i=Ql(r,o,r==="opencode"?e:void 0);i&&t.push(i);}return t.sort((r,o)=>Yt(r.id,o.id))}p();var Qn=0;function ec(n){let e=n.meta?.taskId,t=e?` taskId=${e}`:"";if(n.ok)return `Task completed:${t}
262
305
 
263
306
  ${n.data}`;let r=n.error?.message??"Unknown error";return `Task failed:${t}
264
- Error: ${r}`}function ad(n){let e=Array.from(n.agents.keys());return {name:"delegate_to_agent",description:`Delegate a task to another agent. Available agents: ${e.join(", ")}`,parameters:{type:"object",properties:{agent:{type:"string",description:`Agent ID to delegate to. One of: ${e.join(", ")}`},message:{type:"string",description:"Task description for the target agent"},mode:{type:"string",description:'Execution mode: "query" for questions, "execute" for actions. Default: query'}},required:["agent","message"]},execute:async t=>{if(ln>=3)return "Error: Maximum delegation depth (3) reached. Cannot delegate further.";let r=t.agent,o=t.message,s=t.mode??"query";if(!e.includes(r))return `Error: Unknown agent "${r}". Available: ${e.join(", ")}`;ln++;try{let i=s==="execute"?await n.execute(r,o):await n.query(r,o);return id(i)}finally{ln--;}}}}c();var Do=typeof process<"u"?process.env:{};function dd(){return Do.CREWX_CLI||"npx crewx"}function ld(){return Do.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}c();var cd=/^[a-zA-Z0-9._-]+$/,cn=class{constructor(e){this.storage=e;}storage;listBoxes(e){this.validateId(e);let r=this.storage.listBoxes(e).map(o=>this.toBoxResponse(o));return {boxes:r,total:r.length}}getBox(e,t){this.validateId(e),this.validateId(t);let r=this.storage.findBox(e,t);return r?this.toBoxResponse(r):null}createBox(e,t){this.validateId(e);let r=this.generateBoxId(),o=new Date().toISOString(),s=this.storage.insertBox(e,{id:r,seq:t.seq,firstTaskId:t.firstTaskId,midTaskId:t.midTaskId,lastTaskId:t.lastTaskId,taskCount:t.taskCount,summary:t.summary??null,sourceTokens:t.sourceTokens,summaryTokens:t.summaryTokens??null,createdAt:o});return this.toBoxResponse(s)}toBoxResponse(e){return {id:e.id,threadId:e.thread_id,seq:e.seq,firstTaskId:e.first_task_id,lastTaskId:e.last_task_id,taskCount:e.task_count,sourceTokens:e.source_tokens,summaryTokens:e.summary_tokens,summary:e.summary,previewFirst:this.storage.getTaskPreview(e.first_task_id,200),previewMid:this.storage.getTaskPreview(e.mid_task_id,200),previewLast:this.storage.getTaskPreview(e.last_task_id,200),createdAt:e.created_at}}validateId(e){if(!cd.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return De("box")}};c();function ud(n,e,t,r,o){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=r,d=s*i,l=s*a,u=d+l,p=e.getThreadMessages(n),f=[],g=0,h=false,x=[];for(let _=0;_<p.length;_+=2){let k=p[_],S=p[_+1],b=k?.content||"",B=S?.content||"",q=o.countTokens(b+B),A=[];k&&A.push(k),S&&A.push(S),x.push({messages:A,tokens:q});}for(let _=x.length-1;_>=0;_--){let k=x[_];if(g+k.tokens>d){h=true;break}g+=k.tokens,f.unshift(...k.messages);}let v=[],w=0;if(h&&l>0)try{let{boxes:_}=t.listBoxes(n);for(let k=_.length-1;k>=0;k--){let S=_[k],b=S.summaryTokens??S.sourceTokens;if(w+b>l)break;w+=b,v.unshift({boxId:S.id,seq:S.seq,taskCount:S.taskCount,sourceTokens:S.sourceTokens,summary:S.summary,previewFirst:S.previewFirst,previewMid:S.previewMid,previewLast:S.previewLast,createdAt:S.createdAt});}}catch(_){if(_ instanceof Error&&!/not found/i.test(_.message))throw _}return {hot:f,warm:v,hotTokens:g,warmTokens:w,hotOverflow:h,totalBudget:u,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}Ee();Xe();c();var nr=class extends Error{constructor(t,r){super(`Task ${t} timed out after ${r}ms`);this.taskId=t;this.timeoutMs=r;this.name="ParallelRunnerTimeoutError";}taskId;timeoutMs},Ct=class{constructor(e={}){this.defaults=e;}defaults;metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0};async run(e,t={}){if(!Array.isArray(e))throw new TypeError("ParallelRunner.run expects an array of tasks");if(e.length===0)return this.metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0},[];let r=this.mergeOptions(t),o=Math.max(1,r.maxConcurrency??5),s=r.timeoutMs,i=r.failFast??false,a=r.callbacks,d=r.evaluateTaskSuccess??(()=>true),l=[],u=0,p=0,f=0,g=false,h=0,x=perf_hooks.performance.now(),v=async A=>{a?.onTaskStart&&await a.onTaskStart(A),f+=1;let H=new AbortController,z={signal:H.signal},W,j;typeof s=="number"&&Number.isFinite(s)&&s>0&&(j=new Promise((I,P)=>{W=setTimeout(()=>{let E=new nr(A.id,s);H.abort(E),P(E);},s);}));let K=perf_hooks.performance.now(),F=A.run(z),R=j?Promise.race([F,j]):F;try{let I=await R,P=perf_hooks.performance.now(),E=P-K,$=d(I,A),X={taskId:A.id,success:$,value:I,durationMs:E,startedAt:K,finishedAt:P,metadata:A.metadata,aborted:!1};l.push(X),$?u+=1:p+=1,a?.onTaskComplete&&await a.onTaskComplete(X),i&&!$&&(g=!0);}catch(I){let P=perf_hooks.performance.now(),E=P-K,$=I instanceof Error?I:new Error(String(I)),X={taskId:A.id,success:false,error:$,durationMs:E,startedAt:K,finishedAt:P,metadata:A.metadata,aborted:H.signal.aborted};l.push(X),p+=1,a?.onError&&await a.onError(A,$,E),i&&(g=true);}finally{W&&clearTimeout(W),j&&F.catch(()=>{});}},w=async()=>{for(;!g;){let A=h;if(A>=e.length)break;h+=1;let H=e[A];if(!H||(await v(H),g))break}},_=Math.min(o,e.length),k=[];for(let A=0;A<_;A++)k.push(w());await Promise.all(k);let b=perf_hooks.performance.now()-x,B=l.length?l.reduce((A,H)=>A+H.durationMs,0)/l.length:0,q=b>0?l.length/(b/1e3):l.length;return this.metrics={totalTasks:e.length,startedTasks:f,completedTasks:l.length,successCount:u,failureCount:p,totalDurationMs:b,averageDurationMs:B,throughput:q},l}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,t){if(!(!e&&!t))return {onTaskStart:async r=>{e?.onTaskStart&&await e.onTaskStart(r),t?.onTaskStart&&await t.onTaskStart(r);},onTaskComplete:async r=>{e?.onTaskComplete&&await e.onTaskComplete(r),t?.onTaskComplete&&await t.onTaskComplete(r);},onError:async(r,o,s)=>{e?.onError&&await e.onError(r,o,s),t?.onError&&await t.onError(r,o,s);}}}};c();c();var Tt=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 Lo=3,$o=3e4,Uo=500,pd=n=>{if(typeof n!="number"||Number.isNaN(n)||!Number.isFinite(n))return Lo;let e=Math.floor(n);return e>0?e:Lo},gd=n=>n===void 0||typeof n!="number"||Number.isNaN(n)||n<=0?$o:n,md=n=>{if(!n)return {maxRetries:0,retryDelay:Uo};let e=Number.isInteger(n.maxRetries)&&n.maxRetries>=0?n.maxRetries:0,t=typeof n.retryDelay=="number"&&n.retryDelay>=0?n.retryDelay:Uo;return {maxRetries:e,retryDelay:t}},un=n=>{let e=n.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},fd=(n,e)=>n<=0?Promise.resolve():new Promise((t,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},n),s=()=>{clearTimeout(o),r(un(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),yd=async(n,e,t)=>{let r,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw un(t);try{let i=await n();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw un(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await fd(e.retryDelay,t);}if(r)return r;throw o?o instanceof Error?o:new Error(String(o)):new Error("Parallel helper encountered an unexpected state")},jo=(n,e,t)=>{e.completed+=1,t?e.success+=1:e.failure+=1;try{n.onProgress?.(e.completed,e.total);}catch(r){process.env.NODE_ENV!=="production"&&console.warn("Parallel helper onProgress callback threw an error:",r);}},hd=n=>n.map(t=>({metadata:t.metadata,taskResult:t})).slice().sort((t,r)=>t.metadata.index-r.metadata.index).map(({metadata:t,taskResult:r})=>{if(r.value){let s=r.value;return {...s,agentId:s.agentId??t.request.agentId,metadata:{...s.metadata,requestIndex:t.index,mode:t.mode}}}let o=r.error??new Error("Unknown error");return {agentId:t.request.agentId,content:o.message,success:false,metadata:{error:o.message,aborted:r.aborted??false,requestIndex:t.index,mode:t.mode}}}),wd=n=>n.filter(e=>!e.success).map(e=>{let t=e.metadata;if(e.error instanceof Error)return {index:t.index,error:e.error};if(e.value&&!e.value.success){let r=String(e.value.metadata?.error??e.value.content??"Agent returned unsuccessful result");return {index:t.index,error:new Error(r)}}return {index:t.index,error:new Error("Unknown failure")}}),xd=(n,e)=>({onTaskComplete:async t=>{jo(e,n,t.success);},onError:async()=>{jo(e,n,false);}}),Ho=async(n,e,t={})=>{if(!Array.isArray(n))throw new TypeError("Parallel helpers expect an array of requests");if(n.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 t.onComplete?.(v),[]}let r=pd(t.concurrency),o=gd(t.timeout),s=md(t.retryPolicy),i=new Ct,a=new Tt,d=n.map((x,v)=>({id:`${e}:${x.agentId??"anonymous"}:${v}`,metadata:{index:v,mode:e,request:x},run:w=>yd(()=>e==="query"?a.query(x):a.execute(x),s,w.signal)})),l={completed:0,success:0,failure:0,total:n.length},u=await i.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:x=>x.success,callbacks:xd(l,t)}),p=hd(u),f=wd(u),g=i.getMetrics(),h={total:n.length,completed:n.length,successCount:p.filter(x=>x.success).length,failureCount:p.filter(x=>!x.success).length,results:p,errors:f,metrics:g};return t.onComplete?.(h),p},kd=(n,e)=>Ho(n,"query",e),_d=(n,e)=>Ho(n,"execute",e);Qr();c();var pn=class extends Qe{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=G.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=G.dirname(t);so.existsSync(o)||so.mkdirSync(o,{recursive:true});}else if(!so.existsSync(t))throw new M("NOT_FOUND","Database not found");let r=ke(t);if(e)try{Bt(r.db,t);}catch(o){throw r.close(),o}return r}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(Ue).values(e).run();}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to insert span",r)}finally{t.close();}}findByTaskId(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.select().from(Ue).where(drizzleOrm.eq(Ue.task_id,e)).all()}catch(r){throw new M("DB_ERROR","Failed to find spans by task id",r)}finally{t.close();}}findById(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(Ue).where(drizzleOrm.eq(Ue.id,e)).limit(1).get()??void 0}catch(r){throw new M("DB_ERROR","Failed to find span by id",r)}finally{t.close();}}};Yr();Jr();Xr();c();c();var or=class{capabilities={required:[]}};c();c();c();var Bo=2e3;function Wo(n){let e=n.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=Bo?e:e.slice(0,Bo-11)+" [redacted]"}var Od=10*1024*1024,Md={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function gn(n,e){return n===void 0?true:Array.isArray(n)?n.includes(e):n===e}function Nd(n,e){return n===void 0?true:Array.isArray(n)?n.some(t=>e.includes(t)):e.includes(n)}function Ko(n){if(typeof n=="number")return n;let e=n.match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i);if(!e)return 0;let t=parseFloat(e[1]),r=(e[2]??"b").toLowerCase();return Math.floor(t*(Md[r]??1))}function Vo(n){return typeof n=="string"}function Go(n){try{let e=so.statSync(n);return e.size>Od?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${n} (${e.size} bytes)
265
- `),null):so.readFileSync(n,"utf8").split(`
266
- `).length}catch{return null}}function Xo(n){try{return so.statSync(n).size}catch{return null}}function Dd(n,e,t){if(!n)return true;let r=e,o=r?.path??r?.file_path??r?.filePath??r?.filename;if(typeof o!="string")return false;if(ue(o,n))return true;if(t&&o.startsWith("/")){let{relative:s,isAbsolute:i}=J("path");if(i(o)){let a=s(t,o);if(a&&!a.startsWith("..")&&ue(a,n))return true}}return false}function Ld(n,e){return n?JSON.stringify(e).includes(n):true}function $d(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Ud(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function jd(n,e){if(n.pathSizeMin===void 0&&n.pathSizeMax===void 0)return true;let t=e,r=t?.path??t?.file_path??t?.filePath??t?.filename;if(typeof r!="string")return false;if(n.pathSizeMin!==void 0)if(Vo(n.pathSizeMin)){let o=Xo(r);if(o===null||o<Ko(n.pathSizeMin))return false}else {let o=Go(r);if(o===null||o<n.pathSizeMin)return false}if(n.pathSizeMax!==void 0)if(Vo(n.pathSizeMax)){let o=Xo(r);if(o===null||o>Ko(n.pathSizeMax))return false}else {let o=Go(r);if(o===null||o>n.pathSizeMax)return false}return true}function Hd(n){let e=[],t=[];for(let r=0;r<n.length;r++){let o=n[r];if(!o||typeof o!="object"){t.push(`Hook at index ${r}: not an object, skipping`);continue}let s=o;if(typeof s.name!="string"||!s.name){t.push(`Hook at index ${r}: missing or invalid "name", skipping`);continue}let i=s.guide&&typeof s.guide=="object",a=s.deny&&typeof s.deny=="object",d=typeof s.plugin=="string";if(!i&&!a&&!d){t.push(`Hook "${s.name}": missing guide/deny/plugin, skipping`);continue}if(i&&typeof s.guide.say!="string"){t.push(`Hook "${s.name}": guide.say is required and must be string, skipping`);continue}if(a&&typeof s.deny.reason!="string"){t.push(`Hook "${s.name}": deny.reason is required and must be string, skipping`);continue}e.push(s);}return {valid:e,warnings:t}}var fn=class extends or{name="@crewx/yaml-hook-plugin";version="0.1.0";capabilities={required:["inject"]};hooks;agentMap;constructor(e){super(),this.hooks=e.hooks,this.agentMap=new Map((e.agents??[]).map(t=>[t.id,t]));}async run(e){let t=[],r=process.env.CREWX_TASK_LOG_PATH,o=process.env.CREWX_HOOK_LOG_VERBOSE==="1";for(let s of this.hooks)if(this.matchEntryLevel(s,e)&&s.guide){if(!this.matchRuleLevel(s.guide,e)){o&&r&&this.appendHookLog(r,{rule:s.name,action:"pass",once:s.guide.once??false,ctx:e,matched:false});continue}s.guide.once&&this.hasFired(e.sessionId,s.name)||(s.guide.once&&this.markFired(e.sessionId,s.name),t.push(s.guide.say),r&&this.appendHookLog(r,{rule:s.name,action:"inject",once:s.guide.once??false,ctx:e,matched:true,message:s.guide.say}));}return t.length?e.inject(t.join(`
307
+ Error: ${r}`}function tc(n){let e=Array.from(n.agents.keys());return {name:"delegate_to_agent",description:`Delegate a task to another agent. Available agents: ${e.join(", ")}`,parameters:{type:"object",properties:{agent:{type:"string",description:`Agent ID to delegate to. One of: ${e.join(", ")}`},message:{type:"string",description:"Task description for the target agent"},mode:{type:"string",description:'Execution mode: "query" for questions, "execute" for actions. Default: query'}},required:["agent","message"]},execute:async t=>{if(Qn>=3)return "Error: Maximum delegation depth (3) reached. Cannot delegate further.";let r=t.agent,o=t.message,s=t.mode??"query";if(!e.includes(r))return `Error: Unknown agent "${r}". Available: ${e.join(", ")}`;Qn++;try{let i=s==="execute"?await n.execute(r,o):await n.query(r,o);return ec(i)}finally{Qn--;}}}}p();var $s=typeof process<"u"?process.env:{};function rc(){return $s.CREWX_CLI||"npx crewx"}function nc(){return $s.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}p();var oc=/^[a-zA-Z0-9._-]+$/,Zn=class{constructor(e){this.storage=e;}storage;listBoxes(e){this.validateId(e);let r=this.storage.listBoxes(e).map(o=>this.toBoxResponse(o));return {boxes:r,total:r.length}}getBox(e,t){this.validateId(e),this.validateId(t);let r=this.storage.findBox(e,t);return r?this.toBoxResponse(r):null}createBox(e,t){this.validateId(e);let r=this.generateBoxId(),o=new Date().toISOString(),s=this.storage.insertBox(e,{id:r,seq:t.seq,firstTaskId:t.firstTaskId,midTaskId:t.midTaskId,lastTaskId:t.lastTaskId,taskCount:t.taskCount,summary:t.summary??null,sourceTokens:t.sourceTokens,summaryTokens:t.summaryTokens??null,createdAt:o});return this.toBoxResponse(s)}toBoxResponse(e){return {id:e.id,threadId:e.thread_id,seq:e.seq,firstTaskId:e.first_task_id,lastTaskId:e.last_task_id,taskCount:e.task_count,sourceTokens:e.source_tokens,summaryTokens:e.summary_tokens,summary:e.summary,previewFirst:this.storage.getTaskPreview(e.first_task_id,200),previewMid:this.storage.getTaskPreview(e.mid_task_id,200),previewLast:this.storage.getTaskPreview(e.last_task_id,200),createdAt:e.created_at}}validateId(e){if(!oc.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return rt("box")}};p();function sc(n,e,t,r,o){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=r,d=s*i,l=s*a,c=d+l,f=e.getThreadMessages(n),g=[],m=0,w=false,k=[];for(let _=0;_<f.length;_+=2){let A=f[_],I=f[_+1],b=A?.content||"",V=I?.content||"",$=o.countTokens(b+V),S=[];A&&S.push(A),I&&S.push(I),k.push({messages:S,tokens:$});}for(let _=k.length-1;_>=0;_--){let A=k[_];if(m+A.tokens>d){w=true;break}m+=A.tokens,g.unshift(...A.messages);}let v=[],h=0;if(w&&l>0)try{let{boxes:_}=t.listBoxes(n);for(let A=_.length-1;A>=0;A--){let I=_[A],b=I.summaryTokens??I.sourceTokens;if(h+b>l)break;h+=b,v.unshift({boxId:I.id,seq:I.seq,taskCount:I.taskCount,sourceTokens:I.sourceTokens,summary:I.summary,previewFirst:I.previewFirst,previewMid:I.previewMid,previewLast:I.previewLast,createdAt:I.createdAt});}}catch(_){if(_ instanceof Error&&!/not found/i.test(_.message))throw _}return {hot:g,warm:v,hotTokens:m,warmTokens:h,hotOverflow:w,totalBudget:c,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}Ne();Ve();p();var Mr=class extends Error{constructor(t,r){super(`Task ${t} timed out after ${r}ms`);this.taskId=t;this.timeoutMs=r;this.name="ParallelRunnerTimeoutError";}taskId;timeoutMs},Zt=class{constructor(e={}){this.defaults=e;}defaults;metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0};async run(e,t={}){if(!Array.isArray(e))throw new TypeError("ParallelRunner.run expects an array of tasks");if(e.length===0)return this.metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0},[];let r=this.mergeOptions(t),o=Math.max(1,r.maxConcurrency??5),s=r.timeoutMs,i=r.failFast??false,a=r.callbacks,d=r.evaluateTaskSuccess??(()=>true),l=[],c=0,f=0,g=0,m=false,w=0,k=perf_hooks.performance.now(),v=async S=>{a?.onTaskStart&&await a.onTaskStart(S),g+=1;let N=new AbortController,se={signal:N.signal},Y,D;typeof s=="number"&&Number.isFinite(s)&&s>0&&(D=new Promise((W,H)=>{Y=setTimeout(()=>{let Q=new Mr(S.id,s);N.abort(Q),H(Q);},s);}));let Z=perf_hooks.performance.now(),U=S.run(se),ee=D?Promise.race([U,D]):U;try{let W=await ee,H=perf_hooks.performance.now(),Q=H-Z,J=d(W,S),B={taskId:S.id,success:J,value:W,durationMs:Q,startedAt:Z,finishedAt:H,metadata:S.metadata,aborted:!1};l.push(B),J?c+=1:f+=1,a?.onTaskComplete&&await a.onTaskComplete(B),i&&!J&&(m=!0);}catch(W){let H=perf_hooks.performance.now(),Q=H-Z,J=W instanceof Error?W:new Error(String(W)),B={taskId:S.id,success:false,error:J,durationMs:Q,startedAt:Z,finishedAt:H,metadata:S.metadata,aborted:N.signal.aborted};l.push(B),f+=1,a?.onError&&await a.onError(S,J,Q),i&&(m=true);}finally{Y&&clearTimeout(Y),D&&U.catch(()=>{});}},h=async()=>{for(;!m;){let S=w;if(S>=e.length)break;w+=1;let N=e[S];if(!N||(await v(N),m))break}},_=Math.min(o,e.length),A=[];for(let S=0;S<_;S++)A.push(h());await Promise.all(A);let b=perf_hooks.performance.now()-k,V=l.length?l.reduce((S,N)=>S+N.durationMs,0)/l.length:0,$=b>0?l.length/(b/1e3):l.length;return this.metrics={totalTasks:e.length,startedTasks:g,completedTasks:l.length,successCount:c,failureCount:f,totalDurationMs:b,averageDurationMs:V,throughput:$},l}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,t){if(!(!e&&!t))return {onTaskStart:async r=>{e?.onTaskStart&&await e.onTaskStart(r),t?.onTaskStart&&await t.onTaskStart(r);},onTaskComplete:async r=>{e?.onTaskComplete&&await e.onTaskComplete(r),t?.onTaskComplete&&await t.onTaskComplete(r);},onError:async(r,o,s)=>{e?.onError&&await e.onError(r,o,s),t?.onError&&await t.onError(r,o,s);}}}};p();p();var er=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 Us=3,js=3e4,Fs=500,ic=n=>{if(typeof n!="number"||Number.isNaN(n)||!Number.isFinite(n))return Us;let e=Math.floor(n);return e>0?e:Us},ac=n=>n===void 0||typeof n!="number"||Number.isNaN(n)||n<=0?js:n,dc=n=>{if(!n)return {maxRetries:0,retryDelay:Fs};let e=Number.isInteger(n.maxRetries)&&n.maxRetries>=0?n.maxRetries:0,t=typeof n.retryDelay=="number"&&n.retryDelay>=0?n.retryDelay:Fs;return {maxRetries:e,retryDelay:t}},eo=n=>{let e=n.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},lc=(n,e)=>n<=0?Promise.resolve():new Promise((t,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},n),s=()=>{clearTimeout(o),r(eo(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),cc=async(n,e,t)=>{let r,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw eo(t);try{let i=await n();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw eo(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await lc(e.retryDelay,t);}if(r)return r;throw o?o instanceof Error?o:new Error(String(o)):new Error("Parallel helper encountered an unexpected state")},Hs=(n,e,t)=>{e.completed+=1,t?e.success+=1:e.failure+=1;try{n.onProgress?.(e.completed,e.total);}catch(r){process.env.NODE_ENV!=="production"&&console.warn("Parallel helper onProgress callback threw an error:",r);}},uc=n=>n.map(t=>({metadata:t.metadata,taskResult:t})).slice().sort((t,r)=>t.metadata.index-r.metadata.index).map(({metadata:t,taskResult:r})=>{if(r.value){let s=r.value;return {...s,agentId:s.agentId??t.request.agentId,metadata:{...s.metadata,requestIndex:t.index,mode:t.mode}}}let o=r.error??new Error("Unknown error");return {agentId:t.request.agentId,content:o.message,success:false,metadata:{error:o.message,aborted:r.aborted??false,requestIndex:t.index,mode:t.mode}}}),pc=n=>n.filter(e=>!e.success).map(e=>{let t=e.metadata;if(e.error instanceof Error)return {index:t.index,error:e.error};if(e.value&&!e.value.success){let r=String(e.value.metadata?.error??e.value.content??"Agent returned unsuccessful result");return {index:t.index,error:new Error(r)}}return {index:t.index,error:new Error("Unknown failure")}}),gc=(n,e)=>({onTaskComplete:async t=>{Hs(e,n,t.success);},onError:async()=>{Hs(e,n,false);}}),qs=async(n,e,t={})=>{if(!Array.isArray(n))throw new TypeError("Parallel helpers expect an array of requests");if(n.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 t.onComplete?.(v),[]}let r=ic(t.concurrency),o=ac(t.timeout),s=dc(t.retryPolicy),i=new Zt,a=new er,d=n.map((k,v)=>({id:`${e}:${k.agentId??"anonymous"}:${v}`,metadata:{index:v,mode:e,request:k},run:h=>cc(()=>e==="query"?a.query(k):a.execute(k),s,h.signal)})),l={completed:0,success:0,failure:0,total:n.length},c=await i.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:k=>k.success,callbacks:gc(l,t)}),f=uc(c),g=pc(c),m=i.getMetrics(),w={total:n.length,completed:n.length,successCount:f.filter(k=>k.success).length,failureCount:f.filter(k=>!k.success).length,results:f,errors:g,metrics:m};return t.onComplete?.(w),f},fc=(n,e)=>qs(n,"query",e),mc=(n,e)=>qs(n,"execute",e);Un();p();var to=class extends _t{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=K.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=K.dirname(t);rs.existsSync(o)||rs.mkdirSync(o,{recursive:true});}else if(!rs.existsSync(t))throw new T("NOT_FOUND","Database not found");let r=ve(t);if(e)try{vr(r.db,t);}catch(o){throw r.close(),o}return r}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(st).values(e).run();}catch(r){throw r instanceof T?r:new T("DB_ERROR","Failed to insert span",r)}finally{t.close();}}findByTaskId(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.select().from(st).where(drizzleOrm.eq(st.task_id,e)).all()}catch(r){throw new T("DB_ERROR","Failed to find spans by task id",r)}finally{t.close();}}findById(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(st).where(drizzleOrm.eq(st.id,e)).limit(1).get()??void 0}catch(r){throw new T("DB_ERROR","Failed to find span by id",r)}finally{t.close();}}};$n();Ln();Dn();p();p();var Nr=class{capabilities={required:[]}};p();p();p();var zs=2e3;function Ks(n){let e=n.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=zs?e:e.slice(0,zs-11)+" [redacted]"}var Cc=10*1024*1024,Tc={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function ro(n,e){return n===void 0?true:Array.isArray(n)?n.includes(e):n===e}function Pc(n,e){return n===void 0?true:Array.isArray(n)?n.some(t=>e.includes(t)):e.includes(n)}function Vs(n){if(typeof n=="number")return n;let e=n.match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i);if(!e)return 0;let t=parseFloat(e[1]),r=(e[2]??"b").toLowerCase();return Math.floor(t*(Tc[r]??1))}function Js(n){return typeof n=="string"}function Xs(n){try{let e=rs.statSync(n);return e.size>Cc?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${n} (${e.size} bytes)
308
+ `),null):rs.readFileSync(n,"utf8").split(`
309
+ `).length}catch{return null}}function Ys(n){try{return rs.statSync(n).size}catch{return null}}function bc(n,e,t){if(!n)return true;let r=e,o=r?.path??r?.file_path??r?.filePath??r?.filename;if(typeof o!="string")return false;if(me(o,n))return true;if(t&&o.startsWith("/")){let{relative:s,isAbsolute:i}=te("path");if(i(o)){let a=s(t,o);if(a&&!a.startsWith("..")&&me(a,n))return true}}return false}function Sc(n,e){return n?JSON.stringify(e).includes(n):true}function Ic(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Oc(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Mc(n,e){if(n.pathSizeMin===void 0&&n.pathSizeMax===void 0)return true;let t=e,r=t?.path??t?.file_path??t?.filePath??t?.filename;if(typeof r!="string")return false;if(n.pathSizeMin!==void 0)if(Js(n.pathSizeMin)){let o=Ys(r);if(o===null||o<Vs(n.pathSizeMin))return false}else {let o=Xs(r);if(o===null||o<n.pathSizeMin)return false}if(n.pathSizeMax!==void 0)if(Js(n.pathSizeMax)){let o=Ys(r);if(o===null||o>Vs(n.pathSizeMax))return false}else {let o=Xs(r);if(o===null||o>n.pathSizeMax)return false}return true}function Nc(n){let e=[],t=[];for(let r=0;r<n.length;r++){let o=n[r];if(!o||typeof o!="object"){t.push(`Hook at index ${r}: not an object, skipping`);continue}let s=o;if(typeof s.name!="string"||!s.name){t.push(`Hook at index ${r}: missing or invalid "name", skipping`);continue}let i=s.guide&&typeof s.guide=="object",a=s.deny&&typeof s.deny=="object",d=typeof s.plugin=="string";if(!i&&!a&&!d){t.push(`Hook "${s.name}": missing guide/deny/plugin, skipping`);continue}if(i&&typeof s.guide.say!="string"){t.push(`Hook "${s.name}": guide.say is required and must be string, skipping`);continue}if(a&&typeof s.deny.reason!="string"){t.push(`Hook "${s.name}": deny.reason is required and must be string, skipping`);continue}e.push(s);}return {valid:e,warnings:t}}var oo=class extends Nr{name="@crewx/yaml-hook-plugin";version="0.1.0";capabilities={required:["inject"]};hooks;agentMap;constructor(e){super(),this.hooks=e.hooks,this.agentMap=new Map((e.agents??[]).map(t=>[t.id,t]));}async run(e){let t=[],r=process.env.CREWX_TASK_LOG_PATH,o=process.env.CREWX_HOOK_LOG_VERBOSE==="1";for(let s of this.hooks)if(this.matchEntryLevel(s,e)&&s.guide){if(!this.matchRuleLevel(s.guide,e)){o&&r&&this.appendHookLog(r,{rule:s.name,action:"pass",once:s.guide.once??false,ctx:e,matched:false});continue}s.guide.once&&this.hasFired(e.sessionId,s.name)||(s.guide.once&&this.markFired(e.sessionId,s.name),t.push(s.guide.say),r&&this.appendHookLog(r,{rule:s.name,action:"inject",once:s.guide.once??false,ctx:e,matched:true,message:s.guide.say}));}return t.length?e.inject(t.join(`
267
310
 
268
- `)):e.pass()}appendHookLog(e,t){try{let r={rule:t.rule,action:t.action,once:t.once,sessionId:t.ctx.sessionId,provider:t.ctx.provider,agent:t.ctx.agent.id,toolName:t.ctx.tool.name,rawToolName:t.ctx.tool.rawName};t.message&&(r.chars=t.message.length,process.env.CREWX_HOOK_LOG_VERBOSE==="1"&&(r.message=Wo(t.message).slice(0,500)));let o=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
269
- `;so.appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let r=t.provider.replace(/^cli\//,"");if(!gn(e.provider,r))return false}if(e.team!==void 0){let o=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!gn(e.team,o))return false}if(e.role!==void 0){let o=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!gn(e.role,o))return false}if(e.tag!==void 0){let o=this.agentMap.get(t.agent.id)?.tags??[];if(!Nd(e.tag,o))return false}return !(e.agents!==void 0&&!e.agents.includes(t.agent.id))}matchRuleLevel(e,t){return !(e.when!==void 0&&e.when.length>0&&!e.when.includes(t.tool.name)&&!e.when.includes(t.tool.rawName)||!Ld(e.pattern,t.tool.input)||!$d(e.regex,t.tool.input)||!Dd(e.pathPattern,t.tool.input,t.cwd)||!jd(e,t.tool.input)||!Ud(e.whenInputRegex,t.tool.input))}hasFired(e,t){try{let r=this.firedFilePath(e);if(!so.existsSync(r))return !1;let o=JSON.parse(so.readFileSync(r,"utf8"));return Array.isArray(o.fired)&&o.fired.includes(t)}catch{return false}}markFired(e,t){try{let r=this.firedFilePath(e);so.mkdirSync(G.dirname(r),{recursive:!0,mode:448});let o=so.existsSync(r)?JSON.parse(so.readFileSync(r,"utf8")):{fired:[]};Array.isArray(o.fired)||(o.fired=[]),o.fired.includes(t)||(o.fired.push(t),so.writeFileSync(r,JSON.stringify(o),{mode:384}));}catch(r){process.stderr.write(`[YamlHookPlugin] once state write failed: ${r}
270
- `);}}firedFilePath(e){let t=crypto$1.createHash("sha1").update(e).digest("hex");return G.join(Ci.homedir(),".crewx","sessions",t,"fired-rules.json")}};c();c();c();function Fd(n){let e=n.messages.map(t=>({id:t.id,role:t.isAssistant?"assistant":"user",content:t.text,timestamp:new Date(t.timestamp).toISOString(),metadata:t.metadata??null}));return {getThreadMessages(t){return e}}}c();var yn=class extends Error{code;kind;retryAfterMs;constructor(e,t,r){super(`AdapterError: ${e}`),this.name="AdapterError",this.code=e,this.kind=t,this.retryAfterMs=r;}};c();function qd(n){return n}function Bd(n){return {name:n.name,async attach(e){let t=await n.configFactory(e),o=e.registerChannelAdapter,s=n.instanceId??n.name;o&&await o({adapter:n.adapter,instanceId:s,config:t}),n.onAttach&&await n.onAttach(e);},async detach(e){let r=e.unregisterChannelAdapter;r&&await r(n.instanceId??n.name),n.onDetach&&await n.onDetach(e);}}}Dt();exports.AdapterError=yn;exports.AgentNotFoundError=fe;exports.AgentRuntime=Tt;exports.AgentSkillsSchema=xn;exports.BrowserFsAdapter=on;exports.ConfigLoadError=Pe;exports.Crewx=tn;exports.CrewxPlugin=nn;exports.DocumentLoader=Me;exports.LayoutLoadError=Q;exports.LayoutLoader=ut;exports.LayoutRenderer=mt;exports.NodeFsAdapter=Ft;exports.PROVIDER_ORDER=sn;exports.ParallelRunner=Ct;exports.ParallelRunnerTimeoutError=nr;exports.PropsValidationError=xe;exports.PropsValidator=gt;exports.SdkBoxService=cn;exports.SpanRepository=pn;exports.TaskRepository=ht;exports.TemplateEngine=ct;exports.TypedEventEmitter=ft;exports.YamlHookPlugin=fn;exports.buildContext=ud;exports.compareProviders=Rt;exports.createAdapterContext=Sr;exports.createDelegateTool=ad;exports.createHandler=jr;exports.createPluginProviderFactory=To;exports.createProvider=we;exports.createRemoteProviderFactory=Ao;exports.createScopedAdapterStore=br;exports.defaultExtractText=Mr;exports.defaultFsAdapter=Oe;exports.defaultParseEvent=le;exports.defineChannelAdapter=qd;exports.defineChannelAdapterPlugin=Bd;exports.escapeHandlebarsHelper=Ar;exports.formatFileSizeHelper=Rr;exports.formatTimestamp=Tr;exports.formatTimestampHelper=Er;exports.generateFingerprint=pi;exports.generateId=De;exports.getSyncWindowStore=fi;exports.hashWorkspaceId=Hr;exports.lengthHelper=vr;exports.loadYamlFile=St;exports.materializeWindowsSpawnProgram=ot;exports.normalizeWorkspacePath=po;exports.parseStdoutEvent=at;exports.parseUsage=ye;exports.parseYamlContent=Pt;exports.providerRank=an;exports.queryAcpProviderMeta=No;exports.queryAllAcpProviderMetas=rd;exports.queryAllCliProviderMetas=sd;exports.registerAcpProviders=_o;exports.registerApiProviders=fo;exports.registerProviderFactory=he;exports.resolveAgent=Ot;exports.resolveAgentSkills=Ga;exports.resolveCrewxCli=dd;exports.resolveCrewxWorkspace=ld;exports.resolveDefaultAgentsYaml=ar;exports.resolveTemplatesPath=Ve;exports.resolveWindowsExecutablePath=vn;exports.resolveWindowsSpawnProgram=nt;exports.runExecutesParallel=_d;exports.runInSyncWindow=yi;exports.runQueriesParallel=kd;exports.setAuditVerbose=Ys;exports.toTaskReader=Fd;exports.toTemplateMessages=Or;exports.truncateHelper=_r;exports.validateHooksSchema=Hd;
311
+ `)):e.pass()}appendHookLog(e,t){try{let r={rule:t.rule,action:t.action,once:t.once,sessionId:t.ctx.sessionId,provider:t.ctx.provider,agent:t.ctx.agent.id,toolName:t.ctx.tool.name,rawToolName:t.ctx.tool.rawName};t.message&&(r.chars=t.message.length,process.env.CREWX_HOOK_LOG_VERBOSE==="1"&&(r.message=Ks(t.message).slice(0,500)));let o=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
312
+ `;rs.appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let r=t.provider.replace(/^cli\//,"");if(!ro(e.provider,r))return false}if(e.team!==void 0){let o=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!ro(e.team,o))return false}if(e.role!==void 0){let o=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!ro(e.role,o))return false}if(e.tag!==void 0){let o=this.agentMap.get(t.agent.id)?.tags??[];if(!Pc(e.tag,o))return false}return !(e.agents!==void 0&&!e.agents.includes(t.agent.id))}matchRuleLevel(e,t){return !(e.when!==void 0&&e.when.length>0&&!e.when.includes(t.tool.name)&&!e.when.includes(t.tool.rawName)||!Sc(e.pattern,t.tool.input)||!Ic(e.regex,t.tool.input)||!bc(e.pathPattern,t.tool.input,t.cwd)||!Mc(e,t.tool.input)||!Oc(e.whenInputRegex,t.tool.input))}hasFired(e,t){try{let r=this.firedFilePath(e);if(!rs.existsSync(r))return !1;let o=JSON.parse(rs.readFileSync(r,"utf8"));return Array.isArray(o.fired)&&o.fired.includes(t)}catch{return false}}markFired(e,t){try{let r=this.firedFilePath(e);rs.mkdirSync(K.dirname(r),{recursive:!0,mode:448});let o=rs.existsSync(r)?JSON.parse(rs.readFileSync(r,"utf8")):{fired:[]};Array.isArray(o.fired)||(o.fired=[]),o.fired.includes(t)||(o.fired.push(t),rs.writeFileSync(r,JSON.stringify(o),{mode:384}));}catch(r){process.stderr.write(`[YamlHookPlugin] once state write failed: ${r}
313
+ `);}}firedFilePath(e){let t=crypto$1.createHash("sha1").update(e).digest("hex");return K.join(qa.homedir(),".crewx","sessions",t,"fired-rules.json")}};p();p();p();function Dc(n){let e=n.messages.map(t=>({id:t.id,role:t.isAssistant?"assistant":"user",content:t.text,timestamp:new Date(t.timestamp).toISOString(),metadata:t.metadata??null}));return {getThreadMessages(t){return e}}}p();var so=class extends Error{code;kind;retryAfterMs;constructor(e,t,r){super(`AdapterError: ${e}`),this.name="AdapterError",this.code=e,this.kind=t,this.retryAfterMs=r;}};p();function Lc(n){return n}function $c(n){return {name:n.name,async attach(e){let t=await n.configFactory(e),o=e.registerChannelAdapter,s=n.instanceId??n.name;o&&await o({adapter:n.adapter,instanceId:s,config:t}),n.onAttach&&await n.onAttach(e);},async detach(e){let r=e.unregisterChannelAdapter;r&&await r(n.instanceId??n.name),n.onDetach&&await n.onDetach(e);}}}gt();exports.ARCHIVE_WI_BOARD_ID=Kn;exports.AdapterError=so;exports.AgentNotFoundError=Re;exports.AgentRuntime=er;exports.AgentSkillsSchema=ao;exports.BrowserFsAdapter=Bn;exports.ConfigLoadError=Be;exports.Crewx=Hn;exports.CrewxPlugin=Wn;exports.DEFAULT_WI_BOARD_ID=zn;exports.DocumentLoader=et;exports.LayoutLoadError=ne;exports.LayoutLoader=Lt;exports.LayoutRenderer=jt;exports.NodeFsAdapter=wr;exports.PROVIDER_ORDER=Jn;exports.ParallelRunner=Zt;exports.ParallelRunnerTimeoutError=Mr;exports.PropsValidationError=be;exports.PropsValidator=Ut;exports.SdkBoxService=Zn;exports.SpanRepository=to;exports.TaskRepository=Wt;exports.TemplateEngine=Dt;exports.TypedEventEmitter=Ft;exports.WI_BOARD_ID_PATTERN=Ts;exports.WiBoardSchema=ii;exports.YamlHookPlugin=oo;exports.buildContext=sc;exports.canonicalizeAgentOptions=Ml;exports.clearModelsOverride=bi;exports.compareProviders=Yt;exports.createAdapterContext=fn;exports.createDelegateTool=tc;exports.createGlobalSettingsStore=Il;exports.createHandler=En;exports.createPluginProviderFactory=xs;exports.createProvider=Pe;exports.createRemoteProviderFactory=ws;exports.createScopedAdapterStore=pn;exports.defaultExtractText=_n;exports.defaultFsAdapter=Ze;exports.defaultParseEvent=ge;exports.defineChannelAdapter=Lc;exports.defineChannelAdapterPlugin=$c;exports.escapeHandlebarsHelper=an;exports.formatFileSizeHelper=dn;exports.formatTimestamp=un;exports.formatTimestampHelper=ln;exports.generateFingerprint=Ca;exports.generateId=rt;exports.getAntigravityModels=Kr;exports.getClaudeModels=Pt;exports.getCodexModels=Br;exports.getCopilotModels=zr;exports.getProviderModels=Qe;exports.getSyncWindowStore=ba;exports.hashWorkspaceId=Rn;exports.initModelsRemote=jl;exports.initPricingRemote=Ll;exports.isReservedWiBoardId=Ps;exports.lengthHelper=sn;exports.loadYamlFile=nr;exports.materializeWindowsSpawnProgram=Ge;exports.mergeAdditionalArgs=To;exports.mergeModels=bt;exports.normalizeProviderId=Wl;exports.normalizeWorkspacePath=ds;exports.parseOverdriveProfile=fr;exports.parseOverdriveSignal=mr;exports.parseStdoutEvent=St;exports.parseUsage=Ce;exports.parseYamlContent=rr;exports.providerRank=Xn;exports.queryAcpProviderMeta=Ds;exports.queryAllAcpProviderMetas=Jl;exports.queryAllCliProviderMetas=Zl;exports.queryOpencodeModels=Ls;exports.registerAcpProviders=ys;exports.registerApiProviders=us;exports.registerProviderFactory=Te;exports.resolveAgent=sr;exports.resolveAgentSkills=Fl;exports.resolveCrewxCli=rc;exports.resolveCrewxWorkspace=nc;exports.resolveDefaultAgentsYaml=Ur;exports.resolveOverdrive=yr;exports.resolveTemplatesPath=ut;exports.resolveWiBoards=vl;exports.resolveWindowsExecutablePath=wi;exports.resolveWindowsSpawnProgram=Ke;exports.runExecutesParallel=mc;exports.runInSyncWindow=Sa;exports.runQueriesParallel=fc;exports.setAuditVerbose=ua;exports.setModelsOverride=Wr;exports.toTaskReader=Dc;exports.toTemplateMessages=wn;exports.truncateHelper=on;exports.validateHooksSchema=Nc;