replicas-engine 0.1.375 → 0.1.377
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 +200 -155
- package/package.json +2 -2
package/dist/src/index.js
CHANGED
|
@@ -130,11 +130,190 @@ 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_FABLE_5_MODEL = "claude-fable-5";
|
|
144
|
+
var CLAUDE_OPUS_4_8_MODEL = "claude-opus-4-8";
|
|
145
|
+
var CLAUDE_SONNET_5_MODEL = "claude-sonnet-5";
|
|
146
|
+
var CLAUDE_HAIKU_4_5_MODEL = "claude-haiku-4-5";
|
|
147
|
+
var CLAUDE_FABLE_5_BEDROCK_MODEL = "anthropic.claude-fable-5";
|
|
148
|
+
var CLAUDE_OPUS_4_8_BEDROCK_MODEL = "us.anthropic.claude-opus-4-8";
|
|
149
|
+
var CLAUDE_SONNET_5_BEDROCK_MODEL = "anthropic.claude-sonnet-5";
|
|
150
|
+
var CLAUDE_HAIKU_4_5_BEDROCK_MODEL = "us.anthropic.claude-haiku-4-5-20251001-v1:0";
|
|
151
|
+
var DEFAULT_CLAUDE_MODEL = CLAUDE_OPUS_4_8_MODEL;
|
|
152
|
+
var DEFAULT_CODEX_MODEL = "gpt-5.5";
|
|
153
|
+
var DEFAULT_CURSOR_MODEL = "composer-2.5";
|
|
154
|
+
var DEFAULT_OPENCODE_MODEL = "z-ai/glm-5.2";
|
|
155
|
+
function normalizeClaudeModel(model) {
|
|
156
|
+
if (model === "opus" || model === CLAUDE_OPUS_1M_MODEL || model === LEGACY_CLAUDE_OPUS_1M_MODEL) {
|
|
157
|
+
return DEFAULT_CLAUDE_MODEL;
|
|
158
|
+
}
|
|
159
|
+
if (model === "fable") {
|
|
160
|
+
return CLAUDE_FABLE_5_MODEL;
|
|
161
|
+
}
|
|
162
|
+
if (model === "sonnet") {
|
|
163
|
+
return CLAUDE_SONNET_5_MODEL;
|
|
164
|
+
}
|
|
165
|
+
if (model === "haiku") {
|
|
166
|
+
return CLAUDE_HAIKU_4_5_MODEL;
|
|
167
|
+
}
|
|
168
|
+
return model;
|
|
169
|
+
}
|
|
170
|
+
var CLAUDE_MODEL_CONTEXT_WINDOWS = {
|
|
171
|
+
[CLAUDE_FABLE_5_MODEL]: 1e6,
|
|
172
|
+
[CLAUDE_OPUS_4_8_MODEL]: 1e6,
|
|
173
|
+
[CLAUDE_SONNET_5_MODEL]: 1e6,
|
|
174
|
+
[CLAUDE_HAIKU_4_5_MODEL]: 2e5,
|
|
175
|
+
[CLAUDE_FABLE_5_BEDROCK_MODEL]: 1e6,
|
|
176
|
+
[CLAUDE_OPUS_4_8_BEDROCK_MODEL]: 1e6,
|
|
177
|
+
[CLAUDE_SONNET_5_BEDROCK_MODEL]: 1e6,
|
|
178
|
+
[CLAUDE_HAIKU_4_5_BEDROCK_MODEL]: 2e5,
|
|
179
|
+
"anthropic.claude-opus-4-8": 1e6,
|
|
180
|
+
"us.anthropic.claude-sonnet-5": 1e6,
|
|
181
|
+
"anthropic.claude-haiku-4-5": 2e5,
|
|
182
|
+
"claude-haiku-4-5-20251001": 2e5,
|
|
183
|
+
"claude-haiku-4-5@20251001": 2e5
|
|
184
|
+
};
|
|
185
|
+
function getClaudeModelContextWindow(model) {
|
|
186
|
+
if (!model) return null;
|
|
187
|
+
const normalized = normalizeClaudeModel(model) ?? model;
|
|
188
|
+
return CLAUDE_MODEL_CONTEXT_WINDOWS[normalized] ?? CLAUDE_MODEL_CONTEXT_WINDOWS[model] ?? null;
|
|
189
|
+
}
|
|
190
|
+
function canUseClaudeFastMode(model) {
|
|
191
|
+
return normalizeClaudeModel(model) === CLAUDE_OPUS_4_8_MODEL || model === "claude-opus-4-7";
|
|
192
|
+
}
|
|
193
|
+
var AGENT_MODELS = {
|
|
194
|
+
claude: [CLAUDE_FABLE_5_MODEL, DEFAULT_CLAUDE_MODEL, CLAUDE_SONNET_5_MODEL, CLAUDE_HAIKU_4_5_MODEL],
|
|
195
|
+
codex: [DEFAULT_CODEX_MODEL, "gpt-5.4", "gpt-5.4-mini", "gpt-5.3-codex", "gpt-5.2"],
|
|
196
|
+
cursor: [
|
|
197
|
+
CLAUDE_FABLE_5_MODEL,
|
|
198
|
+
CLAUDE_OPUS_4_8_MODEL,
|
|
199
|
+
"gpt-5.5",
|
|
200
|
+
"composer-2.5",
|
|
201
|
+
CLAUDE_SONNET_5_MODEL,
|
|
202
|
+
"claude-opus-4-7",
|
|
203
|
+
"gpt-5.4",
|
|
204
|
+
"gpt-5.4-mini",
|
|
205
|
+
"gpt-5.4-nano",
|
|
206
|
+
"gpt-5.3-codex",
|
|
207
|
+
"gpt-5.2",
|
|
208
|
+
"gpt-5.2-codex",
|
|
209
|
+
"gpt-5.1",
|
|
210
|
+
"gpt-5.1-codex-max",
|
|
211
|
+
"gpt-5.1-codex-mini",
|
|
212
|
+
"gpt-5-mini",
|
|
213
|
+
"gemini-3.1-pro",
|
|
214
|
+
"gemini-3-flash",
|
|
215
|
+
"grok-4.3",
|
|
216
|
+
CLAUDE_HAIKU_4_5_MODEL,
|
|
217
|
+
"kimi-k2.5"
|
|
218
|
+
],
|
|
219
|
+
opencode: [DEFAULT_OPENCODE_MODEL, "minimax/minimax-m3", "xiaomi/mimo-v2.5-pro", "moonshotai/kimi-k2.6"],
|
|
220
|
+
relay: [CLAUDE_FABLE_5_MODEL, DEFAULT_CLAUDE_MODEL, CLAUDE_SONNET_5_MODEL]
|
|
221
|
+
};
|
|
222
|
+
var MODEL_LABELS = {
|
|
223
|
+
fable: "Fable 5",
|
|
224
|
+
[CLAUDE_FABLE_5_MODEL]: "Fable 5",
|
|
225
|
+
sonnet: "Sonnet 5",
|
|
226
|
+
"claude-sonnet-5": "Sonnet 5",
|
|
227
|
+
opus: "Opus 4.8",
|
|
228
|
+
[CLAUDE_OPUS_1M_MODEL]: "Opus 4.8 (1M)",
|
|
229
|
+
[LEGACY_CLAUDE_OPUS_1M_MODEL]: "Opus 4.8 (1M)",
|
|
230
|
+
haiku: "Haiku 4.5",
|
|
231
|
+
[DEFAULT_CODEX_MODEL]: "GPT-5.5",
|
|
232
|
+
[DEFAULT_OPENCODE_MODEL]: "GLM 5.2 via OpenRouter",
|
|
233
|
+
"minimax/minimax-m3": "MiniMax M3 via OpenRouter",
|
|
234
|
+
"xiaomi/mimo-v2.5-pro": "MiMo V2.5 Pro via OpenRouter",
|
|
235
|
+
"moonshotai/kimi-k2.6": "Kimi K2.6 via OpenRouter",
|
|
236
|
+
"gpt-5.4": "GPT-5.4",
|
|
237
|
+
"gpt-5.4-mini": "GPT-5.4 Mini",
|
|
238
|
+
"gpt-5.4-nano": "GPT-5.4 Nano",
|
|
239
|
+
"gpt-5.3-codex": "GPT-5.3 Codex",
|
|
240
|
+
"gpt-5.2": "GPT-5.2",
|
|
241
|
+
"gpt-5.2-codex": "GPT-5.2 Codex",
|
|
242
|
+
"gpt-5.1": "GPT-5.1",
|
|
243
|
+
"gpt-5.1-codex-max": "GPT-5.1 Codex Max",
|
|
244
|
+
"gpt-5.1-codex-mini": "GPT-5.1 Codex Mini",
|
|
245
|
+
"gpt-5-mini": "GPT-5 Mini",
|
|
246
|
+
"composer-2.5": "Composer 2.5",
|
|
247
|
+
[CLAUDE_OPUS_4_8_MODEL]: "Opus 4.8",
|
|
248
|
+
"claude-opus-4-7": "Opus 4.7",
|
|
249
|
+
[CLAUDE_HAIKU_4_5_MODEL]: "Haiku 4.5",
|
|
250
|
+
"gemini-3.1-pro": "Gemini 3.1 Pro",
|
|
251
|
+
"gemini-3-flash": "Gemini 3 Flash",
|
|
252
|
+
"grok-4.3": "Grok 4.3",
|
|
253
|
+
"kimi-k2.5": "Kimi K2.5"
|
|
254
|
+
};
|
|
255
|
+
var IMAGE_MEDIA_TYPES = ["image/png", "image/jpeg", "image/gif", "image/webp"];
|
|
256
|
+
var MAX_CANVAS_FILE_BYTES = 5 * 1024 * 1024;
|
|
257
|
+
function isCanvasTextKind(kind) {
|
|
258
|
+
return kind === "markdown" || kind === "html";
|
|
259
|
+
}
|
|
260
|
+
function sanitizeCanvasFilename(filename) {
|
|
261
|
+
const safe = filename.split(/[\\/]/).pop() ?? "";
|
|
262
|
+
if (!safe || safe !== filename || safe.startsWith(".")) return null;
|
|
263
|
+
return safe;
|
|
264
|
+
}
|
|
265
|
+
function bytesToBase64(bytes) {
|
|
266
|
+
let binary = "";
|
|
267
|
+
const chunkSize = 32768;
|
|
268
|
+
for (let i = 0; i < bytes.length; i += chunkSize) {
|
|
269
|
+
binary += String.fromCharCode(...bytes.subarray(i, i + chunkSize));
|
|
270
|
+
}
|
|
271
|
+
return btoa(binary);
|
|
272
|
+
}
|
|
273
|
+
function serializeCanvasContentResponse(input) {
|
|
274
|
+
const base = {
|
|
275
|
+
filename: input.filename,
|
|
276
|
+
kind: input.kind,
|
|
277
|
+
sizeBytes: input.sizeBytes,
|
|
278
|
+
mimeType: input.mimeType
|
|
279
|
+
};
|
|
280
|
+
if (isCanvasTextKind(input.kind)) {
|
|
281
|
+
return { ...base, content: new TextDecoder().decode(input.bytes) };
|
|
282
|
+
}
|
|
283
|
+
return { ...base, base64: bytesToBase64(input.bytes) };
|
|
284
|
+
}
|
|
285
|
+
var CANVAS_KIND_BY_EXTENSION = {
|
|
286
|
+
".md": { kind: "markdown", mimeType: "text/markdown; charset=utf-8" },
|
|
287
|
+
".markdown": { kind: "markdown", mimeType: "text/markdown; charset=utf-8" },
|
|
288
|
+
".html": { kind: "html", mimeType: "text/html; charset=utf-8" },
|
|
289
|
+
".htm": { kind: "html", mimeType: "text/html; charset=utf-8" },
|
|
290
|
+
".png": { kind: "image", mimeType: "image/png" },
|
|
291
|
+
".jpg": { kind: "image", mimeType: "image/jpeg" },
|
|
292
|
+
".jpeg": { kind: "image", mimeType: "image/jpeg" },
|
|
293
|
+
".gif": { kind: "image", mimeType: "image/gif" },
|
|
294
|
+
".webp": { kind: "image", mimeType: "image/webp" },
|
|
295
|
+
".svg": { kind: "image", mimeType: "image/svg+xml" },
|
|
296
|
+
".mp4": { kind: "video", mimeType: "video/mp4" },
|
|
297
|
+
".webm": { kind: "video", mimeType: "video/webm" },
|
|
298
|
+
".mov": { kind: "video", mimeType: "video/quicktime" },
|
|
299
|
+
".mp3": { kind: "audio", mimeType: "audio/mpeg" },
|
|
300
|
+
".wav": { kind: "audio", mimeType: "audio/wav" },
|
|
301
|
+
".ogg": { kind: "audio", mimeType: "audio/ogg" }
|
|
302
|
+
};
|
|
303
|
+
function classifyCanvasFilename(filename) {
|
|
304
|
+
const idx = filename.lastIndexOf(".");
|
|
305
|
+
const ext = idx === -1 ? "" : filename.slice(idx).toLowerCase();
|
|
306
|
+
return CANVAS_KIND_BY_EXTENSION[ext] ?? { kind: "other", mimeType: "application/octet-stream" };
|
|
307
|
+
}
|
|
308
|
+
|
|
133
309
|
// ../shared/src/context-usage.ts
|
|
134
310
|
var CODEX_CATEGORY_COLORS = {
|
|
135
311
|
input: "#3eeba3",
|
|
136
312
|
output: "#56b6c2"
|
|
137
313
|
};
|
|
314
|
+
function numberOrNull(value) {
|
|
315
|
+
return typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
316
|
+
}
|
|
138
317
|
function clampPercentage(value) {
|
|
139
318
|
if (!Number.isFinite(value)) return 0;
|
|
140
319
|
if (value < 0) return 0;
|
|
@@ -148,6 +327,16 @@ function percentage(tokens, maxTokens) {
|
|
|
148
327
|
function autoCompactThresholdField(autoCompactThreshold) {
|
|
149
328
|
return typeof autoCompactThreshold === "number" && Number.isFinite(autoCompactThreshold) ? { autoCompactThreshold } : {};
|
|
150
329
|
}
|
|
330
|
+
function normalizeAutoCompactThreshold(threshold, maxTokens) {
|
|
331
|
+
const value = numberOrNull(threshold);
|
|
332
|
+
if (value === null) return null;
|
|
333
|
+
if (value <= 0) return null;
|
|
334
|
+
if (value > 100) {
|
|
335
|
+
return maxTokens && maxTokens > 0 ? percentage(value, maxTokens) : null;
|
|
336
|
+
}
|
|
337
|
+
if (value > 0 && value <= 1) return clampPercentage(value * 100);
|
|
338
|
+
return clampPercentage(value);
|
|
339
|
+
}
|
|
151
340
|
function clampTokensToWindow(rawTokens, maxTokens) {
|
|
152
341
|
if (!maxTokens || maxTokens <= 0) return { totalTokens: rawTokens };
|
|
153
342
|
if (rawTokens <= maxTokens) return { totalTokens: rawTokens };
|
|
@@ -295,7 +484,7 @@ var WORKSPACE_SIZES = ["small", "large"];
|
|
|
295
484
|
var INVALID_WORKSPACE_SIZE_ERROR = `Invalid size: must be one of ${WORKSPACE_SIZES.join(", ")}`;
|
|
296
485
|
|
|
297
486
|
// ../shared/src/e2b.ts
|
|
298
|
-
var E2B_TEMPLATE_NAME = "replicas-sandbox-2026-07-01-
|
|
487
|
+
var E2B_TEMPLATE_NAME = "replicas-sandbox-2026-07-01-v3";
|
|
299
488
|
|
|
300
489
|
// ../shared/src/runtime-env.ts
|
|
301
490
|
function parsePosixEnvFile(content) {
|
|
@@ -2244,154 +2433,6 @@ function isCodexAuthError(error) {
|
|
|
2244
2433
|
// ../shared/src/engine/environment.ts
|
|
2245
2434
|
var DESKTOP_NOVNC_PORT = 6080;
|
|
2246
2435
|
|
|
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
2436
|
// ../shared/src/engine/v1.ts
|
|
2396
2437
|
var MERGED_MESSAGE_SEPARATOR = "\n\n<!-- replicas:merged -->\n\n";
|
|
2397
2438
|
function normalizeCodexAspTranscriptStatus(status, failed = false) {
|
|
@@ -6607,6 +6648,8 @@ function toClaudeCodeModel(model) {
|
|
|
6607
6648
|
return model;
|
|
6608
6649
|
}
|
|
6609
6650
|
switch (normalizeClaudeModel(model)) {
|
|
6651
|
+
case CLAUDE_FABLE_5_MODEL:
|
|
6652
|
+
return CLAUDE_FABLE_5_BEDROCK_MODEL;
|
|
6610
6653
|
case CLAUDE_OPUS_4_8_MODEL:
|
|
6611
6654
|
return "opus";
|
|
6612
6655
|
case CLAUDE_SONNET_5_MODEL:
|
|
@@ -7371,9 +7414,11 @@ var ClaudeManager = class _ClaudeManager extends CodingAgentManager {
|
|
|
7371
7414
|
return this.systemPromptOverride ? "relay" : "claude";
|
|
7372
7415
|
}
|
|
7373
7416
|
buildContextUsagePayload(usage) {
|
|
7374
|
-
const
|
|
7375
|
-
const
|
|
7417
|
+
const reportedMaxTokens = Number.isFinite(usage.maxTokens) ? usage.maxTokens : null;
|
|
7418
|
+
const knownMaxTokens = getClaudeModelContextWindow(usage.model);
|
|
7419
|
+
const maxTokens = knownMaxTokens ?? reportedMaxTokens;
|
|
7376
7420
|
const clamped = clampTokensToWindow(usage.totalTokens, maxTokens);
|
|
7421
|
+
const autoCompactThreshold = normalizeAutoCompactThreshold(usage.autoCompactThreshold, maxTokens);
|
|
7377
7422
|
return {
|
|
7378
7423
|
provider: this.getContextUsageProvider(),
|
|
7379
7424
|
source: "claude_context",
|
|
@@ -7381,10 +7426,10 @@ var ClaudeManager = class _ClaudeManager extends CodingAgentManager {
|
|
|
7381
7426
|
totalTokens: clamped.totalTokens,
|
|
7382
7427
|
...clamped.totalProcessedTokens !== void 0 ? { totalProcessedTokens: clamped.totalProcessedTokens } : {},
|
|
7383
7428
|
maxTokens,
|
|
7384
|
-
rawMaxTokens: Number.isFinite(usage.rawMaxTokens) ? usage.rawMaxTokens : maxTokens,
|
|
7385
|
-
percentage:
|
|
7429
|
+
rawMaxTokens: knownMaxTokens ?? (Number.isFinite(usage.rawMaxTokens) ? usage.rawMaxTokens : maxTokens),
|
|
7430
|
+
percentage: percentage(clamped.totalTokens, maxTokens),
|
|
7386
7431
|
compactsAutomatically: usage.isAutoCompactEnabled === true,
|
|
7387
|
-
...autoCompactThresholdField(
|
|
7432
|
+
...autoCompactThresholdField(autoCompactThreshold),
|
|
7388
7433
|
categories: usage.categories.map((category) => ({
|
|
7389
7434
|
name: category.name,
|
|
7390
7435
|
tokens: category.tokens,
|
|
@@ -7783,7 +7828,7 @@ var AspClient = class {
|
|
|
7783
7828
|
// src/managers/codex-asp/app-server-process.ts
|
|
7784
7829
|
var DEFAULT_CODEX_BINARY = "codex";
|
|
7785
7830
|
var DEFAULT_CODEX_ARGS = ["app-server", "--listen", "stdio://"];
|
|
7786
|
-
var ENGINE_PACKAGE_VERSION = "0.1.
|
|
7831
|
+
var ENGINE_PACKAGE_VERSION = "0.1.377";
|
|
7787
7832
|
var INITIALIZE_METHOD = "initialize";
|
|
7788
7833
|
var INITIALIZED_NOTIFICATION = "initialized";
|
|
7789
7834
|
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.
|
|
3
|
+
"version": "0.1.377",
|
|
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.
|
|
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",
|