@aiden-ade/sandbox-agent 0.1.40 → 0.1.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.cjs +187 -103
  2. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -14590,9 +14590,9 @@ function getAlanAgentPrompt(agentId) {
14590
14590
  return getAgentSystemPrompt(agentId);
14591
14591
  }
14592
14592
 
14593
- // ../shared/dist/types/frontend.js
14593
+ // ../shared/dist/effort.js
14594
14594
  var EFFORT_LEVELS = ["minimal", "low", "medium", "high", "xhigh", "max", "ultra"];
14595
- var CLAUDE_48_EFFORT_LEVELS = [
14595
+ var CLAUDE_EFFORT_LEVELS = [
14596
14596
  "minimal",
14597
14597
  "low",
14598
14598
  "medium",
@@ -14600,20 +14600,144 @@ var CLAUDE_48_EFFORT_LEVELS = [
14600
14600
  "xhigh",
14601
14601
  "max"
14602
14602
  ];
14603
- var CLAUDE_5_EFFORT_LEVELS = [
14603
+ var CODEX_5X_EFFORT_LEVELS = ["low", "medium", "high", "xhigh"];
14604
+ var GPT_5_5_EFFORT_LEVELS = [
14604
14605
  "minimal",
14606
+ "low",
14607
+ "medium",
14608
+ "high",
14609
+ "xhigh"
14610
+ ];
14611
+ var GPT_5_4_EFFORT_LEVELS = ["low", "medium", "high"];
14612
+ var GPT_5_6_EFFORT_LEVELS = [
14605
14613
  "low",
14606
14614
  "medium",
14607
14615
  "high",
14608
14616
  "xhigh",
14609
14617
  "max"
14610
14618
  ];
14611
- var CODEX_5X_EFFORT_LEVELS = [
14619
+ var GPT_5_6_ULTRA_EFFORT_LEVELS = [
14612
14620
  "low",
14613
14621
  "medium",
14614
14622
  "high",
14615
- "xhigh"
14623
+ "xhigh",
14624
+ "max",
14625
+ "ultra"
14626
+ ];
14627
+ var ATOMIC_MODEL_IDS = /* @__PURE__ */ new Set([
14628
+ "gpt-5.1-codex-max",
14629
+ "opencode/gpt-5.1-codex-max"
14630
+ ]);
14631
+ var EFFORT_SUFFIXES = [
14632
+ { suffix: "-extra-high", level: "xhigh" },
14633
+ { suffix: "-xhigh", level: "xhigh" },
14634
+ { suffix: "-ultra", level: "ultra" },
14635
+ { suffix: "-max", level: "max" },
14636
+ { suffix: "-high", level: "high" },
14637
+ { suffix: "-medium", level: "medium" },
14638
+ { suffix: "-low", level: "low" },
14639
+ { suffix: "-none", level: "minimal" },
14640
+ { suffix: "-minimal", level: "minimal" }
14616
14641
  ];
14642
+ function isAtomicModelId(modelId) {
14643
+ return ATOMIC_MODEL_IDS.has(modelId.trim());
14644
+ }
14645
+ function isEffortLevel(value2) {
14646
+ return EFFORT_LEVELS.includes(value2);
14647
+ }
14648
+ var EFFORT_RANK = {
14649
+ minimal: 0,
14650
+ low: 1,
14651
+ medium: 2,
14652
+ high: 3,
14653
+ xhigh: 4,
14654
+ max: 5,
14655
+ ultra: 6
14656
+ };
14657
+ function clampEffortToSupported(requested, allowed) {
14658
+ if (!requested?.trim() || allowed.length === 0)
14659
+ return null;
14660
+ const normalized = requested.trim().toLowerCase();
14661
+ if (!isEffortLevel(normalized))
14662
+ return null;
14663
+ if (allowed.includes(normalized))
14664
+ return normalized;
14665
+ const targetRank = EFFORT_RANK[normalized];
14666
+ let best = null;
14667
+ for (const level of allowed) {
14668
+ if (EFFORT_RANK[level] <= targetRank) {
14669
+ if (!best || EFFORT_RANK[level] > EFFORT_RANK[best])
14670
+ best = level;
14671
+ }
14672
+ }
14673
+ return best ?? allowed[0] ?? null;
14674
+ }
14675
+ function inferEffortLevelsForModel(harness, modelId) {
14676
+ const id = collapseModelIdToBase(modelId);
14677
+ if (harness === "claude_cli" || id.startsWith("claude-") || id === "sonnet" || id === "opus") {
14678
+ if (id === "haiku" || id.startsWith("claude-haiku-"))
14679
+ return [];
14680
+ return CLAUDE_EFFORT_LEVELS;
14681
+ }
14682
+ if (id === "gpt-5.5")
14683
+ return GPT_5_5_EFFORT_LEVELS;
14684
+ if (id === "gpt-5.4" || id === "gpt-5.4-mini")
14685
+ return GPT_5_4_EFFORT_LEVELS;
14686
+ if (/^gpt-5\.6-/.test(id)) {
14687
+ const hasUltra = id.includes("-sol") || id.includes("-terra");
14688
+ return hasUltra ? GPT_5_6_ULTRA_EFFORT_LEVELS : GPT_5_6_EFFORT_LEVELS;
14689
+ }
14690
+ if (id.includes("codex") || /^gpt-5\.[0-3]/.test(id))
14691
+ return CODEX_5X_EFFORT_LEVELS;
14692
+ return [];
14693
+ }
14694
+ function resolveWireEffort(input) {
14695
+ const allowed = input.effortLevels && input.effortLevels.length > 0 ? input.effortLevels : inferEffortLevelsForModel(input.harness, input.modelId);
14696
+ const clamped = clampEffortToSupported(input.selectedEffortLevel, allowed);
14697
+ if (!clamped)
14698
+ return null;
14699
+ if (input.harness === "cursor_agent_cli" && clamped === "minimal")
14700
+ return "none";
14701
+ if (input.harness === "claude_cli" && clamped === "minimal")
14702
+ return "low";
14703
+ return clamped;
14704
+ }
14705
+ function parseModelEffortSuffix(modelId) {
14706
+ const trimmed = modelId.trim();
14707
+ if (!trimmed)
14708
+ return { baseId: "", effort: null, fast: false };
14709
+ if (isAtomicModelId(trimmed)) {
14710
+ return { baseId: trimmed, effort: null, fast: false };
14711
+ }
14712
+ let id = trimmed;
14713
+ let fast = false;
14714
+ if (id.endsWith("-fast")) {
14715
+ const withoutFast = id.slice(0, -"-fast".length);
14716
+ if (isAtomicModelId(withoutFast)) {
14717
+ return { baseId: withoutFast, effort: null, fast: true };
14718
+ }
14719
+ fast = true;
14720
+ id = withoutFast;
14721
+ }
14722
+ if (isAtomicModelId(id)) {
14723
+ return { baseId: id, effort: null, fast };
14724
+ }
14725
+ for (const { suffix, level } of EFFORT_SUFFIXES) {
14726
+ if (id.endsWith(suffix)) {
14727
+ return { baseId: id.slice(0, -suffix.length), effort: level, fast };
14728
+ }
14729
+ }
14730
+ return { baseId: id, effort: null, fast };
14731
+ }
14732
+ function collapseModelIdToBase(modelId) {
14733
+ const parsed = parseModelEffortSuffix(modelId);
14734
+ if (parsed.fast && !parsed.effort)
14735
+ return modelId.trim();
14736
+ return parsed.baseId;
14737
+ }
14738
+
14739
+ // ../shared/dist/types/frontend.js
14740
+ var CLAUDE_5_EFFORT_LEVELS = CLAUDE_EFFORT_LEVELS;
14617
14741
  var AVAILABLE_MODELS = [
14618
14742
  {
14619
14743
  id: "",
@@ -14628,7 +14752,7 @@ var AVAILABLE_MODELS = [
14628
14752
  {
14629
14753
  id: "claude-opus-4-8",
14630
14754
  name: "Opus 4.8",
14631
- capabilities: { contextWindows: ["200k", "1m"], effortLevels: CLAUDE_48_EFFORT_LEVELS }
14755
+ capabilities: { contextWindows: ["200k", "1m"], effortLevels: CLAUDE_5_EFFORT_LEVELS }
14632
14756
  },
14633
14757
  {
14634
14758
  id: "claude-haiku-4-5",
@@ -14867,51 +14991,8 @@ function findModelDef(providerKind, modelId) {
14867
14991
  }
14868
14992
 
14869
14993
  // ../shared/dist/cursor-agent-models.js
14870
- var CLAUDE_5_EFFORT_LEVELS2 = [
14871
- "minimal",
14872
- "low",
14873
- "medium",
14874
- "high",
14875
- "xhigh",
14876
- "max"
14877
- ];
14878
- var CODEX_5X_EFFORT_LEVELS2 = ["low", "medium", "high", "xhigh"];
14879
- var GPT_5_5_EFFORT_LEVELS = ["minimal", "low", "medium", "high", "xhigh"];
14880
- var GPT_5_4_EFFORT_LEVELS = ["low", "medium", "high"];
14881
- var GPT_5_6_EFFORT_LEVELS = [
14882
- "low",
14883
- "medium",
14884
- "high",
14885
- "xhigh",
14886
- "max",
14887
- "ultra"
14888
- ];
14889
- var CURSOR_EFFORT_SUFFIXES = [
14890
- { suffix: "-extra-high", level: "xhigh" },
14891
- { suffix: "-xhigh", level: "xhigh" },
14892
- { suffix: "-ultra", level: "ultra" },
14893
- { suffix: "-max", level: "max" },
14894
- { suffix: "-high", level: "high" },
14895
- { suffix: "-medium", level: "medium" },
14896
- { suffix: "-low", level: "low" },
14897
- { suffix: "-none", level: "minimal" }
14898
- ];
14899
- function parseCursorModelId(modelId) {
14900
- let id = modelId.trim();
14901
- let fast = false;
14902
- if (id.endsWith("-fast")) {
14903
- fast = true;
14904
- id = id.slice(0, -"-fast".length);
14905
- }
14906
- for (const { suffix, level } of CURSOR_EFFORT_SUFFIXES) {
14907
- if (id.endsWith(suffix)) {
14908
- return { baseId: id.slice(0, -suffix.length), effort: level, fast };
14909
- }
14910
- }
14911
- return { baseId: id, effort: null, fast };
14912
- }
14913
14994
  function getCursorModelCollapseKey(modelId) {
14914
- const parsed = parseCursorModelId(modelId);
14995
+ const parsed = parseModelEffortSuffix(modelId);
14915
14996
  if (parsed.fast && !parsed.effort)
14916
14997
  return modelId.trim();
14917
14998
  return parsed.baseId;
@@ -15017,11 +15098,11 @@ function inferSlugModelCapabilities(providerKind, modelId) {
15017
15098
  const hasUltra = id.includes("-sol") || id.includes("-terra");
15018
15099
  return {
15019
15100
  contextWindows: [],
15020
- effortLevels: hasUltra ? GPT_5_6_EFFORT_LEVELS : GPT_5_6_EFFORT_LEVELS.filter((level) => level !== "ultra")
15101
+ effortLevels: hasUltra ? GPT_5_6_ULTRA_EFFORT_LEVELS : GPT_5_6_EFFORT_LEVELS
15021
15102
  };
15022
15103
  }
15023
15104
  if (id.includes("codex") || /^gpt-5\.[0-3]/.test(id)) {
15024
- return { contextWindows: [], effortLevels: CODEX_5X_EFFORT_LEVELS2 };
15105
+ return { contextWindows: [], effortLevels: CODEX_5X_EFFORT_LEVELS };
15025
15106
  }
15026
15107
  return void 0;
15027
15108
  }
@@ -15030,10 +15111,10 @@ function inferSlugModelCapabilities(providerKind, modelId) {
15030
15111
  return { contextWindows: ["200k"], effortLevels: [] };
15031
15112
  }
15032
15113
  if (id === "claude-opus-4-8") {
15033
- return { contextWindows: ["200k", "1m"], effortLevels: CLAUDE_5_EFFORT_LEVELS2 };
15114
+ return { contextWindows: ["200k", "1m"], effortLevels: CLAUDE_EFFORT_LEVELS };
15034
15115
  }
15035
15116
  if (id === "sonnet" || id === "opus" || id === "fable" || /^claude-(sonnet|opus|fable)-/.test(id)) {
15036
- return { contextWindows: ["200k", "1m"], effortLevels: CLAUDE_5_EFFORT_LEVELS2 };
15117
+ return { contextWindows: ["200k", "1m"], effortLevels: CLAUDE_EFFORT_LEVELS };
15037
15118
  }
15038
15119
  return void 0;
15039
15120
  }
@@ -17347,11 +17428,15 @@ function createClaudeCliBackend(command = "claude", defaultArgs = []) {
17347
17428
  if (context.config.teamId?.trim() && await cliSupportsFlag(command, "--approve-mcps", context.env)) {
17348
17429
  args.push("--approve-mcps");
17349
17430
  }
17350
- const baseModel = context.config.selectedModel?.trim();
17431
+ const baseModel = collapseModelIdToBase(context.config.selectedModel?.trim() || "");
17351
17432
  if (baseModel) {
17352
17433
  args.push("--model", buildClaudeModelArg(baseModel, context.config.selectedContextWindow));
17353
17434
  }
17354
- const claudeEffort = context.config.selectedEffortLevel?.trim();
17435
+ const claudeEffort = resolveWireEffort({
17436
+ harness: "claude_cli",
17437
+ modelId: baseModel,
17438
+ selectedEffortLevel: context.config.selectedEffortLevel
17439
+ });
17355
17440
  if (claudeEffort) {
17356
17441
  args.push("--effort", claudeEffort);
17357
17442
  }
@@ -17872,8 +17957,14 @@ var parseCodexStructuredLine = createStructuredLineParser(
17872
17957
  "codex_app_server",
17873
17958
  handleCodexStructuredEvent
17874
17959
  );
17875
- function buildCodexEffortArgs(selectedEffortLevel) {
17876
- const level = selectedEffortLevel?.trim();
17960
+ function buildCodexEffortArgs(selectedEffortLevel, options) {
17961
+ const modelId = collapseModelIdToBase(options?.modelId?.trim() || "");
17962
+ const level = resolveWireEffort({
17963
+ harness: "codex_app_server",
17964
+ modelId,
17965
+ selectedEffortLevel,
17966
+ effortLevels: options?.effortLevels
17967
+ });
17877
17968
  if (!level) return [];
17878
17969
  return ["-c", `model_reasoning_effort=${level}`];
17879
17970
  }
@@ -17923,8 +18014,11 @@ function createCodexRuntimeBackend(command = "codex", defaultArgs = []) {
17923
18014
  startupTimeoutMs: CODEX_STARTUP_TIMEOUT_MS,
17924
18015
  buildArgs: (ctx) => {
17925
18016
  const resumeId = resumableSessionId;
17926
- const modelArgs = ctx.config.selectedModel?.trim() ? ["--model", ctx.config.selectedModel.trim()] : [];
17927
- const effortArgs = buildCodexEffortArgs(ctx.config.selectedEffortLevel);
18017
+ const selectedModel = collapseModelIdToBase(ctx.config.selectedModel?.trim() || "");
18018
+ const modelArgs = selectedModel ? ["--model", selectedModel] : [];
18019
+ const effortArgs = buildCodexEffortArgs(ctx.config.selectedEffortLevel, {
18020
+ modelId: selectedModel
18021
+ });
17928
18022
  const permissionArgs = getCodexPermissionArgs(ctx.config);
17929
18023
  const imageArgs = imagePaths.flatMap((p) => ["--image", p]);
17930
18024
  const baseArgs = resumeId ? [
@@ -18228,58 +18322,48 @@ var parseCursorStructuredLine = createStructuredLineParser(
18228
18322
  "cursor_agent_cli",
18229
18323
  handleCursorStructuredEvent
18230
18324
  );
18231
- var CURSOR_EFFORT_SUFFIXES2 = [
18232
- { suffix: "-extra-high", level: "xhigh" },
18233
- { suffix: "-xhigh", level: "xhigh" },
18234
- { suffix: "-max", level: "max" },
18235
- { suffix: "-high", level: "high" },
18236
- { suffix: "-medium", level: "medium" },
18237
- { suffix: "-low", level: "low" },
18238
- { suffix: "-none", level: "minimal" }
18239
- ];
18240
- function parseCursorModelId2(modelId) {
18241
- let id = modelId.trim();
18242
- let fast = false;
18243
- if (id.endsWith("-fast")) {
18244
- fast = true;
18245
- id = id.slice(0, -"-fast".length);
18246
- }
18247
- for (const { suffix, level } of CURSOR_EFFORT_SUFFIXES2) {
18248
- if (id.endsWith(suffix)) {
18249
- return { baseId: id.slice(0, -suffix.length), effort: level, fast };
18250
- }
18251
- }
18252
- return { baseId: id, effort: null, fast };
18253
- }
18254
- function cursorEffortForBracket(level) {
18255
- if (level === "minimal") return "none";
18256
- return level;
18257
- }
18258
- function asEffortLevel(value2, allowed) {
18259
- if (!value2) return null;
18260
- return allowed.includes(value2) ? value2 : null;
18261
- }
18262
18325
  function asContextWindow(value2) {
18263
18326
  if (value2 === "1m" || value2 === "200k") return value2;
18264
18327
  return null;
18265
18328
  }
18329
+ function cursorEffortSuffix(level, baseId) {
18330
+ if (level === "minimal") return "-none";
18331
+ if (level === "xhigh") {
18332
+ if (/^gpt-5\.5(?:-|$)/.test(baseId)) return "-extra-high";
18333
+ return "-xhigh";
18334
+ }
18335
+ if (level === "ultra") return "-max";
18336
+ return `-${level}`;
18337
+ }
18266
18338
  function buildCursorAgentModelArg(modelId, options) {
18267
18339
  const trimmed = modelId.trim();
18268
18340
  if (!trimmed) return trimmed;
18269
- const parsed = parseCursorModelId2(trimmed);
18341
+ const parsed = parseModelEffortSuffix(trimmed);
18270
18342
  if (parsed.fast && !parsed.effort) return trimmed;
18343
+ const baseId = collapseModelIdToBase(trimmed);
18271
18344
  const effortLevels = options?.effortLevels ?? [];
18272
- const overrides = [];
18273
- const contextWindow = asContextWindow(options?.selectedContextWindow);
18274
- if (contextWindow === "1m") {
18275
- overrides.push("context=1m");
18345
+ const wireEffort = resolveWireEffort({
18346
+ harness: "cursor_agent_cli",
18347
+ modelId: baseId,
18348
+ selectedEffortLevel: options?.selectedEffortLevel,
18349
+ effortLevels
18350
+ });
18351
+ let id = baseId;
18352
+ if (wireEffort) {
18353
+ const alanLevel = wireEffort === "none" ? "minimal" : wireEffort;
18354
+ if (isEffortLevel(alanLevel)) {
18355
+ const allowed = effortLevels.length === 0 || effortLevels.includes(alanLevel) || alanLevel === "minimal" && effortLevels.includes("minimal");
18356
+ if (allowed) {
18357
+ id = `${baseId}${cursorEffortSuffix(alanLevel, baseId)}`;
18358
+ }
18359
+ }
18276
18360
  }
18277
- const effort = asEffortLevel(options?.selectedEffortLevel, effortLevels);
18278
- if (effort) {
18279
- overrides.push(`effort=${cursorEffortForBracket(effort)}`);
18361
+ const contextWindow = asContextWindow(options?.selectedContextWindow);
18362
+ if (contextWindow === "1m" && id === baseId) {
18363
+ return `${baseId}[context=1m]`;
18280
18364
  }
18281
- if (overrides.length === 0) return parsed.baseId;
18282
- return `${parsed.baseId}[${overrides.join(",")}]`;
18365
+ if (parsed.fast) return `${id}-fast`;
18366
+ return id;
18283
18367
  }
18284
18368
  function isCursorAgentCliModelId(model) {
18285
18369
  return model === "auto" || /^composer-/.test(model) || /^gpt-/.test(model) || /^claude-/.test(model) || /^gemini-/.test(model) || /^grok-/.test(model) || /^kimi-/.test(model);
@@ -18359,7 +18443,7 @@ function createCursorAgentCliBackend(command = "cursor-agent", defaultArgs = [])
18359
18443
  }
18360
18444
  const model = ctx.config.selectedModel?.trim();
18361
18445
  if (model && isDispatchableCursorModel(model)) {
18362
- const modelDef = findModelDef("cursor_agent_cli", model);
18446
+ const modelDef = findModelDef("cursor_agent_cli", model) ?? findModelDef("cursor_agent_cli", model.replace(/-fast$/, ""));
18363
18447
  args.push(
18364
18448
  "--model",
18365
18449
  buildCursorAgentModelArg(model, {
@@ -22443,7 +22527,7 @@ var RunStartGate = class {
22443
22527
  };
22444
22528
 
22445
22529
  // src/version.ts
22446
- var AGENT_VERSION = "0.1.40";
22530
+ var AGENT_VERSION = "0.1.41";
22447
22531
 
22448
22532
  // src/workspace-relocation.ts
22449
22533
  var import_node_child_process3 = require("child_process");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiden-ade/sandbox-agent",
3
- "version": "0.1.40",
3
+ "version": "0.1.41",
4
4
  "type": "module",
5
5
  "description": "Alan agent runtime — cloud sandbox and local daemon (alan-agent CLI)",
6
6
  "bin": {