replicas-engine 0.1.1364 → 0.1.1366

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.
@@ -8,12 +8,12 @@ import {
8
8
  listRunningCodexModels,
9
9
  restartCodexAspHost,
10
10
  restartCodexAspHostIfRunning
11
- } from "./chunk-37A3U76P.js";
12
- import "./chunk-YQI4XGIX.js";
13
- import "./chunk-RMAEYD2D.js";
14
- import "./chunk-QCX45VR3.js";
11
+ } from "./chunk-HCJALTXV.js";
12
+ import "./chunk-NAUURMTI.js";
13
+ import "./chunk-7ECXAYCQ.js";
14
+ import "./chunk-UQSFDT3F.js";
15
15
  import "./chunk-UZSNFLDQ.js";
16
- import "./chunk-TQ6XAXNA.js";
16
+ import "./chunk-J5OORHEW.js";
17
17
  import "./chunk-VEQXQN22.js";
18
18
  export {
19
19
  CODEX_ULTRAFAST_SERVICE_TIER,
@@ -5,7 +5,7 @@ import {
5
5
  extractCommandProtectionCommandText,
6
6
  isRecord,
7
7
  parseCodeHostPrUrl
8
- } from "./chunk-TQ6XAXNA.js";
8
+ } from "./chunk-J5OORHEW.js";
9
9
 
10
10
  // src/services/published-pull-request-urls.ts
11
11
  function publishedPullRequestUrls(result) {
@@ -3,10 +3,10 @@ import { createRequire as __createRequire } from 'node:module';
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  execFileAsync
6
- } from "./chunk-QCX45VR3.js";
6
+ } from "./chunk-UQSFDT3F.js";
7
7
  import {
8
8
  isVersionBelow
9
- } from "./chunk-TQ6XAXNA.js";
9
+ } from "./chunk-J5OORHEW.js";
10
10
 
11
11
  // src/utils/codex-agent-env.ts
12
12
  function buildCodexAgentEnv(source = process.env) {
@@ -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.1364";
243
+ var ENGINE_PACKAGE_VERSION = "0.1.1365";
244
244
  var INITIALIZE_METHOD = "initialize";
245
245
  var INITIALIZED_NOTIFICATION = "initialized";
246
246
  var ACCOUNT_LOGIN_START_METHOD = "account/login/start";
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from 'node:module';
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  AspClient
6
- } from "./chunk-RMAEYD2D.js";
6
+ } from "./chunk-7ECXAYCQ.js";
7
7
  import {
8
8
  ASTER_BASE_URL,
9
9
  ASTER_PROVIDER,
@@ -15,7 +15,7 @@ import {
15
15
  isRecord,
16
16
  readOllamaAuthEnv,
17
17
  readOpenAICompatibleAuthEnv
18
- } from "./chunk-TQ6XAXNA.js";
18
+ } from "./chunk-J5OORHEW.js";
19
19
 
20
20
  // src/managers/codex-asp/notification-dispatch.ts
21
21
  var TURN_STARTED_METHOD = "turn/started";
@@ -6,7 +6,7 @@ import {
6
6
  getOriginDefaultBranch,
7
7
  monolithRequest,
8
8
  runGitCommand
9
- } from "./chunk-YQI4XGIX.js";
9
+ } from "./chunk-NAUURMTI.js";
10
10
  import {
11
11
  extractCommandProtectionCommandText,
12
12
  findCommandProtectionGitLookups,
@@ -14,7 +14,7 @@ import {
14
14
  findPrMergeSignals,
15
15
  findScoutRepoWriteSignals,
16
16
  parseCommandProtectionRequest
17
- } from "./chunk-TQ6XAXNA.js";
17
+ } from "./chunk-J5OORHEW.js";
18
18
 
19
19
  // src/services/command-protection-service.ts
20
20
  import { readFile, stat } from "fs/promises";
