replicas-engine 0.1.374 → 0.1.376

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/src/index.js CHANGED
@@ -130,11 +130,180 @@ function detectLanguageByPath(filePath) {
130
130
  return EXT_TO_LANGUAGE[ext] ?? null;
131
131
  }
132
132
 
133
+ // ../shared/src/engine/types.ts
134
+ var DEFAULT_CHAT_TITLES = {
135
+ claude: "Claude Code",
136
+ codex: "Codex",
137
+ cursor: "Cursor",
138
+ opencode: "Opencode",
139
+ relay: "Relay"
140
+ };
141
+ var CLAUDE_OPUS_1M_MODEL = "opus[1m]";
142
+ var LEGACY_CLAUDE_OPUS_1M_MODEL = "opus-1m";
143
+ var CLAUDE_OPUS_4_8_MODEL = "claude-opus-4-8";
144
+ var CLAUDE_SONNET_5_MODEL = "claude-sonnet-5";
145
+ var CLAUDE_HAIKU_4_5_MODEL = "claude-haiku-4-5";
146
+ var CLAUDE_OPUS_4_8_BEDROCK_MODEL = "us.anthropic.claude-opus-4-8";
147
+ var CLAUDE_SONNET_5_BEDROCK_MODEL = "anthropic.claude-sonnet-5";
148
+ var CLAUDE_HAIKU_4_5_BEDROCK_MODEL = "us.anthropic.claude-haiku-4-5-20251001-v1:0";
149
+ var DEFAULT_CLAUDE_MODEL = CLAUDE_OPUS_4_8_MODEL;
150
+ var DEFAULT_CODEX_MODEL = "gpt-5.5";
151
+ var DEFAULT_CURSOR_MODEL = "composer-2.5";
152
+ var DEFAULT_OPENCODE_MODEL = "z-ai/glm-5.2";
153
+ function normalizeClaudeModel(model) {
154
+ if (model === "opus" || model === CLAUDE_OPUS_1M_MODEL || model === LEGACY_CLAUDE_OPUS_1M_MODEL) {
155
+ return DEFAULT_CLAUDE_MODEL;
156
+ }
157
+ if (model === "sonnet") {
158
+ return CLAUDE_SONNET_5_MODEL;
159
+ }
160
+ if (model === "haiku") {
161
+ return CLAUDE_HAIKU_4_5_MODEL;
162
+ }
163
+ return model;
164
+ }
165
+ var CLAUDE_MODEL_CONTEXT_WINDOWS = {
166
+ [CLAUDE_OPUS_4_8_MODEL]: 1e6,
167
+ [CLAUDE_SONNET_5_MODEL]: 1e6,
168
+ [CLAUDE_HAIKU_4_5_MODEL]: 2e5,
169
+ [CLAUDE_OPUS_4_8_BEDROCK_MODEL]: 1e6,
170
+ [CLAUDE_SONNET_5_BEDROCK_MODEL]: 1e6,
171
+ [CLAUDE_HAIKU_4_5_BEDROCK_MODEL]: 2e5,
172
+ "anthropic.claude-opus-4-8": 1e6,
173
+ "us.anthropic.claude-sonnet-5": 1e6,
174
+ "anthropic.claude-haiku-4-5": 2e5,
175
+ "claude-haiku-4-5-20251001": 2e5,
176
+ "claude-haiku-4-5@20251001": 2e5
177
+ };
178
+ function getClaudeModelContextWindow(model) {
179
+ if (!model) return null;
180
+ const normalized = normalizeClaudeModel(model) ?? model;
181
+ return CLAUDE_MODEL_CONTEXT_WINDOWS[normalized] ?? CLAUDE_MODEL_CONTEXT_WINDOWS[model] ?? null;
182
+ }
183
+ function canUseClaudeFastMode(model) {
184
+ return normalizeClaudeModel(model) === CLAUDE_OPUS_4_8_MODEL || model === "claude-opus-4-7";
185
+ }
186
+ var AGENT_MODELS = {
187
+ claude: [DEFAULT_CLAUDE_MODEL, CLAUDE_SONNET_5_MODEL, CLAUDE_HAIKU_4_5_MODEL],
188
+ codex: [DEFAULT_CODEX_MODEL, "gpt-5.4", "gpt-5.4-mini", "gpt-5.3-codex", "gpt-5.2"],
189
+ cursor: [
190
+ CLAUDE_OPUS_4_8_MODEL,
191
+ "gpt-5.5",
192
+ "composer-2.5",
193
+ CLAUDE_SONNET_5_MODEL,
194
+ "claude-opus-4-7",
195
+ "gpt-5.4",
196
+ "gpt-5.4-mini",
197
+ "gpt-5.4-nano",
198
+ "gpt-5.3-codex",
199
+ "gpt-5.2",
200
+ "gpt-5.2-codex",
201
+ "gpt-5.1",
202
+ "gpt-5.1-codex-max",
203
+ "gpt-5.1-codex-mini",
204
+ "gpt-5-mini",
205
+ "gemini-3.1-pro",
206
+ "gemini-3-flash",
207
+ "grok-4.3",
208
+ CLAUDE_HAIKU_4_5_MODEL,
209
+ "kimi-k2.5"
210
+ ],
211
+ opencode: [DEFAULT_OPENCODE_MODEL, "minimax/minimax-m3", "xiaomi/mimo-v2.5-pro", "moonshotai/kimi-k2.6"],
212
+ relay: [DEFAULT_CLAUDE_MODEL, CLAUDE_SONNET_5_MODEL]
213
+ };
214
+ var MODEL_LABELS = {
215
+ sonnet: "Sonnet 5",
216
+ "claude-sonnet-5": "Sonnet 5",
217
+ opus: "Opus 4.8",
218
+ [CLAUDE_OPUS_1M_MODEL]: "Opus 4.8 (1M)",
219
+ [LEGACY_CLAUDE_OPUS_1M_MODEL]: "Opus 4.8 (1M)",
220
+ haiku: "Haiku 4.5",
221
+ [DEFAULT_CODEX_MODEL]: "GPT-5.5",
222
+ [DEFAULT_OPENCODE_MODEL]: "GLM 5.2 via OpenRouter",
223
+ "minimax/minimax-m3": "MiniMax M3 via OpenRouter",
224
+ "xiaomi/mimo-v2.5-pro": "MiMo V2.5 Pro via OpenRouter",
225
+ "moonshotai/kimi-k2.6": "Kimi K2.6 via OpenRouter",
226
+ "gpt-5.4": "GPT-5.4",
227
+ "gpt-5.4-mini": "GPT-5.4 Mini",
228
+ "gpt-5.4-nano": "GPT-5.4 Nano",
229
+ "gpt-5.3-codex": "GPT-5.3 Codex",
230
+ "gpt-5.2": "GPT-5.2",
231
+ "gpt-5.2-codex": "GPT-5.2 Codex",
232
+ "gpt-5.1": "GPT-5.1",
233
+ "gpt-5.1-codex-max": "GPT-5.1 Codex Max",
234
+ "gpt-5.1-codex-mini": "GPT-5.1 Codex Mini",
235
+ "gpt-5-mini": "GPT-5 Mini",
236
+ "composer-2.5": "Composer 2.5",
237
+ [CLAUDE_OPUS_4_8_MODEL]: "Opus 4.8",
238
+ "claude-opus-4-7": "Opus 4.7",
239
+ [CLAUDE_HAIKU_4_5_MODEL]: "Haiku 4.5",
240
+ "gemini-3.1-pro": "Gemini 3.1 Pro",
241
+ "gemini-3-flash": "Gemini 3 Flash",
242
+ "grok-4.3": "Grok 4.3",
243
+ "kimi-k2.5": "Kimi K2.5"
244
+ };
245
+ var IMAGE_MEDIA_TYPES = ["image/png", "image/jpeg", "image/gif", "image/webp"];
246
+ var MAX_CANVAS_FILE_BYTES = 5 * 1024 * 1024;
247
+ function isCanvasTextKind(kind) {
248
+ return kind === "markdown" || kind === "html";
249
+ }
250
+ function sanitizeCanvasFilename(filename) {
251
+ const safe = filename.split(/[\\/]/).pop() ?? "";
252
+ if (!safe || safe !== filename || safe.startsWith(".")) return null;
253
+ return safe;
254
+ }
255
+ function bytesToBase64(bytes) {
256
+ let binary = "";
257
+ const chunkSize = 32768;
258
+ for (let i = 0; i < bytes.length; i += chunkSize) {
259
+ binary += String.fromCharCode(...bytes.subarray(i, i + chunkSize));
260
+ }
261
+ return btoa(binary);
262
+ }
263
+ function serializeCanvasContentResponse(input) {
264
+ const base = {
265
+ filename: input.filename,
266
+ kind: input.kind,
267
+ sizeBytes: input.sizeBytes,
268
+ mimeType: input.mimeType
269
+ };
270
+ if (isCanvasTextKind(input.kind)) {
271
+ return { ...base, content: new TextDecoder().decode(input.bytes) };
272
+ }
273
+ return { ...base, base64: bytesToBase64(input.bytes) };
274
+ }
275
+ var CANVAS_KIND_BY_EXTENSION = {
276
+ ".md": { kind: "markdown", mimeType: "text/markdown; charset=utf-8" },
277
+ ".markdown": { kind: "markdown", mimeType: "text/markdown; charset=utf-8" },
278
+ ".html": { kind: "html", mimeType: "text/html; charset=utf-8" },
279
+ ".htm": { kind: "html", mimeType: "text/html; charset=utf-8" },
280
+ ".png": { kind: "image", mimeType: "image/png" },
281
+ ".jpg": { kind: "image", mimeType: "image/jpeg" },
282
+ ".jpeg": { kind: "image", mimeType: "image/jpeg" },
283
+ ".gif": { kind: "image", mimeType: "image/gif" },
284
+ ".webp": { kind: "image", mimeType: "image/webp" },
285
+ ".svg": { kind: "image", mimeType: "image/svg+xml" },
286
+ ".mp4": { kind: "video", mimeType: "video/mp4" },
287
+ ".webm": { kind: "video", mimeType: "video/webm" },
288
+ ".mov": { kind: "video", mimeType: "video/quicktime" },
289
+ ".mp3": { kind: "audio", mimeType: "audio/mpeg" },
290
+ ".wav": { kind: "audio", mimeType: "audio/wav" },
291
+ ".ogg": { kind: "audio", mimeType: "audio/ogg" }
292
+ };
293
+ function classifyCanvasFilename(filename) {
294
+ const idx = filename.lastIndexOf(".");
295
+ const ext = idx === -1 ? "" : filename.slice(idx).toLowerCase();
296
+ return CANVAS_KIND_BY_EXTENSION[ext] ?? { kind: "other", mimeType: "application/octet-stream" };
297
+ }
298
+
133
299
  // ../shared/src/context-usage.ts
