@crewx/sdk 0.9.0-rc.6 → 0.9.0-rc.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/activity-log/builder.d.ts +55 -6
- package/dist/config/canonicalize-agent-options.d.ts +17 -0
- package/dist/config/global-settings.d.ts +19 -0
- package/dist/config/migrate-grok-mode.d.ts +6 -0
- package/dist/config/model-compat.d.ts +16 -0
- package/dist/config/models.generated.d.ts +55 -0
- package/dist/config/models.remote.d.ts +4 -0
- package/dist/config/overdrive.d.ts +31 -0
- package/dist/config/pricing.d.ts +9 -5
- package/dist/config/pricing.generated.d.ts +4 -0
- package/dist/config/pricing.types.d.ts +4 -0
- package/dist/config/timeout.config.d.ts +3 -0
- package/dist/config/wi-boards.d.ts +19 -0
- package/dist/context-budget/index.d.ts +105 -0
- package/dist/conversation/index.d.ts +1 -1
- package/dist/conversation/to-template-messages.d.ts +7 -0
- package/dist/conversation/types.d.ts +1 -0
- package/dist/desktop/command-runner.d.ts +4 -0
- package/dist/desktop/default-adapters.d.ts +4 -0
- package/dist/desktop/global-install.d.ts +19 -0
- package/dist/desktop/index.d.ts +2 -0
- package/dist/desktop/index.js +3 -0
- package/dist/desktop/install.d.ts +5 -0
- package/dist/desktop/lnk.d.ts +22 -0
- package/dist/desktop/manifest.d.ts +21 -0
- package/dist/desktop/types.d.ts +67 -0
- package/dist/desktop/version.d.ts +1 -0
- package/dist/desktop/windows-paths.d.ts +21 -0
- package/dist/desktop/wrapper.d.ts +18 -0
- package/dist/esm/desktop/index.js +3 -0
- package/dist/esm/index.js +240 -102
- package/dist/esm/plugins/index.js +150 -90
- package/dist/esm/publish/index.js +1 -0
- package/dist/esm/repository/index.js +126 -66
- package/dist/esm/testing/index.js +1 -1
- package/dist/events/types.d.ts +3 -0
- package/dist/facade/Crewx.d.ts +28 -0
- package/dist/index.browser.d.ts +6 -1
- package/dist/index.browser.js +6 -2
- package/dist/index.d.ts +37 -9
- package/dist/index.js +240 -102
- package/dist/internal/windows-spawn.d.ts +10 -0
- package/dist/migrations/0008_careful_black_bird.sql +17 -0
- package/dist/migrations/0009_hot_dark_phoenix.sql +1 -0
- package/dist/migrations/0010_analyze_stats.sql +6 -0
- package/dist/migrations/0011_far_black_tarantula.sql +1 -0
- package/dist/migrations/0012_blue_turbo.sql +23 -0
- package/dist/migrations/0013_hesitant_adam_destine.sql +15 -0
- package/dist/migrations/0014_organic_mongu.sql +73 -0
- package/dist/migrations/meta/0008_snapshot.json +1327 -0
- package/dist/migrations/meta/0009_snapshot.json +1335 -0
- package/dist/migrations/meta/0010_snapshot.json +1335 -0
- package/dist/migrations/meta/0011_snapshot.json +1342 -0
- package/dist/migrations/meta/0012_snapshot.json +1494 -0
- package/dist/migrations/meta/0013_snapshot.json +1592 -0
- package/dist/migrations/meta/0014_snapshot.json +1975 -0
- package/dist/migrations/meta/_journal.json +49 -0
- package/dist/paths.d.ts +1 -0
- package/dist/plugin/types.d.ts +1 -0
- package/dist/plugins/index.js +150 -90
- package/dist/provider/acp/adapters/claude.d.ts +0 -1
- package/dist/provider/acp/connection.d.ts +4 -0
- package/dist/provider/acp/meta.d.ts +15 -0
- package/dist/provider/bridge.d.ts +16 -1
- package/dist/provider/classify-task-error.d.ts +2 -0
- package/dist/provider/cli/adapter.types.d.ts +6 -0
- package/dist/provider/cli/adapters/cli-knob.util.d.ts +6 -0
- package/dist/provider/cli/adapters/grok.d.ts +2 -0
- package/dist/provider/cli/adapters/index.d.ts +1 -0
- package/dist/provider/cli/index.d.ts +1 -1
- package/dist/provider/cli/meta.d.ts +8 -1
- package/dist/provider/errors.d.ts +1 -0
- package/dist/provider/idle-watchdog.d.ts +19 -0
- package/dist/provider/models.d.ts +26 -24
- package/dist/provider/order.d.ts +1 -1
- package/dist/provider/parse-usage.d.ts +6 -0
- package/dist/provider/provider-selection.d.ts +8 -0
- package/dist/provider/redact-technical-message.d.ts +1 -0
- package/dist/provider/task-error.types.d.ts +16 -0
- package/dist/publish/auth-boundary.d.ts +22 -0
- package/dist/publish/auth-json.d.ts +11 -0
- package/dist/publish/constants.d.ts +6 -0
- package/dist/publish/index.d.ts +30 -0
- package/dist/publish/index.js +1 -0
- package/dist/publish/manifest.d.ts +17 -0
- package/dist/publish/marketplace-api.constants.d.ts +1 -0
- package/dist/publish/pack.d.ts +2 -0
- package/dist/publish/scan.d.ts +9 -0
- package/dist/publish/secrets.d.ts +6 -0
- package/dist/publish/upload.d.ts +18 -0
- package/dist/repository/agent-suggestion.repository.d.ts +34 -0
- package/dist/repository/index.d.ts +7 -1
- package/dist/repository/index.js +126 -66
- package/dist/repository/notification.repository.d.ts +58 -0
- package/dist/repository/task.repository.d.ts +94 -0
- package/dist/repository/thread.repository.d.ts +16 -2
- package/dist/repository/usage-report.repository.d.ts +27 -0
- package/dist/schema/agent-suggestions.d.ts +199 -0
- package/dist/schema/index.d.ts +5 -0
- package/dist/schema/notifications.d.ts +303 -0
- package/dist/schema/ui-action-receipts.d.ts +303 -0
- package/dist/schema/ui-instances.d.ts +267 -0
- package/dist/schema/usage-reports.d.ts +252 -0
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.js +1 -1
- package/dist/types/index.d.ts +448 -3
- package/dist/ui-card/index.d.ts +2 -0
- package/dist/ui-card/legacy-card-parser.d.ts +11 -0
- package/dist/ui-instance/definition.d.ts +6 -0
- package/dist/ui-instance/errors.d.ts +17 -0
- package/dist/ui-instance/index.d.ts +6 -0
- package/dist/ui-instance/json.d.ts +5 -0
- package/dist/ui-instance/runtime.d.ts +13 -0
- package/dist/ui-instance/store.d.ts +65 -0
- package/dist/ui-instance/types.d.ts +200 -0
- package/dist/utils/crewx-home.d.ts +1 -0
- package/dist/utils/id.d.ts +1 -1
- package/dist/utils/timestamp.d.ts +1 -0
- package/dist/wi/create.d.ts +48 -0
- package/dist/wi/select.d.ts +20 -0
- package/package.json +19 -3
- package/templates/agents/default.yaml +175 -117
- package/templates/documents/crewx-manual.md +138 -138
- package/templates/workflows/wi-default-flow.yaml +65 -0
- package/templates/workflows/wi-plan-flow.yaml +140 -0
package/dist/index.js
CHANGED
|
@@ -1,66 +1,108 @@
|
|
|
1
|
-
'use strict';var go=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'),Ni=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 go__namespace=/*#__PURE__*/_interopNamespace(go);var G__namespace=/*#__PURE__*/_interopNamespace(G);var ge__namespace=/*#__PURE__*/_interopNamespace(ge);var Ni__default=/*#__PURE__*/_interopDefault(Ni);var lr=Object.defineProperty;var os=Object.getOwnPropertyDescriptor;var ss=Object.getOwnPropertyNames;var is=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 Ot=(n,e)=>{for(var t in e)lr(n,t,{get:e[t],enumerable:true});},as=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ss(e))!is.call(n,o)&&o!==t&&lr(n,o,{get:()=>e[o],enumerable:!(r=os(e,o))||r.enumerable});return n};var Rn=n=>as(lr({},"__esModule",{value:true}),n);var c=N(()=>{});function $t(n){return typeof n!="string"?void 0:n.trim()||void 0}function Ut(n){return $t(n)?.toLowerCase()??""}function Je(n){try{return go.statSync(n).isFile()}catch{return false}}function Sn(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=Ut(d),u=d.toUpperCase();for(let g of [d,l,u]){let f=G__namespace.default.join(a,`${n}${g}`);if(Je(f))return f}}return n}function xs(n){if(!Je(n))return null;try{let e=go.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 g=u.replace(/[\\/]+/g,G__namespace.default.sep).replace(/^[\\/]+/,""),f=G__namespace.default.resolve(t,g);Je(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&&Je(l)&&o.push(l);}let i=a=>a.find(d=>{let l=Ut(G__namespace.default.basename(d));return l!=="node.exe"&&l!=="node"})??null;return i(o)??i(r)}catch{return null}}function ks(n,e){if(typeof e=="string")return $t(e)||null;if(!e||typeof e!="object")return null;if(n){let t=e[n],r=typeof t=="string"?$t(t):void 0;if(r)return r}for(let t of Object.values(e)){let r=typeof t=="string"?$t(t):void 0;if(r)return r}return null}function _s(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(Je(s))try{let i=JSON.parse(go.readFileSync(s,"utf8")),a=ks(e,i.bin);if(!a)continue;let d=G__namespace.default.resolve(o,a);if(Je(d))return d}catch{}}return null}function vs(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=Sn(n.command,t),s=Ut(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=xs(o)??_s(o,n.packageName);return i?Ut(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 As(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 at(n){let e=vs(n);return As({candidate:e,allowShellFallback:n.allowShellFallback})}function dt(n,e){return {command:n.command,argv:[...n.leadingArgv,...e],resolution:n.resolution,shell:n.shell,windowsHide:n.windowsHide}}var jt=N(()=>{c();});function Es(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 Rs(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 Cs(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(
|
|
1
|
+
'use strict';var Ua=require('fs'),K=require('path'),crypto$1=require('crypto'),child_process=require('child_process'),string_decoder=require('string_decoder'),sdk=require('@agentclientprotocol/sdk'),jsYaml=require('js-yaml'),jsTiktoken=require('js-tiktoken'),lite=require('js-tiktoken/lite'),bo=require('js-tiktoken/ranks/o200k_base'),zod=require('zod'),module$1=require('module'),ze=require('handlebars'),promises=require('fs/promises'),events=require('events'),async_hooks=require('async_hooks'),drizzleOrm=require('drizzle-orm'),Ri=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 Ua__namespace=/*#__PURE__*/_interopNamespace(Ua);var K__namespace=/*#__PURE__*/_interopNamespace(K);var bo__default=/*#__PURE__*/_interopDefault(bo);var ze__namespace=/*#__PURE__*/_interopNamespace(ze);var Ri__namespace=/*#__PURE__*/_interopNamespace(Ri);var go=Object.defineProperty;var oc=Object.getOwnPropertyDescriptor;var ic=Object.getOwnPropertyNames;var sc=Object.prototype.hasOwnProperty;var ge=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var D=(t,e)=>()=>(t&&(e=t(t=0)),e);var lr=(t,e)=>{for(var n in e)go(t,n,{get:e[n],enumerable:true});},ac=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ic(e))!sc.call(t,o)&&o!==n&&go(t,o,{get:()=>e[o],enumerable:!(r=oc(e,o))||r.enumerable});return t};var cs=t=>ac(go({},"__esModule",{value:true}),t);var u=D(()=>{});var ls,mo,us,ho=D(()=>{u();ls=["flagship","balanced","speed"],mo={claude:{models:[{id:"claude-fable-5",name:"Claude Fable 5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-opus-5",name:"Claude Opus 5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced",recommended:true},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",contextWindowTokens:2e5,tier:"speed"}],modes:[{id:"default",name:"Default",description:"Uses Claude's default permission handling with normal approval prompts."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without approval; other permission checks remain in place."},{id:"plan",name:"Plan",description:"Keeps Claude in plan mode so it can inspect and propose changes without applying them."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permissions; only pre-approved tool actions can proceed."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Claude permission checks so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"claude-fable-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}},providerOptions:[]},codex:{models:[{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship",recommended:true},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini",contextWindowTokens:4e5,tier:"speed"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex",contextWindowTokens:4e5,tier:"flagship"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark",contextWindowTokens:128e3,tier:"speed"}],modes:[{id:"agent",name:"Agent",description:"Uses the workspace-write sandbox; can read and modify workspace files without full machine access."},{id:"read-only",name:"Read Only",description:"Uses the read-only sandbox; can inspect files but cannot write to the workspace."},{id:"plan",name:"Plan",description:"Uses the read-only sandbox for planning and inspection; cannot write to the workspace."},{id:"agent-full-access",name:"Agent Full Access",description:"Bypasses approvals and the sandbox; can access and modify files beyond the workspace."},{id:"yolo",name:"YOLO",description:"Bypasses approvals and the sandbox for unrestricted execution and full filesystem access."}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-5.6-sol":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["minimal","low","medium","high","xhigh"],defaultEffort:"high"}},providerOptions:[]},opencode:{models:[],modes:[{id:"plan",name:"Plan",description:"Uses the plan agent without --auto; planning follows standard approval behavior."},{id:"plan-auto",name:"Plan \xB7 Auto",description:"Uses the plan agent with --auto; planning uses automatic approvals."},{id:"build",name:"Build",description:"Uses the build agent without --auto; work follows standard approval behavior."},{id:"build-auto",name:"Build \xB7 Auto",description:"Uses the build agent with --auto; work uses automatic approvals."}],effort:[],modelOverrides:{},providerOptions:[]},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"}],modes:[{id:"interactive",name:"Interactive",description:"Passes --mode interactive; tool access follows Copilot's interactive mode behavior."},{id:"plan",name:"Plan",description:"Passes --mode plan; planning and permission behavior follow Copilot's plan mode."},{id:"autopilot",name:"Autopilot",description:"Passes --mode autopilot; execution behavior follows Copilot's autonomous mode."}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{},providerOptions:[]},antigravity:{models:[{id:"gemini-3.6-flash-high",name:"Gemini 3.6 Flash (High)",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash-medium",name:"Gemini 3.6 Flash (Medium)",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash-low",name:"Gemini 3.6 Flash (Low)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.5 Flash (Medium)",name:"Gemini 3.5 Flash (Medium)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.5 Flash (High)",name:"Gemini 3.5 Flash (High)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.5 Flash (Low)",name:"Gemini 3.5 Flash (Low)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.1 Pro (Low)",name:"Gemini 3.1 Pro (Low)",contextWindowTokens:1048576,tier:"flagship"},{id:"Gemini 3.1 Pro (High)",name:"Gemini 3.1 Pro (High)",contextWindowTokens:1048576,tier:"flagship"},{id:"Claude Sonnet 4.6 (Thinking)",name:"Claude Sonnet 4.6 (Thinking)",contextWindowTokens:1e6,tier:"balanced"},{id:"Claude Opus 4.6 (Thinking)",name:"Claude Opus 4.6 (Thinking)",contextWindowTokens:1e6,tier:"flagship"},{id:"GPT-OSS 120B (Medium)",name:"GPT-OSS 120B (Medium)",contextWindowTokens:128e3,tier:"balanced"}],modes:[],effort:[],modelOverrides:{},providerOptions:[]},grok:{models:[{id:"grok-4.6",name:"Grok 4.6",contextWindowTokens:5e5,tier:"flagship",recommended:true},{id:"grok-4.5",name:"Grok 4.5",contextWindowTokens:5e5,tier:"flagship"}],modes:[{id:"default",name:"Default",description:"Uses Grok's default permission handling."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without changing the selected sandbox profile."},{id:"auto",name:"Auto",description:"Uses Grok automatic permission handling."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permission before tool execution."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Grok permission checks for tool execution."},{id:"plan",name:"Plan",description:"Keeps Grok in planning mode without applying changes."}],effort:["low","medium","high"],modelOverrides:{"grok-4.6":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.5":{effort:["low","medium","high"],defaultEffort:"high"}},providerOptions:[{key:"alwaysApprove",type:"boolean"},{key:"sandbox",type:"enum",values:["workspace","read-only","off"]}]}},us={version:1,providers:{"cli/codex":{model:"gpt-5.6-sol",query:{mode:"agent",effort:"high"},execute:{mode:"agent-full-access",effort:"xhigh"}},"cli/claude":{model:"claude-opus-5",query:{mode:"default",effort:"high"},execute:{mode:"bypassPermissions",effort:"xhigh"}},"cli/grok":{model:"grok-4.6",query:{mode:"default",effort:"high",providerOptions:{alwaysApprove:true,sandbox:"workspace"}},execute:{mode:"default",effort:"xhigh",providerOptions:{alwaysApprove:true,sandbox:"off"}}}}},Object.fromEntries(Object.entries(mo).map(([t,e])=>[t,e.models]));});var xt,yo,ps,wo=D(()=>{u();xt={"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-5":{input:5,cachedInput:.5,output:25},"claude-opus-4-8":{input:5,cachedInput:.5,output:25},"claude-opus-4-7":{input:5,cachedInput:.5,output:25},"claude-opus-4-6":{input:5,cachedInput:.5,output:25},"claude-sonnet-5":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-5.6-sol":{input:5,cachedInput:.5,output:30},"gpt-5.6-terra":{input:2,cachedInput:.2,output:12},"gpt-5.6-luna":{input:.2,cachedInput:.02,output:1.2},"gpt-5.5":{input:5,cachedInput:.5,output:30},"gpt-5.4":{input:2.5,cachedInput:.25,output:15},"gpt-5.4-mini":{input:.75,cachedInput:.075,output:4.5},"gpt-5.3-codex":{input:1.75,cachedInput:.175,output:14},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4},"gemini-3.6-flash":{input:1.5,cachedInput:.15,output:7.5},"grok-4.6":{input:2,cachedInput:.5,output:6},"grok-4.5":{input:2,cachedInput:.3,output:6}},yo=new Set(["gpt-5.3-codex-spark"]),ps=new Set(["Claude Opus 4.6 (Thinking)","Claude Sonnet 4.6 (Thinking)","GPT-OSS 120B (Medium)","Gemini 3.1 Pro (High)","Gemini 3.1 Pro (Low)","Gemini 3.5 Flash (High)","Gemini 3.5 Flash (Low)","Gemini 3.5 Flash (Medium)","auto","claude-fable-5","claude-haiku-4-5","claude-opus-4-6[1m]","claude-opus-4-7[1m]","claude-opus-4-8[1m]","claude-opus-5","claude-sonnet-4-6","claude-sonnet-4-6[1m]","claude-sonnet-5","gemini-3.1-pro","gemini-3.6-flash-high","gemini-3.6-flash-low","gemini-3.6-flash-medium","gpt-5.3-codex","gpt-5.3-codex-spark","gpt-5.4","gpt-5.4-mini","gpt-5.5","gpt-5.6-luna","gpt-5.6-sol","gpt-5.6-terra","grok-4.5","grok-4.6"]);});function gs(t){gn=t;}function ms(t){fs=Object.fromEntries(Object.entries(t).map(([e,n])=>[e,{...n}]));}function _o(t){let e=t.toLowerCase().trim();e=e.replace(/\[[^\]]*\]$/g,"");let n=e.lastIndexOf("/");return n>=0&&(e=e.slice(n+1)),e=e.replace(/-\d{8}$/,""),e}function lc(t){if(!t)return;let e="inputPerMillionTokensUsd"in t?t.inputPerMillionTokensUsd:t.input,n="outputPerMillionTokensUsd"in t?t.outputPerMillionTokensUsd:t.output;if(!(!Number.isFinite(e)||e<=0||!Number.isFinite(n)||n<=0))return {inputPerMillionTokensUsd:e,outputPerMillionTokensUsd:n}}function hs(t){if(!t)return;let e=t.replace(/\[[^\]]*\]$/g,"");return lc(fs[e]??xt[e])}function uc(t){if(!t)return console.warn("[pricing] missing model id; cost is being recorded as 0"),fn;let e=_o(t),n=cc[e];if(n)return gn[n]??xt[n]??fn;if(gn[e])return gn[e];if(xt[e])return xt[e];if(yo.has(e))return console.warn(`[pricing] unpublished model pricing: ${t}, cost_usd=0`),fn;if(ps.has(e))return console.warn(`[pricing] missing catalog pricing: ${t}, cost_usd=0`),fn;let r={...xt,...gn};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${t}, cost_usd=0`),fn}function pc(t,e,n,r=0,o){let i=uc(n),s=Math.min(r,t),d=(t-s)*i.input/1e6,c=s*i.cachedInput/1e6,l=e*i.output/1e6;return d+c+l}function ys(t,e,n,r,o,i){return t&&t>0?t:!e&&!n?0:pc(e??0,n??0,o,r??0)}var cc,fn,gn,fs,zt=D(()=>{u();wo();wo();cc={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"},fn={input:0,cachedInput:0,output:0},gn={},fs={};});function mn(t){return mc.get(t)??t}exports.CLAUDE_OPUS_4_8_BASE_MODEL_ID=void 0;exports.CLAUDE_OPUS_4_8_LEGACY_MODEL_ID=void 0;exports.CLAUDE_MODEL_COMPATIBILITY_PAIRS=void 0;var mc,ur=D(()=>{u();exports.CLAUDE_OPUS_4_8_BASE_MODEL_ID="claude-opus-4-8",exports.CLAUDE_OPUS_4_8_LEGACY_MODEL_ID="claude-opus-4-8[1m]",exports.CLAUDE_MODEL_COMPATIBILITY_PAIRS=[{baseModelId:"claude-opus-4-8",catalogModelId:"claude-opus-4-8[1m]"},{baseModelId:"claude-opus-4-7",catalogModelId:"claude-opus-4-7[1m]"},{baseModelId:"claude-opus-4-6",catalogModelId:"claude-opus-4-6[1m]"},{baseModelId:"claude-sonnet-4-6",catalogModelId:"claude-sonnet-4-6[1m]"}],mc=new Map(exports.CLAUDE_MODEL_COMPATIBILITY_PAIRS.map(({baseModelId:t,catalogModelId:e})=>[t,e]));});function ks(){return {models:[],modes:[],effort:[],modelOverrides:{},providerOptions:[]}}function hc(t){return Array.isArray(t)?{models:t,modes:[],effort:[],modelOverrides:{},providerOptions:[]}:t?{models:t.models??[],modes:t.modes??[],effort:t.effort??[],modelOverrides:t.modelOverrides??{},providerOptions:t.providerOptions??[]}:ks()}function vo(t){ko=Object.fromEntries(Object.entries(t).map(([e,n])=>[e,hc(n)]));}function yc(){ko={};}function hn(t){_s={...t};}function Ze(t){return Oe(t).models}function Oe(t){return ko[t]??mo[t]??ks()}function pr(t){return _s[t]??us.providers[t]}function yn(t){return Oe(t).modes}function Rt(t,e){let n=Oe(t);return e?n.modelOverrides[mn(e)]?.effort??n.effort:n.effort}function vs(t){return Oe(t).modelOverrides}function wn(){return Ze("claude")}function Eo(){return Ze("codex")}function xo(){return Ze("copilot")}function Ro(){return Ze("antigravity")}function _n(t,e){let n=new Map;for(let r of [...t,...e]){let o=n.get(r.id);if(!o){let{apiPricing:i,recommended:s,...a}=r;n.set(r.id,{...a,...s===true?{recommended:true}:{},...i!=null?{apiPricing:{...i}}:{}});continue}!o.name&&r.name&&(o.name=r.name),o.description==null&&r.description!=null&&(o.description=r.description),o.contextWindowTokens==null&&r.contextWindowTokens!=null&&(o.contextWindowTokens=r.contextWindowTokens),o.tier==null&&r.tier!=null&&(o.tier=r.tier),o.recommended!==true&&r.recommended===true&&(o.recommended=true),o.apiPricing==null&&r.apiPricing!=null&&(o.apiPricing={...r.apiPricing});}return Array.from(n.values())}function kn(t){return t.map(e=>{let{apiPricing:n,...r}=e,o=hs(e.id);return o?{...r,apiPricing:o}:r})}var ko,_s,Re=D(()=>{u();ho();zt();ur();ko={},_s={};});function Er(t){return typeof t!="string"?void 0:t.trim()||void 0}function xr(t){return Er(t)?.toLowerCase()??""}function Vt(t){try{return Ua.statSync(t).isFile()}catch{return false}}function Jc(t,e){if(t===e)return true;let n=K__namespace.default.relative(t,e);return n!==""&&!n.startsWith("..")&&!K__namespace.default.isAbsolute(n)}function Kc(t,e){if(K__namespace.default.basename(t)!==".bin")return false;let n=K__namespace.default.dirname(t);if(K__namespace.default.basename(n)!=="node_modules")return false;let r=K__namespace.default.dirname(n);return Jc(r,e)}function vn(t,e={}){if(t.includes("/")||t.includes("\\")||K__namespace.default.isAbsolute(t))return t;let n=e.platform??process.platform,r=e.env??process.env,o=K__namespace.default.resolve(e.cwd??process.cwd()),i=(e.resolution??"global_first")==="global_first",s=r.PATH??r.Path??process.env.PATH??process.env.Path??"",a=n==="win32"?";":":",d=s.split(a).map(g=>g.trim()).filter(Boolean),c=K__namespace.default.extname(t).length>0,l=r.PATHEXT??r.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",f=n==="win32"?c?[""]:l.split(";").map(g=>g.trim()).filter(Boolean).map(g=>g.startsWith(".")?g:`.${g}`):[""];for(let g of d){let m=K__namespace.default.resolve(o,g);if(!(i&&Kc(m,o)))for(let k of f){let h=xr(k),v=k.toUpperCase();for(let w of [k,h,v]){let _=K__namespace.default.join(m,`${t}${w}`);if(Vt(_))return _}}}return t}function Xc(t,e){return vn(t,{env:e,platform:"win32",resolution:"local_first"})}function Yc(t){if(!Vt(t))return null;try{let e=Ua.readFileSync(t,"utf8"),n=K__namespace.default.dirname(t),r=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let l=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!l)continue;let f=l.replace(/[\\/]+/g,K__namespace.default.sep).replace(/^[\\/]+/,""),g=K__namespace.default.resolve(n,f);Vt(g)&&r.push(g);}let o=[],i=new Map;for(let a of e.matchAll(/SET\s+"(\w+)=%~?dp0%?[\\/]?([^"]+)"/gi)){let d=a[1].toUpperCase(),c=a[2].trim().replace(/[\\/]+/g,K__namespace.default.sep).replace(/^[\\/]+/,"");i.set(d,K__namespace.default.resolve(n,c));}for(let a of e.split(/\r?\n/))if(a.includes("%*"))for(let d of a.matchAll(/"%(\w+)%"/g)){let c=i.get(d[1].toUpperCase());c&&Vt(c)&&o.push(c);}let s=a=>a.find(d=>{let c=xr(K__namespace.default.basename(d));return c!=="node.exe"&&c!=="node"})??null;return s(o)??s(r)}catch{return null}}function Qc(t,e){if(typeof e=="string")return Er(e)||null;if(!e||typeof e!="object")return null;if(t){let n=e[t],r=typeof n=="string"?Er(n):void 0;if(r)return r}for(let n of Object.values(e)){let r=typeof n=="string"?Er(n):void 0;if(r)return r}return null}function Zc(t,e){if(!e)return null;let n=K__namespace.default.dirname(t),r=[K__namespace.default.resolve(n,"..",e),K__namespace.default.resolve(n,"node_modules",e)];for(let o of r){let i=K__namespace.default.join(o,"package.json");if(Vt(i))try{let s=JSON.parse(Ua.readFileSync(i,"utf8")),a=Qc(e,s.bin);if(!a)continue;let d=K__namespace.default.resolve(o,a);if(Vt(d))return d}catch{}}return null}function el(t){let e=t.platform??process.platform,n=t.env??process.env,r=t.execPath??process.execPath,o=t.cwd,i=t.resolution;if(e!=="win32")return {command:vn(t.command,{cwd:o,env:n,platform:e,resolution:i}),leadingArgv:[],resolution:"direct"};let s=vn(t.command,{cwd:o,env:n,platform:e,resolution:i}),a=xr(K__namespace.default.extname(s));if(a===".js"||a===".cjs"||a===".mjs")return {command:r,leadingArgv:[s],resolution:"node-entrypoint",windowsHide:true};if(a===".cmd"||a===".bat"){let d=Yc(s)??Zc(s,t.packageName);return d?xr(K__namespace.default.extname(d))===".exe"?{command:d,leadingArgv:[],resolution:"exe-entrypoint",windowsHide:true}:{command:r,leadingArgv:[d],resolution:"node-entrypoint",windowsHide:true}:{command:s,leadingArgv:[],resolution:"unresolved-wrapper"}}return {command:s,leadingArgv:[],resolution:"direct"}}function tl(t){if(t.candidate.resolution!=="unresolved-wrapper")return {command:t.candidate.command,leadingArgv:t.candidate.leadingArgv,resolution:t.candidate.resolution,windowsHide:t.candidate.windowsHide};if(t.allowShellFallback===true)return {command:t.candidate.command,leadingArgv:[],resolution:"shell-fallback",shell:true};throw new Error(`${K__namespace.default.basename(t.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function It(t){let e=el(t);return tl({candidate:e,allowShellFallback:t.allowShellFallback})}function Pt(t,e){return {command:t.command,argv:[...t.leadingArgv,...e],resolution:t.resolution,shell:t.shell,windowsHide:t.windowsHide}}var Jt=D(()=>{u();});function nl(t){if(t.type!=="usage"||!("input_tokens"in t))return null;let e=Number(t.input_tokens??0),n=Number(t.output_tokens??0),o="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,i="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,s=o!==void 0?o:i??0;return {inputTokens:o!==void 0?e+o:e,outputTokens:n,cachedInputTokens:s}}function rl(t){let e=t.usage;if(!e||typeof e!="object"||Array.isArray(e))return null;let n=e;if(!("input_tokens"in n))return null;let r=Number(n.input_tokens??0),o=Number(n.output_tokens??0),s="cache_read_input_tokens"in n?Number(n.cache_read_input_tokens):void 0,a="cached_input_tokens"in n?Number(n.cached_input_tokens):void 0,d=s!==void 0?s:a??0;return {inputTokens:s!==void 0?r+s:r,outputTokens:o,cachedInputTokens:d}}function ol(t){if(t.type!=="step_finish")return null;let n=t.part?.tokens;if(!n)return null;let r=Number(n.input??0),o=Number(n.output??0),i=n.cache,s=i?Number(i.read??0):0;return {inputTokens:r+s,outputTokens:o,cachedInputTokens:s}}function Cs(t){let e=new Map,n;for(let i of t.split(`
|
|
2
|
+
`))if(i.trim())try{let s=JSON.parse(i);if(s.type!=="assistant")continue;let a=s.message,d=a?.id,c=a?.usage;if(typeof d!="string"||!c)continue;let l=Number(c.input_tokens??0),f=Number(c.cache_read_input_tokens??0);e.set(d,{inputTokens:l+f,cachedInputTokens:f});let g=a?.model;typeof g=="string"&&g&&(n=g);}catch{}if(e.size===0)return;let r=0,o=0;for(let i of e.values())r+=i.inputTokens,o+=i.cachedInputTokens;return {inputTokens:r,cachedInputTokens:o,model:n}}function tt(t){if(!t||!t.trim())return;let e=null,n=null;for(let r of t.split(`
|
|
3
|
+
`))if(r.trim())try{let o=JSON.parse(r),i=ol(o);if(i){n||(n={inputTokens:0,outputTokens:0,cachedInputTokens:0}),n.inputTokens+=i.inputTokens,n.outputTokens+=i.outputTokens,n.cachedInputTokens+=i.cachedInputTokens;continue}let s=nl(o)??rl(o);s&&(e=s);}catch{}return n||(e??void 0)}var Ct=D(()=>{u();});exports.ProviderError=void 0;var St,Ot,Kt=D(()=>{u();exports.ProviderError=class extends Error{constructor(n,r,o){super(n);this.providerStr=r;this.name="ProviderError",this.code=o?.code??"UNKNOWN",this.kind=o?.kind??(this.code==="UNKNOWN"?"transient":void 0),this.retryAfterMs=o?.retryAfterMs;}providerStr;code;kind;retryAfterMs;stdout},St=class extends exports.ProviderError{constructor(e,n){super(e,n,{code:"TIMEOUT_IDLE",kind:"permanent"}),this.name="IdleTimeoutError";}},Ot=class extends exports.ProviderError{constructor(e,n){super(e,n,{code:"TIMEOUT_TOTAL",kind:"permanent"}),this.name="TotalTimeoutError";}};});exports.RateLimitError=void 0;var Rr=D(()=>{u();Kt();exports.RateLimitError=class extends exports.ProviderError{name="RateLimitError";constructor(e,n="cli/claude"){super(e,n,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function Ne(t){return /crewx\s+(x|execute)\s/.test(t)}function De(t,e){let n=e.match(/@(\S+)/);return {timestamp:t,type:"agent_call",targetAgent:n?.[1]?.replace(/["']/g,""),toolInput:e}}var Xt=D(()=>{u();});function Me(t){if(typeof t=="string")return t;if(!t||typeof t!="object")return JSON.stringify(t??{});let e=t;return typeof e.command=="string"?e.command:typeof e.file_path=="string"?e.file_path:typeof e.filePath=="string"?e.filePath:typeof e.path=="string"?e.path:typeof e.query=="string"?e.query:typeof e.pattern=="string"?e.pattern:typeof e.url=="string"?e.url:typeof e.prompt=="string"?e.prompt.length>200?e.prompt.slice(0,200)+"\u2026":e.prompt:typeof e.description=="string"?e.description:JSON.stringify(e)}var Yt=D(()=>{u();});function Nt(t){return il[t]??t}function Oo(t){if(!t)return "";let e=t.lastIndexOf("/");return e===-1?t.trim():t.slice(e+1).trim()}function Ss(t){if(!t)return false;let e=Oe(t);return e.models.length>0||e.modes.length>0||e.effort.length>0||Object.keys(e.modelOverrides).length>0}function Os(t,e){if(!t)return false;let n=Oe(t),r=typeof e=="string"?mn(e):void 0;return n.models.length>0||n.effort.length>0||r!=null&&Array.isArray(n.modelOverrides[r]?.effort)}function No(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function sl(t,e,n){let r=t,o=false,i=false,s=[],a=()=>(o||(r={...t},o=true),r),d=typeof r.provider=="string"&&r.provider.trim()?Oo(r.provider):e,c=typeof r.model=="string"&&r.model.trim()?r.model.trim():n;if(Ss(d)){if(typeof r.mode=="string"){let f=d==="claude"?Nt(r.mode):r.mode,g=yn(d).map(m=>d==="claude"?Nt(m.id):m.id);f!==r.mode&&(a().mode=f,i=true),g.includes(f)||(delete a().mode,s.push("mode"));}typeof r.effort=="string"&&Os(d,c)&&(Rt(d,c).includes(r.effort)||(delete a().effort,s.push("effort")));}let l=r.overdrive;if(No(l)){let f=Oo(typeof l.provider=="string"?l.provider:void 0),g=typeof l.model=="string"?l.model:void 0;if(Ss(f)){let m,k=()=>(m||(m={...l},a().overdrive=m),m);if(typeof l.mode=="string"){let h=f==="claude"?Nt(l.mode):l.mode,v=yn(f).map(w=>f==="claude"?Nt(w.id):w.id);h!==l.mode&&(k().mode=h,i=true),v.includes(h)||(delete k().mode,s.push("overdrive.mode"));}typeof l.effort=="string"&&Os(f,g)&&(Rt(f,g).includes(l.effort)||(delete k().effort,s.push("overdrive.effort")));}}return {block:r,removed:s,changed:i}}function al(t){let{options:e}=t;if(!No(e))return {options:e,changed:false,removed:[]};let n=Oo(t.provider),r=[],o=false,i=e,s=false,a=()=>(s||(i={...e},s=true),i);for(let d of ["query","execute"]){let c=e[d];if(!No(c))continue;let{block:l,removed:f,changed:g}=sl(c,n,t.model);(g||f.length>0)&&(a()[d]=l,r.push(...f.map(m=>`${d}.${m}`)),o=true);}return {options:i,changed:o,removed:r}}var il,Do=D(()=>{u();Re();ur();il={auto:"default"};});function Qt(t){if(!t)return {};let e=t.match(/^(.+?)\[([^\]]+)\]$/);if(e){let n=e[2].toLowerCase();return dl.has(n)?{model:e[1],effort:e[2]}:{model:t}}return {model:t}}function Ns(t){switch(t){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["--sandbox","read-only"];case "agent":return ["--sandbox","workspace-write"];default:return []}}function Ds(t){switch(t){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["-c","sandbox_mode=read-only"];case "agent":return ["-c","sandbox_mode=workspace-write"];default:return []}}function Ms(t){return t?["-c",`model_reasoning_effort=${t}`]:[]}function Us(t){if(!t)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),n=Nt(t);return e.has(n)?["--permission-mode",n]:[]}function Ls(t){return t?new Set(["low","medium","high","xhigh","max"]).has(t)?["--effort",t]:[]:[]}function $s(t){return t==="default"?[]:t&&cl.has(t)?["--permission-mode",t]:[]}function Bs(t){return t===true?["--always-approve"]:[]}function js(t,e=n=>console.warn(n)){return t===void 0?[]:t==="workspace"||t==="read-only"||t==="off"?["--sandbox",t]:(e(`[grok] Invalid sandbox value ${JSON.stringify(t)}; using workspace.`),["--sandbox","workspace"])}function Fs(t){return t?new Set(["low","medium","high","xhigh"]).has(t)?["--effort",t]:[]:[]}var dl,cl,br=D(()=>{u();Do();dl=new Set(["minimal","low","medium","high","xhigh","max"]);cl=new Set(["default","acceptEdits","auto","dontAsk","bypassPermissions","plan"]);});function ul(t){let n=t.message?.content;return Array.isArray(n)?n.map(r=>typeof r.text=="string"?r.text.trim():"").filter(Boolean).join(`
|
|
3
4
|
|
|
4
|
-
`):""}function
|
|
5
|
-
`):
|
|
6
|
-
`).filter(o=>o.trim()),
|
|
7
|
-
|
|
8
|
-
`)
|
|
9
|
-
`);for(let
|
|
10
|
-
`).
|
|
11
|
-
|
|
12
|
-
`)
|
|
13
|
-
|
|
14
|
-
`).
|
|
15
|
-
|
|
16
|
-
`)
|
|
17
|
-
{`).split(`
|
|
18
|
-
`).map(e=>e.trim()).filter(Boolean)}var Ls,$s,Us;exports.opencodeAdapter=void 0;var _r=N(()=>{c();Ye();Ze();Ls=new Set(["step_start","step_finish"]),$s=new Set(["bypassPermissions","yolo","agent-full-access"]),Us=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}=js(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=kr(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=kr(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||""),g=d.state,f=String(g?.status||""),p=g?.input,h=ae(p);if(o.push({timestamp:r,type:"tool_use",toolName:l,toolUseId:u,toolInput:h}),f==="completed"&&g?.output!==void 0){let x=g.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(g?.error||"tool error"),isError:true});continue}}}return o},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}")||kr(e).length!==1)return false;try{let o=JSON.parse(e).type;return o?Ls.has(o):!1}catch{return false}}};});var vr,Ar=N(()=>{c();lt();he();vr={command:"agy",meta:{displayName:"Antigravity",models:exports.ANTIGRAVITY_MODELS,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 Mn,Nn=N(()=>{c();Qe();Ze();Mn={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 ut(n,e,t){if(t){let r=exports.BUILTIN_ADAPTERS[t];if(r?.parseEvent)return r.parseEvent(e,n);let o=Hs[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 Hs,Ce=N(()=>{c();yr();hr();xr();_r();Ar();Nn();yr();hr();xr();_r();Ar();Qe();exports.BUILTIN_ADAPTERS={codex:exports.codexAdapter,claude:exports.claudeAdapter,opencode:exports.opencodeAdapter,antigravity:vr,copilot:exports.copilotAdapter},Hs={gemini:Mn};});function qs(n){let e=n.split(`
|
|
19
|
-
`).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 pl(t){let e=t.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function fl(t,e){let n=e.type;if(n==="text"){let r=String(e.text||"");return r?{timestamp:t,type:"text",content:r}:null}if(n==="thinking"){let r=typeof e.thinking=="string"?e.thinking.trim():"";return r?{timestamp:t,type:"thinking",content:r}:null}if(n==="tool_use"){let r=String(e.name||""),o=e.id,i=e.input,s=Me(i);return r==="Bash"&&Ne(s)?De(t,s):{timestamp:t,type:"tool_use",toolUseId:o,toolName:r,toolInput:s}}if(n==="tool_result"){let r=!!e.is_error,o=e.tool_use_id,i=e.output??e.content??"",s;return typeof i=="string"?s=i:Array.isArray(i)?s=i.filter(a=>a.type==="text"&&typeof a.text=="string").map(a=>a.text).join(`
|
|
6
|
+
`):s=JSON.stringify(i),{timestamp:t,type:"tool_result",toolUseId:o,resultPreview:s,isError:r}}return null}var ll;exports.claudeAdapter=void 0;var Mo=D(()=>{u();Rr();Xt();Yt();br();Re();Ct();ll=new Set(["tool_progress"]),exports.claudeAdapter={command:"claude",meta:{displayName:"Claude",models:wn(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:o}=Qt(e.model),i=e.effort??o,s=Us(e.mode),a=Ls(i),d=r?["--model",r]:[],c=e.resumeSessionId?["--resume",e.resumeSessionId]:[];if(e.additionalArgs!==void 0){let f=[...e.additionalArgs];return f.indexOf("-p")!==-1?{args:["--output-format","stream-json","--verbose",...c,...s,...a,...d,...f],stdinMessage:t}:{args:["--output-format","stream-json","--verbose",...c,...s,...a,...d,...f],stdinMessage:t}}return {args:["-p","--output-format","stream-json","--verbose",...c,...s,...a,...d],stdinMessage:t}},extractText(t){let e=t.split(`
|
|
7
|
+
`).filter(o=>o.trim()),n=[],r=null;for(let o of e)try{let i=JSON.parse(o);if(i.type==="assistant"&&Array.isArray(i.message?.content))for(let s of i.message.content)s.type==="text"&&typeof s.text=="string"&&s.text.trim()&&n.push(s.text.trim());i.type==="result"&&typeof i.result=="string"&&(r=i.result);}catch{}return n.length>0?n[n.length-1]:r||t.trim()},extractFailure(t){try{let e=JSON.parse(t);if(e.type==="rate_limit_event"){let n=e.rate_limit_info??{};if(n.status==="rejected")return new exports.RateLimitError(`Claude rate limit: ${n.rateLimitType??"unknown"} (status: ${n.status})`)}if(e.error==="rate_limit"){let n=ul(e);return new exports.RateLimitError(n?`Claude rate limit: ${n}`:"Claude rate limit")}if(e.type==="result"&&e.is_error===!0){let n=typeof e.result=="string"?e.result:"";if(pl(n))return new exports.RateLimitError(`Claude rate limit: ${n}`)}}catch{}return null},parseResultMeta(t){let e=t.split(`
|
|
8
|
+
`);for(let r of e)if(r.trim())try{let o=JSON.parse(r);if(o.type==="result"){let i=o.usage,s=i?{inputTokens:Number(i.input_tokens??0)+Number(i.cache_read_input_tokens??0),outputTokens:Number(i.output_tokens??0),cachedInputTokens:Number(i.cache_read_input_tokens??0),costUsd:Number(o.total_cost_usd??0)}:null,a=o.modelUsage,d=a?Object.keys(a)[0]??null:null;return {usage:s,model:d}}}catch{}let n=Cs(t);return n?{usage:{inputTokens:n.inputTokens,outputTokens:0,cachedInputTokens:n.cachedInputTokens,costUsd:0},model:n.model??null}:{usage:null,model:null}},parseEvent(t,e){let n;try{n=JSON.parse(t);}catch{return []}let r=n.type;if(!r)return [];if(r!=="assistant"&&r!=="user")return [];let i=n.message?.content;if(!Array.isArray(i))return [];let s=e??new Date().toISOString(),a=[];for(let d of i){let c=fl(s,d);c&&a.push(c);}return a},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?ll.has(r):!1}catch{return false}}};});var gl,ml;exports.copilotAdapter=void 0;var Uo=D(()=>{u();Ct();Xt();Yt();Re();gl=new Set(["interactive","plan","autopilot"]),ml=new Set(["none","low","medium","high","xhigh","max"]),exports.copilotAdapter={command:"copilot",meta:{displayName:"Copilot",models:xo()},buildArgs(t,e,n){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&gl.has(e.mode)&&r.push("--mode",e.mode),e.effort&&ml.has(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:t}},extractText(t){let e=t.split(`
|
|
9
|
+
`).filter(o=>o.trim()),n=[],r=null;for(let o of e)try{let i=JSON.parse(o);if(i.type==="assistant.message"&&typeof i.data?.content=="string"){let s=i.data.content;s.trim()&&n.push(s.trim());}i.type==="result"&&typeof i.result=="string"&&(r=i.result);}catch{}return n.length>0?n[n.length-1]:r||t.trim()},parseResultMeta(t){let e=tt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n;try{n=JSON.parse(t);}catch{return []}let r=n.type;if(!r)return [];if(!r.startsWith("tool.execution")&&!r.startsWith("assistant.")&&r!=="user.message")return [];let o=n.data;if(!o)return [];let i=e??new Date().toISOString(),s=o.toolCallId;if(r==="tool.execution_start"){let a=String(o.toolName||""),d=o.arguments,c=Me(d);return (a==="bash"||a==="Bash")&&Ne(c)?[De(i,c)]:[{timestamp:i,type:"tool_use",toolName:a,toolInput:c,...s&&{toolUseId:s}}]}if(r==="tool.execution_complete"){let a=o.error;if(a)return [{timestamp:i,type:"tool_result",isError:true,resultPreview:String(a.message||""),...s&&{toolUseId:s}}];let d=o.result,c=String(d?.content||"");return [{timestamp:i,type:"tool_result",resultPreview:c,isError:false,...s&&{toolUseId:s}}]}if(r==="assistant.message"){let a=String(o.content||"");return a?[{timestamp:i,type:"text",content:a}]:[]}return []}};});function yl(t){let e=[],n=0,r=false,o=false,i=0;for(let a=0;a<t.length;a++){let d=t[a];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")n++;else if(d==="}"&&(n--,n===0)){let c=t.slice(i,a+1).trim();c&&e.push(c),i=a+1;}}}let s=t.slice(i).trim();return s&&e.push(s),e}function wl(t){return t[0]==="exec"?t.slice(1):t}function _l(t,e){let n=e.type;if(n==="command_execution"){let r=String(e.command||"");return Ne(r)?[De(t,r)]:[{timestamp:t,type:"tool_use",toolName:"Bash",toolInput:r}]}return n==="web_search"?[]:n==="file_change"?[]:[]}function kl(t,e){let n=e.type;if(n==="message"||n==="text"){let r=e.content;if(Array.isArray(r))for(let o of r){let i=vl(t,o);if(i)return i}if(typeof e.text=="string")return {timestamp:t,type:"text",content:e.text}}if(n==="agent_message"&&typeof e.text=="string")return {timestamp:t,type:"text",content:e.text};if(n==="reasoning"){let r=typeof e.text=="string"?e.text.trim():"";return r?{timestamp:t,type:"thinking",content:r}:null}if(n==="command_execution"){let r=String(e.aggregated_output||e.output||""),o=!!e.is_error;return {timestamp:t,type:"tool_result",resultPreview:r,isError:o}}if(n==="tool_use"){let r=String(e.name||e.tool_name||""),o=e.input,i=Me(o);return r==="Bash"&&Ne(i)?De(t,i):{timestamp:t,type:"tool_use",toolName:r,toolInput:i}}if(n==="tool_result"){let r=!!e.is_error,o=String(e.output||e.content||"");return {timestamp:t,type:"tool_result",resultPreview:o,isError:r}}if(n==="web_search"){let r=e.action,o;if(r?.type==="search"){let i=r.queries;o=String(r.query||"")||(i?.length?i.join(", "):"")||String(e.query||"");}else o=e.query?"open: "+String(e.query):"";return o?{timestamp:t,type:"tool_use",toolName:"WebSearch",toolInput:o}:null}if(n==="file_change"){let r=e.changes;if(!Array.isArray(r)||r.length===0)return null;let o=r.map(s=>String(s.path||"")).filter(Boolean);if(o.length===0)return null;let i=o.length===1?o[0]:`${o.slice(0,2).join(", ")}${o.length>2?` (+${o.length-2})`:""}`;return {timestamp:t,type:"tool_use",toolName:"Edit",toolInput:i}}return null}function vl(t,e){let n=e.type;if(n==="text")return {timestamp:t,type:"text",content:String(e.text||"")};if(n==="tool_use"){let r=String(e.name||""),o=e.input,i=Me(o);return r==="Bash"&&Ne(i)?De(t,i):{timestamp:t,type:"tool_use",toolName:r,toolInput:i}}return null}var hl;exports.codexAdapter=void 0;var Lo=D(()=>{u();Ct();Xt();Yt();br();Re();hl=new Set(["turn.started","turn.completed","item.updated"]);exports.codexAdapter={command:"codex",meta:{displayName:"Codex",models:Eo(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:o}=Qt(e.model),i=e.effort??o,s=e.resumeSessionId?Ds(e.mode):Ns(e.mode),a=Ms(i),d=r?["-m",r]:[],c=wl(e.additionalArgs??[]),f=c.includes("--json")||c.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...f,...s,...a,...d,...c,e.resumeSessionId,"-"],stdinMessage:t}:{args:["exec",...f,...s,...a,...d,...c],stdinMessage:t}},extractText(t){let e=t.split(`
|
|
10
|
+
`).map(o=>o.trim()).filter(Boolean),n=[],r=null;for(let o of e)try{let i=JSON.parse(o);if(i.type==="item.completed"&&(i.item?.type==="message"||i.item?.type==="agent_message")&&typeof i.item?.text=="string"){let s=i.item.text;s.trim()&&n.push(s.trim());}i.type==="result"&&typeof i.result=="string"&&(r=i.result);}catch{}return n.length>0?n[n.length-1]:r||t.trim()},parseResultMeta(t){let e=tt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n=e??new Date().toISOString(),r=[],o;try{JSON.parse(t),o=[t];}catch{o=yl(t),o.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let i of o){let s;try{s=JSON.parse(i);}catch{continue}let a=s.type;if(!a||!a.startsWith("item.")&&!a.startsWith("turn.")&&!a.startsWith("thread."))continue;let d=s.item;if(d){if(a==="item.started"){r.push(..._l(n,d));continue}if(a==="item.completed"){let c=kl(n,d);c&&r.push(c);continue}}}return r},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?hl.has(r):!1}catch{return false}}};});function Rl(t){return t?xl[t]??{agent:"build",autoApprove:false}:{agent:void 0,autoApprove:false}}function Pr(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function bl(t){let e=[],n=0,r=false,o=false,i=0;for(let a=0;a<t.length;a++){let d=t[a];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")n++;else if(d==="}"&&(n--,n===0)){let c=t.slice(i,a+1).trim();c&&e.push(c),i=a+1;}}}let s=t.slice(i).trim();return s&&e.push(s),e}var El,xl;exports.opencodeAdapter=void 0;var $o=D(()=>{u();Ct();Yt();El=new Set(["step_start","step_finish"]),xl={build:{agent:"build",autoApprove:false},"build-auto":{agent:"build",autoApprove:true},plan:{agent:"plan",autoApprove:false},"plan-auto":{agent:"plan",autoApprove:true}};exports.opencodeAdapter={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(t,e,n){let r=e.additionalArgs,o=r!==void 0?[...r]:["run"];Pr(o,"--format")||o.push("--format","json"),e.resumeSessionId&&!o.includes("-s")&&!o.includes("--session")&&o.push("-s",e.resumeSessionId);let{agent:i,autoApprove:s}=Rl(e.mode);Pr(o,"--agent")||i!==void 0&&o.push("--agent",i),s&&!Pr(o,"--auto")&&o.push("--auto"),e.effort!==void 0&&!Pr(o,"--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let a;return !n&&!s&&!e.env?.OPENCODE_PERMISSION&&(a={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:o,stdinMessage:t,env:a}},extractText(t){let e=t.split(`
|
|
11
|
+
`).map(o=>o.trim()).filter(Boolean),n=[],r=null;for(let o of e)try{let i=JSON.parse(o);if(i.type==="text"&&typeof i.part?.text=="string"){let s=i.part.text;s.trim()&&n.push(s.trim());}i.type==="result"&&typeof i.result=="string"&&(r=i.result);}catch{}return n.length>0?n[n.length-1]:r||t.trim()},parseResultMeta(t){let e=tt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n=e??new Date().toISOString(),r=[],o;try{JSON.parse(t),o=[t];}catch{o=bl(t),o.length>1&&console.warn("[opencode] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let i of o){let s;try{s=JSON.parse(i);}catch{continue}let a=s.type;if(a){if(a==="text"){let c=s.part?.text;c&&r.push({timestamp:n,type:"text",content:c});continue}if(a==="tool_use"){let d=s.part;if(!d)continue;let c=String(d.tool||""),l=String(d.callID||""),f=d.state,g=String(f?.status||""),m=f?.input,k=Me(m);if(r.push({timestamp:n,type:"tool_use",toolName:c,toolUseId:l,toolInput:k}),g==="completed"&&f?.output!==void 0){let h=f.output,v=typeof h=="string"?h:JSON.stringify(h);r.push({timestamp:n,type:"tool_result",toolUseId:l,resultPreview:v,isError:false});}else g==="error"&&r.push({timestamp:n,type:"tool_result",toolUseId:l,resultPreview:String(f?.error||"tool error"),isError:true});continue}}}return r},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?El.has(r):!1}catch{return false}}};});var Bo,jo=D(()=>{u();Kt();Re();Bo={command:"agy",meta:{displayName:"Antigravity",models:Ro(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(t,e,n){if(e.additionalArgs!==void 0){let o=[...e.additionalArgs];return o.includes("--print")||o.unshift("--print",t),e.model&&o.push("--model",e.model),o.push("--dangerously-skip-permissions"),{args:o}}let r=["--print",t,"--dangerously-skip-permissions"];return e.model&&r.push("--model",e.model),{args:r}},extractText(t){let e=t.trim();if(!e)throw new exports.ProviderError("Antigravity CLI returned empty output with exit code 0. agy may have hidden an auth/quota/model error in its log file; inspect ~/.gemini/antigravity-cli/log for details.","cli/antigravity",{code:"EMPTY_OUTPUT",kind:"transient"});return e},parseResultMeta(t){return {usage:null,model:null}},parseEvent(t,e){return []}};});var Hs,Ws=D(()=>{u();Xt();Yt();Hs={parseEvent(t,e){let n;try{n=JSON.parse(t);}catch{return []}let r=n.type;if(!r)return [];if(r!=="message"&&r!=="tool_use"&&r!=="tool_result")return [];let o=e??new Date().toISOString();if(r==="message"){if(n.role!=="assistant")return [];let s=n.content;return s?[{timestamp:o,type:"text",content:s}]:[]}if(r==="tool_use"){let i=String(n.tool_name||""),s=n.tool_id,a=n.parameters,d=Me(a);return /^bash$/i.test(i)&&Ne(d)?[De(o,d)]:[{timestamp:o,type:"tool_use",toolName:i,toolUseId:s,toolInput:d}]}if(r==="tool_result"){let i=n.tool_id,s=String(n.output||""),a=n.status!=="success";return [{timestamp:o,type:"tool_result",toolUseId:i,resultPreview:s,isError:a}]}return []}};});function Zt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Or(t){return Zt(t)?t:void 0}function _e(t){return typeof t=="string"?t:void 0}function Dt(t){let e=typeof t=="number"?t:Number(t??0);return Number.isFinite(e)?e:0}function Cl(t){let e=[],n=-1,r=0,o=false,i=false;for(let s=0;s<t.length;s+=1){let a=t[s];if(n===-1){(a==="{"||a==="[")&&(n=s,r=1);continue}if(i){i=false;continue}if(a==="\\"&&o){i=true;continue}if(a==='"'){o=!o;continue}o||(a==="{"||a==="["?r+=1:(a==="}"||a==="]")&&(r-=1,r===0&&(e.push(t.slice(n,s+1)),n=-1)));}return n!==-1&&e.push(t.slice(n)),e}function En(t){let e=t.trim();if(!e)return [];try{let n=JSON.parse(e);return Zt(n)?[n]:[]}catch{return Cl(e).flatMap(n=>{try{let r=JSON.parse(n);return Zt(r)?[r]:[]}catch{return []}})}}function xn(t){let e=JSON.stringify(t);return e===void 0?String(t):e}function Rn(t){if(typeof t=="string")return t;if(Array.isArray(t)){let e=t.map(Rn).filter(n=>n!==void 0);return e.length>0?e.join(`
|
|
12
|
+
`):void 0}if(Zt(t)){if(typeof t.text=="string")return t.text;if(typeof t.message=="string")return t.message;if(typeof t.error=="string")return t.error;if(t.type==="text"&&typeof t.data=="string")return t.data;for(let e of ["content","FileContent","rawOutput"]){let n=Rn(t[e]);if(n!==void 0)return n}}}function Sl(t){if(t.rawOutput!==null&&t.rawOutput!==void 0)return Rn(t.rawOutput)??xn(t.rawOutput);if(t.content!==null&&t.content!==void 0)return Rn(t.content)??xn(t.content);if(t.result!==null&&t.result!==void 0)return Rn(t.result)??xn(t.result)}function Js(t){let e=Or(t.error),n=[t.message,t.errorMessage,e?.message,e?.detail,typeof t.error=="string"?t.error:void 0].find(r=>typeof r=="string"&&r.trim().length>0);return n?Ks(n):"Grok CLI reported an error."}function Ks(t){return (t.replace(Pl,"").split(/\r?\n/).map(n=>n.trim()).filter(Boolean)[0]??t.trim()).slice(0,500)}function Vs(t){return Il.test(t)}function Ol(t){let e=Or(t.modelUsage);return e?Object.keys(e)[0]??null:null}function Nl(t){let e=Or(t.usage);if(!e)return null;let n=Dt(e.cache_read_input_tokens);return {inputTokens:Dt(e.input_tokens)+n,cachedInputTokens:n,outputTokens:Dt(e.output_tokens),costUsd:Dt(t.total_cost_usd)}}function Dl(t){let e=0,n=0,r=0,o=false,i=new Set;for(let s of t.split(`
|
|
13
|
+
`).flatMap(En)){if(s.type!=="usage")continue;let a=Or(s.usage);if(!a)continue;let d=_e(s.signature);if(d&&d.length>0){let l=`signature:${d}`;if(i.has(l))continue;i.add(l);}let c=Dt(a.cache_read_input_tokens);e+=Dt(a.input_tokens)+c,n+=c,r+=Dt(a.output_tokens),o=true;}return o?{inputTokens:e,cachedInputTokens:n,outputTokens:r,costUsd:0}:null}function Ml(t,e){if(!Array.isArray(e.entries)||e.entries.length===0)return [];let n=[];for(let i of e.entries.slice(0,qs)){if(!Zt(i))continue;let s=_e(i.content)?.trim();if(!s)continue;let a=_e(i.status)?.trim(),d=_e(i.priority)?.trim(),c=[a?`status=${a}`:void 0,d?`priority=${d}`:void 0].filter(f=>!!f),l=c.length>0?` (${c.join(", ")})`:"";n.push(`- ${s}${l}`);}if(n.length===0)return [];e.entries.length>qs&&n.push(Gs);let r=n.join(`
|
|
14
|
+
`),o=r.length>zs?`${r.slice(0,zs-1)}${Gs}`:r;return [{timestamp:t,type:"info",content:o}]}function Ul(t,e){let n=_e(e.type);if(n==="thought"){let r=_e(e.data);return r===void 0?[]:[{timestamp:t,type:"thinking",content:r}]}if(n==="text"){let r=_e(e.data);return r===void 0?[]:[{timestamp:t,type:"text",content:r}]}if(n==="plan")return Ml(t,e);if(n==="tool_call"){let r=_e(e.toolCallId),o=_e(e.toolName)??_e(e.title),i=e.rawInput===void 0?void 0:xn(e.rawInput);return [{timestamp:t,type:"tool_use",toolUseId:r,toolName:o,toolInput:i}]}if(n==="tool_call_update"){let r=_e(e.status);return r!=="completed"&&r!=="failed"&&r!=="error"?[]:[{timestamp:t,type:"tool_result",toolUseId:_e(e.toolCallId),toolName:_e(e.toolName)??_e(e.title),resultPreview:Sl(e),isError:r!=="completed"||e.isError===true}]}if(n==="error"){let r=Js(e);return [{timestamp:t,type:"error",content:r,errorMessage:r}]}return []}var Sr,Al,Il,Pl,qs,zs,Gs;exports.grokAdapter=void 0;var Fo=D(()=>{u();Kt();Rr();Re();br();Sr="cli/grok",Al=new Set(["available_commands","usage","end"]),Il=/(?:rate[\s_-]*limit|quota|usage[\s_-]*limit|too many requests|limit(?:ed|ing)?\s+(?:exceeded|reached))/i,Pl=/\u001b\[[0-?]*[ -/]*[@-~]/g,qs=20,zs=4e3,Gs="\u2026";exports.grokAdapter={command:"grok",createSessionId:()=>crypto$1.randomUUID(),meta:{displayName:"Grok",capabilities:{resume:true}},buildArgs(t,e){let{model:n,effort:r}=Qt(e.model),o=e.effort??r,i=e.resumeSessionId?["--resume",e.resumeSessionId]:e.providerSessionId?["--session-id",e.providerSessionId]:[],s=n?["--model",n]:[],a=n?Ze("grok").some(R=>R.id===n):false,d=n&&a?Rt("grok",n):[],c=!o||d.length===0||d.includes(o)?o:void 0,l=Fs(c),f=e.additionalArgs??[],g=R=>f.some(b=>b===R||b.startsWith(`${R}=`)),m=e.providerOptions,k=m?.alwaysApprove,h=m?.sandbox,v=g("--permission-mode")?[]:$s(e.mode),w=g("--always-approve")?[]:Bs(k),_=g("--sandbox")?[]:js(h);return {args:["--no-auto-update",...i,"--single",t,"--output-format","streaming-json","--no-alt-screen",...s,...l,...v,...w,..._,...f]}},extractText(t){let e=[],n=false;for(let r of t.split(`
|
|
15
|
+
`).flatMap(En))typeof r.type=="string"&&(n=true),r.type==="text"&&typeof r.data=="string"&&e.push(r.data);return e.length>0?e.join(""):n?"":t.trim()},extractFailure(t){for(let e of En(t))if(e.type==="error"){let n=Js(e);return Vs(xn(e))?new exports.RateLimitError(n,Sr):new exports.ProviderError(n,Sr)}return null},interpretExit(t,e){if(t===0)return null;let n=Ks(e)||`Grok CLI exited with code ${t}.`;return Vs(e)?new exports.RateLimitError(n,Sr):new exports.ProviderError(n,Sr)},parseResultMeta(t){let n=t.split(`
|
|
16
|
+
`).flatMap(En).find(r=>r.type==="end");return n?{usage:Nl(n),model:Ol(n)}:{usage:Dl(t),model:null}},parseEvent(t,e){let n=e??new Date().toISOString();return En(t).flatMap(r=>Ul(n,r))},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e);return Zt(n)&&typeof n.type=="string"?Al.has(n.type):!1}catch{return false}}};});function bn(t,e,n){if(n){let r=exports.BUILTIN_ADAPTERS[n];if(r?.parseEvent)return r.parseEvent(e,t);let o=Ll[n];if(o?.parseEvent)return o.parseEvent(e,t)}for(let r of Object.values(exports.BUILTIN_ADAPTERS)){let o=r.parseEvent?.(e,t)??[];if(o.length>0)return o}return []}exports.BUILTIN_ADAPTERS=void 0;var Ll,ft=D(()=>{u();Mo();Uo();Lo();$o();jo();Ws();Fo();Mo();Uo();Lo();$o();jo();Fo();Xt();exports.BUILTIN_ADAPTERS={codex:exports.codexAdapter,claude:exports.claudeAdapter,opencode:exports.opencodeAdapter,antigravity:Bo,copilot:exports.copilotAdapter,grok:exports.grokAdapter},Ll={gemini:Hs};});var en,Ho=D(()=>{u();en=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 Xs(t,e){if(t===void 0||t==="")return e;let n=parseInt(t,10);return Number.isNaN(n)?e:n}function Wo(t=process.env){let e=t.CREWX_TIMEOUT_IDLE;if(e===void 0||e==="")return;let n=parseInt(e,10);if(!(!Number.isFinite(n)||n<=0))return n}function Ys(t=process.env){return {queryMs:Xs(t.CREWX_TIMEOUT_QUERY,288e5),executeMs:Xs(t.CREWX_TIMEOUT_EXECUTE,288e5),idleMs:Wo(t)??6e5}}var Dr=D(()=>{u();});function Bl(t){let e=t.split(`
|
|
17
|
+
`).filter(d=>d.trim()),n=[],r=[],o=[],i=[],s=[],a=null;for(let d of e)try{let c=JSON.parse(d);if(c.type==="assistant"&&Array.isArray(c.message?.content))for(let l of c.message.content)l.type==="text"&&typeof l.text=="string"&&l.text.trim()&&n.push(l.text.trim());if(c.type==="message"&&c.role==="assistant"&&c.delta===!0&&typeof c.content=="string"&&r.push(c.content),c.type==="assistant.message"&&typeof c.data?.content=="string"){let l=c.data.content;l.trim()&&o.push(l.trim());}if(c.type==="item.completed"&&(c.item?.type==="message"||c.item?.type==="agent_message")&&typeof c.item?.text=="string"){let l=c.item.text;l.trim()&&i.push(l.trim());}if(c.type==="text"&&typeof c.part?.text=="string"){let l=c.part.text;l.trim()&&s.push(l.trim());}c.type==="result"&&typeof c.result=="string"&&(a=c.result);}catch{}return n.length>0?n.join(`
|
|
20
18
|
|
|
21
19
|
`):r.length>0?r.join(""):o.length>0?o.join(`
|
|
22
20
|
|
|
23
|
-
`):
|
|
21
|
+
`):i.length>0?i.join(`
|
|
24
22
|
|
|
25
|
-
`):
|
|
26
|
-
`);
|
|
27
|
-
`);
|
|
23
|
+
`):s.length>0?s.join(""):a||t.trim()}function jl(t){let e=tt(t);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function Fl(t,e,n=process.platform){return t==="copilot"&&n==="win32"&&e instanceof exports.ProviderError&&e.message.includes('CLI command "copilot" not found')}function Zs(t,e,n,r,o,i,s){return new Promise((a,d)=>{let c=o?.timeoutMs??288e5,l=o?.idleMs??6e5,f={...process.env,...o?.env??{}},g=o?.cwd??process.cwd(),m=It({command:t,env:f,cwd:g,allowShellFallback:true}),k=Pt(m,e),h=child_process.spawn(k.command,k.argv,{env:f,cwd:o?.cwd,stdio:["pipe","pipe","pipe"],shell:k.shell??false,windowsHide:k.windowsHide,detached:process.platform!=="win32"});h.stdin.on("error",O=>{O.code!=="EPIPE"&&o?.onOutput?.(`stdin error: ${O.message}`,"stderr");}),i!==void 0&&h.stdin.write(i),h.stdin.end(),h.pid!==void 0&&o?.onPid?.(h.pid);let v=false,w=false,_=O=>{if(h.pid!==void 0)try{process.platform==="win32"?h.kill(O):process.kill(-h.pid,O);}catch{}},R=()=>{_("SIGKILL");},L=setTimeout(()=>{v||(w=true,A?.stop(),_("SIGTERM"),setTimeout(R,Tn).unref());},c);L.unref();let A=l>0?new en({timeoutMs:l,onIdle:()=>{if(v)return;v=true,clearTimeout(L),_("SIGTERM"),setTimeout(R,Tn).unref();let O=Math.round(l/6e4);H(new St(`${n} produced no output for ${O}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,n));}}):null;A?.start();let Z=new string_decoder.StringDecoder("utf8"),P=new string_decoder.StringDecoder("utf8"),F="",ce="",X="",re="",H=O=>{O instanceof Error&&(O.stdout=F),d(O);};h.stdout.on("data",O=>{A?.refresh();let te=Z.write(O);F+=te,X+=te;let z=X.split(`
|
|
24
|
+
`);X=z.pop()??"";for(let $ of z)if($.trim()&&(o?.onOutput?.($,"stdout"),s?.extractFailure)){let W=s.extractFailure($);if(W){v=true,clearTimeout(L),A?.stop(),_("SIGTERM"),setTimeout(R,Tn).unref(),H(W);return}}}),h.stderr.on("data",O=>{A?.refresh();let te=P.write(O);ce+=te,re+=te;let z=re.split(`
|
|
25
|
+
`);re=z.pop()??"";for(let $ of z)$.trim()&&o?.onOutput?.($,"stderr");}),h.on("error",O=>{v=true,clearTimeout(L),A?.stop(),O.code==="ENOENT"?H(new exports.ProviderError(`CLI command "${t}" not found. Is ${n} installed?`,n)):H(new exports.ProviderError(`Spawn error: ${O.message}`,n));}),h.on("close",(O,te)=>{if(v)return;v=true,clearTimeout(L),A?.stop();let z=Z.end(),$=P.end();z&&(F+=z,X+=z),$&&(ce+=$,re+=$),X.trim()&&o?.onOutput?.(X,"stdout"),re.trim()&&o?.onOutput?.(re,"stderr");let W=O??0;if(o?.onExitCode?.(W),w)return H(new Ot(`Total runtime exceeded ${c}ms; process killed.`,n));if(te)return H(new exports.ProviderError(`Process terminated by signal ${te}`,n,{code:"PROVIDER_CRASHED",kind:"permanent"}));if(W!==0){if(s?.interpretExit){let ee=s.interpretExit(W,ce);if(ee){H(ee);return}}H(new exports.ProviderError(`Process exited with code ${W}: ${ce.slice(0,500)}`,n));return}let fe;try{fe=s?s.extractText(F):Bl(F);}catch(ee){H(ee instanceof Error?ee:new exports.ProviderError(String(ee),n));return}a({stdout:F,parsed:fe});});})}function nt(t,e){ea.set(t,e);}function rt(t,e){let n=t.split("/");if(n.length!==2)throw new exports.ProviderError(`Invalid provider format: "${t}". Expected namespace/id (e.g., cli/claude)`,t);let[r,o]=n,i=ea.get(r);if(i)return i(o,t);if(r==="cli"){let s=exports.BUILTIN_ADAPTERS[o];if(!s)throw new exports.ProviderError(`Unknown CLI provider id: "${o}". Supported: ${Object.keys(exports.BUILTIN_ADAPTERS).join(", ")}`,t);return new qo(o,s,t,e)}throw new exports.ProviderError(`Unsupported provider namespace: "${r}". Register a factory with registerProviderFactory('${r}', factory).`,t)}function ta(t,e,n){if(!t||!e)return t??{};let r=e({providerStr:n.providerStr,providerId:n.providerId,mode:t.mode});return r.length===0?t:{...t,additionalArgs:[...t.additionalArgs??[],...r]}}var Tn;exports.ClientToolCallRequiredError=void 0;var ea,qo,qe=D(()=>{u();Jt();Ct();ft();Kt();Ho();Dr();Kt();Tn=2e3;exports.ClientToolCallRequiredError=class extends Error{constructor(n,r){super(`Client tool call required: ${n.toolName}`);this.toolCall=n;this.continuationState=r;}toolCall;continuationState;name="ClientToolCallRequiredError"},ea=new Map;qo=class{constructor(e,n,r,o){this.providerId=e;this.adapter=n;this.providerStr=r;this.additionalArgsProvider=o;}providerId;adapter;providerStr;additionalArgsProvider;async execute(e,n){let r=this.composeMessage(e,n),o=this.prepareProviderSession(this.applyAdditionalArgs(n)),{args:i,stdinMessage:s,env:a}=this.adapter.buildArgs(r,o,true);o.onCommand?.(`${this.adapter.command} ${i.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:c,parsed:l}=await this.runProcess(i,d,s);return this.handleResultMeta(c,o),l}async query(e,n){let r=this.composeMessage(e,n),o=this.prepareProviderSession(this.applyAdditionalArgs(n)),{args:i,stdinMessage:s,env:a}=this.adapter.buildArgs(r,o,false);o.onCommand?.(`${this.adapter.command} ${i.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:c,parsed:l}=await this.runProcess(i,d,s);return this.handleResultMeta(c,o),l}applyAdditionalArgs(e){return ta(e,this.additionalArgsProvider,{providerStr:this.providerStr,providerId:this.providerId})}prepareProviderSession(e){if(!this.adapter.createSessionId)return e;if(e.resumeSessionId)return e.onProviderSessionId?.(e.resumeSessionId),{...e,providerSessionId:void 0};let n=this.adapter.createSessionId();return e.onProviderSessionId?.(n),{...e,providerSessionId:n}}composeMessage(e,n){return n?.systemPrompt?`${n.systemPrompt}
|
|
28
26
|
|
|
29
27
|
---
|
|
30
28
|
|
|
31
|
-
${e}`:e}async runProcess(e,
|
|
32
|
-
`);this.stderrBuffer=
|
|
29
|
+
${e}`:e}async runProcess(e,n,r){try{return await Zs(this.adapter.command,e,this.providerStr,this.providerId,n,r,this.adapter)}catch(o){if(Fl(this.providerId,o)){let i=e[0]==="copilot"?e:["copilot",...e];try{return await Zs("gh",i,this.providerStr,this.providerId,n,r,this.adapter)}catch(s){throw this.recoverPartialUsage(s,n),s}}throw this.recoverPartialUsage(o,n),o}}recoverPartialUsage(e,n){let r=e instanceof Error?e.stdout:void 0;typeof r=="string"&&r.length>0&&this.handleResultMeta(r,n);}handleResultMeta(e,n){if(!this.adapter.parseResultMeta){let s=jl(e);s&&n?.onUsage&&n.onUsage(s);return}let{usage:r,model:o}=this.adapter.parseResultMeta(e);r&&n?.onUsage&&n.onUsage(r);let i=o??(this.providerId==="opencode"?n?.model??null:null);i&&n?.onModel&&n.onModel(i);}};});function fi(t){let e=t.update;if(e.sessionUpdate==="agent_message_chunk"){let n=e.content;if(n.type==="text"&&typeof n.text=="string")return n.text}return null}function Le(t,e){try{let n=JSON.parse(t);if(n!=null&&typeof n=="object"&&typeof n.type=="string"&&Hu.has(n.type)){let r=e??new Date().toISOString();return [{...n,timestamp:n.timestamp||r}]}}catch{}return []}var Hu,gt=D(()=>{u();Hu=new Set(["text","tool_use","tool_result","error","running_instruction","agent_call"]);});var rd,od;exports.VercelProviderRuntime=void 0;var Pi=D(()=>{u();qe();rd=10,od=50,exports.VercelProviderRuntime=class{config;constructor(e){this.config=e;}async query(e,n){return this._run(e,"query",n)}async execute(e,n){return this._run(e,"execute",n)}async _run(e,n,r){let{generateText:o,tool:i}=await import('ai'),s=this.convertTools(r?.tools??[],i),a=this.createModel(r?.model),d=Math.min(r?.maxSteps??this.config.maxSteps??rd,od);try{let c=0,l=await o({model:a,system:r?.systemPrompt??void 0,prompt:e,tools:s,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens},onStepFinish:g=>{if(c++,!!r?.onOutput){if(g.toolCalls&&g.toolCalls.length>0)for(let m of g.toolCalls)r.onOutput(JSON.stringify({type:"assistant",message:{content:[{type:"tool_use",id:m.toolCallId,name:m.toolName,input:m.args}]}}),"stdout");if(g.toolResults&&g.toolResults.length>0)for(let m of g.toolResults){let k=typeof m.result=="string"?m.result:JSON.stringify(m.result);r.onOutput(JSON.stringify({type:"user",message:{content:[{type:"tool_result",tool_use_id:m.toolCallId,output:k,is_error:!1}]}}),"stdout");}}}}),f=new Set((r?.tools??[]).filter(g=>!g.execute).map(g=>g.name));if(l.finishReason==="tool-calls"&&Array.isArray(l.toolCalls)&&l.toolCalls.length>0){let g=l.toolCalls.filter(m=>f.has(m.toolName));if(g.length>0){let m=g[0];throw new exports.ClientToolCallRequiredError({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e,responseMessages:l.response?.messages??[],toolDefinitions:r?.tools??[],maxSteps:d,systemPrompt:r?.systemPrompt,modelOverride:r?.model})}}if(r?.onUsage&&l.usage){let g={inputTokens:l.usage.promptTokens??0,outputTokens:l.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};r.onUsage(g);}return r?.onModel&&r.onModel(r.model??this.config.model),l.text??""}catch(c){throw c instanceof exports.ClientToolCallRequiredError?c:c.status===401?new exports.ProviderError(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):c.status===429?new exports.ProviderError(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new exports.ProviderError(`Provider error: ${c.message}`,this.config.provider)}}async continueWithToolResults(e,n,r){let{generateText:o,tool:i}=await import('ai'),s=this.convertTools(e.toolDefinitions,i),a=this.createModel(e.modelOverride),d=Math.min(e.maxSteps??this.config.maxSteps??rd,od),c=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:n.map(l=>({type:"tool-result",toolCallId:l.toolCallId,toolName:l.toolName,result:typeof l.result=="string"?l.result:JSON.stringify(l.result)}))}];try{let l=await o({model:a,system:e.systemPrompt??void 0,messages:c,tools:s,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens}}),f=new Set(e.toolDefinitions.filter(g=>!g.execute).map(g=>g.name));if(l.finishReason==="tool-calls"&&Array.isArray(l.toolCalls)&&l.toolCalls.length>0){let g=l.toolCalls.filter(m=>f.has(m.toolName));if(g.length>0){let m=g[0];throw new exports.ClientToolCallRequiredError({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e.userMessage,responseMessages:[...e.responseMessages,{role:"tool",content:n.map(k=>({type:"tool-result",toolCallId:k.toolCallId,toolName:k.toolName,result:typeof k.result=="string"?k.result:JSON.stringify(k.result)}))},...l.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return r?.onUsage&&l.usage&&r.onUsage({inputTokens:l.usage.promptTokens??0,outputTokens:l.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),r?.onModel&&r.onModel(e.modelOverride??this.config.model),l.text??""}catch(l){throw l instanceof exports.ClientToolCallRequiredError?l:new exports.ProviderError(`Provider error: ${l.message}`,this.config.provider)}}convertTools(e,n){let{z:r}=ge("zod"),o={};for(let i of e){let s=this.jsonSchemaToZod(i.parameters??{},r);i.execute?o[i.name]=n({description:i.description,parameters:s,execute:async a=>i.execute(a)}):o[i.name]=n({description:i.description,parameters:s});}return o}jsonSchemaToZod(e,n){if(!e||!e.properties)return n.object({});let r={},o=e.properties,i=e.required??[];for(let[s,a]of Object.entries(o)){let d;switch(a.type){case "string":d=n.string();break;case "number":d=n.number();break;case "integer":d=n.number().int();break;case "boolean":d=n.boolean();break;case "array":d=n.array(n.any());break;default:d=n.any();}a.description&&(d=d.describe(a.description)),i.includes(s)||(d=d.optional()),r[s]=d;}return n.object(r)}createModel(e){let{provider:n,apiKey:r,baseURL:o}=this.config,i=e||this.config.model;switch(n){case "api/openrouter":{let{createOpenAI:s}=ge("@ai-sdk/openai");return s({apiKey:r||process.env.OPENROUTER_API_KEY,baseURL:o||"https://openrouter.ai/api/v1"})(i)}case "api/openai":{let{createOpenAI:s}=ge("@ai-sdk/openai");return s({apiKey:r||process.env.OPENAI_API_KEY,...o&&{baseURL:o}})(i)}case "api/anthropic":{let{createAnthropic:s}=ge("@ai-sdk/anthropic");return s({apiKey:r||process.env.ANTHROPIC_API_KEY,...o&&{baseURL:o}})(i)}case "api/google":{let{createGoogleGenerativeAI:s}=ge("@ai-sdk/google");return s({apiKey:r||process.env.GOOGLE_API_KEY})(i)}default:throw new exports.ProviderError(`Unsupported API provider: ${n}`,n)}}};});var sd={};lr(sd,{registerApiProviders:()=>id});function id(t){nt("api",(e,n)=>{let r=t?.apiKeys?.[e];return new exports.VercelProviderRuntime({provider:n,model:"",apiKey:r,maxSteps:t?.defaults?.maxSteps,temperature:t?.defaults?.temperature})});}var Ci=D(()=>{u();qe();Pi();});exports.AcpProtocolError=void 0;var Si=D(()=>{u();exports.AcpProtocolError=class extends Error{constructor(n,r,o){super(n);this.code=r;this.data=o;}code;data;name="AcpProtocolError"};});var Df,Mf,ad,dd,Uf;exports.AcpConnection=void 0;var no=D(()=>{u();Jt();Si();qe();Ho();Dr();Df=-32e3,Mf=2e3,ad=3e4,dd=1e4,Uf=8*36e5,exports.AcpConnection=class{constructor(e){this.options=e;}options;proc=null;sdkConnection=null;disposed=false;stderrBuffer="";collectedStderr="";pendingUpdateCallback=null;idleWatchdog=null;idleReject=null;idlePromise=null;authMethods=[];_initResponse=null;get initResponse(){return this._initResponse}async connect(e){if(this.disposed)throw new exports.ProviderError("AcpConnection has been disposed","acp");let n=this.options.spawn,r=process.platform==="win32"&&(n.shellOnWindows??true),o={...process.env,...this.options.env??{}},i=this.options.cwd??process.cwd(),s;try{let w=It({command:n.command,env:o,cwd:i,allowShellFallback:r});s=Pt(w,n.args);}catch(w){throw new exports.ProviderError(w instanceof Error?w.message:String(w),"acp")}let a=child_process.spawn(s.command,s.argv,{stdio:["pipe","pipe","pipe"],env:o,cwd:this.options.cwd,shell:s.shell??false,windowsHide:true,detached:process.platform!=="win32"});a.pid!==void 0&&this.options.onPid?.(a.pid),a.stderr.on("data",w=>{let _=w.toString();this.collectedStderr+=_,this.stderrBuffer+=_;let R=this.stderrBuffer.split(`
|
|
30
|
+
`);this.stderrBuffer=R.pop()??"";for(let b of R)b.trim()&&this.options.onStderr?.(b);}),this.proc=a;let d=this.options.idleMs??6e5;d>0&&(this.idlePromise=new Promise((w,_)=>{this.idleReject=_;}),this.idlePromise.catch(()=>{}),this.idleWatchdog=new en({timeoutMs:d,onIdle:()=>{let w=Math.round(d/6e4),_=new St(`acp produced no output for ${w}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,"acp");this.idleReject?.(_),this.dispose();}}),this.idleWatchdog.start()),a.stdin.on("error",w=>{w.code!=="EPIPE"&&this.options.onStderr?.(`ACP stdin error: ${w.message}`);});let c=new WritableStream({write:w=>new Promise((_,R)=>{a.stdin.write(w,b=>{b?R(b):_();});}),close:()=>{a.stdin.end();}}),l=new ReadableStream({start:w=>{a.stdout.on("data",_=>{this.idleWatchdog?.refresh(),w.enqueue(new Uint8Array(_));}),a.stdout.on("end",()=>{w.close();}),a.stdout.on("error",_=>{w.error(_);});}}),f=sdk.ndJsonStream(c,l),g=this,m=new sdk.ClientSideConnection(w=>({requestPermission:async _=>{if(g.options.configOptions?.allow_all!==void 0){let R=_.options;if(Array.isArray(R)&&R.length>0)return {outcome:{outcome:"selected",optionId:(R.find(L=>L.kind==="allow_once")??R.find(L=>L.kind?.startsWith("allow_"))??R[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async _=>{g.pendingUpdateCallback?.(_);}}),f);this.sdkConnection=m;let k=new Promise((w,_)=>{a.on("error",R=>{if(R.code==="ENOENT"){let L=n.command==="npx"&&n.args.length>0?`@agentclientprotocol/${n.args[0]}`:n.command;_(new exports.ProviderError(`ACP command "${n.command}" not found. Is the ACP adapter installed? Try: npm install -g ${L}`,"acp"));}else _(new exports.ProviderError(`ACP spawn error: ${R.message}`,"acp"));});}),h=this.doInitialize(m,e),v=new Promise((w,_)=>{setTimeout(()=>{_(new exports.AcpProtocolError(`ACP connect timeout after ${ad}ms. The ACP adapter may not be installed or may require interactive setup.`));},ad).unref();});await Promise.race([h,v,k]);}async doInitialize(e,n){let r=await e.initialize({protocolVersion:1,clientCapabilities:{auth:{}},clientInfo:{name:n?.name??"crewx-sdk",version:n?.version??"0.8.4"}});this._initResponse=r,this.authMethods=r.authMethods??[];}async newSession(e){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionWithTimeout(e)}catch(n){if(!this.isAuthError(n))throw n;return await this.tryAuthenticate(),this.newSessionWithTimeout(e)}}async newSessionWithTimeout(e){return (await this.newSessionRawTimeout(e)).sessionId}async newSessionRaw(e){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionRawTimeout(e)}catch(n){if(!this.isAuthError(n))throw n;return await this.tryAuthenticate(),this.newSessionRawTimeout(e)}}async newSessionRawTimeout(e){let n=this.sdkConnection.newSession(e),r=new Promise((o,i)=>{setTimeout(()=>{i(new exports.AcpProtocolError(`ACP session/new timeout after ${dd}ms`));},dd).unref();});return Promise.race([n,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===Df}async tryAuthenticate(){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected.","acp");let e=this.authMethods.find(r=>r.type==="env_var"&&this.hasEnvVarsFor(r));if(e){await this.sdkConnection.authenticate({methodId:e.id});return}let n=this.authMethods.map(r=>`${r.id} (${r.type??"agent"})`).join(", ");if(this.authMethods.length>0){let r=this.authMethods.filter(o=>o.type==="env_var");if(r.length>0){let o=r.flatMap(i=>(i.vars??[]).filter(s=>!s.optional&&!process.env[s.name]).map(s=>s.name));throw new exports.AcpProtocolError(`ACP authentication required. Missing environment variables: ${o.join(", ")}. Set them in your shell or crewx.yaml env block.`)}throw new exports.AcpProtocolError(`ACP authentication required but no supported method found. Available methods: ${n}. CrewX currently supports env_var authentication only.`)}throw new exports.AcpProtocolError("ACP agent requires authentication but advertised no auth methods.")}hasEnvVarsFor(e){return !e.vars||e.vars.length===0?true:e.vars.filter(n=>!n.optional).every(n=>!!process.env[n.name])}async setModel(e,n){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.unstable_setSessionModel({sessionId:e,modelId:n});}async setMode(e,n){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionMode({sessionId:e,modeId:n});}async setConfigOption(e,n,r){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionConfigOption({sessionId:e,configId:n,value:r});}async prompt(e,n,r,o){if(!this.sdkConnection||!this.proc)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");this.pendingUpdateCallback=r??null;let i=this.sdkConnection,s=this.proc,a=o??Uf,d=false,c=i.prompt({sessionId:e,prompt:n}).finally(()=>{d=true;}),l=new Promise((m,k)=>{setTimeout(()=>{i.cancel({sessionId:e}).catch(()=>{}),k(new Ot(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),f=new Promise((m,k)=>{let h=(R,b,L)=>{if(d)return;let A=b!=null?`signal=${b}`:`code=${String(R)}`;k(new exports.ProviderError(`ACP process terminated unexpectedly (${A}) [${L}]: ${this.collectedStderr.slice(-500)}`,"acp"));},v=(R,b)=>h(R,b,"exit"),w=(R,b)=>h(R,b,"close");s.once("exit",v),s.once("close",w);let _=()=>{s.off("exit",v),s.off("close",w);};c.then(_,_);}),g=[c,l,f];this.idlePromise&&g.push(this.idlePromise);try{return await Promise.race(g)}finally{this.pendingUpdateCallback=null;}}async dispose(){if(this.disposed)return;this.disposed=true,this.idleWatchdog?.stop(),this.pendingUpdateCallback=null,this.sdkConnection=null;let e=this.proc;if(!e)return;this.proc=null,this.stderrBuffer.trim()&&(this.options.onStderr?.(this.stderrBuffer),this.stderrBuffer="");let n=e.pid,r=o=>{if(n!==void 0&&process.platform!=="win32")try{process.kill(-n,o);}catch{}else try{e.kill(o);}catch{}};await new Promise(o=>{let i=()=>{clearTimeout(s),o();};e.once("close",i),e.once("error",i);try{r("SIGTERM");}catch{i();return}let s=setTimeout(()=>{r("SIGKILL");},Mf);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function cd(t,e){if(t!=null&&typeof t=="object"){let n=t;if(typeof n.command=="string")return n.command;if(typeof n.file_path=="string")return n.file_path;if(typeof n.filePath=="string")return n.filePath;if(typeof n.path=="string")return n.path;if(typeof n.query=="string")return n.query;if(typeof n.pattern=="string")return n.pattern;if(typeof n.url=="string")return n.url;if(Object.keys(n).length>0)return JSON.stringify(n)}if(e&&e.length>0)return e.map(n=>n.path).join(", ")}var Lf;exports.AcpProviderRuntime=void 0;var Oi=D(()=>{u();gt();no();Lf={read:"Read",edit:"Edit",delete:"Delete",move:"Move",search:"Search",execute:"Bash",think:"Think",fetch:"WebFetch",switch_mode:"SwitchMode"};exports.AcpProviderRuntime=class{constructor(e,n,r){this.adapter=n;}adapter;async query(e,n){return this.runPrompt(e,n)}async execute(e,n){return this.runPrompt(e,n)}async dispose(){}async runPrompt(e,n){let{command:r,args:o}=this.adapter.spawn;n?.onCommand?.(`${r} ${o.join(" ")}`);let i=this.adapter.buildSpawnEnv?.(n?.model??""),s=i?{...n?.env,...i}:n?.env,a=new exports.AcpConnection({spawn:this.adapter.spawn,env:s,cwd:n?.cwd,timeoutMs:n?.timeoutMs,idleMs:n?.idleMs,onPid:n?.onPid,onStderr:d=>n?.onOutput?.(d,"stderr"),configOptions:n?.configOptions});try{await a.connect(this.adapter.clientInfo);let d=this.adapter.buildSessionParams({cwd:n?.cwd,env:n?.env,model:n?.model,systemPrompt:n?.systemPrompt}),c=await a.newSession(d);await this.applySessionOptions(a,c,n);let l=this.composePrompt(e,n),f=[],g=await a.prompt(c,l,m=>this.handleUpdate(m,n,f),n?.timeoutMs);return this.handleUsage(g,n),f.join("")}finally{await a.dispose().catch(()=>{});}}async applySessionOptions(e,n,r){if(r?.model&&r.model!=="default"&&!this.adapter.buildSpawnEnv){let o=this.adapter.buildEffortAction?.(r.effort??"",r.model);try{o?.type==="set_model"?await e.setModel(n,o.modelId):await e.setModel(n,r.model);}catch(i){console.warn(`[acp] setModel(${r.model}) failed: ${i instanceof Error?i.message:String(i)}`);}}if(r?.mode){let o=this.adapter.resolveMode?.(r.mode)??r.mode;if(o)try{await e.setMode(n,o);}catch(i){console.warn(`[acp] setMode(${o}) failed: ${i instanceof Error?i.message:String(i)}`);}}if(r?.effort){let o=this.adapter.buildEffortAction?.(r.effort,r.model);if(o&&o.type==="set_config_option")try{await e.setConfigOption(n,o.configId,o.value);}catch(i){console.warn(`[acp] setConfigOption(${o.configId}) effort failed: ${i instanceof Error?i.message:String(i)}`);}}if(r?.configOptions)for(let[o,i]of Object.entries(r.configOptions))try{await e.setConfigOption(n,o,i);}catch(s){console.warn(`[acp] setConfigOption(${o}) failed, retrying: ${s instanceof Error?s.message:String(s)}`);try{await new Promise(a=>setTimeout(a,500)),await e.setConfigOption(n,o,i);}catch(a){console.warn(`[acp] setConfigOption(${o}) retry failed: ${a instanceof Error?a.message:String(a)}`);}}}composePrompt(e,n){let r=[];return n?.systemPrompt?.trim()&&(r.push(n.systemPrompt),r.push("---")),n?.context&&(r.push(n.context),r.push("---")),r.push(e),[{type:"text",text:r.join(`
|
|
33
31
|
|
|
34
|
-
`)}]}handleUpdate(e,
|
|
32
|
+
`)}]}handleUpdate(e,n,r){let o=e.update;if(o.sessionUpdate==="agent_message_chunk"){let i=null;this.adapter.extractTextFromUpdate?i=this.adapter.extractTextFromUpdate(e):i=fi(e),i!==null&&(r.push(i),n?.onOutput?.(i,"stdout"));}else if(o.sessionUpdate==="tool_call"){this.pushBlockBoundary(r);let i=new Date().toISOString(),s=o,a={title:s.title??"",kind:s.kind,rawInput:s.rawInput,rawOutput:s.rawOutput,locations:s.locations,_meta:s._meta},d=this.resolveToolCall(a),c={timestamp:i,type:"tool_use",toolUseId:s.toolCallId,toolName:d.toolName,toolInput:d.toolInput};n?.onTaskLog?.([c]);}else if(o.sessionUpdate==="tool_call_update"){let i=new Date().toISOString(),s=o;if(s.status==="completed"||s.status==="failed"){let d=this.extractResultPreview(s.rawOutput),c={timestamp:i,type:"tool_result",toolUseId:s.toolCallId,resultPreview:d,isError:s.status==="failed"};n?.onTaskLog?.([c]);}else if(s.rawInput!=null&&typeof s.rawInput=="object"&&Object.keys(s.rawInput).length>0){this.pushBlockBoundary(r);let d={title:s.title??"",kind:s.kind,rawInput:s.rawInput,rawOutput:s.rawOutput,locations:s.locations,_meta:s._meta},c=this.resolveToolCall(d),l={timestamp:i,type:"tool_use",toolUseId:s.toolCallId,toolName:c.toolName,toolInput:c.toolInput};n?.onTaskLog?.([l]);}}else o.sessionUpdate;}pushBlockBoundary(e){e.length===0||e[e.length-1].endsWith(`
|
|
35
33
|
|
|
36
34
|
`)||e.push(`
|
|
37
35
|
|
|
38
|
-
`);}resolveToolCall(e){let
|
|
39
|
-
`)}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 Yr=N(()=>{c();Te();he();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 Qr=N(()=>{c();Te();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 ot;exports.copilotAcpAdapter=void 0;var Zr=N(()=>{c();Te();ot="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:`${ot}#autopilot`,buildEffortAction(n){return n?{type:"set_config_option",configId:"reasoning_effort",value:n}:null},resolveMode(n){return n.startsWith("https://")?n:{yolo:`${ot}#autopilot`,default:`${ot}#agent`,agent:`${ot}#agent`,plan:`${ot}#plan`,autopilot:`${ot}#autopilot`}[n]??null},parseEvent:le};});exports.opencodeAcpAdapter=void 0;var en=N(()=>{c();Te();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 sr=N(()=>{c();Yr();Qr();Zr();en();Yr();Qr();Zr();en();exports.ACP_ADAPTERS={codex:exports.codexAcpAdapter,claude:exports.claudeAcpAdapter,opencode:exports.opencodeAcpAdapter,copilot:exports.copilotAcpAdapter};});var Po={};Ot(Po,{registerAcpProviders:()=>To});function To(n){if(n){we("acp",n);return}we("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 tn=N(()=>{c();pe();Jr();sr();pe();});function Oa(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 rn=N(()=>{c();exports.McpHttpTransport=class{endpoint;headers;timeoutMs;constructor(e){let t=Oa(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 nn=N(()=>{c();rn();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 bo={};Ot(bo,{RemoteProviderRuntime:()=>exports.RemoteProviderRuntime,createRemoteProviderFactory:()=>So,resolveFileRemoteAgent:()=>Ha});function Ua(n){let e=go.readFileSync(n,"utf-8"),t=jsYaml.load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function ja(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 Ha(n,e=Ua,t=go.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=ja(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 So(n,e=xe){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 Fa(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 on=N(()=>{c();pe();nn();exports.RemoteProviderRuntime=class{manager;agentId;constructor(e,t,r=xe){this.agentId=t.external_agent_id??e,this.manager=new exports.RemoteAgentManager;let o=Fa(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(`
|
|
40
|
-
`)}async execute(e,
|
|
41
|
-
`)}};});var
|
|
42
|
-
`);
|
|
43
|
-
`);
|
|
44
|
-
|
|
36
|
+
`);}resolveToolCall(e){let n=e._meta;if(n?.claudeCode?.toolName)return {toolName:n.claudeCode.toolName,toolInput:cd(e.rawInput,e.locations)??(e.title||void 0)};if(this.adapter.parseToolCall){let i=this.adapter.parseToolCall(e);if(i)return {toolName:i.toolName??e.title??"unknown",toolInput:i.toolInput}}let r=Lf[e.kind??""]??e.title??"unknown",o=cd(e.rawInput,e.locations)??(e.title||void 0);return {toolName:r,toolInput:o}}extractResultPreview(e){if(e!=null){if(typeof e=="string")return e;if(Array.isArray(e)){let n=e.filter(r=>r!=null&&typeof r=="object"&&r.type==="text"&&typeof r.text=="string").map(r=>r.text);if(n.length>0)return n.join(`
|
|
37
|
+
`)}if(typeof e=="object"){let n=e;if(typeof n.formatted_output=="string")return n.formatted_output;if(typeof n.content=="string")return n.content;if(Array.isArray(n.content)){let r=this.extractResultPreview(n.content);if(r)return r}if(typeof n.output=="string")return n.output;if(typeof n.text=="string")return n.text;if(typeof n.message=="string")return n.message;if(n.result!=null){let r=this.extractResultPreview(n.result);if(r)return r}if(n.error!=null){let r=this.extractResultPreview(n.error);if(r)return r}}return JSON.stringify(e)}}handleUsage(e,n){if(!n?.onUsage)return;if(this.adapter.extractUsage){let o=this.adapter.extractUsage(e);if(o){n.onUsage(o);return}}let r=e.usage;r&&n.onUsage({inputTokens:r.inputTokens??0,outputTokens:r.outputTokens??0,cachedInputTokens:r.cachedReadTokens??0,costUsd:0});}};});exports.claudeAcpAdapter=void 0;var Ni=D(()=>{u();gt();exports.claudeAcpAdapter={spawn:{command:"npx",args:["-y","@agentclientprotocol/claude-agent-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/claude-agent-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Claude",defaultMode:"default"},buildSessionParams(t){return {cwd:t.cwd??process.cwd(),mcpServers:[]}},extractUsage(t){let e=t.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"bypassPermissions",buildEffortAction(t){return t?{type:"set_config_option",configId:"effort",value:t}:null},buildSpawnEnv(t){if(!(!t||t==="default"))return {ANTHROPIC_MODEL:t}},resolveMode(t){return {yolo:"bypassPermissions"}[t]??t},parseEvent:Le};});exports.codexAcpAdapter=void 0;var Di=D(()=>{u();gt();exports.codexAcpAdapter={spawn:{command:"npx",args:["-y","@agentclientprotocol/codex-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/codex-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Codex",defaultMode:"agent"},buildSessionParams(t){return {cwd:t.cwd??process.cwd(),mcpServers:[]}},extractUsage(t){let e=t.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"agent-full-access",buildEffortAction(t,e){if(!e)return null;let n=e.match(/^(.+?)\[([^\]]+)\]$/),r=n?n[1]:e,o=n?n[2]:void 0;return {type:"set_model",modelId:`${r}[${t||o||"medium"}]`}},resolveMode(t){return {yolo:"agent-full-access",default:"agent",plan:"read-only"}[t]??t},parseEvent:Le};});var on;exports.copilotAcpAdapter=void 0;var Mi=D(()=>{u();gt();on="https://agentclientprotocol.com/protocol/session-modes",exports.copilotAcpAdapter={spawn:{command:"copilot",args:["--acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"GitHub Copilot"},buildSessionParams(t){return {cwd:t.cwd?K.resolve(t.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${on}#autopilot`,buildEffortAction(t){return t?{type:"set_config_option",configId:"reasoning_effort",value:t}:null},resolveMode(t){return t.startsWith("https://")?t:{yolo:`${on}#autopilot`,default:`${on}#agent`,agent:`${on}#agent`,plan:`${on}#plan`,autopilot:`${on}#autopilot`}[t]??null},parseEvent:Le};});exports.opencodeAcpAdapter=void 0;var Ui=D(()=>{u();gt();exports.opencodeAcpAdapter={spawn:{command:"opencode",args:["acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"OpenCode"},buildSessionParams(t){return {cwd:t.cwd??process.cwd(),mcpServers:[]}},buildEffortAction(t){return null},resolveMode(t){return t},parseEvent:Le};});exports.ACP_ADAPTERS=void 0;var ao=D(()=>{u();Ni();Di();Mi();Ui();Ni();Di();Mi();Ui();exports.ACP_ADAPTERS={codex:exports.codexAcpAdapter,claude:exports.claudeAcpAdapter,opencode:exports.opencodeAcpAdapter,copilot:exports.copilotAcpAdapter};});var ud={};lr(ud,{registerAcpProviders:()=>ld});function ld(t){if(t){nt("acp",t);return}nt("acp",(e,n)=>{let r=exports.ACP_ADAPTERS[e];if(!r)throw new exports.ProviderError(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(exports.ACP_ADAPTERS).join(", ")}`,n);return new exports.AcpProviderRuntime(e,r,n)});}var Li=D(()=>{u();qe();Oi();ao();qe();});function Bf(t){if(!t)return t;let e=t.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}exports.McpHttpTransport=void 0;var $i=D(()=>{u();exports.McpHttpTransport=class{endpoint;headers;timeoutMs;constructor(e){let n=Bf(e.url);this.endpoint=`${n}/mcp`,this.headers={"Content-Type":"application/json",...e.headers??{}},e.apiKey&&(this.headers.Authorization=`Bearer ${e.apiKey}`),this.timeoutMs=e.timeoutMs??3e4;}async send(e){let n=new AbortController,r=setTimeout(()=>n.abort(),this.timeoutMs);try{let o=await fetch(this.endpoint,{method:"POST",headers:this.headers,body:JSON.stringify(e),signal:n.signal});if(clearTimeout(r),!o.ok){let a=await o.text();throw new Error(`HTTP ${o.status}: ${o.statusText}${a?` - ${a}`:""}`)}let i=o.headers.get("content-type");if(i?.includes("application/json"))return await o.json();let s=await o.text();return {jsonrpc:"2.0",id:e.id,error:{code:-32600,message:`Unexpected response content-type: ${i}`,data:s}}}catch(o){throw clearTimeout(r),o instanceof Error&&o.name==="AbortError"?new Error(`MCP-HTTP request timeout after ${this.timeoutMs}ms to ${this.endpoint}`):o}}async close(){}};});exports.RemoteAgentManager=void 0;var Bi=D(()=>{u();$i();exports.RemoteAgentManager=class{logger;configs=new Map;transports=new Map;constructor(e={}){this.logger=e.logger??(()=>{});}loadConfig(e,n){this.validateConfig(n),this.configs.set(e,n),this.transports.set(e,new exports.McpHttpTransport({url:n.url,apiKey:n.apiKey,headers:n.headers,timeoutMs:n.timeoutMs})),this.logger(`Loaded remote agent config for: ${e}`,"debug");}loadConfigWithTransport(e,n,r){this.validateConfig(n),this.configs.set(e,n),this.transports.set(e,r),this.logger(`Loaded remote agent config for: ${e} (custom transport)`,"debug");}getConfig(e){return this.configs.get(e)}isRemoteAgent(e){return this.configs.has(e)}getRemoteAgentIds(){return Array.from(this.configs.keys())}async query(e,n){let r=this.requireConfig(e),o=r.tools?.query??"crewx_queryAgent",s={agentId:r.agentId??e,query:n.query};n.context&&(s.context=n.context),n.model&&(s.model=n.model),n.platform&&(s.platform=n.platform),n.messages?.length&&(s.messages=n.messages);try{let a=await this.callRemoteTool(e,o,s);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote query failed for agent ${e}: ${d}`,"error"),a}}async execute(e,n){let r=this.requireConfig(e),o=r.tools?.execute??"crewx_executeAgent",s={agentId:r.agentId??e,task:n.task};n.context&&(s.context=n.context),n.model&&(s.model=n.model),n.platform&&(s.platform=n.platform),n.messages?.length&&(s.messages=n.messages);try{let a=await this.callRemoteTool(e,o,s);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote execute failed for agent ${e}: ${d}`,"error"),a}}mapToolNames(e,n){let r=this.requireConfig(e);r.tools={query:n.query??r.tools?.query??"crewx_queryAgent",execute:n.execute??r.tools?.execute??"crewx_executeAgent"},this.logger(`Updated tool name mapping for agent ${e}`,"debug");}async clearConfigs(){for(let e of this.transports.values())await e.close();this.configs.clear(),this.transports.clear(),this.logger("Cleared all remote agent configurations","debug");}requireConfig(e){let n=this.configs.get(e);if(!n)throw new Error(`Agent ${e} is not configured as a remote agent`);return n}async callRemoteTool(e,n,r){let o=this.transports.get(e);if(!o)throw new Error(`No transport available for agent ${e}`);let i={jsonrpc:"2.0",id:`${n}-${Date.now()}`,method:"tools/call",params:{name:n,arguments:r}};this.logger(`Calling remote MCP tool ${n} for agent ${e}`,"debug");let s=await o.send(i);if(s.error)throw new Error(s.error.message||"MCP server returned an error");return s.result}normalizeResponse(e){if(!e)return {success:false,content:[{type:"text",text:"Remote agent returned no response."}]};let n=e;if(Array.isArray(n.content)&&n.content.length>0)return n;let r=n.response??n.implementation??n.message??n.output,o=typeof r=="string"?r:JSON.stringify(r??e,null,2);return {...n,content:[{type:"text",text:o}]}}validateConfig(e){if(!e.url)throw new Error("Remote agent configuration requires a URL");if(!e.url.startsWith("http://")&&!e.url.startsWith("https://"))throw new Error("Remote agent URL must start with http:// or https://");if(e.type!=="mcp-http")throw new Error(`Unsupported remote agent type: ${e.type}`)}};});var fd={};lr(fd,{RemoteProviderRuntime:()=>exports.RemoteProviderRuntime,createRemoteProviderFactory:()=>pd,resolveFileRemoteAgent:()=>Vf});function zf(t){let e=Ua.readFileSync(t,"utf-8"),n=jsYaml.load(e);return {agents:Array.isArray(n?.agents)?n.agents:void 0}}function Gf(t){let e=Array.isArray(t.provider)?t.provider[0]:t.provider;return e||(Array.isArray(t.inline?.provider)?t.inline.provider[0]:t.inline?.provider)}function Vf(t,e=zf,n=Ua.existsSync){let r=t.location.replace("file://","");if(!n(r))throw new Error(`Remote config file not found: ${r}`);if(!t.external_agent_id)throw new Error(`external_agent_id is required for file:// remote provider "${t.id}"`);let i=e(r).agents?.find(d=>d.id===t.external_agent_id);if(!i)throw new Error(`Agent "${t.external_agent_id}" not found in ${r}`);let s=Gf(i);if(!s)throw new Error(`Agent "${t.external_agent_id}" in ${r} has no provider configured`);if(s.startsWith("remote/"))throw new Error(`Chained remotes not allowed: ${t.id} \u2192 ${s}`);let a=K.resolve(K.dirname(r),i.working_directory??".");return {agent:{...i,working_directory:a},provider:s}}function pd(t,e=rt){return (n,r)=>{let o=t.get(n);if(!o)throw new Error(`Remote provider "${n}" not found. Available: ${Array.from(t.keys()).join(", ")||"(none)"}`);if(o.location.startsWith("file://"))throw new Error(`Remote provider "${n}" uses file:// location which is not supported at the SDK level. Use the CLI commands (crewx query / crewx execute) which handle file:// remotes automatically.`);return new exports.RemoteProviderRuntime(n,o,e)}}function Jf(t,e){let n=e.location;if(!n)throw new Error("Remote provider config requires a location");if(!n.startsWith("http://")&&!n.startsWith("https://"))throw new Error(`Unsupported remote location protocol for MCP-HTTP: ${n}`);return {type:"mcp-http",url:n,apiKey:e.apiKey,headers:e.headers,timeoutMs:e.timeout?.query??3e4,agentId:e.external_agent_id??t}}exports.RemoteProviderRuntime=void 0;var ji=D(()=>{u();qe();Bi();exports.RemoteProviderRuntime=class{manager;agentId;constructor(e,n,r=rt){this.agentId=n.external_agent_id??e,this.manager=new exports.RemoteAgentManager;let o=Jf(e,n);this.manager.loadConfig(this.agentId,o);}async query(e,n){return (await this.manager.query(this.agentId,{agentId:this.agentId,query:e,model:n?.model,context:n?.context??n?.systemPrompt})).content.map(o=>o.text).join(`
|
|
38
|
+
`)}async execute(e,n){return (await this.manager.execute(this.agentId,{agentId:this.agentId,task:e,model:n?.model,context:n?.context??n?.systemPrompt})).content.map(o=>o.text).join(`
|
|
39
|
+
`)}};});var yd={};lr(yd,{PluginProviderRuntime:()=>exports.PluginProviderRuntime,createPluginProviderFactory:()=>hd});function hd(t){return (e,n)=>{let r=t.get(e);if(!r)throw new exports.ProviderError(`Plugin provider "${e}" not found. Available: ${Array.from(t.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new exports.PluginProviderRuntime(e,r)}}function gd(t,e,n,r){let o=t.map(i=>i.replace(/\{model\}/g,e));return r&&o.push(n),o}function Xf(t){if(!t||typeof t!="string")throw new Error("Plugin provider requires a cli_command")}function md(t){if(!Array.isArray(t))throw new Error("CLI arguments must be an array");for(let e of t)if(typeof e!="string")throw new Error("Each CLI argument must be a string")}function Yf(t){for(let{pattern:e}of t)if(typeof e!="string")throw new Error("Error pattern must be a string")}function Qf(t){for(let[e,n]of Object.entries(t))if(typeof e!="string"||typeof n!="string")throw new Error("env entries must be string key/value pairs")}exports.PluginProviderRuntime=void 0;var Fi=D(()=>{u();qe();Jt();exports.PluginProviderRuntime=class{constructor(e,n){this.config=n;this.providerStr=`plugin/${e}`,Xf(n.cli_command),md(n.query_args),md(n.execute_args),n.error_patterns&&Yf(n.error_patterns),n.env&&Qf(n.env);}config;providerStr;async query(e,n){let r=n?.model??this.config.default_model??"default",o=gd(this.config.query_args,r,e,this.config.prompt_in_args),i=this.config.prompt_in_args?void 0:e;n?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let s=this.config.timeout?.query??6e5;return this.runProcess(o,n,i,s)}async execute(e,n){let r=n?.model??this.config.default_model??"default",o=gd(this.config.execute_args,r,e,this.config.prompt_in_args),i=this.config.prompt_in_args?void 0:e;n?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let s=this.config.timeout?.execute??6e5;return this.runProcess(o,n,i,s)}runProcess(e,n,r,o){return new Promise((i,s)=>{let a={...process.env,...this.config.env??{}},d=It({command:this.config.cli_command,env:a,cwd:process.cwd(),resolution:this.config.prefer_local_bin?"local_first":"global_first",allowShellFallback:true}),c=Pt(d,e),l=child_process.spawn(c.command,c.argv,{env:a,shell:c.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:c.windowsHide});r!==void 0&&l.stdin.write(r),l.stdin.end(),l.pid!==void 0&&n?.onPid?.(l.pid);let f="",g="",m="",k="";l.stdout.on("data",v=>{let w=v.toString();f+=w,m+=w;let _=m.split(`
|
|
40
|
+
`);m=_.pop()??"";for(let R of _)R.trim()&&n?.onOutput?.(R,"stdout");}),l.stderr.on("data",v=>{let w=v.toString();g+=w,k+=w;let _=k.split(`
|
|
41
|
+
`);k=_.pop()??"";for(let R of _)R.trim()&&n?.onOutput?.(R,"stderr");});let h=setTimeout(()=>{l.kill("SIGTERM"),s(new exports.ProviderError(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);l.on("error",v=>{if(clearTimeout(h),v.code==="ENOENT"){let w=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;s(new exports.ProviderError(w,this.providerStr));}else s(new exports.ProviderError(`Spawn error: ${v.message}`,this.providerStr));}),l.on("close",v=>{clearTimeout(h),m.trim()&&n?.onOutput?.(m,"stdout"),k.trim()&&n?.onOutput?.(k,"stderr");let w=v??0;if(n?.onExitCode?.(w),this.config.error_patterns){let _=g||f;for(let R of this.config.error_patterns)if(_.includes(R.pattern)){s(new exports.ProviderError(R.message,this.providerStr));return}}if(v!==0){s(new exports.ProviderError(`Process exited with code ${v}: ${g.slice(0,500)}`,this.providerStr));return}i(f.trim());});})}};});u();u();u();function dc(t){let e=o=>o.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=t.split("/").map(o=>o==="**"?".*":o.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function Fe(t,e){try{return dc(e).test(t)}catch{return false}}u();u();u();Re();var Rs=60,fr=30,gr=80,To="o200k_base",kc=`
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
`,mr="system_prompt\\n\\n---\\n\\nmessage",Ao="message",vc=16384,Ec=Object.keys(bo__default.default.special_tokens),Es,xs;function bs(){return Es??=jsTiktoken.getEncoding(To),Es}function xc(){return xs??=new lite.Tiktoken(bo__default.default),xs}function Rc(t){return Ec.some(e=>t.includes(e))}function bc(t){return t===void 0?vc:!Number.isFinite(t)||t<=0?0:Math.floor(t)}function Tc(t={}){let e=bc(t.pieceCacheMaxEntries),n=new Map,r=t.observePieceCache;return o=>{if(Rc(o))return r?.({type:"full_encode",reason:"special_token"}),bs().encode(o).length;let i=0,s=new RegExp(bo__default.default.pat_str,"ug");for(let a of o.matchAll(s)){let d=a[0],c=n.get(d);if(c!==void 0){n.delete(d),n.set(d,c),r?.({type:"hit",piece:d,tokenCount:c}),i+=c;continue}let l=xc().encode(d).length;if(r?.({type:"miss",piece:d,tokenCount:l}),e>0){if(n.size>=e){let f=n.keys().next().value;if(f!==void 0){let g=n.get(f);n.delete(f),r?.({type:"evict",piece:f,tokenCount:g});}}n.set(d,l);}i+=l;}return i}}function Io(t){let e=t.trim(),n=e.indexOf("/");return n===-1?e:e.slice(n+1)}function Ac(t){if(t===void 0)return Rs;if(!(!Number.isFinite(t)||!Number.isInteger(t))&&!(t<fr||t>gr))return t}function Ic(t){return typeof t=="number"&&Number.isInteger(t)&&t>0}function Pc(t){return /^gpt-5(?:$|[.-])/.test(t)}function hr(t={}){let e=t.provider?Io(t.provider):"",n=t.model??"",r={provider:e,model:n,encoding:To,exact:Pc(n)};return r.exact||(r.fallbackReason="vendor_tokenizer_unavailable"),r}function yr(t,e={}){return {tokenCount:bs().encode(t).length,tokenizer:hr(e)}}function Cc(t){let e=t.systemPrompt??"";return e?`${e}${kc}${t.message}`:t.message}function Po(t,e){return e(Cc(t))}function Sc(t={},e={}){let n=hr(t),r=Tc(e);return {metadata:n,countTokens:r}}function Co(t={}){return Sc(t)}function wr(t){let e=t.provider,n=Io(e),r=hr({provider:n,model:t.model}),o=Ac(t.inputBudgetPercent);if(o===void 0)return {resolved:false,requestedProvider:e,provider:n,model:t.model,reason:"invalid_input_budget_percent",tokenizer:r};let i=Oe(n);if(i.models.length===0)return {resolved:false,requestedProvider:e,provider:n,model:t.model,inputBudgetPercent:o,reason:"provider_catalog_unavailable",tokenizer:r};let s=i.models.find(a=>a.id===t.model);return s?Ic(s.contextWindowTokens)?{resolved:true,requestedProvider:e,provider:n,model:t.model,contextWindowTokens:s.contextWindowTokens,inputBudgetPercent:o,inputBudgetTokens:Math.floor(s.contextWindowTokens*o/100),tokenizer:r}:{resolved:false,requestedProvider:e,provider:n,model:t.model,inputBudgetPercent:o,reason:"context_window_tokens_unavailable",tokenizer:r}:{resolved:false,requestedProvider:e,provider:n,model:t.model,inputBudgetPercent:o,reason:"model_not_found",tokenizer:r}}var Nc=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()),Ts=zod.z.object({include:zod.z.array(zod.z.string()).optional()}).optional(),Dc=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:Nc.optional(),skills:Ts}).catchall(zod.z.unknown()),Mc=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()}),Uc=zod.z.number().finite().int().min(fr).max(gr),Lc=zod.z.object({inputBudgetPercent:Uc.optional()}).catchall(zod.z.unknown()),$c=zod.z.object({continuity:Lc.optional()}).catchall(zod.z.unknown()),Bc=zod.z.object({bin_resolution:zod.z.enum(["global_first","local_first"]).optional(),dreaming:$c.optional(),wi:zod.z.object({boards:zod.z.array(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()),As=zod.z.object({agents:zod.z.array(Dc).optional(),hooks:zod.z.array(zod.z.unknown()).optional(),settings:Bc.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 bt=class extends Error{constructor(n,r){super(n);this.cause=r;this.name="ConfigLoadError";}cause};function _r(t){if(!t||typeof t!="string"||!t.trim())throw new bt("YAML content must be a non-empty string");let e;try{e=jsYaml.load(t);}catch(o){throw new bt(`YAML parse error: ${o.message}`,o)}let n=Hc(e),r=As.safeParse(n);if(!r.success)throw new bt(`Config validation error: ${r.error.message}`);return r.data}function kr(t){let e;try{e=Ua.readFileSync(t,"utf-8");}catch(n){throw new bt(`Cannot read file: ${t}`,n)}return _r(e)}function Hc(t){if(!t||typeof t!="object")return {agents:[]};let e=t,n;if(e.agents&&typeof e.agents=="object"&&!Array.isArray(e.agents)){let o=e.agents;n=Object.entries(o).map(([i,s])=>({id:i,...s&&typeof s=="object"?s:{}}));}else if(Array.isArray(e.agents))n=e.agents;else return {...e,agents:[]};let r=n.map(o=>{if(o.provider===void 0&&o.inline&&typeof o.inline=="object"){let i=o.inline;if(i.provider!==void 0)return {...o,provider:i.provider}}return o});return {...e,agents:r}}u();var Tt=K.join("templates","agents"),At=K.join("templates","workflows");function Is(){try{let e=(typeof ge=="function"?ge:module$1.createRequire(typeof __filename<"u"?__filename:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return K.dirname(e)}catch{return null}}function Gt(t){if(t&&Ua.existsSync(t))return t;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&Ua.existsSync(e))return e;let n=Is();if(n){let o=K.join(n,Tt);if(Ua.existsSync(o))return o}let r=[K.join(__dirname,"..",Tt),K.join(__dirname,"..","..",Tt),K.join(__dirname,"..","..","..",Tt),K.join(process.cwd(),"packages","sdk",Tt),K.join(process.cwd(),Tt)];for(let o of r)if(Ua.existsSync(o))return o;throw new Error(`[@crewx/sdk] Templates directory not found.
|
|
46
|
+
`+(n?` package anchor: ${K.join(n,Tt)}
|
|
45
47
|
`:` package anchor: (unresolved)
|
|
46
48
|
`)+r.map(o=>` candidate: ${o}`).join(`
|
|
47
49
|
`)+`
|
|
48
|
-
Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function
|
|
50
|
+
Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function So(){let t=Gt();return {yamlPath:K.join(t,"default.yaml"),dir:t}}function zc(t){if(t&&Ua.existsSync(t))return t;let e=process.env.CREWX_SDK_WORKFLOW_TEMPLATES_PATH;if(e&&Ua.existsSync(e))return e;let n=Is();if(n){let o=K.join(n,At);if(Ua.existsSync(o))return o}let r=[K.join(__dirname,"..",At),K.join(__dirname,"..","..",At),K.join(__dirname,"..","..","..",At),K.join(process.cwd(),"packages","sdk",At),K.join(process.cwd(),At)];for(let o of r)if(Ua.existsSync(o))return o;throw new Error(`[@crewx/sdk] Workflow templates directory not found.
|
|
51
|
+
`+(n?` package anchor: ${K.join(n,At)}
|
|
52
|
+
`:` package anchor: (unresolved)
|
|
53
|
+
`)+r.map(o=>` candidate: ${o}`).join(`
|
|
54
|
+
`)+`
|
|
55
|
+
Set CREWX_SDK_WORKFLOW_TEMPLATES_PATH or pass options.templatesPath.`)}u();var et=class extends Error{constructor(e,n){let r=n.length>0?` Available: ${n.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},Gc={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function vr(t,e){let n=t.startsWith("@")?t.slice(1):t,r=e.find(i=>i.id===n);if(r)return r;let o=Gc[n];if(o)return o;throw new et(t,e.map(i=>i.id))}qe();Dr();zt();u();u();function Hl(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Wl(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function In(t){if(!Hl(t)||Wl(t,"grok"))return t;let e=t.mode,n;switch(e){case "agent":n={...t,grok:{alwaysApprove:true,sandbox:"workspace"}},delete n.mode;break;case "agent-full-access":case "yolo":n={...t,grok:{alwaysApprove:true,sandbox:"off"}},delete n.mode;break;case "read-only":case "plan":n={...t,mode:"plan",grok:{alwaysApprove:false,sandbox:"read-only"}};break;default:return t}return n}function zo(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function na(t){if(t)return t.slice(t.lastIndexOf("/")+1)}function ql(t,e){let n=t.providerOptions;if(zo(n)){let i=na(e),s=i?n[i]:void 0;return zo(s)?{...s}:{...n}}let r=na(e),o=r?t[r]:void 0;return zo(o)?{...o}:void 0}function Mr(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n=typeof e.provider=="string"?e.provider.trim():void 0,r=n?.slice(n.lastIndexOf("/")+1)==="grok",o=Object.prototype.hasOwnProperty.call(e,"grok")||Object.prototype.hasOwnProperty.call(e,"providerOptions"),i=r&&!o?In(e):e,s={};typeof i.provider=="string"&&i.provider.trim()&&(s.provider=i.provider.trim()),typeof i.model=="string"&&i.model.trim()&&(s.model=i.model.trim()),typeof i.mode=="string"&&i.mode.trim()&&(s.mode=i.mode.trim()),typeof i.effort=="string"&&i.effort.trim()&&(s.effort=i.effort.trim());let a=ql(i,s.provider);return a&&(s.providerOptions=a),s}function Go(t){if(t==null||t===false)return {active:false};if(t===true)return {active:true};if(typeof t=="object"){let e=t.mode;return {active:true,mode:e==="count"||e==="latch"?e:void 0}}return {active:false}}function Vo(t,e,n,r){if(!r.active)return {active:false,crossProvider:false};if(!t||typeof t!="object"||Array.isArray(t))return {active:false,crossProvider:false};let i=t[e];if(!i||typeof i!="object"||Array.isArray(i))return {active:false,crossProvider:false};let s=Mr(i.overdrive);if(!s||!s.provider||!s.model)return {active:false,crossProvider:false};let a=s.provider!==n;return {active:true,provider:s.provider,model:s.model,mode:s.mode,effort:s.effort,crossProvider:a,providerOptions:s.providerOptions}}function Jo(t,e){if(!t||typeof t!="object"||Array.isArray(t))return {};let r=t[e];if(!r||typeof r!="object"||Array.isArray(r))return {};let o=r,i={};return o.provider!==void 0&&(typeof o.provider=="string"?o.provider.trim()&&(i.provider=o.provider.trim()):console.warn(`[crewx] options.${e}.provider must be a single string; ignoring non-string value (${JSON.stringify(o.provider)})`)),typeof o.model=="string"&&o.model.trim()&&(i.model=o.model.trim()),i}u();u();var Gl=[/^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],Vl=/[;|&`$(){}!><\n\r]/,Jl=2,Kl=["*","**","*:*","* *","**/*"];function Xl(){let t={};for(let[e,n]of Object.entries(process.env))n!==void 0&&(Gl.some(r=>r.test(e))||(t[e]=n));return t}function Yl(t){if(Vl.test(t))throw new Error(`exec blocked: shell metacharacter detected in "${t}"`)}function Ql(t){return /^npx\s+@crewx\/[\w-]+/.test(t)}function Zl(t){if(Kl.includes(t.trim()))throw new Error(`exec config error: overly broad pattern "${t}" is not allowed`);if(!/^[\w./@-]/.test(t))throw new Error("exec config error: pattern must start with a command name")}function eu(t,e){let n=e.allow??[],r=e.deny??[];for(let o of [...n,...r])Zl(o);return r.some(o=>Fe(t,o))?false:Ql(t)?true:n.some(o=>Fe(t,o))}var ra=false;function tu(t){ra=t;}function Pn(t){if(!ra)return;let e=JSON.stringify({span:"template_exec",...t,timestamp:new Date().toISOString()});console.error(e);}function nu(t){let e=[],n="",r=false,o=false;for(let i=0;i<t.length;i++){let s=t[i];s==="'"&&!o?r=!r:s==='"'&&!r?o=!o:s===" "&&!r&&!o?n.length>0&&(e.push(n),n=""):n+=s;}return n.length>0&&e.push(n),e}function oa(t,e){let n=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=Jl)return Pn({command:t,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{Yl(t);}catch{return Pn({command:t,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${t}")`}if(!eu(t,e))return Pn({command:t,status:"denied",reason:"not in allow list"}),`(exec blocked: ${t})`;try{let o=nu(t),[i,...s]=o;if(!i)return `(exec failed: ${t})`;let a=Xl(),d=child_process.execFileSync(i,s,{timeout:e.timeout??5e3,maxBuffer:64*1024,encoding:"utf-8",env:{...a,CREWX_EXEC_DEPTH:String(r+1)},stdio:["pipe","pipe","pipe"]}),c=Date.now()-n;return Pn({command:t,status:"allowed",allowed_by:"policy",duration_ms:c}),`<exec-output cmd="${t}">
|
|
49
56
|
${d.trim()}
|
|
50
|
-
</exec-output>`}catch{return
|
|
51
|
-
${
|
|
52
|
-
\`\`\``}
|
|
53
|
-
`)){let
|
|
54
|
-
`)}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},ke=class extends Error{constructor(t,r=[],o){super(t);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var yi={validationMode:"lenient",fallbackLayoutId:"crewx/default"},ft=class{layouts=new Map;options;constructor(e){this.options={...yi,...e,templatesPath:e?.templatesPath??Xe()},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(!go.existsSync(e))throw new Q(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=go.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=go.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 Le(n){return String(Math.floor(Math.abs(n))).padStart(2,"0")}function yt(n){if(!(n instanceof Date)||Number.isNaN(n.getTime()))return "";let e=-n.getTimezoneOffset(),t=e>=0?"+":"-";return `${n.getFullYear()}-${Le(n.getMonth()+1)}-${Le(n.getDate())}T${Le(n.getHours())}:${Le(n.getMinutes())}:${Le(n.getSeconds())}${t}${Le(e/60)}:${Le(e%60)}`}function hi(n){return n.map(e=>{let t=typeof e?.timestamp=="number"?e.timestamp:null;return t===null?e:{...e,created_at:yt(new Date(t))}})}function wi(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 Jn(...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=wi(t),d=a.length>0?a[0]:"",l=Date.now(),u={messages:hi(t),platform:typeof r=="string"?r:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:yt(new Date(l))};return e.fn(u)}c();var ht=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 ke("Props validation failed in strict mode",o);return {valid:o.length===0,props:s,errors:o}}validateObject(e,t,r,o,s){let i={};if(r==="strict")for(let a of Object.keys(e))t[a]||s.push({path:this.buildPath([...o,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(t)){let l=[...o,a],u=e[a],g=this.resolveProp(u,d,l,r,s);g.shouldAssign&&(i[a]=g.value);}return i}resolveProp(e,t,r,o,s){let i=this.buildPath(r);if(this.isNil(e)){if(t.isRequired&&s.push({path:i,message:`Required prop '${r[r.length-1]}' is missing`}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}let a=this.validateType(e,t,r,o,s);if(!a.valid){if(t.type==="shape"&&a.value&&this.isPlainObject(a.value))return {shouldAssign:true,value:a.value};if(s.push({path:i,message:a.error??"Invalid value",value:e}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}return {shouldAssign:true,value:a.value}}validateType(e,t,r,o,s){let{type:i}=t;switch(i){case "string":return this.validateString(e,t);case "number":return this.validateNumber(e,t);case "bool":return this.validateBoolean(e);case "array":return this.validateArray(e,t);case "arrayOf":return this.validateArrayOf(e,t,r,o,s);case "object":return this.validatePlainObject(e);case "shape":return this.validateShape(e,t,r,o,s);case "oneOfType":return this.validateOneOfType(e,t);case "func":return this.validateFunction(e);case "node":return {valid:true,value:e};default:return {valid:true,value:e}}}validateString(e,t){return typeof e!="string"?{valid:false,error:`Expected string, got ${this.describeType(e)}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`String length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`String length must be <= ${t.maxLength}`}:t.pattern&&!new RegExp(t.pattern).test(e)?{valid:false,error:`String does not match pattern ${t.pattern}`}:{valid:true,value:e}}validateNumber(e,t){return typeof e!="number"||Number.isNaN(e)?{valid:false,error:`Expected number, got ${this.describeType(e)}`}:t.min!==void 0&&e<t.min?{valid:false,error:`Number must be >= ${t.min}`}:t.max!==void 0&&e>t.max?{valid:false,error:`Number must be <= ${t.max}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:{valid:true,value:e}}validateBoolean(e){return typeof e!="boolean"?{valid:false,error:`Expected boolean, got ${this.describeType(e)}`}:{valid:true,value:e}}validateArray(e,t){return Array.isArray(e)?t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`Array length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`Array length must be <= ${t.maxLength}`}:{valid:true,value:[...e]}:{valid:false,error:`Expected array, got ${this.describeType(e)}`}}validateArrayOf(e,t,r,o,s){let i=this.validateArray(e,t);if(!i.valid)return i;let a=[],d=t.itemType,l=t.itemOneOf,u=s.length;return i.value.forEach((g,f)=>{let p=[...r,String(f)];if(d){let h=this.validateType(g,{type:d},p,o,s);h.valid?a.push(h.value):s.push({path:this.buildPath(p),message:h.error??"Invalid array item",value:g});}else a.push(g);l&&!l.includes(g)&&s.push({path:this.buildPath(p),message:`Array item must be one of: ${l.join(", ")}`,value:g});}),{valid:s.length===u,value:a}}validatePlainObject(e){return this.isPlainObject(e)?{valid:true,value:{...e}}:{valid:false,error:`Expected object, got ${this.describeType(e)}`}}validateFunction(e){return typeof e!="function"?{valid:false,error:`Expected function, got ${this.describeType(e)}`}:{valid:true,value:e}}validateShape(e,t,r,o,s){if(!this.isPlainObject(e))return {valid:false,error:`Expected object, got ${this.describeType(e)}`};let i=s.length,a=this.validateObject(e,t.shape??{},o,r,s);return {valid:s.length===i,value:a}}validateOneOfType(e,t){let r=t.types??[];return r.some(s=>this.matchesType(e,s))?{valid:true,value:e}:{valid:false,error:`Value does not match any allowed type: ${r.join(", ")}`}}matchesType(e,t){switch(t){case "string":return typeof e=="string";case "number":return typeof e=="number"&&!Number.isNaN(e);case "bool":case "boolean":return typeof e=="boolean";case "array":return Array.isArray(e);case "object":return this.isPlainObject(e);case "func":case "function":return typeof e=="function";case "shape":return this.isPlainObject(e);case "node":return e==null||typeof e!="symbol";default:return true}}applyDefaults(e){let t={};for(let[r,o]of Object.entries(e)){if(o.defaultValue!==void 0){t[r]=this.cloneValue(o.defaultValue);continue}if(o.type==="shape"&&o.shape){let s=this.applyDefaults(o.shape);Object.keys(s).length>0&&(t[r]=s);}}return t}cloneValue(e){if(Array.isArray(e))return e.map(t=>this.cloneValue(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneValue(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}isNil(e){return e==null}buildPath(e){return e.join(".")}describeType(e){return Array.isArray(e)?"array":e===null?"null":typeof e}};var wt=class{handlebars;propsValidator;constructor(e){this.handlebars=ge__namespace.default.create(),this.propsValidator=e??new ht,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",Jn),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,"{{").replace(/\}\}/g,"}}")}),this.handlebars.registerHelper("formatFileSize",function(e){if(e===0)return "0 B";let t=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,r)*100)/100+" "+t[r]});}executeValidation(e,t,r){try{return this.propsValidator.validate(e,t,r)}catch(o){if(o instanceof ke&&o.errors&&o.errors.length>0){let s=o.errors[0];if(s)throw new ke(s.message,o.errors)}throw o}}mergeProps(e,t){let r=this.cloneDeep(e??{});return t?this.deepMerge(r,t):r}deepMerge(e,t){for(let[r,o]of Object.entries(t)){if(this.isPlainObject(o)){let s=e[r];e[r]=this.deepMerge(this.isPlainObject(s)?s:{},o);continue}if(Array.isArray(o)){e[r]=this.cloneDeep(o);continue}e[r]=o;}return e}cloneDeep(e){if(Array.isArray(e))return e.map(t=>this.cloneDeep(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneDeep(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}sanitizeVars(e){if(!e)return {};let t={...e};if(typeof e.user_input=="string"){t.user_input_raw=e.user_input;let r=e.user_input.replace(/\{\{\{/g,"{{{").replace(/\}\}\}/g,"}}}").replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");t.user_input=this.handlebars.escapeExpression(r);}return t}};c();var Or="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function xi(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+=Or[o%62]);}for(;t.length<n;)t+=Or[crypto$1.randomBytes(1)[0]%62];return t}function $e(n){return `${n}_${xi(8)}`}function ki(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+=Or[i%62];return `${n}_${s}`}c();function Mr(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 Qn(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 xt=class{_emitter=new events.EventEmitter;on(e,t){let r=Qn(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=Qn(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};c();function Nr(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 Dr=new async_hooks.AsyncLocalStorage;function Ai(){return Dr}function Ei(n,e){return Dr.run(n,e)}function Lr(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 p=Dr.getStore();if(!p){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:"";p.res.status(200).json({text:h});},g=n.httpRouter??{registerRoute:()=>{e.warn("httpRouter not configured \u2014 registerRoute is a no-op");}};return {instanceId:n.instanceId,config:n.config,capabilities:n.capabilities,log:e,agentRunner:t,db:r,storage:o,audit:s,abortSignal:n.abortSignal??new AbortController().signal,httpRouter:g,inbound:i,emitEvent:a,updateMessage:d,resolveUser:l,respondSync:u}}Ce();c();var Ri=/^-\s*Status:\s*active/m,Ci=/^---\n([\s\S]*?)\n---/,Ti=/^type:\s*goal\s*$/m;async function Zn(n,e=Ne,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(`
|
|
57
|
+
</exec-output>`}catch{return Pn({command:t,status:"error",reason:"execution failed"}),`(exec failed: ${t})`}}u();function ia(t){return t==null?"":String(t)}u();function sa(t,e){return `\`\`\`${e?.hash?.lang??""}
|
|
58
|
+
${t??""}
|
|
59
|
+
\`\`\``}u();u();function Ko(t){let e=n=>String(n).padStart(2,"0");return `${t.getFullYear()}${e(t.getMonth()+1)}${e(t.getDate())}T${e(t.getHours())}${e(t.getMinutes())}${e(t.getSeconds())}`}function Xo(t){let e=t.toISOString();return `${e.slice(0,10)} ${e.slice(11,19)} UTC`}function Yo(t,e){if(!t)return "";if(t.length<=e)return t;let n=t.length-e;return `${t.substring(0,e)} (...+${n} chars)`}function Qo(t){return Array.isArray(t)||typeof t=="string"?t.length:0}function Zo(t){return typeof t!="string"?"":t.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}")}var aa=["B","KB","MB","GB"];function ei(t){if(t===0)return "0 B";let e=Math.min(Math.floor(Math.log(t)/Math.log(1024)),aa.length-1);return `${Math.round(t/Math.pow(1024,e)*100)/100} ${aa[e]}`}function ti(t){if(!t)return "";try{let e=t instanceof Date?t:new Date(t);return isNaN(e.getTime())?"":Xo(e)}catch{return ""}}var Cn=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=ze__namespace.create(),this.execPolicy=e.execPolicy??{allow:[],deny:[]},this.execEnabled=e.execEnabled??true,this.registerHelpers();}registerHelpers(){let e=this.hbs,n=this.execPolicy,r=this.execEnabled;e.registerHelper("exec",function(o){return typeof o!="string"?"":r?new e.SafeString(oa(o,n)):"(exec disabled)"}),e.registerHelper("include",function(o){return new e.SafeString(ia(o))}),e.registerHelper("fenced_code",function(o,i){return new e.SafeString(sa(o,i))}),e.registerHelper("eq",function(o,i){return o===i}),e.registerHelper("ne",function(o,i){return o!==i}),e.registerHelper("and",function(o,i){return o&&i}),e.registerHelper("or",function(o,i){return o||i}),e.registerHelper("not",function(o){return !o}),e.registerHelper("contains",function(o,i){return Array.isArray(o)&&o.includes(i)}),e.registerHelper("json",function(o){return JSON.stringify(o,null,2)}),e.registerHelper("truncate",function(o,i){return Yo(o,i)}),e.registerHelper("length",function(o){return Qo(o)}),e.registerHelper("escapeHandlebars",function(o){return new e.SafeString(Zo(o))}),e.registerHelper("formatFileSize",function(o){return ei(o)}),e.registerHelper("formatTimestamp",function(o){return ti(o)});}async render(e,n={}){return this.hbs.compile(e,{noEscape:true})(n)}};u();u();var Ur=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 []}}},Mt=new Ur;var Ut=class{docs=new Map;fs;constructor(e){this.fs=e??Mt;}async load(e,n){if(e)for(let[r,o]of Object.entries(e)){let i=o;if(typeof i=="string")this.docs.set(r,{content:i});else if(i&&typeof i=="object"){let s=i;"content"in s&&typeof s.content=="string"?this.docs.set(r,{content:s.content}):"path"in s&&typeof s.path=="string"?await this.loadFromFile(r,s.path,n):console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}else console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}}async getContent(e){return this.docs.get(e)?.content}async getToc(e){let n=this.docs.get(e);if(!n)return;let r=[];for(let o of n.content.split(`
|
|
60
|
+
`)){let i=/^(#{1,6})\s+(.+)$/.exec(o.trim());i&&r.push({depth:i[1].length,text:i[2].trim()});}if(r.length!==0)return r.map(({depth:o,text:i})=>`${" ".repeat(o-1)}- ${i}`).join(`
|
|
61
|
+
`)}getPath(e){return this.docs.get(e)?.path}getNames(){return Array.from(this.docs.keys())}async buildContext(){let e={};for(let n of this.docs.keys()){let r=await this.getContent(n)??"",o=await this.getToc(n),i=this.getPath(n);e[n]={content:r,toc:o,...i?{path:i}:{}};}return e}async loadFromFile(e,n,r){try{let o=this.resolve(n,r),i=await this.fs.readFile(o);this.docs.set(e,{content:i,path:o});}catch(o){let i=o instanceof Error?o.message:String(o);console.warn(`[DocumentLoader] Failed to load '${e}' from '${n}': ${i}`);}}resolve(e,n){return this.fs.isAbsolute(e)?e:n?this.fs.resolvePath(n,e):this.fs.resolvePath(e)}};u();u();var ke=class extends Error{constructor(n,r,o){super(n);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},ot=class extends Error{constructor(n,r=[],o){super(n);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var pu={validationMode:"lenient",fallbackLayoutId:"crewx/default"},Sn=class{layouts=new Map;options;constructor(e){this.options={...pu,...e,templatesPath:e?.templatesPath??Gt()},this.loadAllLayouts();}load(e,n){let r=this.layouts.get(e);if(!r){let o=this.normalizeLayoutId(e);r=this.layouts.get(o);}if(!r&&(console.warn(`Layout not found: ${e}, falling back to ${this.options.fallbackLayoutId}`),r=this.layouts.get(this.options.fallbackLayoutId),!r))throw new ke(`Fallback layout not found: ${this.options.fallbackLayoutId}`,this.options.fallbackLayoutId);return n&&Object.keys(n).length>0?{...r,defaultProps:{...r.defaultProps,...n}}:r}getLayoutIds(){return Array.from(this.layouts.keys())}hasLayout(e){if(this.layouts.has(e))return true;let n=this.normalizeLayoutId(e);return this.layouts.has(n)}reload(){this.layouts.clear(),this.loadAllLayouts();}registerLayout(e,n){if(!e||typeof e!="string")throw new ke("Layout ID must be a non-empty string",e);let r=typeof n=="string"?{template:n}:n,o=typeof r.template=="string"?r.template:"";if(!o||o.trim().length===0)throw new ke(`Custom layout template is empty for ${e}`,e);let i=r.propsSchema||{},s=this.extractDefaultProps(i),a=r.defaultProps||{},d={id:e,version:r.version||"1.0.0",description:r.description||`Custom layout ${e}`,template:o,propsSchema:this.parsePropsSchema(i),defaultProps:{...s,...a}},c=this.layouts.get(e),l=c?.template===o&&JSON.stringify(c?.defaultProps??{})===JSON.stringify(d.defaultProps??{})&&JSON.stringify(c?.propsSchema??{})===JSON.stringify(d.propsSchema??{});this.layouts.set(e,d),process.env.CREWX_VERBOSE==="1"&&(c?l||console.error(`Updated custom layout: ${e}`):console.error(`Registered custom layout: ${e}`));}registerLayouts(e){for(let[n,r]of Object.entries(e))try{this.registerLayout(n,r);}catch(o){console.warn(`Failed to register custom layout ${n}:`,o instanceof Error?o.message:o);}}loadAllLayouts(){let e=this.options.templatesPath;if(!Ua.existsSync(e))throw new ke(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let n=Ua.readdirSync(e).filter(r=>r.endsWith(".yaml")||r.endsWith(".yml"));n.length===0&&console.warn(`No layout files found in ${e}`);for(let r of n){let o=r.replace(/\.(yaml|yml)$/,""),i=K__namespace.join(e,r);try{let s=this.loadLayoutFile(i,o),a=`crewx/${o}`;this.layouts.set(a,s),a!=="crewx/minimal"&&process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded layout: ${a} from ${r}`);}catch(s){console.error(`Failed to load layout file ${r}:`,s);}}process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded ${this.layouts.size} layouts from ${e}`);}catch(n){throw new ke(`Failed to read layouts directory: ${e}`,void 0,n instanceof Error?n:new Error(String(n)))}}loadLayoutFile(e,n){try{let r=Ua.readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new ke(`Empty YAML file: ${e}`,n,new Error("File content is empty"));let o=jsYaml.load(r);if(!o||typeof o!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof o}), will use fallback`),new ke(`Invalid or empty YAML in ${e}`,n,new Error("YAML parsing returned null/undefined or non-object"));if(o.layouts&&typeof o.layouts=="object"){let i=this.resolveLayoutEntry(o.layouts,n);if(!i||i.template.trim().length===0)throw console.warn(`Empty or missing layout template in ${e} for ${n}`),new ke(`Layout template not found or empty in layouts map: ${n}`,n);let s=i.propsSchema||o.propsSchema||{};return {id:`crewx/${n}`,version:o.version||"1.0.0",description:o.description||`CrewX ${n} layout`,template:i.template,propsSchema:this.parsePropsSchema(s),defaultProps:this.extractDefaultProps(s)}}else {if(!o.template||typeof o.template=="string"&&o.template.trim().length===0)throw console.warn(`Empty or missing template field in ${e}`),new ke(`Layout template is missing or empty in ${e}`,n);return {id:o.id||`crewx/${n}`,version:o.version||"1.0.0",description:o.description||"",template:o.template,propsSchema:this.parsePropsSchema(o.propsSchema||{}),defaultProps:this.extractDefaultProps(o.propsSchema||{})}}}catch(r){throw new ke(`Failed to load layout file: ${e}`,n,r instanceof Error?r:new Error(String(r)))}}parsePropsSchema(e){let n={};for(let[r,o]of Object.entries(e))typeof o=="object"&&o!==null&&(n[r]=o);return n}extractDefaultProps(e){let n={};for(let[r,o]of Object.entries(e))o&&typeof o=="object"&&("defaultValue"in o?n[r]=o.defaultValue:"default"in o&&(n[r]=o.default));return n}normalizeLayoutId(e){return e?e.includes("/")?e:`crewx/${e}`:this.options.fallbackLayoutId}resolveLayoutEntry(e,n){let r=new Set;if(n)if(r.add(n),n.includes("/")){let o=n.split("/"),i=o[o.length-1];i&&r.add(i);}else r.add(`crewx/${n}`);r.add("default");for(let o of r){let i=e[o];if(typeof i=="string"&&i.trim().length>0)return {template:i};if(i&&typeof i=="object"&&typeof i.template=="string"&&i.template.trim().length>0)return {template:i.template,propsSchema:i.propsSchema}}for(let o of Object.values(e)){if(typeof o=="string"&&o.trim().length>0)return {template:o};let i=o;if(i&&typeof i=="object"&&typeof i.template=="string"&&i.template.trim().length>0)return {template:i.template,propsSchema:i.propsSchema}}}};u();u();u();function Lt(t){return String(Math.floor(Math.abs(t))).padStart(2,"0")}function On(t){if(!(t instanceof Date)||Number.isNaN(t.getTime()))return "";let e=-t.getTimezoneOffset(),n=e>=0?"+":"-";return `${t.getFullYear()}-${Lt(t.getMonth()+1)}-${Lt(t.getDate())}T${Lt(t.getHours())}:${Lt(t.getMinutes())}:${Lt(t.getSeconds())}${n}${Lt(e/60)}:${Lt(e%60)}`}function fu(t){return t.map(e=>{let n=typeof e?.timestamp=="number"?e.timestamp:null;return n===null?e:{...e,created_at:On(new Date(n))}})}function gu(t){let e=[];for(let n of t)n?.isAssistant&&n?.metadata?.agent_id?e.push(String(n.metadata.agent_id)):!n?.isAssistant&&n?.metadata?.caller_agent_id&&e.push(String(n.metadata.caller_agent_id));return Array.from(new Set(e))}function ua(...t){let e=t[t.length-1],n=t[0],r=t[1],o=typeof t[2]=="string"?t[2]:"",i=typeof t[3]=="string"?t[3]:"";if(!Array.isArray(n)||n.length===0||!(e&&typeof e.fn=="function"))return "";let a=gu(n),d=a.length>0?a[0]:"",c=Date.now(),l={messages:fu(n),platform:typeof r=="string"?r:"",messagesCount:n.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:i,now:On(new Date(c))};return e.fn(l)}u();var Nn=class{defaultMode;constructor(e={}){this.defaultMode=e.defaultMode??"lenient";}validate(e,n,r=this.defaultMode){let o=[],i=this.validateObject(e??{},n,r,["props"],o);if(o.length>0&&r==="strict")throw new ot("Props validation failed in strict mode",o);return {valid:o.length===0,props:i,errors:o}}validateObject(e,n,r,o,i){let s={};if(r==="strict")for(let a of Object.keys(e))n[a]||i.push({path:this.buildPath([...o,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(n)){let c=[...o,a],l=e[a],f=this.resolveProp(l,d,c,r,i);f.shouldAssign&&(s[a]=f.value);}return s}resolveProp(e,n,r,o,i){let s=this.buildPath(r);if(this.isNil(e)){if(n.isRequired&&i.push({path:s,message:`Required prop '${r[r.length-1]}' is missing`}),n.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(n.defaultValue)};if(n.type==="shape"&&n.shape){let d=this.applyDefaults(n.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}let a=this.validateType(e,n,r,o,i);if(!a.valid){if(n.type==="shape"&&a.value&&this.isPlainObject(a.value))return {shouldAssign:true,value:a.value};if(i.push({path:s,message:a.error??"Invalid value",value:e}),n.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(n.defaultValue)};if(n.type==="shape"&&n.shape){let d=this.applyDefaults(n.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}return {shouldAssign:true,value:a.value}}validateType(e,n,r,o,i){let{type:s}=n;switch(s){case "string":return this.validateString(e,n);case "number":return this.validateNumber(e,n);case "bool":return this.validateBoolean(e);case "array":return this.validateArray(e,n);case "arrayOf":return this.validateArrayOf(e,n,r,o,i);case "object":return this.validatePlainObject(e);case "shape":return this.validateShape(e,n,r,o,i);case "oneOfType":return this.validateOneOfType(e,n);case "func":return this.validateFunction(e);case "node":return {valid:true,value:e};default:return {valid:true,value:e}}}validateString(e,n){return typeof e!="string"?{valid:false,error:`Expected string, got ${this.describeType(e)}`}:n.oneOf&&!n.oneOf.includes(e)?{valid:false,error:`Expected one of: ${n.oneOf.join(", ")}`}:n.minLength!==void 0&&e.length<n.minLength?{valid:false,error:`String length must be >= ${n.minLength}`}:n.maxLength!==void 0&&e.length>n.maxLength?{valid:false,error:`String length must be <= ${n.maxLength}`}:n.pattern&&!new RegExp(n.pattern).test(e)?{valid:false,error:`String does not match pattern ${n.pattern}`}:{valid:true,value:e}}validateNumber(e,n){return typeof e!="number"||Number.isNaN(e)?{valid:false,error:`Expected number, got ${this.describeType(e)}`}:n.min!==void 0&&e<n.min?{valid:false,error:`Number must be >= ${n.min}`}:n.max!==void 0&&e>n.max?{valid:false,error:`Number must be <= ${n.max}`}:n.oneOf&&!n.oneOf.includes(e)?{valid:false,error:`Expected one of: ${n.oneOf.join(", ")}`}:{valid:true,value:e}}validateBoolean(e){return typeof e!="boolean"?{valid:false,error:`Expected boolean, got ${this.describeType(e)}`}:{valid:true,value:e}}validateArray(e,n){return Array.isArray(e)?n.minLength!==void 0&&e.length<n.minLength?{valid:false,error:`Array length must be >= ${n.minLength}`}:n.maxLength!==void 0&&e.length>n.maxLength?{valid:false,error:`Array length must be <= ${n.maxLength}`}:{valid:true,value:[...e]}:{valid:false,error:`Expected array, got ${this.describeType(e)}`}}validateArrayOf(e,n,r,o,i){let s=this.validateArray(e,n);if(!s.valid)return s;let a=[],d=n.itemType,c=n.itemOneOf,l=i.length;return s.value.forEach((f,g)=>{let m=[...r,String(g)];if(d){let k=this.validateType(f,{type:d},m,o,i);k.valid?a.push(k.value):i.push({path:this.buildPath(m),message:k.error??"Invalid array item",value:f});}else a.push(f);c&&!c.includes(f)&&i.push({path:this.buildPath(m),message:`Array item must be one of: ${c.join(", ")}`,value:f});}),{valid:i.length===l,value:a}}validatePlainObject(e){return this.isPlainObject(e)?{valid:true,value:{...e}}:{valid:false,error:`Expected object, got ${this.describeType(e)}`}}validateFunction(e){return typeof e!="function"?{valid:false,error:`Expected function, got ${this.describeType(e)}`}:{valid:true,value:e}}validateShape(e,n,r,o,i){if(!this.isPlainObject(e))return {valid:false,error:`Expected object, got ${this.describeType(e)}`};let s=i.length,a=this.validateObject(e,n.shape??{},o,r,i);return {valid:i.length===s,value:a}}validateOneOfType(e,n){let r=n.types??[];return r.some(i=>this.matchesType(e,i))?{valid:true,value:e}:{valid:false,error:`Value does not match any allowed type: ${r.join(", ")}`}}matchesType(e,n){switch(n){case "string":return typeof e=="string";case "number":return typeof e=="number"&&!Number.isNaN(e);case "bool":case "boolean":return typeof e=="boolean";case "array":return Array.isArray(e);case "object":return this.isPlainObject(e);case "func":case "function":return typeof e=="function";case "shape":return this.isPlainObject(e);case "node":return e==null||typeof e!="symbol";default:return true}}applyDefaults(e){let n={};for(let[r,o]of Object.entries(e)){if(o.defaultValue!==void 0){n[r]=this.cloneValue(o.defaultValue);continue}if(o.type==="shape"&&o.shape){let i=this.applyDefaults(o.shape);Object.keys(i).length>0&&(n[r]=i);}}return n}cloneValue(e){if(Array.isArray(e))return e.map(n=>this.cloneValue(n));if(this.isPlainObject(e)){let n={};for(let[r,o]of Object.entries(e))n[r]=this.cloneValue(o);return n}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}isNil(e){return e==null}buildPath(e){return e.join(".")}describeType(e){return Array.isArray(e)?"array":e===null?"null":typeof e}};var Dn=class{handlebars;propsValidator;constructor(e){this.handlebars=ze__namespace.default.create(),this.propsValidator=e??new Nn,this.registerHelpers();}render(e,n,r={}){try{let o=this.prepareRenderContext(e,n,r);return this.handlebars.compile(e.template,{noEscape:!0})(o)}catch(o){throw o instanceof Error?new Error(`Template rendering failed for layout '${e.id}': ${o.message}`):new Error(`Unknown error rendering layout '${e.id}'`)}}validate(e,n,r="lenient"){return this.executeValidation(e,n,r)}resolveProps(e,n,r="lenient"){let o=this.mergeProps(e.defaultProps,n);return !e.propsSchema||Object.keys(e.propsSchema).length===0?{valid:true,props:o,errors:[]}:this.executeValidation(o,e.propsSchema,r)}prepareRenderContext(e,n,r){let{validationMode:o="lenient",skipValidation:i=false}=r,s=i?this.mergeProps(e.defaultProps,n.props):this.resolveProps(e,n.props,o).props;return {...n,vars:this.sanitizeVars(n.vars),props:s}}registerHelpers(){this.handlebars.registerHelper("formatConversation",ua),ze__namespace.default.helpers.each&&this.handlebars.registerHelper("each",ze__namespace.default.helpers.each),ze__namespace.default.helpers.if&&this.handlebars.registerHelper("if",ze__namespace.default.helpers.if),ze__namespace.default.helpers.unless&&this.handlebars.registerHelper("unless",ze__namespace.default.helpers.unless),ze__namespace.default.helpers.with&&this.handlebars.registerHelper("with",ze__namespace.default.helpers.with),this.handlebars.registerHelper("eq",function(e,n){return e===n}),this.handlebars.registerHelper("ne",function(e,n){return e!==n}),this.handlebars.registerHelper("gt",function(e,n){return e>n}),this.handlebars.registerHelper("lt",function(e,n){return e<n}),this.handlebars.registerHelper("json",function(e){return new ze__namespace.default.SafeString(JSON.stringify(e))}),this.handlebars.registerHelper("raw",function(e){return typeof e?.fn=="function"?e.fn(this):""}),this.handlebars.registerHelper("escapeHandlebars",function(e){return typeof e!="string"?"":e.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}")}),this.handlebars.registerHelper("formatFileSize",function(e){if(e===0)return "0 B";let n=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,r)*100)/100+" "+n[r]});}executeValidation(e,n,r){try{return this.propsValidator.validate(e,n,r)}catch(o){if(o instanceof ot&&o.errors&&o.errors.length>0){let i=o.errors[0];if(i)throw new ot(i.message,o.errors)}throw o}}mergeProps(e,n){let r=this.cloneDeep(e??{});return n?this.deepMerge(r,n):r}deepMerge(e,n){for(let[r,o]of Object.entries(n)){if(this.isPlainObject(o)){let i=e[r];e[r]=this.deepMerge(this.isPlainObject(i)?i:{},o);continue}if(Array.isArray(o)){e[r]=this.cloneDeep(o);continue}e[r]=o;}return e}cloneDeep(e){if(Array.isArray(e))return e.map(n=>this.cloneDeep(n));if(this.isPlainObject(e)){let n={};for(let[r,o]of Object.entries(e))n[r]=this.cloneDeep(o);return n}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}sanitizeVars(e){if(!e)return {};let n={...e};if(typeof e.user_input=="string"){n.user_input_raw=e.user_input;let r=e.user_input.replace(/\{\{\{/g,"{{{").replace(/\}\}\}/g,"}}}").replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");n.user_input=this.handlebars.escapeExpression(r);}return n}};u();var ni="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function mu(t){let e=crypto$1.randomBytes(t*2),n="";for(let r=0;r<e.length&&n.length<t;r++){let o=e[r];o<248&&(n+=ni[o%62]);}for(;n.length<t;)n+=ni[crypto$1.randomBytes(1)[0]%62];return n}function it(t){return `${t}_${mu(8)}`}function hu(t,e){let{createHash:n}=ge("crypto"),r=n("sha256").update(e).digest(),o=Buffer.alloc(8);for(let s=0;s<32;s++)o[s%8]^=r[s];let i="";for(let s of o)i+=ni[s%62];return `${t}_${i}`}u();function fa(t,e){return n=>{try{let r=e(n);r instanceof Promise&&r.catch(o=>{console.error(`[crewx] event listener error (${t}): ${o instanceof Error?o.message:String(o)}`);});}catch(r){console.error(`[crewx] event listener error (${t}): ${r instanceof Error?r.message:String(r)}`);}}}var Mn=class{_emitter=new events.EventEmitter;on(e,n){let r=fa(e,n);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,n){let r=fa(e,n);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,n){this._emitter.emit(e,n);}};u();function ri(t){let e=new Map,n=r=>r.startsWith(`${t}::`)?r:`${t}::${r}`;return {async get(r){let o=e.get(n(r));return o?o.value:void 0},async set(r,o){e.set(n(r),{value:o});},async delete(r){return e.delete(n(r))},async list(r){let o=r?n(r):`${t}::`,i=[];for(let s of e.keys())s.startsWith(o)&&i.push(s.slice(t.length+2));return i}}}u();var oi=new async_hooks.AsyncLocalStorage;function _u(){return oi}function ku(t,e){return oi.run(t,e)}function ii(t){let e=t.log??t.logger??{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},n=t.agentRunner??{run:async()=>({output:""})},r=t.db??{get:async()=>{},set:async()=>{},delete:async()=>false,list:async()=>[]},o=t.storage??{put:async()=>"",get:async()=>{},delete:async()=>false},i=t.audit??{log:async()=>{}},s=t.onInbound??(async()=>({accepted:true})),a=t.onEmitEvent??(async()=>({accepted:true})),d=t.onUpdateMessage??(async()=>{}),c=t.onResolveUser??(async g=>({userId:g,displayName:g})),l=async g=>{let m=oi.getStore();if(!m){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof g=="object"&&"text"in g?g.text.slice(0,80):void 0});return}let k="text"in g?g.text:"";m.res.status(200).json({text:k});},f=t.httpRouter??{registerRoute:()=>{e.warn("httpRouter not configured \u2014 registerRoute is a no-op");}};return {instanceId:t.instanceId,config:t.config,capabilities:t.capabilities,log:e,agentRunner:n,db:r,storage:o,audit:i,abortSignal:t.abortSignal??new AbortController().signal,httpRouter:f,inbound:s,emitEvent:a,updateMessage:d,resolveUser:c,respondSync:l}}ft();u();var vu=/^-\s*Status:\s*active/m,Eu=/^---\n([\s\S]*?)\n---/,xu=/^type:\s*goal\s*$/m;async function ga(t,e=Mt,n){let r=typeof n=="string"?[n]:Array.isArray(n)?n:void 0;if(r){let a=[];for(let d of r){let c=e.resolvePath(t,d);await e.exists(c)&&a.push(await e.readFile(c));}return a.join(`
|
|
55
62
|
---
|
|
56
|
-
`)}let
|
|
63
|
+
`)}let i=(await e.readdir(t)).filter(a=>a.endsWith(".md"));if(i.length===0)return "";let s=[];for(let a of i){let d=e.resolvePath(t,a),c=await e.readFile(d),l=Eu.exec(c);!l||!xu.test(l[1])||vu.test(c)&&s.push(c);}return s.join(`
|
|
57
64
|
---
|
|
58
|
-
`)}
|
|
65
|
+
`)}u();function Ru(){let t=new Date,e=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0");return `${e}-${n}-${r}`}async function ma(t,e=Mt){let n=e.resolvePath(t,`${Ru()}.md`);return await e.exists(n)?e.readFile(n):""}u();Jt();ft();function si(t){if(t.startsWith("cli/"))return exports.BUILTIN_ADAPTERS[t.slice(4)]}function Tu(t,e={}){if(!t.startsWith("cli/"))return true;let r=(e.lookupAdapter??si)(t);if(!r?.command)return false;let o=vn(r.command,{env:e.env});return K__namespace.default.isAbsolute(o)}function ha(t,e={}){if(!Array.isArray(t))return t;if(t.length===0)return "cli/claude";for(let n of t)if(Tu(n,e))return n;return t[0]}u();var Un=new async_hooks.AsyncLocalStorage;function ai(t){if(t)return {parentTaskId:t.parentTaskId??null,rootTraceId:t.rootTraceId,callerAgentId:t.callerAgentId??null}}u();u();var Lr="<crewx_card";function Ln(t){return t===" "||t===" "||t===`
|
|
66
|
+
`||t==="\r"||t==="\f"}function Iu(t){if(!t)return false;let e=t.charCodeAt(0);return e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||t==="_"||t===":"||t==="-"}function Pu(t){return t===void 0||Ln(t)||t==="/"||t===">"}function ya(t,e){let n=t[e],r=e+1;for(;r<t.length;){if(t[r]===n)return {end:r+1,value:t.slice(e+1,r)};r++;}return {end:t.length,value:t.slice(e+1)}}function Cu(t,e){if(t[e]==='"'||t[e]==="'")return ya(t,e);let n=e;for(;n<t.length&&!Ln(t[n])&&t[n]!==">";)n++;return {end:n,value:t.slice(e,n)}}function Su(t,e){let n=Object.create(null),r=e+Lr.length,o=false;for(;r<t.length;){let i=t[r];if(i===">")return {end:r+1,closed:true,attrs:n,privileged:o};if(Ln(i)||i==="/"){r++;continue}if(i==='"'||i==="'"){r=ya(t,r).end;continue}let s=r;for(;r<t.length&&Iu(t[r]);)r++;if(r===s){r++;continue}let a=t.slice(s,r);for(a==="proof"&&(o=true);r<t.length&&Ln(t[r]);)r++;if(t[r]!=="="){n[a]="";continue}for(r++;r<t.length&&Ln(t[r]);)r++;let d=Cu(t,r);n[a]=d.value,r=d.end;}return {end:t.length,closed:false,attrs:n,privileged:o}}function di(t,e){let n=Su(t,e);return {start:e,end:n.end,raw:t.slice(e,n.end),closed:n.closed,attrs:n.attrs,privileged:n.privileged}}function $n(t){let e=[],n=0;for(;n<t.length;){let r=t.indexOf(Lr,n);if(r<0)break;if(!Pu(t[r+Lr.length])){n=r+Lr.length;continue}let o=di(t,r);if(e.push(o),!o.closed)break;n=o.end;}return e}function wa(t){return t&&$n(t).find(r=>!!r.attrs.run_id?.trim())?.attrs.run_id?.trim()||void 0}u();u();var x=class extends Error{constructor(n,r=n,o){super(r);this.code=n;this.currentRevision=o;}code;currentRevision;name="UiRuntimeError"},ve=class extends Error{constructor(n){super("UI instance database operation will be retried");this.cause=n;}cause;name="UiRetryableDatabaseError"},Ae=class extends Error{constructor(n){super("UI instance revision reservation conflict");this.currentRevision=n;}currentRevision;name="UiReservationConflictError"};var Ou=/(?:proof|token|secret|password|cookie|authorization|private[_-]?key|stack|exception|plugin[_-]?text)/i,Nu=/(?:url|uri|endpoint|path|file(?:name|path)?|cwd|directory|dir|folder)$/i,Du=/<\/?[A-Za-z][^>]*>/,Mu=/^(?:[A-Za-z]:[\\/]|\\\\|~[\\/]|\/)/,Uu=/^(?:https?|file|ftp|ws|wss):\/\//i;function Ge(){throw new x("INPUT_INVALID","JSON value is not projection-safe")}function Lu(t){let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}function ci(t,e,n,r){if(e>8&&Ge(),t===null||typeof t=="string"||typeof t=="boolean")return typeof t=="string"&&(Du.test(t)||Uu.test(t)||Mu.test(t))&&Ge(),t;if(typeof t=="number")return Number.isFinite(t)||Ge(),t;(typeof t!="object"||t===void 0||typeof t=="function"||typeof t=="bigint")&&Ge();let o=t;n.has(o)&&Ge(),n.add(o);try{if(Array.isArray(t))return t.map(s=>ci(s,e+1,n));Lu(o)||Ge();let i={};for(let[s,a]of Object.entries(t))(Ou.test(s)||Nu.test(s))&&Ge(),i[s]=ci(a,e+1,n,s);return i}finally{n.delete(o);}}function oe(t){let e=ci(t,0,new Set);return (e===null||Array.isArray(e)||typeof e!="object")&&Ge(),e}function me(t){try{let e=JSON.stringify(t);return e===void 0&&Ge(),e}catch{Ge();}}function li(t){return Array.isArray(t)?t.map(li):t!==null&&typeof t=="object"?Object.fromEntries(Object.keys(t).sort().map(e=>[e,li(t[e])])):t}function _a(t){return me(li(t))}function Bn(t){return Buffer.byteLength(t,"utf8")}var ka="[workflow card omitted from AI context]",$u="[workflow UI instance omitted from AI context]",Bu=/\{\s*"instanceId"\s*:\s*"uic_[A-Za-z0-9_-]+"\s*\}/g;function $r(t){return typeof t=="string"?t.replace(Bu,$u):""}function Br(t){if(typeof t!="string"||t.length===0)return "";let e="",n=0;for(let r of $n(t))if(e+=t.slice(n,r.start),e+=r.privileged?ka:r.raw,n=r.end,!r.closed)break;return e+=t.slice(n),e}function ju(t){return t.replace(/</g,"<").replace(/>/g,">")}function Fu(t,e){if(typeof t!="string")return "";let n=e?Br(t):t,r=e?$r(n):n;return ju(r)}function ui(t){return t.map(e=>({...e,text:Fu(e.text,e.isAssistant)}))}function tn(t,e){let n=ui(t);if(!e||e.length===0)return n;let r=[];for(let o of e)try{if(Object.keys(o).sort().join(",")!=="availableActions,definition,facts,instanceId,pendingDecision,recentChanges,revision"||!/^uic_[A-Za-z0-9_-]+$/.test(o.instanceId))continue;let s=oe(o),a=JSON.stringify(s);if(typeof a!="string"||Bn(a)>64*1024)continue;r.push(s);}catch{}return r.length===0?n:[...n,{text:`CrewX workflow context:
|
|
67
|
+
${JSON.stringify(r)}`,isAssistant:true}]}function pi(t){return ui(t.messages.map(e=>({text:e.text,isAssistant:e.isAssistant,timestamp:e.timestamp,metadata:e.metadata,files:void 0})))}u();ft();gt();u();u();var le=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:K.join(Ri__namespace.default.homedir(),".crewx","crewx.db")}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return Ua.existsSync(e??this.resolveDbPath())}};u();function Q(t){let e=ge("better-sqlite3"),{drizzle:n}=ge("drizzle-orm/better-sqlite3"),r=new e(t);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:n(r),runRaw:(o,i=[])=>r.prepare(o).run(...i),close:()=>r.close()}}u();var va=new Set,Gu={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 gi(t,e){return (t.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function Vu(t,e){if(e>0||!gi(t,"tasks"))return;let n=t.all("PRAGMA table_info(tasks)"),r=new Set(n.map(o=>o.name));for(let[o,i]of Object.entries(Gu))r.has(o)||t.run(`ALTER TABLE tasks ADD COLUMN ${o} ${i}`);}var Ju={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"}};function Ku(t,e,n){if(!gi(t,"__drizzle_migrations")||!gi(t,"tasks"))return;let r=t.all(n`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(s=>s.hash)),i=JSON.parse(Ua.readFileSync(K__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let s of i.entries){let a=Ju[s.tag];if(!a)continue;let d=K__namespace.default.join(e,`${s.tag}.sql`);if(!Ua.existsSync(d))continue;let c=Ua.readFileSync(d,"utf-8"),l=crypto$1.createHash("sha256").update(c).digest("hex");if(o.has(l))continue;let f=t.all("PRAGMA table_info(tasks)"),g=new Set(f.map(m=>m.name));for(let[m,k]of Object.entries(a))g.has(m)||(t.run(`ALTER TABLE tasks ADD COLUMN ${m} ${k}`),g.add(m));}}function Xu(t,e,n){let r=t.all(n`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(s=>s.hash)),i=JSON.parse(Ua.readFileSync(K__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let s of i.entries){let a=K__namespace.default.join(e,`${s.tag}.sql`);if(!Ua.existsSync(a))continue;let d=Ua.readFileSync(a,"utf-8"),c=crypto$1.createHash("sha256").update(d).digest("hex");if(o.has(c))continue;let l=/ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+[`"]?(\w+)[`"]?/gi,f=[],g;for(;(g=l.exec(d))!==null;)f.push({table:g[1],column:g[2]});if(f.length===0||!d.split(/-->\s*statement-breakpoint/).map(h=>h.trim()).filter(Boolean).every(h=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(h)))continue;f.every(({table:h,column:v})=>t.all(`PRAGMA table_info("${h}")`).some(_=>_.name===v))&&t.run(n`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${c}, ${s.when})`);}}function Fr(t){let{migrate:e}=ge("drizzle-orm/better-sqlite3/migrator"),{sql:n}=ge("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(c=>Ua.existsSync(K__namespace.default.join(c,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
|
|
59
68
|
${r.join(`
|
|
60
|
-
`)}`);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),Li(n,i),s?.cnt&&(ji(n,o,t),Ui(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 Vt(n,e){to.has(e)||(Hi(n),to.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 no=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 so=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>no.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 He=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(()=>He.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(()=>so.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 Be="2026-05-09",aa="0.8.9-rc.13",We=10,ze=parseInt(aa.split("rc.")[1]),_t=class extends rt{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);go.existsSync(o)||go.mkdirSync(o,{recursive:true});}else if(!go.existsSync(t))throw new M("NOT_FOUND","Database not found");let r=_e(t);if(e)try{Vt(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=?,
|
|
69
|
+
`)}`);let i=t.get(n`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),s=0;i?.cnt&&(s=t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),Vu(t,s),i?.cnt&&(Xu(t,o,n),Ku(t,o,n)),e(t,{migrationsFolder:o});let d=(t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-s;if(d>0){let c=i?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${c} (${d} migration${d>1?"s":""} applied).`);}}function he(t,e){va.has(e)||(Fr(t),va.add(e));}u();var C=class extends Error{code;cause;constructor(e,n,r){super(n),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};u();u();var 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()});u();var p=sqliteCore.sqliteTable("tasks",{id:sqliteCore.text("id").primaryKey(),agent_id:sqliteCore.text("agent_id").notNull(),user_id:sqliteCore.text("user_id"),prompt:sqliteCore.text("prompt").notNull(),mode:sqliteCore.text("mode").notNull().default("execute"),status:sqliteCore.text("status").notNull().default("running"),result:sqliteCore.text("result"),error:sqliteCore.text("error"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),metadata:sqliteCore.text("metadata"),workspace_id:sqliteCore.text("workspace_id"),trace_id:sqliteCore.text("trace_id"),parent_task_id:sqliteCore.text("parent_task_id"),caller_agent_id:sqliteCore.text("caller_agent_id"),model:sqliteCore.text("model"),platform:sqliteCore.text("platform").default("cli"),crewx_version:sqliteCore.text("crewx_version"),input_tokens:sqliteCore.integer("input_tokens").default(0),output_tokens:sqliteCore.integer("output_tokens").default(0),cost_usd:sqliteCore.real("cost_usd").default(0),pid:sqliteCore.integer("pid"),rendered_prompt:sqliteCore.text("rendered_prompt"),command:sqliteCore.text("command"),coding_agent_command:sqliteCore.text("coding_agent_command"),exit_code:sqliteCore.integer("exit_code"),logs:sqliteCore.text("logs"),thread_id:sqliteCore.text("thread_id"),workspace_ref:sqliteCore.text("workspace_ref"),project_id:sqliteCore.text("project_id"),project_ref:sqliteCore.text("project_ref"),cached_input_tokens:sqliteCore.integer("cached_input_tokens").default(0),run_epoch:sqliteCore.integer("run_epoch").default(0)},t=>({idx_tasks_agent_id:sqliteCore.index("idx_tasks_agent_id").on(t.agent_id),idx_tasks_status:sqliteCore.index("idx_tasks_status").on(t.status),idx_tasks_started_at:sqliteCore.index("idx_tasks_started_at").on(t.started_at),idx_tasks_trace_id:sqliteCore.index("idx_tasks_trace_id").on(t.trace_id),idx_tasks_parent_task_id:sqliteCore.index("idx_tasks_parent_task_id").on(t.parent_task_id),idx_tasks_crewx_version:sqliteCore.index("idx_tasks_crewx_version").on(t.crewx_version),idx_tasks_pid:sqliteCore.index("idx_tasks_pid").on(t.pid),idx_tasks_thread_id:sqliteCore.index("idx_tasks_thread_id").on(t.thread_id),idx_tasks_workspace_id:sqliteCore.index("idx_tasks_workspace_id").on(t.workspace_id),idx_tasks_workspace_ref:sqliteCore.index("idx_tasks_workspace_ref").on(t.workspace_ref),idx_tasks_project_id:sqliteCore.index("idx_tasks_project_id").on(t.project_id),idx_tasks_ws_started:sqliteCore.index("idx_tasks_ws_started").on(t.workspace_id,t.started_at)}));u();var Fn=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)},t=>({idx_threads_updated_at:sqliteCore.index("idx_threads_updated_at").on(t.updated_at),idx_threads_workspace_id:sqliteCore.index("idx_threads_workspace_id").on(t.workspace_id),idx_threads_ws_updated:sqliteCore.index("idx_threads_ws_updated").on(t.workspace_id,t.updated_at),idx_threads_title:sqliteCore.index("idx_threads_title").on(t.title)}));u();var mt=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>p.id,{onDelete:"set null"}),parent_span_id:sqliteCore.text("parent_span_id").references(()=>mt.id,{onDelete:"set null"}),name:sqliteCore.text("name").notNull(),kind:sqliteCore.text("kind").notNull().default("internal"),status:sqliteCore.text("status").notNull().default("ok"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),error:sqliteCore.text("error"),attributes:sqliteCore.text("attributes")},t=>({idx_spans_task_id:sqliteCore.index("idx_spans_task_id").on(t.task_id),idx_spans_parent_span_id:sqliteCore.index("idx_spans_parent_span_id").on(t.parent_span_id)}));u();sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>p.id,{onDelete:"cascade"}),session_id:sqliteCore.text("session_id"),tool_name:sqliteCore.text("tool_name").notNull(),files:sqliteCore.text("files"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),duration_ms:sqliteCore.integer("duration_ms"),timestamp:sqliteCore.text("timestamp").notNull()},t=>({idx_tool_calls_task_id:sqliteCore.index("idx_tool_calls_task_id").on(t.task_id),idx_tool_calls_tool_name:sqliteCore.index("idx_tool_calls_tool_name").on(t.tool_name),idx_tool_calls_timestamp:sqliteCore.index("idx_tool_calls_timestamp").on(t.timestamp)}));u();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>Fn.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),first_task_id:sqliteCore.text("first_task_id").notNull(),mid_task_id:sqliteCore.text("mid_task_id").notNull(),last_task_id:sqliteCore.text("last_task_id").notNull(),task_count:sqliteCore.integer("task_count").notNull(),summary:sqliteCore.text("summary"),source_tokens:sqliteCore.integer("source_tokens").notNull(),summary_tokens:sqliteCore.integer("summary_tokens"),created_at:sqliteCore.text("created_at").notNull()},t=>({idx_thread_boxes_thread_id:sqliteCore.index("idx_thread_boxes_thread_id").on(t.thread_id),idx_thread_boxes_seq:sqliteCore.index("idx_thread_boxes_seq").on(t.thread_id,t.seq),uniq_thread_boxes_thread_seq:sqliteCore.unique().on(t.thread_id,t.seq)}));u();sqliteCore.sqliteTable("request_logs",{id:sqliteCore.text("id").primaryKey(),path:sqliteCore.text("path").notNull(),method:sqliteCore.text("method").notNull(),status_code:sqliteCore.integer("status_code").notNull(),duration_ms:sqliteCore.integer("duration_ms").notNull(),ip:sqliteCore.text("ip"),request_headers:sqliteCore.text("request_headers"),response_headers:sqliteCore.text("response_headers"),request_body:sqliteCore.text("request_body"),response_body:sqliteCore.text("response_body"),query:sqliteCore.text("query"),user_id:sqliteCore.text("user_id"),project_id:sqliteCore.text("project_id"),partition_key:sqliteCore.text("partition_key").notNull(),timestamp:sqliteCore.text("timestamp").notNull().default(drizzleOrm.sql`(datetime('now'))`),metadata:sqliteCore.text("metadata")},t=>({idx_request_logs_timestamp:sqliteCore.index("idx_request_logs_timestamp").on(t.timestamp),idx_request_logs_path:sqliteCore.index("idx_request_logs_path").on(t.path),idx_request_logs_status_code:sqliteCore.index("idx_request_logs_status_code").on(t.status_code),idx_request_logs_partition_key:sqliteCore.index("idx_request_logs_partition_key").on(t.partition_key)}));u();sqliteCore.sqliteTable("usage_limit_snapshots",{id:sqliteCore.text("id").primaryKey(),provider:sqliteCore.text("provider").notNull(),account_ref:sqliteCore.text("account_ref").notNull().default("default"),limit_window:sqliteCore.text("limit_window").notNull(),bucket_start:sqliteCore.text("bucket_start").notNull(),captured_at:sqliteCore.text("captured_at").notNull(),used_percent:sqliteCore.integer("used_percent").notNull(),remaining_percent:sqliteCore.integer("remaining_percent").notNull(),resets_at:sqliteCore.text("resets_at"),source:sqliteCore.text("source").notNull(),metadata:sqliteCore.text("metadata")},t=>({uniq_usage_limit_snapshots_bucket:sqliteCore.uniqueIndex("uniq_usage_limit_snapshots_bucket").on(t.provider,t.account_ref,t.limit_window,t.bucket_start),idx_usage_limit_snapshots_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_window_bucket").on(t.limit_window,t.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_provider_window_bucket").on(t.provider,t.limit_window,t.bucket_start)}));u();sqliteCore.sqliteTable("usage_reports",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),month:sqliteCore.text("month").notNull(),generated_at:sqliteCore.text("generated_at").notNull(),source_range:sqliteCore.text("source_range").notNull(),tier:sqliteCore.text("tier").notNull(),total_tokens:sqliteCore.integer("total_tokens").notNull(),total_cost_usd:sqliteCore.real("total_cost_usd").notNull(),payload:sqliteCore.text("payload").notNull(),payload_hash:sqliteCore.text("payload_hash"),signature:sqliteCore.text("signature"),signed_at:sqliteCore.text("signed_at"),issuer:sqliteCore.text("issuer")},t=>({uniq_usage_reports_ws_month:sqliteCore.uniqueIndex("uniq_usage_reports_ws_month").on(t.workspace_id,t.month)}));u();sqliteCore.sqliteTable("notifications",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id"),task_id:sqliteCore.text("task_id"),thread_id:sqliteCore.text("thread_id"),source:sqliteCore.text("source").notNull().default("agent"),level:sqliteCore.text("level").notNull().default("info"),title:sqliteCore.text("title").notNull(),body:sqliteCore.text("body"),target_user_id:sqliteCore.text("target_user_id"),created_at:sqliteCore.text("created_at").notNull(),metadata:sqliteCore.text("metadata")},t=>({idx_notifications_ws_created:sqliteCore.index("idx_notifications_ws_created").on(t.workspace_id,drizzleOrm.sql`${t.created_at} DESC`)}));sqliteCore.sqliteTable("notification_reads",{notification_id:sqliteCore.text("notification_id").notNull(),user_id:sqliteCore.text("user_id").notNull(),read_at:sqliteCore.text("read_at").notNull()},t=>({pk:sqliteCore.primaryKey({columns:[t.notification_id,t.user_id]})}));u();sqliteCore.sqliteTable("agent_suggestions",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id").notNull(),task_id:sqliteCore.text("task_id"),type:sqliteCore.text("type").notNull(),status:sqliteCore.text("status").notNull().default("pending"),payload:sqliteCore.text("payload").notNull(),applied_commit_sha:sqliteCore.text("applied_commit_sha"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},t=>({idx_agent_suggestions_ws_agent:sqliteCore.index("idx_agent_suggestions_ws_agent").on(t.workspace_id,t.agent_id),idx_agent_suggestions_ws_created:sqliteCore.index("idx_agent_suggestions_ws_created").on(t.workspace_id,t.created_at)}));u();sqliteCore.sqliteTable("ui_instances",{id:sqliteCore.text("id").primaryKey().notNull(),definition_id:sqliteCore.text("definition_id").notNull(),definition_version:sqliteCore.integer("definition_version").notNull(),definition_hash:sqliteCore.text("definition_hash").notNull(),workspace_id:sqliteCore.text("workspace_id").notNull(),thread_id:sqliteCore.text("thread_id").notNull(),anchor_task_id:sqliteCore.text("anchor_task_id"),domain_ref_json:sqliteCore.text("domain_ref_json").notNull(),state_json:sqliteCore.text("state_json").notNull(),revision:sqliteCore.integer("revision").notNull().default(0),status:sqliteCore.text("status").notNull().default("active"),granted_capabilities_json:sqliteCore.text("granted_capabilities_json").notNull().default("[]"),created_at:sqliteCore.integer("created_at").notNull(),updated_at:sqliteCore.integer("updated_at").notNull()},t=>({idCheck:sqliteCore.check("ui_instances_id_ck",drizzleOrm.sql`length(${t.id}) BETWEEN 5 AND 128 AND ${t.id} GLOB 'uic_*'`),definitionIdCheck:sqliteCore.check("ui_instances_definition_id_ck",drizzleOrm.sql`length(${t.definition_id}) BETWEEN 1 AND 128`),definitionVersionCheck:sqliteCore.check("ui_instances_definition_version_ck",drizzleOrm.sql`${t.definition_version} >= 1`),definitionHashCheck:sqliteCore.check("ui_instances_definition_hash_ck",drizzleOrm.sql`length(${t.definition_hash}) = 64 AND ${t.definition_hash} NOT GLOB '*[^0-9a-f]*'`),workspaceIdCheck:sqliteCore.check("ui_instances_workspace_id_ck",drizzleOrm.sql`length(${t.workspace_id}) BETWEEN 1 AND 256`),threadIdCheck:sqliteCore.check("ui_instances_thread_id_ck",drizzleOrm.sql`length(${t.thread_id}) BETWEEN 1 AND 256`),domainRefJsonCheck:sqliteCore.check("ui_instances_domain_ref_json_ck",drizzleOrm.sql`json_valid(${t.domain_ref_json}) AND json_type(${t.domain_ref_json}) = 'object'`),stateJsonCheck:sqliteCore.check("ui_instances_state_json_ck",drizzleOrm.sql`json_valid(${t.state_json}) AND json_type(${t.state_json}) = 'object'`),revisionCheck:sqliteCore.check("ui_instances_revision_ck",drizzleOrm.sql`${t.revision} >= 0`),statusCheck:sqliteCore.check("ui_instances_status_ck",drizzleOrm.sql`${t.status} IN ('active', 'completed', 'expired', 'revoked', 'unsupported')`),grantedCapabilitiesJsonCheck:sqliteCore.check("ui_instances_granted_capabilities_json_ck",drizzleOrm.sql`json_valid(${t.granted_capabilities_json}) AND json_type(${t.granted_capabilities_json}) = 'array'`),createdAtCheck:sqliteCore.check("ui_instances_created_at_ck",drizzleOrm.sql`${t.created_at} >= 0`),updatedAtCheck:sqliteCore.check("ui_instances_updated_at_ck",drizzleOrm.sql`${t.updated_at} >= ${t.created_at}`),workspaceThreadIdx:sqliteCore.index("ui_instances_workspace_thread_idx").on(t.workspace_id,t.thread_id)}));u();sqliteCore.sqliteTable("ui_action_receipts",{id:sqliteCore.text("id").primaryKey().notNull(),instance_id:sqliteCore.text("instance_id").notNull(),request_id:sqliteCore.text("request_id").notNull(),action_id:sqliteCore.text("action_id").notNull(),actor_json:sqliteCore.text("actor_json").notNull(),source:sqliteCore.text("source").notNull(),expected_revision:sqliteCore.integer("expected_revision").notNull(),before_revision:sqliteCore.integer("before_revision").notNull(),after_revision:sqliteCore.integer("after_revision"),status:sqliteCore.text("status").notNull(),outcome:sqliteCore.text("outcome"),input_json:sqliteCore.text("input_json").notNull(),result_json:sqliteCore.text("result_json"),error_code:sqliteCore.text("error_code"),requested_at:sqliteCore.integer("requested_at").notNull(),settled_at:sqliteCore.integer("settled_at")},t=>({idCheck:sqliteCore.check("ui_action_receipts_id_ck",drizzleOrm.sql`length(${t.id}) BETWEEN 5 AND 128`),instanceIdCheck:sqliteCore.check("ui_action_receipts_instance_id_ck",drizzleOrm.sql`length(${t.instance_id}) BETWEEN 1 AND 128`),requestIdCheck:sqliteCore.check("ui_action_receipts_request_id_ck",drizzleOrm.sql`length(${t.request_id}) BETWEEN 1 AND 128`),actionIdCheck:sqliteCore.check("ui_action_receipts_action_id_ck",drizzleOrm.sql`length(${t.action_id}) BETWEEN 1 AND 128`),actorJsonCheck:sqliteCore.check("ui_action_receipts_actor_json_ck",drizzleOrm.sql`json_valid(${t.actor_json}) AND json_type(${t.actor_json}) = 'object'`),sourceCheck:sqliteCore.check("ui_action_receipts_source_ck",drizzleOrm.sql`${t.source} IN ('ui_host', 'cli', 'system')`),expectedRevisionCheck:sqliteCore.check("ui_action_receipts_expected_revision_ck",drizzleOrm.sql`${t.expected_revision} >= 0`),beforeRevisionCheck:sqliteCore.check("ui_action_receipts_before_revision_ck",drizzleOrm.sql`${t.before_revision} >= 0`),afterRevisionCheck:sqliteCore.check("ui_action_receipts_after_revision_ck",drizzleOrm.sql`${t.after_revision} IS NULL OR ${t.after_revision} >= 0`),statusCheck:sqliteCore.check("ui_action_receipts_status_ck",drizzleOrm.sql`${t.status} IN ('requested', 'settled')`),outcomeCheck:sqliteCore.check("ui_action_receipts_outcome_ck",drizzleOrm.sql`${t.outcome} IS NULL OR ${t.outcome} IN ('succeeded', 'rejected', 'failed', 'conflicted', 'expired')`),inputJsonCheck:sqliteCore.check("ui_action_receipts_input_json_ck",drizzleOrm.sql`json_valid(${t.input_json}) AND json_type(${t.input_json}) = 'object'`),resultJsonCheck:sqliteCore.check("ui_action_receipts_result_json_ck",drizzleOrm.sql`${t.result_json} IS NULL OR (json_valid(${t.result_json}) AND json_type(${t.result_json}) = 'object')`),requestedAtCheck:sqliteCore.check("ui_action_receipts_requested_at_ck",drizzleOrm.sql`${t.requested_at} >= 0`),settledAtCheck:sqliteCore.check("ui_action_receipts_settled_at_ck",drizzleOrm.sql`${t.settled_at} IS NULL OR ${t.settled_at} >= ${t.requested_at}`),statusTransitionCheck:sqliteCore.check("ui_action_receipts_status_transition_ck",drizzleOrm.sql`(
|
|
70
|
+
(${t.status} = 'requested' AND ${t.after_revision} IS NULL AND ${t.outcome} IS NULL AND ${t.settled_at} IS NULL)
|
|
71
|
+
OR
|
|
72
|
+
(${t.status} = 'settled' AND ${t.after_revision} IS NOT NULL AND ${t.outcome} IS NOT NULL AND ${t.settled_at} IS NOT NULL)
|
|
73
|
+
)`),instanceRequestUnique:sqliteCore.uniqueIndex("ui_action_receipts_instance_request_uq").on(t.instance_id,t.request_id),instanceIdIdx:sqliteCore.index("ui_action_receipts_instance_id_idx").on(t.instance_id),requestedAtIdx:sqliteCore.index("ui_action_receipts_requested_at_idx").on(t.requested_at)}));zt();var yt="2026-05-09",Mp="0.8.9-rc.13",wt=10,_t=parseInt(Mp.split("rc.")[1]);function Da(){let t=drizzleOrm.sql`
|
|
74
|
+
CASE
|
|
75
|
+
WHEN ${p.model} LIKE 'claude-%' OR ${p.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
|
|
76
|
+
WHEN ${p.model} LIKE 'gpt-%' OR ${p.model} LIKE 'codex-%' THEN 'codex'
|
|
77
|
+
WHEN ${p.model} LIKE 'gemini-%' THEN 'gemini'
|
|
78
|
+
WHEN ${p.model} LIKE 'grok-%' THEN 'grok'
|
|
79
|
+
WHEN ${p.model} LIKE 'zai-%' OR ${p.model} LIKE 'openrouter/z-ai/%' THEN 'opencode'
|
|
80
|
+
WHEN ${p.model} LIKE 'minimax/%' THEN 'minimax'
|
|
81
|
+
WHEN ${p.model} LIKE 'qwen%' THEN 'qwen'
|
|
82
|
+
ELSE 'unknown'
|
|
83
|
+
END
|
|
84
|
+
`,e=drizzleOrm.sql`json_extract(${p.metadata}, '$.provider')`,n=drizzleOrm.sql`trim(${e})`,r=drizzleOrm.sql`substr(${n}, 1, instr(${n}, '/') - 1)`,o=drizzleOrm.sql`
|
|
85
|
+
CASE
|
|
86
|
+
WHEN instr(${n}, '/') > 0
|
|
87
|
+
AND ${r} IN ('cli', 'acp', 'api', 'plugin', 'remote')
|
|
88
|
+
THEN substr(${n}, instr(${n}, '/') + 1)
|
|
89
|
+
ELSE ${n}
|
|
90
|
+
END
|
|
91
|
+
`;return drizzleOrm.sql`
|
|
92
|
+
CASE
|
|
93
|
+
WHEN ${p.metadata} IS NULL THEN ${t}
|
|
94
|
+
WHEN json_valid(${p.metadata}) = 0 THEN 'unknown'
|
|
95
|
+
WHEN json_type(${p.metadata}, '$') IS NOT 'object' THEN 'unknown'
|
|
96
|
+
WHEN json_type(${p.metadata}, '$.provider') IS NULL THEN ${t}
|
|
97
|
+
WHEN json_type(${p.metadata}, '$.provider') IS NOT 'text' THEN 'unknown'
|
|
98
|
+
WHEN ${n} = '' THEN 'unknown'
|
|
99
|
+
WHEN trim(${o}) = '' THEN 'unknown'
|
|
100
|
+
ELSE ${o}
|
|
101
|
+
END
|
|
102
|
+
`}var Up=new Set(["workflow","mcp"]),Ma=600*1e3,nn=class extends le{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 n=this.resolveDbPath();if(e){let o=K.dirname(n);Ua.existsSync(o)||Ua.mkdirSync(o,{recursive:true});}else if(!Ua.existsSync(n))throw new C("NOT_FOUND","Database not found");let r=Q(n);if(e)try{he(r.db,n);}catch(o){throw r.close(),o}return r}startTask(e){let n=this.openHandle(true);try{n.db.insert(p).values({id:e.id,agent_id:e.agentId,prompt:e.prompt,mode:e.mode,status:e.status,started_at:e.startedAt,pid:e.pid??null,parent_task_id:e.parentTaskId??null,caller_agent_id:e.callerAgentId??null,trace_id:e.traceId??null,command:e.command??null,metadata:e.metadata??null,workspace_id:e.workspaceId??null,platform:e.platform??"cli",crewx_version:e.crewxVersion??null,thread_id:e.threadId??null,model:e.model??null,rendered_prompt:e.renderedPrompt??null,coding_agent_command:e.codingAgentCommand??null}).onConflictDoUpdate({target:p.id,set:{pid:drizzleOrm.sql`COALESCE(excluded.pid, ${p.pid})`},setWhere:drizzleOrm.eq(p.status,"running")}).run();}catch(r){throw r instanceof C?r:new C("DB_ERROR","Failed to start task",r)}finally{n.close();}}finishTask(e){let n=this.openHandle(true);try{let r=e.runEpoch??null;n.runRaw(`UPDATE tasks SET status=?, result=?, error=?, completed_at=?, duration_ms=?,
|
|
61
103
|
exit_code=?, input_tokens=?, output_tokens=?, cached_input_tokens=?, cost_usd=?,
|
|
62
104
|
model=COALESCE(?, model)
|
|
63
|
-
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
|
|
105
|
+
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 C?r:new C("DB_ERROR","Failed to finish task",r)}finally{n.close();}}appendLog(e,n){let r=this.openHandle(true);try{r.db.transaction(o=>{let i=o.select({logs:p.logs}).from(p).where(drizzleOrm.eq(p.id,e)).limit(1).get(),s=i?.logs?JSON.parse(i.logs):[];s.push(n),o.update(p).set({logs:JSON.stringify(s)}).where(drizzleOrm.eq(p.id,e)).run();},{behavior:"immediate"});}catch(o){throw o instanceof C?o:new C("DB_ERROR","Failed to append log",o)}finally{r.close();}}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(p).where(drizzleOrm.eq(p.status,"running")).orderBy(drizzleOrm.desc(p.started_at)).all()}catch(n){throw new C("DB_ERROR","Failed to get running tasks",n)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(p).orderBy(drizzleOrm.desc(p.started_at)).limit(100).all()}catch(n){throw new C("DB_ERROR","Failed to get all tasks",n)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let n=this.openHandle(false);try{return n.db.select().from(p).where(drizzleOrm.eq(p.id,e)).limit(1).get()??void 0}catch(r){throw new C("DB_ERROR","Failed to get task",r)}finally{n.close();}}killTask(e){if(!this.dbExists())return {killed:false};let n=this.openHandle(true);try{let r=n.db.select({id:p.id,status:p.status,pid:p.pid}).from(p).where(drizzleOrm.eq(p.id,e)).limit(1).get();if(!r||r.status!=="running")return {killed:!1};if(r.pid)try{process.kill(r.pid,"SIGTERM");}catch{}return n.db.update(p).set({status:"failed",error:"Killed by user",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"))).run(),{killed:!0,pid:r.pid??void 0}}catch(r){throw r instanceof C?r:new C("DB_ERROR","Failed to kill task",r)}finally{n.close();}}reapOrphanedTasks(){if(!this.dbExists())return 0;let e=this.openHandle(true);try{let n=e.db.select({id:p.id,pid:p.pid,platform:p.platform,run_epoch:p.run_epoch}).from(p).where(drizzleOrm.eq(p.status,"running")).all(),r=Date.now(),o=new Set,i=0;for(let s of n){if(s.pid){let c=!1;try{process.kill(s.pid,0),c=!0;}catch{}c||(e.db.update(p).set({status:"failed",error:"Reaped: process not found (orphaned task)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.id,s.id),drizzleOrm.eq(p.status,"running"))).run(),i++);continue}if(Up.has(s.platform??"cli"))continue;let a=`${s.id}:${s.run_epoch??0}`;o.add(a);let d=this.pidNullObservedSince.get(a);if(d===void 0){this.pidNullObservedSince.set(a,r);continue}r-d>=Ma&&(e.db.update(p).set({status:"failed",error:"Reaped: pid never recorded after resume (stale running_instruction)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.id,s.id),drizzleOrm.eq(p.status,"running"))).run(),i++,this.pidNullObservedSince.delete(a));}for(let s of Array.from(this.pidNullObservedSince.keys()))o.has(s)||this.pidNullObservedSince.delete(s);return i}finally{e.close();}}reapRunningWorkflowTasks(e=Ma){if(!this.dbExists())return 0;let n=this.openHandle(true);try{let r=new Date(Date.now()-e).toISOString();return n.db.update(p).set({status:"failed",error:"Reaped: stale workflow run (finally not executed)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.status,"running"),drizzleOrm.eq(p.platform,"workflow"),drizzleOrm.isNull(p.pid),drizzleOrm.lt(p.started_at,r),drizzleOrm.or(drizzleOrm.isNull(p.metadata),drizzleOrm.and(drizzleOrm.notLike(p.metadata,'%"kind":"workflow_card"%'),drizzleOrm.notLike(p.metadata,'%"kind":"workflow_ui_instance"%'))))).run().changes??0}finally{n.close();}}findTaskStatus(e,n){let r=this.resolveDbPaths();for(let o of r){if(!Ua.existsSync(o))continue;let i=Q(o);try{let s=n?drizzleOrm.eq(p.workspace_id,n):void 0,a=s?drizzleOrm.and(drizzleOrm.eq(p.id,e),s):drizzleOrm.eq(p.id,e),d=i.db.select().from(p).where(a).limit(1).get()??void 0;if(!d){let c=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),l=s?drizzleOrm.and(c,s):c;d=i.db.select().from(p).where(l).orderBy(drizzleOrm.desc(p.started_at)).limit(1).get()??void 0;}if(d)return d}catch(s){throw new C("DB_ERROR","Failed to find task status",s)}finally{i.close();}}}findChildTasks(e,n){let r=this.resolveDbPaths(),o=new Set,i=[];for(let s of r){if(!Ua.existsSync(s))continue;let a=Q(s);try{let d=n?drizzleOrm.and(drizzleOrm.eq(p.parent_task_id,e),drizzleOrm.eq(p.workspace_id,n)):drizzleOrm.eq(p.parent_task_id,e),c=a.db.select().from(p).where(d).orderBy(drizzleOrm.asc(p.started_at)).all();for(let l of c)o.has(l.id)||(o.add(l.id),i.push(l));}catch(d){throw new C("DB_ERROR","Failed to find child tasks",d)}finally{a.close();}}return i}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.all(e?drizzleOrm.sql`
|
|
64
106
|
SELECT
|
|
65
107
|
COALESCE(workspace_id, 'unknown') AS workspace_id,
|
|
66
108
|
COALESCE(SUM(input_tokens), 0) AS input_tokens,
|
|
@@ -81,7 +123,7 @@ ${r.join(`
|
|
|
81
123
|
FROM tasks
|
|
82
124
|
GROUP BY workspace_id
|
|
83
125
|
ORDER BY (COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0)) DESC
|
|
84
|
-
`)}catch(r){throw new
|
|
126
|
+
`)}catch(r){throw new C("DB_ERROR","Failed to get workspace usage summary",r)}finally{n.close();}}getThreadTokenUsage(e,n){let r=this.resolveDbPaths(),o=new Set,i=0,s=0,a=0;for(let d of r){if(!Ua.existsSync(d))continue;let c=Q(d);try{let l=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),f=n?drizzleOrm.and(l,drizzleOrm.eq(p.workspace_id,n)):l,g=c.db.select({id:p.id,input_tokens:p.input_tokens,output_tokens:p.output_tokens,cost_usd:p.cost_usd}).from(p).where(f).all();for(let m of g)o.has(m.id)||(o.add(m.id),i+=m.input_tokens??0,s+=m.output_tokens??0,a+=m.cost_usd??0);}catch(l){throw new C("DB_ERROR","Failed to get thread token usage",l)}finally{c.close();}}return {inputTokens:i,outputTokens:s,costUsd:a}}findTasksByThread(e,n){let r=this.resolveDbPaths(),o=new Set,i=[];for(let s of r){if(!Ua.existsSync(s))continue;let a=Q(s);try{let d=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),c=n?drizzleOrm.and(d,drizzleOrm.eq(p.workspace_id,n)):d,l=a.db.select().from(p).where(c).orderBy(drizzleOrm.asc(p.started_at)).all();for(let f of l)o.has(f.id)||(o.add(f.id),i.push(f));}catch(d){throw new C("DB_ERROR","Failed to find tasks by thread",d)}finally{a.close();}}return i}parseWorkflowCardMetadata(e){if(!e)return {};try{let n=JSON.parse(e);return {kind:typeof n.kind=="string"?n.kind:void 0,workflowRunId:typeof n.workflowRunId=="string"?n.workflowRunId:void 0}}catch{return {}}}extractThreadIdFromCommand(e){return e?/--thread=(\S+)/.exec(e)?.[1]??null:null}findRunningWorkflowParentTasks(){if(!this.dbExists())return [];let e=[];for(let n of this.resolveDbPaths()){if(!Ua.existsSync(n))continue;let r=Q(n);try{e.push(...r.db.select({id:p.id,agent_id:p.agent_id,thread_id:p.thread_id,workspace_id:p.workspace_id,platform:p.platform,status:p.status,error:p.error,completed_at:p.completed_at,duration_ms:p.duration_ms,started_at:p.started_at,metadata:p.metadata}).from(p).where(drizzleOrm.and(drizzleOrm.eq(p.platform,"workflow"),drizzleOrm.or(drizzleOrm.like(p.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(p.metadata,'%"kind":"workflow_ui_instance"%')))).orderBy(drizzleOrm.desc(p.started_at)).all());}catch(o){throw new C("DB_ERROR","Failed to find workflow parent tasks",o)}finally{r.close();}}return e}batchFetchWorkflowCards(e,n){let r=new Map;if(e.length===0)return r;let o=new Set(e),i=new Map,s=n?drizzleOrm.eq(p.workspace_id,n):void 0,a=(d,c)=>{if(!d)return;let l=i.get(d);if(l&&c.started_at<=l)return;let f=this.parseWorkflowCardMetadata(c.metadata);f.kind!=="workflow_card"&&f.kind!=="workflow_ui_instance"||(i.set(d,c.started_at),r.set(d,{taskId:c.id,workflowRunId:f.workflowRunId,raw:c.result??void 0}));};for(let d of this.resolveDbPaths()){if(!Ua.existsSync(d))continue;let c=Q(d);try{let l=drizzleOrm.and(drizzleOrm.inArray(p.thread_id,e),drizzleOrm.or(drizzleOrm.like(p.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(p.metadata,'%"kind":"workflow_ui_instance"%'))),f=c.db.select({id:p.id,thread_id:p.thread_id,metadata:p.metadata,result:p.result,started_at:p.started_at}).from(p).where(s?drizzleOrm.and(l,s):l).all();for(let k of f)a(k.thread_id,k);let g=drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.or(drizzleOrm.like(p.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(p.metadata,'%"kind":"workflow_ui_instance"%'))),m=c.db.select({id:p.id,command:p.command,metadata:p.metadata,result:p.result,started_at:p.started_at}).from(p).where(s?drizzleOrm.and(g,s):g).all();for(let k of m){let h=this.extractThreadIdFromCommand(k.command);!h||!o.has(h)||a(h,k);}}catch(l){throw new C("DB_ERROR","Failed to batch fetch workflow cards",l)}finally{c.close();}}return r}findAllTasks(e){if(!this.dbExists())return {rows:[],total:0};let n=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(p.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(drizzleOrm.inArray(p.agent_id,o));let i=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;i&&r.push(drizzleOrm.inArray(p.status,i));let s=e.q??e.search;s&&r.push(drizzleOrm.like(p.prompt,`%${s}%`)),e.from&&r.push(drizzleOrm.gte(p.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(p.started_at,e.to));let a=r.length>0?drizzleOrm.and(...r):void 0,d=n.db.select({count:drizzleOrm.sql`count(*)`}).from(p).where(a).get(),c=(e.sortDir??"DESC")==="ASC"?drizzleOrm.asc(p.started_at):drizzleOrm.desc(p.started_at);return {rows:n.db.select().from(p).where(a).orderBy(c).limit(e.limit).offset(e.offset).all(),total:d?.count??0}}catch(r){throw new C("DB_ERROR","Failed to find all tasks",r)}finally{n.close();}}getAgentUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?drizzleOrm.sql`
|
|
85
127
|
SELECT
|
|
86
128
|
t.agent_id,
|
|
87
129
|
t.workspace_id,
|
|
@@ -89,11 +131,11 @@ ${r.join(`
|
|
|
89
131
|
COALESCE(SUM(
|
|
90
132
|
COALESCE(t.input_tokens, 0)
|
|
91
133
|
+ CASE
|
|
92
|
-
WHEN t.started_at >= ${
|
|
134
|
+
WHEN t.started_at >= ${yt}
|
|
93
135
|
AND (
|
|
94
136
|
t.crewx_version IS NULL
|
|
95
137
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
96
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
138
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${wt}) AS INTEGER) < ${_t})
|
|
97
139
|
)
|
|
98
140
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
99
141
|
ELSE 0
|
|
@@ -105,18 +147,18 @@ ${r.join(`
|
|
|
105
147
|
FROM tasks t
|
|
106
148
|
WHERE t.status IN ('completed', 'success')
|
|
107
149
|
AND t.started_at >= ${e}
|
|
108
|
-
AND t.started_at < ${
|
|
150
|
+
AND t.started_at < ${n}
|
|
109
151
|
AND t.workspace_id = ${r}
|
|
110
152
|
GROUP BY t.agent_id, t.workspace_id
|
|
111
153
|
ORDER BY (
|
|
112
154
|
COALESCE(SUM(
|
|
113
155
|
COALESCE(t.input_tokens, 0)
|
|
114
156
|
+ CASE
|
|
115
|
-
WHEN t.started_at >= ${
|
|
157
|
+
WHEN t.started_at >= ${yt}
|
|
116
158
|
AND (
|
|
117
159
|
t.crewx_version IS NULL
|
|
118
160
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
119
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
161
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${wt}) AS INTEGER) < ${_t})
|
|
120
162
|
)
|
|
121
163
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
122
164
|
ELSE 0
|
|
@@ -132,11 +174,11 @@ ${r.join(`
|
|
|
132
174
|
COALESCE(SUM(
|
|
133
175
|
COALESCE(t.input_tokens, 0)
|
|
134
176
|
+ CASE
|
|
135
|
-
WHEN t.started_at >= ${
|
|
177
|
+
WHEN t.started_at >= ${yt}
|
|
136
178
|
AND (
|
|
137
179
|
t.crewx_version IS NULL
|
|
138
180
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
139
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
181
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${wt}) AS INTEGER) < ${_t})
|
|
140
182
|
)
|
|
141
183
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
142
184
|
ELSE 0
|
|
@@ -148,17 +190,17 @@ ${r.join(`
|
|
|
148
190
|
FROM tasks t
|
|
149
191
|
WHERE t.status IN ('completed', 'success')
|
|
150
192
|
AND t.started_at >= ${e}
|
|
151
|
-
AND t.started_at < ${
|
|
193
|
+
AND t.started_at < ${n}
|
|
152
194
|
GROUP BY t.agent_id, t.workspace_id
|
|
153
195
|
ORDER BY (
|
|
154
196
|
COALESCE(SUM(
|
|
155
197
|
COALESCE(t.input_tokens, 0)
|
|
156
198
|
+ CASE
|
|
157
|
-
WHEN t.started_at >= ${
|
|
199
|
+
WHEN t.started_at >= ${yt}
|
|
158
200
|
AND (
|
|
159
201
|
t.crewx_version IS NULL
|
|
160
202
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
161
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
203
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${wt}) AS INTEGER) < ${_t})
|
|
162
204
|
)
|
|
163
205
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
164
206
|
ELSE 0
|
|
@@ -166,18 +208,18 @@ ${r.join(`
|
|
|
166
208
|
), 0)
|
|
167
209
|
+ COALESCE(SUM(t.output_tokens), 0)
|
|
168
210
|
) DESC
|
|
169
|
-
`).map(
|
|
211
|
+
`).map(s=>({agentId:s.agent_id,workspaceId:s.workspace_id??null,totalTasks:s.total_tasks,inputTokens:s.input_tokens,outputTokens:s.output_tokens,cachedInputTokens:s.cached_input_tokens,costUsd:s.cost_usd,totalTokens:s.input_tokens+s.output_tokens}))}catch(i){throw new C("DB_ERROR","Failed to get agent usage",i)}finally{o.close();}}getAgentUsageTrendRaw(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?drizzleOrm.sql`
|
|
170
212
|
SELECT
|
|
171
213
|
date(t.started_at) AS date,
|
|
172
214
|
t.agent_id,
|
|
173
215
|
COALESCE(SUM(
|
|
174
216
|
COALESCE(t.input_tokens, 0)
|
|
175
217
|
+ CASE
|
|
176
|
-
WHEN t.started_at >= ${
|
|
218
|
+
WHEN t.started_at >= ${yt}
|
|
177
219
|
AND (
|
|
178
220
|
t.crewx_version IS NULL
|
|
179
221
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
180
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
222
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${wt}) AS INTEGER) < ${_t})
|
|
181
223
|
)
|
|
182
224
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
183
225
|
ELSE 0
|
|
@@ -189,7 +231,7 @@ ${r.join(`
|
|
|
189
231
|
FROM tasks t
|
|
190
232
|
WHERE t.status IN ('completed', 'success')
|
|
191
233
|
AND t.started_at >= ${e}
|
|
192
|
-
AND t.started_at < ${
|
|
234
|
+
AND t.started_at < ${n}
|
|
193
235
|
AND t.workspace_id = ${r}
|
|
194
236
|
GROUP BY date(t.started_at), t.agent_id
|
|
195
237
|
ORDER BY date(t.started_at) ASC
|
|
@@ -200,11 +242,11 @@ ${r.join(`
|
|
|
200
242
|
COALESCE(SUM(
|
|
201
243
|
COALESCE(t.input_tokens, 0)
|
|
202
244
|
+ CASE
|
|
203
|
-
WHEN t.started_at >= ${
|
|
245
|
+
WHEN t.started_at >= ${yt}
|
|
204
246
|
AND (
|
|
205
247
|
t.crewx_version IS NULL
|
|
206
248
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
207
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
249
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${wt}) AS INTEGER) < ${_t})
|
|
208
250
|
)
|
|
209
251
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
210
252
|
ELSE 0
|
|
@@ -216,58 +258,154 @@ ${r.join(`
|
|
|
216
258
|
FROM tasks t
|
|
217
259
|
WHERE t.status IN ('completed', 'success')
|
|
218
260
|
AND t.started_at >= ${e}
|
|
219
|
-
AND t.started_at < ${
|
|
261
|
+
AND t.started_at < ${n}
|
|
220
262
|
GROUP BY date(t.started_at), t.agent_id
|
|
221
263
|
ORDER BY date(t.started_at) ASC
|
|
222
|
-
`).map(
|
|
223
|
-
|
|
224
|
-
WHEN ${m.model} LIKE 'claude-%' OR ${m.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
|
|
225
|
-
WHEN ${m.model} LIKE 'gpt-%' OR ${m.model} LIKE 'codex-%' THEN 'codex'
|
|
226
|
-
WHEN ${m.model} LIKE 'gemini-%' THEN 'gemini'
|
|
227
|
-
WHEN ${m.model} LIKE 'zai-%' OR ${m.model} LIKE 'openrouter/z-ai/%' THEN 'opencode'
|
|
228
|
-
WHEN ${m.model} LIKE 'minimax/%' THEN 'minimax'
|
|
229
|
-
WHEN ${m.model} LIKE 'qwen%' THEN 'qwen'
|
|
230
|
-
ELSE 'unknown'
|
|
231
|
-
END
|
|
232
|
-
`,i=drizzleOrm.sql`
|
|
233
|
-
COALESCE(${m.input_tokens}, 0)
|
|
264
|
+
`).map(s=>({date:s.date,agentId:s.agent_id,inputTokens:s.input_tokens,outputTokens:s.output_tokens,cachedInputTokens:s.cached_input_tokens,costUsd:s.cost_usd,totalTokens:s.input_tokens+s.output_tokens}))}catch(i){throw new C("DB_ERROR","Failed to get agent usage trend",i)}finally{o.close();}}findTaskForStop(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(p).where(drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.workspace_id,n))).limit(1).get()??void 0}catch(o){throw new C("DB_ERROR","Failed to find task for stop",o)}finally{r.close();}}findLatestTaskByMetadata(e){if(!this.dbExists())return null;let n=this.openHandle(false);try{return n.db.select({id:p.id,thread_id:p.thread_id,status:p.status,result:p.result,error:p.error,started_at:p.started_at,completed_at:p.completed_at,metadata:p.metadata}).from(p).where(drizzleOrm.and(drizzleOrm.eq(p.agent_id,e.agentId),drizzleOrm.eq(p.workspace_id,e.workspaceId),drizzleOrm.sql`${p.metadata} IS NOT NULL AND json_valid(${p.metadata}) AND json_extract(${p.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(drizzleOrm.desc(p.started_at)).limit(1).get()??null}catch(r){throw new C("DB_ERROR","Failed to find latest task by metadata",r)}finally{n.close();}}markTaskFailed(e,n,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let i=new Date().toISOString(),s=r?drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"),drizzleOrm.eq(p.workspace_id,r)):drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"));o.db.update(p).set({status:"failed",error:n,completed_at:i}).where(s).run();}catch(i){throw i instanceof C?i:new C("DB_ERROR","Failed to mark task failed",i)}finally{o.close();}}findTasksByPromptHint(e,n){let r=this.resolveDbPaths(),o=new Set,i=[];for(let s of r){if(!Ua.existsSync(s))continue;let a=Q(s);try{let d=n?drizzleOrm.and(drizzleOrm.like(p.prompt,`%${e}%`),drizzleOrm.eq(p.workspace_id,n)):drizzleOrm.like(p.prompt,`%${e}%`),c=a.db.select().from(p).where(d).orderBy(drizzleOrm.asc(p.started_at)).all();for(let l of c)o.has(l.id)||(o.add(l.id),i.push(l));}catch(d){throw new C("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{a.close();}}return i}getProviderUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let i=Da(),s=drizzleOrm.sql`
|
|
265
|
+
COALESCE(${p.input_tokens}, 0)
|
|
234
266
|
+ CASE
|
|
235
|
-
WHEN ${
|
|
267
|
+
WHEN ${p.started_at} >= ${yt}
|
|
236
268
|
AND (
|
|
237
|
-
${
|
|
238
|
-
OR (${
|
|
239
|
-
OR (${
|
|
269
|
+
${p.crewx_version} IS NULL
|
|
270
|
+
OR (${p.crewx_version} LIKE '0.8.%' AND ${p.crewx_version} NOT LIKE '0.8.9%')
|
|
271
|
+
OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${wt}) AS INTEGER) < ${_t})
|
|
240
272
|
)
|
|
241
|
-
THEN COALESCE(${
|
|
273
|
+
THEN COALESCE(${p.cached_input_tokens}, 0)
|
|
242
274
|
ELSE 0
|
|
243
275
|
END
|
|
244
|
-
`,a=r?drizzleOrm.sql`WHERE ${
|
|
276
|
+
`,a=r?drizzleOrm.sql`WHERE ${p.status} IN ('completed', 'success') AND ${p.started_at} >= ${e} AND ${p.started_at} < ${n} AND ${p.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${p.status} IN ('completed', 'success') AND ${p.started_at} >= ${e} AND ${p.started_at} < ${n}`;return o.db.all(drizzleOrm.sql`
|
|
245
277
|
SELECT
|
|
246
|
-
${
|
|
278
|
+
${i} AS provider,
|
|
247
279
|
COUNT(*) AS total_tasks,
|
|
248
|
-
COALESCE(SUM(${
|
|
249
|
-
COALESCE(SUM(${
|
|
250
|
-
COALESCE(SUM(${
|
|
251
|
-
COALESCE(SUM(${
|
|
252
|
-
COALESCE(SUM(${
|
|
253
|
-
MAX(${
|
|
254
|
-
FROM ${
|
|
280
|
+
COALESCE(SUM(${s}), 0) AS input_tokens,
|
|
281
|
+
COALESCE(SUM(${p.output_tokens}), 0) AS output_tokens,
|
|
282
|
+
COALESCE(SUM(${p.cached_input_tokens}), 0) AS cached_input_tokens,
|
|
283
|
+
COALESCE(SUM(${p.cost_usd}), 0) AS cost_usd,
|
|
284
|
+
COALESCE(SUM(${p.duration_ms}), 0) AS active_duration_ms,
|
|
285
|
+
MAX(${p.completed_at}) AS last_active_at
|
|
286
|
+
FROM ${p}
|
|
255
287
|
${a}
|
|
256
|
-
GROUP BY
|
|
257
|
-
ORDER BY (COALESCE(SUM(${
|
|
258
|
-
`).map(
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
${i.message}`)}let s=Mt(o);if(s.documents&&typeof s.documents=="object"){let i={};for(let[a,d]of Object.entries(s.documents))if(d&&typeof d=="object"){let 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=Lo(a.vars,d.vars),u=Lo(a.settings,d.settings),g;e.skills&&t.skills&&typeof e.skills=="object"&&typeof t.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(t.skills)?g={...e.skills,...t.skills}:g=t.skills??e.skills;let f=[...e.hooks??[],...t.hooks??[]],p=Ya(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:g};return f.length>0&&(w.hooks=f),l!==void 0&&(w.vars=l),u!==void 0&&(w.settings=u),p!==void 0&&(w.providers=p),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 g=Nt(e);s=n.mergeCrewxConfig(u,g),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=Nt(e),i=G.dirname(e);}let a=new De(r);await a.load(s.documents,i);let d=s.agents??[];return await $o(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 De(o);await a.load(i.documents,r??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await $o(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=Mr(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 zr(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??Nr(r),a=e.defaultMode??"query",d=t.manifest.platform,l=e.agentRunner??{run:async(p,h,x)=>{let w=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${p}`,h,{threadId:x?.threadId,platform:d});return {output:w.ok?w.data:w.error?.message??""}}},u=e.onInbound??(async p=>{let h=p.routingHints?.agentId??e.defaultAgent;if(!h)return {accepted:false,reason:"no_agent"};let{output:x}=await l.run(h,p.text,{threadId:p.threadId});return {accepted:true,output:x}}),g=Lr({instanceId:r,config:o,capabilities:s,db:i,agentRunner:l,onInbound:u}),f={adapter:t,ctx:g,state:"starting"};this._activeAdapters.set(r,f),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await t.start(g),f.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(p){throw f.state="failed",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"failed",error:p instanceof Error?p:new Error(String(p)),timestamp:new Date}),this._activeAdapters.delete(r),p}}async unregisterChannelAdapter(e){let t=this._activeAdapters.get(e);if(t){t.state="stopping",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopping",timestamp:new Date});try{await t.adapter.stop(t.ctx),t.state="stopped",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopped",timestamp:new Date});}catch(r){t.state="failed",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"failed",error:r instanceof Error?r:new Error(String(r)),timestamp:new Date});}finally{this._activeAdapters.delete(e);}}}async stopAllAdapters(e={}){let t=e.timeoutMs??1e4,r=Array.from(this._activeAdapters.keys()),o=await Promise.allSettled(r.map(s=>Promise.race([this.unregisterChannelAdapter(s),new Promise((i,a)=>setTimeout(()=>a(new Error(`Adapter stop timeout: ${s}`)),t))])));for(let s=0;s<o.length;s++)o[s].status==="rejected"&&console.error(`[crewx] adapter stop error (${r[s]}): ${o[s].reason}`);}async close(){await this.stopAllAdapters({timeoutMs:1e4});let e=[...this._remoteTargets.values()];this._remoteTargets.clear(),await Promise.allSettled(e.map(async r=>{try{await(await r).close();}catch(o){console.error(`[crewx] remote target close error: ${o instanceof Error?o.message:String(o)}`);}}));let t=[...this._plugins].reverse();for(let r of t)try{await r.detach(this);}catch(o){console.error(`[crewx] plugin ${r.name} detach error: ${o instanceof Error?o.message:String(o)}`);}this._plugins.length=0;}filterAgents(e){let t=a=>a?a.split(",").map(d=>d.trim().toLowerCase()).filter(Boolean):void 0,r=t(e.role),o=t(e.team),s=t(e.provider),i=Array.from(this._agents.values());return r&&(i=i.filter(a=>a.role&&r.some(d=>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(),g=t?.env??(typeof process<"u"?process.env:{}),f=t?.vars?.security_key??Ja(),p={...t?.vars??{},documents:u,env:g,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??""}},h=await this._templateEngine.render(l,p),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,b=["goals","daily"],P={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)?P.goals=ce:P.goals=!!ce;}"daily"in L&&(P.daily=!!L.daily);let V={};for(let[ce,st]of Object.entries(L))b.includes(ce)||(V[ce]=st);if(Object.keys(V).length>0){let ce=w.some(dr=>dr.startsWith("cli/")),st={};for(let[dr,it]of Object.entries(V)){let Ge={};if(Array.isArray(it))ce&&(Ge.rawArgs=it);else if(typeof it=="object"&&it!==null){let En=it;Object.keys(En).length>0&&(Ge.named=En);}(Ge.named||Ge.rawArgs&&Ge.rawArgs.length>0)&&(st[dr]=Ge);}B=Object.keys(st).length>0?st: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(P.goals){let L=G.join(this._projectRoot,"docs","goal"),V=await Zn(L,void 0,P.goals);V&&(A.active_goals={content:V});}if(P.daily){let L=G.join(this._projectRoot,"docs","daily"),V=await eo(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,E=typeof j?.maxEntryChars=="number"?j.maxEntryChars:8e3,I=typeof j?.decayRate=="number"?j.decayRate:.5,S=t?.threadId??"",R=o.id,$=K&&F>0&&S&&t?.messages&&t.messages.length>0?mo({threadId:S,agentId:R,lookback:F,maxEntryChars:E,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:P,documents:A,skills:t?.skills??[],session:x,env:g,vars:{security_key:f,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:x.platform,mode:x.mode,thread_id:S,now:yt(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:Ur(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=Hn();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)??ut(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=kt.getStore()??$r(r?.trace),i=r?.taskId??$e("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return kt.run(d,async()=>{let l=Date.now(),u=new Date,g;try{g=Lt(e,Array.from(this._agents.values()));}catch(E){if(E 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,S={code:"AGENT_NOT_FOUND",message:E.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:I,error:S,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:S,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:I,taskId:i}}}throw E}d.callerAgentId=g.id;let f=Array.isArray(g.provider)?g.provider[0]??"cli/claude":g.provider,p=r?.provider??f,h=r?.model??g.inline?.model;h&&h.includes("{{")&&(h=await this._templateEngine.render(h,{...r?.vars??{}}));let x;try{x=xe(p);}catch(E){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let I=Date.now()-l,S={code:"PROVIDER_ERROR",message:E.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:I,error:S,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:S,meta:{agentId:g.id,provider:p,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(E){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${E instanceof Error?E.message:String(E)}`);}let _,k,b,P=h,B=false,q=E=>{B||(B=true,this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",pid:E,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:P,provider:p,codingAgentCommand:_,renderedPrompt:w,metadata:{...r?.metadata??{},provider:p},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},A=g.options,H=Array.isArray(A?.query?.tools)?A.query.tools:void 0,z=this._tools.size>0?this._filterToolsByMode(H):[],W=(()=>{let E=A?.query;if(!E||Array.isArray(E))return;let{tools:I,effort:S,mode:R,...$}=E,X=Object.entries($).filter(([,ee])=>ee!=null);if(X.length!==0)return Object.fromEntries(X.map(([ee,L])=>[ee,String(L)]))})(),j=g.inline?.max_steps;p.startsWith("api/")&&q();let K=false,F=0;try{let E=await x.query(t,{model:h,effort:A?.query?.effort,mode:A?.query?.mode,context:r?.context,systemPrompt:w??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.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(p)),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:p,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,u)},onPid:R=>q(R),onOutput:(R,$)=>{let X=exports.BUILTIN_ADAPTERS[p];$==="stdout"&&X?.suppressOutputLine?.(R)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:R,level:$}),$==="stdout"&&this.emitToolEvents(i,e,p,R,g.id,r?.threadId??"","");},onTaskLog:R=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",p,R);for(let $ of R)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify($),level:"info"});},onCommand:R=>{_=R;},onUsage:R=>{k=R;},onExitCode:R=>{b=R;},onModel:R=>{P||(P=R);}});F=Cr(k?.costUsd,k?.inputTokens,k?.outputTokens,k?.cachedInputTokens,P),q();let I=Date.now()-l,S={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:E,durationMs:I,exitCode:b,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:F,model:P,metadata:Object.keys(S).length>0?S:void 0}),K=!0,{ok:!0,data:E,meta:{agentId:g.id,provider:p,model:h,durationMs:I,taskId:i}}}catch(E){if(E instanceof exports.ClientToolCallRequiredError){let R=$e("thd");return this._pendingThreads.set(R,{agentRef:g.id,providerStr:p,continuationState:E.continuationState,toolCall:E.toolCall,traceId:i,startMs:l,model:h}),K=true,{ok:true,status:"requires_action",data:"",toolCall:E.toolCall,threadId:R,meta:{agentId:g.id,provider:p,model:h,durationMs:Date.now()-l,taskId:i}}}q();let I=Date.now()-l,S={code:"QUERY_FAILED",message:E.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:I,error:S,exitCode:b,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:F,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),K=true,{ok:false,data:"",error:S,meta:{agentId:g.id,provider:p,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:b??-1,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:F,model:P});}})}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=xe(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=kt.getStore()??$r(r?.trace),i=r?.taskId??$e("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return kt.run(d,async()=>{let l=Date.now(),u=new Date,g;try{g=Lt(e,Array.from(this._agents.values()));}catch(E){if(E 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,S={code:"AGENT_NOT_FOUND",message:E.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:I,error:S,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:S,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:I,taskId:i}}}throw E}d.callerAgentId=g.id;let f=Array.isArray(g.provider)?g.provider[0]??"cli/claude":g.provider,p=r?.provider??f,h=r?.model??g.inline?.model;h&&h.includes("{{")&&(h=await this._templateEngine.render(h,{...r?.vars??{}}));let x;try{x=xe(p);}catch(E){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let I=Date.now()-l,S={code:"PROVIDER_ERROR",message:E.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:I,error:S,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:S,meta:{agentId:g.id,provider:p,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(E){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${E instanceof Error?E.message:String(E)}`);}let _,k,b,P=h,B=false,q=E=>{B||(B=true,this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",pid:E,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:P,provider:p,codingAgentCommand:_,renderedPrompt:w,metadata:{...r?.metadata??{},provider:p},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},A=g.options,H=Array.isArray(A?.execute?.tools)?A.execute.tools:void 0,z=this._tools.size>0?this._filterToolsByMode(H):[],W=(()=>{let E=A?.execute;if(!E||Array.isArray(E))return;let{tools:I,effort:S,mode:R,...$}=E,X=Object.entries($).filter(([,ee])=>ee!=null);if(X.length!==0)return Object.fromEntries(X.map(([ee,L])=>[ee,String(L)]))})(),j=g.inline?.max_steps;p.startsWith("api/")&&q();let K=false,F=0;try{let E=await x.execute(t,{model:h,effort:A?.execute?.effort,mode:A?.execute?.mode,context:r?.context,systemPrompt:w??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.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(p)),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:p,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,u)},onPid:R=>q(R),onOutput:(R,$)=>{let X=exports.BUILTIN_ADAPTERS[p];$==="stdout"&&X?.suppressOutputLine?.(R)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:R,level:$}),$==="stdout"&&this.emitToolEvents(i,e,p,R,g.id,r?.threadId??"","");},onTaskLog:R=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",p,R);for(let $ of R)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify($),level:"info"});},onCommand:R=>{_=R;},onUsage:R=>{k=R;},onExitCode:R=>{b=R;},onModel:R=>{P||(P=R);}});F=Cr(k?.costUsd,k?.inputTokens,k?.outputTokens,k?.cachedInputTokens,P),q();let I=Date.now()-l,S={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:E,durationMs:I,exitCode:b,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:F,model:P,metadata:Object.keys(S).length>0?S:void 0}),K=!0,{ok:!0,data:E,meta:{agentId:g.id,provider:p,model:h,durationMs:I,taskId:i}}}catch(E){q();let I=Date.now()-l,S={code:"EXECUTE_FAILED",message:E.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:I,error:S,exitCode:b,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:F,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),K=true,{ok:false,data:"",error:S,meta:{agentId:g.id,provider:p,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:b??-1,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:F,model:P});}})}};function Lo(n,e){let t=cn(n)?n:void 0,r=cn(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function cn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Ya(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(!cn(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 $o(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(()=>(Gr(),Ao));o(t?.api);}await Za(n,e),ed(n,e),Qa(n);}function Qa(n){if(!n.some(r=>(Array.isArray(r.provider)?r.provider:[r.provider]).some(s=>s.startsWith("acp/"))))return;let{registerAcpProviders:t}=(tn(),Rn(Po));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(()=>(on(),bo)),s=new Map;for(let i of r)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&we("remote",o(s,xe));}function ed(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}=(sn(),Rn(No)),s=new Map;for(let i of r)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&we("plugin",o(s));}c();var un=class{detach(e){}};c();var td="crewx:fs:",pn=class{prefix;store;constructor(e){this.prefix=e?.prefix??td,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();var rd="https://api.crewx.dev/v1/models",nd=3600*1e3,Uo=0;async function od(n){let e=n?.ttlMs??nd,t=Date.now();if(!(t-Uo<e)){Uo=t;try{let r=await fetch(n?.endpoint??rd);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});Fn(s);}catch{}}}c();function sd(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 gn=["codex","claude","opencode","antigravity","copilot"];function id(n){let e=n.indexOf("/");return e===-1?n:n.slice(e+1)}function mn(n){let e=id(n),t=gn.indexOf(e);return t===-1?gn.length:t}function Pt(n,e){return mn(n)-mn(e)}var ad=new Set(["claude","copilot","codex","opencode"]);function dd(n){if(!n)return "";if(n.startsWith("acp/")){let e=n.slice(4);if(ad.has(e))return `cli/${e}`}return n}he();pe();Vr();Gr();c();Xr();Te();c();er();sr();he();var ld="model",cd="mode",ud="thought_level";function fn(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 pd(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 gd(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()===cd&&w.options!=null)for(let _ of fn(w.options))_.value!=null&&l.push({id:_.value,name:_.name??_.value});let u=pd(d,l),g=[];for(let w of i)if(w.category?.trim().toLowerCase()===ud&&w.type==="select")for(let _ of fn(w.options??[]))_.value!=null&&g.push(_.value);if(n==="claude"){let w=exports.CLAUDE_MODELS.map(k=>({id:k.id,name:k.name})),_=jo(t);return Ho(n,{models:w,modes:u,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${n}`,name:s,modes:u,effort:g,models:w,capabilities:_}}let p=(r.models?.availableModels??[]).map(w=>({id:w.modelId})),h=[];for(let w of i)if(w.category?.trim().toLowerCase()===ld&&w.options!=null)for(let _ of fn(w.options))_.value!=null&&h.push({id:_.value,..._.name!=null?{name:_.name}:{}});let x=ct(p,h);Ho(n,{models:x,modes:u,availableModelsCount:p.length,configModelsCount:h.length,skipModelWarn:false});let v=jo(t);return {id:`acp/${n}`,name:s,modes:u,effort:g,models:x,capabilities:v}}function jo(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 Ho(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 Fo(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 gd(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 md(){let n=Object.keys(exports.ACP_ADAPTERS),e=await Promise.allSettled(n.map(r=>Fo(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t.sort((r,o)=>Pt(r.id,o.id))}er();Jr();sr();tn();ur();Ce();c();Ce();he();function yd(n){return n.charAt(0).toUpperCase()+n.slice(1)}async function hd(){return new Promise(n=>{child_process.execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(t,r)=>{if(t){n([]);return}let o=r.split(`
|
|
264
|
-
|
|
288
|
+
GROUP BY ${i}
|
|
289
|
+
ORDER BY (COALESCE(SUM(${s}), 0) + COALESCE(SUM(${p.output_tokens}), 0)) DESC
|
|
290
|
+
`).map(c=>({provider:c.provider,totalTasks:c.total_tasks,inputTokens:c.input_tokens,outputTokens:c.output_tokens,cachedInputTokens:c.cached_input_tokens,costUsd:c.cost_usd,totalTokens:c.input_tokens+c.output_tokens,activeDurationMs:c.active_duration_ms??0,lastActiveAt:c.last_active_at??null}))}catch(i){throw new C("DB_ERROR","Failed to get provider usage",i)}finally{o.close();}}getModelUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let i=Da(),s=drizzleOrm.sql`
|
|
291
|
+
COALESCE(${p.input_tokens}, 0)
|
|
292
|
+
+ CASE
|
|
293
|
+
WHEN ${p.started_at} >= ${yt}
|
|
294
|
+
AND (
|
|
295
|
+
${p.crewx_version} IS NULL
|
|
296
|
+
OR (${p.crewx_version} LIKE '0.8.%' AND ${p.crewx_version} NOT LIKE '0.8.9%')
|
|
297
|
+
OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${wt}) AS INTEGER) < ${_t})
|
|
298
|
+
)
|
|
299
|
+
THEN COALESCE(${p.cached_input_tokens}, 0)
|
|
300
|
+
ELSE 0
|
|
301
|
+
END
|
|
302
|
+
`,a=r?drizzleOrm.sql`WHERE ${p.status} IN ('completed', 'success') AND ${p.started_at} >= ${e} AND ${p.started_at} < ${n} AND ${p.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${p.status} IN ('completed', 'success') AND ${p.started_at} >= ${e} AND ${p.started_at} < ${n}`,d=o.db.all(drizzleOrm.sql`
|
|
303
|
+
SELECT
|
|
304
|
+
${p.model} AS model,
|
|
305
|
+
${i} AS provider,
|
|
306
|
+
COUNT(*) AS total_tasks,
|
|
307
|
+
COALESCE(SUM(${s}), 0) AS input_tokens,
|
|
308
|
+
COALESCE(SUM(${p.output_tokens}), 0) AS output_tokens,
|
|
309
|
+
COALESCE(SUM(${p.cached_input_tokens}), 0) AS cached_input_tokens,
|
|
310
|
+
COALESCE(SUM(${p.cost_usd}), 0) AS cost_usd,
|
|
311
|
+
COALESCE(SUM(${p.duration_ms}), 0) AS active_duration_ms,
|
|
312
|
+
MAX(${p.completed_at}) AS last_active_at
|
|
313
|
+
FROM ${p}
|
|
314
|
+
${a}
|
|
315
|
+
GROUP BY ${p.model}, ${i}
|
|
316
|
+
`),c=new Map;for(let l of d){let f=_o(l.model??""),g=JSON.stringify([l.provider,f]),m=c.get(g);m?(m.totalTasks+=l.total_tasks,m.inputTokens+=l.input_tokens,m.outputTokens+=l.output_tokens,m.cachedInputTokens+=l.cached_input_tokens,m.costUsd+=l.cost_usd,m.totalTokens+=l.input_tokens+l.output_tokens,m.activeDurationMs+=l.active_duration_ms??0,l.last_active_at&&(!m.lastActiveAt||l.last_active_at>m.lastActiveAt)&&(m.lastActiveAt=l.last_active_at)):c.set(g,{model:f,provider:l.provider,totalTasks:l.total_tasks,inputTokens:l.input_tokens,outputTokens:l.output_tokens,cachedInputTokens:l.cached_input_tokens,costUsd:l.cost_usd,totalTokens:l.input_tokens+l.output_tokens,activeDurationMs:l.active_duration_ms??0,lastActiveAt:l.last_active_at??null});}return Array.from(c.values()).sort((l,f)=>f.costUsd-l.costUsd)}catch(i){throw new C("DB_ERROR","Failed to get model usage",i)}finally{o.close();}}getTasksForReport(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let i=r?drizzleOrm.sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${n} AND ${p.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${n}`;return o.db.all(drizzleOrm.sql`
|
|
317
|
+
SELECT
|
|
318
|
+
${p.thread_id} AS thread_id,
|
|
319
|
+
${p.agent_id} AS agent_id,
|
|
320
|
+
${p.started_at} AS started_at,
|
|
321
|
+
${p.status} AS status,
|
|
322
|
+
${p.error} AS error,
|
|
323
|
+
${p.exit_code} AS exit_code
|
|
324
|
+
FROM ${p}
|
|
325
|
+
${i}
|
|
326
|
+
ORDER BY ${p.started_at} ASC
|
|
327
|
+
`).map(a=>({threadId:a.thread_id,agentId:a.agent_id,startedAt:a.started_at,status:a.status,error:a.error,exitCode:a.exit_code}))}catch(i){throw new C("DB_ERROR","Failed to get tasks for report",i)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(p.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(drizzleOrm.inArray(p.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(drizzleOrm.inArray(p.status,e.statuses)),e.from&&r.push(drizzleOrm.gte(p.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(p.started_at,e.to));let o=r.length>0?drizzleOrm.and(...r):void 0,i=(e.order??"DESC")==="ASC"?drizzleOrm.asc(p.started_at):drizzleOrm.desc(p.started_at),s={id:p.id,agent_id:p.agent_id,status:p.status,prompt:p.prompt,started_at:p.started_at,completed_at:p.completed_at,thread_id:p.thread_id};return e.limit?n.db.select(s).from(p).where(o).orderBy(i).limit(e.limit).all():n.db.select(s).from(p).where(o).orderBy(i).all()}catch(r){throw new C("DB_ERROR","Failed to find task evidence",r)}finally{n.close();}}findThreadChains(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=e.maxThreads??8,o=e.maxTurnsPerThread??4,i=[drizzleOrm.isNotNull(p.thread_id),drizzleOrm.isNull(p.parent_task_id),drizzleOrm.isNull(p.caller_agent_id),drizzleOrm.or(drizzleOrm.isNull(p.platform),drizzleOrm.ne(p.platform,"workflow")),drizzleOrm.or(drizzleOrm.isNull(p.metadata),drizzleOrm.and(drizzleOrm.notLike(p.metadata,'%"kind":"workflow_card"%'),drizzleOrm.notLike(p.metadata,'%"kind":"workflow_ui_instance"%'))),drizzleOrm.or(drizzleOrm.isNull(p.metadata),drizzleOrm.notLike(p.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&i.push(drizzleOrm.eq(p.workspace_id,e.workspaceId)),e.from&&i.push(drizzleOrm.gte(p.started_at,e.from)),e.to&&i.push(drizzleOrm.lt(p.started_at,e.to));let s=n.db.select({id:p.id,agent_id:p.agent_id,status:p.status,prompt:p.prompt,started_at:p.started_at,completed_at:p.completed_at,thread_id:p.thread_id}).from(p).where(drizzleOrm.and(...i)).orderBy(drizzleOrm.asc(p.started_at),drizzleOrm.asc(p.id)).all(),a=new Map;for(let c of s){if(!c.thread_id)continue;let l={id:c.id,agentId:c.agent_id,status:c.status,prompt:c.prompt,startedAt:c.started_at,completedAt:c.completed_at},f=a.get(c.thread_id);f?f.push(l):a.set(c.thread_id,[l]);}let d=[];for(let[c,l]of a){let f=l.filter(g=>g.agentId===e.targetAgentId).length;f<2||d.push({threadId:c,targetAgentTurnCount:f,turns:l});}return d.sort((c,l)=>{let f=c.turns[c.turns.length-1].startedAt,g=l.turns[l.turns.length-1].startedAt;return f<g?1:f>g?-1:0}),d.slice(0,r).map(c=>({threadId:c.threadId,targetAgentTurnCount:c.targetAgentTurnCount,turns:c.turns.slice(-o)}))}catch(r){throw new C("DB_ERROR","Failed to find thread chains",r)}finally{n.close();}}};var Lp=new Set(["Read","Grep","Find","Glob"]),$p=["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"],Bp=[/\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/],jp=8e3,Fp=100,Hp=3,Wp=Number.MAX_SAFE_INTEGER;function qp(t){let e=t.toLowerCase();return e==="bash"||e==="terminal"?"Bash":e==="read"||e==="view"?"Read":e==="edit"||e==="apply_patch"?"Edit":e==="write"?"Write":e==="grep"||e==="rg"?"Grep":e==="glob"||e==="find"?"Find":t}function zp(t,e){if(Lp.has(t))return true;if(t!=="Bash"||!e)return false;let n=e.split(`
|
|
328
|
+
`)[0].trimStart();return Bp.some(r=>r.test(n))?false:$p.some(r=>n.startsWith(r))}function rn(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function Gp(t,e,n){if(t!=="Read"||!e)return "ok";let o=e.split(`
|
|
329
|
+
`).find(i=>i.trim()&&!i.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let i=Ua__namespace.statSync(o);if(n){let s=Date.parse(n);if(!Number.isNaN(s)&&i.mtimeMs>s)return "stale"}return "ok"}catch{return "unknown"}}function Vp(t){let e=new Set;for(let n of t)try{let r=JSON.parse(n);r.type&&e.add(r.type);}catch{}return e.has("turn.started")||e.has("thread.started")?"codex":e.has("assistant.message_delta")?"copilot":e.has("step_start")&&e.has("step_finish")?"opencode":e.has("system")&&e.has("result")?"claude":e.has("init")&&e.has("message")?"gemini":e.has("result")&&e.has("assistant")?"claude":null}function Jp(t){if(!Array.isArray(t))return [];let e=t,n=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),r=Vp(n),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(...bn("",a.message,r));let i=new Map,s=[];for(let a of o)if(a.type==="tool_use"){let d={tool:qp(a.toolName??""),input:a.toolInput??null,result:null,isError:false},c=a.toolUseId;if(c){if(i.has(c)){i.get(c).input=d.input;continue}i.set(c,d);}s.push(d);}else if(a.type==="tool_result"){if(a.toolUseId&&i.has(a.toolUseId)){let d=i.get(a.toolUseId);d.isError=a.isError===true,d.result=a.resultPreview??null;}else for(let d=s.length-1;d>=0;d--)if(s[d].result===null){s[d].isError=a.isError===true,s[d].result=a.resultPreview??null;break}}return s}function Kp(t,e){let n=Jp(t),r=[];for(let o of n){let i=o.tool==="Bash"?o.input?.split(`
|
|
330
|
+
`)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,s=zp(o.tool,o.input)&&!o.isError;r.push({tool:o.tool,cmd:i,result:o.result,status:Gp(o.tool,o.input,e),reusable:s});}return r}function La(t){let e=["<activity_log>"],{entries:n,omissions:r,tokenCap:o,totalEntries:i}=t,s=r.reduce((a,d)=>a+d.count,0);if(n.length===0&&s===0)e.push(" <!-- no activity found in previous tasks -->");else {if(e.push(" <!-- tool activity from previous tasks -->"),r.length>0){e.push(` <!-- activity_log_budget token_cap="${o}" included_entries="${n.length}" omitted_entries="${s}" total_entries="${i}" -->`);for(let a of r)e.push(` <!-- omitted_entries reason="${rn(a.reason)}" count="${a.count}": ${rn(a.message)} -->`);}for(let a of n){let d=a.entry,c=`tool="${rn(d.tool)}"`,l=d.cmd?` cmd="${rn(d.cmd)}"`:"",f="";if(d.reusable&&(f=d.status==="stale"?' reused="stale"':' reused="ok"'),d.reusable&&d.status==="stale")e.push(` <entry ${c}${l}${f}>\u26A0\uFE0F changed since \u2014 re-read</entry>`);else if(d.result){e.push(` <entry ${c}${l}${f}>`);let g=Br(d.result),m=Math.min(a.bodyCharsShown??g.length,g.length);g.length>m?e.push(rn(g.slice(0,m))+` \u2026 [truncated, ${m}/${g.length} chars shown]`):e.push(rn(g)),e.push(" </entry>");}else e.push(` <entry ${c}${l}${f} />`);}}return e.push("</activity_log>"),e}function Xp(t){return typeof t!="number"||!Number.isFinite(t)||t<0?jp:Math.floor(t)}function Yp(t,e,n){let r=Math.floor(e/Fp),o=Math.pow(2,t+r);return !Number.isFinite(o)||o<=0?0:Math.floor(n/o)}function Qp(t,e){let n=Math.pow(2,e+Hp);return !Number.isFinite(n)||n<=0?0:Math.floor(t/n)}function $a(t,e,n,r){let o=t.result?.length??null,i=o===null?null:Math.min(o,Math.max(0,n));return {entry:t,newestIndex:e,bodyLimitChars:n,bodyCharsShown:o===null?null:Math.max(0,Math.min(r??i??0,i??0)),originalBodyChars:o}}function Ba(t,e){let n=[];return t>0&&n.push({reason:"token_cap",count:t,message:"older entries omitted after the per-task token cap was reached"}),e>0&&n.push({reason:"repository_limit",count:e,message:"older entries omitted by the explicit repository safety limit before budgeting"}),n}function ja(t){let e=Ba(t.omittedByTokenCap,t.repositoryLimitOmitted);return La({entries:t.entries,omissions:e,tokenCap:t.tokenCap,totalEntries:t.totalEntries}).join(`
|
|
331
|
+
`)}function _i(t,e){let n=t(e);return !Number.isFinite(n)||n<0?0:Math.floor(n)}function Zp(t){let{entry:e,bodyLimitChars:n}=t;if(!e.result)return null;let r=Math.min(e.result.length,Math.max(0,n));for(let o=r;o>=0;o--){let i=$a(e,t.newestIndex,n,o),s=[...t.selectedEntries,i],a=t.totalEntries-s.length-t.repositoryLimitOmitted,d=ja({entries:s,tokenCap:t.tokenCap,totalEntries:t.totalEntries,omittedByTokenCap:a,repositoryLimitOmitted:t.repositoryLimitOmitted});if(_i(t.countTokens,d)<=t.tokenCap)return i}return null}function ef(t){let e=t.repositoryEntryLimit,n=typeof e=="number"&&Number.isFinite(e)&&e>=0&&t.entries.length>e,r=n?t.entries.length-Math.floor(e):0,i=[...n?t.entries.slice(r):t.entries].reverse(),s=[],a=t.entries.length;for(let g=0;g<i.length;g++){let m=i[g],k=Yp(t.taskDistance,g,t.baseEntryChars),h=$a(m,g,k),v=[...s,h],w=a-v.length-r,_=ja({entries:v,tokenCap:t.tokenCap,totalEntries:a,omittedByTokenCap:w,repositoryLimitOmitted:r});if(_i(t.countTokens,_)<=t.tokenCap){s.push(h);continue}let b=Zp({selectedEntries:s,entry:m,newestIndex:g,bodyLimitChars:k,tokenCap:t.tokenCap,totalEntries:a,repositoryLimitOmitted:r,countTokens:t.countTokens});b&&s.push(b);break}let d=a-s.length-r,c=Ba(d,r),l=La({entries:s,omissions:c,tokenCap:t.tokenCap,totalEntries:a}).join(`
|
|
332
|
+
`),f=_i(t.countTokens,l);return {taskId:t.taskId,taskDistance:t.taskDistance,tokenCap:t.tokenCap,tokenCount:f,includedEntries:s.length,omittedEntries:c.reduce((g,m)=>g+m.count,0),totalEntries:a,omissions:c,entries:s,activityLog:l}}function wi(t){return {threadId:t.threadId,agentId:t.agentId,lookback:t.lookback,activityLogTokenBudget:t.activityLogTokenBudget,baseEntryChars:t.baseEntryChars,tasks:[],activityLogByTask:new Map}}function tf(t){return !Number.isFinite(t)||t<0?0:Math.floor(t)}function nf(t){return t.length}function ki(t){let e=Xp(t.maxEntryChars),n=tf(t.activityLogTokenBudget),r=Math.max(0,Math.floor(t.lookback));if(!r||!t.threadId||!t.agentId)return wi({threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e});let o;try{o=new nn().findTasksByThread(t.threadId).filter(c=>!c.parent_task_id&&c.agent_id===t.agentId).sort((c,l)=>l.started_at>c.started_at?1:-1).slice(0,r);}catch{return wi({threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e})}if(!o.length)return wi({threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e});let i=[];for(let d of o){let c=[];try{let l=JSON.parse(d.logs??"[]");Array.isArray(l)&&(c=l);}catch{}i.push({taskId:d.id,entries:Kp(c,d.completed_at)});}let s=[],a=new Map;for(let d=0;d<i.length;d++){let{taskId:c,entries:l}=i[d];if(l.length===0)continue;let f=ef({taskId:c,entries:l,taskDistance:d,baseEntryChars:e,tokenCap:Qp(n,d),countTokens:t.countTokens,repositoryEntryLimit:t.repositoryEntryLimit});s.push(f),a.set(c,f.activityLog);}return {threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e,tasks:s,activityLogByTask:a}}function Fa(t){if(t.activityLogTokenBudget!==void 0&&!t.countTokens)throw new Error("countTokens is required when activityLogTokenBudget is supplied");return ki({threadId:t.threadId,agentId:t.agentId,lookback:t.lookback,maxEntryChars:t.maxEntryChars,activityLogTokenBudget:t.activityLogTokenBudget??Wp,countTokens:t.countTokens??nf,repositoryEntryLimit:t.repositoryEntryLimit}).activityLogByTask}u();u();var of={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")},sf={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 Ha(t,e,n){t.tool("crewx_listAgents","List available CrewX agents exposed by this server",async()=>{let r=[];for(let o of n){let i=e.agents.get(o);i&&r.push({id:i.id,name:i.name??i.id,description:i.description??""});}return {content:[{type:"text",text:JSON.stringify(r,null,2)}]}}),t.tool("crewx_queryAgent","Query a CrewX agent with a read-only question",of,async({agentId:r,query:o,context:i,thread:s})=>{if(!n.has(r))return {content:[{type:"text",text:`Agent '${r}' is not exposed by this server`}],isError:true};let a=await e.query(r,o,{context:i,threadId:s});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Query failed"}],isError:true}}),t.tool("crewx_executeAgent","Execute a task on a CrewX agent (may modify state)",sf,async({agentId:r,task:o,context:i,thread:s})=>{if(!n.has(r))return {content:[{type:"text",text:`Agent '${r}' is not exposed by this server`}],isError:true};let a=await e.execute(r,o,{context:i,threadId:s});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Execute failed"}],isError:true}});}u();function Wa(t){return t.headers.get("Origin")?null:new Response(JSON.stringify({error:"Forbidden: Origin header required"}),{status:403,headers:{"Content-Type":"application/json"}})}async function qa(t,e){return e?await e(t)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function cf(t,e){let n=new mcp_js.McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return Ha(n,t,e),n}function vi(t,e){if(!e.agents||e.agents.length===0)throw new Error("crewx.handler() requires at least one agent in the agents option");let n=new Set(e.agents),r=new Map;return async o=>{let i=Wa(o);if(i)return i;let s=await qa(o,e.auth);if(s)return s;let a=o.headers.get("mcp-session-id");if(a&&r.has(a))return r.get(a).transport.handleRequest(o);let d=cf(t,n),c=new webStandardStreamableHttp_js.WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:l=>{r.set(l,{transport:c,server:d});},onsessionclosed:l=>{r.delete(l);},enableJsonResponse:true});return await d.connect(c),c.handleRequest(o)}}u();function Ei(t){let e=K__namespace.resolve(t);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(n,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function Jr(t){let e=Ei(t);return crypto$1.createHash("sha256").update(e).digest("hex")}u();u();function zn(t){let n=t.renderer!==void 0||t.surfaces!==void 0||t.stateProjection!==void 0||Object.values(t.actions).some(o=>o.resultProjection!==void 0)?{id:t.id,version:t.version,renderer:t.renderer,surfaces:t.surfaces,stateProjection:t.stateProjection,actions:t.actions}:{id:t.id,version:t.version,actions:t.actions},r=oe(n);return crypto$1.createHash("sha256").update(_a(r)).digest("hex")}function xi(t){return `${t.id}\0${t.version}`}function Va(t){if(!/^\d+$/.test(String(t.version))||t.version<1||t.id.length<1||t.id.length>128)throw new x("DEFINITION_UNSUPPORTED","UI definition is invalid");if(!/^[0-9a-f]{64}$/.test(t.hash)||zn(t)!==t.hash)throw new x("DEFINITION_UNSUPPORTED","UI definition hash is invalid");for(let[e,n]of Object.entries(t.actions)){if(!e||!Array.isArray(n.capabilities)||n.capabilities.some(r=>!pf(r)))throw new x("DEFINITION_UNSUPPORTED","UI action declaration is invalid");if(n.inputKeys&&(!Array.isArray(n.inputKeys)||n.inputKeys.some(r=>typeof r!="string"||!r)))throw new x("DEFINITION_UNSUPPORTED","UI action input declaration is invalid");n.resultProjection&&Ga(n.resultProjection);}if(t.renderer!==void 0&&(!t.renderer||t.renderer.length>128))throw new x("DEFINITION_UNSUPPORTED","UI definition renderer is invalid");if(t.surfaces&&(!Array.isArray(t.surfaces)||t.surfaces.some(e=>!e||e.length>64)))throw new x("DEFINITION_UNSUPPORTED","UI definition surfaces are invalid");t.stateProjection&&Ga(t.stateProjection);}function Ga(t){if(!Array.isArray(t.allow)||t.allow.some(e=>!/^[A-Za-z0-9_]+(?:\.[A-Za-z0-9_]+)*$/.test(e)))throw new x("DEFINITION_UNSUPPORTED","UI projection policy is invalid")}function pf(t){return t.length>0&&t.length<=128&&t!=="*"&&t!=="all"&&!/[/*]/.test(t)}u();function Kr(t,e,n){let r=new Set(e),o=n===void 0?void 0:new Set(n);return t.filter(i=>r.has(i)&&(o===void 0||o.has(i)))}u();u();function bi(){if(process.env.CREWX_HOME)try{return Ua__namespace.realpathSync(process.env.CREWX_HOME)}catch{return K__namespace.join(Ri__namespace.homedir(),".crewx")}return process.platform!=="win32"&&process.env.XDG_CONFIG_HOME?K__namespace.join(process.env.XDG_CONFIG_HOME,"crewx"):K__namespace.join(Ri__namespace.homedir(),".crewx")}u();u();u();u();u();var Yr=class extends le{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 n=this.resolveDbPath();if(e){let o=K.dirname(n);Ua.existsSync(o)||Ua.mkdirSync(o,{recursive:true});}else if(!Ua.existsSync(n))throw new C("NOT_FOUND","Database not found");let r=Q(n);if(e)try{he(r.db,n);}catch(o){throw r.close(),o}return r}insertSpan(e){let n=this.openHandle(true);try{n.db.insert(mt).values(e).run();}catch(r){throw r instanceof C?r:new C("DB_ERROR","Failed to insert span",r)}finally{n.close();}}findByTaskId(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select().from(mt).where(drizzleOrm.eq(mt.task_id,e)).all()}catch(r){throw new C("DB_ERROR","Failed to find spans by task id",r)}finally{n.close();}}findById(e){if(!this.dbExists())return;let n=this.openHandle(false);try{return n.db.select().from(mt).where(drizzleOrm.eq(mt.id,e)).limit(1).get()??void 0}catch(r){throw new C("DB_ERROR","Failed to find span by id",r)}finally{n.close();}}};u();u();u();u();u();u();u();function _f(){return process.env.CREWX_DB??K.join(bi(),"crewx.db")}function Zr(t){let e=JSON.parse(t);return oe(e)}function kf(t){let e=JSON.parse(t);if(e.kind!=="local"&&e.kind!=="authenticated"||typeof e.id!="string")throw new x("EXECUTION_FAILED","Stored actor is invalid");return {kind:e.kind,id:e.id}}function Gn(t){let e=t.status;if(!["active","completed","expired","revoked","unsupported"].includes(e))throw new x("EXECUTION_FAILED","Stored UI instance status is invalid");let n=JSON.parse(t.granted_capabilities_json);if(!Array.isArray(n)||n.some(r=>typeof r!="string"))throw new x("EXECUTION_FAILED","Stored UI capability grant is invalid");return {id:t.id,definition:{id:t.definition_id,version:t.definition_version,hash:t.definition_hash},workspaceId:t.workspace_id,threadId:t.thread_id,anchorTaskId:t.anchor_task_id,domainRef:Zr(t.domain_ref_json),state:Zr(t.state_json),revision:t.revision,status:e,grantedCapabilities:n,createdAt:t.created_at,updatedAt:t.updated_at}}function Vn(t){return {id:t.id,instanceId:t.instance_id,requestId:t.request_id,actionId:t.action_id,actor:kf(t.actor_json),source:t.source,expectedRevision:t.expected_revision,beforeRevision:t.before_revision,afterRevision:t.after_revision,status:t.status,outcome:t.outcome,input:Zr(t.input_json),result:t.result_json===null?null:Zr(t.result_json),errorCode:t.error_code,requestedAt:t.requested_at,settledAt:t.settled_at}}function Jn(t,e){return t.get(drizzleOrm.sql`SELECT * FROM ui_instances WHERE id = ${e}`)}function Kn(t,e,n){return t.get(drizzleOrm.sql`SELECT * FROM ui_action_receipts WHERE instance_id = ${e} AND request_id = ${n}`)}function Qr(t){let e=t,n;for(let r=0;e&&r<4;r+=1){if(typeof e.code=="string"){n=e.code;break}e=e.cause;}return n==="SQLITE_BUSY"||n==="SQLITE_BUSY_SNAPSHOT"||n==="SQLITE_CONSTRAINT_UNIQUE"||n==="SQLITE_CONSTRAINT_PRIMARYKEY"}function vf(t){throw Qr(t)?new ve(t):new x("EXECUTION_FAILED","UI instance database operation failed")}var eo=class{handle;db;testHooks;constructor(e=_f(),n){Ua.mkdirSync(K.dirname(e),{recursive:true}),this.handle=Q(e),this.db=this.handle.db,this.testHooks=n,he(this.db,e);}close(){this.handle.close();}create(e){let n=me(e.domainRef),r=me(e.state),o=me([...e.grants]);try{this.db.run(drizzleOrm.sql`
|
|
333
|
+
INSERT INTO ui_instances (
|
|
334
|
+
id, definition_id, definition_version, definition_hash, workspace_id, thread_id,
|
|
335
|
+
anchor_task_id, domain_ref_json, state_json, revision, status,
|
|
336
|
+
granted_capabilities_json, created_at, updated_at
|
|
337
|
+
) VALUES (
|
|
338
|
+
${e.id}, ${e.definitionId}, ${e.definitionVersion}, ${e.definitionHash},
|
|
339
|
+
${e.workspaceId}, ${e.threadId}, ${e.anchorTaskId}, ${n},
|
|
340
|
+
${r}, 0, 'active', ${o}, ${e.now}, ${e.now}
|
|
341
|
+
)
|
|
342
|
+
`);}catch(s){vf(s);}let i=Jn(this.db,e.id);if(!i)throw new x("EXECUTION_FAILED","Created UI instance could not be read");return Gn(i)}get(e){let n=Jn(this.db,e);return n?Gn(n):null}getReceipt(e,n){let r=Kn(this.db,e,n);return r?Vn(r):null}runStateOnly(e,n){try{return this.db.transaction(r=>{let o=this.testHooks?.injectDatabaseError?.();if(o!==void 0)throw o;let i=Jn(r,e.instanceId);if(!i)throw new x("INSTANCE_NOT_FOUND","UI instance was not found");let s=e.expectedRevision+1,a=Ya();if(r.run(drizzleOrm.sql`
|
|
343
|
+
INSERT INTO ui_action_receipts (
|
|
344
|
+
id, instance_id, request_id, action_id, actor_json, source,
|
|
345
|
+
expected_revision, before_revision, after_revision, status, outcome,
|
|
346
|
+
input_json, result_json, error_code, requested_at, settled_at
|
|
347
|
+
) VALUES (
|
|
348
|
+
${a}, ${e.instanceId}, ${e.requestId}, ${e.actionId},
|
|
349
|
+
${me(oe(e.actor))}, ${e.source},
|
|
350
|
+
${e.expectedRevision}, ${i.revision}, NULL, 'requested', NULL,
|
|
351
|
+
${me(e.input)}, NULL, NULL, ${e.now}, NULL
|
|
352
|
+
)
|
|
353
|
+
`),i.revision!==e.expectedRevision)throw new Ae(i.revision);if(this.testHooks?.bumpRevisionBeforeCas&&r.run(drizzleOrm.sql`UPDATE ui_instances SET revision = revision + 1 WHERE id = ${e.instanceId}`),r.run(drizzleOrm.sql`
|
|
354
|
+
UPDATE ui_instances
|
|
355
|
+
SET revision = revision + 1, updated_at = ${Math.max(e.now,i.updated_at)}
|
|
356
|
+
WHERE id = ${e.instanceId} AND revision = ${e.expectedRevision} AND status = 'active'
|
|
357
|
+
`).changes!==1)throw new Ae(i.revision);let c={instance:{...Gn(i),revision:s},actor:e.actor,source:e.source,input:e.input,requestId:e.requestId},l=n(c);if(l&&typeof l.then=="function")throw new x("EXECUTION_FAILED","State-only handler must be synchronous");let f=l??{},g="outcome"in f?f.outcome:"succeeded",m="errorCode"in f?Ef(f.errorCode):null,k=f.state?oe(f.state):Gn(i).state,h=f.result?me(oe(f.result)):null,v=Math.max(e.now,i.updated_at);r.run(drizzleOrm.sql`UPDATE ui_instances SET state_json = ${me(k)}, updated_at = ${v} WHERE id = ${e.instanceId} AND revision = ${s}`),r.run(drizzleOrm.sql`
|
|
358
|
+
UPDATE ui_action_receipts
|
|
359
|
+
SET status = 'settled', outcome = ${g}, after_revision = ${s},
|
|
360
|
+
result_json = ${h}, error_code = ${m}, settled_at = ${Math.max(e.now,i.updated_at)}
|
|
361
|
+
WHERE id = ${a} AND status = 'requested'
|
|
362
|
+
`);let w=Kn(r,e.instanceId,e.requestId);if(!w)throw new x("EXECUTION_FAILED","Action receipt settlement failed");return Vn(w)})}catch(r){throw r instanceof Ae||r instanceof ve||r instanceof x?r:Qr(r)?new ve(r):new x("EXECUTION_FAILED","UI state action failed")}}reserveExternal(e){try{return this.db.transaction(n=>{let r=this.testHooks?.injectDatabaseError?.();if(r!==void 0)throw r;let o=Jn(n,e.instanceId);if(!o)throw new x("INSTANCE_NOT_FOUND","UI instance was not found");let i=e.expectedRevision+1,s=Ya();if(n.run(drizzleOrm.sql`
|
|
363
|
+
INSERT INTO ui_action_receipts (
|
|
364
|
+
id, instance_id, request_id, action_id, actor_json, source,
|
|
365
|
+
expected_revision, before_revision, after_revision, status, outcome,
|
|
366
|
+
input_json, result_json, error_code, requested_at, settled_at
|
|
367
|
+
) VALUES (
|
|
368
|
+
${s}, ${e.instanceId}, ${e.requestId}, ${e.actionId},
|
|
369
|
+
${me(oe(e.actor))}, ${e.source},
|
|
370
|
+
${e.expectedRevision}, ${o.revision}, NULL, 'requested', NULL,
|
|
371
|
+
${me(e.input)}, NULL, NULL, ${e.now}, NULL
|
|
372
|
+
)
|
|
373
|
+
`),o.revision!==e.expectedRevision)throw new Ae(o.revision);if(this.testHooks?.bumpRevisionBeforeCas&&n.run(drizzleOrm.sql`UPDATE ui_instances SET revision = revision + 1 WHERE id = ${e.instanceId}`),n.run(drizzleOrm.sql`
|
|
374
|
+
UPDATE ui_instances
|
|
375
|
+
SET revision = revision + 1, updated_at = ${Math.max(e.now,o.updated_at)}
|
|
376
|
+
WHERE id = ${e.instanceId} AND revision = ${e.expectedRevision} AND status = 'active'
|
|
377
|
+
`).changes!==1)throw new Ae(o.revision);let d=Kn(n,e.instanceId,e.requestId);if(!d)throw new x("EXECUTION_FAILED","Requested receipt could not be read");return {instance:{...Gn(o),revision:i},receipt:Vn(d),reservedRevision:i}})}catch(n){throw n instanceof Ae||n instanceof ve||n instanceof x?n:Qr(n)?new ve(n):new x("EXECUTION_FAILED","UI external action reservation failed")}}settleExternal(e){try{return this.db.transaction(n=>{let r=Jn(n,e.reservation.instanceId),o=Kn(n,e.reservation.instanceId,e.reservation.requestId);if(!r||!o)throw new x("EXECUTION_FAILED","Requested action receipt is missing");if(o.status==="settled")return Vn(o);let i=oe(e.state),s=e.result===null?null:me(oe(e.result)),a=Math.max(e.now,o.requested_at,r.updated_at);n.run(drizzleOrm.sql`
|
|
378
|
+
UPDATE ui_instances SET state_json = ${me(i)}, updated_at = ${a}
|
|
379
|
+
WHERE id = ${e.reservation.instanceId} AND revision = ${e.reservedRevision}
|
|
380
|
+
`).changes!==1?n.run(drizzleOrm.sql`
|
|
381
|
+
UPDATE ui_action_receipts
|
|
382
|
+
SET status = 'settled', outcome = 'conflicted', after_revision = ${e.reservedRevision},
|
|
383
|
+
result_json = NULL, error_code = 'REVISION_CONFLICT', settled_at = ${a}
|
|
384
|
+
WHERE id = ${o.id} AND status = 'requested'
|
|
385
|
+
`):n.run(drizzleOrm.sql`
|
|
386
|
+
UPDATE ui_action_receipts
|
|
387
|
+
SET status = 'settled', outcome = ${e.outcome}, after_revision = ${e.reservedRevision},
|
|
388
|
+
result_json = ${s}, error_code = ${e.errorCode}, settled_at = ${a}
|
|
389
|
+
WHERE id = ${o.id} AND status = 'requested'
|
|
390
|
+
`);let c=Kn(n,e.reservation.instanceId,e.reservation.requestId);if(!c)throw new x("EXECUTION_FAILED","External action settlement failed");return Vn(c)})}catch(n){throw n instanceof ve||n instanceof x?n:Qr(n)?new ve(n):new x("EXECUTION_FAILED","UI external action settlement failed")}}};function Ya(){return `uicr_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,12)}`}function Ef(t){return typeof t=="string"&&/^[A-Z][A-Z0-9_]{0,63}$/.test(t)?t:"EXECUTION_FAILED"}var xf=new Set(["definition","workspaceId","threadId","anchorTaskId","domainRef","state"]),Rf=new Set(["definition","workspaceId","threadId","domainRef","state"]),bf=new Set(["instanceId","actionId","expectedRevision","requestId","input"]),ed=new Set(["source","workspaceId","actor"]),Qa=new Set(["source","workspaceId","threadId","actor"]),Tf=ed,Ti=4;function td(t,e){return new to(t,e)}function nd(t){return new to(t.workspaceId,t,void 0,true)}var to=class{store;workspaceId;localActor;policy;serverPolicy;serverMode;definitions=new Map;handlers=new Map;clock;testHooks;constructor(e,n,r,o=false){if(this.serverMode=o,!e)throw new x("INPUT_INVALID","UI runtime workspace is invalid");if(o){let i=n;if(!i.dbPath||!i.grantPolicy)throw new x("INPUT_INVALID","Authenticated UI runtime options are invalid");this.serverPolicy=i.grantPolicy;}else {let i=n;if(i.localActor.kind!=="local"||!i.localActor.id)throw new x("INPUT_INVALID","Local UI runtime identity is invalid");this.localActor=i.localActor,this.policy=i.localGrantPolicy;}this.workspaceId=e,this.clock=n.clock??(()=>Date.now()),this.testHooks=r;for(let i of n.definitions??[]){Va(i);let s=xi(i);if(this.definitions.has(s))throw new x("DEFINITION_UNSUPPORTED","Duplicate UI definition");this.definitions.set(s,i);}for(let i of n.handlers??[]){if(!i.definitionId||!i.actionId||i.version<1)throw new x("INPUT_INVALID","UI handler registration is invalid");let s=Za(i.definitionId,i.version,i.actionId);if(this.handlers.has(s))throw new x("INPUT_INVALID","Duplicate UI handler registration");this.handlers.set(s,i);}this.store=Af(n.dbPath,r);}close(){this.store.close();}async createInstance(e,n){if(Ai(e,xf,Rf),this.serverMode){if(!n)throw new x("UNAUTHENTICATED","Authenticated UI context is required");if(this.validateServerContext(n),e.workspaceId!==n.workspaceId||e.threadId!==n.threadId)throw new x("WORKSPACE_MISMATCH","UI instance scope does not match authenticated context")}else if(e.workspaceId!==this.workspaceId)throw new x("WORKSPACE_MISMATCH","Workspace does not match this runtime");if(!e.threadId||e.threadId.length>256||e.anchorTaskId!==void 0&&e.anchorTaskId.length>256)throw new x("INPUT_INVALID","UI instance scope is invalid");let r=this.requireDefinition(e.definition),o=oe(e.domainRef),i=oe(e.state),s=this.resolveInstanceGrants(r,n),a=this.now();return this.store.create({id:If(),definitionId:r.id,definitionVersion:r.version,definitionHash:r.hash,workspaceId:e.workspaceId,threadId:e.threadId,anchorTaskId:e.anchorTaskId??null,domainRef:o,state:i,grants:s,now:a})}async dispatchAction(e,n){Ai(e,bf),Ai(n,this.serverMode?Qa:ed,this.serverMode?Qa:Tf),this.validateContext(n);let r={...e,input:this.validateEnvelope(e)},o=this.store.get(r.instanceId);if(!o)throw new x("INSTANCE_NOT_FOUND","UI instance was not found");if(o.workspaceId!==this.workspaceId||n.workspaceId!==o.workspaceId||this.serverMode&&o.threadId!==n.threadId)throw new x("WORKSPACE_MISMATCH","Workspace does not match the UI instance");if(o.status!=="active")throw new x("INSTANCE_NOT_ACTIONABLE","UI instance is not actionable");let i=this.requireDefinition(o.definition),s=i.actions[r.actionId];if(!s)throw new x("ACTION_UNAVAILABLE","UI action is not declared");if(this.validateActionDeclaration(i,r.actionId,s.inputKeys,r.input),this.resolveEffectiveCapabilities(i,r.actionId,s.capabilities,o.grantedCapabilities,n).length===0)throw new x("CAPABILITY_DENIED","UI action capability is not granted");let d=this.handlers.get(Za(i.id,i.version,r.actionId));if(!d)throw new x("HANDLER_NOT_FOUND","UI action handler is not registered");let c=this.store.getReceipt(r.instanceId,r.requestId);if(c)return c;if(o.revision!==r.expectedRevision)throw new x("REVISION_CONFLICT","UI instance revision is stale",o.revision);await this.testHooks?.beforeReservation?.();let l={instanceId:r.instanceId,requestId:r.requestId,actionId:r.actionId,actor:n.actor,source:n.source,expectedRevision:r.expectedRevision,input:r.input,now:this.now()};return d.kind==="state"?this.dispatchStateWithRetry(l,d):this.dispatchExternalWithRetry(l,d)}async getInstance(e,n){if(!this.serverMode)throw new x("UNAUTHENTICATED","Authenticated UI context is not available in local runtime");if(this.validateServerContext(n),!e)throw new x("INPUT_INVALID","UI instance lookup identity is invalid");let r=this.store.get(e);return !r||r.workspaceId!==n.workspaceId||r.threadId!==n.threadId?null:r}async getReceipt(e,n,r){if(!e||!n)throw new x("INPUT_INVALID","Receipt lookup identity is invalid");let o=this.store.get(e);if(this.serverMode){if(!r)throw new x("UNAUTHENTICATED","Authenticated UI context is required");if(this.validateServerContext(r),!o||o.workspaceId!==r.workspaceId||o.threadId!==r.threadId)return null}else if(!o||o.workspaceId!==this.workspaceId)return null;return this.store.getReceipt(e,n)}async dispatchStateWithRetry(e,n){for(let o=0;o<Ti;o+=1)try{return this.store.runStateOnly(e,n.handle)}catch(i){if(i instanceof Ae){let a=this.store.getReceipt(e.instanceId,e.requestId);if(a)return a;throw new x("REVISION_CONFLICT","UI instance revision is stale",i.currentRevision)}if(!(i instanceof ve))throw i;let s=this.store.getReceipt(e.instanceId,e.requestId);if(s)return s;await Ii(o);}let r=this.store.getReceipt(e.instanceId,e.requestId);if(r)return r;throw new x("ACTION_IN_FLIGHT","UI action is still being committed")}async dispatchExternalWithRetry(e,n){let r;for(let l=0;l<Ti;l+=1)try{r=this.store.reserveExternal(e);break}catch(f){if(f instanceof Ae){let m=this.store.getReceipt(e.instanceId,e.requestId);if(m)return m;throw new x("REVISION_CONFLICT","UI instance revision is stale",f.currentRevision)}if(!(f instanceof ve))throw f;let g=this.store.getReceipt(e.instanceId,e.requestId);if(g)return g;await Ii(l);}if(!r){let l=this.store.getReceipt(e.instanceId,e.requestId);if(l)return l;throw new x("ACTION_IN_FLIGHT","UI action is still being committed")}let o;try{o=await n.handle({instance:r.instance,actor:e.actor,source:e.source,input:e.input,requestId:e.requestId});}catch{o={outcome:"failed",errorCode:"EXECUTION_FAILED"};}let i="outcome"in o?o.outcome:"succeeded",s="errorCode"in o?Pf(o.errorCode):null,a=r.instance.state,d=null;try{o.state&&(a=oe(o.state)),o.result&&(d=oe(o.result));}catch{a=r.instance.state,d=null;}for(let l=0;l<Ti;l+=1)try{return this.store.settleExternal({reservation:e,reservedRevision:r.reservedRevision,outcome:i,state:a,result:d,errorCode:s,now:this.now()})}catch(f){if(!(f instanceof ve))throw f;await Ii(l);}let c=this.store.getReceipt(e.instanceId,e.requestId);if(c)return c;throw new x("ACTION_IN_FLIGHT","UI action settlement is still being committed")}resolveDefinition(e){let n=this.definitions.get(xi(e));return !n||n.hash!==e.hash||zn(n)!==n.hash?null:n}requireDefinition(e){let n=this.resolveDefinition(e);if(!n)throw new x("DEFINITION_UNSUPPORTED","Pinned UI definition is unavailable");return n}resolveInstanceGrants(e,n){if(this.serverMode){if(!n||!this.serverPolicy)throw new x("UNAUTHENTICATED","Authenticated grant policy is unavailable");try{let r=this.serverPolicy.resolveInstanceGrants({definition:e,workspaceId:n.workspaceId,actor:n.actor});if(!Array.isArray(r)||r.some(o=>typeof o!="string"||!o||o==="*"||o==="all"||/[/*]/.test(o)))throw new Error("invalid grant");return [...new Set(r)]}catch{throw new x("CAPABILITY_DENIED","Authenticated capability grant was denied")}}if(!this.policy||!this.localActor)return [];try{let r=this.policy.resolveInstanceGrants({definition:e,workspaceId:this.workspaceId,actor:this.localActor});if(!Array.isArray(r)||r.some(o=>typeof o!="string"||!o||o==="*"||o==="all"||/[/*]/.test(o)))throw new Error("invalid grant");return [...new Set(r)]}catch{throw new x("INPUT_INVALID","Local capability policy returned an invalid grant")}}resolveEffectiveCapabilities(e,n,r,o,i){if(this.policy)try{let a=this.policy.resolveActionCapabilities({definition:e,actionId:n});if(!Cf(a,r))throw new Error("definition capability mismatch")}catch{throw new x("DEFINITION_UNSUPPORTED","UI action capability declaration is unavailable")}let s;if(this.serverMode&&this.serverPolicy?.resolveDispatchCapabilities)try{if(s=this.serverPolicy.resolveDispatchCapabilities({definition:e,actionId:n,actor:i.actor,source:i.source}),!Array.isArray(s)||s.some(a=>typeof a!="string"||!a||a==="*"||a==="all"||/[/*]/.test(a)))throw new Error("invalid dispatch grant")}catch{throw new x("CAPABILITY_DENIED","Authenticated dispatch capability was denied")}return [...Kr(r,o,s)]}validateContext(e){if(this.serverMode){this.validateServerContext(e);return}if(!this.localActor||e.source!=="cli"||e.workspaceId!==this.workspaceId||e.actor.kind!=="local"||e.actor.id!==this.localActor.id)throw new x("UNAUTHENTICATED","CLI local execution context is invalid")}validateServerContext(e){if(e.source!=="system"&&e.source!=="ui_host")throw new x("UNAUTHENTICATED","Authenticated UI source is invalid");if(e.workspaceId!==this.workspaceId||!e.threadId||e.actor.kind!=="authenticated"||!e.actor.id)throw new x("UNAUTHENTICATED","Authenticated UI context is invalid")}validateEnvelope(e){if(!e.instanceId||e.instanceId.length>128||!e.actionId||e.actionId.length>128||!e.requestId||Bn(e.requestId)>128||!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)throw new x("INPUT_INVALID","UI action envelope is invalid");let n=oe(e.input),r=me(n);if(Bn(r)>64*1024)throw new x("INPUT_INVALID","UI action input is too large");return n}validateActionDeclaration(e,n,r,o){if(r&&Object.keys(o).some(i=>!r.includes(i)))throw new x("INPUT_INVALID","UI action input is invalid")}now(){let e=this.clock();if(!Number.isFinite(e))throw new x("EXECUTION_FAILED","UI runtime clock is invalid");return Math.max(0,Math.floor(e))}};function Af(t,e){return new eo(t,{injectDatabaseError:e?.injectDatabaseError,bumpRevisionBeforeCas:e?.bumpRevisionBeforeCas})}function Ai(t,e,n=e){if(t===null||typeof t!="object")throw new x("INPUT_INVALID","UI contract input is invalid");for(let r of Object.keys(t))if(!e.has(r))throw new x("INPUT_INVALID","Unknown UI contract field");for(let r of n)if(!Object.prototype.hasOwnProperty.call(t,r))throw new x("INPUT_INVALID","Missing UI contract field")}function Za(t,e,n){return `${t}\0${e}\0${n}`}function If(){return `uic_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,12)}`}function Pf(t){return typeof t=="string"&&/^[A-Z][A-Z0-9_]{0,63}$/.test(t)?t:"EXECUTION_FAILED"}function Cf(t,e){return t.length===e.length&&t.every(n=>e.includes(n))}async function Ii(t){await new Promise(e=>setTimeout(e,Math.min(8,1<<t)));}Re();function _d(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)?t:void 0}function ng(t){return t.slice(t.lastIndexOf("/")+1)}var rg=new Set(["tools","effort","mode","provider","model","profiles","overdrive"]);function og(t){if(!t)return;let n=Object.entries(t).filter(([,r])=>r!=null&&typeof r!="object"&&typeof r!="function").filter(([r])=>!rg.has(r));if(n.length!==0)return Object.fromEntries(n.map(([r,o])=>[r,String(o)]))}function kd(t,e,n){let r=_d(t);if(!r)return {};let o=ng(e),i=!n.active&&o==="grok"?In(r):r,s=n.active?n.providerOptions:_d(i[o]);return {modeOptions:i,providerOptions:s,configOptions:og(i)}}function ig(t){return t?t.settings?.template?.exec:void 0}function sg(){try{let t=new Uint8Array(8);return globalThis.crypto.getRandomValues(t),Array.from(t,e=>e.toString(16).padStart(2,"0")).join("")}catch{let{randomBytes:t}=ge("crypto");return t(8).toString("hex")}}var qi=class t extends Mn{_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,n={},r,o,i){super(),this._agents=new Map(e.map(d=>[d.id,d])),this._config=r,this._projectRoot=i??(typeof process<"u"?process.cwd():"/");let s=i??(typeof process<"u"?process.env.CREWX_WORKSPACE??process.cwd():"/");this._workspaceId=Jr(s),this._workspaceName=K.basename(s);let a=ig(r);this._templateEngine=new Cn({execPolicy:n.execPolicy??a}),this._documentLoader=o??new Ut,this._layoutLoader=new Sn({templatesPath:Gt()}),this._layoutRenderer=new Dn,this._remoteFactory=n.remoteFactory,this._additionalArgsProvider=n.additionalArgsProvider;}async resolveFileRemoteTarget(e){let n=this.getAgent(e),r=Array.isArray(n?.provider)?n?.provider[0]:n?.provider;if(!r?.startsWith("remote/"))return null;let o=r.slice(7),i=this.getRemoteProviderConfig(o);if(!i?.location?.startsWith("file://"))return null;let s=K.resolve(i.location.replace("file://","")),a=i.external_agent_id??e.replace(/^@/,""),d=this._remoteTargets.get(s);d||(d=(this._remoteFactory??(m=>t.loadYaml(m)))(s),this._remoteTargets.set(s,d),d.catch(()=>this._remoteTargets.delete(s)));let c=await d,l=c.getAgent("@"+a),f=Array.isArray(l?.provider)?l?.provider[0]:l?.provider;if(f?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${o}" \u2192 "${f}"`);return {target:c,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:n,dir:r}=So(),o;try{o=Ua.readFileSync(n,"utf-8");}catch(s){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${n}
|
|
391
|
+
${s.message}`)}let i=_r(o);if(i.documents&&typeof i.documents=="object"){let s={};for(let[a,d]of Object.entries(i.documents))if(d&&typeof d=="object"){let c=d;typeof c.path=="string"&&!K.isAbsolute(c.path)?s[a]={...c,path:K.resolve(r,c.path)}:s[a]=c;}else s[a]=d;return {...i,documents:s}}return i}static mergeCrewxConfig(e,n){let r=new Map;for(let _ of e.agents??[])r.set(_.id,_);for(let _ of n.agents??[])r.has(_.id)&&console.warn(`[agent-loader] User agent "${_.id}" overrides built-in`),r.set(_.id,_);let o=Array.from(r.values()),i={...e.layouts??{},...n.layouts??{}},s={...e.documents??{},...n.documents??{}},a=e,d=n,c=vd(a.vars,d.vars),l=vd(a.settings,d.settings),f;e.skills&&n.skills&&typeof e.skills=="object"&&typeof n.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(n.skills)?f={...e.skills,...n.skills}:f=n.skills??e.skills;let g=[...e.hooks??[],...n.hooks??[]],m=ag(a.providers,d.providers),k={...e},h={...n};for(let _ of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete k[_],delete h[_];let w={...{...k,...h},agents:o,layouts:i,documents:s,skills:f};return g.length>0&&(w.hooks=g),c!==void 0&&(w.vars=c),l!==void 0&&(w.settings=l),m!==void 0&&(w.providers=m),w}static async loadYaml(e,n,r){let o=n?.includeBuiltIns!==false,i,s;if(o){let l=await t.loadBuiltInConfig(r);if(e!==void 0){let f=kr(e);i=t.mergeCrewxConfig(l,f),s=K.dirname(e);}else i=l,s=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");i=kr(e),s=K.dirname(e);}let a=new Ut(r);await a.load(i.documents,s);let d=i.agents??[];return await Ed(d,i,n),new t(d,n??{},i,a,s)}static async fromConfig(e,n,r,o){let i=n?.includeBuiltIns===true,s=e;if(i){let l=await t.loadBuiltInConfig(o);s=t.mergeCrewxConfig(l,e);}let a=new Ut(o);await a.load(s.documents,r??(typeof process<"u"?process.cwd():"/"));let d=s.agents??[];return await Ed(d,s,n),new t(d,n??{},s,a,r)}get agents(){return this._agents}get config(){return this._config}get plugins(){return this._plugins}get tools(){return this._tools}get workspaceId(){return this._workspaceId}createUiRuntime(e){return td(this._workspaceId,e)}get workspaceName(){return this._workspaceName}getAgent(e){let n=e.startsWith("@")?e.slice(1):e;return this._agents.get(n)}getRemoteProviderConfig(e){let n=this._config?.providers;return Array.isArray(n)?n.find(o=>o.type==="remote"&&o.id===e):void 0}computeTaskLogPath(e,n){let r=Ko(n);return K.join(this._projectRoot,".crewx","logs",`${r}_${e}.log`)}registerTool(e,n){this._tools.set(e,{name:e,...n});}async use(e){this._plugins.includes(e)||(await e.attach(this),this._plugins.push(e));}handler(e){return vi(this,e)}async registerChannelAdapter(e){let{adapter:n,instanceId:r,config:o}=e;if(this._activeAdapters.has(r))throw new Error(`Adapter instance already registered: ${r}`);let i=new Set(n.manifest.capabilities),s=e.store??ri(r),a=e.defaultMode??"query",d=n.manifest.platform,c=e.agentRunner??{run:async(m,k,h)=>{let w=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${m}`,k,{threadId:h?.threadId,platform:d});return {output:w.ok?w.data:w.error?.message??""}}},l=e.onInbound??(async m=>{let k=m.routingHints?.agentId??e.defaultAgent;if(!k)return {accepted:false,reason:"no_agent"};let{output:h}=await c.run(k,m.text,{threadId:m.threadId});return {accepted:true,output:h}}),f=ii({instanceId:r,config:o,capabilities:i,db:s,agentRunner:c,onInbound:l}),g={adapter:n,ctx:f,state:"starting"};this._activeAdapters.set(r,g),this.emit("adapter:lifecycle",{adapterId:n.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await n.start(f),g.state="started",this.emit("adapter:lifecycle",{adapterId:n.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(m){throw g.state="failed",this.emit("adapter:lifecycle",{adapterId:n.manifest.id,instanceId:r,state:"failed",error:m instanceof Error?m:new Error(String(m)),timestamp:new Date}),this._activeAdapters.delete(r),m}}async unregisterChannelAdapter(e){let n=this._activeAdapters.get(e);if(n){n.state="stopping",this.emit("adapter:lifecycle",{adapterId:n.adapter.manifest.id,instanceId:e,state:"stopping",timestamp:new Date});try{await n.adapter.stop(n.ctx),n.state="stopped",this.emit("adapter:lifecycle",{adapterId:n.adapter.manifest.id,instanceId:e,state:"stopped",timestamp:new Date});}catch(r){n.state="failed",this.emit("adapter:lifecycle",{adapterId:n.adapter.manifest.id,instanceId:e,state:"failed",error:r instanceof Error?r:new Error(String(r)),timestamp:new Date});}finally{this._activeAdapters.delete(e);}}}async stopAllAdapters(e={}){let n=e.timeoutMs??1e4,r=Array.from(this._activeAdapters.keys()),o=await Promise.allSettled(r.map(i=>Promise.race([this.unregisterChannelAdapter(i),new Promise((s,a)=>setTimeout(()=>a(new Error(`Adapter stop timeout: ${i}`)),n))])));for(let i=0;i<o.length;i++)o[i].status==="rejected"&&console.error(`[crewx] adapter stop error (${r[i]}): ${o[i].reason}`);}abortAll(){for(let[e,n]of this._activeTasks)if(n.pid!==void 0)try{process.platform==="win32"?process.kill(n.pid,"SIGTERM"):process.kill(-n.pid,"SIGTERM");}catch(r){console.error(`[crewx] abort task ${e} (pid=${n.pid}) error: ${r instanceof Error?r.message:String(r)}`);}}async _drainActiveTasks(e){let n=Array.from(this._activeTasks.values()).map(r=>r.done);n.length!==0&&await Promise.race([Promise.allSettled(n),new Promise(r=>setTimeout(r,e).unref())]);}async close(){this.abortAll(),await this._drainActiveTasks(Tn+1e3),await this.stopAllAdapters({timeoutMs:1e4});let e=[...this._remoteTargets.values()];this._remoteTargets.clear(),await Promise.allSettled(e.map(async r=>{try{await(await r).close();}catch(o){console.error(`[crewx] remote target close error: ${o instanceof Error?o.message:String(o)}`);}}));let n=[...this._plugins].reverse();for(let r of n)try{await r.detach(this);}catch(o){console.error(`[crewx] plugin ${r.name} detach error: ${o instanceof Error?o.message:String(o)}`);}this._plugins.length=0;}filterAgents(e){let n=a=>a?a.split(",").map(d=>d.trim().toLowerCase()).filter(Boolean):void 0,r=n(e.role),o=n(e.team),i=n(e.provider),s=Array.from(this._agents.values());return r&&(s=s.filter(a=>a.role&&r.some(d=>Fe(a.role.toLowerCase(),d)))),o&&(s=s.filter(a=>a.team&&o.some(d=>Fe(a.team.toLowerCase(),d)))),i&&(s=s.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(c=>i.some(l=>Fe(c.toLowerCase(),l))))),s}renderAgentPrompt(e){let n=e.startsWith("@")?e.slice(1):e,r=this._agents.get(n);if(!r)throw new et(n,Array.from(this._agents.keys()));return r.inline?.prompt??r.inline?.system_prompt??r.description??`You are an expert ${n}.`}async renderPrompt(e,n){let o={...await this._documentLoader.buildContext(),...n?.documents??{}},i={...n,documents:o};return this._templateEngine.render(e,i)}registerLayout(e,n){this._layoutLoader.registerLayout(e,n);}async renderAgentPromptFull(e,n){let r=n?.__contextBudget,o=e.startsWith("@")?e.slice(1):e,i=this._agents.get(o);if(!i)throw new et(o,Array.from(this._agents.keys()));let s=this._resolveLayoutSpec(i,n?.layout),a=this._extractLayoutId(s),d=this._extractLayoutProps(i,s,n?.layout),c=this._layoutLoader.load(a,d),l=i.inline?.prompt??i.inline?.system_prompt??i.description??`You are an expert ${o}.`,f=await this._documentLoader.buildContext(),g=n?.env??(typeof process<"u"?process.env:{}),m=n?.vars?.security_key??sg(),k={...n?.vars??{},documents:f,env:g,agent:{id:i.id,name:i.name??i.id,role:i.role??"",team:i.team??"",description:i.description??""}},h=await this._templateEngine.render(l,k),v={mode:n?.session?.mode??"query",platform:n?.session?.platform??"cli",options:n?.session?.options??[]},w=i.provider,_=Array.isArray(w)?w:typeof w=="string"&&w.length>0?[w]:[],R=_.join(", ")||(typeof w=="string"?w:""),b=i.options,L=["goals","daily"],A={goals:false,daily:false},Z;if(!Array.isArray(b)&&typeof b=="object"&&b!==null){let N=b;if("goals"in N){let J=N.goals;typeof J=="string"||Array.isArray(J)?A.goals=J:A.goals=!!J;}"daily"in N&&(A.daily=!!N.daily);let Y={};for(let[J,ie]of Object.entries(N))L.includes(J)||(Y[J]=ie);if(Object.keys(Y).length>0){let J=_.some(Ye=>Ye.startsWith("cli/")),ie={};for(let[Ye,Qe]of Object.entries(Y)){let E={};if(Array.isArray(Qe))J&&(E.rawArgs=Qe);else if(typeof Qe=="object"&&Qe!==null){let U=Qe;Object.keys(U).length>0&&(E.named=U);}(E.named||E.rawArgs&&E.rawArgs.length>0)&&(ie[Ye]=E);}Z=Object.keys(ie).length>0?ie:void 0;}}let P=Array.isArray(b)?b:void 0,F={};for(let[N,Y]of Object.entries(f))F[N]={content:Y.content??"",toc:Y.toc,summary:Y.summary,path:Y.path};if(A.goals){let N=K.join(this._projectRoot,"docs","goal"),Y=await ga(N,void 0,A.goals);Y&&(F.active_goals={content:Y});}if(A.daily){let N=K.join(this._projectRoot,"docs","daily"),Y=await ma(N);Y&&(F.today_daily={content:Y});}let ce=n?.vars?.user_input??void 0,H=this._config?.settings?.dreaming?.continuity,O=H?.reuseReadOnly!==false,te=typeof H?.lookback=="number"?H.lookback:5,z=typeof H?.maxEntryChars=="number"?H.maxEntryChars:8e3,$=n?.threadId??"",W=i.id,fe=!r?.activityLogDisabled&&O&&te>0&&!!$&&!!n?.messages?.length,ee=new Map;if(fe)if(r?.activityLogTokenBudget!==void 0&&r.countTokens){let N=ki({threadId:$,agentId:W,lookback:te,maxEntryChars:z,activityLogTokenBudget:r.activityLogTokenBudget,countTokens:r.countTokens});ee=N.activityLogByTask,r.onActivityLogResult?.(N);}else {typeof H?.decayRate=="number"?H.decayRate:.5;ee=Fa({threadId:$,agentId:W,lookback:te,maxEntryChars:z});}let un=(n?.messages??[]).map(N=>{let Y=typeof N.activity_log=="string"?$r(N.activity_log):N.activity_log;if(!N.isAssistant)return Y===N.activity_log?N:{...N,activity_log:Y};let J=N.metadata?.task_id;return !J||!ee.has(J)?Y===N.activity_log?N:{...N,activity_log:Y}:{...N,activity_log:$r(ee.get(J))}}),Et={user_input:ce,agent:{id:i.id,name:i.name??i.id,role:i.role??"",team:i.team??"",description:i.description??"",provider:R,providerList:_,model:i.inline?.model,workingDirectory:i.working_directory??i.workingDirectory??".",inline:{...i.inline??{},prompt:h},specialties:i.specialties??[],capabilities:i.capabilities??[],remote:i.remote??null,optionsByMode:Z,optionsArray:P},agentMetadata:{specialties:i.specialties??[],capabilities:i.capabilities??[],description:i.description??""},contextOptions:A,documents:F,skills:n?.skills??[],session:v,env:g,vars:{security_key:m,...n?.vars??{}},props:{...d??{},...n?.messages&&n.messages.length>0?{showConversationHistory:true}:{}},platform:v.platform,mode:v.mode,thread_id:$,now:On(new Date),has_activity_log:ee.size>0,messages:un,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(N=>({name:N.name,description:N.description,parameters:N.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(N=>({name:N.name,description:N.description,parameters:N.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(c,Et)}_filterToolsByMode(e){return e?e.map(n=>this._tools.get(n)).filter(n=>n!==void 0):Array.from(this._tools.values())}_resolveLayoutSpec(e,n){if(n!==void 0)return n;let r=e.inline?.layout;if(r!==void 0)return r;let o=this._config?.layouts?.default;return typeof o=="string"&&o?o:"crewx/default"}_extractLayoutId(e){if(typeof e=="string")return e;if("id"in e)return e.id;if("template"in e&&typeof e.template=="string"&&e.template.trim()){let n=`crewx/__inline_${Date.now()}`;return this._layoutLoader.registerLayout(n,e.template),n}return "crewx/default"}_extractLayoutProps(e,n,r){let o=e.inline?.layout,i=o&&typeof o=="object"&&"props"in o?o.props:void 0,s=r&&typeof r=="object"&&"id"in r?r.props:void 0;if(i||s)return {...i??{},...s??{}}}_getConversationProvider(){return this._plugins.find(n=>n.name==="conversation")?.conversationProvider}async _fetchHistoryMessages(e,n,r,o){if(r&&r.length>0)return tn(r,o);if(!e){let s=tn([],o);return s.length>0?s:void 0}let i=this._getConversationProvider();if(!i){let s=tn([],o);return s.length>0?s:void 0}try{let s=await i.fetchHistory(e,{currentTraceId:n});if(s.messages.length===0){let a=tn([],o);return a.length>0?a:void 0}return tn(pi(s),o)}catch{return}}async _resolveFreshProvider(e,n,r){let o=ha(e.provider),i=Vo(e.options,n,o,Go(r?.overdrive)),s=Jo(e.options,n),a=i.active&&i.provider?i.provider:r?.provider??s.provider??o,d=i.active&&i.model?i.model:r?.model??s.model??e.inline?.model;return d&&d.includes("{{")&&(d=await this._templateEngine.render(d,{...r?.vars??{}})),{baseProviderStr:o,baseModel:e.inline?.model,effectiveProviderStr:a,effectiveModel:d,overdrive:i}}_readInputBudgetPercent(){let r=this._config?.settings?.dreaming?.continuity;if(!(!r||!Object.prototype.hasOwnProperty.call(r,"inputBudgetPercent")))return r.inputBudgetPercent}_resolveBudgetModel(e,n){if(n&&n.trim())return n;let r=pr(e)?.model;return typeof r=="string"&&r.trim()?r:""}_resolveContextMode(e){return e?.contextMode==="instruction-only"?"instruction-only":"full"}_hasUsableResumeSessionId(e){return typeof e=="string"&&e.trim().length>0}_buildInstructionOnlyResumeManifest(e){return {phase:"resume",initialInputFraming:Ao,resolved:e.budget.resolved,reason:e.budget.resolved?void 0:e.budget.reason,requestedProvider:e.requestedProvider,requestedModel:e.requestedModel,effectiveProvider:e.effectiveProvider,effectiveModel:e.effectiveModel,contextWindowTokens:e.budget.resolved?e.budget.contextWindowTokens:null,inputBudgetPercent:e.budget.resolved?e.budget.inputBudgetPercent:e.budget.inputBudgetPercent??(typeof e.rawInputBudgetPercent=="number"?e.rawInputBudgetPercent:null),inputBudgetTokens:e.budget.resolved?e.budget.inputBudgetTokens:null,tokenizer:e.budget.tokenizer,initialTokenCount:e.messageTokenCount,finalTokenCount:e.messageTokenCount,activityLogTokenCount:0,activityIncludedEntries:0,activityOmittedEntries:0,activityRemovedForBudget:false,activityNewestTaskTokenCap:null,historyOriginalMessages:0,historyIncludedMessages:0,historyOmittedMessages:0,overBudget:e.budget.resolved?e.messageTokenCount>e.budget.inputBudgetTokens:false}}_prepareInstructionOnlyResumeWithBudget(e){let n=e.providerResolution.effectiveProviderStr,r=this._resolveBudgetModel(n,e.providerResolution.effectiveModel),o=this._readInputBudgetPercent(),i=wr({provider:n,model:r,inputBudgetPercent:o}),s=e.providerResolution.baseProviderStr,a=e.providerResolution.baseModel??null,d=r||null,c=yr(e.message,{provider:n,model:r}).tokenCount,l=this._buildInstructionOnlyResumeManifest({budget:i,requestedProvider:s,requestedModel:a,effectiveProvider:n,effectiveModel:d,rawInputBudgetPercent:o,messageTokenCount:c});return this._hasUsableResumeSessionId(e.resumeSessionId)?i.resolved&&c>i.inputBudgetTokens?{contextBudget:l,error:{code:"INPUT_BUDGET_EXCEEDED",message:`Input budget exceeded: instruction-only resume message is ${c} tokens; budget is ${i.inputBudgetTokens} tokens.`}}:{contextBudget:l}:{contextBudget:l,error:{code:"RESUME_SESSION_REQUIRED",message:'contextMode "instruction-only" requires a same-provider native resumeSessionId.'}}}_activityLogEntryCounts(e){return e?e.tasks.reduce((n,r)=>({tokenCount:n.tokenCount+r.tokenCount,includedEntries:n.includedEntries+r.includedEntries,omittedEntries:n.omittedEntries+r.omittedEntries}),{tokenCount:0,includedEntries:0,omittedEntries:0}):{tokenCount:0,includedEntries:0,omittedEntries:0}}_buildUnresolvedContextBudgetManifest(e){return {phase:"fresh",initialInputFraming:mr,resolved:false,reason:e.budget.resolved?void 0:e.budget.reason,requestedProvider:e.requestedProvider,requestedModel:e.requestedModel,effectiveProvider:e.effectiveProvider,effectiveModel:e.effectiveModel,contextWindowTokens:null,inputBudgetPercent:e.budget.resolved?e.budget.inputBudgetPercent:e.budget.inputBudgetPercent??(typeof e.rawInputBudgetPercent=="number"?e.rawInputBudgetPercent:null),inputBudgetTokens:null,tokenizer:e.budget.tokenizer,initialTokenCount:null,finalTokenCount:null,activityLogTokenCount:null,activityIncludedEntries:null,activityOmittedEntries:null,activityRemovedForBudget:false,activityNewestTaskTokenCap:null,historyOriginalMessages:e.historyOriginalMessages,historyIncludedMessages:e.historyOriginalMessages,historyOmittedMessages:0,overBudget:false}}_buildResolvedContextBudgetManifest(e){let n=this._activityLogEntryCounts(e.activityLogResult);return {phase:"fresh",initialInputFraming:mr,resolved:true,requestedProvider:e.requestedProvider,requestedModel:e.requestedModel,effectiveProvider:e.effectiveProvider,effectiveModel:e.effectiveModel,contextWindowTokens:e.budget.contextWindowTokens,inputBudgetPercent:e.budget.inputBudgetPercent,inputBudgetTokens:e.budget.inputBudgetTokens,tokenizer:e.budget.tokenizer,initialTokenCount:e.initialTokenCount,finalTokenCount:e.finalTokenCount,activityLogTokenCount:n.tokenCount,activityIncludedEntries:n.includedEntries,activityOmittedEntries:n.omittedEntries,activityRemovedForBudget:e.activityRemovedForBudget,activityNewestTaskTokenCap:Math.floor(e.budget.inputBudgetTokens/8),historyOriginalMessages:e.historyOriginalMessages,historyIncludedMessages:e.historyIncludedMessages,historyOmittedMessages:e.historyOriginalMessages-e.historyIncludedMessages,overBudget:e.initialTokenCount>e.budget.inputBudgetTokens}}async _renderFreshPromptVariant(e){return this.renderAgentPromptFull(e.agentRef,{session:{mode:e.mode,platform:e.options?.platform},vars:{user_input:e.message,...e.options?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(e.agent,e.options)},messages:e.messages,threadId:e.options?.threadId,__contextBudget:{activityLogDisabled:e.activityLogDisabled,activityLogTokenBudget:e.activityLogTokenBudget,countTokens:e.countTokens,onActivityLogResult:e.onActivityLogResult}})}async _prepareFreshPromptWithBudget(e){let n=e.historyMessages,r=n??[],o=r.length,i=e.providerResolution.effectiveProviderStr,s=this._resolveBudgetModel(i,e.providerResolution.effectiveModel),a=this._readInputBudgetPercent(),d=wr({provider:i,model:s,inputBudgetPercent:a}),c=e.providerResolution.baseProviderStr,l=e.providerResolution.baseModel??null,f=s||null;if(!d.resolved)return {renderedPrompt:await this._renderFreshPromptVariant({...e,messages:n}),contextBudget:this._buildUnresolvedContextBudgetManifest({budget:d,requestedProvider:c,requestedModel:l,effectiveProvider:i,effectiveModel:f,rawInputBudgetPercent:a,historyOriginalMessages:o})};let g=Co({provider:i,model:d.model}),m=A=>g.countTokens(A),k=A=>Po({systemPrompt:A,message:e.message},m),h,v=await this._renderFreshPromptVariant({...e,messages:n,activityLogTokenBudget:d.inputBudgetTokens,countTokens:m,onActivityLogResult:A=>{h=A;}}),w=k(v),_=w,R=false,b=r;if(_>d.inputBudgetTokens&&h&&h.activityLogByTask.size>0&&(v=await this._renderFreshPromptVariant({...e,messages:b,activityLogDisabled:true,activityLogTokenBudget:d.inputBudgetTokens,countTokens:m}),_=k(v),R=true),_>d.inputBudgetTokens&&b.length>0)for(let A=1;A<=r.length;A++){let Z=r.slice(A),P=await this._renderFreshPromptVariant({...e,messages:Z,activityLogDisabled:R,activityLogTokenBudget:d.inputBudgetTokens,countTokens:m}),F=k(P);if(v=P,_=F,b=Z,F<=d.inputBudgetTokens)break}let L=this._buildResolvedContextBudgetManifest({budget:d,requestedProvider:c,requestedModel:l,effectiveProvider:i,effectiveModel:f,initialTokenCount:w,finalTokenCount:_,activityLogResult:h,activityRemovedForBudget:R,historyOriginalMessages:o,historyIncludedMessages:b.length});return _>d.inputBudgetTokens?{renderedPrompt:v,contextBudget:L,countTokens:m,error:{code:"INPUT_BUDGET_EXCEEDED",message:`Input budget exceeded: final provider initial input is ${_} tokens; budget is ${d.inputBudgetTokens} tokens.`}}:{renderedPrompt:v,contextBudget:L,countTokens:m}}_recountFreshProviderInitialInput(e){let n=e.contextBudgetManifest;if(!n?.resolved||!n.effectiveModel)return null;let r=e.countTokens??(o=>yr(o,{provider:n.effectiveProvider,model:n.effectiveModel}).tokenCount);return Po({systemPrompt:e.providerOptions.systemPrompt,message:e.message},r)}_validateFreshProviderInitialInputBudget(e){let n=e.contextBudgetManifest;if(!n?.resolved||n.finalTokenCount===null||n.inputBudgetTokens===null)return;let r=this._recountFreshProviderInitialInput(e);if(r!==null){if(r!==n.finalTokenCount)throw new Error(`Context budget recount mismatch: provider initial input is ${r} tokens but manifest.finalTokenCount is ${n.finalTokenCount}.`);if(r>n.inputBudgetTokens)return {code:"INPUT_BUDGET_EXCEEDED",message:`Input budget exceeded: final provider initial input is ${r} tokens; budget is ${n.inputBudgetTokens} tokens.`}}}_resolveTimeout(e,n){let r=e==="query"?"CREWX_TIMEOUT_QUERY":"CREWX_TIMEOUT_EXECUTE";if(process.env[r]!=null&&process.env[r]!==""){let o=Ys();return e==="query"?o.queryMs:o.executeMs}if(n?.meta?.defaultTimeoutMs){let o=e==="query"?n.meta.defaultTimeoutMs.query:n.meta.defaultTimeoutMs.execute;if(o!==void 0)return o}return 8*36e5}_resolveIdleTimeout(e){let n=Wo();return n!==void 0?n:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){return si(e)}_resolveEffectiveCost(e,n,r){return ys(e?.costUsd,e?.inputTokens,e?.outputTokens,e?.cachedInputTokens,n)}_resolveEffectiveCwd(e,n){return n?.cwd??(e.working_directory?K.resolve(this._projectRoot,e.working_directory):this._projectRoot)}_buildFileRemoteOptions(e,n){let r={path:this._projectRoot,id:this._workspaceId,name:this._workspaceName,agentRef:e};return {...n,cwd:void 0,callerIdentity:r,metadata:{...n?.metadata??{},crewx:{...n?.metadata?.crewx??{},callerWorkspace:r}},vars:{...n?.vars??{},crewx_caller_workspace_path:r.path,crewx_caller_workspace_id:r.id,crewx_caller_workspace_name:r.name}}}_registerCallerIdentityOverride(e,n,r){let o=Symbol("callerIdentityOverride");return this._callerIdentityOverrides.set(e,{token:o,callerIdentity:n,targetIdentity:r}),o}_clearCallerIdentityOverride(e,n){if(!n)return;let r=this._callerIdentityOverrides.get(e);r&&r.token===n&&this._callerIdentityOverrides.delete(e);}_rewriteCallerFacingPayload(e,n,r){let{callerIdentity:o,targetIdentity:i}=r,s={...n,agentRef:o.agentRef};if(e==="task:output")return s;let a=s,d=a.metadata??{},c=d.crewx??{};return {...a,workspaceId:o.id,workspaceName:o.name,metadata:{...d,crewx:{...c,remoteExecution:i}}}}emit(e,n){if(e==="task:start"||e==="task:end"||e==="task:output"){let r=n.traceId,o=this._callerIdentityOverrides.get(r);if(o){let i=this._rewriteCallerFacingPayload(e,n,o);super.emit(e,i);return}}super.emit(e,n);}emitToolEvents(e,n,r,o,i,s,a){try{let c=this._lookupCliAdapter(r)?.parseEvent?.(o)??bn(new Date().toISOString(),o);for(let l of c)l.type==="tool_use"&&l.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:n,agentId:i,threadId:s,sessionId:a,provider:r,tool:{name:l.toolName,rawName:l.toolName,input:l.toolInput?this.tryParseJson(l.toolInput):void 0,toolUseId:l.toolUseId}}),l.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:n,agentId:i,threadId:s,sessionId:a,provider:r,tool:{name:l.toolName??"unknown",rawName:l.toolName??"unknown",toolUseId:l.toolUseId,result:l.resultPreview,isError:l.isError}});}catch{}}emitTaskLogEntries(e,n,r,o,i,s,a){try{for(let d of a)d.type==="tool_use"&&d.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:n,agentId:r,threadId:o,sessionId:i,provider:s,tool:{name:d.toolName,rawName:d.toolName,input:d.toolInput?this.tryParseJson(d.toolInput):void 0,toolUseId:d.toolUseId}}),d.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:n,agentId:r,threadId:o,sessionId:i,provider:s,tool:{name:d.toolName??"unknown",rawName:d.toolName??"unknown",toolUseId:d.toolUseId,result:d.resultPreview,isError:d.isError}});}catch{}}tryParseJson(e){try{return JSON.parse(e)}catch{return e}}async query(e,n,r){let o=await this.resolveFileRemoteTarget(e);if(o){let l=await o.target.query(o.agentRef,n,this._buildFileRemoteOptions(e,r));return {...l,meta:{...l.meta,agentId:e.replace(/^@/,"")}}}let i=Un.getStore()??ai(r?.trace),s=r?.taskId??it("tsk"),a={parentTaskId:i?.parentTaskId??null,rootTraceId:i?.rootTraceId??s,callerAgentId:i?.callerAgentId??null},d={parentTaskId:s,rootTraceId:i?.rootTraceId??s,callerAgentId:null},c=r?.callerIdentity?this._registerCallerIdentityOverride(s,r.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await Un.run(d,async()=>{let l=Date.now(),f=new Date,g;try{g=vr(e,Array.from(this._agents.values()));}catch(E){if(E instanceof et){this.emit("task:start",{traceId:s,timestamp:f,agentRef:e,message:n,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let U=Date.now()-l,B={code:"AGENT_NOT_FOUND",message:E.message};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:U,error:B,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:B,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:U,taskId:s}}}throw E}d.callerAgentId=g.id;let m=await this._resolveFreshProvider(g,"query",r),k=m.baseProviderStr,h=m.effectiveProviderStr,v=m.effectiveModel,w=m.overdrive,_=h!==k?void 0:r?.resumeSessionId,b=this._resolveContextMode(r)==="instruction-only",L,A,Z,P=v,F,ce,X,re,H=!1,O=E=>{H||(H=!0,this.emit("task:start",{traceId:s,timestamp:f,agentRef:e,message:n,mode:"query",pid:E,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:P,provider:h,codingAgentCommand:L,renderedPrompt:ce,metadata:{...r?.metadata??{},provider:h,...w.active?{overdrive:!0}:{},...F?{provider_session_id:F}:{},...X?{context_budget:X}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));};if(b){let E=this._prepareInstructionOnlyResumeWithBudget({message:n,providerResolution:m,resumeSessionId:_});if(X=E.contextBudget,E.error){O();let U=Date.now()-l,B=E.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:U,error:B,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:B,meta:{agentId:g.id,provider:h,model:v,durationMs:U,taskId:s}}}}let te;try{te=rt(h,this._additionalArgsProvider);}catch(E){O();let U=Date.now()-l,B={code:"PROVIDER_ERROR",message:E.message,...E instanceof exports.ProviderError?{providerCode:E.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:U,error:B,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:B,meta:{agentId:g.id,provider:h,model:v,durationMs:U,taskId:s}}}let z;if(b||(z=await this._fetchHistoryMessages(r?.threadId,s,r?.messages,r?.uiProjections)),!b)try{let E=await this._prepareFreshPromptWithBudget({agentRef:e,agent:g,mode:"query",message:n,options:r,providerResolution:m,historyMessages:z});if(ce=E.renderedPrompt,X=E.contextBudget,re=E.countTokens,E.error){O();let U=Date.now()-l,B=E.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:U,error:B,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:B,meta:{agentId:g.id,provider:h,model:v,durationMs:U,taskId:s}}}}catch(E){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${E instanceof Error?E.message:String(E)}`);}let $=g.options,W=kd($?.query,h,w),fe=w.active?w.mode:W.modeOptions?.mode,ee=w.effort??r?.effort??W.modeOptions?.effort,un=Array.isArray($?.query?.tools)?$.query.tools:void 0,Et=this._tools.size>0?this._filterToolsByMode(un):[],N=W.configOptions,Y=g.inline?.max_steps;h.startsWith("api/")&&O();let J=!1,ie=0,Ye=()=>{},Qe=new Promise(E=>{Ye=E;});this._activeTasks.set(s,{pid:void 0,done:Qe});try{let E={model:v,effort:ee,mode:fe,context:r?.context,...b?{}:{systemPrompt:ce??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`},additionalArgs:Array.isArray($?.query)?$.query:void 0,resumeSessionId:_,tools:Et.length>0?Et:void 0,maxSteps:Y,providerOptions:W.providerOptions,configOptions:N,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(h)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(h)),cwd:this._resolveEffectiveCwd(g,r),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:s,CREWX_PARENT_TASK_ID:s,CREWX_TASK_ID:s,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:h,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(s,f)},onPid:S=>{let se=this._activeTasks.get(s);se&&(se.pid=S),O(S);},onProviderSessionId:S=>{F=S;},onOutput:(S,se)=>{let fo=this._lookupCliAdapter(h);se==="stdout"&&fo?.suppressOutputLine?.(S)===!0||this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:S,level:se}),se==="stdout"&&this.emitToolEvents(s,e,h,S,g.id,r?.threadId??"","");},onTaskLog:S=>{this.emitTaskLogEntries(s,e,g.id,r?.threadId??"","",h,S);for(let se of S)this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:JSON.stringify(se),level:"info"});},onCommand:S=>{L=S;},onUsage:S=>{A=S;},onExitCode:S=>{Z=S;},onModel:S=>{P||(P=S);}},U=b?void 0:this._validateFreshProviderInitialInputBudget({message:n,providerOptions:E,contextBudgetManifest:X,countTokens:re});if(U){O();let S=Date.now()-l;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:S,error:U,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),J=!0,{ok:!1,data:"",error:U,meta:{agentId:g.id,provider:h,model:v,durationMs:S,taskId:s}}}let B=await te.query(n,E);ie=this._resolveEffectiveCost(A,P,l),O();let ut=Date.now()-l,pn={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",result:B,durationMs:ut,exitCode:Z,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:ie,model:P,metadata:Object.keys(pn).length>0?pn:void 0}),J=!0,{ok:!0,data:B,meta:{agentId:g.id,provider:h,model:v,durationMs:ut,taskId:s}}}catch(E){if(E instanceof exports.ClientToolCallRequiredError){let ut=it("thd");return this._pendingThreads.set(ut,{agentRef:g.id,providerStr:h,continuationState:E.continuationState,toolCall:E.toolCall,traceId:s,startMs:l,model:v}),J=!0,{ok:!0,status:"requires_action",data:"",toolCall:E.toolCall,threadId:ut,meta:{agentId:g.id,provider:h,model:v,durationMs:Date.now()-l,taskId:s}}}ie=this._resolveEffectiveCost(A,P,l),O();let U=Date.now()-l,B={code:"QUERY_FAILED",message:E.message,...E instanceof exports.ProviderError?{providerCode:E.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:U,error:B,exitCode:Z,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:ie,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),J=!0,{ok:!1,data:"",error:B,meta:{agentId:g.id,provider:h,model:v,durationMs:U,taskId:s}}}finally{J||this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:Z??-1,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:ie,model:P}),this._activeTasks.delete(s),this._clearCallerIdentityOverride(s,c),Ye();}})}finally{this._clearCallerIdentityOverride(s,c);}}async continueQuery(e,n){let r=this._pendingThreads.get(e);if(!r)return {ok:false,data:"",error:{code:"THREAD_NOT_FOUND",message:`No pending thread: ${e}`},meta:{agentId:"",provider:"",durationMs:0}};this._pendingThreads.delete(e);let o=rt(r.providerStr,this._additionalArgsProvider);if(!o.continueWithToolResults)return {ok:false,data:"",error:{code:"UNSUPPORTED",message:"Provider does not support client tool continuation"},meta:{agentId:r.agentRef,provider:r.providerStr,durationMs:0}};let i=n.map(s=>({...s,toolName:r.toolCall.toolCallId===s.toolCallId?r.toolCall.toolName:s.toolCallId}));try{let s=await o.continueWithToolResults(r.continuationState,i),a=Date.now()-r.startMs;return this.emit("task:end",{traceId:r.traceId,timestamp:new Date,agentRef:r.agentRef,mode:"query",result:s,durationMs:a}),{ok:!0,status:"complete",data:s,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}catch(s){if(s instanceof exports.ClientToolCallRequiredError)return this._pendingThreads.set(e,{...r,continuationState:s.continuationState,toolCall:s.toolCall}),{ok:true,status:"requires_action",data:"",toolCall:s.toolCall,threadId:e,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:Date.now()-r.startMs}};let a=Date.now()-r.startMs;return {ok:false,data:"",error:{code:"CONTINUE_FAILED",message:s.message},meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}}async execute(e,n,r){let o=await this.resolveFileRemoteTarget(e);if(o){let l=await o.target.execute(o.agentRef,n,this._buildFileRemoteOptions(e,r));return {...l,meta:{...l.meta,agentId:e.replace(/^@/,"")}}}let i=Un.getStore()??ai(r?.trace),s=r?.taskId??it("tsk"),a={parentTaskId:i?.parentTaskId??null,rootTraceId:i?.rootTraceId??s,callerAgentId:i?.callerAgentId??null},d={parentTaskId:s,rootTraceId:i?.rootTraceId??s,callerAgentId:null},c=r?.callerIdentity?this._registerCallerIdentityOverride(s,r.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await Un.run(d,async()=>{let l=Date.now(),f=new Date,g;try{g=vr(e,Array.from(this._agents.values()));}catch(E){if(E instanceof et){this.emit("task:start",{traceId:s,timestamp:f,agentRef:e,message:n,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let U=Date.now()-l,B={code:"AGENT_NOT_FOUND",message:E.message};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:U,error:B,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:B,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:U,taskId:s}}}throw E}d.callerAgentId=g.id;let m=await this._resolveFreshProvider(g,"execute",r),k=m.baseProviderStr,h=m.effectiveProviderStr,v=m.effectiveModel,w=m.overdrive,_=h!==k?void 0:r?.resumeSessionId,b=this._resolveContextMode(r)==="instruction-only",L,A,Z,P=v,F,ce,X,re,H=!1,O=E=>{H||(H=!0,this.emit("task:start",{traceId:s,timestamp:f,agentRef:e,message:n,mode:"execute",pid:E,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:P,provider:h,codingAgentCommand:L,renderedPrompt:ce,metadata:{...r?.metadata??{},provider:h,...w.active?{overdrive:!0}:{},...F?{provider_session_id:F}:{},...X?{context_budget:X}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));};if(b){let E=this._prepareInstructionOnlyResumeWithBudget({message:n,providerResolution:m,resumeSessionId:_});if(X=E.contextBudget,E.error){O();let U=Date.now()-l,B=E.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:U,error:B,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:B,meta:{agentId:g.id,provider:h,model:v,durationMs:U,taskId:s}}}}let te;try{te=rt(h,this._additionalArgsProvider);}catch(E){O();let U=Date.now()-l,B={code:"PROVIDER_ERROR",message:E.message,...E instanceof exports.ProviderError?{providerCode:E.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:U,error:B,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:B,meta:{agentId:g.id,provider:h,model:v,durationMs:U,taskId:s}}}let z;if(b||(z=await this._fetchHistoryMessages(r?.threadId,s,r?.messages,r?.uiProjections)),!b)try{let E=await this._prepareFreshPromptWithBudget({agentRef:e,agent:g,mode:"execute",message:n,options:r,providerResolution:m,historyMessages:z});if(ce=E.renderedPrompt,X=E.contextBudget,re=E.countTokens,E.error){O();let U=Date.now()-l,B=E.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:U,error:B,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:B,meta:{agentId:g.id,provider:h,model:v,durationMs:U,taskId:s}}}}catch(E){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${E instanceof Error?E.message:String(E)}`);}let $=g.options,W=kd($?.execute,h,w),fe=w.active?w.mode:W.modeOptions?.mode,ee=w.effort??r?.effort??W.modeOptions?.effort,un=Array.isArray($?.execute?.tools)?$.execute.tools:void 0,Et=this._tools.size>0?this._filterToolsByMode(un):[],N=W.configOptions,Y=g.inline?.max_steps;h.startsWith("api/")&&O();let J=!1,ie=0,Ye=()=>{},Qe=new Promise(E=>{Ye=E;});this._activeTasks.set(s,{pid:void 0,done:Qe});try{let E={model:v,effort:ee,mode:fe,context:r?.context,...b?{}:{systemPrompt:ce??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`},additionalArgs:Array.isArray($?.execute)?$.execute:void 0,resumeSessionId:_,tools:Et.length>0?Et:void 0,maxSteps:Y,providerOptions:W.providerOptions,configOptions:N,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(h)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(h)),cwd:this._resolveEffectiveCwd(g,r),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:s,CREWX_PARENT_TASK_ID:s,CREWX_TASK_ID:s,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:h,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(s,f)},onPid:S=>{let se=this._activeTasks.get(s);se&&(se.pid=S),O(S);},onProviderSessionId:S=>{F=S;},onOutput:(S,se)=>{let fo=this._lookupCliAdapter(h);se==="stdout"&&fo?.suppressOutputLine?.(S)===!0||this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:S,level:se}),se==="stdout"&&this.emitToolEvents(s,e,h,S,g.id,r?.threadId??"","");},onTaskLog:S=>{this.emitTaskLogEntries(s,e,g.id,r?.threadId??"","",h,S);for(let se of S)this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:JSON.stringify(se),level:"info"});},onCommand:S=>{L=S;},onUsage:S=>{A=S;},onExitCode:S=>{Z=S;},onModel:S=>{P||(P=S);}},U=b?void 0:this._validateFreshProviderInitialInputBudget({message:n,providerOptions:E,contextBudgetManifest:X,countTokens:re});if(U){O();let S=Date.now()-l;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:S,error:U,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),J=!0,{ok:!1,data:"",error:U,meta:{agentId:g.id,provider:h,model:v,durationMs:S,taskId:s}}}let B=await te.execute(n,E);ie=this._resolveEffectiveCost(A,P,l),O();let ut=Date.now()-l,pn={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",result:B,durationMs:ut,exitCode:Z,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:ie,model:P,metadata:Object.keys(pn).length>0?pn:void 0}),J=!0,{ok:!0,data:B,meta:{agentId:g.id,provider:h,model:v,durationMs:ut,taskId:s}}}catch(E){ie=this._resolveEffectiveCost(A,P,l),O();let U=Date.now()-l,B={code:"EXECUTE_FAILED",message:E.message,...E instanceof exports.ProviderError?{providerCode:E.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:U,error:B,exitCode:Z,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:ie,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),J=!0,{ok:!1,data:"",error:B,meta:{agentId:g.id,provider:h,model:v,durationMs:U,taskId:s}}}finally{J||this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:Z??-1,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:ie,model:P}),this._activeTasks.delete(s),this._clearCallerIdentityOverride(s,c),Ye();}})}finally{this._clearCallerIdentityOverride(s,c);}}};function vd(t,e){let n=zi(t)?t:void 0,r=zi(e)?e:void 0;if(!(!n&&!r))return {...n??{},...r??{}}}function zi(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function ag(t,e){let n=Array.isArray(t)?t:void 0,r=Array.isArray(e)?e:void 0;if(!n&&!r)return;let o=a=>{if(!zi(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let c=a.name;if(typeof c=="string")return `name:${c}`},i=new Set;for(let a of r??[]){let d=o(a);d&&i.add(d);}let s=[];for(let a of n??[]){let d=o(a);d&&i.has(d)||s.push(a);}for(let a of r??[])s.push(a);return s}function dg(t){let e=Array.isArray(t.provider)?t.provider:[t.provider],n=t.options,r=[...e];for(let o of ["query","execute"]){let i=Jo(n,o);i.provider&&r.push(i.provider);let s=n&&typeof n=="object"&&!Array.isArray(n)?n[o]:void 0,a=s&&typeof s=="object"&&!Array.isArray(s)?Mr(s.overdrive):void 0;a?.provider&&r.push(a.provider);}return r}async function Ed(t,e,n){let r=t.flatMap(dg);if(r.some(i=>i.startsWith("api/"))){let{registerApiProviders:i}=await Promise.resolve().then(()=>(Ci(),sd));i(n?.api);}await lg(r,e),ug(r,e),cg(r);}function cg(t){if(!t.some(r=>r.startsWith("acp/")))return;let{registerAcpProviders:n}=(Li(),cs(ud));n();}async function lg(t,e){if(!t.some(s=>s.startsWith("remote/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createRemoteProviderFactory:o}=await Promise.resolve().then(()=>(ji(),fd)),i=new Map;for(let s of r)s.type==="remote"&&typeof s.id=="string"&&i.set(s.id,s);i.size>0&&nt("remote",o(i,rt));}function ug(t,e){if(!t.some(s=>s.startsWith("plugin/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createPluginProviderFactory:o}=(Fi(),cs(yd)),i=new Map;for(let s of r)s.type==="plugin"&&typeof s.id=="string"&&i.set(s.id,s);i.size>0&&nt("plugin",o(i));}u();u();var Gi=class{detach(e){}};u();var pg="crewx:fs:",Vi=class{prefix;store;constructor(e){this.prefix=e?.prefix??pg,this.store=e?.storage??new Map;}async readFile(e){let n=this.toKey(e),r=this.store.get(n);if(r===void 0)throw new Error(`BrowserFsAdapter: file not found: ${e}`);return r}async exists(e){return this.store.has(this.toKey(e))}resolvePath(...e){let n=e.map(s=>s.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),r=n.split("/"),o=[];for(let s of r)s==="."||s===""||(s===".."?o.pop():o.push(s));let i=o.join("/");return n.startsWith("/")?`/${i}`:i}isAbsolute(e){return e.startsWith("/")}setItem(e,n){this.store.set(this.toKey(e),n);}removeItem(e){this.store.delete(this.toKey(e));}keys(){return Array.from(this.store.keys()).filter(e=>e.startsWith(this.prefix)).map(e=>e.slice(this.prefix.length))}async readdir(e){let n=e.replace(/\\/g,"/").replace(/\/$/,""),r=this.toKey(n+"/"),o=[];for(let i of this.store.keys())if(i.startsWith(r)){let a=i.slice(r.length).split("/")[0];a&&!o.includes(a)&&o.push(a);}return o}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};u();var sn="default",an="archive",xd="wi-default-flow",fg="wi-plan-flow",gg="wi-default-flow.yaml",mg="wi-plan-flow.yaml",co=/^[a-zA-Z0-9_-]{1,64}$/;function Rd(t){return t===sn||t===an}function hg(t){let e={id:sn,name:"Default",workflowId:xd,system:true,readOnly:false},n={id:an,name:"Archive",workflowId:"",system:true,readOnly:true},r=t?.settings?.wi?.boards;if(!Array.isArray(r)||r.length===0)return [e,n];let o=new Set,i=[];for(let s of r){if(!s||typeof s!="object")continue;let a=s,d=a.id,c=a.name,l=a.workflow_id;if(typeof d!="string"||d.length===0||typeof c!="string"||c.length===0||typeof l!="string"||l.length===0||Rd(d)||!co.test(d)||o.has(d))continue;o.add(d);let f=typeof a.description=="string"?a.description:void 0,g=typeof a.goal_id=="string"?a.goal_id:void 0;i.push({id:d,name:c,workflowId:l,...f!==void 0?{description:f}:{},...g!==void 0?{goalId:g}:{},system:false,readOnly:false});}return [e,...i,n]}u();var ne=class extends Error{constructor(e){super(e),this.name="WiCreateError";}},wg=300*1e3,_g=300*1e3,kg=1e4,vg=50;function Eg(t){return new Promise(e=>setTimeout(e,t))}function xg(t){let e=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0");return {compact:`${e}${n}${r}`,iso:`${e}-${n}-${r}`}}function Rg(t){return t.normalize("NFKD").replace(/[^\x00-\x7F]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toUpperCase().slice(0,60)}function bg(t,e){let n=t.replace(/\\/g,"/").toLowerCase(),r=e.replace(/\\/g,"/").toLowerCase();if(r!==n&&!r.startsWith(n+"/"))throw new ne("Path is outside wi directory")}function bd(t){let e=typeof t=="string"?t.trim():"";if(!e)throw new ne("title is required");if(e.length>200)throw new ne("title must be 200 characters or fewer");return e}function Td(t){let e=typeof t=="string"?t.trim():"";if(!e)return "manual";if(e.length>128)throw new ne("source must be 128 characters or fewer");if(/[\r\n]/.test(e))throw new ne("source must be a single line");return e}function Ad(t){return (typeof t=="string"?t.trim().replace(/^@+/,""):"")||void 0}function Id(t){if(t==null)return [];if(!Array.isArray(t))throw new ne("depends_on must be an array");return t.map(e=>String(e).trim()).filter(Boolean)}function Pd(t,e){let n=typeof t=="string"?t.trim():"";if(!n){if(e?.required)throw new ne("board is required");return}if(!co.test(n))throw new ne("board must match ^[a-zA-Z0-9_-]{1,64}$");if(n===an)throw new ne(`board cannot be '${an}'`);return n}function dn(t){return JSON.stringify(t)}function Tg(t,e){return e.length===0?[`${t}: []`]:[`${t}:`,...e.map(n=>` - ${dn(n)}`)]}async function Ag(t){let e=await Ua.promises.stat(t).catch(()=>null);e&&Date.now()-e.mtimeMs>_g&&await Ua.promises.rm(t,{recursive:true,force:true}).catch(()=>{});}async function Ig(t,e){let n=K.join(t,".wi-create.lock"),r=Date.now()+kg;for(;Date.now()<r;)try{await Ua.promises.mkdir(n);try{return await e()}finally{await Ua.promises.rm(n,{recursive:!0,force:!0}).catch(()=>{});}}catch(o){if(o.code!=="EEXIST")throw o;await Ag(n),await Eg(vg);}throw new ne("WI create lock timeout: docs/wi/.wi-create.lock")}async function Cd(t){let e=[],n=await Ua.promises.readdir(t,{withFileTypes:true}).catch(r=>{if(r.code==="ENOENT")return [];throw r});for(let r of n){let o=K.join(t,r.name);r.isDirectory()?e.push(...await Cd(o)):r.isFile()&&r.name.endsWith(".md")&&e.push(r.name);}return e}async function Pg(t){let e=await Ua.promises.readdir(t).catch(r=>{if(r.code==="ENOENT")return [];throw r}),n=await Cd(K.join(t,"archive"));return [...e,...n]}function Cg(t,e){return t.reduce((n,r)=>{if(!r.startsWith(e))return n;let o=r.slice(e.length).match(/^(\d+)/);return o?Math.max(n,parseInt(o[1],10)):n},0)+1}function Sg(t,e){return t.some(n=>n===`${e}.md`||n.startsWith(`${e}-`))}async function Og(t,e){let n=K.join(t,`.wi-${e}.lock`);try{return await Ua.promises.writeFile(n,"",{flag:"wx"}),{claimed:!0,lockPath:n}}catch(r){if(r.code!=="EEXIST")throw r;return await Ua.promises.stat(n).then(i=>Date.now()-i.mtimeMs>wg).catch(()=>false)&&await Ua.promises.unlink(n).then(()=>true).catch(()=>false)?(await Ua.promises.writeFile(n,"",{flag:"wx"}),{claimed:true,lockPath:n}):{claimed:false,lockPath:n}}}function Ng(t){return {title:bd(t.title),assignee:Ad(t.assignee),body:(t.body??"").trim(),board:Pd(t.board),source:Td(t.source),depends_on:Id(t.depends_on)}}function Dg(t,e,n){if(t==null)return;let r=typeof t=="string"?t.trim():"";if(!r)throw new ne(`items[${e}].key must be a non-empty string when provided`);if(n.has(r))throw new ne(`items[${e}].key "${r}" is duplicated`);return n.add(r),r}function Mg(t){let e=Pd(t.board,{required:true}),n=Td(t.source);if(!Array.isArray(t.items)||t.items.length===0)throw new ne("items must contain at least one WI");let r=new Set;return t.items.map((o,i)=>{if(!o||typeof o!="object")throw new ne(`items[${i}] must be an object`);if(typeof o.body!="string")throw new ne(`items[${i}].body is required`);return {key:Dg(o.key,i,r),title:bd(o.title),assignee:Ad(o.assignee),body:o.body.trim(),board:e,source:n,depends_on:Id(o.depends_on)}})}function Ug(t,e){return t.map(n=>e.get(n)??n)}function Lg(t,e,n){let r=!!t.board&&t.board!==sn,o={wi_id:e,title:t.title,date:n,status:"draft",priority:"normal",source:t.source};return t.assignee&&(o.assignee=t.assignee),r&&(o.board=t.board),o.depends_on=t.depends_on,{raw:`---
|
|
392
|
+
${[`wi_id: ${e}`,`title: ${dn(t.title)}`,`date: ${dn(n)}`,"status: draft",...t.assignee?[`assignee: ${dn(t.assignee)}`]:[],"priority: normal",`source: ${dn(t.source)}`,...r?[`board: ${dn(t.board)}`]:[],...Tg("depends_on",t.depends_on)].join(`
|
|
393
|
+
`)}
|
|
394
|
+
---
|
|
395
|
+
|
|
396
|
+
${t.body}
|
|
397
|
+
`,frontmatter:o}}async function Sd(t,e){let n=K.join(t,"docs","wi");return await Ua.promises.mkdir(n,{recursive:true}),Ig(n,async()=>{let{compact:r,iso:o}=xg(new Date),i=`WI-${r}-`,s=await Pg(n),a=Cg(s,i),d=[],c=[];try{let l=[];for(let m of e){let h;for(let v=0;v<999;v++,a++){let w=`WI-${r}-${String(a).padStart(3,"0")}`;if(Sg(s,w))continue;let _=await Og(n,w);if(!_.claimed)continue;let R=Rg(m.title),b=R?`${w}-${R}.md`:`${w}.md`,L=K.resolve(n,b);if(bg(n,L),await Ua.promises.access(L).then(()=>!0,()=>!1)){await Ua.promises.unlink(_.lockPath).catch(()=>{});continue}c.push(_.lockPath),h={item:m,wiId:w,filename:b,fullPath:L};break}if(!h)throw new ne("Failed to allocate a unique WI id");l.push(h),s.push(h.filename);}let f=new Map;for(let m of l)m.item.key&&f.set(m.item.key,m.wiId);let g=[];for(let m of l){let k=Ug(m.item.depends_on,f),h={...m.item,depends_on:k},v=Lg(h,m.wiId,o);await Ua.promises.writeFile(m.fullPath,v.raw,{encoding:"utf8",flag:"wx"}),d.push(m.fullPath);let w=await Ua.promises.stat(m.fullPath);g.push({summary:{wi_id:m.wiId,title:h.title,status:"draft",priority:"normal",assignee:h.assignee,depends_on:k,blocks:[],date:o,board:h.board&&h.board!==sn?h.board:void 0,source:h.source,screens:[],path:`docs/wi/${m.filename}`,mtime:w.mtimeMs},frontmatter:v.frontmatter,body:h.body});}return g}catch(l){throw await Promise.all(d.map(f=>Ua.promises.unlink(f).catch(()=>{}))),l}finally{await Promise.all(c.map(l=>Ua.promises.unlink(l).catch(()=>{})));}})}async function $g(t,e){let[n]=await Sd(t,[Ng(e)]);if(!n)throw new ne("Failed to create WI");return n}async function Bg(t,e){return {created:await Sd(t,Mg(e))}}u();var jg=new Set(["draft","approved","in-progress"]);function Fg(t,e){let n=e.batch.filter(Boolean);if(n.length===0)return {done:true};let r=new Set(e.exclude??[]),o=new Set(n),i=new Map(t.filter(f=>o.has(f.wi_id)).map(f=>[f.wi_id,f])),s=n.filter(f=>{let g=i.get(f);return g&&g.status!=="done"});if(s.length===0)return {done:true};for(let f of s){let g=i.get(f);if(g)for(let m of g.depends_on??[]){if(!o.has(m))continue;if(i.get(m)?.status==="cancelled")return {blocked:true,reason:`${f} depends on cancelled WI ${m}`}}}let a=new Map,d=new Map;for(let f of s)a.set(f,new Set),d.set(f,0);for(let f of s){let g=i.get(f);if(g)for(let m of g.depends_on??[])d.has(m)&&(a.get(m).add(f),d.set(f,(d.get(f)??0)+1));}let c=s.filter(f=>(d.get(f)??0)===0),l=[];for(let f=0;f<c.length;f++){let g=c[f];l.push(g);for(let m of a.get(g)??[]){let k=(d.get(m)??0)-1;d.set(m,k),k===0&&c.push(m);}}if(l.length!==s.length)return {cycle:s.filter(f=>(d.get(f)??0)>0)};for(let f of n){if(!s.includes(f)||r.has(f))continue;let g=i.get(f);if(!g||!jg.has(g.status))continue;if(!(g.depends_on??[]).some(k=>{if(!o.has(k))return false;let h=i.get(k);return h?h.status!=="done":false}))return {pick:f}}return {done:true}}u();function rr(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Od(t,e){let n={...t};for(let[r,o]of Object.entries(e))rr(o)&&rr(n[r])?n[r]=Od(n[r],o):n[r]=o;return n}function Qg(t){let e=t?.filePath??K.join(Ri.homedir(),".crewx","crewx.yaml"),n=null,r=null;function o(){try{return Ua.statSync(e).mtimeMs}catch{return null}}function i(){let s=o();if(s===null)return n=null,r=null,{};if(r!==null&&n===s)return r;let a=null;try{a=jsYaml.load(Ua.readFileSync(e,"utf-8"));}catch{a=null;}let d=rr(a)?a:{};return r=d,n=s,d}return {get path(){return e},read(){let s=i();return rr(s.settings)?s.settings:{}},update(s){let a=i(),d=rr(a.settings)?a.settings:{},c=Od(d,s),l={...a,settings:c};Ua.mkdirSync(K.dirname(e),{recursive:true});let f=`${e}.tmp`;return Ua.writeFileSync(f,jsYaml.dump(l)),Ua.renameSync(f,e),n=null,r=null,c}}}Do();ur();u();zt();var Zg="https://api.crewx.dev/v1/models",em=3600*1e3,Nd=0;async function tm(t){let e=t?.ttlMs??em,n=Date.now();if(!(n-Nd<e)){Nd=n;try{let r=await fetch(t?.endpoint??Zg);if(!r.ok)return;let o=await r.json();if(!o?.models||typeof o.models!="object")return;let i={};for(let[s,a]of Object.entries(o.models))a!=null&&(i[s]={input:a.input,cachedInput:a.cachedInput,output:a.output});gs(i);}catch{}}}u();Re();zt();ho();var nm="https://api.crewx.dev/v1/models",rm=900*1e3,Dd=0;function Xe(t){return t!=null&&typeof t=="object"&&!Array.isArray(t)}function om(t){return typeof t=="number"&&Number.isInteger(t)&&t>0}function im(t){return typeof t=="string"&&ls.includes(t)}function sm(t){if(t===void 0)return [];if(!Array.isArray(t))return;let e=new Set,n=[];for(let r of t){if(!Xe(r)||typeof r.key!="string"||r.key.trim().length===0)return;let o=r.key.trim();if(e.has(o))return;if(e.add(o),r.type==="boolean"){n.push({key:o,type:"boolean"});continue}if(r.type!=="enum"||!Array.isArray(r.values)||r.values.length===0||r.values.some(i=>typeof i!="string"||i.length===0)||new Set(r.values).size!==r.values.length)return;n.push({key:o,type:"enum",values:[...r.values]});}return n}function am(t,e){if(t===void 0)return;if(!Xe(t))return null;let n=new Map(e.map(o=>[o.key,o])),r={};for(let[o,i]of Object.entries(t)){let s=n.get(o);if(s){if(s.type==="boolean"&&typeof i!="boolean"||s.type==="enum"&&(typeof i!="string"||!s.values.includes(i)))return null;r[o]=i;}}return r}function dm(t){if(!Xe(t))return {};let e={};for(let[n,r]of Object.entries(t)){if(!Xe(r))continue;let o=r.input,i=r.output;typeof o!="number"||!Number.isFinite(o)||o<=0||typeof i!="number"||!Number.isFinite(i)||i<=0||(e[n]={inputPerMillionTokensUsd:o,outputPerMillionTokensUsd:i});}return e}function Md(t,e){if(!Xe(t)||typeof t.mode!="string"||t.mode.length===0||typeof t.effort!="string"||t.effort.length===0)return;let n=am(t.providerOptions,e);if(n!==null)return {mode:t.mode,effort:t.effort,...n!==void 0?{providerOptions:n}:{}}}function cm(t,e){let n=t.modelOverrides[e]?.effort;return Array.isArray(n)&&n.every(r=>typeof r=="string")?n:t.effort}function lm(t,e){if(!Xe(t)||t.version!==1||!Xe(t.providers))return {};let n={};for(let[r,o]of Object.entries(t.providers)){if(!/^cli\/[^/]+$/.test(r)||!Xe(o))continue;let i=e[r.slice(4)];if(!i||typeof o.model!="string"||o.model.length===0||!i.models.some(f=>f.id===o.model))continue;let s=i.providerOptions??[],a=Md(o.query,s),d=Md(o.execute,s);if(!a||!d)continue;let c=new Set(i.modes.map(f=>f.id));if(!c.has(a.mode)||!c.has(d.mode))continue;let l=cm(i,o.model);!l.includes(a.effort)||!l.includes(d.effort)||(n[r]={model:o.model,query:a,execute:d});}return n}async function um(t){let e=t?.ttlMs??rm,n=Date.now();if(!(n-Dd<e)){Dd=n;try{let r=await fetch(t?.endpoint??nm);if(!r.ok){hn({});return}let o=await r.json();if(!o?.providers||typeof o.providers!="object"){hn({});return}let i={};for(let[s,a]of Object.entries(o.providers)){let d=Array.isArray(a);if(!d&&!Xe(a))continue;let c=d?[]:sm(a.providerOptions);if(c===void 0)continue;let l=d?a:Array.isArray(a.models)?a.models:[],f=d?[]:Array.isArray(a.modes)?a.modes:[],g=d?[]:Array.isArray(a.effort)?a.effort:[],m=d||!Xe(a.modelOverrides)?{}:a.modelOverrides,k=l.filter(h=>h!=null&&typeof h.id=="string").map(h=>({id:h.id,name:h.name??h.id,...h.description!=null?{description:h.description}:{},...om(h.contextWindowTokens)?{contextWindowTokens:h.contextWindowTokens}:{},...im(h.tier)?{tier:h.tier}:{},...h.recommended===!0?{recommended:!0}:{}}));i[s]={models:k,modes:f.filter(h=>h!=null&&typeof h.id=="string").map(h=>({id:h.id,name:h.name??h.id,...h.description!=null?{description:h.description}:{}})),effort:g.filter(h=>typeof h=="string"),modelOverrides:m,providerOptions:c};}vo(i),ms(dm(o.models)),hn(lm(o.defaults,i));}catch{hn({});}}}u();function pm(t,e){let n=t.skills?.include;if(n===void 0)return [...e];if(n.length===0)return [];let r=new Set(n);return e.filter(o=>r.has(o))}u();var Ji=["codex","claude","grok","opencode","antigravity","copilot"];function fm(t){let e=t.indexOf("/");return e===-1?t:t.slice(e+1)}function Ki(t){let e=fm(t),n=Ji.indexOf(e);return n===-1?Ji.length:n}function or(t,e){return Ki(t)-Ki(e)}var gm=new Set(["claude","copilot","codex","grok","opencode"]);function mm(t){if(!t)return "";if(t.startsWith("acp/")){let e=t.slice(4);if(gm.has(e))return `cli/${e}`}return t}Re();qe();Pi();Ci();u();Si();gt();u();no();ao();Re();var hm="model",ym="mode",wm="thought_level";function Xi(t){if(t.length===0)return [];if(t[0]?.group!=null){let e=[];for(let n of t)for(let r of n.options??[])e.push(r);return e}return t}function _m(t,e){let n=new Map;for(let r of [...t,...e])n.has(r.id)||n.set(r.id,r);return Array.from(n.values())}function km(t,e,n,r){let o=n.agentInfo?.name,i=e??o??t,s=r.configOptions??[],d=(r.modes?.availableModes??[]).map(w=>({id:w.id,name:w.name,...w.description!=null?{description:w.description}:{}})),c=[];for(let w of s)if(w.category?.trim().toLowerCase()===ym&&w.options!=null)for(let _ of Xi(w.options))_.value!=null&&c.push({id:_.value,name:_.name??_.value});let l=_m(d,c),f=[];for(let w of s)if(w.category?.trim().toLowerCase()===wm&&w.type==="select")for(let _ of Xi(w.options??[]))_.value!=null&&f.push(_.value);if(t==="claude"){let w=kn(wn()),_=Ud(n);return Ld(t,{models:w,modes:l,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${t}`,name:i,modes:l,effort:f,models:w,capabilities:_}}let m=(r.models?.availableModels??[]).map(w=>({id:w.modelId})),k=[];for(let w of s)if(w.category?.trim().toLowerCase()===hm&&w.options!=null)for(let _ of Xi(w.options))_.value!=null&&k.push({id:_.value,..._.name!=null?{name:_.name}:{}});let h=kn(_n(m,k));Ld(t,{models:h,modes:l,availableModelsCount:m.length,configModelsCount:k.length,skipModelWarn:false});let v=Ud(n);return {id:`acp/${t}`,name:i,modes:l,effort:f,models:h,capabilities:v}}function Ud(t){let e=t.agentCapabilities??{};return {loadSession:e.loadSession??false,image:e.promptCapabilities?.image??false,audio:e.promptCapabilities?.audio??false,mcp:e.mcpCapabilities!=null}}function Ld(t,e){!e.skipModelWarn&&e.models.length===0&&console.warn(`[acp] ${t} meta: models empty (availableModels=${e.availableModelsCount}, configOptions[model]=${e.configModelsCount})`),e.modes.length===0&&console.warn(`[acp] ${t} meta: modes empty`);}async function $d(t){let e=exports.ACP_ADAPTERS[t];if(!e)return null;let n=e.meta?.displayName,r=new exports.AcpConnection({spawn:e.spawn,cwd:process.cwd()});try{await r.connect(e.clientInfo);let o=r.initResponse;if(!o)return null;let i=e.buildSessionParams({cwd:process.cwd()}),s=await r.newSessionRaw(i);return km(t,n,o,s)}catch(o){return console.warn(`[acp] ${t} meta query failed: ${o instanceof Error?o.message:String(o)}`),null}finally{await r.dispose();}}async function vm(){let t=Object.keys(exports.ACP_ADAPTERS),e=await Promise.allSettled(t.map(r=>$d(r))),n=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&n.push(r.value);return n.sort((r,o)=>or(r.id,o.id))}no();Oi();ao();Li();Rr();ft();u();ft();Re();function xm(t){return t.charAt(0).toUpperCase()+t.slice(1)}async function Bd(){return new Promise(t=>{child_process.execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(n,r)=>{if(n){t([]);return}let o=r.split(`
|
|
398
|
+
`).map(i=>i.trim()).filter(i=>i.length>0).map(i=>({id:i}));t(o);}).on("error",()=>t([]));})}function Rm(t,e,n){if(!e.meta)return null;let r=e.meta.capabilities??{},o=Ze(t),i=o.length>0?o:e.meta.models??[],s=n!==void 0?_n(n,i):i,a=pr(`cli/${t}`),d=Oe(t).providerOptions??[];return {id:`cli/${t}`,name:e.meta.displayName??xm(t),modes:yn(t),effort:Rt(t),models:kn(s),modelOverrides:vs(t),...d.length>0?{providerOptions:d}:{},...a!==void 0?{defaults:a}:{},capabilities:{loadSession:r.loadSession??false,resume:r.resume??false,image:r.image??false,audio:r.audio??false,mcp:r.mcp??false}}}async function bm(t={}){let e=t.includeOpencodeRuntimeModels?await Bd():void 0,n=[];for(let[r,o]of Object.entries(exports.BUILTIN_ADAPTERS)){let s=Rm(r,o,r==="opencode"?e:void 0);s&&n.push(s);}return n.sort((r,o)=>or(r.id,o.id))}u();var Yi=0;function Tm(t){let e=t.meta?.taskId,n=e?` taskId=${e}`:"";if(t.ok)return `Task completed:${n}
|
|
399
|
+
|
|
400
|
+
${t.data}`;let r=t.error?.message??"Unknown error";return `Task failed:${n}
|
|
401
|
+
Error: ${r}`}function Am(t){let e=Array.from(t.agents.keys());return {name:"delegate_to_agent",description:`Delegate a task to another agent. Available agents: ${e.join(", ")}`,parameters:{type:"object",properties:{agent:{type:"string",description:`Agent ID to delegate to. One of: ${e.join(", ")}`},message:{type:"string",description:"Task description for the target agent"},mode:{type:"string",description:'Execution mode: "query" for questions, "execute" for actions. Default: query'}},required:["agent","message"]},execute:async n=>{if(Yi>=3)return "Error: Maximum delegation depth (3) reached. Cannot delegate further.";let r=n.agent,o=n.message,i=n.mode??"query";if(!e.includes(r))return `Error: Unknown agent "${r}". Available: ${e.join(", ")}`;Yi++;try{let s=i==="execute"?await t.execute(r,o):await t.query(r,o);return Tm(s)}finally{Yi--;}}}}u();var jd=typeof process<"u"?process.env:{};function Im(){return jd.CREWX_CLI||"npx crewx"}function Pm(){return jd.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}u();u();u();var we="[REDACTED]",Fd="[PATH]";function Qi(t){if(typeof t!="string")return;let e=t.trim();if(e)return e=e.replace(/^\s*at\s+[^\r\n]+(?:\r?\n|$)/gim,""),e=e.replace(/(^|[\r\n])\s*(?:authorization|proxy-authorization|x-api-key|x-goog-api-key|x-auth-token|cookie|set-cookie)\s*:\s*[^\r\n]*/gim,`$1[HTTP HEADER ${we}]`),e=Sm(e),e=e.replace(/\b(?:Bearer|Basic)\s+[A-Za-z0-9._~+\-/]+=*/gi,`${we}`),e=e.replace(/\bsk-[A-Za-z0-9][A-Za-z0-9_-]*/g,we),e=e.replace(/\bghp_[A-Za-z0-9][A-Za-z0-9_-]*/g,we),e=e.replace(/\bxoxb-[A-Za-z0-9-]+/g,we),e=e.replace(/\bxoxp-[A-Za-z0-9-]+/g,we),e=e.replace(/\bAKIA[0-9A-Z]{12,}\b/g,we),e=e.replace(/\bgithub_pat_[A-Za-z0-9_]+/g,we),e=e.replace(/\bgho_[A-Za-z0-9_]+/g,we),e=e.replace(/\bAIza[A-Za-z0-9_-]{20,}\b/g,we),e=e.replace(/\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,we),e=e.replace(/\b(?:authorization|api[_ -]?key|access[_ -]?token|auth[_ -]?token|refresh[_ -]?token|token|secret|password)\s*([:=])\s*["']?[^\s,;&"']+/gi,(n,r)=>`${we}${r}${we}`),e=e.replace(/([?&](?:api[_-]?key|access[_-]?token|token)=)[^&\s]+/gi,`$1${we}`),e=e.replace(/(?:\/(?:Users|home|private|var\/folders|tmp|workspace|workspaces|Volumes|opt|etc|srv|Applications)\/[^\s"'`),;]+)/g,Fd),e=e.replace(/\b[A-Z]:\\(?:Users|home|Windows|Program Files|workspace|workspaces)\\[^\s"'`),;]*/gi,Fd),e=e.replace(/[\r\n]{3,}/g,`
|
|
265
402
|
|
|
266
|
-
|
|
267
|
-
Error: ${r}`}function _d(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(yn>=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(", ")}`;yn++;try{let i=s==="execute"?await n.execute(r,o):await n.query(r,o);return kd(i)}finally{yn--;}}}}c();var qo=typeof process<"u"?process.env:{};function vd(){return qo.CREWX_CLI||"npx crewx"}function Ad(){return qo.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}c();var Ed=/^[a-zA-Z0-9._-]+$/,hn=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(!Ed.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return $e("box")}};c();function Rd(n,e,t,r,o){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=r,d=s*i,l=s*a,u=d+l,g=e.getThreadMessages(n),f=[],p=0,h=false,x=[];for(let _=0;_<g.length;_+=2){let k=g[_],b=g[_+1],P=k?.content||"",B=b?.content||"",q=o.countTokens(P+B),A=[];k&&A.push(k),b&&A.push(b),x.push({messages:A,tokens:q});}for(let _=x.length-1;_>=0;_--){let k=x[_];if(p+k.tokens>d){h=true;break}p+=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 b=_[k],P=b.summaryTokens??b.sourceTokens;if(w+P>l)break;w+=P,v.unshift({boxId:b.id,seq:b.seq,taskCount:b.taskCount,sourceTokens:b.sourceTokens,summary:b.summary,previewFirst:b.previewFirst,previewMid:b.previewMid,previewLast:b.previewLast,createdAt:b.createdAt});}}catch(_){if(_ instanceof Error&&!/not found/i.test(_.message))throw _}return {hot:f,warm:v,hotTokens:p,warmTokens:w,hotOverflow:h,totalBudget:u,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}Ce();Ye();c();var ir=class extends Error{constructor(t,r){super(`Task ${t} timed out after ${r}ms`);this.taskId=t;this.timeoutMs=r;this.name="ParallelRunnerTimeoutError";}taskId;timeoutMs},bt=class{constructor(e={}){this.defaults=e;}defaults;metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0};async run(e,t={}){if(!Array.isArray(e))throw new TypeError("ParallelRunner.run expects an array of tasks");if(e.length===0)return this.metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0},[];let r=this.mergeOptions(t),o=Math.max(1,r.maxConcurrency??5),s=r.timeoutMs,i=r.failFast??false,a=r.callbacks,d=r.evaluateTaskSuccess??(()=>true),l=[],u=0,g=0,f=0,p=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,S)=>{W=setTimeout(()=>{let R=new ir(A.id,s);H.abort(R),S(R);},s);}));let K=perf_hooks.performance.now(),F=A.run(z),E=j?Promise.race([F,j]):F;try{let I=await E,S=perf_hooks.performance.now(),R=S-K,$=d(I,A),X={taskId:A.id,success:$,value:I,durationMs:R,startedAt:K,finishedAt:S,metadata:A.metadata,aborted:!1};l.push(X),$?u+=1:g+=1,a?.onTaskComplete&&await a.onTaskComplete(X),i&&!$&&(p=!0);}catch(I){let S=perf_hooks.performance.now(),R=S-K,$=I instanceof Error?I:new Error(String(I)),X={taskId:A.id,success:false,error:$,durationMs:R,startedAt:K,finishedAt:S,metadata:A.metadata,aborted:H.signal.aborted};l.push(X),g+=1,a?.onError&&await a.onError(A,$,R),i&&(p=true);}finally{W&&clearTimeout(W),j&&F.catch(()=>{});}},w=async()=>{for(;!p;){let A=h;if(A>=e.length)break;h+=1;let H=e[A];if(!H||(await v(H),p))break}},_=Math.min(o,e.length),k=[];for(let A=0;A<_;A++)k.push(w());await Promise.all(k);let P=perf_hooks.performance.now()-x,B=l.length?l.reduce((A,H)=>A+H.durationMs,0)/l.length:0,q=P>0?l.length/(P/1e3):l.length;return this.metrics={totalTasks:e.length,startedTasks:f,completedTasks:l.length,successCount:u,failureCount:g,totalDurationMs:P,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 It=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 Bo=3,Wo=3e4,zo=500,Cd=n=>{if(typeof n!="number"||Number.isNaN(n)||!Number.isFinite(n))return Bo;let e=Math.floor(n);return e>0?e:Bo},Td=n=>n===void 0||typeof n!="number"||Number.isNaN(n)||n<=0?Wo:n,Pd=n=>{if(!n)return {maxRetries:0,retryDelay:zo};let e=Number.isInteger(n.maxRetries)&&n.maxRetries>=0?n.maxRetries:0,t=typeof n.retryDelay=="number"&&n.retryDelay>=0?n.retryDelay:zo;return {maxRetries:e,retryDelay:t}},wn=n=>{let e=n.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},Sd=(n,e)=>n<=0?Promise.resolve():new Promise((t,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},n),s=()=>{clearTimeout(o),r(wn(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),bd=async(n,e,t)=>{let r,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw wn(t);try{let i=await n();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw wn(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await Sd(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")},Ko=(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);}},Id=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}}}),Od=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")}}),Md=(n,e)=>({onTaskComplete:async t=>{Ko(e,n,t.success);},onError:async()=>{Ko(e,n,false);}}),Vo=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=Cd(t.concurrency),o=Td(t.timeout),s=Pd(t.retryPolicy),i=new bt,a=new It,d=n.map((x,v)=>({id:`${e}:${x.agentId??"anonymous"}:${v}`,metadata:{index:v,mode:e,request:x},run:w=>bd(()=>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:Md(l,t)}),g=Id(u),f=Od(u),p=i.getMetrics(),h={total:n.length,completed:n.length,successCount:g.filter(x=>x.success).length,failureCount:g.filter(x=>!x.success).length,results:g,errors:f,metrics:p};return t.onComplete?.(h),g},Nd=(n,e)=>Vo(n,"query",e),Dd=(n,e)=>Vo(n,"execute",e);sn();c();var xn=class extends rt{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);go.existsSync(o)||go.mkdirSync(o,{recursive:true});}else if(!go.existsSync(t))throw new M("NOT_FOUND","Database not found");let r=_e(t);if(e)try{Vt(r.db,t);}catch(o){throw r.close(),o}return r}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(He).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(He).where(drizzleOrm.eq(He.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(He).where(drizzleOrm.eq(He.id,e)).limit(1).get()??void 0}catch(r){throw new M("DB_ERROR","Failed to find span by id",r)}finally{t.close();}}};on();nn();rn();c();c();var ar=class{capabilities={required:[]}};c();c();c();var Jo=2e3;function Yo(n){let e=n.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=Jo?e:e.slice(0,Jo-11)+" [redacted]"}var Kd=10*1024*1024,Vd={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function kn(n,e){return n===void 0?true:Array.isArray(n)?n.includes(e):n===e}function Gd(n,e){return n===void 0?true:Array.isArray(n)?n.some(t=>e.includes(t)):e.includes(n)}function Zo(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*(Vd[r]??1))}function es(n){return typeof n=="string"}function ts(n){try{let e=go.statSync(n);return e.size>Kd?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${n} (${e.size} bytes)
|
|
268
|
-
`),null):go.readFileSync(n,"utf8").split(`
|
|
269
|
-
`)
|
|
403
|
+
`).trim(),Cm(e,1024)||void 0}function Cm(t,e){let n=new TextEncoder;if(n.encode(t).byteLength<=e)return t;let r="",o=0;for(let i of t){let s=n.encode(i).byteLength;if(o+s>e)break;r+=i,o+=s;}return r}function Sm(t){let e=/\b(?:request|response|http)?\s*body\s*[:=]\s*/gim,n="",r=0,o;for(;(o=e.exec(t))!==null;){if(o.index<r)continue;let i=o.index+o[0].length,s=Om(t,i),a=s>=0?s:t.indexOf(`
|
|
404
|
+
`,i)>=0?t.indexOf(`
|
|
405
|
+
`,i):t.length;n+=t.slice(r,o.index),n+=`[HTTP BODY ${we}]`,r=a;}return n+t.slice(r)}function Om(t,e){let n=t[e];if(n==='"'||n==="'")return Nm(t,e,n);if(n!=="{"&&n!=="[")return -1;let r=[],o,i=false;for(let s=e;s<t.length;s+=1){let a=t[s];if(o){i?i=false:a==="\\"?i=true:a===o&&(o=void 0);continue}if(a==='"'||a==="'"){o=a;continue}if(a==="{"||a==="["){r.push(a);continue}if(a!=="}"&&a!=="]")continue;let d=r.pop();if(a==="}"&&d!=="{"||a==="]"&&d!=="[")return -1;if(r.length===0)return s+1}return -1}function Nm(t,e,n){let r=false;for(let o=e+1;o<t.length;o+=1){let i=t[o];if(r)r=false;else if(i==="\\")r=true;else if(i===n)return o+1}return -1}var Dm=new Set(["USAGE_LIMITED","CONTEXT_WINDOW_EXCEEDED","INPUT_TOO_LARGE","MODEL_NOT_SUPPORTED","MODEL_AT_CAPACITY","AUTH_REQUIRED","CLI_NOT_AVAILABLE","CLI_UPDATE_REQUIRED","AGENT_NOT_FOUND","PERMISSION_OR_TRUST","TIMEOUT_OR_STUCK","NETWORK_OR_PROVIDER_TRANSIENT","PROVIDER_CONFIGURATION","PROCESS_FAILED"]),Mm={QUOTA_EXHAUSTED:"USAGE_LIMITED",RATE_LIMITED:"USAGE_LIMITED",AUTH_REQUIRED:"AUTH_REQUIRED",TIMEOUT_IDLE:"TIMEOUT_OR_STUCK",TIMEOUT_TOTAL:"TIMEOUT_OR_STUCK",PROVIDER_NOT_FOUND:"PROVIDER_CONFIGURATION",INVALID_PROVIDER_FORMAT:"PROVIDER_CONFIGURATION",PROVIDER_CRASHED:"PROCESS_FAILED",EMPTY_OUTPUT:"PROCESS_FAILED"},Um=[{code:"USAGE_LIMITED",pattern:/(?:rate[ _-]?limit|quota|usage[ /_-]?limit|usage exhausted|too many requests|429\b)/i},{code:"CONTEXT_WINDOW_EXCEEDED",pattern:/context (?:window|length)|maximum context|context[_ -]?window[_ -]?exceeded|too many tokens/i},{code:"INPUT_TOO_LARGE",pattern:/input[_ -]?(?:is[_ -]?)?too[_ -]?large|prompt (?:is )?too (?:large|long)|request[_ -]?(?:is[_ -]?)?too[_ -]?large|payload[_ -]?(?:is[_ -]?)?too[_ -]?large|maximum input/i},{code:"MODEL_AT_CAPACITY",pattern:/(?:model|service|provider).*(?:at capacity|overloaded|temporarily busy)|at capacity|overloaded/i},{code:"MODEL_NOT_SUPPORTED",pattern:/(?:model|invalid_request_error).*(?:not[ _-]?supported|unsupported|does[ _-]?not[ _-]?exist|not[ _-]?found|invalid)|model[_-]?not[_-]?(?:found|supported)/i},{code:"AUTH_REQUIRED",pattern:/(?:401\b|unauthori[sz]ed|not logged in|login required|sign[ -]?in required|api key (?:is )?(?:missing|invalid|required)|authentication required)/i},{code:"CLI_UPDATE_REQUIRED",pattern:/(?:requires? a newer version|update (?:your )?cli|cli version.*(?:old|outdated|unsupported)|version mismatch)/i},{code:"CLI_NOT_AVAILABLE",pattern:/(?:ENOENT|command not found|executable.*not found|cli.*(?:not installed|unavailable)|is .* installed\?)/i},{code:"AGENT_NOT_FOUND",pattern:/agent[_ -]?not[_ -]?found|unknown agent/i},{code:"PERMISSION_OR_TRUST",pattern:/(?:permission denied|operation not permitted|workspace trust|not trusted|access denied|EACCES|EPERM)/i},{code:"TIMEOUT_OR_STUCK",pattern:/(?:timeout|timed out|took too long|stuck|idle timeout|ETIMEDOUT)/i},{code:"NETWORK_OR_PROVIDER_TRANSIENT",pattern:/(?:network (?:unreachable|error)|connection (?:reset|refused|closed)|ECONN(?:RESET|REFUSED|ABORTED)|service unavailable|upstream.*(?:5\d\d|error)|provider.*(?:5\d\d|unavailable|down)|\b5\d\d\b)/i},{code:"PROVIDER_CONFIGURATION",pattern:/(?:invalid provider|unsupported provider|provider namespace|provider configuration|provider config|missing provider)/i}];function Lm(t){try{if(!vt(t)||t.status!=="failed")return Zi();let e=$m(t.error);if(ns(e.message))return Zi();let n=Se(t.providerId)??e.provider??null,r=jm(t.logs),o=Wd(e.code);if(o)return ir(o,n,e.message,e);let i=lo(e.providerCode)??lo(e.code),s=i?ts(i,e.message):void 0;if(s)return ir(s,n,e.message,e,i);let a=Fm(r);if(!Bm(e)&&a&&(a.type==="user_stop"||ns(a.message)))return Zi();if(a){let c=Hm(a.code,a.providerCode,a.message);if(c)return ir(c,n,a.message??e.message,e,a.providerCode??a.code,a,a.structuredFailure?"terminal":"envelope")}let d=Wm(e.message,r);return d?ir(d.code,n,d.message,e,d.terminal?.providerCode??d.terminal?.code,d.terminal,d.terminal?.structuredFailure?"terminal":"envelope"):ir("PROCESS_FAILED",n,e.message,e)}catch{return {errorCode:"PROCESS_FAILED",errorProvider:null}}}function Zi(){return {errorCode:null,errorProvider:null}}function ir(t,e,n,r,o,i,s="envelope"){let a={};if(i?.resetAt!==void 0&&(a.resetAt=i.resetAt),r?.model&&(a.model=r.model),i?.type&&(a.upstreamType=i.type),o&&(a.upstreamCode=o),t==="CLI_NOT_AVAILABLE"||t==="CLI_UPDATE_REQUIRED"){let f=e?.startsWith("cli/")?e.slice(4):void 0;f&&(a.cliName=f);}let d=s==="terminal"?n:r?.message,c=s==="terminal"?i?.structuredFailure?d:void 0:r?.isEnvelope?d:void 0,l=Qi(c);return l&&(a.technicalMessage=l),Object.keys(a).length>0?{errorCode:t,errorProvider:e,errorMeta:a}:{errorCode:t,errorProvider:e}}function $m(t){let e=typeof t=="string"?ln(t):t;return vt(e)?{isEnvelope:true,code:Se(e.code),providerCode:Se(e.providerCode),message:Se(e.message)??Se(e.error),provider:Se(e.provider)??Se(e.errorProvider),model:Se(e.model)}:{isEnvelope:false,...typeof t=="string"&&t.trim()?{message:t.trim()}:{}}}function ln(t){try{return JSON.parse(t)}catch{return}}function Bm(t){return !!(t.code||t.providerCode||t.message)}function jm(t){let e=[];if(typeof t=="string"){let n=ln(t);if(Array.isArray(n))e.push(...n);else for(let r of t.split(/\r?\n/)){let o=ln(r.trim());o!==void 0&&e.push(o);}}else Array.isArray(t)?e.push(...t):vt(t)&&e.push(t);return e.flatMap(cn)}function cn(t){if(!vt(t))return [];let e=Se(t.type),n=Se(t.message);if(n&&!e){let o=ln(n);if(Array.isArray(o))return o.flatMap(cn);if(vt(o))return cn(o);let i=n.split(/\r?\n/).map(s=>ln(s.trim())).filter(s=>vt(s));return i.length>0?i.flatMap(cn):t.level==="stderr"?[{type:"stderr",message:n,rank:1,structuredFailure:false}]:cn({type:"info",content:n})}if(e==="rate_limit_event"){let o=Hd(t.rate_limit_info);return Se(o?.status)!=="rejected"?[]:[{type:e,code:"RATE_LIMITED",message:sr(o?.message,t.message),resetAt:qm(o?.resetsAt),rank:4,structuredFailure:true}]}if(e==="turn.failed"||e==="error"){let o=Hd(t.error),i=sr(o?.message,o?.detail,t.message,t.errorMessage,t.content),s=sr(o?.code,t.code,t.errorCode);return [{type:e,code:s,providerCode:sr(o?.providerCode,t.providerCode),message:i,rank:e==="turn.failed"?3:2,structuredFailure:true}]}if(e==="text"&&typeof t.content=="string"){let o=ln(t.content);if(vt(o))return cn(o)}let r=sr(t.errorMessage,t.content);return r&&ns(r)?[{type:"user_stop",message:r,rank:1,structuredFailure:false}]:r&&/(?:turn\.failed|type:error)/i.test(r)?[{type:r.match(/turn\.failed/i)?"turn.failed":"error",message:r,rank:3,structuredFailure:false}]:[]}function Fm(t){return [...t].sort((e,n)=>n.rank-e.rank)[0]}function Hm(t,e,n){let r=Wd(t);if(r)return r;if(t){let o=ts(t,n);if(o)return o}if(e){let o=ts(e,n);if(o)return o}return es(n)}function Wm(t,e){let n=es(t);if(n)return {code:n,message:t};for(let r of [...e].sort((o,i)=>i.rank-o.rank)){let o=es(r.message);if(o)return {code:o,message:r.message,terminal:r}}}function es(t){if(!(typeof t!="string"||!t.trim()))return Um.find(e=>e.pattern.test(t))?.code}function ts(t,e){let n=lo(t)??t;if(n==="MODEL_UNAVAILABLE")return /(?:capacity|overloaded|busy)/i.test(e??"")?"MODEL_AT_CAPACITY":"MODEL_NOT_SUPPORTED";if(n!=="UNKNOWN")return Mm[n]}function Wd(t){let e=lo(t);return e&&Dm.has(e)?e:void 0}function lo(t){return typeof t=="string"&&t.trim()?t.trim().toUpperCase():void 0}function ns(t){return t?/\b(?:stopped|killed|aborted|cancelled|canceled)\s+by\s+user\b/i.test(t)||/사용자에 의해 중지됨/.test(t)||/\b(?:SIGTERM\s+143|143\s+SIGTERM)\b/i.test(t):false}function vt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Hd(t){return vt(t)?t:void 0}function Se(t){return typeof t=="string"&&t.trim()?t.trim():void 0}function qm(t){return typeof t=="string"||typeof t=="number"&&Number.isFinite(t)?t:void 0}function sr(...t){return t.map(Se).find(e=>!!e)}u();var zm=/^[a-zA-Z0-9._-]+$/,rs=class{constructor(e){this.storage=e;}storage;listBoxes(e){this.validateId(e);let r=this.storage.listBoxes(e).map(o=>this.toBoxResponse(o));return {boxes:r,total:r.length}}getBox(e,n){this.validateId(e),this.validateId(n);let r=this.storage.findBox(e,n);return r?this.toBoxResponse(r):null}createBox(e,n){this.validateId(e);let r=this.generateBoxId(),o=new Date().toISOString(),i=this.storage.insertBox(e,{id:r,seq:n.seq,firstTaskId:n.firstTaskId,midTaskId:n.midTaskId,lastTaskId:n.lastTaskId,taskCount:n.taskCount,summary:n.summary??null,sourceTokens:n.sourceTokens,summaryTokens:n.summaryTokens??null,createdAt:o});return this.toBoxResponse(i)}toBoxResponse(e){return {id:e.id,threadId:e.thread_id,seq:e.seq,firstTaskId:e.first_task_id,lastTaskId:e.last_task_id,taskCount:e.task_count,sourceTokens:e.source_tokens,summaryTokens:e.summary_tokens,summary:e.summary,previewFirst:this.storage.getTaskPreview(e.first_task_id,200),previewMid:this.storage.getTaskPreview(e.mid_task_id,200),previewLast:this.storage.getTaskPreview(e.last_task_id,200),createdAt:e.created_at}}validateId(e){if(!zm.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return it("box")}};u();function Gm(t,e,n,r,o){let{maxTokens:i,hotzoneRatio:s,warmzoneRatio:a}=r,d=i*s,c=i*a,l=d+c,f=e.getThreadMessages(t),g=[],m=0,k=false,h=[];for(let _=0;_<f.length;_+=2){let R=f[_],b=f[_+1],L=R?.content||"",A=b?.content||"",Z=o.countTokens(L+A),P=[];R&&P.push(R),b&&P.push(b),h.push({messages:P,tokens:Z});}for(let _=h.length-1;_>=0;_--){let R=h[_];if(m+R.tokens>d){k=true;break}m+=R.tokens,g.unshift(...R.messages);}let v=[],w=0;if(k&&c>0)try{let{boxes:_}=n.listBoxes(t);for(let R=_.length-1;R>=0;R--){let b=_[R],L=b.summaryTokens??b.sourceTokens;if(w+L>c)break;w+=L,v.unshift({boxId:b.id,seq:b.seq,taskCount:b.taskCount,sourceTokens:b.sourceTokens,summary:b.summary,previewFirst:b.previewFirst,previewMid:b.previewMid,previewLast:b.previewLast,createdAt:b.createdAt});}}catch(_){if(_ instanceof Error&&!/not found/i.test(_.message))throw _}return {hot:g,warm:v,hotTokens:m,warmTokens:w,hotOverflow:k,totalBudget:l,config:{maxTokens:i,hotzoneRatio:s,warmzoneRatio:a}}}ft();Ct();u();var uo=class extends Error{constructor(n,r){super(`Task ${n} timed out after ${r}ms`);this.taskId=n;this.timeoutMs=r;this.name="ParallelRunnerTimeoutError";}taskId;timeoutMs},dr=class{constructor(e={}){this.defaults=e;}defaults;metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0};async run(e,n={}){if(!Array.isArray(e))throw new TypeError("ParallelRunner.run expects an array of tasks");if(e.length===0)return this.metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0},[];let r=this.mergeOptions(n),o=Math.max(1,r.maxConcurrency??5),i=r.timeoutMs,s=r.failFast??false,a=r.callbacks,d=r.evaluateTaskSuccess??(()=>true),c=[],l=0,f=0,g=0,m=false,k=0,h=perf_hooks.performance.now(),v=async P=>{a?.onTaskStart&&await a.onTaskStart(P),g+=1;let F=new AbortController,ce={signal:F.signal},X,re;typeof i=="number"&&Number.isFinite(i)&&i>0&&(re=new Promise((z,$)=>{X=setTimeout(()=>{let W=new uo(P.id,i);F.abort(W),$(W);},i);}));let H=perf_hooks.performance.now(),O=P.run(ce),te=re?Promise.race([O,re]):O;try{let z=await te,$=perf_hooks.performance.now(),W=$-H,fe=d(z,P),ee={taskId:P.id,success:fe,value:z,durationMs:W,startedAt:H,finishedAt:$,metadata:P.metadata,aborted:!1};c.push(ee),fe?l+=1:f+=1,a?.onTaskComplete&&await a.onTaskComplete(ee),s&&!fe&&(m=!0);}catch(z){let $=perf_hooks.performance.now(),W=$-H,fe=z instanceof Error?z:new Error(String(z)),ee={taskId:P.id,success:false,error:fe,durationMs:W,startedAt:H,finishedAt:$,metadata:P.metadata,aborted:F.signal.aborted};c.push(ee),f+=1,a?.onError&&await a.onError(P,fe,W),s&&(m=true);}finally{X&&clearTimeout(X),re&&O.catch(()=>{});}},w=async()=>{for(;!m;){let P=k;if(P>=e.length)break;k+=1;let F=e[P];if(!F||(await v(F),m))break}},_=Math.min(o,e.length),R=[];for(let P=0;P<_;P++)R.push(w());await Promise.all(R);let L=perf_hooks.performance.now()-h,A=c.length?c.reduce((P,F)=>P+F.durationMs,0)/c.length:0,Z=L>0?c.length/(L/1e3):c.length;return this.metrics={totalTasks:e.length,startedTasks:g,completedTasks:c.length,successCount:l,failureCount:f,totalDurationMs:L,averageDurationMs:A,throughput:Z},c}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,n){if(!(!e&&!n))return {onTaskStart:async r=>{e?.onTaskStart&&await e.onTaskStart(r),n?.onTaskStart&&await n.onTaskStart(r);},onTaskComplete:async r=>{e?.onTaskComplete&&await e.onTaskComplete(r),n?.onTaskComplete&&await n.onTaskComplete(r);},onError:async(r,o,i)=>{e?.onError&&await e.onError(r,o,i),n?.onError&&await n.onError(r,o,i);}}}};u();u();var cr=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 qd=3,zd=3e4,Gd=500,Vm=t=>{if(typeof t!="number"||Number.isNaN(t)||!Number.isFinite(t))return qd;let e=Math.floor(t);return e>0?e:qd},Jm=t=>t===void 0||typeof t!="number"||Number.isNaN(t)||t<=0?zd:t,Km=t=>{if(!t)return {maxRetries:0,retryDelay:Gd};let e=Number.isInteger(t.maxRetries)&&t.maxRetries>=0?t.maxRetries:0,n=typeof t.retryDelay=="number"&&t.retryDelay>=0?t.retryDelay:Gd;return {maxRetries:e,retryDelay:n}},os=t=>{let e=t.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},Xm=(t,e)=>t<=0?Promise.resolve():new Promise((n,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",i),n();},t),i=()=>{clearTimeout(o),r(os(e));};if(e.aborted){i();return}e.addEventListener("abort",i,{once:true});}),Ym=async(t,e,n)=>{let r,o;for(let i=0;i<=e.maxRetries;i++){if(n.aborted)throw os(n);try{let s=await t();if(r=s,s.success||i===e.maxRetries)return s}catch(s){if(o=s,n.aborted)throw os(n);if(i===e.maxRetries)throw s instanceof Error?s:new Error(String(s))}i<e.maxRetries&&await Xm(e.retryDelay,n);}if(r)return r;throw o?o instanceof Error?o:new Error(String(o)):new Error("Parallel helper encountered an unexpected state")},Vd=(t,e,n)=>{e.completed+=1,n?e.success+=1:e.failure+=1;try{t.onProgress?.(e.completed,e.total);}catch(r){process.env.NODE_ENV!=="production"&&console.warn("Parallel helper onProgress callback threw an error:",r);}},Qm=t=>t.map(n=>({metadata:n.metadata,taskResult:n})).slice().sort((n,r)=>n.metadata.index-r.metadata.index).map(({metadata:n,taskResult:r})=>{if(r.value){let i=r.value;return {...i,agentId:i.agentId??n.request.agentId,metadata:{...i.metadata,requestIndex:n.index,mode:n.mode}}}let o=r.error??new Error("Unknown error");return {agentId:n.request.agentId,content:o.message,success:false,metadata:{error:o.message,aborted:r.aborted??false,requestIndex:n.index,mode:n.mode}}}),Zm=t=>t.filter(e=>!e.success).map(e=>{let n=e.metadata;if(e.error instanceof Error)return {index:n.index,error:e.error};if(e.value&&!e.value.success){let r=String(e.value.metadata?.error??e.value.content??"Agent returned unsuccessful result");return {index:n.index,error:new Error(r)}}return {index:n.index,error:new Error("Unknown failure")}}),eh=(t,e)=>({onTaskComplete:async n=>{Vd(e,t,n.success);},onError:async()=>{Vd(e,t,false);}}),Jd=async(t,e,n={})=>{if(!Array.isArray(t))throw new TypeError("Parallel helpers expect an array of requests");if(t.length===0){let v={total:0,completed:0,successCount:0,failureCount:0,results:[],errors:[],metrics:{totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0}};return n.onComplete?.(v),[]}let r=Vm(n.concurrency),o=Jm(n.timeout),i=Km(n.retryPolicy),s=new dr,a=new cr,d=t.map((h,v)=>({id:`${e}:${h.agentId??"anonymous"}:${v}`,metadata:{index:v,mode:e,request:h},run:w=>Ym(()=>e==="query"?a.query(h):a.execute(h),i,w.signal)})),c={completed:0,success:0,failure:0,total:t.length},l=await s.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:h=>h.success,callbacks:eh(c,n)}),f=Qm(l),g=Zm(l),m=s.getMetrics(),k={total:t.length,completed:t.length,successCount:f.filter(h=>h.success).length,failureCount:f.filter(h=>!h.success).length,results:f,errors:g,metrics:m};return n.onComplete?.(k),f},th=(t,e)=>Jd(t,"query",e),nh=(t,e)=>Jd(t,"execute",e);Fi();ji();Bi();$i();u();u();var po=class{capabilities={required:[]}};u();u();u();var Kd=2e3;function Xd(t){let e=t.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=Kd?e:e.slice(0,Kd-11)+" [redacted]"}var lh=10*1024*1024,uh={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function is(t,e){return t===void 0?true:Array.isArray(t)?t.includes(e):t===e}function ph(t,e){return t===void 0?true:Array.isArray(t)?t.some(n=>e.includes(n)):e.includes(t)}function Qd(t){if(typeof t=="number")return t;let e=t.match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i);if(!e)return 0;let n=parseFloat(e[1]),r=(e[2]??"b").toLowerCase();return Math.floor(n*(uh[r]??1))}function Zd(t){return typeof t=="string"}function ec(t){try{let e=Ua.statSync(t);return e.size>lh?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${t} (${e.size} bytes)
|
|
406
|
+
`),null):Ua.readFileSync(t,"utf8").split(`
|
|
407
|
+
`).length}catch{return null}}function tc(t){try{return Ua.statSync(t).size}catch{return null}}function fh(t,e,n){if(!t)return true;let r=e,o=r?.path??r?.file_path??r?.filePath??r?.filename;if(typeof o!="string")return false;if(Fe(o,t))return true;if(n&&o.startsWith("/")){let{relative:i,isAbsolute:s}=ge("path");if(s(o)){let a=i(n,o);if(a&&!a.startsWith("..")&&Fe(a,t))return true}}return false}function gh(t,e){return t?JSON.stringify(e).includes(t):true}function mh(t,e){if(!t)return true;try{let n=new RegExp(t),r=JSON.stringify(e);return n.test(r)}catch{return false}}function hh(t,e){if(!t)return true;try{let n=new RegExp(t),r=JSON.stringify(e);return n.test(r)}catch{return false}}function yh(t,e){if(t.pathSizeMin===void 0&&t.pathSizeMax===void 0)return true;let n=e,r=n?.path??n?.file_path??n?.filePath??n?.filename;if(typeof r!="string")return false;if(t.pathSizeMin!==void 0)if(Zd(t.pathSizeMin)){let o=tc(r);if(o===null||o<Qd(t.pathSizeMin))return false}else {let o=ec(r);if(o===null||o<t.pathSizeMin)return false}if(t.pathSizeMax!==void 0)if(Zd(t.pathSizeMax)){let o=tc(r);if(o===null||o>Qd(t.pathSizeMax))return false}else {let o=ec(r);if(o===null||o>t.pathSizeMax)return false}return true}function wh(t){let e=[],n=[];for(let r=0;r<t.length;r++){let o=t[r];if(!o||typeof o!="object"){n.push(`Hook at index ${r}: not an object, skipping`);continue}let i=o;if(typeof i.name!="string"||!i.name){n.push(`Hook at index ${r}: missing or invalid "name", skipping`);continue}let s=i.guide&&typeof i.guide=="object",a=i.deny&&typeof i.deny=="object",d=typeof i.plugin=="string";if(!s&&!a&&!d){n.push(`Hook "${i.name}": missing guide/deny/plugin, skipping`);continue}if(s&&typeof i.guide.say!="string"){n.push(`Hook "${i.name}": guide.say is required and must be string, skipping`);continue}if(a&&typeof i.deny.reason!="string"){n.push(`Hook "${i.name}": deny.reason is required and must be string, skipping`);continue}e.push(i);}return {valid:e,warnings:n}}var as=class extends po{name="@crewx/yaml-hook-plugin";version="0.1.0";capabilities={required:["inject"]};hooks;agentMap;constructor(e){super(),this.hooks=e.hooks,this.agentMap=new Map((e.agents??[]).map(n=>[n.id,n]));}async run(e){let n=[],r=process.env.CREWX_TASK_LOG_PATH,o=process.env.CREWX_HOOK_LOG_VERBOSE==="1";for(let i of this.hooks)if(this.matchEntryLevel(i,e)&&i.guide){if(!this.matchRuleLevel(i.guide,e)){o&&r&&this.appendHookLog(r,{rule:i.name,action:"pass",once:i.guide.once??false,ctx:e,matched:false});continue}i.guide.once&&this.hasFired(e.sessionId,i.name)||(i.guide.once&&this.markFired(e.sessionId,i.name),n.push(i.guide.say),r&&this.appendHookLog(r,{rule:i.name,action:"inject",once:i.guide.once??false,ctx:e,matched:true,message:i.guide.say}));}return n.length?e.inject(n.join(`
|
|
270
408
|
|
|
271
|
-
`)):e.pass()}appendHookLog(e,
|
|
272
|
-
`;
|
|
273
|
-
`);}}firedFilePath(e){let
|
|
409
|
+
`)):e.pass()}appendHookLog(e,n){try{let r={rule:n.rule,action:n.action,once:n.once,sessionId:n.ctx.sessionId,provider:n.ctx.provider,agent:n.ctx.agent.id,toolName:n.ctx.tool.name,rawToolName:n.ctx.tool.rawName};n.message&&(r.chars=n.message.length,process.env.CREWX_HOOK_LOG_VERBOSE==="1"&&(r.message=Xd(n.message).slice(0,500)));let o=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
|
|
410
|
+
`;Ua.appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,n){if(e.provider!==void 0){let r=n.provider.replace(/^cli\//,"");if(!is(e.provider,r))return false}if(e.team!==void 0){let o=this.agentMap.get(n.agent.id)?.team??n.agent.team;if(!is(e.team,o))return false}if(e.role!==void 0){let o=this.agentMap.get(n.agent.id)?.role??n.agent.role;if(!is(e.role,o))return false}if(e.tag!==void 0){let o=this.agentMap.get(n.agent.id)?.tags??[];if(!ph(e.tag,o))return false}return !(e.agents!==void 0&&!e.agents.includes(n.agent.id))}matchRuleLevel(e,n){return !(e.when!==void 0&&e.when.length>0&&!e.when.includes(n.tool.name)&&!e.when.includes(n.tool.rawName)||!gh(e.pattern,n.tool.input)||!mh(e.regex,n.tool.input)||!fh(e.pathPattern,n.tool.input,n.cwd)||!yh(e,n.tool.input)||!hh(e.whenInputRegex,n.tool.input))}hasFired(e,n){try{let r=this.firedFilePath(e);if(!Ua.existsSync(r))return !1;let o=JSON.parse(Ua.readFileSync(r,"utf8"));return Array.isArray(o.fired)&&o.fired.includes(n)}catch{return false}}markFired(e,n){try{let r=this.firedFilePath(e);Ua.mkdirSync(K.dirname(r),{recursive:!0,mode:448});let o=Ua.existsSync(r)?JSON.parse(Ua.readFileSync(r,"utf8")):{fired:[]};Array.isArray(o.fired)||(o.fired=[]),o.fired.includes(n)||(o.fired.push(n),Ua.writeFileSync(r,JSON.stringify(o),{mode:384}));}catch(r){process.stderr.write(`[YamlHookPlugin] once state write failed: ${r}
|
|
411
|
+
`);}}firedFilePath(e){let n=crypto$1.createHash("sha1").update(e).digest("hex");return K.join(Ri.homedir(),".crewx","sessions",n,"fired-rules.json")}};u();u();u();function _h(t){let e=t.messages.map(n=>({id:n.id,role:n.isAssistant?"assistant":"user",content:n.text,timestamp:new Date(n.timestamp).toISOString(),metadata:n.metadata??null}));return {getThreadMessages(n){return e}}}u();var ds=class extends Error{code;kind;retryAfterMs;constructor(e,n,r){super(`AdapterError: ${e}`),this.name="AdapterError",this.code=e,this.kind=n,this.retryAfterMs=r;}};u();function kh(t){return t}function vh(t){return {name:t.name,async attach(e){let n=await t.configFactory(e),o=e.registerChannelAdapter,i=t.instanceId??t.name;o&&await o({adapter:t.adapter,instanceId:i,config:n}),t.onAttach&&await t.onAttach(e);},async detach(e){let r=e.unregisterChannelAdapter;r&&await r(t.instanceId??t.name),t.onDetach&&await t.onDetach(e);}}}Jt();exports.ARCHIVE_WI_BOARD_ID=an;exports.AdapterError=ds;exports.AgentNotFoundError=et;exports.AgentRuntime=cr;exports.AgentSkillsSchema=Ts;exports.BrowserFsAdapter=Vi;exports.ConfigLoadError=bt;exports.Crewx=qi;exports.CrewxPlugin=Gi;exports.DEFAULT_INPUT_BUDGET_PERCENT=Rs;exports.DEFAULT_WI_BOARD_ID=sn;exports.DEFAULT_WI_WORKFLOW_ID=xd;exports.DocumentLoader=Ut;exports.FRESH_PROVIDER_INITIAL_INPUT_FRAMING=mr;exports.INPUT_BUDGET_TOKENIZER_ENCODING=To;exports.LEGACY_UI_CARD_SAFE_SUMMARY=ka;exports.LayoutLoadError=ke;exports.LayoutLoader=Sn;exports.LayoutRenderer=Dn;exports.MAX_INPUT_BUDGET_PERCENT=gr;exports.MIN_INPUT_BUDGET_PERCENT=fr;exports.NodeFsAdapter=Ur;exports.PROVIDER_ORDER=Ji;exports.ParallelRunner=dr;exports.ParallelRunnerTimeoutError=uo;exports.PropsValidationError=ot;exports.PropsValidator=Nn;exports.RESUME_PROVIDER_INITIAL_INPUT_FRAMING=Ao;exports.SdkBoxService=rs;exports.SpanRepository=Yr;exports.TaskRepository=nn;exports.TemplateEngine=Cn;exports.TypedEventEmitter=Mn;exports.UiRuntimeError=x;exports.WI_BOARD_ID_PATTERN=co;exports.WI_DEFAULT_FLOW_FILENAME=gg;exports.WI_PLAN_FLOW_FILENAME=mg;exports.WI_PLAN_WORKFLOW_ID=fg;exports.WiBoardSchema=Mc;exports.WiCreateError=ne;exports.YamlHookPlugin=as;exports.buildContext=Gm;exports.canonicalizeAgentOptions=al;exports.classifyTaskError=Lm;exports.clearModelsOverride=yc;exports.compareProviders=or;exports.countTokens=yr;exports.createAdapterContext=ii;exports.createDelegateTool=Am;exports.createGlobalSettingsStore=Qg;exports.createHandler=vi;exports.createPluginProviderFactory=hd;exports.createProvider=rt;exports.createRemoteProviderFactory=pd;exports.createScopedAdapterStore=ri;exports.createTokenCounter=Co;exports.createUiServerRuntime=nd;exports.createWorkInstruction=$g;exports.createWorkInstructionBatch=Bg;exports.defaultExtractText=fi;exports.defaultFsAdapter=Mt;exports.defaultParseEvent=Le;exports.defineChannelAdapter=kh;exports.defineChannelAdapterPlugin=vh;exports.escapeHandlebarsHelper=Zo;exports.extractLegacyWorkflowRunId=wa;exports.formatDisplayTimestamp=Xo;exports.formatFileSizeHelper=ei;exports.formatTimestamp=Ko;exports.formatTimestampHelper=ti;exports.generateFingerprint=hu;exports.generateId=it;exports.getAntigravityModels=Ro;exports.getClaudeModels=wn;exports.getCodexModels=Eo;exports.getCopilotModels=xo;exports.getCrewxHome=bi;exports.getProviderModels=Ze;exports.getSyncWindowStore=_u;exports.hashUiDefinition=zn;exports.hashWorkspaceId=Jr;exports.initModelsRemote=um;exports.initPricingRemote=tm;exports.isReservedWiBoardId=Rd;exports.lengthHelper=Qo;exports.loadYamlFile=kr;exports.materializeWindowsSpawnProgram=Pt;exports.mergeAdditionalArgs=ta;exports.mergeModels=_n;exports.migrateGrokLegacyMode=In;exports.normalizeClaudeMode=Nt;exports.normalizeInputBudgetProvider=Io;exports.normalizeProviderId=mm;exports.normalizeWorkspacePath=Ei;exports.parseOverdriveProfile=Mr;exports.parseOverdriveSignal=Go;exports.parseStdoutEvent=bn;exports.parseUsage=tt;exports.parseYamlContent=_r;exports.providerRank=Ki;exports.queryAcpProviderMeta=$d;exports.queryAllAcpProviderMetas=vm;exports.queryAllCliProviderMetas=bm;exports.queryOpencodeModels=Bd;exports.redactTechnicalMessage=Qi;exports.registerAcpProviders=ld;exports.registerApiProviders=id;exports.registerProviderFactory=nt;exports.resolveAgent=vr;exports.resolveAgentSkills=pm;exports.resolveCatalogModelId=mn;exports.resolveCrewxCli=Im;exports.resolveCrewxWorkspace=Pm;exports.resolveDefaultAgentsYaml=So;exports.resolveInputBudget=wr;exports.resolveOverdrive=Vo;exports.resolveTemplatesPath=Gt;exports.resolveTokenizerMetadata=hr;exports.resolveUiEffectiveCapabilities=Kr;exports.resolveWiBoards=hg;exports.resolveWindowsExecutablePath=Xc;exports.resolveWindowsSpawnProgram=It;exports.resolveWorkflowTemplatesPath=zc;exports.runExecutesParallel=nh;exports.runInSyncWindow=ku;exports.runQueriesParallel=th;exports.sanitizeLegacyUiCardText=Br;exports.sanitizeTemplateMessages=ui;exports.scanLegacyUiCardAt=di;exports.scanLegacyUiCardTags=$n;exports.selectNextWi=Fg;exports.setAuditVerbose=tu;exports.setModelsOverride=vo;exports.toTaskReader=_h;exports.toTemplateMessages=pi;exports.truncateHelper=Yo;exports.validateHooksSchema=wh;
|