@openclaw/codex 2026.9.4 → 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/assets/activity.svg +30 -0
- package/assets/icon.png +0 -0
- package/dist/.setup/account-usage-runtime-Eem_WGqY.mjs +75 -0
- package/dist/{apply-CvT8tW5i.js → .setup/apply-DDOi8uNx.mjs} +24 -30
- package/dist/.setup/async-questions-DdhOCwGi.mjs +27 -0
- package/dist/{attempt-client-cleanup-DKHzbwt5.js → .setup/attempt-client-cleanup-CEv1cKwF.mjs} +79 -49
- package/dist/.setup/attempt-terminal-gZrxQ35N.mjs +5 -0
- package/dist/.setup/attempt-workspace-context-DUVEn_CS.mjs +331 -0
- package/dist/{auth-binding-CWlKVccJ.js → .setup/auth-binding-DhLWa_7K.mjs} +1 -1
- package/dist/{auth-cache-key-7orQae_j.js → .setup/auth-cache-key-B2mpaI9D.mjs} +9 -81
- package/dist/{auth-profile-CwzO4_RG.js → .setup/auth-profile-WqZtZfXN.mjs} +1 -1
- 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-ThoatDcb.mjs +50 -0
- package/dist/.setup/binding-connection.runtime-yoHrABt-.mjs +48 -0
- package/dist/{bounded-turn-C_Hneydj.js → .setup/bounded-turn-B2HScEgT.mjs} +143 -32
- package/dist/{build-state-BCmg9-5p.js → .setup/build-state-C7EnDVgr.mjs} +1 -1
- package/dist/{capabilities-8vx68WLH.js → .setup/capabilities-CDXOOFdZ.mjs} +1 -1
- package/dist/{client-B57KWPQx.js → .setup/client-Cs08OXVQ.mjs} +705 -512
- package/dist/.setup/client-catalog-response-BMgt_4q4.mjs +285 -0
- package/dist/{command-dispatch-BpduNGVf.js → .setup/command-dispatch-B4JuOsOk.mjs} +8 -4
- package/dist/{command-formatters-lxlkNZgU.js → .setup/command-formatters-Bmqvr9tO.mjs} +8 -4
- package/dist/{command-handlers-tiL9iWj7.js → .setup/command-handlers-DW7Lx9oH.mjs} +137 -186
- package/dist/{command-rpc-CR5EOEZX.js → .setup/command-rpc-DixIj3HW.mjs} +47 -23
- package/dist/{compact-B_H3AOd7.js → .setup/compact-Du5UvtxA.mjs} +29 -51
- package/dist/{config-oIORaQ5T.js → .setup/config-BoTP_mrL.mjs} +5 -4
- package/dist/{config-options-CXMq1T-C.js → .setup/config-options-BvaRs51b.mjs} +50 -446
- package/dist/{protocol-5bh1G-H7.js → .setup/config-parsing-CcB9iPoq.mjs} +9 -51
- package/dist/{config-runtime-D0zGNIHu.js → .setup/config-runtime-C8Rw1m1m.mjs} +2 -2
- package/dist/.setup/config-security-BEReZ6go.mjs +380 -0
- package/dist/{conversation-binding-DsB4-O7U.js → .setup/conversation-binding-DP-gMrBP.mjs} +29 -38
- package/dist/{conversation-binding-data-BiodpIzq.js → .setup/conversation-binding-data-CrcyZk6O.mjs} +1 -1
- package/dist/{conversation-control-CtUu1b3m.js → .setup/conversation-control-uK9Jomlc.mjs} +32 -67
- package/dist/.setup/cyber-failover-DYwbmf1o.mjs +123 -0
- package/dist/.setup/cyber-failover-notice-e9G3J9-e.mjs +17 -0
- package/dist/{dynamic-tools-CmN5RAip.js → .setup/dynamic-tools-BDXl-8Cw.mjs} +936 -620
- package/dist/{effective-mcp-catalog-Bd73bqA8.js → .setup/effective-mcp-catalog-CvnvnGIe.mjs} +3 -3
- package/dist/{ephemeral-turn-D78_VmzO.js → .setup/ephemeral-turn-poidXgek.mjs} +9 -7
- package/dist/{event-projector-assistant-message-BmBM4qBV.js → .setup/event-projector-assistant-message-BsruvNrH.mjs} +8 -7
- package/dist/{event-projector-items-5VhsECCO.js → .setup/event-projector-items-C6L_5ZiT.mjs} +42 -8
- package/dist/{attempt-notifications-C9XufG6l.js → .setup/event-projector-usage-CnBS8Wa3.mjs} +102 -9
- package/dist/{harness-C7rRa7bm.js → .setup/harness-a_MsE4-_.mjs} +81 -21
- package/dist/{inference-context-Dr_mzvk4.js → .setup/inference-context-D96l9-ew.mjs} +1 -1
- package/dist/.setup/inference-proxy-b-aJMSxm.mjs +601 -0
- package/dist/{isolated-completion-DWVb5U2J.js → .setup/isolated-completion-BIZFhTNG.mjs} +18 -11
- package/dist/.setup/launch-args-DbFCehO7.mjs +196 -0
- package/dist/{managed-binary-D22rNEcR.js → .setup/managed-binary-BnshlFag.mjs} +14 -3
- package/dist/{managed-thread-store-D1t5jh3G.js → .setup/managed-thread-store-BMqgThVL.mjs} +48 -14
- package/dist/{model-catalog-Dq2n8f_p.js → .setup/model-catalog-CfXJf9Ay.mjs} +36 -12
- package/dist/{models-PCKOim-h.js → .setup/models-KnqBv0hE.mjs} +3 -3
- package/dist/.setup/native-auth-rWbGbMn3.mjs +57 -0
- package/dist/{native-subagent-history-DjtPloaU.js → .setup/native-subagent-history-0nYYgo0k.mjs} +43 -35
- package/dist/.setup/native-subagent-monitor-D3filLY2.mjs +4859 -0
- package/dist/{native-subagent-task-ids-BzTdT0Uw.js → .setup/native-subagent-task-ids-wb8CKZGN.mjs} +98 -44
- package/dist/{node-cli-sessions-DKaOmVUh.js → .setup/node-cli-sessions-r3avj02l.mjs} +86 -68
- package/dist/.setup/node-exec-server.runtime-BDwWXVpK.mjs +247 -0
- package/dist/{plan-7uG-Fp36.js → .setup/plan-CN3VwfNU.mjs} +133 -119
- package/dist/{plugin-activation-BYQculil.js → .setup/plugin-activation-DT3MNtqj.mjs} +7 -16
- package/dist/{plugin-app-cache-key-d0eKxy7b.js → .setup/plugin-app-cache-key-B2CsSdnV.mjs} +32 -44
- package/dist/{plugin-approval-roundtrip-Bz3FT8W5.js → .setup/plugin-approval-roundtrip-C0MZzCuP.mjs} +1 -1
- package/dist/{plugin-inventory-oL4Na1ZG.js → .setup/plugin-inventory-BoRei8Z4.mjs} +21 -11
- package/dist/{plugin-marketplace-discovery-P-Vndfqq.js → .setup/plugin-marketplace-discovery-CDOi8IFs.mjs} +4 -1
- package/dist/{plugin-metadata-cache-ClPJpRio.js → .setup/plugin-metadata-cache-Ctmo83k_.mjs} +226 -141
- package/dist/.setup/protocol-CANUwXJ3.mjs +17 -0
- package/dist/{provider-MQ8PVkuE.js → .setup/provider-BOsxQHOM.mjs} +9 -5
- package/dist/{provider-capabilities-BvCUL69A.js → .setup/provider-capabilities-BfE88FZ5.mjs} +31 -3
- package/dist/{rate-limits-CBMmWBr9.js → .setup/rate-limits-CMU3DUD0.mjs} +174 -151
- package/dist/{request-B7hEkBGq.js → .setup/request-D2L0zMrq.mjs} +130 -42
- package/dist/{run-attempt-CvsAAGa0.js → .setup/run-attempt-BHu11r7h.mjs} +1628 -966
- package/dist/.setup/run-attempt-lifecycle-B7JbY4-F.mjs +71 -0
- package/dist/{runtime-artifact-BJ0rXBZ_.js → .setup/runtime-artifact-CLZ8udh-.mjs} +29 -45
- package/dist/{sandbox-guard-BxgyoM8M.js → .setup/sandbox-guard-C2sRMOEY.mjs} +3 -3
- package/dist/{session-binding-CI8UuilT.js → .setup/session-binding-Cm0apEbd.mjs} +36 -83
- package/dist/{session-binding-record-Bcvslnhf.js → .setup/session-binding-record-BGoz8wOK.mjs} +202 -5
- package/dist/.setup/session-binding-sidecars-BlB5EvIS.mjs +546 -0
- package/dist/.setup/session-catalog-Pno1xGcl.mjs +2764 -0
- package/dist/{session-catalog-adoption-tcZi1IfX.js → .setup/session-catalog-adoption-BI6UTDZT.mjs} +58 -26
- package/dist/{session-catalog-archive-CwKg8Xz2.js → .setup/session-catalog-archive-lHBqzhaO.mjs} +6 -6
- package/dist/.setup/session-catalog-events-Bj6j94E_.mjs +347 -0
- package/dist/.setup/session-catalog-index-B9_VQIUz.mjs +1170 -0
- package/dist/.setup/session-catalog-index-order-hcdz07yN.mjs +48 -0
- package/dist/.setup/session-catalog-index-state-Dgh8ORJm.mjs +183 -0
- package/dist/{thread-history-page-D0JIp48V.js → .setup/session-catalog-native-projection-DowriLid.mjs} +223 -95
- package/dist/{session-catalog-node-adoption-B1tgDW-m.js → .setup/session-catalog-node-adoption-ITddWx_X.mjs} +25 -13
- package/dist/{session-catalog-node-continue-Ci-DXyJP.js → .setup/session-catalog-node-continue-6g6qi4A9.mjs} +24 -15
- package/dist/.setup/session-catalog-projection-zK_PUsiE.mjs +422 -0
- package/dist/{session-cli-DNN_jhGc.js → .setup/session-cli-irrD-uo7.mjs} +3 -3
- package/dist/{session-history-Cz-tOOYj.js → .setup/session-history-BrqhSCf9.mjs} +19 -19
- package/dist/{session-history-import-DwyijFI6.js → .setup/session-history-import-D-3wAgOP.mjs} +4 -4
- package/dist/{session-history-read-cxPUxyVV.js → .setup/session-history-read-B3ZfSUbF.mjs} +2 -2
- package/dist/{session-history.worker-BeK1YOyT.js → .setup/session-history.worker-CaCh0xF_.mjs} +10 -24
- package/dist/{session-initialization-Ct0_Hzmg.js → .setup/session-initialization-rcgbZiid.mjs} +2 -2
- package/dist/{session-permission-policy-BBmXA8Eg.js → .setup/session-permission-policy-BI1QK_98.mjs} +2 -2
- package/dist/{session-retirement-B2YfbAAT.js → .setup/session-retirement-BH-S6qkJ.mjs} +26 -7
- package/dist/{settled-turn-context-Du6gdUDd.js → .setup/settled-turn-context-fmwouT5I.mjs} +2 -2
- package/dist/{settled-turn-finalizer-Dn91stmc.js → .setup/settled-turn-finalizer-DiAi6Kx6.mjs} +12 -12
- package/dist/{shared-client-CscigXXL.js → .setup/shared-client-DA4VR4Eb.mjs} +332 -221
- package/dist/{side-question-BGMJQf4U.js → .setup/side-question-BJ1wSDcB.mjs} +183 -230
- package/dist/{source-CElXU0Oy.js → .setup/source-CUzJq5WN.mjs} +11 -10
- package/dist/.setup/spawn-error-CL3n6MAa.mjs +57 -0
- package/dist/{thread-archive-guard-DfpBr-Sz.js → .setup/thread-archive-guard-C9frICzX.mjs} +10 -3
- package/dist/.setup/thread-history-page-DoVpnHim.mjs +83 -0
- package/dist/{thread-lifecycle-DXl1-I6b.js → .setup/thread-lifecycle-B3mfz1TG.mjs} +347 -2318
- package/dist/{thread-ownership-BsDRTsyp.js → .setup/thread-ownership-DcTtAcXj.mjs} +6 -4
- package/dist/{thread-policy-BuEQfE0g.js → .setup/thread-policy-DGuQsuFC.mjs} +19 -3
- package/dist/.setup/thread-requests-BLvGkP2R.mjs +2205 -0
- package/dist/{thread-resume-DsDOZpFg.js → .setup/thread-resume-DIBXwOpE.mjs} +8 -5
- package/dist/.setup/timeout-C910MdAB.mjs +80 -0
- package/dist/{transcript-history-projection-v17wXgdK.js → .setup/transcript-history-projection-ZZpkFkJ_.mjs} +96 -61
- package/dist/{transcript-mirror-C5CKgNy6.js → .setup/transcript-mirror-BtHDBp1G.mjs} +224 -195
- package/dist/{transcript-mirror-attestation-DibE0krH.js → .setup/transcript-mirror-attestation-CzM-94NC.mjs} +4 -1
- package/dist/{transport-stdio-BGjHoYLr.js → .setup/transport-stdio-h2VHOskC.mjs} +274 -89
- package/dist/{upstream-session-fork-BZerMte_.js → .setup/upstream-session-fork-BUr4OUbC.mjs} +51 -42
- package/dist/{usage-tCk-mg_x.js → .setup/usage-BML0r-ua.mjs} +5 -4
- package/dist/.setup/usage-limit-error-DUMbefVY.mjs +166 -0
- package/dist/{web-search-provider.runtime-B7bGbGWq.js → .setup/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 +8 -528
- package/dist/harness.js +1 -1
- package/dist/index.js +306 -215
- package/dist/media-understanding-provider.js +3 -3
- package/dist/migration-provider-api.js +1 -1
- package/dist/native-tool-policy.js +12 -0
- package/dist/provider-discovery.js +18 -0
- package/dist/session-history-worker-runtime.js +36 -35
- package/dist/session-history.worker.js +2 -2
- package/dist/web-search-contract-api.js +1 -1
- package/openclaw.plugin.json +354 -69
- package/package.json +14 -8
- package/dist/attempt-context-D44yeDII.js +0 -636
- package/dist/binding-connection-D3udKbIE.js +0 -60
- package/dist/event-projector-usage-BfXmpOec.js +0 -102
- package/dist/inference-proxy-HGXKUIre.js +0 -311
- package/dist/launch-args-RXQwn8zV.js +0 -90
- package/dist/native-subagent-history-owner-Pcp7JuVF.js +0 -34
- package/dist/native-subagent-monitor-fQ7eIXEf.js +0 -2978
- package/dist/node-exec-server.runtime-Cl2vapEi.js +0 -226
- package/dist/rpc-error-ttN_QjEm.js +0 -30
- package/dist/session-catalog-ct-AH01I.js +0 -1477
- package/dist/session-catalog-home-id-CwhLdC03.js +0 -18
- package/dist/session-catalog-provenance-D-dIfRAH.js +0 -96
- package/dist/timeout-BVw8aaM1.js +0 -33
- package/dist/version-omm6IPI3.js +0 -12
- /package/dist/{auth-profile-selection-DFu9e167.js → .setup/auth-profile-selection-DFu9e167.mjs} +0 -0
- /package/dist/{config-utils-DujwEnhg.js → .setup/config-utils-DujwEnhg.mjs} +0 -0
- /package/dist/{context-compaction-activity-CMla5FPJ.js → .setup/context-compaction-activity-CMla5FPJ.mjs} +0 -0
- /package/dist/{elicitation-input-DPoK8F7w.js → .setup/elicitation-input-DPoK8F7w.mjs} +0 -0
- /package/dist/{history-rejection-B4nOXNXF.js → .setup/history-rejection-B4nOXNXF.mjs} +0 -0
- /package/dist/{image-payload-sanitizer-tupAr-2o.js → .setup/image-payload-sanitizer-tupAr-2o.mjs} +0 -0
- /package/dist/{incognito-session-uhrBF6wJ.js → .setup/incognito-session-uhrBF6wJ.mjs} +0 -0
- /package/dist/{local-runtime-attribution-B_2mnqhb.js → .setup/local-runtime-attribution-B_2mnqhb.mjs} +0 -0
- /package/dist/{native-execution-policy-umd0tgh4.js → .setup/native-execution-policy-umd0tgh4.mjs} +0 -0
- /package/dist/{rolldown-runtime-8H4AJuhK.js → .setup/rolldown-runtime-8H4AJuhK.mjs} +0 -0
- /package/dist/{session-binding-meta-B7aEMU7g.js → .setup/session-binding-meta-B7aEMU7g.mjs} +0 -0
- /package/dist/{session-upstream-marker-D15C9NHp.js → .setup/session-upstream-marker-D15C9NHp.mjs} +0 -0
- /package/dist/{upstream-prompt-provenance-LphB8slG.js → .setup/upstream-prompt-provenance-LphB8slG.mjs} +0 -0
- /package/dist/{web-search-provider.shared-BrZmlqyR.js → .setup/web-search-provider.shared-BrZmlqyR.mjs} +0 -0
|
@@ -1,11 +1,200 @@
|
|
|
1
|
-
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.
|
|
2
|
-
import {
|
|
3
|
-
import { t as
|
|
4
|
-
import {
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.mjs";
|
|
2
|
+
import { t as readCodexAsyncQuestions } from "./async-questions-DdhOCwGi.mjs";
|
|
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-ZZpkFkJ_.mjs";
|
|
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";
|
|
5
6
|
import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
6
7
|
import { deliverAgentHarnessUserInputPrompt, embeddedAgentLog, formatErrorMessage, projectAgentHarnessTranscriptMessageForDisplay, restorePreparedUserTurnOperationalMetaForRuntime, runAgentHarnessBeforeMessageWriteHook } from "openclaw/plugin-sdk/agent-harness-runtime";
|
|
7
8
|
import { withCodexSessionTranscriptMirrorWriteLock } from "openclaw/plugin-sdk/codex-session-transcript-runtime";
|
|
8
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
|
|
9
198
|
//#region extensions/codex/src/app-server/user-prompt-message.ts
|
|
10
199
|
function buildSenderLabel(params) {
|
|
11
200
|
const label = params.senderName ?? params.senderUsername ?? params.senderE164 ?? params.senderId;
|
|
@@ -71,9 +260,6 @@ var transcript_mirror_exports = /* @__PURE__ */ __exportAll({
|
|
|
71
260
|
mirrorPromptAtTurnStartBestEffort: () => mirrorPromptAtTurnStartBestEffort,
|
|
72
261
|
projectBoundedCodexThreadHistory: () => projectBoundedCodexThreadHistory
|
|
73
262
|
});
|
|
74
|
-
function readMirroredAssistantText(message) {
|
|
75
|
-
return message?.role === "assistant" ? message.content.flatMap((part) => part.type === "text" ? [part.text] : []).join("\n") || void 0 : void 0;
|
|
76
|
-
}
|
|
77
263
|
/** Imports a bounded, user-visible Codex history tail into a new OpenClaw transcript. */
|
|
78
264
|
async function importCodexThreadHistoryToTranscript(params) {
|
|
79
265
|
const { transcriptMessages, importedMessages, omittedMessages } = projectBoundedCodexThreadHistory({
|
|
@@ -109,6 +295,9 @@ async function mirrorBestEffort(params) {
|
|
|
109
295
|
messagesSnapshot: params.result.messagesSnapshot,
|
|
110
296
|
turnId: params.turnId
|
|
111
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;
|
|
112
301
|
params.assertWriteCurrent?.();
|
|
113
302
|
const mirrorResult = await mirror({
|
|
114
303
|
assertWriteCurrent: params.assertWriteCurrent,
|
|
@@ -117,7 +306,7 @@ async function mirrorBestEffort(params) {
|
|
|
117
306
|
sessionId: params.params.sessionId,
|
|
118
307
|
storePath: params.params.sessionTarget?.storePath,
|
|
119
308
|
cwd: params.cwd,
|
|
120
|
-
messages,
|
|
309
|
+
messages: admittedPromptIdentity ? messages.filter((message) => readMirrorIdentity(message) !== admittedPromptIdentity) : messages,
|
|
121
310
|
idempotencyScope: `codex-app-server:${params.threadId}`,
|
|
122
311
|
runId: params.params.runId,
|
|
123
312
|
runMirrorIdentityPrefix: `${params.turnId}:`,
|
|
@@ -139,9 +328,10 @@ async function mirrorBestEffort(params) {
|
|
|
139
328
|
const identity = readMirrorIdentity(message);
|
|
140
329
|
return identity ? [[identity, fingerprintCodexMirrorSourceMessage(message)]] : [];
|
|
141
330
|
}));
|
|
142
|
-
const mirroredMessages = mirrorResult.messagesPresent.filter((message) => {
|
|
331
|
+
const mirroredMessages = [...admittedPrompt ? [admittedPrompt] : [], ...mirrorResult.messagesPresent].filter((message) => {
|
|
143
332
|
const identity = readMirrorIdentity(message);
|
|
144
|
-
|
|
333
|
+
const expectedFingerprint = identity ? expectedFingerprints.get(identity) : void 0;
|
|
334
|
+
return expectedFingerprint !== void 0 && readCodexMirrorSourceFingerprint(message) === expectedFingerprint;
|
|
145
335
|
});
|
|
146
336
|
const assistantMirrorIdentity = `${params.turnId}:assistant`;
|
|
147
337
|
const assistantTranscriptMessage = mirroredMessages.find((message) => readMirrorIdentity(message) === assistantMirrorIdentity);
|
|
@@ -187,18 +377,29 @@ async function mirrorPromptAtTurnStartBestEffort(params) {
|
|
|
187
377
|
const mirrorPromise = (async () => {
|
|
188
378
|
const userPromptMessage = projectAgentHarnessTranscriptMessageForDisplay({
|
|
189
379
|
hidden: params.params.trigger === "memory",
|
|
380
|
+
inputProvenance: params.params.inputProvenance,
|
|
190
381
|
message: attachUpstreamUserText(attachCodexMirrorIdentity(await buildResolvedCodexUserPromptMessage(params.params), `${params.turnId}:prompt`), params.upstreamUserText)
|
|
191
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
|
+
});
|
|
192
390
|
const recorder = params.params.userTurnTranscriptRecorder;
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
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;
|
|
202
403
|
}
|
|
203
404
|
const mirrorResult = await mirror({
|
|
204
405
|
assertCurrent: params.params.hostCapabilities.assertActive,
|
|
@@ -225,169 +426,6 @@ async function mirrorPromptAtTurnStartBestEffort(params) {
|
|
|
225
426
|
});
|
|
226
427
|
}
|
|
227
428
|
}
|
|
228
|
-
async function mirror(params) {
|
|
229
|
-
const messages = params.messages.filter(isMirroredAgentMessage);
|
|
230
|
-
if (messages.length === 0) return {
|
|
231
|
-
assistantMirrorIdentitiesOwned: [],
|
|
232
|
-
anchorsByMirrorIdentity: /* @__PURE__ */ new Map(),
|
|
233
|
-
messagesPresent: [],
|
|
234
|
-
userMessageReceipts: []
|
|
235
|
-
};
|
|
236
|
-
const candidates = messages.map((message) => {
|
|
237
|
-
const dedupeIdentity = buildCodexMirrorDedupeIdentity(message);
|
|
238
|
-
const sourceFingerprint = fingerprintCodexMirrorSourceMessage(message);
|
|
239
|
-
return {
|
|
240
|
-
dedupeIdentity,
|
|
241
|
-
idempotencyKey: (message.role === "user" ? normalizeOptionalString("idempotencyKey" in message ? message.idempotencyKey : void 0) : void 0) ?? (params.idempotencyScope ? `${params.idempotencyScope}:${dedupeIdentity}` : void 0),
|
|
242
|
-
message,
|
|
243
|
-
sourceFingerprint
|
|
244
|
-
};
|
|
245
|
-
});
|
|
246
|
-
const candidateIdempotencyKeys = candidates.flatMap(({ idempotencyKey }) => idempotencyKey ? [idempotencyKey] : []);
|
|
247
|
-
const transcriptTarget = resolveCodexMirrorTranscriptTarget(params);
|
|
248
|
-
const assertWritable = () => {
|
|
249
|
-
params.assertCurrent?.();
|
|
250
|
-
params.assertWriteCurrent?.();
|
|
251
|
-
};
|
|
252
|
-
assertWritable();
|
|
253
|
-
const mirrorBatch = await withCodexSessionTranscriptMirrorWriteLock({
|
|
254
|
-
...transcriptTarget,
|
|
255
|
-
config: params.config
|
|
256
|
-
}, async (transcript) => {
|
|
257
|
-
assertWritable();
|
|
258
|
-
const nextAppendedUpdates = [];
|
|
259
|
-
const nextAssistantMirrorIdentitiesOwned = /* @__PURE__ */ new Set();
|
|
260
|
-
const nextAnchorsByMirrorIdentity = /* @__PURE__ */ new Map();
|
|
261
|
-
const nextMessagesPresent = [];
|
|
262
|
-
const nextUserMessageReceipts = [];
|
|
263
|
-
const mirrorFacts = await transcript.readMessageFacts({ idempotencyKeys: candidateIdempotencyKeys });
|
|
264
|
-
assertWritable();
|
|
265
|
-
const taint = { tainted: false };
|
|
266
|
-
for (const { dedupeIdentity, idempotencyKey, message, sourceFingerprint } of candidates) {
|
|
267
|
-
const sourceMessage = applyCodexTranscriptTaint(message, taint);
|
|
268
|
-
const mirrorIdentity = readMirrorIdentity(message);
|
|
269
|
-
const ownsRun = Boolean(params.runId && (!params.runMirrorIdentityPrefix || mirrorIdentity?.startsWith(params.runMirrorIdentityPrefix)));
|
|
270
|
-
const terminalOwner = params.terminalAssistantOwner;
|
|
271
|
-
const ownsTerminal = Boolean(ownsRun && terminalOwner && mirrorIdentity === terminalOwner.mirrorIdentity);
|
|
272
|
-
const ownedMessage = ownsRun && params.runId ? attachCodexMirrorRunId(sourceMessage, params.runId, ownsTerminal, terminalOwner?.settlementWarning) : sourceMessage;
|
|
273
|
-
const transcriptMessage = {
|
|
274
|
-
...attachCodexMirrorAttestation(ownedMessage, sourceFingerprint),
|
|
275
|
-
...idempotencyKey ? { idempotencyKey } : {}
|
|
276
|
-
};
|
|
277
|
-
if (idempotencyKey && mirrorFacts.existingIdempotencyKeys.has(idempotencyKey)) {
|
|
278
|
-
const persistedMessage = mirrorFacts.messagesByIdempotencyKey.get(idempotencyKey);
|
|
279
|
-
const persistedAnchor = mirrorFacts.anchorsByIdempotencyKey.get(idempotencyKey);
|
|
280
|
-
if (persistedMessage && isMirroredAgentMessage(persistedMessage)) {
|
|
281
|
-
nextMessagesPresent.push(persistedMessage);
|
|
282
|
-
if (persistedMessage.role === "user" && persistedAnchor) nextUserMessageReceipts.push({
|
|
283
|
-
anchor: persistedAnchor,
|
|
284
|
-
appended: false,
|
|
285
|
-
message: persistedMessage
|
|
286
|
-
});
|
|
287
|
-
}
|
|
288
|
-
if (persistedAnchor) nextAnchorsByMirrorIdentity.set(dedupeIdentity, persistedAnchor);
|
|
289
|
-
if (message.role === "assistant") nextAssistantMirrorIdentitiesOwned.add(dedupeIdentity);
|
|
290
|
-
continue;
|
|
291
|
-
}
|
|
292
|
-
assertWritable();
|
|
293
|
-
const preparedUserMessage = transcriptMessage.role === "user" ? {
|
|
294
|
-
...transcriptMessage,
|
|
295
|
-
__openclaw: { ...Reflect.get(transcriptMessage, "__openclaw") }
|
|
296
|
-
} : void 0;
|
|
297
|
-
if (preparedUserMessage?.["__openclaw"].humanMentions !== void 0) {
|
|
298
|
-
preparedUserMessage.content = structuredClone(preparedUserMessage.content);
|
|
299
|
-
preparedUserMessage["__openclaw"].humanMentions = structuredClone(preparedUserMessage["__openclaw"].humanMentions);
|
|
300
|
-
}
|
|
301
|
-
const nextMessage = runAgentHarnessBeforeMessageWriteHook({
|
|
302
|
-
message: transcriptMessage,
|
|
303
|
-
agentId: params.agentId,
|
|
304
|
-
sessionKey: params.sessionKey,
|
|
305
|
-
skipBeforeMessageWriteHooks: params.skipBeforeMessageWriteHooks,
|
|
306
|
-
prepareAssistantTranscriptMessage: ownsTerminal ? params.prepareAssistantTranscriptMessage : void 0
|
|
307
|
-
});
|
|
308
|
-
if (!nextMessage) {
|
|
309
|
-
if (message.role === "assistant") nextAssistantMirrorIdentitiesOwned.add(dedupeIdentity);
|
|
310
|
-
continue;
|
|
311
|
-
}
|
|
312
|
-
const restoredMessage = restorePreparedUserTurnOperationalMetaForRuntime({
|
|
313
|
-
runtimeMessage: nextMessage,
|
|
314
|
-
preparedMessage: preparedUserMessage
|
|
315
|
-
});
|
|
316
|
-
let messageToAppend = idempotencyKey ? {
|
|
317
|
-
...attachCodexMirrorAttestation(restoredMessage, sourceFingerprint),
|
|
318
|
-
idempotencyKey
|
|
319
|
-
} : attachCodexMirrorAttestation(restoredMessage, sourceFingerprint);
|
|
320
|
-
if (mirrorIdentity) messageToAppend = attachCodexMirrorIdentity(messageToAppend, mirrorIdentity);
|
|
321
|
-
if (ownsRun && params.runId) messageToAppend = attachCodexMirrorRunId(messageToAppend, params.runId, ownsTerminal, terminalOwner?.settlementWarning);
|
|
322
|
-
if (message.role === "assistant" && message.openclawAsyncDelivery) messageToAppend = Object.assign(messageToAppend, { openclawAsyncDelivery: { itemId: message.openclawAsyncDelivery.itemId } });
|
|
323
|
-
messageToAppend = applyCodexTranscriptTaint(messageToAppend, taint);
|
|
324
|
-
messageToAppend = projectAgentHarnessTranscriptMessageForDisplay({
|
|
325
|
-
hidden: message.display === false,
|
|
326
|
-
message: messageToAppend
|
|
327
|
-
});
|
|
328
|
-
assertWritable();
|
|
329
|
-
const { messageSeq, result: appended } = await transcript.appendMessageWithMessageSequence({
|
|
330
|
-
message: messageToAppend,
|
|
331
|
-
...params.assertCurrent || params.assertWriteCurrent ? { prepareMessageAfterIdempotencyCheck: (preparedMessage) => {
|
|
332
|
-
assertWritable();
|
|
333
|
-
return preparedMessage;
|
|
334
|
-
} } : {},
|
|
335
|
-
idempotencyLookup: "scan",
|
|
336
|
-
cwd: params.cwd
|
|
337
|
-
});
|
|
338
|
-
params.assertCurrent?.();
|
|
339
|
-
if (!appended) continue;
|
|
340
|
-
const { messageId, message: appendedMessage } = appended;
|
|
341
|
-
if (isMirroredAgentMessage(appendedMessage)) {
|
|
342
|
-
nextMessagesPresent.push(appendedMessage);
|
|
343
|
-
if (idempotencyKey) mirrorFacts.messagesByIdempotencyKey.set(idempotencyKey, appendedMessage);
|
|
344
|
-
}
|
|
345
|
-
if (message.role === "assistant") nextAssistantMirrorIdentitiesOwned.add(dedupeIdentity);
|
|
346
|
-
if (appended.anchor) nextAnchorsByMirrorIdentity.set(dedupeIdentity, appended.anchor);
|
|
347
|
-
if (appendedMessage.role === "user" && appended.anchor) nextUserMessageReceipts.push({
|
|
348
|
-
anchor: appended.anchor,
|
|
349
|
-
appended: appended.appended,
|
|
350
|
-
message: appendedMessage
|
|
351
|
-
});
|
|
352
|
-
if (appended.appended) nextAppendedUpdates.push({
|
|
353
|
-
messageId,
|
|
354
|
-
message: appendedMessage,
|
|
355
|
-
...messageSeq !== void 0 ? { messageSeq } : {}
|
|
356
|
-
});
|
|
357
|
-
if (idempotencyKey) {
|
|
358
|
-
mirrorFacts.existingIdempotencyKeys.add(idempotencyKey);
|
|
359
|
-
if (appended.anchor) mirrorFacts.anchorsByIdempotencyKey.set(idempotencyKey, appended.anchor);
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
return {
|
|
363
|
-
appendedUpdates: nextAppendedUpdates,
|
|
364
|
-
assistantMirrorIdentitiesOwned: [...nextAssistantMirrorIdentitiesOwned],
|
|
365
|
-
anchorsByMirrorIdentity: nextAnchorsByMirrorIdentity,
|
|
366
|
-
messagesPresent: nextMessagesPresent,
|
|
367
|
-
userMessageReceipts: nextUserMessageReceipts
|
|
368
|
-
};
|
|
369
|
-
});
|
|
370
|
-
params.assertCurrent?.();
|
|
371
|
-
const { appendedUpdates, ...result } = mirrorBatch;
|
|
372
|
-
for (const update of appendedUpdates) try {
|
|
373
|
-
const terminalOwner = params.terminalAssistantOwner;
|
|
374
|
-
const terminalRunId = update.message.role === "assistant" && terminalOwner && readMirrorIdentity(update.message) === terminalOwner.mirrorIdentity ? terminalOwner.runId : void 0;
|
|
375
|
-
await publishSessionTranscriptUpdateByIdentity({
|
|
376
|
-
...transcriptTarget,
|
|
377
|
-
update: {
|
|
378
|
-
...params.agentId ? { agentId: params.agentId } : {},
|
|
379
|
-
message: update.message,
|
|
380
|
-
messageId: update.messageId,
|
|
381
|
-
...update.messageSeq !== void 0 ? { messageSeq: update.messageSeq } : {},
|
|
382
|
-
...terminalRunId ? { runId: terminalRunId } : {},
|
|
383
|
-
sessionKey: transcriptTarget.sessionKey
|
|
384
|
-
}
|
|
385
|
-
});
|
|
386
|
-
} catch (error) {
|
|
387
|
-
embeddedAgentLog.warn("failed to publish codex app-server transcript update", { error: formatErrorMessage(error) });
|
|
388
|
-
}
|
|
389
|
-
return result;
|
|
390
|
-
}
|
|
391
429
|
async function deliverAsyncMessageBestEffort(params) {
|
|
392
430
|
const mirrorIdentity = `${params.turnId}:async:${params.itemId}`;
|
|
393
431
|
const deliveryIntentId = `block-reply:v1:codex-app-server:${[
|
|
@@ -408,7 +446,9 @@ async function deliverAsyncMessageBestEffort(params) {
|
|
|
408
446
|
cwd: params.cwd,
|
|
409
447
|
config: params.params.config,
|
|
410
448
|
messages: [attachCodexMirrorIdentity(params.message, mirrorIdentity)],
|
|
411
|
-
idempotencyScope: `codex-app-server:${params.threadId}
|
|
449
|
+
idempotencyScope: `codex-app-server:${params.threadId}`,
|
|
450
|
+
runId: params.params.runId,
|
|
451
|
+
runMirrorIdentityPrefix: `${params.turnId}:`
|
|
412
452
|
});
|
|
413
453
|
} catch (error) {
|
|
414
454
|
embeddedAgentLog.warn("failed to persist codex async agent message", {
|
|
@@ -448,16 +488,5 @@ const codexTranscriptMirrorRuntime = {
|
|
|
448
488
|
async function deliverAsyncBlockReply(onBlockReply, text, deliveryIntentId) {
|
|
449
489
|
await deliverAgentHarnessUserInputPrompt({ onBlockReply: (payload) => onBlockReply(payload, { deliveryIntentId }) }, [], { intro: text });
|
|
450
490
|
}
|
|
451
|
-
function resolveCodexMirrorTranscriptTarget(params) {
|
|
452
|
-
const sessionKey = params.sessionKey?.trim();
|
|
453
|
-
const storePath = params.storePath?.trim();
|
|
454
|
-
if (!sessionKey || !storePath) throw new Error("Codex transcript mirror requires a runtime session identity");
|
|
455
|
-
return {
|
|
456
|
-
...params.agentId ? { agentId: params.agentId } : {},
|
|
457
|
-
sessionId: params.sessionId,
|
|
458
|
-
sessionKey,
|
|
459
|
-
storePath
|
|
460
|
-
};
|
|
461
|
-
}
|
|
462
491
|
//#endregion
|
|
463
|
-
export { transcript_mirror_exports as a, mirrorPromptAtTurnStartBestEffort as i, createCodexAppServerUserMessagePersistenceNotifier as n, buildCodexUserPromptMessage as o, importCodexThreadHistoryToTranscript as r,
|
|
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 };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { t as readCodexAsyncQuestions } from "./async-questions-DdhOCwGi.mjs";
|
|
2
|
+
import { i as readUpstreamUserText, r as readMirrorIdentity } from "./upstream-prompt-provenance-LphB8slG.mjs";
|
|
2
3
|
import { asOptionalRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
3
4
|
import { createHash } from "node:crypto";
|
|
4
5
|
//#region extensions/codex/src/app-server/transcript-mirror-attestation.ts
|
|
@@ -71,9 +72,11 @@ function readCodexMirrorSourceFingerprint(message) {
|
|
|
71
72
|
}
|
|
72
73
|
function serializeCodexMirrorSourceEvidence(message) {
|
|
73
74
|
const content = "content" in message ? message.content : void 0;
|
|
75
|
+
const questions = isMirroredAgentMessage(message) ? readCodexAsyncQuestions(message.openclawAsyncDelivery?.questions) : void 0;
|
|
74
76
|
return JSON.stringify({
|
|
75
77
|
role: message.role,
|
|
76
78
|
content,
|
|
79
|
+
...questions ? { questions } : {},
|
|
77
80
|
...message.role === "user" ? { upstreamUserText: readUpstreamUserText(message) } : {},
|
|
78
81
|
...message.role === "toolResult" ? {
|
|
79
82
|
toolCallId: message.toolCallId,
|