replicas-engine 0.1.578 → 0.1.579

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 +54 -17
  2. package/package.json +1 -1
package/dist/src/index.js CHANGED
@@ -8598,8 +8598,11 @@ var MessageQueueService = class {
8598
8598
  processing = false;
8599
8599
  messageIdCounter = 0;
8600
8600
  processMessage;
8601
- constructor(processMessage) {
8601
+ onProcessingChanged;
8602
+ constructor(processMessage, onProcessingChanged = () => {
8603
+ }) {
8602
8604
  this.processMessage = processMessage;
8605
+ this.onProcessingChanged = onProcessingChanged;
8603
8606
  }
8604
8607
  generateMessageId() {
8605
8608
  return `msg_${Date.now()}_${++this.messageIdCounter}`;
@@ -8655,12 +8658,16 @@ var MessageQueueService = class {
8655
8658
  }
8656
8659
  async startProcessing(queuedMessage) {
8657
8660
  this.processing = true;
8661
+ this.onProcessingChanged(true);
8658
8662
  try {
8659
8663
  await this.processMessage(queuedMessage);
8660
8664
  } catch (error) {
8661
8665
  console.error("[MessageQueue] Error processing message:", error);
8662
8666
  } finally {
8663
8667
  this.processing = false;
8668
+ if (this.queue.length === 0) {
8669
+ this.onProcessingChanged(false);
8670
+ }
8664
8671
  await this.processNextInQueue();
8665
8672
  }
8666
8673
  }
@@ -8767,6 +8774,7 @@ var CodingAgentManager = class {
8767
8774
  onSaveSessionId;
8768
8775
  onEvent;
8769
8776
  hostOnTurnComplete;
8777
+ onProcessingChanged;
8770
8778
  compacting = false;
8771
8779
  constructor(options) {
8772
8780
  this.workingDirectory = options.workingDirectory ?? ENGINE_ENV.WORKSPACE_ROOT;
@@ -8774,6 +8782,8 @@ var CodingAgentManager = class {
8774
8782
  this.onSaveSessionId = options.onSaveSessionId;
8775
8783
  this.onEvent = options.onEvent;
8776
8784
  this.hostOnTurnComplete = options.onTurnComplete;
8785
+ this.onProcessingChanged = options.onProcessingChanged ?? (() => {
8786
+ });
8777
8787
  }
8778
8788
  onTurnComplete = async () => {
8779
8789
  if (this.compacting) {
@@ -8815,7 +8825,7 @@ var CodingAgentManager = class {
8815
8825
  historyFile.append(event);
8816
8826
  }
8817
8827
  initializeManager(processMessage) {
8818
- this.messageQueue = new MessageQueueService(processMessage);
8828
+ this.messageQueue = new MessageQueueService(processMessage, this.onProcessingChanged);
8819
8829
  this.initialized = this.initialize();
8820
8830
  }
8821
8831
  async interrupt() {
@@ -9726,8 +9736,11 @@ var ClaudeManager = class _ClaudeManager extends CodingAgentManager {
9726
9736
  }
9727
9737
  async interruptActiveTurn() {
9728
9738
  this.pendingInterrupt = true;
9729
- if (this.activeQuery) {
9730
- await this.activeQuery.interrupt();
9739
+ const query2 = this.activeQuery;
9740
+ if (query2) {
9741
+ const taskIds = [...this.activeBackgroundTasks];
9742
+ await Promise.allSettled(taskIds.map((taskId) => query2.stopTask(taskId)));
9743
+ await query2.interrupt();
9731
9744
  }
9732
9745
  await this.abortAllPendingToolInputs();
9733
9746
  }
@@ -9751,7 +9764,7 @@ var ClaudeManager = class _ClaudeManager extends CodingAgentManager {
9751
9764
  return this.authRetrying;
9752
9765
  }
9753
9766
  isProcessing() {
9754
- return super.isProcessing() || isClaudeSessionActive(this.sessionActivity);
9767
+ return super.isProcessing() || isClaudeSessionActive(this.sessionActivity) || this.activeBackgroundTasks.size > 0;
9755
9768
  }
9756
9769
  hasActiveBackgroundTasks() {
9757
9770
  return this.activeBackgroundTasks.size > 0;
@@ -10437,6 +10450,10 @@ var ClaudeManager = class _ClaudeManager extends CodingAgentManager {
10437
10450
  }
10438
10451
  static updateBackgroundTaskState(message, activeTasks) {
10439
10452
  if (message.type !== "system") return;
10453
+ if (message.subtype === "session_state_changed" && message.state === "idle") {
10454
+ activeTasks.clear();
10455
+ return;
10456
+ }
10440
10457
  if (message.subtype === "background_tasks_changed") {
10441
10458
  activeTasks.clear();
10442
10459
  for (const task of message.tasks) {
@@ -10879,7 +10896,7 @@ var DEFAULT_CODEX_ARGS = ["app-server", "--listen", "stdio://"];
10879
10896
  var MIN_CODEX_CLI_VERSION = "0.144.6";
10880
10897
  var CODEX_UPGRADE_TIMEOUT_MS = 12e4;
10881
10898
  var codexCliVersionEnsured = null;
10882
- var ENGINE_PACKAGE_VERSION = "0.1.578";
10899
+ var ENGINE_PACKAGE_VERSION = "0.1.579";
10883
10900
  var INITIALIZE_METHOD = "initialize";
10884
10901
  var INITIALIZED_NOTIFICATION = "initialized";
10885
10902
  var ACCOUNT_LOGIN_START_METHOD = "account/login/start";
@@ -15987,9 +16004,12 @@ function acceptedEventInCodexTranscript(acceptedEvent, transcript) {
15987
16004
  }
15988
16005
  var LAST_MESSAGE_PREVIEW_MAX = 200;
15989
16006
  var MAX_ACCEPTED_SEND_RESPONSES = 50;
15990
- function isChatActive(chat) {
16007
+ function hasActiveAgentWork(chat) {
15991
16008
  return chat.provider.isProcessing() || (chat.provider.hasActiveBackgroundTasks?.() ?? false);
15992
16009
  }
16010
+ function hasActiveChatTurn(chat) {
16011
+ return chat.hasActiveTurn || chat.pendingMessageIds.length > 0;
16012
+ }
15993
16013
  function isPersistedChat(value) {
15994
16014
  if (!isRecord4(value)) {
15995
16015
  return false;
@@ -16030,7 +16050,7 @@ var ChatService = class {
16030
16050
  this.workingDirectory = workingDirectory;
16031
16051
  this.analyticsService = analyticsService2;
16032
16052
  keepAliveService.setActivityCheck(
16033
- () => [...this.chats.values()].some((chat) => !chat.persisted.deletedAt && isChatActive(chat))
16053
+ () => [...this.chats.values()].some((chat) => !chat.persisted.deletedAt && hasActiveAgentWork(chat))
16034
16054
  );
16035
16055
  }
16036
16056
  workingDirectory;
@@ -16273,7 +16293,7 @@ var ChatService = class {
16273
16293
  const chat = this.requireChat(chatId);
16274
16294
  return {
16275
16295
  chatId,
16276
- processing: chat.provider.isProcessing(),
16296
+ processing: hasActiveChatTurn(chat),
16277
16297
  queue: chat.provider.getQueue()
16278
16298
  };
16279
16299
  }
@@ -16409,7 +16429,7 @@ var ChatService = class {
16409
16429
  getProcessingCount() {
16410
16430
  let count = 0;
16411
16431
  for (const chat of this.chats.values()) {
16412
- if (!chat.persisted.deletedAt && isChatActive(chat)) {
16432
+ if (!chat.persisted.deletedAt && hasActiveAgentWork(chat)) {
16413
16433
  count += 1;
16414
16434
  }
16415
16435
  }
@@ -16451,6 +16471,16 @@ var ChatService = class {
16451
16471
  const onProviderEvent = (event) => {
16452
16472
  this.handleTurnEvent(persisted.id, event);
16453
16473
  };
16474
+ const onProcessingChanged = (processing) => {
16475
+ if (processing) return;
16476
+ const chat = this.getRuntimeChat(persisted.id);
16477
+ if (!chat) return;
16478
+ this.publish({
16479
+ type: "chat.updated",
16480
+ payload: { chat: this.toSummary(chat) }
16481
+ }).catch(() => {
16482
+ });
16483
+ };
16454
16484
  if (persisted.parentChatId === void 0) {
16455
16485
  persisted.parentChatId = null;
16456
16486
  }
@@ -16462,7 +16492,8 @@ var ChatService = class {
16462
16492
  initialSessionId: persisted.providerSessionId,
16463
16493
  onSaveSessionId: saveSession,
16464
16494
  onTurnComplete: onProviderTurnComplete,
16465
- onEvent: onProviderEvent
16495
+ onEvent: onProviderEvent,
16496
+ onProcessingChanged
16466
16497
  });
16467
16498
  } else if (persisted.provider === "relay") {
16468
16499
  provider = new RelayManager({
@@ -16472,6 +16503,7 @@ var ChatService = class {
16472
16503
  onSaveSessionId: saveSession,
16473
16504
  onTurnComplete: onProviderTurnComplete,
16474
16505
  onEvent: onProviderEvent,
16506
+ onProcessingChanged,
16475
16507
  chatId: persisted.id,
16476
16508
  codexAvailable: isCodexAvailable(),
16477
16509
  opencodeAvailable: isOpencodeAvailable(),
@@ -16485,7 +16517,8 @@ var ChatService = class {
16485
16517
  initialSessionId: persisted.providerSessionId,
16486
16518
  onSaveSessionId: saveSession,
16487
16519
  onTurnComplete: onProviderTurnComplete,
16488
- onEvent: onProviderEvent
16520
+ onEvent: onProviderEvent,
16521
+ onProcessingChanged
16489
16522
  });
16490
16523
  } else if (persisted.provider === "opencode") {
16491
16524
  provider = new OpencodeManager({
@@ -16494,7 +16527,8 @@ var ChatService = class {
16494
16527
  initialSessionId: persisted.providerSessionId,
16495
16528
  onSaveSessionId: saveSession,
16496
16529
  onTurnComplete: onProviderTurnComplete,
16497
- onEvent: onProviderEvent
16530
+ onEvent: onProviderEvent,
16531
+ onProcessingChanged
16498
16532
  });
16499
16533
  } else if (persisted.provider === "pi") {
16500
16534
  provider = new PiManager({
@@ -16503,7 +16537,8 @@ var ChatService = class {
16503
16537
  initialSessionId: persisted.providerSessionId,
16504
16538
  onSaveSessionId: saveSession,
16505
16539
  onTurnComplete: onProviderTurnComplete,
16506
- onEvent: onProviderEvent
16540
+ onEvent: onProviderEvent,
16541
+ onProcessingChanged
16507
16542
  });
16508
16543
  } else {
16509
16544
  provider = new CodexAspManager({
@@ -16512,7 +16547,8 @@ var ChatService = class {
16512
16547
  initialSessionId: persisted.providerSessionId,
16513
16548
  onSaveSessionId: saveSession,
16514
16549
  onTurnComplete: onProviderTurnComplete,
16515
- onEvent: onProviderEvent
16550
+ onEvent: onProviderEvent,
16551
+ onProcessingChanged
16516
16552
  });
16517
16553
  }
16518
16554
  return {
@@ -16541,7 +16577,8 @@ var ChatService = class {
16541
16577
  title: chat.persisted.title,
16542
16578
  createdAt: chat.persisted.createdAt,
16543
16579
  updatedAt: chat.persisted.updatedAt,
16544
- processing: isChatActive(chat),
16580
+ processing: hasActiveChatTurn(chat),
16581
+ activityTrackingVersion: 1,
16545
16582
  awaitingInput: chat.provider.isAwaitingInput?.() ?? false,
16546
16583
  isCompacting: chat.provider.isCompacting?.() ?? false,
16547
16584
  isAuthRetrying: chat.provider.isAuthRetrying?.() ?? false,
@@ -16660,7 +16697,7 @@ var ChatService = class {
16660
16697
  payload: {
16661
16698
  chatId,
16662
16699
  isComplete: true,
16663
- processing: chat.provider.hasActiveBackgroundTasks?.() ?? false,
16700
+ processing: false,
16664
16701
  completedAt
16665
16702
  }
16666
16703
  }).catch(() => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replicas-engine",
3
- "version": "0.1.578",
3
+ "version": "0.1.579",
4
4
  "description": "Lightweight API server for Replicas workspaces",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",