remote-codex 0.11.38 → 0.11.40
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/apps/supervisor-api/dist/index.js +47 -8
- package/apps/supervisor-web/dist/assets/{index-pkf-_mec.js → index-B-qj7e8G.js} +4 -4
- package/apps/supervisor-web/dist/assets/index-CDFuOeJN.css +1 -0
- package/apps/supervisor-web/dist/index.html +2 -2
- package/package.json +1 -1
- package/packages/claude/src/runtimeAdapter.test.ts +190 -2
- package/packages/claude/src/runtimeAdapter.ts +72 -9
- package/apps/supervisor-web/dist/assets/index-P0J5du_C.css +0 -1
|
@@ -11717,6 +11717,21 @@ import { pathToFileURL } from "url";
|
|
|
11717
11717
|
import { promisify } from "util";
|
|
11718
11718
|
var execFileAsync = promisify(execFile);
|
|
11719
11719
|
var promptPhotoTokenPattern2 = /\[PHOTO\s+([^\]]+)\]/g;
|
|
11720
|
+
var activeTranscriptMatchWindowMs = 12e4;
|
|
11721
|
+
function normalizePromptForTurnReconciliation(value) {
|
|
11722
|
+
return value.replace(/\[PHOTO\s+[^\]]+\]/g, " ").replace(/\s+/g, " ").trim();
|
|
11723
|
+
}
|
|
11724
|
+
function userPromptForTurn(turn) {
|
|
11725
|
+
return turn.items.find((item) => item.kind === "userMessage")?.text ?? null;
|
|
11726
|
+
}
|
|
11727
|
+
function isRecentActiveTranscriptTurn(turn, activeStartedAt) {
|
|
11728
|
+
if (!turn.startedAt) {
|
|
11729
|
+
return true;
|
|
11730
|
+
}
|
|
11731
|
+
const transcriptStartedAt = Date.parse(turn.startedAt);
|
|
11732
|
+
const activeStartedAtMs = Date.parse(activeStartedAt);
|
|
11733
|
+
return !Number.isFinite(transcriptStartedAt) || !Number.isFinite(activeStartedAtMs) || Math.abs(transcriptStartedAt - activeStartedAtMs) <= activeTranscriptMatchWindowMs;
|
|
11734
|
+
}
|
|
11720
11735
|
function mimeTypeForImagePath(filePath) {
|
|
11721
11736
|
const extension = path10.extname(filePath).toLowerCase();
|
|
11722
11737
|
switch (extension) {
|
|
@@ -12755,6 +12770,12 @@ var ClaudeRuntimeAdapter = class extends EventEmitter5 {
|
|
|
12755
12770
|
return {
|
|
12756
12771
|
...summary,
|
|
12757
12772
|
cwd,
|
|
12773
|
+
// Claude's persisted session metadata remains "idle" while a query is
|
|
12774
|
+
// streaming. The in-memory runtime is authoritative for that interval:
|
|
12775
|
+
// returning the stale persisted status makes detail polling clear the
|
|
12776
|
+
// active provider turn, which in turn drops live tool items from the
|
|
12777
|
+
// transcript until Claude writes its final history record.
|
|
12778
|
+
status: activeTurn ? "running" : summary.status,
|
|
12758
12779
|
turns: this.reconcileActiveTranscriptTurn(providerSessionId, turns, activeTurn)
|
|
12759
12780
|
};
|
|
12760
12781
|
}
|
|
@@ -12987,9 +13008,11 @@ var ClaudeRuntimeAdapter = class extends EventEmitter5 {
|
|
|
12987
13008
|
}
|
|
12988
13009
|
const activeUserItem = userMessageHistoryItem(`${activeTurn.providerTurnId}:user`, prompt);
|
|
12989
13010
|
const activeItems = [...activeTurn.itemOrder].map((itemId) => activeTurn.items.get(itemId)).filter((item) => Boolean(item));
|
|
12990
|
-
const
|
|
12991
|
-
|
|
12992
|
-
|
|
13011
|
+
const normalizedPrompt = normalizePromptForTurnReconciliation(prompt);
|
|
13012
|
+
const transcriptTurnIndex = turns.findLastIndex((turn) => {
|
|
13013
|
+
const transcriptPrompt = userPromptForTurn(turn);
|
|
13014
|
+
return turn.status === "completed" && transcriptPrompt !== null && normalizePromptForTurnReconciliation(transcriptPrompt) === normalizedPrompt && !turn.items.some((item) => item.kind === "agentMessage") && isRecentActiveTranscriptTurn(turn, activeTurn.startedAt);
|
|
13015
|
+
});
|
|
12993
13016
|
if (transcriptTurnIndex < 0) {
|
|
12994
13017
|
return turns;
|
|
12995
13018
|
}
|
|
@@ -13000,6 +13023,11 @@ var ClaudeRuntimeAdapter = class extends EventEmitter5 {
|
|
|
13000
13023
|
aliases = /* @__PURE__ */ new Map();
|
|
13001
13024
|
this.historicalTurnIdAliases.set(providerSessionId, aliases);
|
|
13002
13025
|
}
|
|
13026
|
+
for (const [historicalTurnId, displayTurnId] of aliases) {
|
|
13027
|
+
if (displayTurnId === activeTurn.providerTurnId && historicalTurnId !== transcriptTurn.providerTurnId) {
|
|
13028
|
+
aliases.delete(historicalTurnId);
|
|
13029
|
+
}
|
|
13030
|
+
}
|
|
13003
13031
|
aliases.set(transcriptTurn.providerTurnId, activeTurn.providerTurnId);
|
|
13004
13032
|
}
|
|
13005
13033
|
return turns.map((turn, index) => {
|
|
@@ -13022,9 +13050,16 @@ var ClaudeRuntimeAdapter = class extends EventEmitter5 {
|
|
|
13022
13050
|
if (!aliases || aliases.size === 0) {
|
|
13023
13051
|
return turns;
|
|
13024
13052
|
}
|
|
13053
|
+
const rawTurnIds = new Set(turns.map((turn) => turn.providerTurnId));
|
|
13054
|
+
const usedTurnIds = /* @__PURE__ */ new Set();
|
|
13025
13055
|
return turns.map((turn) => {
|
|
13026
13056
|
const providerTurnId = aliases.get(turn.providerTurnId);
|
|
13027
|
-
|
|
13057
|
+
if (!providerTurnId || usedTurnIds.has(providerTurnId) || providerTurnId !== turn.providerTurnId && rawTurnIds.has(providerTurnId)) {
|
|
13058
|
+
usedTurnIds.add(turn.providerTurnId);
|
|
13059
|
+
return turn;
|
|
13060
|
+
}
|
|
13061
|
+
usedTurnIds.add(providerTurnId);
|
|
13062
|
+
return { ...turn, providerTurnId };
|
|
13028
13063
|
});
|
|
13029
13064
|
}
|
|
13030
13065
|
async listMcpServers() {
|
|
@@ -13233,9 +13268,11 @@ var ClaudeRuntimeAdapter = class extends EventEmitter5 {
|
|
|
13233
13268
|
const nextItem = withHistoryItemCreatedAt(item, messageCreatedAt);
|
|
13234
13269
|
const existing = state.items.get(nextItem.id);
|
|
13235
13270
|
addOrUpdateItem(state, nextItem);
|
|
13236
|
-
if (nextItem.kind
|
|
13271
|
+
if (nextItem.kind === "agentMessage") {
|
|
13272
|
+
this.emitItem(state, nextItem, "item.completed", { force: true });
|
|
13273
|
+
} else if (!existing) {
|
|
13237
13274
|
this.emitItem(state, nextItem, "item.started");
|
|
13238
|
-
} else
|
|
13275
|
+
} else {
|
|
13239
13276
|
this.emitItem(state, nextItem, "item.started", { force: true });
|
|
13240
13277
|
}
|
|
13241
13278
|
}
|
|
@@ -16955,7 +16992,7 @@ function deferLargeHistoryItemDetails(turn, deferredDetails) {
|
|
|
16955
16992
|
};
|
|
16956
16993
|
}
|
|
16957
16994
|
function shouldPersistLiveHistoryItem(item) {
|
|
16958
|
-
return item.kind === "commandExecution" || item.kind === "fileChange" || item.kind === "fileRead" || item.kind === "hook" || item.kind === "agentToolCall" || item.kind === "skillToolCall" || item.kind === "toolCall" || item.kind === "reasoning" || item.kind === "webSearch";
|
|
16995
|
+
return item.kind === "agentMessage" && !isTransientAgentHistoryItem(item) || item.kind === "commandExecution" || item.kind === "fileChange" || item.kind === "fileRead" || item.kind === "hook" || item.kind === "agentToolCall" || item.kind === "skillToolCall" || item.kind === "toolCall" || item.kind === "reasoning" || item.kind === "webSearch";
|
|
16959
16996
|
}
|
|
16960
16997
|
function shouldPersistFinalHistoryItem(item) {
|
|
16961
16998
|
return item.kind === "agentMessage" || shouldPersistLiveHistoryItem(item);
|
|
@@ -20281,7 +20318,9 @@ var ThreadHistoryPersistenceCoordinator = class {
|
|
|
20281
20318
|
threadId: localThreadId,
|
|
20282
20319
|
turnId,
|
|
20283
20320
|
itemId: item.id,
|
|
20284
|
-
itemJson: JSON.stringify(
|
|
20321
|
+
itemJson: JSON.stringify(
|
|
20322
|
+
item.kind === "agentMessage" ? { ...item, sourceTurnId: turnId } : item
|
|
20323
|
+
)
|
|
20285
20324
|
});
|
|
20286
20325
|
}
|
|
20287
20326
|
persistProjectedHistoryItem(localThreadId, turnId, item) {
|