replicas-engine 0.1.588 → 0.1.590

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 +51 -5
  2. package/package.json +2 -2
package/dist/src/index.js CHANGED
@@ -7345,6 +7345,7 @@ var EnvironmentDetailsService = class {
7345
7345
  ]);
7346
7346
  details.engineVersion = ENGINE_ENV.REPLICAS_SANDBOX_IMAGE_VERSION;
7347
7347
  details.supportsMidTurnSteering = true;
7348
+ details.supportsClaudeMidTurnSteering = true;
7348
7349
  details.supportsGoalUpdates = true;
7349
7350
  details.supportsQueuedMessageEditing = true;
7350
7351
  details.claudeAuthMethod = detectClaudeAuthMethod();
@@ -8914,6 +8915,10 @@ var CodingAgentManager = class {
8914
8915
  if (!taken) {
8915
8916
  return { success: false, queue: this.getQueue() };
8916
8917
  }
8918
+ const keepQueued = this.keepSteeredMessageQueued();
8919
+ if (keepQueued) {
8920
+ this.messageQueue.restoreToQueue(taken.message, 0);
8921
+ }
8917
8922
  let steered = false;
8918
8923
  try {
8919
8924
  steered = await this.steerRequest(taken.message);
@@ -8921,10 +8926,22 @@ var CodingAgentManager = class {
8921
8926
  console.error("[CodingAgentManager] steerRequest threw, keeping message queued:", error);
8922
8927
  }
8923
8928
  if (!steered) {
8924
- this.messageQueue.restoreToQueue(taken.message, taken.index);
8929
+ if (keepQueued) {
8930
+ const prioritized = this.messageQueue.takeFromQueue(messageId);
8931
+ if (prioritized) this.messageQueue.restoreToQueue(prioritized.message, taken.index);
8932
+ } else {
8933
+ this.messageQueue.restoreToQueue(taken.message, taken.index);
8934
+ }
8925
8935
  this.messageQueue.resumeIfIdle();
8926
8936
  }
8927
- return { success: steered, queue: this.getQueue() };
8937
+ return {
8938
+ success: steered,
8939
+ queue: this.getQueue(),
8940
+ ...steered ? { steeredAt: (/* @__PURE__ */ new Date()).toISOString() } : {}
8941
+ };
8942
+ }
8943
+ keepSteeredMessageQueued() {
8944
+ return false;
8928
8945
  }
8929
8946
  steerRequest(_request) {
8930
8947
  return Promise.resolve(false);
@@ -9859,6 +9876,14 @@ var ClaudeManager = class _ClaudeManager extends CodingAgentManager {
9859
9876
  }
9860
9877
  await this.abortAllPendingToolInputs();
9861
9878
  }
9879
+ keepSteeredMessageQueued() {
9880
+ return true;
9881
+ }
9882
+ async steerRequest() {
9883
+ if (!this.messageQueue.isProcessing()) return false;
9884
+ await this.interruptActiveTurn();
9885
+ return true;
9886
+ }
9862
9887
  async abortAllPendingToolInputs() {
9863
9888
  const pending = Array.from(this.pendingToolInputs.values());
9864
9889
  this.pendingToolInputs.clear();
@@ -11011,7 +11036,7 @@ var DEFAULT_CODEX_ARGS = ["app-server", "--listen", "stdio://"];
11011
11036
  var MIN_CODEX_CLI_VERSION = "0.144.6";
11012
11037
  var CODEX_UPGRADE_TIMEOUT_MS = 12e4;
11013
11038
  var codexCliVersionEnsured = null;
11014
- var ENGINE_PACKAGE_VERSION = "0.1.588";
11039
+ var ENGINE_PACKAGE_VERSION = "0.1.590";
11015
11040
  var INITIALIZE_METHOD = "initialize";
11016
11041
  var INITIALIZED_NOTIFICATION = "initialized";
11017
11042
  var ACCOUNT_LOGIN_START_METHOD = "account/login/start";
@@ -16491,9 +16516,30 @@ var ChatService = class {
16491
16516
  queue: chat.provider.getQueue()
16492
16517
  };
16493
16518
  }
16494
- steerFromQueue(chatId, messageId) {
16519
+ async steerFromQueue(chatId, messageId) {
16495
16520
  const chat = this.requireChat(chatId);
16496
- return chat.provider.steerFromQueue(messageId);
16521
+ const queuedMessageIds = new Set(chat.provider.getQueue().map((message) => message.id));
16522
+ const interruptedMessageId = chat.activeMessageId ?? chat.pendingMessageIds.find((pendingMessageId) => !queuedMessageIds.has(pendingMessageId)) ?? null;
16523
+ const result = await chat.provider.steerFromQueue(messageId);
16524
+ if (!result.success || chat.persisted.provider !== "claude") {
16525
+ return result;
16526
+ }
16527
+ chat.pendingMessageIds = [
16528
+ messageId,
16529
+ ...chat.pendingMessageIds.filter((pendingMessageId) => pendingMessageId !== messageId && pendingMessageId !== interruptedMessageId)
16530
+ ];
16531
+ this.analyticsService.noteTurnEnded(chatId);
16532
+ chat.hasActiveTurn = false;
16533
+ chat.activeMessageId = null;
16534
+ if (interruptedMessageId) {
16535
+ chat.acceptedUserEvents.delete(interruptedMessageId);
16536
+ }
16537
+ this.touch(chat);
16538
+ await this.publish({
16539
+ type: "chat.interrupted",
16540
+ payload: { chatId, interrupted: true, queue: [] }
16541
+ });
16542
+ return result;
16497
16543
  }
16498
16544
  async respondToToolInput(chatId, requestId, selectionId) {
16499
16545
  const chat = this.requireChat(chatId);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replicas-engine",
3
- "version": "0.1.588",
3
+ "version": "0.1.590",
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.226",
34
+ "@anthropic-ai/claude-agent-sdk": "0.3.219",
35
35
  "@connectrpc/connect-node": "1.7.0",
36
36
  "@cursor/sdk": "1.0.19",
37
37
  "@earendil-works/pi-ai": "0.79.10",