@@ -10,15 +10,15 @@ import {
10
10
  resolveDiffBase,
11
11
  runGitCommand,
12
12
  setAgentCredentialSnapshot
13
- } from "./chunk-YQI4XGIX.js";
13
+ } from "./chunk-NAUURMTI.js";
14
14
  import {
15
15
  AppServerProcess,
16
16
  buildCodexAgentEnv
17
- } from "./chunk-RMAEYD2D.js";
17
+ } from "./chunk-7ECXAYCQ.js";
18
18
  import {
19
19
  SUBPROCESS_MAX_BUFFER,
20
20
  execFileAsync
21
- } from "./chunk-QCX45VR3.js";
21
+ } from "./chunk-UQSFDT3F.js";
22
22
  import {
23
23
  isRecord
24
24
  } from "./chunk-UZSNFLDQ.js";
@@ -56,7 +56,7 @@ import {
56
56
  resolveOpenAICompatibleModelsUrl,
57
57
  splitMothershipInstructions,
58
58
  withTimeout
59
- } from "./chunk-TQ6XAXNA.js";
59
+ } from "./chunk-J5OORHEW.js";
60
60
 
61
61
  // src/managers/codex-token-manager.ts
62
62
  import { promises as fs } from "fs";
@@ -319,7 +319,7 @@ var CodexTokenManager = class extends BaseRefreshManager {
319
319
  await this.applyCredentialUpdate(++this.credentialGeneration, async () => {
320
320
  await this.applyCredentialsResponse(data);
321
321
  setAgentCredentialSnapshot("codex", data);
322
- const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-HT6RATWM.js");
322
+ const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-N4RODAYX.js");
323
323
  await restartCodexAspHostIfRunning2();
324
324
  });
325
325
  await this.start(true);
@@ -341,7 +341,7 @@ var CodexTokenManager = class extends BaseRefreshManager {
341
341
  const accountChanged = ENGINE_ENV.REPLICAS_AGENT_CREDENTIALS.codex?.credentialId !== data.credentialId;
342
342
  await this.applyCredentialsResponse(data);
343
343
  if (restartOnChange && (accountChanged || CODEX_AUTH_ENV_KEYS.some((key, index) => process.env[key] !== previousEnv[index]))) {
344
- const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-HT6RATWM.js");
344
+ const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-N4RODAYX.js");
345
345
  await restartCodexAspHostIfRunning2();
346
346
  }
347
347
  setAgentCredentialSnapshot("codex", data);
@@ -15094,13 +15094,20 @@ function applyToolInputEvent(event, messages, provider2, state, questionFilter)
15094
15094
  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))) {
15095
15095
  const previous = state.resolutions.get(event.payload.toolUseId);
15096
15096
  const resolved = previous && (!previous.requestId || previous.requestId === event.payload.requestId) ? previous : void 0;
15097
+ const earlier = state.requests.get(event.payload.toolUseId);
15098
+ const same = earlier?.requestId === event.payload.requestId;
15099
+ if (!same) state.requestedAt.set(event.payload.toolUseId, event.timestamp);
15100
+ const requestedAt = state.requestedAt.get(event.payload.toolUseId) ?? event.timestamp;
15101
+ const answeredNow = resolved && (!same || earlier?.status === "pending");
15097
15102
  const inputRequest = {
15098
15103
  requestId: event.payload.requestId,
15099
15104
  status: resolved?.selectionId === "aborted" || resolved?.selectionId === "declined" ? "aborted" : resolved ? "resolved" : "pending",
15100
15105
  ...Array.isArray(event.payload.options) ? { options: event.payload.options } : {},
15101
15106
  ...Array.isArray(event.payload.questions) ? { questions: questionFilter ? event.payload.questions.filter(questionFilter) : event.payload.questions } : {},
15102
15107
  ...resolved ? { selectionId: resolved.selectionId } : {},
15103
- ...resolved?.selectionSummary ? { selectionSummary: resolved.selectionSummary } : {}
15108
+ ...resolved?.selectionSummary ? { selectionSummary: resolved.selectionSummary } : {},
15109
+ ...resolved ? { resolvedAt: resolved.resolvedAt } : {},
15110
+ waitedMs: (earlier?.waitedMs ?? 0) + (answeredNow ? Math.max(0, parseTimestampMs(resolved.resolvedAt) - parseTimestampMs(requestedAt)) : 0)
15104
15111
  };
15105
15112
  state.requests.set(event.payload.toolUseId, inputRequest);
15106
15113
  const message2 = messages.find((candidate) => candidate.type === "tool_call" && candidate.id === `${provider2}-tool-${event.payload.toolUseId}`);
@@ -15111,7 +15118,8 @@ function applyToolInputEvent(event, messages, provider2, state, questionFilter)
15111
15118
  const resolved = {
15112
15119
  ...typeof event.payload.requestId === "string" ? { requestId: event.payload.requestId } : {},
15113
15120
  selectionId: event.payload.selectionId,
15114
- ...typeof event.payload.selectionSummary === "string" ? { selectionSummary: event.payload.selectionSummary } : {}
15121
+ ...typeof event.payload.selectionSummary === "string" ? { selectionSummary: event.payload.selectionSummary } : {},
15122
+ resolvedAt: event.timestamp
15115
15123
  };
15116
15124
  state.resolutions.set(event.payload.toolUseId, resolved);
15117
15125
  const inputRequest = state.requests.get(event.payload.toolUseId);
@@ -15119,6 +15127,9 @@ function applyToolInputEvent(event, messages, provider2, state, questionFilter)
15119
15127
  inputRequest.status = resolved.selectionId === "aborted" || resolved.selectionId === "declined" ? "aborted" : "resolved";
15120
15128
  inputRequest.selectionId = resolved.selectionId;
15121
15129
  if (resolved.selectionSummary) inputRequest.selectionSummary = resolved.selectionSummary;
15130
+ inputRequest.resolvedAt = resolved.resolvedAt;
15131
+ const requestedAt = state.requestedAt.get(event.payload.toolUseId);
15132
+ if (requestedAt) inputRequest.waitedMs = (inputRequest.waitedMs ?? 0) + Math.max(0, parseTimestampMs(resolved.resolvedAt) - parseTimestampMs(requestedAt));
15122
15133
  }
