replicas-engine 0.1.481 → 0.1.482
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.
- package/dist/src/index.js +120 -81
- package/package.json +1 -1
package/dist/src/index.js
CHANGED
|
@@ -101,6 +101,7 @@ var CODEX_ASP_ITEM_ID_PAYLOAD_KEY = "codexAspItemId";
|
|
|
101
101
|
var CODEX_ASP_TRANSCRIPT_UPDATED_EVENT_TYPE = "codex-asp-transcript-updated";
|
|
102
102
|
var CODEX_QUOTA_STATUS_EVENT_TYPE = "codex-quota-status";
|
|
103
103
|
var COMPACTION_STATUS_EVENT_TYPE = "compaction-status";
|
|
104
|
+
var CHAT_INTERRUPTED_EVENT_TYPE = "replicas-interrupted";
|
|
104
105
|
var CHAT_GOAL_EVENT_TYPE = "chat-goal";
|
|
105
106
|
var AUTH_RETRY_STATUS_EVENT_TYPE = "auth-retry-status";
|
|
106
107
|
var CONTEXT_USAGE_EVENT_TYPE = "context-usage";
|
|
@@ -582,7 +583,7 @@ var WORKSPACE_SIZES = ["small", "large"];
|
|
|
582
583
|
var INVALID_WORKSPACE_SIZE_ERROR = `Invalid size: must be one of ${WORKSPACE_SIZES.join(", ")}`;
|
|
583
584
|
|
|
584
585
|
// ../shared/src/e2b.ts
|
|
585
|
-
var E2B_TEMPLATE_NAME = "replicas-sandbox-2026-07-23-
|
|
586
|
+
var E2B_TEMPLATE_NAME = "replicas-sandbox-2026-07-23-v2";
|
|
586
587
|
|
|
587
588
|
// ../shared/src/runtime-env.ts
|
|
588
589
|
function shellQuotePosix(value) {
|
|
@@ -3263,16 +3264,80 @@ function isTerminalBackgroundTaskStatus(status) {
|
|
|
3263
3264
|
// ../shared/src/display-message/constants.ts
|
|
3264
3265
|
var USER_MESSAGE_MATCH_GRACE_PERIOD_MS = 3e4;
|
|
3265
3266
|
|
|
3266
|
-
// ../shared/src/
|
|
3267
|
-
function
|
|
3268
|
-
|
|
3269
|
-
|
|
3270
|
-
|
|
3271
|
-
|
|
3267
|
+
// ../shared/src/agent-event-utils.ts
|
|
3268
|
+
function getUserMessage(event) {
|
|
3269
|
+
return event.type === "event_msg" && event.payload.type === "user_message" && typeof event.payload.message === "string" ? event.payload.message : null;
|
|
3270
|
+
}
|
|
3271
|
+
function getUserMessageId(event) {
|
|
3272
|
+
const messageId = event.payload[USER_MESSAGE_ID_PAYLOAD_KEY];
|
|
3273
|
+
return typeof messageId === "string" ? messageId : null;
|
|
3274
|
+
}
|
|
3275
|
+
function getUserMessageItemId(event) {
|
|
3276
|
+
const itemId = event.payload[CODEX_ASP_ITEM_ID_PAYLOAD_KEY];
|
|
3277
|
+
return typeof itemId === "string" ? itemId : null;
|
|
3278
|
+
}
|
|
3279
|
+
function parseTimestampMs(timestamp) {
|
|
3280
|
+
const value = Date.parse(timestamp);
|
|
3281
|
+
return Number.isFinite(value) ? value : 0;
|
|
3282
|
+
}
|
|
3283
|
+
function getEventTimestampMs(event) {
|
|
3284
|
+
return parseTimestampMs(event.timestamp);
|
|
3285
|
+
}
|
|
3286
|
+
function areSameUserMessageEvents(a, b) {
|
|
3287
|
+
const aMessage = getUserMessage(a);
|
|
3288
|
+
const bMessage = getUserMessage(b);
|
|
3289
|
+
if (!aMessage || aMessage !== bMessage) return false;
|
|
3290
|
+
const aMessageId = getUserMessageId(a);
|
|
3291
|
+
const bMessageId = getUserMessageId(b);
|
|
3292
|
+
if (aMessageId || bMessageId) return aMessageId === bMessageId;
|
|
3293
|
+
const aItemId = getUserMessageItemId(a);
|
|
3294
|
+
const bItemId = getUserMessageItemId(b);
|
|
3295
|
+
if (aItemId || bItemId) return aItemId === bItemId;
|
|
3296
|
+
return Math.abs(getEventTimestampMs(a) - getEventTimestampMs(b)) <= USER_MESSAGE_MATCH_GRACE_PERIOD_MS;
|
|
3297
|
+
}
|
|
3298
|
+
function parseAgentEventJsonl(content, options = {}) {
|
|
3299
|
+
const events = [];
|
|
3300
|
+
for (const line of content.split("\n")) {
|
|
3301
|
+
const trimmed = line.trim();
|
|
3302
|
+
if (!trimmed) continue;
|
|
3303
|
+
try {
|
|
3304
|
+
const parsed = JSON.parse(trimmed);
|
|
3305
|
+
if (isAgentBackendEvent(parsed)) {
|
|
3306
|
+
events.push(parsed);
|
|
3307
|
+
} else {
|
|
3308
|
+
options.onInvalidLine?.({ line: trimmed });
|
|
3309
|
+
}
|
|
3310
|
+
} catch (error) {
|
|
3311
|
+
options.onInvalidLine?.({ line: trimmed, error });
|
|
3312
|
+
}
|
|
3313
|
+
}
|
|
3314
|
+
return events;
|
|
3315
|
+
}
|
|
3316
|
+
function parseAgentEventJsonlWithCodexAspTranscript(content, options = {}) {
|
|
3317
|
+
const events = [];
|
|
3318
|
+
let transcript = null;
|
|
3319
|
+
const transcriptsByThreadId = /* @__PURE__ */ new Map();
|
|
3320
|
+
for (const event of parseAgentEventJsonl(content, options)) {
|
|
3321
|
+
if (event.type !== CODEX_ASP_TRANSCRIPT_UPDATED_EVENT_TYPE) {
|
|
3322
|
+
events.push(event);
|
|
3323
|
+
continue;
|
|
3324
|
+
}
|
|
3325
|
+
const delta = event.payload.transcriptDelta;
|
|
3326
|
+
if (isCodexAspTranscriptDelta(delta)) {
|
|
3327
|
+
const previous = transcriptsByThreadId.get(delta.threadId) ?? null;
|
|
3328
|
+
transcript = applyCodexAspTranscriptDelta(previous, delta);
|
|
3329
|
+
} else if (isCodexAspTranscript(event.payload.transcript)) {
|
|
3330
|
+
transcript = event.payload.transcript;
|
|
3331
|
+
}
|
|
3332
|
+
if (transcript) {
|
|
3333
|
+
transcriptsByThreadId.set(transcript.threadId, transcript);
|
|
3334
|
+
}
|
|
3272
3335
|
}
|
|
3336
|
+
return { events, transcript, transcriptsByThreadId };
|
|
3273
3337
|
}
|
|
3274
3338
|
|
|
3275
3339
|
// ../shared/src/display-message/parsers/utils.ts
|
|
3340
|
+
var INTERRUPTED_MESSAGE_REGEX = /^\[Request interrupted by user.*\]$/;
|
|
3276
3341
|
function userMessageImages(value) {
|
|
3277
3342
|
if (!Array.isArray(value)) return void 0;
|
|
3278
3343
|
const images = value.filter((item) => isRecord(item) && item.type === "image" && typeof item.mediaType === "string" && typeof item.data === "string");
|
|
@@ -3288,6 +3353,15 @@ function stringifyDisplayValue(value) {
|
|
|
3288
3353
|
}
|
|
3289
3354
|
}
|
|
3290
3355
|
|
|
3356
|
+
// ../shared/src/json.ts
|
|
3357
|
+
function safeJsonParse(str, fallback) {
|
|
3358
|
+
try {
|
|
3359
|
+
return JSON.parse(str);
|
|
3360
|
+
} catch {
|
|
3361
|
+
return fallback;
|
|
3362
|
+
}
|
|
3363
|
+
}
|
|
3364
|
+
|
|
3291
3365
|
// ../shared/src/display-message/parsers/codex-parser.ts
|
|
3292
3366
|
function getStatusFromExitCode(exitCode) {
|
|
3293
3367
|
return exitCode === 0 ? "completed" : "failed";
|
|
@@ -4084,6 +4158,7 @@ function parseClaudeEvents(events, parentToolUseId) {
|
|
|
4084
4158
|
const assistantThinking = /* @__PURE__ */ new Map();
|
|
4085
4159
|
const assistantTextCounts = /* @__PURE__ */ new Map();
|
|
4086
4160
|
const acceptedUserMessageIndexes = /* @__PURE__ */ new Set();
|
|
4161
|
+
let turnWasInterrupted = false;
|
|
4087
4162
|
const taskAccumulator = new TaskAccumulator();
|
|
4088
4163
|
const taskSnapshot = () => taskAccumulator.getTasks().map((task) => ({
|
|
4089
4164
|
text: task.subject,
|
|
@@ -4154,6 +4229,7 @@ function parseClaudeEvents(events, parentToolUseId) {
|
|
|
4154
4229
|
if (LOCAL_COMMAND_ECHO_REGEX.test(textContent.trim())) {
|
|
4155
4230
|
return;
|
|
4156
4231
|
}
|
|
4232
|
+
turnWasInterrupted = INTERRUPTED_MESSAGE_REGEX.test(textContent.trim());
|
|
4157
4233
|
const images = content.filter((c) => c.type === "image" && c.source).map((c) => {
|
|
4158
4234
|
const source = c.source;
|
|
4159
4235
|
return {
|
|
@@ -4401,8 +4477,21 @@ function parseClaudeEvents(events, parentToolUseId) {
|
|
|
4401
4477
|
}
|
|
4402
4478
|
if (event.type === "claude-result") {
|
|
4403
4479
|
const payload = coerceClaudeResultPayload(event.payload);
|
|
4480
|
+
const errorList = payload.errors || [];
|
|
4481
|
+
if (turnWasInterrupted) {
|
|
4482
|
+
turnWasInterrupted = false;
|
|
4483
|
+
const genuineErrors = errorList.filter((e) => !e.includes("[ede_diagnostic]"));
|
|
4484
|
+
if (genuineErrors.length > 0) {
|
|
4485
|
+
messages.push({
|
|
4486
|
+
id: `error-${event.timestamp}`,
|
|
4487
|
+
type: "error",
|
|
4488
|
+
message: genuineErrors.join("\n"),
|
|
4489
|
+
timestamp: event.timestamp
|
|
4490
|
+
});
|
|
4491
|
+
}
|
|
4492
|
+
return;
|
|
4493
|
+
}
|
|
4404
4494
|
if (isClaudeResultError(payload)) {
|
|
4405
|
-
const errorList = payload.errors || [];
|
|
4406
4495
|
const errorMessage = errorList.length > 0 ? errorList.join("\n") : "Claude session encountered an unexpected error.";
|
|
4407
4496
|
messages.push({
|
|
4408
4497
|
id: `error-${event.timestamp}`,
|
|
@@ -4541,78 +4630,6 @@ function parseClaudeEvents(events, parentToolUseId) {
|
|
|
4541
4630
|
return messages.filter((_, index) => !staleIndexes.has(index));
|
|
4542
4631
|
}
|
|
4543
4632
|
|
|
4544
|
-
// ../shared/src/agent-event-utils.ts
|
|
4545
|
-
function getUserMessage(event) {
|
|
4546
|
-
return event.type === "event_msg" && event.payload.type === "user_message" && typeof event.payload.message === "string" ? event.payload.message : null;
|
|
4547
|
-
}
|
|
4548
|
-
function getUserMessageId(event) {
|
|
4549
|
-
const messageId = event.payload[USER_MESSAGE_ID_PAYLOAD_KEY];
|
|
4550
|
-
return typeof messageId === "string" ? messageId : null;
|
|
4551
|
-
}
|
|
4552
|
-
function getUserMessageItemId(event) {
|
|
4553
|
-
const itemId = event.payload[CODEX_ASP_ITEM_ID_PAYLOAD_KEY];
|
|
4554
|
-
return typeof itemId === "string" ? itemId : null;
|
|
4555
|
-
}
|
|
4556
|
-
function parseTimestampMs(timestamp) {
|
|
4557
|
-
const value = Date.parse(timestamp);
|
|
4558
|
-
return Number.isFinite(value) ? value : 0;
|
|
4559
|
-
}
|
|
4560
|
-
function getEventTimestampMs(event) {
|
|
4561
|
-
return parseTimestampMs(event.timestamp);
|
|
4562
|
-
}
|
|
4563
|
-
function areSameUserMessageEvents(a, b) {
|
|
4564
|
-
const aMessage = getUserMessage(a);
|
|
4565
|
-
const bMessage = getUserMessage(b);
|
|
4566
|
-
if (!aMessage || aMessage !== bMessage) return false;
|
|
4567
|
-
const aMessageId = getUserMessageId(a);
|
|
4568
|
-
const bMessageId = getUserMessageId(b);
|
|
4569
|
-
if (aMessageId || bMessageId) return aMessageId === bMessageId;
|
|
4570
|
-
const aItemId = getUserMessageItemId(a);
|
|
4571
|
-
const bItemId = getUserMessageItemId(b);
|
|
4572
|
-
if (aItemId || bItemId) return aItemId === bItemId;
|
|
4573
|
-
return Math.abs(getEventTimestampMs(a) - getEventTimestampMs(b)) <= USER_MESSAGE_MATCH_GRACE_PERIOD_MS;
|
|
4574
|
-
}
|
|
4575
|
-
function parseAgentEventJsonl(content, options = {}) {
|
|
4576
|
-
const events = [];
|
|
4577
|
-
for (const line of content.split("\n")) {
|
|
4578
|
-
const trimmed = line.trim();
|
|
4579
|
-
if (!trimmed) continue;
|
|
4580
|
-
try {
|
|
4581
|
-
const parsed = JSON.parse(trimmed);
|
|
4582
|
-
if (isAgentBackendEvent(parsed)) {
|
|
4583
|
-
events.push(parsed);
|
|
4584
|
-
} else {
|
|
4585
|
-
options.onInvalidLine?.({ line: trimmed });
|
|
4586
|
-
}
|
|
4587
|
-
} catch (error) {
|
|
4588
|
-
options.onInvalidLine?.({ line: trimmed, error });
|
|
4589
|
-
}
|
|
4590
|
-
}
|
|
4591
|
-
return events;
|
|
4592
|
-
}
|
|
4593
|
-
function parseAgentEventJsonlWithCodexAspTranscript(content, options = {}) {
|
|
4594
|
-
const events = [];
|
|
4595
|
-
let transcript = null;
|
|
4596
|
-
const transcriptsByThreadId = /* @__PURE__ */ new Map();
|
|
4597
|
-
for (const event of parseAgentEventJsonl(content, options)) {
|
|
4598
|
-
if (event.type !== CODEX_ASP_TRANSCRIPT_UPDATED_EVENT_TYPE) {
|
|
4599
|
-
events.push(event);
|
|
4600
|
-
continue;
|
|
4601
|
-
}
|
|
4602
|
-
const delta = event.payload.transcriptDelta;
|
|
4603
|
-
if (isCodexAspTranscriptDelta(delta)) {
|
|
4604
|
-
const previous = transcriptsByThreadId.get(delta.threadId) ?? null;
|
|
4605
|
-
transcript = applyCodexAspTranscriptDelta(previous, delta);
|
|
4606
|
-
} else if (isCodexAspTranscript(event.payload.transcript)) {
|
|
4607
|
-
transcript = event.payload.transcript;
|
|
4608
|
-
}
|
|
4609
|
-
if (transcript) {
|
|
4610
|
-
transcriptsByThreadId.set(transcript.threadId, transcript);
|
|
4611
|
-
}
|
|
4612
|
-
}
|
|
4613
|
-
return { events, transcript, transcriptsByThreadId };
|
|
4614
|
-
}
|
|
4615
|
-
|
|
4616
4633
|
// ../shared/src/display-message/parsers/codex-asp-parser.ts
|
|
4617
4634
|
var DUPLICATE_WINDOW_MS = 5 * 60 * 1e3;
|
|
4618
4635
|
|
|
@@ -7822,6 +7839,13 @@ var CodingAgentManager = class {
|
|
|
7822
7839
|
const { queue, isProcessing } = this.drainQueueForInterrupt();
|
|
7823
7840
|
if (isProcessing) {
|
|
7824
7841
|
await this.interruptActiveTurn();
|
|
7842
|
+
const event = {
|
|
7843
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
7844
|
+
type: CHAT_INTERRUPTED_EVENT_TYPE,
|
|
7845
|
+
payload: {}
|
|
7846
|
+
};
|
|
7847
|
+
this.onEvent(event);
|
|
7848
|
+
this.getHistorySink()?.append(event);
|
|
7825
7849
|
}
|
|
7826
7850
|
this.emitInterruptedQueueEvent(queue);
|
|
7827
7851
|
return {
|
|
@@ -8681,6 +8705,9 @@ var ClaudeManager = class _ClaudeManager extends CodingAgentManager {
|
|
|
8681
8705
|
this.disallowedToolsOverride = options.disallowedTools;
|
|
8682
8706
|
this.initializeManager(this.processMessageInternal.bind(this));
|
|
8683
8707
|
}
|
|
8708
|
+
getHistorySink() {
|
|
8709
|
+
return this.historyFile;
|
|
8710
|
+
}
|
|
8684
8711
|
async interruptActiveTurn() {
|
|
8685
8712
|
this.pendingInterrupt = true;
|
|
8686
8713
|
if (this.activeQuery) {
|
|
@@ -9802,7 +9829,7 @@ var DEFAULT_CODEX_ARGS = ["app-server", "--listen", "stdio://"];
|
|
|
9802
9829
|
var MIN_CODEX_CLI_VERSION = "0.144.6";
|
|
9803
9830
|
var CODEX_UPGRADE_TIMEOUT_MS = 12e4;
|
|
9804
9831
|
var codexCliVersionEnsured = null;
|
|
9805
|
-
var ENGINE_PACKAGE_VERSION = "0.1.
|
|
9832
|
+
var ENGINE_PACKAGE_VERSION = "0.1.482";
|
|
9806
9833
|
var INITIALIZE_METHOD = "initialize";
|
|
9807
9834
|
var INITIALIZED_NOTIFICATION = "initialized";
|
|
9808
9835
|
var ACCOUNT_LOGIN_START_METHOD = "account/login/start";
|
|
@@ -10821,6 +10848,9 @@ var CodexAspManager = class extends CodingAgentManager {
|
|
|
10821
10848
|
}
|
|
10822
10849
|
this.currentThreadId = this.initialSessionId ?? replayed?.transcript?.threadId ?? null;
|
|
10823
10850
|
}
|
|
10851
|
+
getHistorySink() {
|
|
10852
|
+
return { append: (event) => this.trackHistoryEvent(event) };
|
|
10853
|
+
}
|
|
10824
10854
|
async interruptActiveTurn() {
|
|
10825
10855
|
if (!this.currentThreadId || !this.activeTurnId) {
|
|
10826
10856
|
return;
|
|
@@ -12047,6 +12077,9 @@ var CursorManager = class extends CodingAgentManager {
|
|
|
12047
12077
|
async initialize() {
|
|
12048
12078
|
await mkdir11(dirname5(this.historyFilePath), { recursive: true });
|
|
12049
12079
|
}
|
|
12080
|
+
getHistorySink() {
|
|
12081
|
+
return this.historyFile;
|
|
12082
|
+
}
|
|
12050
12083
|
async interruptActiveTurn() {
|
|
12051
12084
|
await this.cancelRun(this.activeRun);
|
|
12052
12085
|
this.abortActiveTurn?.();
|
|
@@ -12584,6 +12617,9 @@ var OpencodeManager = class extends CodingAgentManager {
|
|
|
12584
12617
|
async initialize() {
|
|
12585
12618
|
await mkdir12(dirname6(this.historyFilePath), { recursive: true });
|
|
12586
12619
|
}
|
|
12620
|
+
getHistorySink() {
|
|
12621
|
+
return this.historyFile;
|
|
12622
|
+
}
|
|
12587
12623
|
async interruptActiveTurn() {
|
|
12588
12624
|
this.activeAbortController?.abort();
|
|
12589
12625
|
if (this.client && this.sessionId) {
|
|
@@ -13112,6 +13148,9 @@ var PiManager = class extends CodingAgentManager {
|
|
|
13112
13148
|
async initialize() {
|
|
13113
13149
|
await mkdir13(dirname7(this.historyFilePath), { recursive: true });
|
|
13114
13150
|
}
|
|
13151
|
+
getHistorySink() {
|
|
13152
|
+
return this.historyFile;
|
|
13153
|
+
}
|
|
13115
13154
|
async interruptActiveTurn() {
|
|
13116
13155
|
await this.session?.abort();
|
|
13117
13156
|
}
|