134
300
  var CODEX_CATEGORY_COLORS = {
135
301
  input: "#3eeba3",
136
302
  output: "#56b6c2"
137
303
  };
304
+ function numberOrNull(value) {
305
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
306
+ }
138
307
  function clampPercentage(value) {
139
308
  if (!Number.isFinite(value)) return 0;
140
309
  if (value < 0) return 0;
@@ -148,6 +317,16 @@ function percentage(tokens, maxTokens) {
148
317
  function autoCompactThresholdField(autoCompactThreshold) {
149
318
  return typeof autoCompactThreshold === "number" && Number.isFinite(autoCompactThreshold) ? { autoCompactThreshold } : {};
150
319
  }
320
+ function normalizeAutoCompactThreshold(threshold, maxTokens) {
321
+ const value = numberOrNull(threshold);
322
+ if (value === null) return null;
323
+ if (value <= 0) return null;
324
+ if (value > 100) {
325
+ return maxTokens && maxTokens > 0 ? percentage(value, maxTokens) : null;
326
+ }
327
+ if (value > 0 && value <= 1) return clampPercentage(value * 100);
328
+ return clampPercentage(value);
329
+ }
151
330
  function clampTokensToWindow(rawTokens, maxTokens) {
152
331
  if (!maxTokens || maxTokens <= 0) return { totalTokens: rawTokens };
153
332
  if (rawTokens <= maxTokens) return { totalTokens: rawTokens };
@@ -295,7 +474,7 @@ var WORKSPACE_SIZES = ["small", "large"];
295
474
  var INVALID_WORKSPACE_SIZE_ERROR = `Invalid size: must be one of ${WORKSPACE_SIZES.join(", ")}`;
296
475
 
297
476
  // ../shared/src/e2b.ts
298
- var E2B_TEMPLATE_NAME = "replicas-sandbox-2026-06-30-v3";
477
+ var E2B_TEMPLATE_NAME = "replicas-sandbox-2026-07-01-v2";
299
478
 
300
479
  // ../shared/src/runtime-env.ts
301
480
  function parsePosixEnvFile(content) {
@@ -2244,154 +2423,6 @@ function isCodexAuthError(error) {
2244
2423
  // ../shared/src/engine/environment.ts
2245
2424
  var DESKTOP_NOVNC_PORT = 6080;
2246
2425
 
2247
- // ../shared/src/engine/types.ts
2248
- var DEFAULT_CHAT_TITLES = {
2249
- claude: "Claude Code",
2250
- codex: "Codex",
2251
- cursor: "Cursor",
2252
- opencode: "Opencode",
2253
- relay: "Relay"
2254
- };
2255
- var CLAUDE_OPUS_1M_MODEL = "opus[1m]";
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;
2264
- var DEFAULT_CODEX_MODEL = "gpt-5.5";
2265
- var DEFAULT_CURSOR_MODEL = "composer-2.5";
2266
- var DEFAULT_OPENCODE_MODEL = "z-ai/glm-5.2";
2267
- function normalizeClaudeModel(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;
2276
- }
2277
- return model;
2278
- }
2279
- function canUseClaudeFastMode(model) {
2280
- return normalizeClaudeModel(model) === CLAUDE_OPUS_4_8_MODEL || model === "claude-opus-4-7";
2281
- }
2282
- var AGENT_MODELS = {
2283
- claude: [DEFAULT_CLAUDE_MODEL, CLAUDE_SONNET_5_MODEL, CLAUDE_HAIKU_4_5_MODEL],
2284
- codex: [DEFAULT_CODEX_MODEL, "gpt-5.4", "gpt-5.4-mini", "gpt-5.3-codex", "gpt-5.2"],
2285
- cursor: [
2286
- CLAUDE_OPUS_4_8_MODEL,
2287
- "gpt-5.5",
2288
- "composer-2.5",
2289
- CLAUDE_SONNET_5_MODEL,
2290
- "claude-opus-4-7",
2291
- "gpt-5.4",
2292
- "gpt-5.4-mini",
2293
- "gpt-5.4-nano",
2294
- "gpt-5.3-codex",
2295
- "gpt-5.2",
2296
- "gpt-5.2-codex",
2297
- "gpt-5.1",
2298
- "gpt-5.1-codex-max",
2299
- "gpt-5.1-codex-mini",
2300
- "gpt-5-mini",
2301
- "gemini-3.1-pro",
2302
- "gemini-3-flash",
2303
- "grok-4.3",
2304
- CLAUDE_HAIKU_4_5_MODEL,
2305
- "kimi-k2.5"
2306
- ],
2307
- opencode: [DEFAULT_OPENCODE_MODEL, "minimax/minimax-m3", "xiaomi/mimo-v2.5-pro", "moonshotai/kimi-k2.6"],
2308
- relay: [DEFAULT_CLAUDE_MODEL, CLAUDE_SONNET_5_MODEL]
2309
- };
2310
- var MODEL_LABELS = {
2311
- sonnet: "Sonnet 5",
2312
- "claude-sonnet-5": "Sonnet 5",
2313
- opus: "Opus 4.8",
2314
- [CLAUDE_OPUS_1M_MODEL]: "Opus 4.8 (1M)",
2315
- [LEGACY_CLAUDE_OPUS_1M_MODEL]: "Opus 4.8 (1M)",
2316
- haiku: "Haiku 4.5",
2317
- [DEFAULT_CODEX_MODEL]: "GPT-5.5",
2318
- [DEFAULT_OPENCODE_MODEL]: "GLM 5.2 via OpenRouter",
2319
- "minimax/minimax-m3": "MiniMax M3 via OpenRouter",
2320
- "xiaomi/mimo-v2.5-pro": "MiMo V2.5 Pro via OpenRouter",
2321
- "moonshotai/kimi-k2.6": "Kimi K2.6 via OpenRouter",
2322
- "gpt-5.4": "GPT-5.4",
2323
- "gpt-5.4-mini": "GPT-5.4 Mini",
2324
- "gpt-5.4-nano": "GPT-5.4 Nano",
2325
- "gpt-5.3-codex": "GPT-5.3 Codex",
2326
- "gpt-5.2": "GPT-5.2",
2327
- "gpt-5.2-codex": "GPT-5.2 Codex",
2328
- "gpt-5.1": "GPT-5.1",
2329
- "gpt-5.1-codex-max": "GPT-5.1 Codex Max",
2330
- "gpt-5.1-codex-mini": "GPT-5.1 Codex Mini",
2331
- "gpt-5-mini": "GPT-5 Mini",
2332
- "composer-2.5": "Composer 2.5",
2333
- [CLAUDE_OPUS_4_8_MODEL]: "Opus 4.8",
2334
- "claude-opus-4-7": "Opus 4.7",
2335
- [CLAUDE_HAIKU_4_5_MODEL]: "Haiku 4.5",
2336
- "gemini-3.1-pro": "Gemini 3.1 Pro",
2337
- "gemini-3-flash": "Gemini 3 Flash",
2338
- "grok-4.3": "Grok 4.3",
2339
- "kimi-k2.5": "Kimi K2.5"
2340
- };
2341
- var IMAGE_MEDIA_TYPES = ["image/png", "image/jpeg", "image/gif", "image/webp"];
2342
- var MAX_CANVAS_FILE_BYTES = 5 * 1024 * 1024;
2343
- function isCanvasTextKind(kind) {
2344
- return kind === "markdown" || kind === "html";
2345
- }
2346
- function sanitizeCanvasFilename(filename) {
2347
- const safe = filename.split(/[\\/]/).pop() ?? "";
2348
- if (!safe || safe !== filename || safe.startsWith(".")) return null;
2349
- return safe;
2350
- }
2351
- function bytesToBase64(bytes) {
2352
- let binary = "";
2353
- const chunkSize = 32768;
2354
- for (let i = 0; i < bytes.length; i += chunkSize) {
2355
- binary += String.fromCharCode(...bytes.subarray(i, i + chunkSize));
2356
- }
2357
- return btoa(binary);
2358
- }
2359
- function serializeCanvasContentResponse(input) {
2360
- const base = {
2361
- filename: input.filename,
2362
- kind: input.kind,
2363
- sizeBytes: input.sizeBytes,
2364
- mimeType: input.mimeType
2365
- };
2366
- if (isCanvasTextKind(input.kind)) {
2367
- return { ...base, content: new TextDecoder().decode(input.bytes) };
2368
- }
2369
- return { ...base, base64: bytesToBase64(input.bytes) };
2370
- }
2371
- var CANVAS_KIND_BY_EXTENSION = {
2372
- ".md": { kind: "markdown", mimeType: "text/markdown; charset=utf-8" },
2373
- ".markdown": { kind: "markdown", mimeType: "text/markdown; charset=utf-8" },
2374
- ".html": { kind: "html", mimeType: "text/html; charset=utf-8" },
2375
- ".htm": { kind: "html", mimeType: "text/html; charset=utf-8" },
2376
- ".png": { kind: "image", mimeType: "image/png" },
2377
- ".jpg": { kind: "image", mimeType: "image/jpeg" },
2378
- ".jpeg": { kind: "image", mimeType: "image/jpeg" },
2379
- ".gif": { kind: "image", mimeType: "image/gif" },
2380
- ".webp": { kind: "image", mimeType: "image/webp" },
2381
- ".svg": { kind: "image", mimeType: "image/svg+xml" },
2382
- ".mp4": { kind: "video", mimeType: "video/mp4" },
2383
- ".webm": { kind: "video", mimeType: "video/webm" },
2384
- ".mov": { kind: "video", mimeType: "video/quicktime" },
2385
- ".mp3": { kind: "audio", mimeType: "audio/mpeg" },
2386
- ".wav": { kind: "audio", mimeType: "audio/wav" },
2387
- ".ogg": { kind: "audio", mimeType: "audio/ogg" }
2388
- };
2389
- function classifyCanvasFilename(filename) {
2390
- const idx = filename.lastIndexOf(".");
2391
- const ext = idx === -1 ? "" : filename.slice(idx).toLowerCase();
2392
- return CANVAS_KIND_BY_EXTENSION[ext] ?? { kind: "other", mimeType: "application/octet-stream" };
2393
- }
2394
-
2395
2426
  // ../shared/src/engine/v1.ts
2396
2427
  var MERGED_MESSAGE_SEPARATOR = "\n\n<!-- replicas:merged -->\n\n";
2397
2428
  function normalizeCodexAspTranscriptStatus(status, failed = false) {
@@ -7371,9 +7402,11 @@ var ClaudeManager = class _ClaudeManager extends CodingAgentManager {
7371
7402
  return this.systemPromptOverride ? "relay" : "claude";
7372
7403
  }
7373
7404
  buildContextUsagePayload(usage) {
7374
- const maxTokens = Number.isFinite(usage.maxTokens) ? usage.maxTokens : null;
7375
- const rawPercentage = Number.isFinite(usage.percentage) ? usage.percentage : maxTokens && maxTokens > 0 ? usage.totalTokens / maxTokens * 100 : 0;
7405
+ const reportedMaxTokens = Number.isFinite(usage.maxTokens) ? usage.maxTokens : null;
7406
+ const knownMaxTokens = getClaudeModelContextWindow(usage.model);
7407
+ const maxTokens = knownMaxTokens ?? reportedMaxTokens;
7376
7408
  const clamped = clampTokensToWindow(usage.totalTokens, maxTokens);
7409
+ const autoCompactThreshold = normalizeAutoCompactThreshold(usage.autoCompactThreshold, maxTokens);
7377
7410
  return {
7378
7411
  provider: this.getContextUsageProvider(),
7379
7412
  source: "claude_context",
@@ -7381,10 +7414,10 @@ var ClaudeManager = class _ClaudeManager extends CodingAgentManager {
7381
7414
  totalTokens: clamped.totalTokens,
7382
7415
  ...clamped.totalProcessedTokens !== void 0 ? { totalProcessedTokens: clamped.totalProcessedTokens } : {},
7383
7416
  maxTokens,
7384
- rawMaxTokens: Number.isFinite(usage.rawMaxTokens) ? usage.rawMaxTokens : maxTokens,
7385
- percentage: clampPercentage(rawPercentage),
7417
+ rawMaxTokens: knownMaxTokens ?? (Number.isFinite(usage.rawMaxTokens) ? usage.rawMaxTokens : maxTokens),
7418
+ percentage: percentage(clamped.totalTokens, maxTokens),
7386
7419
  compactsAutomatically: usage.isAutoCompactEnabled === true,
7387
- ...autoCompactThresholdField(usage.autoCompactThreshold),
7420
+ ...autoCompactThresholdField(autoCompactThreshold),
7388
7421
  categories: usage.categories.map((category) => ({
7389
7422
  name: category.name,
7390
7423
  tokens: category.tokens,
@@ -7783,7 +7816,7 @@ var AspClient = class {
7783
7816
  // src/managers/codex-asp/app-server-process.ts
7784
7817
  var DEFAULT_CODEX_BINARY = "codex";
7785
7818
  var DEFAULT_CODEX_ARGS = ["app-server", "--listen", "stdio://"];
7786
- var ENGINE_PACKAGE_VERSION = "0.1.374";
7819
+ var ENGINE_PACKAGE_VERSION = "0.1.376";
7787
7820
  var INITIALIZE_METHOD = "initialize";
7788
7821
  var INITIALIZED_NOTIFICATION = "initialized";
7789
7822
  var ACCOUNT_LOGIN_START_METHOD = "account/login/start";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replicas-engine",
3
- "version": "0.1.374",
3
+ "version": "0.1.376",
4
4
  "description": "Lightweight API server for Replicas workspaces",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -31,7 +31,7 @@
31
31
  "author": "Replicas",
32
32
  "license": "MIT",
33
33
  "dependencies": {
34
- "@anthropic-ai/claude-agent-sdk": "0.3.168",
34
+ "@anthropic-ai/claude-agent-sdk": "0.3.197",
35
35
  "@connectrpc/connect-node": "1.7.0",
36
36
  "@cursor/sdk": "1.0.19",
37
37
  "@hono/node-server": "^1.19.5",
@@ -11,6 +11,11 @@ BACKOFF=1
11
11
  RESTART_COUNT=0
12
12
  MAX_RESTARTS=20
13
13
  STABLE_THRESHOLD=300
14
+ BUN_INSTALL="${BUN_INSTALL:-/usr/local/bun}"
15
+ if [ -d "$BUN_INSTALL/bin" ]; then
16
+ export BUN_INSTALL
17
+ export PATH="$BUN_INSTALL/bin:$PATH"
18
+ fi
14
19
 
15
20
  log() {
16
21
  echo "[$(date -Iseconds)] [engine-watchdog] $*"