replicas-engine 0.1.876 → 0.1.878

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.
@@ -5,11 +5,11 @@ import {
5
5
  getCodexAspHost,
6
6
  restartCodexAspHost,
7
7
  restartCodexAspHostIfRunning
8
- } from "./chunk-QUDJR3YI.js";
9
- import "./chunk-VONPE7H2.js";
10
- import "./chunk-LDEEMUMD.js";
8
+ } from "./chunk-PXMZ3SJT.js";
9
+ import "./chunk-4CF465DO.js";
10
+ import "./chunk-6LLMP34F.js";
11
11
  import "./chunk-UZSNFLDQ.js";
12
- import "./chunk-DFV4EYJI.js";
12
+ import "./chunk-PYQVWR2X.js";
13
13
  import "./chunk-VEQXQN22.js";
14
14
  export {
15
15
  getCodexAspHost,
@@ -15,7 +15,7 @@ import {
15
15
  isValidRelayBaseProvider,
16
16
  parsePosixEnvFile,
17
17
  readReplicasRuntimeEnv
18
- } from "./chunk-DFV4EYJI.js";
18
+ } from "./chunk-PYQVWR2X.js";
19
19
 
20
20
  // src/engine-env.ts
21
21
  import { readFileSync as readFileSync2 } from "fs";
@@ -4,7 +4,7 @@ const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  HOOK_EXEC_MAX_BUFFER_BYTES,
6
6
  isVersionBelow
7
- } from "./chunk-DFV4EYJI.js";
7
+ } from "./chunk-PYQVWR2X.js";
8
8
 
9
9
  // src/utils/codex-agent-env.ts
10
10
  function buildCodexAgentEnv(source = process.env) {
@@ -245,7 +245,7 @@ function getCodexModelProvider(method) {
245
245
  if (method === "foundry") return "azure";
246
246
  return method === "ollama" || method === "openai-compatible" ? "replicas_openai_compatible" : "openai";
247
247
  }
248
- var ENGINE_PACKAGE_VERSION = "0.1.876";
248
+ var ENGINE_PACKAGE_VERSION = "0.1.878";
249
249
  var INITIALIZE_METHOD = "initialize";
250
250
  var INITIALIZED_NOTIFICATION = "initialized";
251
251
  var ACCOUNT_LOGIN_START_METHOD = "account/login/start";
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from 'node:module';
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  shouldRefreshPullRequests
6
- } from "./chunk-DFV4EYJI.js";
6
+ } from "./chunk-PYQVWR2X.js";
7
7
 
8
8
  // src/services/post-tool-pr-notifier.ts
9
9
  async function notifyPostToolUse(toolName, toolInput) {
@@ -3,12 +3,12 @@ import { createRequire as __createRequire } from 'node:module';
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  monolithRequest
6
- } from "./chunk-VONPE7H2.js";
6
+ } from "./chunk-4CF465DO.js";
7
7
  import {
8
8
  extractCommandProtectionCommandText,
9
9
  findGitCommitSignals,
10
10
  findPrMergeSignals
11
- } from "./chunk-DFV4EYJI.js";
11
+ } from "./chunk-PYQVWR2X.js";
12
12
 
13
13
  // src/services/command-protection-service.ts
14
14
  var DEFAULT_COMMAND_PROTECTION_BLOCK_MESSAGE = "Blocked by Replicas command protection.";
@@ -5,13 +5,13 @@ import {
5
5
  ENGINE_ENV,
6
6
  monolithRequest,
7
7
  setAgentCredentialSnapshot
8
- } from "./chunk-VONPE7H2.js";
8
+ } from "./chunk-4CF465DO.js";
9
9
  import {
10
10
  AppServerProcess,
11
11
  SUBPROCESS_MAX_BUFFER,
12
12
  buildCodexAgentEnv,
13
13
  execFileAsync
14
- } from "./chunk-LDEEMUMD.js";
14
+ } from "./chunk-6LLMP34F.js";
15
15
  import {
16
16
  isRecord
17
17
  } from "./chunk-UZSNFLDQ.js";
@@ -25,7 +25,7 @@ import {
25
25
  listOpenAICompatibleModels,
26
26
  readOllamaAuthEnv,
27
27
  resolveOpenAICompatibleModelsUrl
28
- } from "./chunk-DFV4EYJI.js";
28
+ } from "./chunk-PYQVWR2X.js";
29
29
 
30
30
  // src/managers/codex-token-manager.ts
31
31
  import { promises as fs } from "fs";