15123
15134
  return true;
15124
15135
  }
@@ -16947,7 +16958,7 @@ function parseOpencodeEvents(events) {
16947
16958
  function parseMuseEvents(events) {
16948
16959
  const messages = [];
16949
16960
  const deltas = /* @__PURE__ */ new Map();
16950
- const inputState = { requests: /* @__PURE__ */ new Map(), resolutions: /* @__PURE__ */ new Map() };
16961
+ const inputState = { requests: /* @__PURE__ */ new Map(), resolutions: /* @__PURE__ */ new Map(), requestedAt: /* @__PURE__ */ new Map() };
16951
16962
  for (const event of events) {
16952
16963
  const userContent = getUserMessage(event);
16953
16964
  if (userContent !== null) {
@@ -17825,7 +17836,8 @@ function parseClaudeEvents(events, parentToolUseId) {
17825
17836
  ...message2.inputRequest,
17826
17837
  status: payload.selectionId === "aborted" ? "aborted" : "resolved",
17827
17838
  selectionId: payload.selectionId,
17828
- selectionSummary: payload.selectionSummary
17839
+ selectionSummary: payload.selectionSummary,
17840
+ resolvedAt: event.timestamp
17829
17841
  };
17830
17842
  }
17831
17843
  });
@@ -4,7 +4,7 @@ const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  SUBPROCESS_MAX_BUFFER,
6
6
  execFileAsync
7
- } from "./chunk-QCX45VR3.js";
7
+ } from "./chunk-UQSFDT3F.js";
8
8
  import {
9
9
  isRecord as isRecord2
10
10
  } from "./chunk-UZSNFLDQ.js";
