replicas-cli 0.2.624 → 0.2.626

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/index.cjs +26 -4
  2. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -22709,6 +22709,9 @@ function coerceClaudePartialMessagePayload(payload) {
22709
22709
  status: payload.status === "completed" ? "completed" : "in_progress"
22710
22710
  };
22711
22711
  }
22712
+ var ACCEPTED_USER_MESSAGE_SOURCE = "replicas-chat-turn-accepted";
22713
+ var QUEUED_MESSAGE_REMOVED_EVENT_TYPE = "replicas-queued-message-removed";
22714
+ var REMOVED_MESSAGE_IDS_PAYLOAD_KEY = "removedMessageIds";
22712
22715
  var USER_MESSAGE_ID_PAYLOAD_KEY = "replicasMessageId";
22713
22716
  var CODEX_ASP_ITEM_ID_PAYLOAD_KEY = "codexAspItemId";
22714
22717
  var CODEX_QUOTA_STATUS_EVENT_TYPE = "codex-quota-status";
@@ -22907,7 +22910,8 @@ function upsertDisplayMessage(messages, message) {
22907
22910
  }
22908
22911
  function applyToolInputEvent(event, messages, provider, state, questionFilter) {
22909
22912
  if (event.type === "replicas-tool-input-request" && typeof event.payload.toolUseId === "string" && typeof event.payload.requestId === "string" && (Array.isArray(event.payload.options) || Array.isArray(event.payload.questions))) {
22910
- const resolved = state.resolutions.get(event.payload.toolUseId);
22913
+ const previous = state.resolutions.get(event.payload.toolUseId);
22914
+ const resolved = previous && (!previous.requestId || previous.requestId === event.payload.requestId) ? previous : void 0;
22911
22915
  const inputRequest = {
22912
22916
  requestId: event.payload.requestId,
22913
22917
  status: resolved?.selectionId === "aborted" || resolved?.selectionId === "declined" ? "aborted" : resolved ? "resolved" : "pending",
@@ -22923,12 +22927,13 @@ function applyToolInputEvent(event, messages, provider, state, questionFilter) {
22923
22927
  }
22924
22928
  if (event.type === "replicas-tool-input-resolved" && typeof event.payload.toolUseId === "string" && typeof event.payload.selectionId === "string") {
22925
22929
  const resolved = {
22930
+ ...typeof event.payload.requestId === "string" ? { requestId: event.payload.requestId } : {},
22926
22931
  selectionId: event.payload.selectionId,
22927
22932
  ...typeof event.payload.selectionSummary === "string" ? { selectionSummary: event.payload.selectionSummary } : {}
22928
22933
  };
22929
22934
  state.resolutions.set(event.payload.toolUseId, resolved);
22930
22935
  const inputRequest = state.requests.get(event.payload.toolUseId);
22931
- if (inputRequest) {
22936
+ if (inputRequest && (!resolved.requestId || resolved.requestId === inputRequest.requestId)) {
22932
22937
  inputRequest.status = resolved.selectionId === "aborted" || resolved.selectionId === "declined" ? "aborted" : "resolved";
22933
22938
  inputRequest.selectionId = resolved.selectionId;
22934
22939
  if (resolved.selectionSummary) inputRequest.selectionSummary = resolved.selectionSummary;
@@ -22977,6 +22982,7 @@ function skillNameFromToolCall(tool, input) {
22977
22982
  return parseSkillFilePath(input);
22978
22983
  }
22979
22984
  function createCallDisplayMessage(message) {
22985
+ if (message.inputRequest) return { ...message, type: "tool_call" };
22980
22986
  const skillName = message.server.toLowerCase() === "skills" ? message.tool : skillNameFromToolCall(message.tool, message.input);
22981
22987
  if (skillName === null) return { ...message, type: "tool_call" };
22982
22988
  return {
@@ -25785,12 +25791,12 @@ function parseMuseEvents(events) {
25785
25791
  id: `muse-tool-${item.itemId}`,
25786
25792
  server: "muse",
25787
25793
  tool: typeof item.tool === "string" ? item.tool : "tool",
25794
+ inputRequest: inputState.requests.get(item.itemId),
25788
25795
  input: isRecord(input) ? input : typeof input === "string" ? input : void 0,
25789
25796
  output: typeof item.visibleOutput === "string" ? item.visibleOutput : item.failureReason === void 0 ? void 0 : stringifyDisplayValue(item.failureReason),
25790
25797
  status: item.status === "failed" || item.status === "rejected" ? "failed" : terminal ? "completed" : "in_progress",
25791
25798
  timestamp: typeof item.recordedAt === "string" ? item.recordedAt : event.timestamp
25792
25799
  });
25793
- if (message.type === "tool_call") message.inputRequest = inputState.requests.get(item.itemId);
25794
25800
  upsertDisplayMessage(messages, message);
25795
25801
  }
25796
25802
  }
@@ -26849,6 +26855,7 @@ function parseCodexAspTranscript(transcript) {
26849
26855
  // ../shared/src/display-message/parsers/index.ts
26850
26856
  var INTERRUPTION_DEDUP_WINDOW_MS = 15e3;
26851
26857
  function parseAgentEvents(events, agentType) {
26858
+ events = excludeQueuedAcceptedEvents(events, []);
26852
26859
  if (agentType === "codex") {
26853
26860
  return parseCodexEvents(events);
26854
26861
  }
@@ -26876,6 +26883,7 @@ function parseAgentEvents(events, agentType) {
26876
26883
  return parseClaudeEvents(events);
26877
26884
  }
26878
26885
  function parseDisplayMessages(events, agentType, codexAspTranscript, options = {}) {
26886
+ events = excludeQueuedAcceptedEvents(events, []);
26879
26887
  const shouldFilter = options.filter ?? true;
26880
26888
  const parsedEvents = agentType === "claude" || agentType === "relay" ? parseClaudeEvents(events, options.parentToolUseId) : parseAgentEvents(events, agentType);
26881
26889
  const reconciledEvents = [];
@@ -26975,6 +26983,20 @@ function getUserMessageId(event) {
26975
26983
  const messageId = event.payload[USER_MESSAGE_ID_PAYLOAD_KEY];
26976
26984
  return typeof messageId === "string" ? messageId : null;
26977
26985
  }
26986
+ function getRemovedMessageIds(event) {
26987
+ if (event.type !== QUEUED_MESSAGE_REMOVED_EVENT_TYPE) return [];
26988
+ const messageIds = event.payload[REMOVED_MESSAGE_IDS_PAYLOAD_KEY];
26989
+ if (Array.isArray(messageIds)) return messageIds.filter((id) => typeof id === "string");
26990
+ const messageId = getUserMessageId(event);
26991
+ return messageId ? [messageId] : [];
26992
+ }
26993
+ function excludeQueuedAcceptedEvents(events, queue, removedMessageIds = []) {
26994
+ const queuedMessageIds = /* @__PURE__ */ new Set([...queue.map((message) => message.id), ...removedMessageIds]);
26995
+ for (const event of events) {
26996
+ for (const messageId of getRemovedMessageIds(event)) queuedMessageIds.add(messageId);
26997
+ }
26998
+ return events.filter((event) => event.payload.source !== ACCEPTED_USER_MESSAGE_SOURCE || !queuedMessageIds.has(getUserMessageId(event) ?? ""));
26999
+ }
26978
27000
 
26979
27001
  // ../shared/src/pricing.ts
26980
27002
  var AUTOMATED_SOURCES = ["api", "automation"];
@@ -27225,7 +27247,7 @@ var headlessFilesystemAgentResultSchema = external_exports.object({
27225
27247
  });
27226
27248
 
27227
27249
  // ../shared/src/cli-version.ts
27228
- var CLI_VERSION = "0.2.624";
27250
+ var CLI_VERSION = "0.2.626";
27229
27251
 
27230
27252
  // ../shared/src/version.ts
27231
27253
  function compareVersions(v1, v2) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replicas-cli",
3
- "version": "0.2.624",
3
+ "version": "0.2.626",
4
4
  "description": "CLI for managing Replicas workspaces - SSH into cloud dev environments with automatic port forwarding",
5
5
  "main": "dist/index.cjs",
6
6
  "bin": {