@crewx/sdk 0.9.0-rc.6 → 0.9.0-rc.61

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/README.md +1 -1
  2. package/dist/activity-log/builder.d.ts +55 -6
  3. package/dist/config/canonicalize-agent-options.d.ts +17 -0
  4. package/dist/config/global-settings.d.ts +19 -0
  5. package/dist/config/migrate-grok-mode.d.ts +6 -0
  6. package/dist/config/model-compat.d.ts +16 -0
  7. package/dist/config/models.generated.d.ts +55 -0
  8. package/dist/config/models.remote.d.ts +4 -0
  9. package/dist/config/overdrive.d.ts +31 -0
  10. package/dist/config/pricing.d.ts +9 -5
  11. package/dist/config/pricing.generated.d.ts +4 -0
  12. package/dist/config/pricing.types.d.ts +4 -0
  13. package/dist/config/timeout.config.d.ts +3 -0
  14. package/dist/config/wi-boards.d.ts +19 -0
  15. package/dist/context-budget/index.d.ts +105 -0
  16. package/dist/conversation/index.d.ts +1 -1
  17. package/dist/conversation/to-template-messages.d.ts +7 -0
  18. package/dist/conversation/types.d.ts +1 -0
  19. package/dist/desktop/command-runner.d.ts +4 -0
  20. package/dist/desktop/default-adapters.d.ts +4 -0
  21. package/dist/desktop/global-install.d.ts +19 -0
  22. package/dist/desktop/index.d.ts +2 -0
  23. package/dist/desktop/index.js +3 -0
  24. package/dist/desktop/install.d.ts +5 -0
  25. package/dist/desktop/lnk.d.ts +22 -0
  26. package/dist/desktop/manifest.d.ts +21 -0
  27. package/dist/desktop/types.d.ts +67 -0
  28. package/dist/desktop/version.d.ts +1 -0
  29. package/dist/desktop/windows-paths.d.ts +21 -0
  30. package/dist/desktop/wrapper.d.ts +18 -0
  31. package/dist/esm/desktop/index.js +3 -0
  32. package/dist/esm/index.js +240 -102
  33. package/dist/esm/plugins/index.js +150 -90
  34. package/dist/esm/publish/index.js +1 -0
  35. package/dist/esm/repository/index.js +126 -66
  36. package/dist/esm/testing/index.js +1 -1
  37. package/dist/events/types.d.ts +3 -0
  38. package/dist/facade/Crewx.d.ts +28 -0
  39. package/dist/index.browser.d.ts +6 -1
  40. package/dist/index.browser.js +6 -2
  41. package/dist/index.d.ts +37 -9
  42. package/dist/index.js +240 -102
  43. package/dist/internal/windows-spawn.d.ts +10 -0
  44. package/dist/migrations/0008_careful_black_bird.sql +17 -0
  45. package/dist/migrations/0009_hot_dark_phoenix.sql +1 -0
  46. package/dist/migrations/0010_analyze_stats.sql +6 -0
  47. package/dist/migrations/0011_far_black_tarantula.sql +1 -0
  48. package/dist/migrations/0012_blue_turbo.sql +23 -0
  49. package/dist/migrations/0013_hesitant_adam_destine.sql +15 -0
  50. package/dist/migrations/0014_organic_mongu.sql +73 -0
  51. package/dist/migrations/meta/0008_snapshot.json +1327 -0
  52. package/dist/migrations/meta/0009_snapshot.json +1335 -0
  53. package/dist/migrations/meta/0010_snapshot.json +1335 -0
  54. package/dist/migrations/meta/0011_snapshot.json +1342 -0
  55. package/dist/migrations/meta/0012_snapshot.json +1494 -0
  56. package/dist/migrations/meta/0013_snapshot.json +1592 -0
  57. package/dist/migrations/meta/0014_snapshot.json +1975 -0
  58. package/dist/migrations/meta/_journal.json +49 -0
  59. package/dist/paths.d.ts +1 -0
  60. package/dist/plugin/types.d.ts +1 -0
  61. package/dist/plugins/index.js +150 -90
  62. package/dist/provider/acp/adapters/claude.d.ts +0 -1
  63. package/dist/provider/acp/connection.d.ts +4 -0
  64. package/dist/provider/acp/meta.d.ts +15 -0
  65. package/dist/provider/bridge.d.ts +16 -1
  66. package/dist/provider/classify-task-error.d.ts +2 -0
  67. package/dist/provider/cli/adapter.types.d.ts +6 -0
  68. package/dist/provider/cli/adapters/cli-knob.util.d.ts +6 -0
  69. package/dist/provider/cli/adapters/grok.d.ts +2 -0
  70. package/dist/provider/cli/adapters/index.d.ts +1 -0
  71. package/dist/provider/cli/index.d.ts +1 -1
  72. package/dist/provider/cli/meta.d.ts +8 -1
  73. package/dist/provider/errors.d.ts +1 -0
  74. package/dist/provider/idle-watchdog.d.ts +19 -0
  75. package/dist/provider/models.d.ts +26 -24
  76. package/dist/provider/order.d.ts +1 -1
  77. package/dist/provider/parse-usage.d.ts +6 -0
  78. package/dist/provider/provider-selection.d.ts +8 -0
  79. package/dist/provider/redact-technical-message.d.ts +1 -0
  80. package/dist/provider/task-error.types.d.ts +16 -0
  81. package/dist/publish/auth-boundary.d.ts +22 -0
  82. package/dist/publish/auth-json.d.ts +11 -0
  83. package/dist/publish/constants.d.ts +6 -0
  84. package/dist/publish/index.d.ts +30 -0
  85. package/dist/publish/index.js +1 -0
  86. package/dist/publish/manifest.d.ts +17 -0
  87. package/dist/publish/marketplace-api.constants.d.ts +1 -0
  88. package/dist/publish/pack.d.ts +2 -0
  89. package/dist/publish/scan.d.ts +9 -0
  90. package/dist/publish/secrets.d.ts +6 -0
  91. package/dist/publish/upload.d.ts +18 -0
  92. package/dist/repository/agent-suggestion.repository.d.ts +34 -0
  93. package/dist/repository/index.d.ts +7 -1
  94. package/dist/repository/index.js +126 -66
  95. package/dist/repository/notification.repository.d.ts +58 -0
  96. package/dist/repository/task.repository.d.ts +94 -0
  97. package/dist/repository/thread.repository.d.ts +16 -2
  98. package/dist/repository/usage-report.repository.d.ts +27 -0
  99. package/dist/schema/agent-suggestions.d.ts +199 -0
  100. package/dist/schema/index.d.ts +5 -0
  101. package/dist/schema/notifications.d.ts +303 -0
  102. package/dist/schema/ui-action-receipts.d.ts +303 -0
  103. package/dist/schema/ui-instances.d.ts +267 -0
  104. package/dist/schema/usage-reports.d.ts +252 -0
  105. package/dist/testing/index.d.ts +1 -0
  106. package/dist/testing/index.js +1 -1
  107. package/dist/types/index.d.ts +448 -3
  108. package/dist/ui-card/index.d.ts +2 -0
  109. package/dist/ui-card/legacy-card-parser.d.ts +11 -0
  110. package/dist/ui-instance/definition.d.ts +6 -0
  111. package/dist/ui-instance/errors.d.ts +17 -0
  112. package/dist/ui-instance/index.d.ts +6 -0
  113. package/dist/ui-instance/json.d.ts +5 -0
  114. package/dist/ui-instance/runtime.d.ts +13 -0
  115. package/dist/ui-instance/store.d.ts +65 -0
  116. package/dist/ui-instance/types.d.ts +200 -0
  117. package/dist/utils/crewx-home.d.ts +1 -0
  118. package/dist/utils/id.d.ts +1 -1
  119. package/dist/utils/timestamp.d.ts +1 -0
  120. package/dist/wi/create.d.ts +48 -0
  121. package/dist/wi/select.d.ts +20 -0
  122. package/package.json +19 -3
  123. package/templates/agents/default.yaml +175 -117
  124. package/templates/documents/crewx-manual.md +138 -138
  125. package/templates/workflows/wi-default-flow.yaml +65 -0
  126. package/templates/workflows/wi-plan-flow.yaml +140 -0
