replicas-engine 0.1.372 → 0.1.374

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/src/index.js +80 -28
  2. package/package.json +1 -1
package/dist/src/index.js CHANGED
@@ -295,7 +295,7 @@ var WORKSPACE_SIZES = ["small", "large"];
295
295
  var INVALID_WORKSPACE_SIZE_ERROR = `Invalid size: must be one of ${WORKSPACE_SIZES.join(", ")}`;
296
296
 
297
297
  // ../shared/src/e2b.ts
298
- var E2B_TEMPLATE_NAME = "replicas-sandbox-2026-06-30-v1";
298
+ var E2B_TEMPLATE_NAME = "replicas-sandbox-2026-06-30-v3";
299
299
 
300
300
  // ../shared/src/runtime-env.ts
301
301
  function parsePosixEnvFile(content) {
@@ -2254,23 +2254,39 @@ var DEFAULT_CHAT_TITLES = {
2254
2254
  };
2255
2255
  var CLAUDE_OPUS_1M_MODEL = "opus[1m]";
2256
2256
  var LEGACY_CLAUDE_OPUS_1M_MODEL = "opus-1m";
2257
+ var CLAUDE_OPUS_4_8_MODEL = "claude-opus-4-8";
2258
+ var CLAUDE_SONNET_5_MODEL = "claude-sonnet-5";
2259
+ var CLAUDE_HAIKU_4_5_MODEL = "claude-haiku-4-5";
2260
+ var CLAUDE_OPUS_4_8_BEDROCK_MODEL = "us.anthropic.claude-opus-4-8";
2261
+ var CLAUDE_SONNET_5_BEDROCK_MODEL = "anthropic.claude-sonnet-5";
2262
+ var CLAUDE_HAIKU_4_5_BEDROCK_MODEL = "us.anthropic.claude-haiku-4-5-20251001-v1:0";
2263
+ var DEFAULT_CLAUDE_MODEL = CLAUDE_OPUS_4_8_MODEL;
2257
2264
  var DEFAULT_CODEX_MODEL = "gpt-5.5";
2258
2265
  var DEFAULT_CURSOR_MODEL = "composer-2.5";
2259
2266
  var DEFAULT_OPENCODE_MODEL = "z-ai/glm-5.2";
2260
2267
  function normalizeClaudeModel(model) {
2261
- if (model === LEGACY_CLAUDE_OPUS_1M_MODEL) {
2262
- return CLAUDE_OPUS_1M_MODEL;
2268
+ if (model === "opus" || model === CLAUDE_OPUS_1M_MODEL || model === LEGACY_CLAUDE_OPUS_1M_MODEL) {
2269
+ return DEFAULT_CLAUDE_MODEL;
2270
+ }
2271
+ if (model === "sonnet") {
2272
+ return CLAUDE_SONNET_5_MODEL;
2273
+ }
2274
+ if (model === "haiku") {
2275
+ return CLAUDE_HAIKU_4_5_MODEL;
2263
2276
  }
2264
2277
  return model;
2265
2278
  }
2279
+ function canUseClaudeFastMode(model) {
2280
+ return normalizeClaudeModel(model) === CLAUDE_OPUS_4_8_MODEL || model === "claude-opus-4-7";
2281
+ }
2266
2282
  var AGENT_MODELS = {
2267
- claude: [CLAUDE_OPUS_1M_MODEL, "sonnet", "haiku"],
2283
+ claude: [DEFAULT_CLAUDE_MODEL, CLAUDE_SONNET_5_MODEL, CLAUDE_HAIKU_4_5_MODEL],
2268
2284
  codex: [DEFAULT_CODEX_MODEL, "gpt-5.4", "gpt-5.4-mini", "gpt-5.3-codex", "gpt-5.2"],
2269
2285
  cursor: [
2270
- "claude-opus-4-8",
2286
+ CLAUDE_OPUS_4_8_MODEL,
2271
2287
  "gpt-5.5",
2272
2288
  "composer-2.5",
2273
- "claude-sonnet-4-6",
2289
+ CLAUDE_SONNET_5_MODEL,
2274
2290
  "claude-opus-4-7",
2275
2291
  "gpt-5.4",
2276
2292
  "gpt-5.4-mini",
@@ -2285,14 +2301,15 @@ var AGENT_MODELS = {
2285
2301
  "gemini-3.1-pro",
2286
2302
  "gemini-3-flash",
2287
2303
  "grok-4.3",
2288
- "claude-haiku-4-5",
2304
+ CLAUDE_HAIKU_4_5_MODEL,
2289
2305
  "kimi-k2.5"
2290
2306
  ],
2291
2307
  opencode: [DEFAULT_OPENCODE_MODEL, "minimax/minimax-m3", "xiaomi/mimo-v2.5-pro", "moonshotai/kimi-k2.6"],
2292
- relay: [CLAUDE_OPUS_1M_MODEL, "sonnet"]
2308
+ relay: [DEFAULT_CLAUDE_MODEL, CLAUDE_SONNET_5_MODEL]
2293
2309
  };
2294
2310
  var MODEL_LABELS = {
2295
- sonnet: "Sonnet 4.5",
2311
+ sonnet: "Sonnet 5",
2312
+ "claude-sonnet-5": "Sonnet 5",
2296
2313
  opus: "Opus 4.8",
2297
2314
  [CLAUDE_OPUS_1M_MODEL]: "Opus 4.8 (1M)",
2298
2315
  [LEGACY_CLAUDE_OPUS_1M_MODEL]: "Opus 4.8 (1M)",
@@ -2313,10 +2330,9 @@ var MODEL_LABELS = {
2313
2330
  "gpt-5.1-codex-mini": "GPT-5.1 Codex Mini",
2314
2331
  "gpt-5-mini": "GPT-5 Mini",
2315
2332
  "composer-2.5": "Composer 2.5",
2316
- "claude-opus-4-8": "Opus 4.8",
2333
+ [CLAUDE_OPUS_4_8_MODEL]: "Opus 4.8",
2317
2334
  "claude-opus-4-7": "Opus 4.7",
2318
- "claude-sonnet-4-6": "Sonnet 4.6",
2319
- "claude-haiku-4-5": "Haiku 4.5",
2335
+ [CLAUDE_HAIKU_4_5_MODEL]: "Haiku 4.5",
2320
2336
  "gemini-3.1-pro": "Gemini 3.1 Pro",
2321
2337
  "gemini-3-flash": "Gemini 3 Flash",
2322
2338
  "grok-4.3": "Grok 4.3",
@@ -2507,6 +2523,7 @@ var CLAUDE_AUTH_ENV_KEYS = [
2507
2523
  "AWS_ACCESS_KEY_ID",
2508
2524
  "AWS_SECRET_ACCESS_KEY",
2509
2525
  "AWS_REGION",
2526
+ "ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION",
2510
2527
  "REPLICAS_CLAUDE_AUTH_METHOD"
2511
2528
  ];
2512
2529
  function claudeAuthEnvFromResponse(response) {
@@ -2521,6 +2538,7 @@ function claudeAuthEnvFromResponse(response) {
2521
2538
  AWS_ACCESS_KEY_ID: response.awsAccessKeyId,
2522
2539
  AWS_SECRET_ACCESS_KEY: response.awsSecretAccessKey,
2523
2540
  AWS_REGION: response.awsRegion,
2541
+ ...response.smallFastModelRegion ? { ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION: response.smallFastModelRegion } : {},
2524
2542
  REPLICAS_CLAUDE_AUTH_METHOD: "bedrock"
2525
2543
  };
2526
2544
  }
@@ -2534,6 +2552,7 @@ var CLAUDE_AUTH_ENV_KEYS_BY_METHOD = {
2534
2552
  "AWS_ACCESS_KEY_ID",
2535
2553
  "AWS_SECRET_ACCESS_KEY",
2536
2554
  "AWS_REGION",
2555
+ "ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION",
2537
2556
  "REPLICAS_CLAUDE_AUTH_METHOD"
2538
2557
  ]
2539
2558
  };
@@ -2998,6 +3017,7 @@ function loadEngineEnv() {
2998
3017
  AWS_ACCESS_KEY_ID: readEnv("AWS_ACCESS_KEY_ID"),
2999
3018
  AWS_SECRET_ACCESS_KEY: readEnv("AWS_SECRET_ACCESS_KEY"),
3000
3019
  AWS_REGION: readEnv("AWS_REGION"),
3020
+ ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION: readEnv("ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION"),
3001
3021
  REPLICAS_CLAUDE_AUTH_METHOD: parseClaudeAuthMethod(readEnv("REPLICAS_CLAUDE_AUTH_METHOD")),
3002
3022
  REPLICAS_CODEX_AUTH_METHOD: parseCodexAuthMethod(readEnv("REPLICAS_CODEX_AUTH_METHOD")),
3003
3023
  REPLICAS_DISABLE_GH_PR_MERGE: readEnv("REPLICAS_DISABLE_GH_PR_MERGE")?.toLowerCase() === "true",
@@ -6057,9 +6077,17 @@ function buildClaudeAgentEnv(overrides) {
6057
6077
  if (overrides) {
6058
6078
  Object.assign(env, overrides);
6059
6079
  }
6060
- if (shouldStripAnthropicApiKey()) {
6080
+ const isBedrock = isClaudeBedrockEnv(env);
6081
+ if (shouldStripAnthropicApiKey(isBedrock)) {
6061
6082
  env.ANTHROPIC_API_KEY = void 0;
6062
6083
  }
6084
+ if (isBedrock) {
6085
+ env.CLAUDE_CODE_USE_BEDROCK = "1";
6086
+ env.CLAUDE_CODE_USE_MANTLE = "1";
6087
+ env.ANTHROPIC_DEFAULT_OPUS_MODEL = CLAUDE_OPUS_4_8_BEDROCK_MODEL;
6088
+ env.ANTHROPIC_DEFAULT_SONNET_MODEL = CLAUDE_SONNET_5_BEDROCK_MODEL;
6089
+ env.ANTHROPIC_DEFAULT_HAIKU_MODEL = CLAUDE_HAIKU_4_5_BEDROCK_MODEL;
6090
+ }
6063
6091
  env.GH_TOKEN = void 0;
6064
6092
  env.GITHUB_TOKEN = void 0;
6065
6093
  env.GH_CONFIG_DIR = void 0;
@@ -6081,9 +6109,12 @@ function buildCodexAgentEnv() {
6081
6109
  delete env.GH_CONFIG_DIR;
6082
6110
  return env;
6083
6111
  }
6084
- function shouldStripAnthropicApiKey() {
6112
+ function shouldStripAnthropicApiKey(isBedrock) {
6085
6113
  const method = ENGINE_ENV.REPLICAS_CLAUDE_AUTH_METHOD;
6086
- return method === "oauth" || method === "bedrock";
6114
+ return method === "oauth" || method === "bedrock" || isBedrock;
6115
+ }
6116
+ function isClaudeBedrockEnv(env) {
6117
+ return ENGINE_ENV.REPLICAS_CLAUDE_AUTH_METHOD === "bedrock" || env.REPLICAS_CLAUDE_AUTH_METHOD === "bedrock" || env.CLAUDE_CODE_USE_BEDROCK === "1";
6087
6118
  }
6088
6119
  function shouldStripOpenAIApiKey() {
6089
6120
  return ENGINE_ENV.REPLICAS_CODEX_AUTH_METHOD === "oauth";
@@ -6568,8 +6599,23 @@ var COMMAND_PROTECTION_SAFE_TOOLS = /* @__PURE__ */ new Set([
6568
6599
  ]);
6569
6600
  var CLAUDE_PARTIAL_MESSAGE_FLUSH_MS = 500;
6570
6601
  function supportsClaudeThinkingDisplay(model) {
6571
- const normalized = model.toLowerCase();
6572
- return AGENT_MODELS.claude.includes(normalized) || normalized === "opus" || /^claude-(?:opus|sonnet|haiku)-4/.test(normalized);
6602
+ const normalized = (normalizeClaudeModel(model) ?? model).toLowerCase();
6603
+ return AGENT_MODELS.claude.includes(normalized) || /^claude-(?:opus|sonnet|haiku)-[4-9]/.test(normalized);
6604
+ }
6605
+ function toClaudeCodeModel(model) {
6606
+ if (ENGINE_ENV.REPLICAS_CLAUDE_AUTH_METHOD !== "bedrock" && ENGINE_ENV.CLAUDE_CODE_USE_BEDROCK !== "1") {
6607
+ return model;
6608
+ }
6609
+ switch (normalizeClaudeModel(model)) {
6610
+ case CLAUDE_OPUS_4_8_MODEL:
6611
+ return "opus";
6612
+ case CLAUDE_SONNET_5_MODEL:
6613
+ return "sonnet";
6614
+ case CLAUDE_HAIKU_4_5_MODEL:
6615
+ return "haiku";
6616
+ default:
6617
+ return model;
6618
+ }
6573
6619
  }
6574
6620
  var TOOL_INPUT_HANDLERS = {
6575
6621
  ExitPlanMode: {
@@ -7019,8 +7065,10 @@ var ClaudeManager = class _ClaudeManager extends CodingAgentManager {
7019
7065
  await this.recordEvent(userMessage);
7020
7066
  }
7021
7067
  const combinedInstructions = this.buildCombinedInstructions(customInstructions);
7022
- const resolvedModel = normalizeClaudeModel(model) || CLAUDE_OPUS_1M_MODEL;
7068
+ const resolvedModel = normalizeClaudeModel(model) || DEFAULT_CLAUDE_MODEL;
7069
+ const claudeCodeModel = toClaudeCodeModel(resolvedModel);
7023
7070
  const resolvedPermissionMode = planMode ? "plan" : "bypassPermissions";
7071
+ const resolvedFastMode = Boolean(fastMode && canUseClaudeFastMode(resolvedModel));
7024
7072
  const signature = {
7025
7073
  combinedInstructions,
7026
7074
  thinkingLevel,
@@ -7028,12 +7076,13 @@ var ClaudeManager = class _ClaudeManager extends CodingAgentManager {
7028
7076
  // tracks the effective flag so a mode change can hot-swap via setPermissionMode
7029
7077
  // without restarting.
7030
7078
  enableInteractiveTools: Boolean(enableInteractiveTools),
7031
- fastMode: Boolean(fastMode)
7079
+ fastMode: resolvedFastMode
7032
7080
  };
7033
7081
  await this.ensureSession({
7034
7082
  signature,
7035
7083
  combinedInstructions,
7036
7084
  resolvedModel,
7085
+ claudeCodeModel,
7037
7086
  resolvedPermissionMode,
7038
7087
  enableInteractiveTools: signature.enableInteractiveTools,
7039
7088
  thinkingLevel
@@ -7057,15 +7106,16 @@ var ClaudeManager = class _ClaudeManager extends CodingAgentManager {
7057
7106
  signature,
7058
7107
  combinedInstructions,
7059
7108
  resolvedModel,
7109
+ claudeCodeModel,
7060
7110
  resolvedPermissionMode,
7061
7111
  enableInteractiveTools,
7062
7112
  thinkingLevel
7063
7113
  } = args;
7064
7114
  if (this.activeQuery && this.activeSessionSignature && this.sessionSignaturesMatch(this.activeSessionSignature, signature)) {
7065
- if (this.activeSessionModel !== resolvedModel) {
7115
+ if (this.activeSessionModel !== claudeCodeModel) {
7066
7116
  try {
7067
- await this.activeQuery.setModel(resolvedModel);
7068
- this.activeSessionModel = resolvedModel;
7117
+ await this.activeQuery.setModel(claudeCodeModel);
7118
+ this.activeSessionModel = claudeCodeModel;
7069
7119
  } catch (err) {
7070
7120
  console.warn("[ClaudeManager] setModel failed; recreating session:", err);
7071
7121
  await this.tearDownSession();
@@ -7087,6 +7137,7 @@ var ClaudeManager = class _ClaudeManager extends CodingAgentManager {
7087
7137
  await this.startSession({
7088
7138
  combinedInstructions,
7089
7139
  resolvedModel,
7140
+ claudeCodeModel,
7090
7141
  resolvedPermissionMode,
7091
7142
  enableInteractiveTools,
7092
7143
  thinkingLevel,
@@ -7100,6 +7151,7 @@ var ClaudeManager = class _ClaudeManager extends CodingAgentManager {
7100
7151
  const {
7101
7152
  combinedInstructions,
7102
7153
  resolvedModel,
7154
+ claudeCodeModel,
7103
7155
  resolvedPermissionMode,
7104
7156
  enableInteractiveTools,
7105
7157
  thinkingLevel,
@@ -7150,7 +7202,7 @@ var ClaudeManager = class _ClaudeManager extends CodingAgentManager {
7150
7202
  ...registryPlugins.length > 0 ? { plugins: registryPlugins } : {},
7151
7203
  ...enableRegistrySkills ? { skills: "all" } : {},
7152
7204
  env: queryEnv,
7153
- model: resolvedModel,
7205
+ model: claudeCodeModel,
7154
7206
  settings: { fastMode: signature.fastMode },
7155
7207
  includePartialMessages: true,
7156
7208
  ...supportsClaudeThinkingDisplay(resolvedModel) ? { thinking: { type: "adaptive", display: "summarized" } } : {},
@@ -7170,7 +7222,7 @@ var ClaudeManager = class _ClaudeManager extends CodingAgentManager {
7170
7222
  this.activeQuery = response;
7171
7223
  this.activePromptStream = promptStream;
7172
7224
  this.activeSessionSignature = signature;
7173
- this.activeSessionModel = resolvedModel;
7225
+ this.activeSessionModel = claudeCodeModel;
7174
7226
  this.activeSessionPermissionMode = resolvedPermissionMode;
7175
7227
  this.sessionLinearForwarder = new LinearEventForwarder(ENGINE_ENV.LINEAR_SESSION_ID);
7176
7228
  this.activeBackgroundTasks.clear();
@@ -7731,7 +7783,7 @@ var AspClient = class {
7731
7783
  // src/managers/codex-asp/app-server-process.ts
7732
7784
  var DEFAULT_CODEX_BINARY = "codex";
7733
7785
  var DEFAULT_CODEX_ARGS = ["app-server", "--listen", "stdio://"];
7734
- var ENGINE_PACKAGE_VERSION = "0.1.372";
7786
+ var ENGINE_PACKAGE_VERSION = "0.1.374";
7735
7787
  var INITIALIZE_METHOD = "initialize";
7736
7788
  var INITIALIZED_NOTIFICATION = "initialized";
7737
7789
  var ACCOUNT_LOGIN_START_METHOD = "account/login/start";
@@ -10433,7 +10485,7 @@ You will also receive the chatId so you can send follow-up messages or clean up
10433
10485
  provider: providerEnum.describe(providerDesc),
10434
10486
  prompt: z.string().describe("The full prompt/instructions for the subagent. Be detailed - it has no context from your conversation."),
10435
10487
  model: z.string().optional().describe([
10436
- `Model override. Claude: ${AGENT_MODELS.claude.join(", ")} (opus[1m] is the default, 1M context, use for very large codebases or huge context tasks).`,
10488
+ `Model override. Claude: ${AGENT_MODELS.claude.join(", ")} (opus is the default; sonnet is faster).`,
10437
10489
  codexAvailable ? "Codex: gpt-5.5, gpt-5.4, gpt-5.3-codex, etc." : null,
10438
10490
  cursorAvailable ? `Cursor: ${AGENT_MODELS.cursor.join(", ")}.` : null,
10439
10491
  opencodeAvailable ? `Opencode: ${AGENT_MODELS.opencode.join(", ")}.` : null
@@ -10682,7 +10734,7 @@ function getDelegationSection(codexAvailable, cursorAvailable, opencodeAvailable
10682
10734
  ].filter(Boolean);
10683
10735
  const agentSelectionLines = extraAgentLines.length > 0 ? `${extraAgentLines.join("\n\n")}
10684
10736
 
10685
- Use provider 'claude' for codebase exploration, code review, planning, complex debugging, and tasks requiring nuanced architectural understanding. Suggested models: ${claudeModelList} (opus[1m] is the default, 1M context window, use for very large codebases; sonnet is faster).` : `Use provider 'claude' for all tasks including code writing, codebase exploration, code review, planning, complex debugging, and tasks requiring nuanced architectural understanding. Suggested models: ${claudeModelList} (opus[1m] is the default, 1M context window, use for very large codebases; sonnet is faster).`;
10737
+ Use provider 'claude' for codebase exploration, code review, planning, complex debugging, and tasks requiring nuanced architectural understanding. Suggested models: ${claudeModelList} (opus is the default; sonnet is faster).` : `Use provider 'claude' for all tasks including code writing, codebase exploration, code review, planning, complex debugging, and tasks requiring nuanced architectural understanding. Suggested models: ${claudeModelList} (opus is the default; sonnet is faster).`;
10686
10738
  return `# Delegation
10687
10739
 
10688
10740
  You have three subagent tools for spawning and managing agents that run in separate context windows:
@@ -10791,7 +10843,7 @@ function getEnvironmentSection() {
10791
10843
  `Platform: ${process.platform}`,
10792
10844
  getShellInfoLine(),
10793
10845
  `OS Version: ${unameSR}`,
10794
- `The most recent Claude model family is Claude 4.5/4.6/4.8. Model IDs \u2014 Opus 4.8: 'claude-opus-4-8', Sonnet 4.6: 'claude-sonnet-4-6', Haiku 4.5: 'claude-haiku-4-5-20251001'. When building AI applications, default to the latest and most capable Claude models.`
10846
+ `The most recent Claude model family is Claude 5/4.8. Model IDs \u2014 Opus 4.8: 'claude-opus-4-8', Sonnet 5: 'claude-sonnet-5', Haiku 4.5: 'claude-haiku-4-5-20251001'. When building AI applications, default to the latest and most capable Claude models.`
10795
10847
  ];
10796
10848
  return [
10797
10849
  `# Environment`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replicas-engine",
3
- "version": "0.1.372",
3
+ "version": "0.1.374",
4
4
  "description": "Lightweight API server for Replicas workspaces",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",