@openclaw/codex 2026.9.5 → 2026.9.6
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/.setup/{account-usage-runtime-C2MOIvfq.mjs → account-usage-runtime-Eem_WGqY.mjs} +5 -5
- package/dist/.setup/{apply-CJ0ZfmBG.mjs → apply-DDOi8uNx.mjs} +22 -28
- package/dist/.setup/{attempt-client-cleanup-BpYKdTA0.mjs → attempt-client-cleanup-CEv1cKwF.mjs} +58 -43
- package/dist/.setup/attempt-workspace-context-DUVEn_CS.mjs +331 -0
- package/dist/.setup/{auth-cache-key-QirmgiCo.mjs → auth-cache-key-B2mpaI9D.mjs} +9 -81
- package/dist/.setup/auth-profile-health-oHizqgye.mjs +53 -0
- package/dist/.setup/auth-profile-recovery-BREezV0L.mjs +14 -0
- package/dist/.setup/{binding-connection-Bm38niE8.mjs → binding-connection-ThoatDcb.mjs} +1 -1
- package/dist/.setup/{binding-connection.runtime-CnRMC0ta.mjs → binding-connection.runtime-yoHrABt-.mjs} +4 -4
- package/dist/.setup/{bounded-turn-BtlZcivC.mjs → bounded-turn-B2HScEgT.mjs} +138 -32
- package/dist/.setup/{build-state-Xx9ybZqa.mjs → build-state-C7EnDVgr.mjs} +1 -1
- package/dist/.setup/{capabilities-_vXcZGSx.mjs → capabilities-CDXOOFdZ.mjs} +1 -1
- package/dist/.setup/{client-vXs2929Q.mjs → client-Cs08OXVQ.mjs} +583 -559
- package/dist/.setup/client-catalog-response-BMgt_4q4.mjs +285 -0
- package/dist/.setup/{command-dispatch-naHIZwwF.mjs → command-dispatch-B4JuOsOk.mjs} +8 -4
- package/dist/.setup/{command-formatters-CGEkdawF.mjs → command-formatters-Bmqvr9tO.mjs} +8 -4
- package/dist/.setup/{command-handlers-BtAJEW1X.mjs → command-handlers-DW7Lx9oH.mjs} +106 -172
- package/dist/.setup/{command-rpc-DHFpn4le.mjs → command-rpc-DixIj3HW.mjs} +36 -21
- package/dist/.setup/{compact-C3i3qlzj.mjs → compact-Du5UvtxA.mjs} +14 -21
- package/dist/.setup/{config-CedDWjM-.mjs → config-BoTP_mrL.mjs} +3 -3
- package/dist/.setup/{config-options-BsanJ8QG.mjs → config-options-BvaRs51b.mjs} +46 -30
- package/dist/.setup/{config-runtime-CeAhl_h4.mjs → config-runtime-C8Rw1m1m.mjs} +1 -1
- package/dist/.setup/{config-security-BRQ2mgW9.mjs → config-security-BEReZ6go.mjs} +35 -120
- package/dist/.setup/{conversation-binding-DhzrpTM6.mjs → conversation-binding-DP-gMrBP.mjs} +21 -32
- package/dist/.setup/{conversation-control-DN53ns41.mjs → conversation-control-uK9Jomlc.mjs} +28 -67
- package/dist/.setup/{dynamic-tools-D16lOp67.mjs → dynamic-tools-BDXl-8Cw.mjs} +848 -578
- package/dist/.setup/{effective-mcp-catalog-K6kLCN8X.mjs → effective-mcp-catalog-CvnvnGIe.mjs} +3 -3
- package/dist/.setup/{ephemeral-turn-R1gA8Sn6.mjs → ephemeral-turn-poidXgek.mjs} +9 -6
- package/dist/.setup/{event-projector-assistant-message-DNUR1s0A.mjs → event-projector-assistant-message-BsruvNrH.mjs} +2 -4
- package/dist/.setup/{event-projector-items-DyTQ_XqL.mjs → event-projector-items-C6L_5ZiT.mjs} +42 -8
- package/dist/.setup/{event-projector-usage-C7Ntzs-f.mjs → event-projector-usage-CnBS8Wa3.mjs} +1 -1
- package/dist/.setup/{harness-rxaaoN-o.mjs → harness-a_MsE4-_.mjs} +23 -17
- package/dist/.setup/{inference-context-fulhZuz8.mjs → inference-context-D96l9-ew.mjs} +1 -1
- package/dist/.setup/inference-proxy-b-aJMSxm.mjs +601 -0
- package/dist/.setup/{isolated-completion-B6srt48J.mjs → isolated-completion-BIZFhTNG.mjs} +17 -10
- package/dist/.setup/launch-args-DbFCehO7.mjs +196 -0
- package/dist/.setup/{managed-binary-DP6Rib3P.mjs → managed-binary-BnshlFag.mjs} +13 -2
- package/dist/.setup/{model-catalog-DkvUuBey.mjs → model-catalog-CfXJf9Ay.mjs} +9 -10
- package/dist/.setup/{models-BDFgm_G-.mjs → models-KnqBv0hE.mjs} +3 -3
- package/dist/.setup/{native-auth-BLZGqFjw.mjs → native-auth-rWbGbMn3.mjs} +4 -4
- package/dist/.setup/{native-subagent-history-YXaL6dMd.mjs → native-subagent-history-0nYYgo0k.mjs} +26 -13
- package/dist/.setup/{native-subagent-monitor-B1hxzIOy.mjs → native-subagent-monitor-D3filLY2.mjs} +145 -317
- package/dist/.setup/{native-subagent-task-ids-DsuOonKv.mjs → native-subagent-task-ids-wb8CKZGN.mjs} +69 -39
- package/dist/.setup/{node-cli-sessions-Cl8b2ZF3.mjs → node-cli-sessions-r3avj02l.mjs} +86 -68
- package/dist/.setup/node-exec-server.runtime-BDwWXVpK.mjs +247 -0
- package/dist/.setup/{plan-xD7WKYTM.mjs → plan-CN3VwfNU.mjs} +74 -76
- package/dist/.setup/{plugin-activation-r8nq5Jzp.mjs → plugin-activation-DT3MNtqj.mjs} +7 -16
- package/dist/.setup/{plugin-app-cache-key-BOxKP7db.mjs → plugin-app-cache-key-B2CsSdnV.mjs} +4 -20
- package/dist/.setup/{plugin-approval-roundtrip-CjfzafAZ.mjs → plugin-approval-roundtrip-C0MZzCuP.mjs} +1 -1
- package/dist/.setup/{plugin-inventory-DUle8DLz.mjs → plugin-inventory-BoRei8Z4.mjs} +16 -7
- package/dist/.setup/{plugin-marketplace-discovery-P-Vndfqq.mjs → plugin-marketplace-discovery-CDOi8IFs.mjs} +4 -1
- package/dist/.setup/{plugin-metadata-cache-DsS5buNa.mjs → plugin-metadata-cache-Ctmo83k_.mjs} +224 -154
- package/dist/.setup/protocol-CANUwXJ3.mjs +17 -0
- package/dist/.setup/{provider-fFh_-VR3.mjs → provider-BOsxQHOM.mjs} +9 -5
- package/dist/.setup/{provider-capabilities-B8J4Dy-O.mjs → provider-capabilities-BfE88FZ5.mjs} +31 -3
- package/dist/.setup/{rate-limits-DOEGYRNs.mjs → rate-limits-CMU3DUD0.mjs} +116 -137
- package/dist/.setup/{request-BioXJLYa.mjs → request-D2L0zMrq.mjs} +23 -15
- package/dist/.setup/{run-attempt-rlA07pUv.mjs → run-attempt-BHu11r7h.mjs} +1197 -617
- package/dist/.setup/{runtime-artifact-Dy38Z5iU.mjs → runtime-artifact-CLZ8udh-.mjs} +29 -45
- package/dist/.setup/{sandbox-guard-BBP-RbTf.mjs → sandbox-guard-C2sRMOEY.mjs} +1 -1
- package/dist/.setup/{session-binding-_0W_fHRr.mjs → session-binding-Cm0apEbd.mjs} +3 -32
- package/dist/.setup/{session-binding-record-TH3xA0zj.mjs → session-binding-record-BGoz8wOK.mjs} +22 -3
- package/dist/.setup/{session-binding-sidecars-CKYEcfNn.mjs → session-binding-sidecars-BlB5EvIS.mjs} +48 -45
- package/dist/.setup/{session-catalog-fUdWDx-U.mjs → session-catalog-Pno1xGcl.mjs} +482 -182
- package/dist/.setup/{session-catalog-adoption-CR_whkEW.mjs → session-catalog-adoption-BI6UTDZT.mjs} +57 -25
- package/dist/.setup/{session-catalog-archive-CwZaPacf.mjs → session-catalog-archive-lHBqzhaO.mjs} +6 -6
- package/dist/.setup/{session-catalog-events-jMcYfQyd.mjs → session-catalog-events-Bj6j94E_.mjs} +122 -25
- package/dist/.setup/{session-catalog-index-B141u15s.mjs → session-catalog-index-B9_VQIUz.mjs} +178 -78
- package/dist/.setup/{session-catalog-index-order-Cc5BzlQr.mjs → session-catalog-index-order-hcdz07yN.mjs} +2 -2
- package/dist/.setup/{session-catalog-index-state-BAuDztHN.mjs → session-catalog-index-state-Dgh8ORJm.mjs} +5 -2
- package/dist/.setup/{session-catalog-native-projection-ChV3cCtm.mjs → session-catalog-native-projection-DowriLid.mjs} +30 -13
- package/dist/.setup/{session-catalog-node-adoption-BVRsYOSh.mjs → session-catalog-node-adoption-ITddWx_X.mjs} +24 -12
- package/dist/.setup/{session-catalog-node-continue-Dowv8osw.mjs → session-catalog-node-continue-6g6qi4A9.mjs} +22 -13
- package/dist/.setup/{session-catalog-projection-C1Bj9Jl-.mjs → session-catalog-projection-zK_PUsiE.mjs} +13 -5
- package/dist/.setup/{session-cli-DIj-IE-E.mjs → session-cli-irrD-uo7.mjs} +4 -4
- package/dist/.setup/{session-history-C--SrLI8.mjs → session-history-BrqhSCf9.mjs} +17 -22
- package/dist/.setup/{session-history-import-JHXT5Xfi.mjs → session-history-import-D-3wAgOP.mjs} +4 -4
- package/dist/.setup/{session-history.worker-CpNj7H_P.mjs → session-history.worker-CaCh0xF_.mjs} +5 -18
- package/dist/.setup/{session-initialization-DH1z6fXn.mjs → session-initialization-rcgbZiid.mjs} +2 -2
- package/dist/.setup/{session-permission-policy-DhurXY0l.mjs → session-permission-policy-BI1QK_98.mjs} +2 -2
- package/dist/.setup/{session-retirement-CU87AOg9.mjs → session-retirement-BH-S6qkJ.mjs} +25 -6
- package/dist/.setup/{settled-turn-finalizer-CiY2bLFK.mjs → settled-turn-finalizer-DiAi6Kx6.mjs} +8 -8
- package/dist/.setup/{shared-client-BpTtuLQ5.mjs → shared-client-DA4VR4Eb.mjs} +59 -89
- package/dist/.setup/{side-question-DSCZyoBD.mjs → side-question-BJ1wSDcB.mjs} +147 -211
- package/dist/.setup/{source-Bjp4UQij.mjs → source-CUzJq5WN.mjs} +9 -9
- package/dist/.setup/spawn-error-CL3n6MAa.mjs +57 -0
- package/dist/.setup/{thread-archive-guard-jmecf6OJ.mjs → thread-archive-guard-C9frICzX.mjs} +10 -3
- package/dist/.setup/{thread-history-page-BTx-4xsg.mjs → thread-history-page-DoVpnHim.mjs} +1 -1
- package/dist/.setup/{thread-lifecycle-Cik28qWn.mjs → thread-lifecycle-B3mfz1TG.mjs} +172 -2271
- package/dist/.setup/{thread-ownership-skomxnIt.mjs → thread-ownership-DcTtAcXj.mjs} +4 -2
- package/dist/.setup/{thread-policy-Cjs4B8xf.mjs → thread-policy-DGuQsuFC.mjs} +19 -3
- package/dist/.setup/thread-requests-BLvGkP2R.mjs +2205 -0
- package/dist/.setup/{thread-resume-BkNpj9Pz.mjs → thread-resume-DIBXwOpE.mjs} +6 -6
- package/dist/.setup/{timeout-DZF05XrR.mjs → timeout-C910MdAB.mjs} +19 -2
- package/dist/.setup/{transcript-history-projection-DHNBDhCU.mjs → transcript-history-projection-ZZpkFkJ_.mjs} +94 -64
- package/dist/.setup/{transcript-mirror-D4qp_leP.mjs → transcript-mirror-BtHDBp1G.mjs} +218 -198
- package/dist/.setup/{transport-stdio-Cmx94Oiy.mjs → transport-stdio-h2VHOskC.mjs} +135 -55
- package/dist/.setup/{upstream-session-fork-D3UKxgVD.mjs → upstream-session-fork-BUr4OUbC.mjs} +44 -36
- package/dist/.setup/{usage-BOgBEKso.mjs → usage-BML0r-ua.mjs} +5 -4
- package/dist/.setup/{usage-limit-error-C0ow7DOc.mjs → usage-limit-error-DUMbefVY.mjs} +4 -4
- package/dist/.setup/{web-search-provider.runtime-CTGuJt6i.mjs → web-search-provider.runtime-CDKlN-Rv.mjs} +4 -3
- package/dist/api.js +23 -12
- package/dist/catalog-page-worker-entrypoint.js +12 -0
- package/dist/catalog-page.worker.js +9 -0
- package/dist/cli-metadata.js +1 -1
- package/dist/doctor-contract-api.js +2 -2
- package/dist/harness.js +1 -1
- package/dist/index.js +221 -170
- package/dist/media-understanding-provider.js +2 -2
- package/dist/migration-provider-api.js +1 -1
- package/dist/provider-discovery.js +1 -1
- package/dist/session-history-worker-runtime.js +15 -32
- package/dist/session-history.worker.js +1 -1
- package/package.json +9 -6
- package/dist/.setup/attempt-context-VXVwTCfS.mjs +0 -636
- package/dist/.setup/inference-proxy-CC15HuSi.mjs +0 -311
- package/dist/.setup/launch-args-DnMak49W.mjs +0 -111
- package/dist/.setup/node-exec-server.runtime-BaViBKNz.mjs +0 -226
- package/dist/.setup/version-CoqzXPgK.mjs +0 -12
- package/dist/.setup/{native-execution-policy-YBMHSzC4.mjs → native-execution-policy-umd0tgh4.mjs} +1 -1
|
@@ -1,12 +1,200 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.mjs";
|
|
2
2
|
import { t as readCodexAsyncQuestions } from "./async-questions-DdhOCwGi.mjs";
|
|
3
3
|
import { i as readUpstreamUserText, n as attachUpstreamUserText, r as readMirrorIdentity, t as attachCodexMirrorIdentity } from "./upstream-prompt-provenance-LphB8slG.mjs";
|
|
4
|
-
import { t as projectBoundedCodexThreadHistory } from "./transcript-history-projection-
|
|
4
|
+
import { t as projectBoundedCodexThreadHistory } from "./transcript-history-projection-ZZpkFkJ_.mjs";
|
|
5
5
|
import { a as fingerprintCodexMirrorSourceMessage, c as readCodexMirrorSourceFingerprint, i as buildCodexMirrorDedupeIdentity, n as attachCodexMirrorAttestation, r as attachCodexMirrorRunId, s as isMirroredAgentMessage, t as applyCodexTranscriptTaint } from "./transcript-mirror-attestation-CzM-94NC.mjs";
|
|
6
6
|
import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
7
7
|
import { deliverAgentHarnessUserInputPrompt, embeddedAgentLog, formatErrorMessage, projectAgentHarnessTranscriptMessageForDisplay, restorePreparedUserTurnOperationalMetaForRuntime, runAgentHarnessBeforeMessageWriteHook } from "openclaw/plugin-sdk/agent-harness-runtime";
|
|
8
8
|
import { withCodexSessionTranscriptMirrorWriteLock } from "openclaw/plugin-sdk/codex-session-transcript-runtime";
|
|
9
9
|
import { publishSessionTranscriptUpdateByIdentity } from "openclaw/plugin-sdk/session-transcript-runtime";
|
|
10
|
+
//#region extensions/codex/src/app-server/transcript-mirror-write.ts
|
|
11
|
+
function readMirroredAssistantText(message) {
|
|
12
|
+
return message?.role === "assistant" ? message.content.flatMap((part) => part.type === "text" ? [part.text] : []).join("\n") || void 0 : void 0;
|
|
13
|
+
}
|
|
14
|
+
async function mirror(params) {
|
|
15
|
+
const messages = params.messages.filter(isMirroredAgentMessage);
|
|
16
|
+
if (messages.length === 0) return {
|
|
17
|
+
assistantMirrorIdentitiesOwned: [],
|
|
18
|
+
anchorsByMirrorIdentity: /* @__PURE__ */ new Map(),
|
|
19
|
+
messagesPresent: [],
|
|
20
|
+
userMessageReceipts: []
|
|
21
|
+
};
|
|
22
|
+
const candidates = messages.map((message) => {
|
|
23
|
+
const dedupeIdentity = buildCodexMirrorDedupeIdentity(message);
|
|
24
|
+
const sourceFingerprint = fingerprintCodexMirrorSourceMessage(message);
|
|
25
|
+
return {
|
|
26
|
+
dedupeIdentity,
|
|
27
|
+
idempotencyKey: (message.role === "user" ? normalizeOptionalString("idempotencyKey" in message ? message.idempotencyKey : void 0) : void 0) ?? (params.idempotencyScope ? `${params.idempotencyScope}:${dedupeIdentity}` : void 0),
|
|
28
|
+
message,
|
|
29
|
+
sourceFingerprint
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
const candidateIdempotencyKeys = candidates.flatMap(({ idempotencyKey }) => idempotencyKey ? [idempotencyKey] : []);
|
|
33
|
+
const transcriptTarget = resolveCodexMirrorTranscriptTarget(params);
|
|
34
|
+
const assertWritable = () => {
|
|
35
|
+
params.assertCurrent?.();
|
|
36
|
+
params.assertWriteCurrent?.();
|
|
37
|
+
};
|
|
38
|
+
assertWritable();
|
|
39
|
+
const mirrorBatch = await withCodexSessionTranscriptMirrorWriteLock({
|
|
40
|
+
...transcriptTarget,
|
|
41
|
+
config: params.config
|
|
42
|
+
}, async (transcript) => {
|
|
43
|
+
assertWritable();
|
|
44
|
+
const nextAppendedUpdates = [];
|
|
45
|
+
const nextAssistantMirrorIdentitiesOwned = /* @__PURE__ */ new Set();
|
|
46
|
+
const nextAnchorsByMirrorIdentity = /* @__PURE__ */ new Map();
|
|
47
|
+
const nextMessagesPresent = [];
|
|
48
|
+
const nextUserMessageReceipts = [];
|
|
49
|
+
const mirrorFacts = await transcript.readMessageFacts({ idempotencyKeys: candidateIdempotencyKeys });
|
|
50
|
+
assertWritable();
|
|
51
|
+
const taint = { tainted: false };
|
|
52
|
+
for (const { dedupeIdentity, idempotencyKey, message, sourceFingerprint } of candidates) {
|
|
53
|
+
const sourceMessage = applyCodexTranscriptTaint(message, taint);
|
|
54
|
+
const mirrorIdentity = readMirrorIdentity(message);
|
|
55
|
+
const ownsRun = Boolean(params.runId && (!params.runMirrorIdentityPrefix || mirrorIdentity?.startsWith(params.runMirrorIdentityPrefix)));
|
|
56
|
+
const terminalOwner = params.terminalAssistantOwner;
|
|
57
|
+
const ownsTerminal = Boolean(ownsRun && terminalOwner && mirrorIdentity === terminalOwner.mirrorIdentity);
|
|
58
|
+
const ownedMessage = ownsRun && params.runId ? attachCodexMirrorRunId(sourceMessage, params.runId, ownsTerminal, terminalOwner?.settlementWarning) : sourceMessage;
|
|
59
|
+
const transcriptMessage = {
|
|
60
|
+
...attachCodexMirrorAttestation(ownedMessage, sourceFingerprint),
|
|
61
|
+
...idempotencyKey ? { idempotencyKey } : {}
|
|
62
|
+
};
|
|
63
|
+
if (idempotencyKey && mirrorFacts.existingIdempotencyKeys.has(idempotencyKey)) {
|
|
64
|
+
const persistedMessage = mirrorFacts.messagesByIdempotencyKey.get(idempotencyKey);
|
|
65
|
+
const persistedAnchor = mirrorFacts.anchorsByIdempotencyKey.get(idempotencyKey);
|
|
66
|
+
if (persistedMessage && isMirroredAgentMessage(persistedMessage)) {
|
|
67
|
+
nextMessagesPresent.push(persistedMessage);
|
|
68
|
+
if (persistedMessage.role === "user" && persistedAnchor) nextUserMessageReceipts.push({
|
|
69
|
+
anchor: persistedAnchor,
|
|
70
|
+
appended: false,
|
|
71
|
+
message: persistedMessage
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (persistedAnchor) nextAnchorsByMirrorIdentity.set(dedupeIdentity, persistedAnchor);
|
|
75
|
+
if (message.role === "assistant") nextAssistantMirrorIdentitiesOwned.add(dedupeIdentity);
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
assertWritable();
|
|
79
|
+
const preparedUserMessage = transcriptMessage.role === "user" ? {
|
|
80
|
+
...transcriptMessage,
|
|
81
|
+
__openclaw: { ...Reflect.get(transcriptMessage, "__openclaw") }
|
|
82
|
+
} : void 0;
|
|
83
|
+
if (preparedUserMessage?.["__openclaw"].humanMentions !== void 0) {
|
|
84
|
+
preparedUserMessage.content = structuredClone(preparedUserMessage.content);
|
|
85
|
+
preparedUserMessage["__openclaw"].humanMentions = structuredClone(preparedUserMessage["__openclaw"].humanMentions);
|
|
86
|
+
}
|
|
87
|
+
const asyncSourceText = message.role === "assistant" && message.openclawAsyncDelivery ? readMirroredAssistantText(message) : void 0;
|
|
88
|
+
const nextMessage = runAgentHarnessBeforeMessageWriteHook({
|
|
89
|
+
message: transcriptMessage,
|
|
90
|
+
agentId: params.agentId,
|
|
91
|
+
sessionKey: params.sessionKey,
|
|
92
|
+
skipBeforeMessageWriteHooks: params.skipBeforeMessageWriteHooks,
|
|
93
|
+
prepareAssistantTranscriptMessage: ownsTerminal ? params.prepareAssistantTranscriptMessage : void 0
|
|
94
|
+
});
|
|
95
|
+
if (!nextMessage) {
|
|
96
|
+
if (message.role === "assistant") nextAssistantMirrorIdentitiesOwned.add(dedupeIdentity);
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const restoredMessage = restorePreparedUserTurnOperationalMetaForRuntime({
|
|
100
|
+
runtimeMessage: nextMessage,
|
|
101
|
+
preparedMessage: preparedUserMessage
|
|
102
|
+
});
|
|
103
|
+
let messageToAppend = idempotencyKey ? {
|
|
104
|
+
...attachCodexMirrorAttestation(restoredMessage, sourceFingerprint),
|
|
105
|
+
idempotencyKey
|
|
106
|
+
} : attachCodexMirrorAttestation(restoredMessage, sourceFingerprint);
|
|
107
|
+
if (mirrorIdentity) messageToAppend = attachCodexMirrorIdentity(messageToAppend, mirrorIdentity);
|
|
108
|
+
if (ownsRun && params.runId) messageToAppend = attachCodexMirrorRunId(messageToAppend, params.runId, ownsTerminal, terminalOwner?.settlementWarning);
|
|
109
|
+
if (message.role === "assistant" && message.openclawAsyncDelivery) {
|
|
110
|
+
const questions = isMirroredAgentMessage(messageToAppend) && readMirroredAssistantText(messageToAppend) === asyncSourceText ? readCodexAsyncQuestions(messageToAppend.openclawAsyncDelivery?.questions) : void 0;
|
|
111
|
+
messageToAppend = Object.assign(messageToAppend, { openclawAsyncDelivery: {
|
|
112
|
+
itemId: message.openclawAsyncDelivery.itemId,
|
|
113
|
+
...questions ? { questions } : {}
|
|
114
|
+
} });
|
|
115
|
+
}
|
|
116
|
+
messageToAppend = applyCodexTranscriptTaint(messageToAppend, taint);
|
|
117
|
+
messageToAppend = projectAgentHarnessTranscriptMessageForDisplay({
|
|
118
|
+
hidden: message.display === false,
|
|
119
|
+
message: messageToAppend
|
|
120
|
+
});
|
|
121
|
+
assertWritable();
|
|
122
|
+
const { lifecycleRevision, messageSeq, result: appended } = await transcript.appendMessageWithMessageSequence({
|
|
123
|
+
message: messageToAppend,
|
|
124
|
+
...params.assertCurrent || params.assertWriteCurrent ? { prepareMessageAfterIdempotencyCheck: (preparedMessage) => {
|
|
125
|
+
assertWritable();
|
|
126
|
+
return preparedMessage;
|
|
127
|
+
} } : {},
|
|
128
|
+
idempotencyLookup: "scan",
|
|
129
|
+
cwd: params.cwd
|
|
130
|
+
});
|
|
131
|
+
params.assertCurrent?.();
|
|
132
|
+
if (!appended) continue;
|
|
133
|
+
const { messageId, message: appendedMessage } = appended;
|
|
134
|
+
if (isMirroredAgentMessage(appendedMessage)) {
|
|
135
|
+
nextMessagesPresent.push(appendedMessage);
|
|
136
|
+
if (idempotencyKey) mirrorFacts.messagesByIdempotencyKey.set(idempotencyKey, appendedMessage);
|
|
137
|
+
}
|
|
138
|
+
if (message.role === "assistant") nextAssistantMirrorIdentitiesOwned.add(dedupeIdentity);
|
|
139
|
+
if (appended.anchor) nextAnchorsByMirrorIdentity.set(dedupeIdentity, appended.anchor);
|
|
140
|
+
if (appendedMessage.role === "user" && appended.anchor) nextUserMessageReceipts.push({
|
|
141
|
+
anchor: appended.anchor,
|
|
142
|
+
appended: appended.appended,
|
|
143
|
+
message: appendedMessage
|
|
144
|
+
});
|
|
145
|
+
if (appended.appended) nextAppendedUpdates.push({
|
|
146
|
+
lifecycleRevision,
|
|
147
|
+
messageId,
|
|
148
|
+
message: appendedMessage,
|
|
149
|
+
...messageSeq !== void 0 ? { messageSeq } : {}
|
|
150
|
+
});
|
|
151
|
+
if (idempotencyKey) {
|
|
152
|
+
mirrorFacts.existingIdempotencyKeys.add(idempotencyKey);
|
|
153
|
+
if (appended.anchor) mirrorFacts.anchorsByIdempotencyKey.set(idempotencyKey, appended.anchor);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
appendedUpdates: nextAppendedUpdates,
|
|
158
|
+
assistantMirrorIdentitiesOwned: [...nextAssistantMirrorIdentitiesOwned],
|
|
159
|
+
anchorsByMirrorIdentity: nextAnchorsByMirrorIdentity,
|
|
160
|
+
messagesPresent: nextMessagesPresent,
|
|
161
|
+
userMessageReceipts: nextUserMessageReceipts
|
|
162
|
+
};
|
|
163
|
+
});
|
|
164
|
+
params.assertCurrent?.();
|
|
165
|
+
const { appendedUpdates, ...result } = mirrorBatch;
|
|
166
|
+
for (const update of appendedUpdates) try {
|
|
167
|
+
const terminalOwner = params.terminalAssistantOwner;
|
|
168
|
+
const terminalRunId = update.message.role === "assistant" && terminalOwner && readMirrorIdentity(update.message) === terminalOwner.mirrorIdentity ? terminalOwner.runId : void 0;
|
|
169
|
+
await publishSessionTranscriptUpdateByIdentity({
|
|
170
|
+
...transcriptTarget,
|
|
171
|
+
update: {
|
|
172
|
+
lifecycleRevision: update.lifecycleRevision,
|
|
173
|
+
...params.agentId ? { agentId: params.agentId } : {},
|
|
174
|
+
message: update.message,
|
|
175
|
+
messageId: update.messageId,
|
|
176
|
+
...update.messageSeq !== void 0 ? { messageSeq: update.messageSeq } : {},
|
|
177
|
+
...terminalRunId ? { runId: terminalRunId } : {},
|
|
178
|
+
sessionKey: transcriptTarget.sessionKey
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
} catch (error) {
|
|
182
|
+
embeddedAgentLog.warn("failed to publish codex app-server transcript update", { error: formatErrorMessage(error) });
|
|
183
|
+
}
|
|
184
|
+
return result;
|
|
185
|
+
}
|
|
186
|
+
function resolveCodexMirrorTranscriptTarget(params) {
|
|
187
|
+
const sessionKey = params.sessionKey?.trim();
|
|
188
|
+
const storePath = params.storePath?.trim();
|
|
189
|
+
if (!sessionKey || !storePath) throw new Error("Codex transcript mirror requires a runtime session identity");
|
|
190
|
+
return {
|
|
191
|
+
...params.agentId ? { agentId: params.agentId } : {},
|
|
192
|
+
sessionId: params.sessionId,
|
|
193
|
+
sessionKey,
|
|
194
|
+
storePath
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
//#endregion
|
|
10
198
|
//#region extensions/codex/src/app-server/user-prompt-message.ts
|
|
11
199
|
function buildSenderLabel(params) {
|
|
12
200
|
const label = params.senderName ?? params.senderUsername ?? params.senderE164 ?? params.senderId;
|
|
@@ -72,9 +260,6 @@ var transcript_mirror_exports = /* @__PURE__ */ __exportAll({
|
|
|
72
260
|
mirrorPromptAtTurnStartBestEffort: () => mirrorPromptAtTurnStartBestEffort,
|
|
73
261
|
projectBoundedCodexThreadHistory: () => projectBoundedCodexThreadHistory
|
|
74
262
|
});
|
|
75
|
-
function readMirroredAssistantText(message) {
|
|
76
|
-
return message?.role === "assistant" ? message.content.flatMap((part) => part.type === "text" ? [part.text] : []).join("\n") || void 0 : void 0;
|
|
77
|
-
}
|
|
78
263
|
/** Imports a bounded, user-visible Codex history tail into a new OpenClaw transcript. */
|
|
79
264
|
async function importCodexThreadHistoryToTranscript(params) {
|
|
80
265
|
const { transcriptMessages, importedMessages, omittedMessages } = projectBoundedCodexThreadHistory({
|
|
@@ -110,6 +295,9 @@ async function mirrorBestEffort(params) {
|
|
|
110
295
|
messagesSnapshot: params.result.messagesSnapshot,
|
|
111
296
|
turnId: params.turnId
|
|
112
297
|
});
|
|
298
|
+
const recorder = params.params.userTurnTranscriptRecorder;
|
|
299
|
+
const admittedPromptIdentity = recorder?.getAdmissionReceipt() ? `${params.turnId}:prompt` : void 0;
|
|
300
|
+
const admittedPrompt = admittedPromptIdentity ? recorder?.getPersistedMessage?.() : void 0;
|
|
113
301
|
params.assertWriteCurrent?.();
|
|
114
302
|
const mirrorResult = await mirror({
|
|
115
303
|
assertWriteCurrent: params.assertWriteCurrent,
|
|
@@ -118,7 +306,7 @@ async function mirrorBestEffort(params) {
|
|
|
118
306
|
sessionId: params.params.sessionId,
|
|
119
307
|
storePath: params.params.sessionTarget?.storePath,
|
|
120
308
|
cwd: params.cwd,
|
|
121
|
-
messages,
|
|
309
|
+
messages: admittedPromptIdentity ? messages.filter((message) => readMirrorIdentity(message) !== admittedPromptIdentity) : messages,
|
|
122
310
|
idempotencyScope: `codex-app-server:${params.threadId}`,
|
|
123
311
|
runId: params.params.runId,
|
|
124
312
|
runMirrorIdentityPrefix: `${params.turnId}:`,
|
|
@@ -140,9 +328,10 @@ async function mirrorBestEffort(params) {
|
|
|
140
328
|
const identity = readMirrorIdentity(message);
|
|
141
329
|
return identity ? [[identity, fingerprintCodexMirrorSourceMessage(message)]] : [];
|
|
142
330
|
}));
|
|
143
|
-
const mirroredMessages = mirrorResult.messagesPresent.filter((message) => {
|
|
331
|
+
const mirroredMessages = [...admittedPrompt ? [admittedPrompt] : [], ...mirrorResult.messagesPresent].filter((message) => {
|
|
144
332
|
const identity = readMirrorIdentity(message);
|
|
145
|
-
|
|
333
|
+
const expectedFingerprint = identity ? expectedFingerprints.get(identity) : void 0;
|
|
334
|
+
return expectedFingerprint !== void 0 && readCodexMirrorSourceFingerprint(message) === expectedFingerprint;
|
|
146
335
|
});
|
|
147
336
|
const assistantMirrorIdentity = `${params.turnId}:assistant`;
|
|
148
337
|
const assistantTranscriptMessage = mirroredMessages.find((message) => readMirrorIdentity(message) === assistantMirrorIdentity);
|
|
@@ -191,16 +380,26 @@ async function mirrorPromptAtTurnStartBestEffort(params) {
|
|
|
191
380
|
inputProvenance: params.params.inputProvenance,
|
|
192
381
|
message: attachUpstreamUserText(attachCodexMirrorIdentity(await buildResolvedCodexUserPromptMessage(params.params), `${params.turnId}:prompt`), params.upstreamUserText)
|
|
193
382
|
});
|
|
383
|
+
const annotate = params.params.hostCapabilities.annotateCurrentUserTurn;
|
|
384
|
+
if (annotate) await annotate({
|
|
385
|
+
mirrorIdentity: `${params.turnId}:prompt`,
|
|
386
|
+
upstreamUserText: params.upstreamUserText,
|
|
387
|
+
mirrorOrigin: "codex-app-server",
|
|
388
|
+
mirrorSourceFingerprint: fingerprintCodexMirrorSourceMessage(userPromptMessage)
|
|
389
|
+
});
|
|
194
390
|
const recorder = params.params.userTurnTranscriptRecorder;
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
391
|
+
const admission = recorder?.getAdmissionReceipt();
|
|
392
|
+
if (admission) {
|
|
393
|
+
const message = recorder?.getPersistedMessage?.();
|
|
394
|
+
if (message) {
|
|
395
|
+
params.params.hostCapabilities.assertActive();
|
|
396
|
+
params.notifyUserMessagePersisted({
|
|
397
|
+
anchor: admission,
|
|
398
|
+
appended: false,
|
|
399
|
+
message
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
return;
|
|
204
403
|
}
|
|
205
404
|
const mirrorResult = await mirror({
|
|
206
405
|
assertCurrent: params.params.hostCapabilities.assertActive,
|
|
@@ -227,176 +426,6 @@ async function mirrorPromptAtTurnStartBestEffort(params) {
|
|
|
227
426
|
});
|
|
228
427
|
}
|
|
229
428
|
}
|
|
230
|
-
async function mirror(params) {
|
|
231
|
-
const messages = params.messages.filter(isMirroredAgentMessage);
|
|
232
|
-
if (messages.length === 0) return {
|
|
233
|
-
assistantMirrorIdentitiesOwned: [],
|
|
234
|
-
anchorsByMirrorIdentity: /* @__PURE__ */ new Map(),
|
|
235
|
-
messagesPresent: [],
|
|
236
|
-
userMessageReceipts: []
|
|
237
|
-
};
|
|
238
|
-
const candidates = messages.map((message) => {
|
|
239
|
-
const dedupeIdentity = buildCodexMirrorDedupeIdentity(message);
|
|
240
|
-
const sourceFingerprint = fingerprintCodexMirrorSourceMessage(message);
|
|
241
|
-
return {
|
|
242
|
-
dedupeIdentity,
|
|
243
|
-
idempotencyKey: (message.role === "user" ? normalizeOptionalString("idempotencyKey" in message ? message.idempotencyKey : void 0) : void 0) ?? (params.idempotencyScope ? `${params.idempotencyScope}:${dedupeIdentity}` : void 0),
|
|
244
|
-
message,
|
|
245
|
-
sourceFingerprint
|
|
246
|
-
};
|
|
247
|
-
});
|
|
248
|
-
const candidateIdempotencyKeys = candidates.flatMap(({ idempotencyKey }) => idempotencyKey ? [idempotencyKey] : []);
|
|
249
|
-
const transcriptTarget = resolveCodexMirrorTranscriptTarget(params);
|
|
250
|
-
const assertWritable = () => {
|
|
251
|
-
params.assertCurrent?.();
|
|
252
|
-
params.assertWriteCurrent?.();
|
|
253
|
-
};
|
|
254
|
-
assertWritable();
|
|
255
|
-
const mirrorBatch = await withCodexSessionTranscriptMirrorWriteLock({
|
|
256
|
-
...transcriptTarget,
|
|
257
|
-
config: params.config
|
|
258
|
-
}, async (transcript) => {
|
|
259
|
-
assertWritable();
|
|
260
|
-
const nextAppendedUpdates = [];
|
|
261
|
-
const nextAssistantMirrorIdentitiesOwned = /* @__PURE__ */ new Set();
|
|
262
|
-
const nextAnchorsByMirrorIdentity = /* @__PURE__ */ new Map();
|
|
263
|
-
const nextMessagesPresent = [];
|
|
264
|
-
const nextUserMessageReceipts = [];
|
|
265
|
-
const mirrorFacts = await transcript.readMessageFacts({ idempotencyKeys: candidateIdempotencyKeys });
|
|
266
|
-
assertWritable();
|
|
267
|
-
const taint = { tainted: false };
|
|
268
|
-
for (const { dedupeIdentity, idempotencyKey, message, sourceFingerprint } of candidates) {
|
|
269
|
-
const sourceMessage = applyCodexTranscriptTaint(message, taint);
|
|
270
|
-
const mirrorIdentity = readMirrorIdentity(message);
|
|
271
|
-
const ownsRun = Boolean(params.runId && (!params.runMirrorIdentityPrefix || mirrorIdentity?.startsWith(params.runMirrorIdentityPrefix)));
|
|
272
|
-
const terminalOwner = params.terminalAssistantOwner;
|
|
273
|
-
const ownsTerminal = Boolean(ownsRun && terminalOwner && mirrorIdentity === terminalOwner.mirrorIdentity);
|
|
274
|
-
const ownedMessage = ownsRun && params.runId ? attachCodexMirrorRunId(sourceMessage, params.runId, ownsTerminal, terminalOwner?.settlementWarning) : sourceMessage;
|
|
275
|
-
const transcriptMessage = {
|
|
276
|
-
...attachCodexMirrorAttestation(ownedMessage, sourceFingerprint),
|
|
277
|
-
...idempotencyKey ? { idempotencyKey } : {}
|
|
278
|
-
};
|
|
279
|
-
if (idempotencyKey && mirrorFacts.existingIdempotencyKeys.has(idempotencyKey)) {
|
|
280
|
-
const persistedMessage = mirrorFacts.messagesByIdempotencyKey.get(idempotencyKey);
|
|
281
|
-
const persistedAnchor = mirrorFacts.anchorsByIdempotencyKey.get(idempotencyKey);
|
|
282
|
-
if (persistedMessage && isMirroredAgentMessage(persistedMessage)) {
|
|
283
|
-
nextMessagesPresent.push(persistedMessage);
|
|
284
|
-
if (persistedMessage.role === "user" && persistedAnchor) nextUserMessageReceipts.push({
|
|
285
|
-
anchor: persistedAnchor,
|
|
286
|
-
appended: false,
|
|
287
|
-
message: persistedMessage
|
|
288
|
-
});
|
|
289
|
-
}
|
|
290
|
-
if (persistedAnchor) nextAnchorsByMirrorIdentity.set(dedupeIdentity, persistedAnchor);
|
|
291
|
-
if (message.role === "assistant") nextAssistantMirrorIdentitiesOwned.add(dedupeIdentity);
|
|
292
|
-
continue;
|
|
293
|
-
}
|
|
294
|
-
assertWritable();
|
|
295
|
-
const preparedUserMessage = transcriptMessage.role === "user" ? {
|
|
296
|
-
...transcriptMessage,
|
|
297
|
-
__openclaw: { ...Reflect.get(transcriptMessage, "__openclaw") }
|
|
298
|
-
} : void 0;
|
|
299
|
-
if (preparedUserMessage?.["__openclaw"].humanMentions !== void 0) {
|
|
300
|
-
preparedUserMessage.content = structuredClone(preparedUserMessage.content);
|
|
301
|
-
preparedUserMessage["__openclaw"].humanMentions = structuredClone(preparedUserMessage["__openclaw"].humanMentions);
|
|
302
|
-
}
|
|
303
|
-
const asyncSourceText = message.role === "assistant" && message.openclawAsyncDelivery ? readMirroredAssistantText(message) : void 0;
|
|
304
|
-
const nextMessage = runAgentHarnessBeforeMessageWriteHook({
|
|
305
|
-
message: transcriptMessage,
|
|
306
|
-
agentId: params.agentId,
|
|
307
|
-
sessionKey: params.sessionKey,
|
|
308
|
-
skipBeforeMessageWriteHooks: params.skipBeforeMessageWriteHooks,
|
|
309
|
-
prepareAssistantTranscriptMessage: ownsTerminal ? params.prepareAssistantTranscriptMessage : void 0
|
|
310
|
-
});
|
|
311
|
-
if (!nextMessage) {
|
|
312
|
-
if (message.role === "assistant") nextAssistantMirrorIdentitiesOwned.add(dedupeIdentity);
|
|
313
|
-
continue;
|
|
314
|
-
}
|
|
315
|
-
const restoredMessage = restorePreparedUserTurnOperationalMetaForRuntime({
|
|
316
|
-
runtimeMessage: nextMessage,
|
|
317
|
-
preparedMessage: preparedUserMessage
|
|
318
|
-
});
|
|
319
|
-
let messageToAppend = idempotencyKey ? {
|
|
320
|
-
...attachCodexMirrorAttestation(restoredMessage, sourceFingerprint),
|
|
321
|
-
idempotencyKey
|
|
322
|
-
} : attachCodexMirrorAttestation(restoredMessage, sourceFingerprint);
|
|
323
|
-
if (mirrorIdentity) messageToAppend = attachCodexMirrorIdentity(messageToAppend, mirrorIdentity);
|
|
324
|
-
if (ownsRun && params.runId) messageToAppend = attachCodexMirrorRunId(messageToAppend, params.runId, ownsTerminal, terminalOwner?.settlementWarning);
|
|
325
|
-
if (message.role === "assistant" && message.openclawAsyncDelivery) {
|
|
326
|
-
const questions = isMirroredAgentMessage(messageToAppend) && readMirroredAssistantText(messageToAppend) === asyncSourceText ? readCodexAsyncQuestions(messageToAppend.openclawAsyncDelivery?.questions) : void 0;
|
|
327
|
-
messageToAppend = Object.assign(messageToAppend, { openclawAsyncDelivery: {
|
|
328
|
-
itemId: message.openclawAsyncDelivery.itemId,
|
|
329
|
-
...questions ? { questions } : {}
|
|
330
|
-
} });
|
|
331
|
-
}
|
|
332
|
-
messageToAppend = applyCodexTranscriptTaint(messageToAppend, taint);
|
|
333
|
-
messageToAppend = projectAgentHarnessTranscriptMessageForDisplay({
|
|
334
|
-
hidden: message.display === false,
|
|
335
|
-
message: messageToAppend
|
|
336
|
-
});
|
|
337
|
-
assertWritable();
|
|
338
|
-
const { messageSeq, result: appended } = await transcript.appendMessageWithMessageSequence({
|
|
339
|
-
message: messageToAppend,
|
|
340
|
-
...params.assertCurrent || params.assertWriteCurrent ? { prepareMessageAfterIdempotencyCheck: (preparedMessage) => {
|
|
341
|
-
assertWritable();
|
|
342
|
-
return preparedMessage;
|
|
343
|
-
} } : {},
|
|
344
|
-
idempotencyLookup: "scan",
|
|
345
|
-
cwd: params.cwd
|
|
346
|
-
});
|
|
347
|
-
params.assertCurrent?.();
|
|
348
|
-
if (!appended) continue;
|
|
349
|
-
const { messageId, message: appendedMessage } = appended;
|
|
350
|
-
if (isMirroredAgentMessage(appendedMessage)) {
|
|
351
|
-
nextMessagesPresent.push(appendedMessage);
|
|
352
|
-
if (idempotencyKey) mirrorFacts.messagesByIdempotencyKey.set(idempotencyKey, appendedMessage);
|
|
353
|
-
}
|
|
354
|
-
if (message.role === "assistant") nextAssistantMirrorIdentitiesOwned.add(dedupeIdentity);
|
|
355
|
-
if (appended.anchor) nextAnchorsByMirrorIdentity.set(dedupeIdentity, appended.anchor);
|
|
356
|
-
if (appendedMessage.role === "user" && appended.anchor) nextUserMessageReceipts.push({
|
|
357
|
-
anchor: appended.anchor,
|
|
358
|
-
appended: appended.appended,
|
|
359
|
-
message: appendedMessage
|
|
360
|
-
});
|
|
361
|
-
if (appended.appended) nextAppendedUpdates.push({
|
|
362
|
-
messageId,
|
|
363
|
-
message: appendedMessage,
|
|
364
|
-
...messageSeq !== void 0 ? { messageSeq } : {}
|
|
365
|
-
});
|
|
366
|
-
if (idempotencyKey) {
|
|
367
|
-
mirrorFacts.existingIdempotencyKeys.add(idempotencyKey);
|
|
368
|
-
if (appended.anchor) mirrorFacts.anchorsByIdempotencyKey.set(idempotencyKey, appended.anchor);
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
return {
|
|
372
|
-
appendedUpdates: nextAppendedUpdates,
|
|
373
|
-
assistantMirrorIdentitiesOwned: [...nextAssistantMirrorIdentitiesOwned],
|
|
374
|
-
anchorsByMirrorIdentity: nextAnchorsByMirrorIdentity,
|
|
375
|
-
messagesPresent: nextMessagesPresent,
|
|
376
|
-
userMessageReceipts: nextUserMessageReceipts
|
|
377
|
-
};
|
|
378
|
-
});
|
|
379
|
-
params.assertCurrent?.();
|
|
380
|
-
const { appendedUpdates, ...result } = mirrorBatch;
|
|
381
|
-
for (const update of appendedUpdates) try {
|
|
382
|
-
const terminalOwner = params.terminalAssistantOwner;
|
|
383
|
-
const terminalRunId = update.message.role === "assistant" && terminalOwner && readMirrorIdentity(update.message) === terminalOwner.mirrorIdentity ? terminalOwner.runId : void 0;
|
|
384
|
-
await publishSessionTranscriptUpdateByIdentity({
|
|
385
|
-
...transcriptTarget,
|
|
386
|
-
update: {
|
|
387
|
-
...params.agentId ? { agentId: params.agentId } : {},
|
|
388
|
-
message: update.message,
|
|
389
|
-
messageId: update.messageId,
|
|
390
|
-
...update.messageSeq !== void 0 ? { messageSeq: update.messageSeq } : {},
|
|
391
|
-
...terminalRunId ? { runId: terminalRunId } : {},
|
|
392
|
-
sessionKey: transcriptTarget.sessionKey
|
|
393
|
-
}
|
|
394
|
-
});
|
|
395
|
-
} catch (error) {
|
|
396
|
-
embeddedAgentLog.warn("failed to publish codex app-server transcript update", { error: formatErrorMessage(error) });
|
|
397
|
-
}
|
|
398
|
-
return result;
|
|
399
|
-
}
|
|
400
429
|
async function deliverAsyncMessageBestEffort(params) {
|
|
401
430
|
const mirrorIdentity = `${params.turnId}:async:${params.itemId}`;
|
|
402
431
|
const deliveryIntentId = `block-reply:v1:codex-app-server:${[
|
|
@@ -417,7 +446,9 @@ async function deliverAsyncMessageBestEffort(params) {
|
|
|
417
446
|
cwd: params.cwd,
|
|
418
447
|
config: params.params.config,
|
|
419
448
|
messages: [attachCodexMirrorIdentity(params.message, mirrorIdentity)],
|
|
420
|
-
idempotencyScope: `codex-app-server:${params.threadId}
|
|
449
|
+
idempotencyScope: `codex-app-server:${params.threadId}`,
|
|
450
|
+
runId: params.params.runId,
|
|
451
|
+
runMirrorIdentityPrefix: `${params.turnId}:`
|
|
421
452
|
});
|
|
422
453
|
} catch (error) {
|
|
423
454
|
embeddedAgentLog.warn("failed to persist codex async agent message", {
|
|
@@ -457,16 +488,5 @@ const codexTranscriptMirrorRuntime = {
|
|
|
457
488
|
async function deliverAsyncBlockReply(onBlockReply, text, deliveryIntentId) {
|
|
458
489
|
await deliverAgentHarnessUserInputPrompt({ onBlockReply: (payload) => onBlockReply(payload, { deliveryIntentId }) }, [], { intro: text });
|
|
459
490
|
}
|
|
460
|
-
function resolveCodexMirrorTranscriptTarget(params) {
|
|
461
|
-
const sessionKey = params.sessionKey?.trim();
|
|
462
|
-
const storePath = params.storePath?.trim();
|
|
463
|
-
if (!sessionKey || !storePath) throw new Error("Codex transcript mirror requires a runtime session identity");
|
|
464
|
-
return {
|
|
465
|
-
...params.agentId ? { agentId: params.agentId } : {},
|
|
466
|
-
sessionId: params.sessionId,
|
|
467
|
-
sessionKey,
|
|
468
|
-
storePath
|
|
469
|
-
};
|
|
470
|
-
}
|
|
471
491
|
//#endregion
|
|
472
492
|
export { transcript_mirror_exports as a, promptSnapshot as c, mirrorPromptAtTurnStartBestEffort as i, createCodexAppServerUserMessagePersistenceNotifier as n, buildCodexUserPromptMessage as o, importCodexThreadHistoryToTranscript as r, buildResolvedCodexUserPromptMessage as s, codexTranscriptMirrorRuntime as t };
|