@@ -1 +1 @@
1
- function m(){let t=[];return {events:t,async log(e,n){t.push({event:e,payload:n});}}}function y(){let t={debug:[],info:[],warn:[],error:[]};return {entries:t,debug(e,n){t.debug.push({msg:e,meta:n});},info(e,n){t.info.push({msg:e,meta:n});},warn(e,n){t.warn.push({msg:e,meta:n});},error(e,n){t.error.push({msg:e,meta:n});}}}function C(){let t=200,e,n,r={},o={status(s){return t=s,o},set(s,c){return r[s]=c,o},send(s){return n=s,o},json(s){return e=s,o},end(){return o},getStatusCode:()=>t,getJsonBody:()=>e,getSentBody:()=>n,getHeaders:()=>({...r})};return o}function R(){let t=[];return {routes:t,registerRoute(n,r,o){t.push({path:n,handler:r,opts:o});},async simulate(n,r,o=Buffer.alloc(0),s={},c={},p={}){let g=t.find(l=>l.path===r);if(!g)return {status:404,body:{error:"Not found"},headers:{}};let f={method:n,url:r,headers:s,body:o,params:c,query:p},d=C();return await g.handler(f,d),{status:d.getStatusCode(),body:d.getJsonBody()??d.getSentBody(),headers:d.getHeaders()}}}}function x(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}::`,s=[];for(let c of e.keys())c.startsWith(o)&&s.push(c.slice(t.length+2));return s}}}function k(t){return x(t)}function M(){let t=new Map;return {blobs:t,async put(e,n,r){return t.set(e,{data:n,contentType:r}),e},async get(e){let n=t.get(e);return n?n.data:void 0},async delete(e){return t.delete(e)}}}function A(t){let e=t.instanceId??"mock-instance",n=m(),r=y(),o=R(),s=k(e),c=M(),p=[],g=[],f=[],d={run:async()=>({output:""}),...t.agentRunner},l=new AbortController,b=async a=>(p.push(a),{accepted:true}),h=async a=>(g.push(a),{accepted:true}),I=async(a,v)=>{f.push({messageId:a,patch:v});},P=async a=>({userId:a,displayName:a}),w=async()=>{},S=async()=>({messageId:"mock-proactive",sentAt:Date.now()});return {instanceId:e,installationId:t.installationId,config:t.config,capabilities:new Set(t.capabilities??[]),log:r,agentRunner:d,db:s,storage:c,audit:n,abortSignal:t.abortSignal??l.signal,httpRouter:o,router:o,inbound:b,emitEvent:h,updateMessage:I,resolveUser:P,respondSync:w,proactive:S,inboundCalls:p,emittedEvents:g,sentMessages:f}}function B(){}export{m as createMockAudit,A as createMockContext,y as createMockLogger,R as createMockRouter,M as createMockStorage,k as createMockStore,B as resetPricingOverride};
1
+ function f(){let e=[];return {events:e,async log(t,o){e.push({event:t,payload:o});}}}function h(){let e={debug:[],info:[],warn:[],error:[]};return {entries:e,debug(t,o){e.debug.push({msg:t,meta:o});},info(t,o){e.info.push({msg:t,meta:o});},warn(t,o){e.warn.push({msg:t,meta:o});},error(t,o){e.error.push({msg:t,meta:o});}}}function A(){let e=200,t,o,n={},r={status(i){return e=i,r},set(i,a){return n[i]=a,r},send(i){return o=i,r},json(i){return t=i,r},end(){return r},getStatusCode:()=>e,getJsonBody:()=>t,getSentBody:()=>o,getHeaders:()=>({...n})};return r}function x(){let e=[];return {routes:e,registerRoute(o,n,r){e.push({path:o,handler:n,opts:r});},async simulate(o,n,r=Buffer.alloc(0),i={},a={},l={}){let p=e.find(m=>m.path===n);if(!p)return {status:404,body:{error:"Not found"},headers:{}};let g={method:o,url:n,headers:i,body:r,params:a,query:l},c=A();return await p.handler(g,c),{status:c.getStatusCode(),body:c.getJsonBody()??c.getSentBody(),headers:c.getHeaders()}}}}function k(e){let t=new Map,o=n=>n.startsWith(`${e}::`)?n:`${e}::${n}`;return {async get(n){let r=t.get(o(n));return r?r.value:void 0},async set(n,r){t.set(o(n),{value:r});},async delete(n){return t.delete(o(n))},async list(n){let r=n?o(n):`${e}::`,i=[];for(let a of t.keys())a.startsWith(r)&&i.push(a.slice(e.length+2));return i}}}function y(e){return k(e)}function M(){let e=new Map;return {blobs:e,async put(t,o,n){return e.set(t,{data:o,contentType:n}),t},async get(t){let o=e.get(t);return o?o.data:void 0},async delete(t){return e.delete(t)}}}function T(e){let t=e.instanceId??"mock-instance",o=f(),n=h(),r=x(),i=y(t),a=M(),l=[],p=[],g=[],c={run:async()=>({output:""}),...e.agentRunner},m=new AbortController,v=async u=>(l.push(u),{accepted:true}),w=async u=>(p.push(u),{accepted:true}),E=async(u,C)=>{g.push({messageId:u,patch:C});},O=async u=>({userId:u,displayName:u}),b=async()=>{},R=async()=>({messageId:"mock-proactive",sentAt:Date.now()});return {instanceId:t,installationId:e.installationId,config:e.config,capabilities:new Set(e.capabilities??[]),log:n,agentRunner:c,db:i,storage:a,audit:o,abortSignal:e.abortSignal??m.signal,httpRouter:r,router:r,inbound:v,emitEvent:w,updateMessage:E,resolveUser:O,respondSync:b,proactive:R,inboundCalls:l,emittedEvents:p,sentMessages:g}}function L(){}var P={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"]}]}};Object.fromEntries(Object.entries(P).map(([e,t])=>[e,t.models]));var _=[{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]"}];new Map(_.map(({baseModelId:e,catalogModelId:t})=>[e,t]));function W(){}export{f as createMockAudit,T as createMockContext,h as createMockLogger,x as createMockRouter,M as createMockStorage,y as createMockStore,W as resetModelsOverride,L as resetPricingOverride};
@@ -29,6 +29,7 @@ export interface TaskEndEvent extends BaseEvent {
29
29
  error?: {
30
30
  code: string;
31
31
  message: string;
32
+ providerCode?: string;
32
33
  };
33
34
  exitCode?: number;
34
35
  inputTokens?: number;
@@ -37,6 +38,8 @@ export interface TaskEndEvent extends BaseEvent {
37
38
  costUsd?: number;
38
39
  model?: string;
39
40
  metadata?: Record<string, unknown>;
41
+ workspaceId?: string;
42
+ workspaceName?: string;
40
43
  }
41
44
  export interface TaskOutputEvent extends BaseEvent {
42
45
  agentRef: string;
@@ -8,6 +8,8 @@ import type { CustomLayoutDefinition } from '../layout/types';
8
8
  import type { TemplateMessage } from '../conversation/types';
9
9
  import type { HandlerOptions, CrewxHandler } from '../server/handler';
10
10
  import type { RemoteProviderConfig } from '../remote/types.js';
11
+ import type { UiRuntimeFacade, UiRuntimeOptions } from '../ui-instance/types.js';
12
+ import type { CrewxEventName, CrewxEventPayload } from '../events/types';
11
13
  export interface ToolDefinition {
12
14
  name: string;
13
15
  description: string;
@@ -55,8 +57,11 @@ export declare class Crewx extends TypedEventEmitter {
55
57
  private readonly _tools;
56
58
  private readonly _activeAdapters;
57
59
  private readonly _pendingThreads;
60
+ private readonly _activeTasks;
58
61
  private readonly _remoteFactory?;
59
62
  private readonly _remoteTargets;
63
+ private readonly _additionalArgsProvider?;
64
+ private readonly _callerIdentityOverrides;
60
65
  private constructor();
61
66
  private resolveFileRemoteTarget;
62
67
  private static loadBuiltInConfig;
@@ -68,6 +73,7 @@ export declare class Crewx extends TypedEventEmitter {
68
73
  get plugins(): readonly CrewxPlugin[];
69
74
  get tools(): ReadonlyMap<string, ToolDefinition>;
70
75
  get workspaceId(): string;
76
+ createUiRuntime(options: UiRuntimeOptions): UiRuntimeFacade;
71
77
  get workspaceName(): string;
72
78
  getAgent(agentRef: string): AgentConfig | undefined;
73
79
  getRemoteProviderConfig(providerId: string): RemoteProviderConfig | undefined;
@@ -80,6 +86,8 @@ export declare class Crewx extends TypedEventEmitter {
80
86
  stopAllAdapters(opts?: {
81
87
  timeoutMs?: number;
82
88
  }): Promise<void>;
89
+ private abortAll;
90
+ private _drainActiveTasks;
83
91
  close(): Promise<void>;
84
92
  filterAgents(filters: {
85
93
  role?: string;
@@ -96,10 +104,30 @@ export declare class Crewx extends TypedEventEmitter {
96
104
  private _extractLayoutProps;
97
105
  private _getConversationProvider;
98
106
  private _fetchHistoryMessages;
107
+ private _resolveFreshProvider;
108
+ private _readInputBudgetPercent;
109
+ private _resolveBudgetModel;
110
+ private _resolveContextMode;
111
+ private _hasUsableResumeSessionId;
112
+ private _buildInstructionOnlyResumeManifest;
113
+ private _prepareInstructionOnlyResumeWithBudget;
114
+ private _activityLogEntryCounts;
115
+ private _buildUnresolvedContextBudgetManifest;
116
+ private _buildResolvedContextBudgetManifest;
117
+ private _renderFreshPromptVariant;
118
+ private _prepareFreshPromptWithBudget;
119
+ private _recountFreshProviderInitialInput;
120
+ private _validateFreshProviderInitialInputBudget;
99
121
  private _resolveTimeout;
122
+ private _resolveIdleTimeout;
100
123
  private _lookupCliAdapter;
124
+ private _resolveEffectiveCost;
101
125
  private _resolveEffectiveCwd;
102
126
  private _buildFileRemoteOptions;
127
+ private _registerCallerIdentityOverride;
128
+ private _clearCallerIdentityOverride;
129
+ private _rewriteCallerFacingPayload;
130
+ protected emit<K extends CrewxEventName>(event: K, payload: CrewxEventPayload<K>): void;
103
131
  private emitToolEvents;
104
132
  private emitTaskLogEntries;
105
133
  private tryParseJson;
@@ -2,8 +2,13 @@ export { Crewx } from './facade/Crewx.browser.js';
2
2
  export type { ToolDefinition, BrowserQueryOptions, BrowserFromConfigOptions } from './facade/Crewx.browser.js';
3
3
  export { registerProviderFactory, createProvider, ProviderError } from './provider/bridge.browser.js';
4
4
  export type { ProviderRuntime, ProviderFactory, ProviderQueryOptions } from './provider/bridge.browser.js';
5
+ export { classifyTaskError } from './provider/classify-task-error.js';
6
+ export { redactTechnicalMessage } from './provider/redact-technical-message.js';
7
+ export type { TaskErrorCode, TaskErrorMeta, TaskErrorProjection } from './provider/task-error.types.js';
5
8
  export { parseYamlContent, ConfigLoadError } from './config/loader.browser.js';
9
+ export { normalizeClaudeMode } from './config/canonicalize-agent-options.js';
6
10
  export { BrowserFsAdapter } from './platform/BrowserFsAdapter.js';
7
11
  export type { IFsAdapter } from './platform/IFsAdapter.js';
8
12
  export { PROVIDER_ORDER, providerRank, compareProviders, normalizeProviderId } from './provider/order.js';
9
- export type { AgentConfig, CrewxProjectConfig, CrewxOptions, QueryOptions, QueryResult, ExecuteOptions, ExecuteResult, } from './types/index.js';
13
+ export { CLAUDE_MODEL_COMPATIBILITY_PAIRS, CLAUDE_OPUS_4_8_BASE_MODEL_ID, CLAUDE_OPUS_4_8_LEGACY_MODEL_ID, resolveCatalogModelId, } from './config/model-compat.js';
14
+ export type { AgentConfig, CrewxProjectConfig, CrewxOptions, QueryOptions, QueryResult, ExecuteOptions, ExecuteResult, ContextMode, } from './types/index.js';
@@ -1,2 +1,6 @@
1
- import {load}from'js-yaml';import {z as z$1}from'zod';var m=class extends Error{constructor(e,r){let t=r.length>0?` Available: ${r.join(", ")}`:"";super(`Agent not found: "${e}".${t}`),this.name="AgentNotFoundError";}},D={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function w(s,e){let r=s.startsWith("@")?s.slice(1):s,t=e.find(o=>o.id===r);if(t)return t;let i=D[r];if(i)return i;throw new m(s,e.map(o=>o.id))}var u=class extends Error{constructor(r,t,i){super(r);this.providerStr=t;this.name="ProviderError",this.code=i?.code??"UNKNOWN",this.kind=i?.kind??(this.code==="UNKNOWN"?"transient":void 0),this.retryAfterMs=i?.retryAfterMs;}providerStr;code;kind;retryAfterMs};var b=new Map;function P(s,e){b.set(s,e);}function x(s){let e=s.split("/");if(e.length!==2)throw new u(`Invalid provider format: "${s}". Expected namespace/id (e.g., api/webllm)`,s);let[r,t]=e,i=b.get(r);if(i)return i(t,s);throw new u(`Unsupported provider namespace: "${r}". Register a factory with registerProviderFactory('${r}', factory).`,s)}var j=new Function("u","return import(u)"),E=class s{_agents;_config;_tools=new Map;_apiProviders=new Map;constructor(e,r){this._agents=new Map(e.map(t=>[t.id,t])),this._config=r;}static async fromConfig(e,r){let t=new s(e.agents??[],e),i=e.agents??[],o=a=>Array.isArray(a.provider)?a.provider[0]:a.provider,p=i.filter(a=>o(a)==="api/webllm"),c=i.filter(a=>o(a)==="api/openrouter");if(p.length>0&&await t._initWebLLM(p,r?.onProgress),c.length>0){if(!r?.openrouterApiKey)throw new Error("openrouterApiKey is required when using api/openrouter provider");t._initOpenRouter(c,r.openrouterApiKey);}return t._apiProviders.size>0&&P("api",(a,g)=>{let d=t._apiProviders.get(a);if(!d)throw new u(`Unknown api provider: ${a}`,g);return d}),t}async _initWebLLM(e,r){if(typeof navigator>"u"||!navigator.gpu)throw new Error("WebGPU is not available. Chrome 113+ or Edge 113+ required.");let t=await j("https://esm.run/@mlc-ai/web-llm"),i=e[0]?.inline?.model??"gemma-2-2b-it-q4f16_1-MLC",o=await t.CreateMLCEngine(i,{initProgressCallback:r?c=>r(c):void 0}),p=[];this._apiProviders.set("webllm",{async query(c,a){let g=[];a?.systemPrompt&&g.push({role:"system",content:a.systemPrompt}),g.push(...p),g.push({role:"user",content:c});let d="",l=await o.chat.completions.create({messages:g,stream:true,temperature:.7,max_tokens:4096});for await(let y of l){let v=y.choices?.[0]?.delta?.content??"";d+=v,a?.onOutput&&a.onOutput(d,"stdout");}return p.push({role:"user",content:c}),p.push({role:"assistant",content:d}),d},async execute(c,a){return this.query(c,a)}});}_initOpenRouter(e,r){let t=e[0]?.inline?.model??"google/gemma-2-2b-it",i=[];this._apiProviders.set("openrouter",{async query(o,p){let c=[];p?.systemPrompt&&c.push({role:"system",content:p.systemPrompt}),c.push(...i),c.push({role:"user",content:o});let a=await fetch("https://openrouter.ai/api/v1/chat/completions",{method:"POST",headers:{Authorization:`Bearer ${r}`,"Content-Type":"application/json"},body:JSON.stringify({model:p?.model||t,messages:c,stream:true})});if(!a.ok){let v=await a.text();throw new Error(`OpenRouter API error (${a.status}): ${v}`)}let g=a.body.getReader(),d=new TextDecoder,l="",y="";for(;;){let{done:v,value:T}=await g.read();if(v)break;y+=d.decode(T,{stream:true});let O=y.split(`
2
- `);y=O.pop();for(let M of O){let h=M.trim();if(!h||!h.startsWith("data: "))continue;let k=h.slice(6);if(k!=="[DONE]")try{let I=JSON.parse(k).choices?.[0]?.delta?.content??"";l+=I,I&&p?.onOutput&&p.onOutput(l,"stdout");}catch{}}}return i.push({role:"user",content:o}),i.push({role:"assistant",content:l}),l},async execute(o,p){return this.query(o,p)}});}get agents(){return this._agents}get config(){return this._config}get tools(){return this._tools}registerTool(e,r){this._tools.set(e,{name:e,...r});}async query(e,r,t){let i=Date.now(),o;try{o=w(e,Array.from(this._agents.values()));}catch(d){if(d instanceof m)return {ok:false,data:"",error:{code:"AGENT_NOT_FOUND",message:d.message},meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:Date.now()-i}};throw d}let p=Array.isArray(o.provider)?o.provider[0]??"api/default":o.provider,c=t?.provider??p,a=t?.model??o.inline?.model,g;try{g=x(c);}catch(d){return {ok:false,data:"",error:{code:"PROVIDER_ERROR",message:d.message},meta:{agentId:o.id,provider:c,model:a,durationMs:Date.now()-i}}}try{return {ok:!0,data:await g.query(r,{model:a,context:t?.context,systemPrompt:o.inline?.system_prompt??o.inline?.prompt,onOutput:t?.onOutput?l=>t.onOutput(l):void 0}),meta:{agentId:o.id,provider:c,model:a,durationMs:Date.now()-i}}}catch(d){return {ok:false,data:"",error:{code:"QUERY_FAILED",message:d.message},meta:{agentId:o.id,provider:c,model:a,durationMs:Date.now()-i}}}}async execute(e,r,t){let i=Date.now(),o;try{o=w(e,Array.from(this._agents.values()));}catch(d){if(d instanceof m)return {ok:false,data:"",error:{code:"AGENT_NOT_FOUND",message:d.message},meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:Date.now()-i}};throw d}let p=Array.isArray(o.provider)?o.provider[0]??"api/default":o.provider,c=t?.provider??p,a=t?.model??o.inline?.model,g;try{g=x(c);}catch(d){return {ok:false,data:"",error:{code:"PROVIDER_ERROR",message:d.message},meta:{agentId:o.id,provider:c,model:a,durationMs:Date.now()-i}}}try{return {ok:!0,data:await g.execute(r,{model:a,context:t?.context,systemPrompt:o.inline?.system_prompt??o.inline?.prompt}),meta:{agentId:o.id,provider:c,model:a,durationMs:Date.now()-i}}}catch(d){return {ok:false,data:"",error:{code:"EXECUTE_FAILED",message:d.message},meta:{agentId:o.id,provider:c,model:a,durationMs:Date.now()-i}}}}};var F=z$1.object({model:z$1.string().optional(),system_prompt:z$1.string().optional(),prompt:z$1.string().optional(),layout:z$1.union([z$1.string(),z$1.object({id:z$1.string(),props:z$1.record(z$1.unknown()).optional()}),z$1.object({props:z$1.record(z$1.unknown())}),z$1.object({template:z$1.string()})]).optional()}).catchall(z$1.unknown()),U=z$1.object({include:z$1.array(z$1.string()).optional()}).optional(),N=z$1.object({id:z$1.string(),name:z$1.string().optional(),role:z$1.string().optional(),team:z$1.string().optional(),provider:z$1.union([z$1.string(),z$1.array(z$1.string())]),working_directory:z$1.string().optional(),description:z$1.string().optional(),tags:z$1.array(z$1.string()).optional(),inline:F.optional(),skills:U}).catchall(z$1.unknown()),_=z$1.object({agents:z$1.array(N).optional(),hooks:z$1.array(z$1.unknown()).optional(),settings:z$1.record(z$1.unknown()).optional(),skills:z$1.unknown().optional(),layouts:z$1.record(z$1.unknown()).optional(),documents:z$1.record(z$1.unknown()).optional()}).catchall(z$1.unknown());var f=class extends Error{constructor(r,t){super(r);this.cause=t;this.name="ConfigLoadError";}cause};function S(s){if(!s||typeof s!="string"||!s.trim())throw new f("YAML content must be a non-empty string");let e;try{e=load(s);}catch(i){throw new f(`YAML parse error: ${i.message}`,i)}let r=Q(e),t=_.safeParse(r);if(!t.success)throw new f(`Config validation error: ${t.error.message}`);return t.data}function Q(s){if(!s||typeof s!="object")return {agents:[]};let e=s;if(e.agents&&typeof e.agents=="object"&&!Array.isArray(e.agents)){let r=e.agents,t=Object.entries(r).map(([i,o])=>({id:i,...o&&typeof o=="object"?o:{}}));return {...e,agents:t}}return e.agents?e:{...e,agents:[]}}var $="crewx:fs:",A=class{prefix;store;constructor(e){this.prefix=e?.prefix??$,this.store=e?.storage??new Map;}async readFile(e){let r=this.toKey(e),t=this.store.get(r);if(t===void 0)throw new Error(`BrowserFsAdapter: file not found: ${e}`);return t}async exists(e){return this.store.has(this.toKey(e))}resolvePath(...e){let r=e.map(p=>p.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),t=r.split("/"),i=[];for(let p of t)p==="."||p===""||(p===".."?i.pop():i.push(p));let o=i.join("/");return r.startsWith("/")?`/${o}`:o}isAbsolute(e){return e.startsWith("/")}setItem(e,r){this.store.set(this.toKey(e),r);}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 r=e.replace(/\\/g,"/").replace(/\/$/,""),t=this.toKey(r+"/"),i=[];for(let o of this.store.keys())if(o.startsWith(t)){let c=o.slice(t.length).split("/")[0];c&&!i.includes(c)&&i.push(c);}return i}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};var C=["codex","claude","opencode","antigravity","copilot"];function K(s){let e=s.indexOf("/");return e===-1?s:s.slice(e+1)}function R(s){let e=K(s),r=C.indexOf(e);return r===-1?C.length:r}function B(s,e){return R(s)-R(e)}var W=new Set(["claude","copilot","codex","opencode"]);function z(s){if(!s)return "";if(s.startsWith("acp/")){let e=s.slice(4);if(W.has(e))return `cli/${e}`}return s}export{A as BrowserFsAdapter,f as ConfigLoadError,E as Crewx,C as PROVIDER_ORDER,u as ProviderError,B as compareProviders,x as createProvider,z as normalizeProviderId,S as parseYamlContent,R as providerRank,P as registerProviderFactory};
1
+ import {load}from'js-yaml';import'js-tiktoken';import'js-tiktoken/lite';import Te from'js-tiktoken/ranks/o200k_base';import {z}from'zod';var E=class extends Error{constructor(e,n){let o=n.length>0?` Available: ${n.join(", ")}`:"";super(`Agent not found: "${e}".${o}`),this.name="AgentNotFoundError";}},ee={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function w(t,e){let n=t.startsWith("@")?t.slice(1):t,o=e.find(i=>i.id===n);if(o)return o;let r=ee[n];if(r)return r;throw new E(t,e.map(i=>i.id))}var g=class extends Error{constructor(n,o,r){super(n);this.providerStr=o;this.name="ProviderError",this.code=r?.code??"UNKNOWN",this.kind=r?.kind??(this.code==="UNKNOWN"?"transient":void 0),this.retryAfterMs=r?.retryAfterMs;}providerStr;code;kind;retryAfterMs;stdout};var j=new Map;function A(t,e){j.set(t,e);}function C(t){let e=t.split("/");if(e.length!==2)throw new g(`Invalid provider format: "${t}". Expected namespace/id (e.g., api/webllm)`,t);let[n,o]=e,r=j.get(n);if(r)return r(o,t);throw new g(`Unsupported provider namespace: "${n}". Register a factory with registerProviderFactory('${n}', factory).`,t)}var te=new Function("u","return import(u)"),b=class t{_agents;_config;_tools=new Map;_apiProviders=new Map;constructor(e,n){this._agents=new Map(e.map(o=>[o.id,o])),this._config=n;}static async fromConfig(e,n){let o=new t(e.agents??[],e),r=e.agents??[],i=c=>Array.isArray(c.provider)?c.provider[0]:c.provider,d=r.filter(c=>i(c)==="api/webllm"),s=r.filter(c=>i(c)==="api/openrouter");if(d.length>0&&await o._initWebLLM(d,n?.onProgress),s.length>0){if(!n?.openrouterApiKey)throw new Error("openrouterApiKey is required when using api/openrouter provider");o._initOpenRouter(s,n.openrouterApiKey);}return o._apiProviders.size>0&&A("api",(c,l)=>{let u=o._apiProviders.get(c);if(!u)throw new g(`Unknown api provider: ${c}`,l);return u}),o}async _initWebLLM(e,n){if(typeof navigator>"u"||!navigator.gpu)throw new Error("WebGPU is not available. Chrome 113+ or Edge 113+ required.");let o=await te("https://esm.run/@mlc-ai/web-llm"),r=e[0]?.inline?.model??"gemma-2-2b-it-q4f16_1-MLC",i=await o.CreateMLCEngine(r,{initProgressCallback:n?s=>n(s):void 0}),d=[];this._apiProviders.set("webllm",{async query(s,c){let l=[];c?.systemPrompt&&l.push({role:"system",content:c.systemPrompt}),l.push(...d),l.push({role:"user",content:s});let u="",m=await i.chat.completions.create({messages:l,stream:true,temperature:.7,max_tokens:4096});for await(let x of m){let k=x.choices?.[0]?.delta?.content??"";u+=k,c?.onOutput&&c.onOutput(u,"stdout");}return d.push({role:"user",content:s}),d.push({role:"assistant",content:u}),u},async execute(s,c){return this.query(s,c)}});}_initOpenRouter(e,n){let o=e[0]?.inline?.model??"google/gemma-2-2b-it",r=[];this._apiProviders.set("openrouter",{async query(i,d){let s=[];d?.systemPrompt&&s.push({role:"system",content:d.systemPrompt}),s.push(...r),s.push({role:"user",content:i});let c=await fetch("https://openrouter.ai/api/v1/chat/completions",{method:"POST",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json"},body:JSON.stringify({model:d?.model||o,messages:s,stream:true})});if(!c.ok){let k=await c.text();throw new Error(`OpenRouter API error (${c.status}): ${k}`)}let l=c.body.getReader(),u=new TextDecoder,m="",x="";for(;;){let{done:k,value:X}=await l.read();if(k)break;x+=u.decode(X,{stream:true});let B=x.split(`
2
+ `);x=B.pop();for(let J of B){let O=J.trim();if(!O||!O.startsWith("data: "))continue;let z=O.slice(6);if(z!=="[DONE]")try{let W=JSON.parse(z).choices?.[0]?.delta?.content??"";m+=W,W&&d?.onOutput&&d.onOutput(m,"stdout");}catch{}}}return r.push({role:"user",content:i}),r.push({role:"assistant",content:m}),m},async execute(i,d){return this.query(i,d)}});}get agents(){return this._agents}get config(){return this._config}get tools(){return this._tools}registerTool(e,n){this._tools.set(e,{name:e,...n});}async query(e,n,o){let r=Date.now(),i;try{i=w(e,Array.from(this._agents.values()));}catch(u){if(u instanceof E)return {ok:false,data:"",error:{code:"AGENT_NOT_FOUND",message:u.message},meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:Date.now()-r}};throw u}let d=Array.isArray(i.provider)?i.provider[0]??"api/default":i.provider,s=o?.provider??d,c=o?.model??i.inline?.model,l;try{l=C(s);}catch(u){return {ok:false,data:"",error:{code:"PROVIDER_ERROR",message:u.message,...u instanceof g?{providerCode:u.code}:{}},meta:{agentId:i.id,provider:s,model:c,durationMs:Date.now()-r}}}try{return {ok:!0,data:await l.query(n,{model:c,context:o?.context,systemPrompt:i.inline?.system_prompt??i.inline?.prompt,onOutput:o?.onOutput?m=>o.onOutput(m):void 0}),meta:{agentId:i.id,provider:s,model:c,durationMs:Date.now()-r}}}catch(u){return {ok:false,data:"",error:{code:"QUERY_FAILED",message:u.message,...u instanceof g?{providerCode:u.code}:{}},meta:{agentId:i.id,provider:s,model:c,durationMs:Date.now()-r}}}}async execute(e,n,o){let r=Date.now(),i;try{i=w(e,Array.from(this._agents.values()));}catch(u){if(u instanceof E)return {ok:false,data:"",error:{code:"AGENT_NOT_FOUND",message:u.message},meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:Date.now()-r}};throw u}let d=Array.isArray(i.provider)?i.provider[0]??"api/default":i.provider,s=o?.provider??d,c=o?.model??i.inline?.model,l;try{l=C(s);}catch(u){return {ok:false,data:"",error:{code:"PROVIDER_ERROR",message:u.message,...u instanceof g?{providerCode:u.code}:{}},meta:{agentId:i.id,provider:s,model:c,durationMs:Date.now()-r}}}try{return {ok:!0,data:await l.execute(n,{model:c,context:o?.context,systemPrompt:i.inline?.system_prompt??i.inline?.prompt}),meta:{agentId:i.id,provider:s,model:c,durationMs:Date.now()-r}}}catch(u){return {ok:false,data:"",error:{code:"EXECUTE_FAILED",message:u.message,...u instanceof g?{providerCode:u.code}:{}},meta:{agentId:i.id,provider:s,model:c,durationMs:Date.now()-r}}}}};var p="[REDACTED]",V="[PATH]";function M(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 ${p}]`),e=ne(e),e=e.replace(/\b(?:Bearer|Basic)\s+[A-Za-z0-9._~+\-/]+=*/gi,`${p}`),e=e.replace(/\bsk-[A-Za-z0-9][A-Za-z0-9_-]*/g,p),e=e.replace(/\bghp_[A-Za-z0-9][A-Za-z0-9_-]*/g,p),e=e.replace(/\bxoxb-[A-Za-z0-9-]+/g,p),e=e.replace(/\bxoxp-[A-Za-z0-9-]+/g,p),e=e.replace(/\bAKIA[0-9A-Z]{12,}\b/g,p),e=e.replace(/\bgithub_pat_[A-Za-z0-9_]+/g,p),e=e.replace(/\bgho_[A-Za-z0-9_]+/g,p),e=e.replace(/\bAIza[A-Za-z0-9_-]{20,}\b/g,p),e=e.replace(/\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,p),e=e.replace(/\b(?:authorization|api[_ -]?key|access[_ -]?token|auth[_ -]?token|refresh[_ -]?token|token|secret|password)\s*([:=])\s*["']?[^\s,;&"']+/gi,(n,o)=>`${p}${o}${p}`),e=e.replace(/([?&](?:api[_-]?key|access[_-]?token|token)=)[^&\s]+/gi,`$1${p}`),e=e.replace(/(?:\/(?:Users|home|private|var\/folders|tmp|workspace|workspaces|Volumes|opt|etc|srv|Applications)\/[^\s"'`),;]+)/g,V),e=e.replace(/\b[A-Z]:\\(?:Users|home|Windows|Program Files|workspace|workspaces)\\[^\s"'`),;]*/gi,V),e=e.replace(/[\r\n]{3,}/g,`
3
+
4
+ `).trim(),re(e,1024)||void 0}function re(t,e){let n=new TextEncoder;if(n.encode(t).byteLength<=e)return t;let o="",r=0;for(let i of t){let d=n.encode(i).byteLength;if(r+d>e)break;o+=i,r+=d;}return o}function ne(t){let e=/\b(?:request|response|http)?\s*body\s*[:=]\s*/gim,n="",o=0,r;for(;(r=e.exec(t))!==null;){if(r.index<o)continue;let i=r.index+r[0].length,d=oe(t,i),s=d>=0?d:t.indexOf(`
5
+ `,i)>=0?t.indexOf(`
6
+ `,i):t.length;n+=t.slice(o,r.index),n+=`[HTTP BODY ${p}]`,o=s;}return n+t.slice(o)}function oe(t,e){let n=t[e];if(n==='"'||n==="'")return ie(t,e,n);if(n!=="{"&&n!=="[")return -1;let o=[],r,i=false;for(let d=e;d<t.length;d+=1){let s=t[d];if(r){i?i=false:s==="\\"?i=true:s===r&&(r=void 0);continue}if(s==='"'||s==="'"){r=s;continue}if(s==="{"||s==="["){o.push(s);continue}if(s!=="}"&&s!=="]")continue;let c=o.pop();if(s==="}"&&c!=="{"||s==="]"&&c!=="[")return -1;if(o.length===0)return d+1}return -1}function ie(t,e,n){let o=false;for(let r=e+1;r<t.length;r+=1){let i=t[r];if(o)o=false;else if(i==="\\")o=true;else if(i===n)return r+1}return -1}var se=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"]),ae={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"},de=[{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 ce(t){try{if(!h(t)||t.status!=="failed")return R();let e=ue(t.error);if(S(e.message))return R();let n=f(t.providerId)??e.provider??null,o=pe(t.logs),r=H(e.code);if(r)return T(r,n,e.message,e);let i=I(e.providerCode)??I(e.code),d=i?U(i,e.message):void 0;if(d)return T(d,n,e.message,e,i);let s=ge(o);if(!le(e)&&s&&(s.type==="user_stop"||S(s.message)))return R();if(s){let l=fe(s.code,s.providerCode,s.message);if(l)return T(l,n,s.message??e.message,e,s.providerCode??s.code,s,s.structuredFailure?"terminal":"envelope")}let c=me(e.message,o);return c?T(c.code,n,c.message,e,c.terminal?.providerCode??c.terminal?.code,c.terminal,c.terminal?.structuredFailure?"terminal":"envelope"):T("PROCESS_FAILED",n,e.message,e)}catch{return {errorCode:"PROCESS_FAILED",errorProvider:null}}}function R(){return {errorCode:null,errorProvider:null}}function T(t,e,n,o,r,i,d="envelope"){let s={};if(i?.resetAt!==void 0&&(s.resetAt=i.resetAt),o?.model&&(s.model=o.model),i?.type&&(s.upstreamType=i.type),r&&(s.upstreamCode=r),t==="CLI_NOT_AVAILABLE"||t==="CLI_UPDATE_REQUIRED"){let m=e?.startsWith("cli/")?e.slice(4):void 0;m&&(s.cliName=m);}let c=d==="terminal"?n:o?.message,l=d==="terminal"?i?.structuredFailure?c:void 0:o?.isEnvelope?c:void 0,u=M(l);return u&&(s.technicalMessage=u),Object.keys(s).length>0?{errorCode:t,errorProvider:e,errorMeta:s}:{errorCode:t,errorProvider:e}}function ue(t){let e=typeof t=="string"?y(t):t;return h(e)?{isEnvelope:true,code:f(e.code),providerCode:f(e.providerCode),message:f(e.message)??f(e.error),provider:f(e.provider)??f(e.errorProvider),model:f(e.model)}:{isEnvelope:false,...typeof t=="string"&&t.trim()?{message:t.trim()}:{}}}function y(t){try{return JSON.parse(t)}catch{return}}function le(t){return !!(t.code||t.providerCode||t.message)}function pe(t){let e=[];if(typeof t=="string"){let n=y(t);if(Array.isArray(n))e.push(...n);else for(let o of t.split(/\r?\n/)){let r=y(o.trim());r!==void 0&&e.push(r);}}else Array.isArray(t)?e.push(...t):h(t)&&e.push(t);return e.flatMap(v)}function v(t){if(!h(t))return [];let e=f(t.type),n=f(t.message);if(n&&!e){let r=y(n);if(Array.isArray(r))return r.flatMap(v);if(h(r))return v(r);let i=n.split(/\r?\n/).map(d=>y(d.trim())).filter(d=>h(d));return i.length>0?i.flatMap(v):t.level==="stderr"?[{type:"stderr",message:n,rank:1,structuredFailure:false}]:v({type:"info",content:n})}if(e==="rate_limit_event"){let r=$(t.rate_limit_info);return f(r?.status)!=="rejected"?[]:[{type:e,code:"RATE_LIMITED",message:_(r?.message,t.message),resetAt:he(r?.resetsAt),rank:4,structuredFailure:true}]}if(e==="turn.failed"||e==="error"){let r=$(t.error),i=_(r?.message,r?.detail,t.message,t.errorMessage,t.content),d=_(r?.code,t.code,t.errorCode);return [{type:e,code:d,providerCode:_(r?.providerCode,t.providerCode),message:i,rank:e==="turn.failed"?3:2,structuredFailure:true}]}if(e==="text"&&typeof t.content=="string"){let r=y(t.content);if(h(r))return v(r)}let o=_(t.errorMessage,t.content);return o&&S(o)?[{type:"user_stop",message:o,rank:1,structuredFailure:false}]:o&&/(?:turn\.failed|type:error)/i.test(o)?[{type:o.match(/turn\.failed/i)?"turn.failed":"error",message:o,rank:3,structuredFailure:false}]:[]}function ge(t){return [...t].sort((e,n)=>n.rank-e.rank)[0]}function fe(t,e,n){let o=H(t);if(o)return o;if(t){let r=U(t,n);if(r)return r}if(e){let r=U(e,n);if(r)return r}return D(n)}function me(t,e){let n=D(t);if(n)return {code:n,message:t};for(let o of [...e].sort((r,i)=>i.rank-r.rank)){let r=D(o.message);if(r)return {code:r,message:o.message,terminal:o}}}function D(t){if(!(typeof t!="string"||!t.trim()))return de.find(e=>e.pattern.test(t))?.code}function U(t,e){let n=I(t)??t;if(n==="MODEL_UNAVAILABLE")return /(?:capacity|overloaded|busy)/i.test(e??"")?"MODEL_AT_CAPACITY":"MODEL_NOT_SUPPORTED";if(n!=="UNKNOWN")return ae[n]}function H(t){let e=I(t);return e&&se.has(e)?e:void 0}function I(t){return typeof t=="string"&&t.trim()?t.trim().toUpperCase():void 0}function S(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 h(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function $(t){return h(t)?t:void 0}function f(t){return typeof t=="string"&&t.trim()?t.trim():void 0}function he(t){return typeof t=="string"||typeof t=="number"&&Number.isFinite(t)?t:void 0}function _(...t){return t.map(f).find(e=>!!e)}var K={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"]}]}};Object.fromEntries(Object.entries(K).map(([t,e])=>[t,e.models]));var ye="claude-opus-4-8",Pe="claude-opus-4-8[1m]",q=[{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]"}],xe=new Map(q.map(({baseModelId:t,catalogModelId:e})=>[t,e]));function L(t){return xe.get(t)??t}var Q=30,Y=80;Object.keys(Te.special_tokens);var _e=z.object({model:z.string().optional(),system_prompt:z.string().optional(),prompt:z.string().optional(),layout:z.union([z.string(),z.object({id:z.string(),props:z.record(z.unknown()).optional()}),z.object({props:z.record(z.unknown())}),z.object({template:z.string()})]).optional()}).catchall(z.unknown()),Ce=z.object({include:z.array(z.string()).optional()}).optional(),Ie=z.object({id:z.string(),name:z.string().optional(),role:z.string().optional(),team:z.string().optional(),provider:z.union([z.string(),z.array(z.string())]),working_directory:z.string().optional(),description:z.string().optional(),tags:z.array(z.string()).optional(),inline:_e.optional(),skills:Ce}).catchall(z.unknown());z.object({id:z.string(),name:z.string(),workflow_id:z.string(),description:z.string().optional(),goal_id:z.string().optional()});var Oe=z.number().finite().int().min(Q).max(Y),we=z.object({inputBudgetPercent:Oe.optional()}).catchall(z.unknown()),Ae=z.object({continuity:we.optional()}).catchall(z.unknown()),be=z.object({bin_resolution:z.enum(["global_first","local_first"]).optional(),dreaming:Ae.optional(),wi:z.object({boards:z.array(z.unknown()).optional().catch(()=>{})}).catchall(z.unknown()).optional().catch(()=>{})}).catchall(z.unknown()),Z=z.object({agents:z.array(Ie).optional(),hooks:z.array(z.unknown()).optional(),settings:be.optional(),skills:z.unknown().optional(),layouts:z.record(z.unknown()).optional(),documents:z.record(z.unknown()).optional()}).catchall(z.unknown());var P=class extends Error{constructor(n,o){super(n);this.cause=o;this.name="ConfigLoadError";}cause};function Re(t){if(!t||typeof t!="string"||!t.trim())throw new P("YAML content must be a non-empty string");let e;try{e=load(t);}catch(r){throw new P(`YAML parse error: ${r.message}`,r)}let n=De(e),o=Z.safeParse(n);if(!o.success)throw new P(`Config validation error: ${o.error.message}`);return o.data}function De(t){if(!t||typeof t!="object")return {agents:[]};let e=t;if(e.agents&&typeof e.agents=="object"&&!Array.isArray(e.agents)){let n=e.agents,o=Object.entries(n).map(([r,i])=>({id:r,...i&&typeof i=="object"?i:{}}));return {...e,agents:o}}return e.agents?e:{...e,agents:[]}}var Ue={auto:"default"};function Se(t){return Ue[t]??t}var Le="crewx:fs:",N=class{prefix;store;constructor(e){this.prefix=e?.prefix??Le,this.store=e?.storage??new Map;}async readFile(e){let n=this.toKey(e),o=this.store.get(n);if(o===void 0)throw new Error(`BrowserFsAdapter: file not found: ${e}`);return o}async exists(e){return this.store.has(this.toKey(e))}resolvePath(...e){let n=e.map(d=>d.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),o=n.split("/"),r=[];for(let d of o)d==="."||d===""||(d===".."?r.pop():r.push(d));let i=r.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(/\/$/,""),o=this.toKey(n+"/"),r=[];for(let i of this.store.keys())if(i.startsWith(o)){let s=i.slice(o.length).split("/")[0];s&&!r.includes(s)&&r.push(s);}return r}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};var F=["codex","claude","grok","opencode","antigravity","copilot"];function Ne(t){let e=t.indexOf("/");return e===-1?t:t.slice(e+1)}function G(t){let e=Ne(t),n=F.indexOf(e);return n===-1?F.length:n}function Fe(t,e){return G(t)-G(e)}var Ge=new Set(["claude","copilot","codex","grok","opencode"]);function Be(t){if(!t)return "";if(t.startsWith("acp/")){let e=t.slice(4);if(Ge.has(e))return `cli/${e}`}return t}export{N as BrowserFsAdapter,q as CLAUDE_MODEL_COMPATIBILITY_PAIRS,ye as CLAUDE_OPUS_4_8_BASE_MODEL_ID,Pe as CLAUDE_OPUS_4_8_LEGACY_MODEL_ID,P as ConfigLoadError,b as Crewx,F as PROVIDER_ORDER,g as ProviderError,ce as classifyTaskError,Fe as compareProviders,C as createProvider,Se as normalizeClaudeMode,Be as normalizeProviderId,Re as parseYamlContent,G as providerRank,M as redactTechnicalMessage,A as registerProviderFactory,L as resolveCatalogModelId};
package/dist/index.d.ts CHANGED
@@ -1,5 +1,8 @@
1
1
  export { Crewx } from './facade/Crewx';
2
2
  export type { ToolDefinition } from './facade/Crewx';
3
+ export type { ActionReceipt, ActionReceiptOutcome, CreateUiInstanceInput, JsonObject, JsonPrimitive, JsonValue, UiActionHandlerContext, UiActionHandlerRegistration, UiActionHandlerResult, UiActionEnvelope, UiActor, UiDefinition, UiDefinitionAction, UiDefinitionInput, UiDefinitionRef, UiProjectionPolicy, UiExecutionContext, UiAuthenticatedActor, UiAuthenticatedExecutionContext, UiAuthenticatedGrantPolicy, UiServerRuntimeFacade, UiServerRuntimeOptions, UiAgentContextProjection, UiExternalActionHandlerRegistration, UiInstance, UiInstanceStatus, UiLocalGrantPolicy, UiRuntimeFacade, UiRuntimeOptions, UiStateActionHandlerRegistration, } from './ui-instance/types.js';
4
+ export { UiRuntimeError, hashUiDefinition, createUiServerRuntime, resolveUiEffectiveCapabilities } from './ui-instance/index.js';
5
+ export type { UiRuntimeErrorCode } from './ui-instance/index.js';
3
6
  export { CrewxPlugin } from './plugin';
4
7
  export { TypedEventEmitter } from './events/TypedEventEmitter';
5
8
  export type { CrewxEvents, CrewxEventName, CrewxEventPayload, BaseEvent, TaskStartEvent, TaskEndEvent, TaskOutputEvent, AdapterLifecycleEvent, AdapterMessageEvent, UnsubscribeFn, } from './events/types';
@@ -18,32 +21,57 @@ export { NodeFsAdapter, defaultFsAdapter } from './platform/NodeFsAdapter';
18
21
  export { BrowserFsAdapter } from './platform/BrowserFsAdapter';
19
22
  export { truncateHelper, lengthHelper, escapeHandlebarsHelper, formatFileSizeHelper, formatTimestampHelper, } from './template/helpers/p1p2';
20
23
  export { setAuditVerbose } from './template/helpers/exec';
21
- export type { AgentConfig, CrewxProjectConfig, CrewxOptions, QueryOptions, QueryResult, ExecuteOptions, ExecuteResult, TraceContext, YamlHookEntry, GuideRule, } from './types';
22
- export { AgentSkillsSchema } from './types';
24
+ export type { AgentConfig, CrewxProjectConfig, CrewxOptions, QueryOptions, QueryResult, ExecuteOptions, ExecuteResult, ContextMode, TraceContext, YamlHookEntry, GuideRule, WiBoardConfig, } from './types';
25
+ export { AgentSkillsSchema, WiBoardSchema } from './types';
23
26
  export { loadYamlFile, parseYamlContent, ConfigLoadError } from './config/loader';
27
+ export { resolveWiBoards, isReservedWiBoardId, WI_BOARD_ID_PATTERN, DEFAULT_WI_BOARD_ID, ARCHIVE_WI_BOARD_ID, DEFAULT_WI_WORKFLOW_ID, WI_PLAN_WORKFLOW_ID, WI_DEFAULT_FLOW_FILENAME, WI_PLAN_FLOW_FILENAME, } from './config/wi-boards';
28
+ export type { ResolvedWiBoard } from './config/wi-boards';
29
+ export { createWorkInstruction, createWorkInstructionBatch, WiCreateError, } from './wi/create';
30
+ export type { WiCreateInput, WiBatchCreateInput, WiBatchCreateResult, WiCreatedDetail, WiCreatedSummary, WiStatus as SdkWiStatus, } from './wi/create';
31
+ export { selectNextWi } from './wi/select';
32
+ export type { SelectNextWiResult, WiSummary as SelectableWiSummary, WiSelectableStatus, } from './wi/select';
33
+ export { createGlobalSettingsStore } from './config/global-settings';
34
+ export type { GlobalSettings, GlobalSettingsStore, DeepPartial, CreateGlobalSettingsStoreOptions } from './config/global-settings';
35
+ export { resolveOverdrive, parseOverdriveProfile, parseOverdriveSignal, } from './config/overdrive';
36
+ export type { OverdriveProfile, OverdriveSignal, OverdriveSignalInput, OverdriveResolution, } from './config/overdrive';
37
+ export { migrateGrokLegacyMode } from './config/migrate-grok-mode';
38
+ export type { GrokSandbox, GrokNativeOptions } from './config/migrate-grok-mode';
39
+ export { canonicalizeAgentOptions, normalizeClaudeMode } from './config/canonicalize-agent-options';
40
+ export type { AgentOptionsLike, CanonicalizeAgentOptionsInput, CanonicalizeAgentOptionsResult, } from './config/canonicalize-agent-options';
41
+ export { CLAUDE_MODEL_COMPATIBILITY_PAIRS, CLAUDE_OPUS_4_8_BASE_MODEL_ID, CLAUDE_OPUS_4_8_LEGACY_MODEL_ID, resolveCatalogModelId, } from './config/model-compat';
24
42
  export { initPricingRemote } from './config/pricing.remote';
43
+ export type { ModelApiPricing } from './config/pricing.types';
44
+ export { initModelsRemote } from './config/models.remote';
25
45
  export { resolveAgent, AgentNotFoundError } from './agent/resolver';
26
46
  export { resolveAgentSkills } from './agent/resolve-skills';
27
47
  export { PROVIDER_ORDER, providerRank, compareProviders, normalizeProviderId } from './provider/order';
28
- export { CLAUDE_MODELS, ANTIGRAVITY_MODELS, CODEX_MODELS, COPILOT_MODELS, mergeModels } from './provider/models';
29
- export { createProvider, ProviderError, ClientToolCallRequiredError, registerProviderFactory } from './provider/bridge';
30
- export type { ProviderRuntime, ProviderQueryOptions, ProviderFactory, ProviderUsage, ClientToolCall, ContinuationState } from './provider/bridge';
48
+ export { getProviderModels, getClaudeModels, getCodexModels, getCopilotModels, getAntigravityModels, setModelsOverride, clearModelsOverride, mergeModels, type ModelCatalogEntry, type ModelMergeEntry, type ModelTier, type ProviderOptionSpec, } from './provider/models';
49
+ export { DEFAULT_INPUT_BUDGET_PERCENT, MIN_INPUT_BUDGET_PERCENT, MAX_INPUT_BUDGET_PERCENT, INPUT_BUDGET_TOKENIZER_ENCODING, FRESH_PROVIDER_INITIAL_INPUT_FRAMING, RESUME_PROVIDER_INITIAL_INPUT_FRAMING, normalizeInputBudgetProvider, resolveTokenizerMetadata, countTokens, createTokenCounter, resolveInputBudget, } from './context-budget';
50
+ export type { InputBudgetUnresolvedReason, TokenizerFallbackReason, ResolveInputBudgetOptions, TokenizerOptions, TokenizerMetadata, ResolvedInputBudget, UnresolvedInputBudget, ResolveInputBudgetResult, ContextBudgetPhase, ProviderInitialInputFraming, ContextBudgetManifest, TokenCountResult, TokenCounter, } from './context-budget';
51
+ export { createProvider, ProviderError, ClientToolCallRequiredError, registerProviderFactory, mergeAdditionalArgs } from './provider/bridge';
52
+ export type { ProviderRuntime, ProviderQueryOptions, ProviderFactory, ProviderUsage, ClientToolCall, ContinuationState, AdditionalArgsProvider } from './provider/bridge';
31
53
  export { VercelProviderRuntime } from './provider/vercel-runtime';
32
54
  export type { VercelProviderConfig } from './provider/vercel-runtime';
33
55
  export { registerApiProviders } from './provider/register-api';
34
56
  export * from './provider/acp/index.js';
35
57
  export type { CliProviderAdapter } from './provider/cli/adapter.types';
36
58
  export { RateLimitError } from './provider/cli/adapter.types';
37
- export { BUILTIN_ADAPTERS, claudeAdapter, copilotAdapter, codexAdapter, opencodeAdapter } from './provider/cli/adapters/index';
38
- export { queryAllCliProviderMetas } from './provider/cli/meta';
59
+ export { BUILTIN_ADAPTERS, claudeAdapter, copilotAdapter, codexAdapter, opencodeAdapter, grokAdapter } from './provider/cli/adapters/index';
60
+ export { queryAllCliProviderMetas, queryOpencodeModels } from './provider/cli/meta';
39
61
  export { createDelegateTool } from './tools/delegate';
40
- export { resolveTemplatesPath, resolveDefaultAgentsYaml } from './paths';
62
+ export { resolveTemplatesPath, resolveDefaultAgentsYaml, resolveWorkflowTemplatesPath } from './paths';
41
63
  export { resolveCrewxCli, resolveCrewxWorkspace } from './utils/env-defaults';
64
+ export { getCrewxHome } from './utils/crewx-home';
42
65
  export { generateId, generateFingerprint } from './utils/id';
43
66
  export type { EntityPrefix, PrefixedId } from './utils/id';
44
67
  export { hashWorkspaceId, normalizeWorkspacePath } from './utils/workspace';
45
- export { formatTimestamp } from './utils/timestamp';
68
+ export { formatTimestamp, formatDisplayTimestamp } from './utils/timestamp';
46
69
  export type { TaskLogEntry, TaskLogEntryType } from './types/task-log.types';
70
+ export { extractLegacyWorkflowRunId, scanLegacyUiCardAt, scanLegacyUiCardTags, } from './ui-card/index';
71
+ export type { LegacyUiCardTag } from './ui-card/index';
72
+ export { classifyTaskError } from './provider/classify-task-error';
73
+ export { redactTechnicalMessage } from './provider/redact-technical-message';
74
+ export type { TaskErrorCode, TaskErrorMeta, TaskErrorProjection } from './provider/task-error.types';
47
75
  export { SdkBoxService } from './boxing/box.service';
48
76
  export { buildContext } from './boxing/context-builder';
49
77
  export type { IBoxStorage, ITaskReader, ITokenizer } from './boxing/box-storage.interface';