replicas-engine 0.1.494 → 0.1.496

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 +44 -16
  2. package/package.json +1 -1
package/dist/src/index.js CHANGED
@@ -602,7 +602,7 @@ var WORKSPACE_SIZES = ["small", "large"];
602
602
  var INVALID_WORKSPACE_SIZE_ERROR = `Invalid size: must be one of ${WORKSPACE_SIZES.join(", ")}`;
603
603
 
604
604
  // ../shared/src/e2b.ts
605
- var E2B_TEMPLATE_NAME = "replicas-sandbox-2026-07-24-v2";
605
+ var E2B_TEMPLATE_NAME = "replicas-sandbox-2026-07-24-v4";
606
606
 
607
607
  // ../shared/src/runtime-env.ts
608
608
  function shellQuotePosix(value) {
@@ -3306,6 +3306,15 @@ function isTerminalBackgroundTaskStatus(status) {
3306
3306
  // ../shared/src/display-message/constants.ts
3307
3307
  var USER_MESSAGE_MATCH_GRACE_PERIOD_MS = 3e4;
3308
3308
 
3309
+ // ../shared/src/user-message-matching.ts
3310
+ function parseTimestampMs(timestamp) {
3311
+ const value = Date.parse(timestamp);
3312
+ return Number.isFinite(value) ? value : 0;
3313
+ }
3314
+ function areUserMessagesWithinMatchWindow(a, b) {
3315
+ return a.content === b.content && Math.abs(parseTimestampMs(a.timestamp) - parseTimestampMs(b.timestamp)) <= USER_MESSAGE_MATCH_GRACE_PERIOD_MS;
3316
+ }
3317
+
3309
3318
  // ../shared/src/agent-event-utils.ts
3310
3319
  function getUserMessage(event) {
3311
3320
  return event.type === "event_msg" && event.payload.type === "user_message" && typeof event.payload.message === "string" ? event.payload.message : null;
@@ -3318,10 +3327,6 @@ function getUserMessageItemId(event) {
3318
3327
  const itemId = event.payload[CODEX_ASP_ITEM_ID_PAYLOAD_KEY];
3319
3328
  return typeof itemId === "string" ? itemId : null;
3320
3329
  }
3321
- function parseTimestampMs(timestamp) {
3322
- const value = Date.parse(timestamp);
3323
- return Number.isFinite(value) ? value : 0;
3324
- }
3325
3330
  function getEventTimestampMs(event) {
3326
3331
  return parseTimestampMs(event.timestamp);
3327
3332
  }
@@ -3335,7 +3340,10 @@ function areSameUserMessageEvents(a, b) {
3335
3340
  const aItemId = getUserMessageItemId(a);
3336
3341
  const bItemId = getUserMessageItemId(b);
3337
3342
  if (aItemId || bItemId) return aItemId === bItemId;
3338
- return Math.abs(getEventTimestampMs(a) - getEventTimestampMs(b)) <= USER_MESSAGE_MATCH_GRACE_PERIOD_MS;
3343
+ return areUserMessagesWithinMatchWindow(
3344
+ { content: aMessage, timestamp: a.timestamp },
3345
+ { content: bMessage, timestamp: b.timestamp }
3346
+ );
3339
3347
  }
3340
3348
  function parseAgentEventJsonl(content, options = {}) {
3341
3349
  const events = [];
@@ -4200,6 +4208,13 @@ function parseClaudeEvents(events, parentToolUseId) {
4200
4208
  const assistantThinking = /* @__PURE__ */ new Map();
4201
4209
  const assistantTextCounts = /* @__PURE__ */ new Map();
4202
4210
  const acceptedUserMessageIndexes = /* @__PURE__ */ new Set();
4211
+ const canonicalUserMessageIndexes = /* @__PURE__ */ new Set();
4212
+ const findMatchingUserMessageIndex = (indexes, content, timestamp) => {
4213
+ return [...indexes].find((index) => {
4214
+ const message = messages[index];
4215
+ return message?.type === "user" && areUserMessagesWithinMatchWindow(message, { content, timestamp });
4216
+ });
4217
+ };
4203
4218
  let turnWasInterrupted = false;
4204
4219
  const taskAccumulator = new TaskAccumulator();
4205
4220
  const taskSnapshot = () => taskAccumulator.getTasks().map((task) => ({
@@ -4213,13 +4228,21 @@ function parseClaudeEvents(events, parentToolUseId) {
4213
4228
  const images = userMessageImages(event.payload.images);
4214
4229
  if (content || images) {
4215
4230
  const messageId = event.payload[USER_MESSAGE_ID_PAYLOAD_KEY];
4216
- acceptedUserMessageIndexes.add(messages.push({
4231
+ const canonicalIndex = findMatchingUserMessageIndex(canonicalUserMessageIndexes, content, event.timestamp);
4232
+ const canonical = canonicalIndex === void 0 ? void 0 : messages[canonicalIndex];
4233
+ const message = {
4217
4234
  id: typeof messageId === "string" ? messageId : `user-${event.timestamp}`,
4218
4235
  type: "user",
4219
4236
  content,
4220
- images,
4237
+ images: images?.length ? images : canonical?.type === "user" ? canonical.images : void 0,
4221
4238
  timestamp: event.timestamp
4222
- }) - 1);
4239
+ };
4240
+ if (canonicalIndex === void 0) {
4241
+ acceptedUserMessageIndexes.add(messages.push(message) - 1);
4242
+ } else {
4243
+ messages[canonicalIndex] = message;
4244
+ canonicalUserMessageIndexes.delete(canonicalIndex);
4245
+ }
4223
4246
  }
4224
4247
  return;
4225
4248
  }
@@ -4281,10 +4304,11 @@ function parseClaudeEvents(events, parentToolUseId) {
4281
4304
  };
4282
4305
  }).filter((img) => img.data);
4283
4306
  if (textContent || images.length > 0) {
4284
- const acceptedIndex = [...acceptedUserMessageIndexes].find((index) => {
4285
- const accepted2 = messages[index];
4286
- return accepted2?.type === "user" && accepted2.content === textContent;
4287
- });
4307
+ const acceptedIndex = findMatchingUserMessageIndex(
4308
+ acceptedUserMessageIndexes,
4309
+ textContent,
4310
+ event.timestamp
4311
+ );
4288
4312
  const accepted = acceptedIndex === void 0 ? void 0 : messages[acceptedIndex];
4289
4313
  const message = {
4290
4314
  id: accepted?.id ?? `user-${event.timestamp}`,
@@ -4294,7 +4318,7 @@ function parseClaudeEvents(events, parentToolUseId) {
4294
4318
  timestamp: event.timestamp
4295
4319
  };
4296
4320
  if (acceptedIndex === void 0) {
4297
- messages.push(message);
4321
+ canonicalUserMessageIndexes.add(messages.push(message) - 1);
4298
4322
  } else {
4299
4323
  messages[acceptedIndex] = message;
4300
4324
  acceptedUserMessageIndexes.delete(acceptedIndex);
@@ -9884,7 +9908,7 @@ var DEFAULT_CODEX_ARGS = ["app-server", "--listen", "stdio://"];
9884
9908
  var MIN_CODEX_CLI_VERSION = "0.144.6";
9885
9909
  var CODEX_UPGRADE_TIMEOUT_MS = 12e4;
9886
9910
  var codexCliVersionEnsured = null;
9887
- var ENGINE_PACKAGE_VERSION = "0.1.494";
9911
+ var ENGINE_PACKAGE_VERSION = "0.1.496";
9888
9912
  var INITIALIZE_METHOD = "initialize";
9889
9913
  var INITIALIZED_NOTIFICATION = "initialized";
9890
9914
  var ACCOUNT_LOGIN_START_METHOD = "account/login/start";
@@ -14472,7 +14496,11 @@ function isSameAcceptedUserEvent(event, acceptedEvent) {
14472
14496
  if (areSameUserMessageEvents(event, acceptedEvent)) return true;
14473
14497
  const eventMessage = getUserMessage(event);
14474
14498
  const acceptedMessage = getUserMessage(acceptedEvent);
14475
- return Boolean(eventMessage) && eventMessage === acceptedMessage && Math.abs(getEventTimestampMs(event) - getEventTimestampMs(acceptedEvent)) <= USER_MESSAGE_MATCH_GRACE_PERIOD_MS;
14499
+ if (!eventMessage || !acceptedMessage) return false;
14500
+ return areUserMessagesWithinMatchWindow(
14501
+ { content: eventMessage, timestamp: event.timestamp },
14502
+ { content: acceptedMessage, timestamp: acceptedEvent.timestamp }
14503
+ );
14476
14504
  }
14477
14505
  function getCodexTranscriptUserMessages(transcript) {
14478
14506
  if (!transcript) return [];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replicas-engine",
3
- "version": "0.1.494",
3
+ "version": "0.1.496",
4
4
  "description": "Lightweight API server for Replicas workspaces",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",