@@ -246,7 +246,7 @@ var CodexTokenManager = class extends BaseRefreshManager {
246
246
  await this.applyCredentialUpdate(++this.credentialGeneration, async () => {
247
247
  await this.applyCredentialsResponse(data);
248
248
  if (data.scope) setAgentCredentialSnapshot("codex", { method: data.type, scope: data.scope, revision: data.revision });
249
- const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-7QXMUTSZ.js");
249
+ const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-X5NKR6W6.js");
250
250
  await restartCodexAspHostIfRunning2();
251
251
  });
252
252
  await this.start(true);
@@ -266,7 +266,7 @@ var CodexTokenManager = class extends BaseRefreshManager {
266
266
  await this.applyCredentialUpdate(generation, async () => {
267
267
  await this.applyCredentialsResponse(data);
268
268
  if (restartOnChange && CODEX_AUTH_ENV_KEYS.some((key, index) => process.env[key] !== previousEnv[index])) {
269
- const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-7QXMUTSZ.js");
269
+ const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-X5NKR6W6.js");
270
270
  await restartCodexAspHostIfRunning2();
271
271
  }
272
272
  if (data.scope) {
@@ -1873,6 +1873,11 @@ import { z as z5 } from "zod";
1873
1873
  var WORKSPACE_CREDENTIAL_PROVIDERS = ["claude", "codex"];
1874
1874
  var workspaceCredentialProviderSchema = z5.enum(WORKSPACE_CREDENTIAL_PROVIDERS);
1875
1875
  var workspaceCredentialSelectionSchema = agentCredentialSnapshotSchema.omit({ revision: true });
1876
+ var createWorkspaceCredentialSchema = workspaceCredentialSelectionSchema.extend({
1877
+ provider: z5.enum(VALID_CODING_AGENT_PROVIDERS)
1878
+ }).refine(({ provider, method }) => agentCredentialMethods(provider).includes(method), {
1879
+ message: "This inference provider is not supported by this agent"
1880
+ });
1876
1881
  var switchWorkspaceCredentialSchema = workspaceCredentialSelectionSchema.extend({
1877
1882
  provider: workspaceCredentialProviderSchema
1878
1883
  }).refine(({ provider, method }) => agentCredentialMethods(provider).includes(method), {
@@ -3998,6 +4003,15 @@ function removeReplicasInstructions(text) {
3998
4003
  return removeTag(text, REPLICAS_INSTRUCTIONS_TAG);
3999
4004
  }
4000
4005
 
4006
+ // ../shared/src/user-message-matching.ts
4007
+ function parseTimestampMs(timestamp) {
4008
+ const value = typeof timestamp === "number" ? timestamp : Date.parse(timestamp);
4009
+ return Number.isFinite(value) ? value : 0;
4010
+ }
4011
+ function areUserMessagesWithinMatchWindow(a, b) {
4012
+ return a.content === b.content && Math.abs(parseTimestampMs(a.timestamp) - parseTimestampMs(b.timestamp)) <= USER_MESSAGE_MATCH_GRACE_PERIOD_MS;
4013
+ }
4014
+
4001
4015
  // ../shared/src/display-message/parsers/codex-asp-parser.ts
4002
4016
  function collectCodexTurns(events) {
4003
4017
  const turns = /* @__PURE__ */ new Map();
@@ -4265,6 +4279,25 @@ function parsePatch(input) {
4265
4279
  }
4266
4280
  return operations;
4267
4281
  }
4282
+ function takeRecordedPrompt(prompts, echo, turnIndex) {
4283
+ const timestampMs = parseTimestampMs(echo.timestamp);
4284
+ let closestIndex = -1;
4285
+ let closestDistance = Infinity;
4286
+ for (let i = prompts.length - 1; i >= 0; i--) {
4287
+ const candidate = prompts[i];
4288
+ const distance = Math.abs(candidate.timestampMs - timestampMs);
4289
+ if (distance > closestDistance) continue;
4290
+ if (candidate.index >= turnIndex && !areUserMessagesWithinMatchWindow(
4291
+ { content: candidate.message.content, timestamp: candidate.timestampMs },
4292
+ { content: echo.content, timestamp: timestampMs }
4293
+ )) continue;
4294
+ const images = candidate.message.images;
4295
+ if (images && echo.images && (images.length !== echo.images.length || images.some((image, index) => image.mediaType !== echo.images?.[index].mediaType || image.data !== echo.images?.[index].data))) continue;
4296
+ closestIndex = i;
4297
+ closestDistance = distance;
4298
+ }
4299
+ return closestIndex === -1 ? void 0 : prompts.splice(closestIndex, 1)[0].message;
4300
+ }
4268
4301
  function parseCodexEvents(events) {
4269
4302
  const messages = [];
4270
4303
  const turns = collectCodexTurns(events);
@@ -4448,26 +4481,35 @@ function parseCodexEvents(events) {
4448
4481
  }
4449
4482
  }
4450
4483
  });
4484
+ const recordedPrompts = /* @__PURE__ */ new Map();
4485
+ messages.forEach((message, index) => {
4486
+ if (message.type !== "user") return;
4487
+ const prompts = recordedPrompts.get(message.content) ?? [];
4488
+ prompts.push({ message, index, timestampMs: parseTimestampMs(message.timestamp) });
4489
+ recordedPrompts.set(message.content, prompts);
4490
+ });
4451
4491
  const claimedPrompts = /* @__PURE__ */ new Set();
4452
4492
  for (const { index, turnId } of turnInsertions.reverse()) {
4453
4493
  const turn = turns.get(turnId);
4454
4494
  if (!turn) continue;
4455
4495
  const kept = [];
4456
4496
  for (const message of messagesForCodexTurn(turn)) {
4457
- const recordedIndex = message.type === "user" ? messages.findLastIndex((candidate, candidateIndex) => candidateIndex < index && candidate.type === "user" && candidate.content === message.content && !claimedPrompts.has(candidateIndex)) : -1;
4458
- if (recordedIndex === -1) {
4497
+ if (message.type !== "user") {
4459
4498
  kept.push(message);
4460
4499
  continue;
4461
4500
  }
4462
- claimedPrompts.add(recordedIndex);
4463
- const recorded = messages[recordedIndex];
4464
- if (recorded.type === "user" && message.type === "user" && !recorded.images && message.images) {
4465
- messages[recordedIndex] = { ...recorded, images: message.images };
4501
+ const prompts = recordedPrompts.get(message.content);
4502
+ const recorded = prompts && takeRecordedPrompt(prompts, message, index);
4503
+ if (!recorded) {
4504
+ kept.push(message);
4505
+ continue;
4466
4506
  }
4507
+ claimedPrompts.add(recorded);
4508
+ kept.push({ ...recorded, images: recorded.images ?? message.images });
4467
4509
  }
4468
4510
  messages.splice(index, 0, ...kept);
4469
4511
  }
4470
- return messages;
4512
+ return messages.filter((message) => !claimedPrompts.has(message));
4471
4513
  }
4472
4514
 
4473
4515
  // ../shared/src/display-message/parsers/cursor-parser.ts
@@ -5484,15 +5526,6 @@ function parseMcpToolName(name) {
5484
5526
  return { server, tool };
5485
5527
  }
5486
5528
 
5487
- // ../shared/src/user-message-matching.ts
5488
- function parseTimestampMs(timestamp) {
5489
- const value = Date.parse(timestamp);
5490
- return Number.isFinite(value) ? value : 0;
5491
- }
5492
- function areUserMessagesWithinMatchWindow(a, b) {
5493
- return a.content === b.content && Math.abs(parseTimestampMs(a.timestamp) - parseTimestampMs(b.timestamp)) <= USER_MESSAGE_MATCH_GRACE_PERIOD_MS;
5494
- }
5495
-
5496
5529
  // ../shared/src/display-message/parsers/claude-parser.ts
5497
5530
  var ABORTED_TERMINAL_REASONS = /* @__PURE__ */ new Set(["aborted_streaming", "aborted_tools"]);
5498
5531
  function createSubagentMessage(messageIndex, timestamp, fields) {
@@ -8152,13 +8185,13 @@ export {
8152
8185
  MEMORY_ROOT,
8153
8186
  MEMORY_INDEX_FILENAME,
8154
8187
  MEMORY_MARKER_GUIDANCE,
8188
+ areUserMessagesWithinMatchWindow,
8155
8189
  extractErrorText,
8156
8190
  isTransientErrorText,
8157
8191
  extractToolResultText,
8158
8192
  normalizeContentBlocks,
8159
8193
  TaskAccumulator,
8160
8194
  parseMcpToolName,
8161
- areUserMessagesWithinMatchWindow,
8162
8195
  coerceClaudeResultPayload,
8163
8196
  stripAgentDiagnosticErrors,
8164
8197
  isClaudeResultError,
@@ -3,12 +3,12 @@ import { createRequire as __createRequire } from 'node:module';
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  evaluateCommandProtection
6
- } from "./chunk-7S5PY3WN.js";
7
- import "./chunk-VONPE7H2.js";
6
+ } from "./chunk-OMPZUIYA.js";
7
+ import "./chunk-4CF465DO.js";
8
8
  import {
9
9
  isRecord
10
10
  } from "./chunk-UZSNFLDQ.js";
11
- import "./chunk-DFV4EYJI.js";
11
+ import "./chunk-PYQVWR2X.js";
12
12
  import "./chunk-VEQXQN22.js";
13
13
 
14
14
  // src/command-protection-hook.ts
@@ -3,13 +3,13 @@ import { createRequire as __createRequire } from 'node:module';
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  evaluateCommandProtection
6
- } from "./chunk-7S5PY3WN.js";
6
+ } from "./chunk-OMPZUIYA.js";
7
7
  import {
8
8
  notifyPostToolUse
9
- } from "./chunk-UCOIF2JZ.js";
10
- import "./chunk-VONPE7H2.js";
9
+ } from "./chunk-BYRW3S7A.js";
10
+ import "./chunk-4CF465DO.js";
11
11
  import "./chunk-UZSNFLDQ.js";
12
- import "./chunk-DFV4EYJI.js";
12
+ import "./chunk-PYQVWR2X.js";
13
13
  import "./chunk-VEQXQN22.js";
14
14
 
15
15
  // src/deepseek-command-protection-plugin.ts
@@ -8,12 +8,12 @@ import {
8
8
  import {
9
9
  AppServerProcess,
10
10
  buildCodexAgentEnv
11
- } from "./chunk-LDEEMUMD.js";
11
+ } from "./chunk-6LLMP34F.js";
12
12
  import {
13
13
  AGENT,
14
14
  getMemoryOutputSafetyViolation,
15
15
  headlessAgentRequestSchema
16
- } from "./chunk-DFV4EYJI.js";
16
+ } from "./chunk-PYQVWR2X.js";
17
17
  import "./chunk-VEQXQN22.js";
18
18
 
19
19
  // src/headless-agent.ts
package/dist/src/index.js CHANGED
@@ -91,7 +91,7 @@ import {
91
91
  evaluateCommandProtection,
92
92
  extractToolCommand,
93
93
  reportCommandProtectionBlock
94
- } from "./chunk-7S5PY3WN.js";
94
+ } from "./chunk-OMPZUIYA.js";
95
95
  import {
96
96
  ACCOUNT_RATE_LIMITS_UPDATED_METHOD,
97
97
  AGENT_MESSAGE_DELTA_METHOD,
@@ -132,21 +132,21 @@ import {
132
132
  recordCredentialFallback,
133
133
  recordExhaustedCredential,
134
134
  restartCodexAspHost
135
- } from "./chunk-QUDJR3YI.js";
135
+ } from "./chunk-PXMZ3SJT.js";
136
136
  import {
137
137
  ENGINE_ENV,
138
138
  IS_WARMING_MODE,
139
139
  monolithRequest,
140
140
  monolithService,
141
141
  setAgentCredentialSnapshot
142
- } from "./chunk-VONPE7H2.js";
142
+ } from "./chunk-4CF465DO.js";
143
143
  import {
144
144
  AspClient,
145
145
  SUBPROCESS_MAX_BUFFER,
146
146
  execAsync,
147
147
  execFileAsync,
148
148
  getCodexModelProvider
149
- } from "./chunk-LDEEMUMD.js";
149
+ } from "./chunk-6LLMP34F.js";
150
150
  import {
151
151
  isRecord as isRecord2
152
152
  } from "./chunk-UZSNFLDQ.js";
