replicas-engine 0.1.1000 → 0.1.1001

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,9 +5,9 @@ import {
5
5
  getCodexAspHost,
6
6
  restartCodexAspHost,
7
7
  restartCodexAspHostIfRunning
8
- } from "./chunk-TNXGHUDA.js";
8
+ } from "./chunk-2DRZES2X.js";
9
9
  import "./chunk-7CQ5HPG5.js";
10
- import "./chunk-T77RBLRL.js";
10
+ import "./chunk-YCHNQQI2.js";
11
11
  import "./chunk-IIJ5KKS3.js";
12
12
  import "./chunk-UZSNFLDQ.js";
13
13
  import "./chunk-NOZZLX6A.js";
@@ -9,7 +9,7 @@ import {
9
9
  import {
10
10
  AppServerProcess,
11
11
  buildCodexAgentEnv
12
- } from "./chunk-T77RBLRL.js";
12
+ } from "./chunk-YCHNQQI2.js";
13
13
  import {
14
14
  SUBPROCESS_MAX_BUFFER,
15
15
  execFileAsync
@@ -264,7 +264,7 @@ var CodexTokenManager = class extends BaseRefreshManager {
264
264
  await this.applyCredentialUpdate(++this.credentialGeneration, async () => {
265
265
  await this.applyCredentialsResponse(data);
266
266
  setAgentCredentialSnapshot("codex", data);
267
- const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-4IXWDHJV.js");
267
+ const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-XVFSG3YF.js");
268
268
  await restartCodexAspHostIfRunning2();
269
269
  });
270
270
  await this.start(true);
@@ -285,7 +285,7 @@ var CodexTokenManager = class extends BaseRefreshManager {
285
285
  const accountChanged = ENGINE_ENV.REPLICAS_AGENT_CREDENTIALS.codex?.credentialId !== data.credentialId;
286
286
  await this.applyCredentialsResponse(data);
287
287
  if (restartOnChange && (accountChanged || CODEX_AUTH_ENV_KEYS.some((key, index) => process.env[key] !== previousEnv[index]))) {
288
- const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-4IXWDHJV.js");
288
+ const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-XVFSG3YF.js");
289
289
  await restartCodexAspHostIfRunning2();
290
290
  }
291
291
  setAgentCredentialSnapshot("codex", data);
@@ -240,7 +240,7 @@ function getCodexModelProvider(method) {
240
240
  if (method === "foundry") return "azure";
241
241
  return method === "ollama" || method === "openai-compatible" ? "replicas_openai_compatible" : "openai";
242
242
  }
243
- var ENGINE_PACKAGE_VERSION = "0.1.1000";
243
+ var ENGINE_PACKAGE_VERSION = "0.1.1001";
244
244
  var INITIALIZE_METHOD = "initialize";
245
245
  var INITIALIZED_NOTIFICATION = "initialized";
246
246
  var ACCOUNT_LOGIN_START_METHOD = "account/login/start";
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  AppServerProcess,
9
9
  buildCodexAgentEnv
10
- } from "./chunk-T77RBLRL.js";
10
+ } from "./chunk-YCHNQQI2.js";
11
11
  import "./chunk-IIJ5KKS3.js";
12
12
  import {
13
13
  AGENT,
package/dist/src/index.js CHANGED
@@ -71,7 +71,7 @@ import {
71
71
  refreshDelayMs,
72
72
  restartCodexAspHost,
73
73
  routineRefreshRequest
74
- } from "./chunk-TNXGHUDA.js";
74
+ } from "./chunk-2DRZES2X.js";
75
75
  import {
76
76
  ENGINE_ENV,
77
77
  monolithRequest,
@@ -83,7 +83,7 @@ import {
83
83
  import {
84
84
  AspClient,
85
85
  getCodexModelProvider
86
- } from "./chunk-T77RBLRL.js";
86
+ } from "./chunk-YCHNQQI2.js";
87
87
  import {
88
88
  SUBPROCESS_MAX_BUFFER,
89
89
  execAsync,
@@ -10167,6 +10167,7 @@ var EnvironmentDetailsService = class {
10167
10167
  details.engineVersion = ENGINE_ENV.REPLICAS_SANDBOX_IMAGE_VERSION;
10168
10168
  details.supportsMidTurnSteering = true;
10169
10169
  details.supportsClaudeMidTurnSteering = true;
10170
+ details.supportsCursorMidTurnSteering = true;
10170
10171
  details.supportsSendNow = true;
10171
10172
  details.supportsClaudeGoals = true;
10172
10173
  details.supportsGoalUpdates = true;
@@ -16445,6 +16446,7 @@ async function listCursorCommandsInDirectory(directory) {
16445
16446
  var CursorManager = class extends CodingAgentManager {
16446
16447
  agent = null;
16447
16448
  activeRun = null;
16449
+ pendingSteers = /* @__PURE__ */ new Set();
16448
16450
  activeModel = null;
16449
16451
  abortActiveTurn = null;
16450
16452
  reconnectNoticeVisible = false;
@@ -16471,6 +16473,27 @@ var CursorManager = class extends CodingAgentManager {
16471
16473
  await this.cancelRun(this.activeRun);
16472
16474
  this.abortActiveTurn?.();
16473
16475
  }
16476
+ // Cursor's steer API is text-only, so an image message interrupts the turn and runs next instead.
16477
+ async steerFromQueue(messageId) {
16478
+ await this.initialized;
16479
+ const queued = this.messageQueue.getQueue().find(({ id }) => id === messageId);
16480
+ return queued?.images?.length ? this.sendNow(messageId) : super.steerFromQueue(messageId);
16481
+ }
16482
+ // Cursor's steer resolves once the turn appends the message, so it settles later; the turn
16483
+ // waits for pending steers before completing, and an unread one is requeued as a follow-up.
16484
+ async steerRequest(request) {
16485
+ const run = this.activeRun;
16486
+ if (!run?.steer || run.status !== "running" || request.images?.length) return false;
16487
+ const pending = run.steer(request.message).then((outcome) => {
16488
+ if (outcome !== "complete_delivered") return;
16489
+ const steer = this.markSteerRead(request.id);
16490
+ if (steer) this.recordUserMessageHistoryEvent(steer, this.historyFile);
16491
+ }).catch((error) => {
16492
+ console.error("[CursorManager] Failed to steer Cursor run:", error);
16493
+ }).finally(() => this.pendingSteers.delete(pending));
16494
+ this.pendingSteers.add(pending);
16495
+ return true;
16496
+ }
16474
16497
  async cancelRun(run) {
16475
16498
  if (!run || run.status !== "running") return;
16476
16499
  try {
@@ -16707,6 +16730,7 @@ var CursorManager = class extends CodingAgentManager {
16707
16730
  this.abortActiveTurn = null;
16708
16731
  this.activeRun = null;
16709
16732
  this.activeModel = null;
16733
+ await raceWithTimeout(Promise.allSettled(this.pendingSteers), CURSOR_RUN_SETTLE_TIMEOUT_MS);
16710
16734
  await this.historyFile.flush();
16711
16735
  await this.onTurnComplete();
16712
16736
  }
@@ -61688,7 +61712,7 @@ var ChatService = class {
61688
61712
  }
61689
61713
  let eventToPublish = event;
61690
61714
  if (event.type === "event_msg" && event.payload.type === "user_message") {
61691
- if (chat.activeMessageId) {
61715
+ if (chat.activeMessageId && !event.payload[USER_MESSAGE_ID_PAYLOAD_KEY]) {
61692
61716
  event.payload[USER_MESSAGE_ID_PAYLOAD_KEY] = chat.activeMessageId;
61693
61717
  eventToPublish = {
61694
61718
  ...event,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replicas-engine",
3
- "version": "0.1.1000",
3
+ "version": "0.1.1001",
4
4
  "description": "Lightweight API server for Replicas workspaces",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -42,7 +42,7 @@
42
42
  "@anthropic-ai/claude-agent-sdk": "0.3.284",
43
43
  "@anthropic-ai/sdk": "0.128.0",
44
44
  "@connectrpc/connect-node": "1.7.0",
45
- "@cursor/sdk": "1.0.19",
45
+ "@cursor/sdk": "1.0.36",
46
46
  "@earendil-works/pi-ai": "0.85.0",
47
47
  "@earendil-works/pi-coding-agent": "0.85.0",
48
48
  "@earendil-works/pi-server": "0.85.0",