replicas-engine 0.1.661 → 0.1.663

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.
@@ -6,6 +6,7 @@ var AGENT = {
6
6
  CODEX: "codex",
7
7
  CURSOR: "cursor",
8
8
  DEEPSEEK: "deepseek",
9
+ FX: "fx",
9
10
  OPENCODE: "opencode",
10
11
  PI: "pi",
11
12
  RELAY: "relay"
@@ -28,6 +29,7 @@ var THINKING_LEVELS_BY_AGENT = {
28
29
  codex: [...STANDARD_THINKING_LEVELS, "ultra"],
29
30
  cursor: STANDARD_THINKING_LEVELS,
30
31
  deepseek: STANDARD_THINKING_LEVELS,
32
+ fx: STANDARD_THINKING_LEVELS,
31
33
  opencode: STANDARD_THINKING_LEVELS,
32
34
  pi: STANDARD_THINKING_LEVELS,
33
35
  relay: [...STANDARD_THINKING_LEVELS, "ultracode"]
@@ -299,6 +301,7 @@ var DEFAULT_CHAT_TITLES = {
299
301
  codex: "Codex",
300
302
  cursor: "Cursor",
301
303
  deepseek: "DeepSeek Harness",
304
+ fx: "fx",
302
305
  opencode: "Opencode",
303
306
  pi: "Pi",
304
307
  relay: "Relay"
@@ -325,21 +328,31 @@ var GPT_5_6_LUNA_MODEL = "gpt-5.6-luna";
325
328
  var DEFAULT_CODEX_MODEL = GPT_5_6_SOL_MODEL;
326
329
  var DEFAULT_CURSOR_MODEL = "composer-2.5";
327
330
  var DEFAULT_OPENCODE_MODEL = "z-ai/glm-5.2";
328
- var DEFAULT_DEEPSEEK_MODEL = DEFAULT_OPENCODE_MODEL;
331
+ var DEEPSEEK_V4_PRO_MODEL = "deepseek/deepseek-v4-pro-0813";
332
+ var DEEPSEEK_V4_FLASH_MODEL = "deepseek/deepseek-v4-flash-0731";
333
+ var DEFAULT_DEEPSEEK_MODEL = DEEPSEEK_V4_PRO_MODEL;
334
+ var DEFAULT_FX_MODEL = "zai/glm-5.2";
329
335
  var DEFAULT_PI_MODEL = DEFAULT_OPENCODE_MODEL;
330
336
  var OPENROUTER_MODELS = [
331
337
  DEFAULT_OPENCODE_MODEL,
332
- "deepseek/deepseek-v4-pro",
333
- "deepseek/deepseek-v4-flash",
338
+ DEEPSEEK_V4_PRO_MODEL,
339
+ DEEPSEEK_V4_FLASH_MODEL,
334
340
  "minimax/minimax-m3",
335
341
  "xiaomi/mimo-v2.5-pro",
336
342
  "moonshotai/kimi-k2.6"
337
343
  ];
344
+ function prioritizeDeepseekModels(models) {
345
+ return [
346
+ ...models.filter((model) => model.startsWith("deepseek/")),
347
+ ...models.filter((model) => !model.startsWith("deepseek/"))
348
+ ];
349
+ }
338
350
  var FALLBACK_AGENT_MODEL = {
339
351
  claude: DEFAULT_CLAUDE_MODEL,
340
352
  codex: DEFAULT_CODEX_MODEL,
341
353
  cursor: DEFAULT_CURSOR_MODEL,
342
354
  deepseek: DEFAULT_DEEPSEEK_MODEL,
355
+ fx: DEFAULT_FX_MODEL,
343
356
  opencode: DEFAULT_OPENCODE_MODEL,
344
357
  pi: DEFAULT_PI_MODEL,
345
358
  relay: DEFAULT_CLAUDE_MODEL
@@ -426,7 +439,8 @@ var AGENT_MODELS = {
426
439
  CLAUDE_HAIKU_4_5_MODEL,
427
440
  "kimi-k2.5"
428
441
  ],
429
- deepseek: [...OPENROUTER_MODELS],
442
+ deepseek: prioritizeDeepseekModels(OPENROUTER_MODELS),
443
+ fx: [DEFAULT_FX_MODEL],
430
444
  opencode: [...OPENROUTER_MODELS, ...ASTER_MODELS],
431
445
  pi: [...OPENROUTER_MODELS, ...ASTER_MODELS],
432
446
  relay: [CLAUDE_FABLE_5_MODEL, CLAUDE_OPUS_5_MODEL, CLAUDE_OPUS_4_8_MODEL, CLAUDE_SONNET_5_MODEL]
@@ -446,8 +460,8 @@ var MODEL_LABELS = {
446
460
  [GPT_5_6_LUNA_MODEL]: "GPT-5.6 Luna",
447
461
  "gpt-5.5": "GPT-5.5",
448
462
  [DEFAULT_OPENCODE_MODEL]: "GLM 5.2 via OpenRouter",
449
- "deepseek/deepseek-v4-pro": "DeepSeek V4 Pro via OpenRouter",
450
- "deepseek/deepseek-v4-flash": "DeepSeek V4 Flash via OpenRouter",
463
+ [DEEPSEEK_V4_PRO_MODEL]: "DeepSeek V4 Pro via OpenRouter",
464
+ [DEEPSEEK_V4_FLASH_MODEL]: "DeepSeek V4 Flash via OpenRouter",
451
465
  "minimax/minimax-m3": "MiniMax M3 via OpenRouter",
452
466
  "xiaomi/mimo-v2.5-pro": "MiMo V2.5 Pro via OpenRouter",
453
467
  "moonshotai/kimi-k2.6": "Kimi K2.6 via OpenRouter",
@@ -588,7 +602,8 @@ var CREDENTIAL_METHOD = {
588
602
  BEDROCK: "bedrock",
589
603
  OPENCODE_GO: "opencode-go",
590
604
  ASTER: "aster",
591
- OPENROUTER: "openrouter"
605
+ OPENROUTER: "openrouter",
606
+ AI_GATEWAY: "ai-gateway"
592
607
  };
593
608
  var CREDENTIAL_TYPE = {
594
609
  CLAUDE_OAUTH: "claude",
@@ -601,7 +616,8 @@ var CREDENTIAL_TYPE = {
601
616
  CURSOR_API_KEY: "cursor_api_key",
602
617
  OPENCODE_GO_API_KEY: "opencode_go_api_key",
603
618
  ASTER_API_KEY: "aster_api_key",
604
- OPENROUTER_API_KEY: "openrouter_api_key"
619
+ OPENROUTER_API_KEY: "openrouter_api_key",
620
+ AI_GATEWAY_API_KEY: "ai_gateway_api_key"
605
621
  };
606
622
  var AGENT_CREDENTIAL_METHODS_IN_ORDER = {
607
623
  [AGENT.CLAUDE]: [
@@ -621,6 +637,9 @@ var AGENT_CREDENTIAL_METHODS_IN_ORDER = {
621
637
  [AGENT.DEEPSEEK]: [
622
638
  { method: CREDENTIAL_METHOD.OPENROUTER, credentialType: CREDENTIAL_TYPE.OPENROUTER_API_KEY }
623
639
  ],
640
+ [AGENT.FX]: [
641
+ { method: CREDENTIAL_METHOD.AI_GATEWAY, credentialType: CREDENTIAL_TYPE.AI_GATEWAY_API_KEY }
642
+ ],
624
643
  [AGENT.OPENCODE]: [
625
644
  { method: CREDENTIAL_METHOD.OPENCODE_GO, credentialType: CREDENTIAL_TYPE.OPENCODE_GO_API_KEY },
626
645
  { method: CREDENTIAL_METHOD.ASTER, credentialType: CREDENTIAL_TYPE.ASTER_API_KEY },
@@ -1511,7 +1530,7 @@ var SLASH_COMMANDS = [
1511
1530
  command: "/plan",
1512
1531
  description: "Switch to plan mode and optionally send a prompt.",
1513
1532
  argumentHint: "[prompt]",
1514
- providers: ["claude", "codex", "cursor", "deepseek", "opencode", "pi", "relay"]
1533
+ providers: ["claude", "codex", "cursor", "deepseek", "fx", "opencode", "pi", "relay"]
1515
1534
  },
1516
1535
  {
1517
1536
  command: "/fast",
@@ -4481,6 +4500,71 @@ function parseDeepseekEvents(events) {
4481
4500
  return messages;
4482
4501
  }
4483
4502
 
4503
+ // ../shared/src/display-message/parsers/fx-parser.ts
4504
+ function getFxTextChunk(update, kind) {
4505
+ if (!isRecord(update) || update.sessionUpdate !== kind || !isRecord(update.content) || update.content.type !== "text") return null;
4506
+ return typeof update.content.text === "string" && update.content.text ? update.content.text : null;
4507
+ }
4508
+ function parseFxEvents(events) {
4509
+ const messages = [];
4510
+ for (const event of events) {
4511
+ const content = getUserMessage(event);
4512
+ if (content !== null) {
4513
+ if (content.trim()) {
4514
+ messages.push({
4515
+ id: getUserMessageId(event) ?? `fx-user-${event.timestamp}`,
4516
+ type: "user",
4517
+ content,
4518
+ timestamp: event.timestamp
4519
+ });
4520
+ }
4521
+ continue;
4522
+ }
4523
+ if (event.type === "fx-error") {
4524
+ messages.push({
4525
+ id: `fx-error-${event.timestamp}`,
4526
+ type: "error",
4527
+ message: typeof event.payload.message === "string" ? event.payload.message : "fx failed",
4528
+ timestamp: event.timestamp
4529
+ });
4530
+ continue;
4531
+ }
4532
+ if (event.type === "fx-turn-complete") {
4533
+ for (const message of messages) {
4534
+ if (message.type === "reasoning" && message.status === "in_progress") message.status = "completed";
4535
+ }
4536
+ continue;
4537
+ }
4538
+ if (event.type !== "fx-session-update" || !isRecord(event.payload.update)) continue;
4539
+ const update = event.payload.update;
4540
+ const kind = update.sessionUpdate;
4541
+ if (kind === "agent_message_chunk" || kind === "agent_thought_chunk") {
4542
+ const content2 = getFxTextChunk(update, kind);
4543
+ if (!content2) continue;
4544
+ const id = typeof update.messageId === "string" ? `fx-${update.messageId}` : `fx-${kind}-${event.timestamp}`;
4545
+ const existing = messages.find((message) => message.id === id);
4546
+ const text = `${existing && "content" in existing && typeof existing.content === "string" ? existing.content : ""}${content2}`;
4547
+ upsertDisplayMessage(messages, kind === "agent_thought_chunk" ? { id, type: "reasoning", content: text, status: "in_progress", timestamp: existing?.timestamp ?? event.timestamp } : { id, type: "agent", content: text, timestamp: existing?.timestamp ?? event.timestamp });
4548
+ continue;
4549
+ }
4550
+ if ((kind === "tool_call" || kind === "tool_call_update") && typeof update.toolCallId === "string") {
4551
+ const id = `fx-tool-${update.toolCallId}`;
4552
+ const existing = messages.find((message) => message.id === id && message.type === "tool_call");
4553
+ const status = update.status === "completed" || update.status === "failed" ? update.status === "failed" ? "failed" : "completed" : "in_progress";
4554
+ upsertDisplayMessage(messages, createCallDisplayMessage({
4555
+ id,
4556
+ server: "fx",
4557
+ tool: typeof update.name === "string" ? update.name : typeof update.title === "string" ? update.title : existing?.tool ?? "tool",
4558
+ input: update.rawInput === void 0 ? existing?.input : isRecord(update.rawInput) ? update.rawInput : stringifyDisplayValue(update.rawInput),
4559
+ output: update.rawOutput === void 0 ? existing?.output : stringifyDisplayValue(update.rawOutput),
4560
+ status,
4561
+ timestamp: event.timestamp
4562
+ }));
4563
+ }
4564
+ }
4565
+ return messages;
4566
+ }
4567
+
4484
4568
  // ../shared/src/display-message/parsers/opencode-parser.ts
4485
4569
  function timestampFromMs(value, fallback) {
4486
4570
  return typeof value === "number" && Number.isFinite(value) ? new Date(value).toISOString() : fallback;
@@ -5647,6 +5731,9 @@ function parseAgentEvents(events, agentType) {
5647
5731
  if (agentType === "deepseek") {
5648
5732
  return parseDeepseekEvents(events);
5649
5733
  }
5734
+ if (agentType === "fx") {
5735
+ return parseFxEvents(events);
5736
+ }
5650
5737
  if (agentType === "opencode") {
5651
5738
  return parseOpencodeEvents(events);
5652
5739
  }
@@ -6245,7 +6332,7 @@ var DEFAULT_CODEX_ARGS = [
6245
6332
  var MIN_CODEX_CLI_VERSION = "0.144.6";
6246
6333
  var CODEX_UPGRADE_TIMEOUT_MS = 12e4;
6247
6334
  var codexCliVersionEnsured = null;
6248
- var ENGINE_PACKAGE_VERSION = "0.1.661";
6335
+ var ENGINE_PACKAGE_VERSION = "0.1.663";
6249
6336
  var INITIALIZE_METHOD = "initialize";
6250
6337
  var INITIALIZED_NOTIFICATION = "initialized";
6251
6338
  var ACCOUNT_LOGIN_START_METHOD = "account/login/start";
@@ -6510,6 +6597,7 @@ export {
6510
6597
  DEFAULT_CURSOR_MODEL,
6511
6598
  DEFAULT_OPENCODE_MODEL,
6512
6599
  DEFAULT_DEEPSEEK_MODEL,
6600
+ DEFAULT_FX_MODEL,
6513
6601
  DEFAULT_PI_MODEL,
6514
6602
  getDefaultAgentModel,
6515
6603
  normalizeClaudeModel,
@@ -6603,6 +6691,7 @@ export {
6603
6691
  areSameUserMessageEvents,
6604
6692
  parseAgentEventJsonlWithCodexAspTranscript,
6605
6693
  getDeepseekAssistantMessageText,
6694
+ getFxTextChunk,
6606
6695
  extractToolResultText,
6607
6696
  normalizeContentBlocks,
6608
6697
  TaskAccumulator,
@@ -7,7 +7,7 @@ import {
7
7
  headlessAgentRequestSchema,
8
8
  putPresignedFile,
9
9
  recoverCompletedTurn
10
- } from "./chunk-I6NKBVNU.js";
10
+ } from "./chunk-R6UJFZCJ.js";
11
11
 
12
12
  // src/headless-agent.ts
13
13
  import { createHash } from "crypto";