@@ -361,7 +361,7 @@ import {
361
361
  waitRelaySubagentRequestSchema,
362
362
  withTimeout,
363
363
  workspaceCredentialProviderSchema
364
- } from "./chunk-DFV4EYJI.js";
364
+ } from "./chunk-PYQVWR2X.js";
365
365
  import {
366
366
  __commonJS,
367
367
  __export,
@@ -13942,7 +13942,7 @@ var ClaudeManager = class _ClaudeManager extends CodingAgentManager {
13942
13942
  }
13943
13943
  async recordContextUsage(response) {
13944
13944
  try {
13945
- const usage = await response.getContextUsage();
13945
+ const usage = await response.getContextUsage({ detail: "summary" });
13946
13946
  const event = this.emitContextUsage(this.buildContextUsagePayload(usage));
13947
13947
  this.historyFile.append(event);
13948
13948
  } catch (error) {
@@ -3,11 +3,11 @@ import { createRequire as __createRequire } from 'node:module';
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  notifyPostToolUse
6
- } from "./chunk-UCOIF2JZ.js";
6
+ } from "./chunk-BYRW3S7A.js";
7
7
  import {
8
8
  isRecord
9
9
  } from "./chunk-UZSNFLDQ.js";
10
- import "./chunk-DFV4EYJI.js";
10
+ import "./chunk-PYQVWR2X.js";
11
11
  import "./chunk-VEQXQN22.js";
12
12
 
13
13
  // src/post-tool-pr-hook.ts
@@ -11,7 +11,7 @@ import {
11
11
  relaySubagentResponseSchema,
12
12
  spawnRelaySubagentRequestSchema,
13
13
  waitRelaySubagentRequestSchema
14
- } from "./chunk-DFV4EYJI.js";
14
+ } from "./chunk-PYQVWR2X.js";
15
15
  import "./chunk-VEQXQN22.js";
16
16
 
17
17
  // src/relay-mcp.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replicas-engine",
3
- "version": "0.1.876",
3
+ "version": "0.1.878",
4
4
  "description": "Lightweight API server for Replicas workspaces",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",