@@ -21,7 +21,7 @@ import {
21
21
  provisionedDeviceSchema,
22
22
  readReplicasRuntimeEnv,
23
23
  serializePosixEnvFile
24
- } from "./chunk-TQ6XAXNA.js";
24
+ } from "./chunk-J5OORHEW.js";
25
25
 
26
26
  // src/runtime-env-loader.ts
27
27
  import { readFileSync } from "fs";
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from 'node:module';
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  HOOK_EXEC_MAX_BUFFER_BYTES
6
- } from "./chunk-TQ6XAXNA.js";
6
+ } from "./chunk-J5OORHEW.js";
7
7
 
8
8
  // src/utils/exec.ts
9
9
  import { exec, execFile } from "child_process";
@@ -3,13 +3,13 @@ import { createRequire as __createRequire } from 'node:module';
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  evaluateCommandProtection
6
- } from "./chunk-4B4JJPAB.js";
7
- import "./chunk-YQI4XGIX.js";
8
- import "./chunk-QCX45VR3.js";
6
+ } from "./chunk-AG7S5LHR.js";
7
+ import "./chunk-NAUURMTI.js";
8
+ import "./chunk-UQSFDT3F.js";
9
9
  import {
10
10
  isRecord
11
11
  } from "./chunk-UZSNFLDQ.js";
12
- import "./chunk-TQ6XAXNA.js";
12
+ import "./chunk-J5OORHEW.js";
13
13
  import "./chunk-VEQXQN22.js";
14
14
 
15
15
  // src/command-protection-hook.ts
@@ -14,12 +14,12 @@ import {
14
14
  recoverCompletedTurn,
15
15
  spawnMuseMsp,
16
16
  startMuseSession
17
- } from "./chunk-XDFEO24D.js";
17
+ } from "./chunk-7LCSIC3Y.js";
18
18
  import {
19
19
  AppServerProcess,
20
20
  buildCodexAgentEnv
21
- } from "./chunk-RMAEYD2D.js";
22
- import "./chunk-QCX45VR3.js";
21
+ } from "./chunk-7ECXAYCQ.js";
22
+ import "./chunk-UQSFDT3F.js";
23
23
  import {
24
24
  AGENT,
25
25
  OPENCODE_GO_PROVIDER,
@@ -29,7 +29,7 @@ import {
29
29
  headlessAgentUsagePath,
30
30
  isRecord,
31
31
  withTimeout
32
- } from "./chunk-TQ6XAXNA.js";
32
+ } from "./chunk-J5OORHEW.js";
33
33
  import "./chunk-VEQXQN22.js";
34
34
 
35
35
  // src/headless-agent.ts
package/dist/src/index.js CHANGED
@@ -27,7 +27,7 @@ import {
27
27
  evaluateCommandProtection,
28
28
  extractToolCommand,
29
29
  reportCommandProtectionBlock
30
- } from "./chunk-4B4JJPAB.js";
30
+ } from "./chunk-AG7S5LHR.js";
31
31
  import {
32
32
  ACCOUNT_RATE_LIMITS_UPDATED_METHOD,
33
33
  AGENT_MESSAGE_DELTA_METHOD,
@@ -65,10 +65,10 @@ import {
65
65
  spawnMuseMsp,
66
66
  startMuseSession,
67
67
  uuidV7
68
- } from "./chunk-XDFEO24D.js";
68
+ } from "./chunk-7LCSIC3Y.js";
69
69
  import {
70
70
  publishedPullRequestUrls
71
- } from "./chunk-6FLA4WPX.js";
71
+ } from "./chunk-625KVBFP.js";
72
72
  import {
73
73
  ACCOUNT_RATE_LIMITS_READ_METHOD,
74
74
  AsyncLock,
@@ -143,7 +143,7 @@ import {
143
143
  timestampFromSeconds,
144
144
  upsertCredentialFileLines,
145
145
  writeSecureCredentialFile
146
- } from "./chunk-37A3U76P.js";
146
+ } from "./chunk-HCJALTXV.js";
147
147
  import {
148
148
  ENGINE_ENV,
149
149
  monolithRequest,
@@ -153,15 +153,15 @@ import {
153
153
  resolveDiffBase,
154
154
  setAgentCredentialSnapshot,
155
155
  setLinearSessionId
156
- } from "./chunk-YQI4XGIX.js";
156
+ } from "./chunk-NAUURMTI.js";
157
157
  import {
158
158
  getCodexModelProvider
159
- } from "./chunk-RMAEYD2D.js";
159
+ } from "./chunk-7ECXAYCQ.js";
160
160
  import {
161
161
  SUBPROCESS_MAX_BUFFER,
162
162
  execAsync,
163
163
  execFileAsync
164
- } from "./chunk-QCX45VR3.js";
164
+ } from "./chunk-UQSFDT3F.js";
165
165
  import {
166
166
  isRecord as isRecord2
167
167
  } from "./chunk-UZSNFLDQ.js";
@@ -422,7 +422,7 @@ import {
422
422
  workspaceTokenRequestSchema,
423
423
  workspaceTokenResponseSchema,
424
424
  wrapInTag
425
- } from "./chunk-TQ6XAXNA.js";
425
+ } from "./chunk-J5OORHEW.js";
426
426
  import {
427
427
  cloneMcpConfig,
428
428
  ensureCompatibilityImports,
@@ -60596,7 +60596,7 @@ var ChatService = class {
60596
60596
  requireSubagent(parentChatId, chatId) {
60597
60597
  this.requireSubagentParent(parentChatId);
60598
60598
  const child = this.requireChat(chatId);
60599
- if (child.persisted.parentChatId !== parentChatId) throw new Error("Chat is not a subagent of this chat");
60599
+ if (child.persisted.parentChatId !== parentChatId || child.persisted.fork?.trigger === "side") throw new Error("Chat is not a subagent of this chat");
60600
60600
  return child;
60601
60601
  }
60602
60602
  async waitForSubagent(parentChatId, chatId, timeoutMinutes, signal) {
@@ -62016,7 +62016,7 @@ ${note}`;
62016
62016
  if (chat.persisted.parentChatId) {
62017
62017
  this.publish({ type: "chat.updated", payload: { chat: this.toSummary(chat) } }).catch(() => {
62018
62018
  });
62019
- if (!processing) void this.reportSubagentToParent(chat, completedAt, chat.lastTurnErrors);
62019
+ if (!processing && chat.persisted.fork?.trigger !== "side") void this.reportSubagentToParent(chat, completedAt, chat.lastTurnErrors);
62020
62020
  return;
62021
62021
  }
62022
62022
  this.publish({
@@ -3,13 +3,13 @@ import { createRequire as __createRequire } from 'node:module';
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  publishedPullRequestUrls
6
- } from "./chunk-6FLA4WPX.js";
6
+ } from "./chunk-625KVBFP.js";
7
7
  import {
8
8
  isRecord
9
9
  } from "./chunk-UZSNFLDQ.js";
10
10
  import {
11
11
  shouldRefreshPullRequests
12
- } from "./chunk-TQ6XAXNA.js";
12
+ } from "./chunk-J5OORHEW.js";
13
13
  import "./chunk-VEQXQN22.js";
14
14
 
15
15
  // src/services/post-tool-pr-notifier.ts
@@ -11,7 +11,7 @@ import {
11
11
  spawnSubagentRequestSchema,
12
12
  subagentResponseSchema,
13
13
  waitSubagentRequestSchema
14
- } from "./chunk-TQ6XAXNA.js";
14
+ } from "./chunk-J5OORHEW.js";
15
15
  import "./chunk-VEQXQN22.js";
16
16
 
17
17
  // src/subagent-mcp.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replicas-engine",
3
- "version": "0.1.1364",
3
+ "version": "0.1.1366",
4
4
  "description": "Lightweight API server for Replicas workspaces",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",