@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.
Files changed (160) hide show
  1. package/assets/activity.svg +30 -0
  2. package/assets/icon.png +0 -0
  3. package/dist/.setup/account-usage-runtime-Eem_WGqY.mjs +75 -0
  4. package/dist/{apply-CvT8tW5i.js → .setup/apply-DDOi8uNx.mjs} +24 -30
  5. package/dist/.setup/async-questions-DdhOCwGi.mjs +27 -0
  6. package/dist/{attempt-client-cleanup-DKHzbwt5.js → .setup/attempt-client-cleanup-CEv1cKwF.mjs} +79 -49
  7. package/dist/.setup/attempt-terminal-gZrxQ35N.mjs +5 -0
  8. package/dist/.setup/attempt-workspace-context-DUVEn_CS.mjs +331 -0
  9. package/dist/{auth-binding-CWlKVccJ.js → .setup/auth-binding-DhLWa_7K.mjs} +1 -1
  10. package/dist/{auth-cache-key-7orQae_j.js → .setup/auth-cache-key-B2mpaI9D.mjs} +9 -81
  11. package/dist/{auth-profile-CwzO4_RG.js → .setup/auth-profile-WqZtZfXN.mjs} +1 -1
  12. package/dist/.setup/auth-profile-health-oHizqgye.mjs +53 -0
  13. package/dist/.setup/auth-profile-recovery-BREezV0L.mjs +14 -0
  14. package/dist/.setup/binding-connection-ThoatDcb.mjs +50 -0
  15. package/dist/.setup/binding-connection.runtime-yoHrABt-.mjs +48 -0
  16. package/dist/{bounded-turn-C_Hneydj.js → .setup/bounded-turn-B2HScEgT.mjs} +143 -32
  17. package/dist/{build-state-BCmg9-5p.js → .setup/build-state-C7EnDVgr.mjs} +1 -1
  18. package/dist/{capabilities-8vx68WLH.js → .setup/capabilities-CDXOOFdZ.mjs} +1 -1
  19. package/dist/{client-B57KWPQx.js → .setup/client-Cs08OXVQ.mjs} +705 -512
  20. package/dist/.setup/client-catalog-response-BMgt_4q4.mjs +285 -0
  21. package/dist/{command-dispatch-BpduNGVf.js → .setup/command-dispatch-B4JuOsOk.mjs} +8 -4
  22. package/dist/{command-formatters-lxlkNZgU.js → .setup/command-formatters-Bmqvr9tO.mjs} +8 -4
  23. package/dist/{command-handlers-tiL9iWj7.js → .setup/command-handlers-DW7Lx9oH.mjs} +137 -186
  24. package/dist/{command-rpc-CR5EOEZX.js → .setup/command-rpc-DixIj3HW.mjs} +47 -23
  25. package/dist/{compact-B_H3AOd7.js → .setup/compact-Du5UvtxA.mjs} +29 -51
  26. package/dist/{config-oIORaQ5T.js → .setup/config-BoTP_mrL.mjs} +5 -4
  27. package/dist/{config-options-CXMq1T-C.js → .setup/config-options-BvaRs51b.mjs} +50 -446
  28. package/dist/{protocol-5bh1G-H7.js → .setup/config-parsing-CcB9iPoq.mjs} +9 -51
  29. package/dist/{config-runtime-D0zGNIHu.js → .setup/config-runtime-C8Rw1m1m.mjs} +2 -2
  30. package/dist/.setup/config-security-BEReZ6go.mjs +380 -0
  31. package/dist/{conversation-binding-DsB4-O7U.js → .setup/conversation-binding-DP-gMrBP.mjs} +29 -38
  32. package/dist/{conversation-binding-data-BiodpIzq.js → .setup/conversation-binding-data-CrcyZk6O.mjs} +1 -1
  33. package/dist/{conversation-control-CtUu1b3m.js → .setup/conversation-control-uK9Jomlc.mjs} +32 -67
  34. package/dist/.setup/cyber-failover-DYwbmf1o.mjs +123 -0
  35. package/dist/.setup/cyber-failover-notice-e9G3J9-e.mjs +17 -0
  36. package/dist/{dynamic-tools-CmN5RAip.js → .setup/dynamic-tools-BDXl-8Cw.mjs} +936 -620
  37. package/dist/{effective-mcp-catalog-Bd73bqA8.js → .setup/effective-mcp-catalog-CvnvnGIe.mjs} +3 -3
  38. package/dist/{ephemeral-turn-D78_VmzO.js → .setup/ephemeral-turn-poidXgek.mjs} +9 -7
  39. package/dist/{event-projector-assistant-message-BmBM4qBV.js → .setup/event-projector-assistant-message-BsruvNrH.mjs} +8 -7
  40. package/dist/{event-projector-items-5VhsECCO.js → .setup/event-projector-items-C6L_5ZiT.mjs} +42 -8
  41. package/dist/{attempt-notifications-C9XufG6l.js → .setup/event-projector-usage-CnBS8Wa3.mjs} +102 -9
  42. package/dist/{harness-C7rRa7bm.js → .setup/harness-a_MsE4-_.mjs} +81 -21
  43. package/dist/{inference-context-Dr_mzvk4.js → .setup/inference-context-D96l9-ew.mjs} +1 -1
  44. package/dist/.setup/inference-proxy-b-aJMSxm.mjs +601 -0
  45. package/dist/{isolated-completion-DWVb5U2J.js → .setup/isolated-completion-BIZFhTNG.mjs} +18 -11
  46. package/dist/.setup/launch-args-DbFCehO7.mjs +196 -0
  47. package/dist/{managed-binary-D22rNEcR.js → .setup/managed-binary-BnshlFag.mjs} +14 -3
  48. package/dist/{managed-thread-store-D1t5jh3G.js → .setup/managed-thread-store-BMqgThVL.mjs} +48 -14
  49. package/dist/{model-catalog-Dq2n8f_p.js → .setup/model-catalog-CfXJf9Ay.mjs} +36 -12
  50. package/dist/{models-PCKOim-h.js → .setup/models-KnqBv0hE.mjs} +3 -3
  51. package/dist/.setup/native-auth-rWbGbMn3.mjs +57 -0
  52. package/dist/{native-subagent-history-DjtPloaU.js → .setup/native-subagent-history-0nYYgo0k.mjs} +43 -35
  53. package/dist/.setup/native-subagent-monitor-D3filLY2.mjs +4859 -0
  54. package/dist/{native-subagent-task-ids-BzTdT0Uw.js → .setup/native-subagent-task-ids-wb8CKZGN.mjs} +98 -44
  55. package/dist/{node-cli-sessions-DKaOmVUh.js → .setup/node-cli-sessions-r3avj02l.mjs} +86 -68
  56. package/dist/.setup/node-exec-server.runtime-BDwWXVpK.mjs +247 -0
  57. package/dist/{plan-7uG-Fp36.js → .setup/plan-CN3VwfNU.mjs} +133 -119
  58. package/dist/{plugin-activation-BYQculil.js → .setup/plugin-activation-DT3MNtqj.mjs} +7 -16
  59. package/dist/{plugin-app-cache-key-d0eKxy7b.js → .setup/plugin-app-cache-key-B2CsSdnV.mjs} +32 -44
  60. package/dist/{plugin-approval-roundtrip-Bz3FT8W5.js → .setup/plugin-approval-roundtrip-C0MZzCuP.mjs} +1 -1
  61. package/dist/{plugin-inventory-oL4Na1ZG.js → .setup/plugin-inventory-BoRei8Z4.mjs} +21 -11
  62. package/dist/{plugin-marketplace-discovery-P-Vndfqq.js → .setup/plugin-marketplace-discovery-CDOi8IFs.mjs} +4 -1
  63. package/dist/{plugin-metadata-cache-ClPJpRio.js → .setup/plugin-metadata-cache-Ctmo83k_.mjs} +226 -141
  64. package/dist/.setup/protocol-CANUwXJ3.mjs +17 -0
  65. package/dist/{provider-MQ8PVkuE.js → .setup/provider-BOsxQHOM.mjs} +9 -5
  66. package/dist/{provider-capabilities-BvCUL69A.js → .setup/provider-capabilities-BfE88FZ5.mjs} +31 -3
  67. package/dist/{rate-limits-CBMmWBr9.js → .setup/rate-limits-CMU3DUD0.mjs} +174 -151
  68. package/dist/{request-B7hEkBGq.js → .setup/request-D2L0zMrq.mjs} +130 -42
  69. package/dist/{run-attempt-CvsAAGa0.js → .setup/run-attempt-BHu11r7h.mjs} +1628 -966
  70. package/dist/.setup/run-attempt-lifecycle-B7JbY4-F.mjs +71 -0
  71. package/dist/{runtime-artifact-BJ0rXBZ_.js → .setup/runtime-artifact-CLZ8udh-.mjs} +29 -45
  72. package/dist/{sandbox-guard-BxgyoM8M.js → .setup/sandbox-guard-C2sRMOEY.mjs} +3 -3
  73. package/dist/{session-binding-CI8UuilT.js → .setup/session-binding-Cm0apEbd.mjs} +36 -83
  74. package/dist/{session-binding-record-Bcvslnhf.js → .setup/session-binding-record-BGoz8wOK.mjs} +202 -5
  75. package/dist/.setup/session-binding-sidecars-BlB5EvIS.mjs +546 -0
  76. package/dist/.setup/session-catalog-Pno1xGcl.mjs +2764 -0
  77. package/dist/{session-catalog-adoption-tcZi1IfX.js → .setup/session-catalog-adoption-BI6UTDZT.mjs} +58 -26
  78. package/dist/{session-catalog-archive-CwKg8Xz2.js → .setup/session-catalog-archive-lHBqzhaO.mjs} +6 -6
  79. package/dist/.setup/session-catalog-events-Bj6j94E_.mjs +347 -0
  80. package/dist/.setup/session-catalog-index-B9_VQIUz.mjs +1170 -0
  81. package/dist/.setup/session-catalog-index-order-hcdz07yN.mjs +48 -0
  82. package/dist/.setup/session-catalog-index-state-Dgh8ORJm.mjs +183 -0
  83. package/dist/{thread-history-page-D0JIp48V.js → .setup/session-catalog-native-projection-DowriLid.mjs} +223 -95
  84. package/dist/{session-catalog-node-adoption-B1tgDW-m.js → .setup/session-catalog-node-adoption-ITddWx_X.mjs} +25 -13
  85. package/dist/{session-catalog-node-continue-Ci-DXyJP.js → .setup/session-catalog-node-continue-6g6qi4A9.mjs} +24 -15
  86. package/dist/.setup/session-catalog-projection-zK_PUsiE.mjs +422 -0
  87. package/dist/{session-cli-DNN_jhGc.js → .setup/session-cli-irrD-uo7.mjs} +3 -3
  88. package/dist/{session-history-Cz-tOOYj.js → .setup/session-history-BrqhSCf9.mjs} +19 -19
  89. package/dist/{session-history-import-DwyijFI6.js → .setup/session-history-import-D-3wAgOP.mjs} +4 -4
  90. package/dist/{session-history-read-cxPUxyVV.js → .setup/session-history-read-B3ZfSUbF.mjs} +2 -2
  91. package/dist/{session-history.worker-BeK1YOyT.js → .setup/session-history.worker-CaCh0xF_.mjs} +10 -24
  92. package/dist/{session-initialization-Ct0_Hzmg.js → .setup/session-initialization-rcgbZiid.mjs} +2 -2
  93. package/dist/{session-permission-policy-BBmXA8Eg.js → .setup/session-permission-policy-BI1QK_98.mjs} +2 -2
  94. package/dist/{session-retirement-B2YfbAAT.js → .setup/session-retirement-BH-S6qkJ.mjs} +26 -7
  95. package/dist/{settled-turn-context-Du6gdUDd.js → .setup/settled-turn-context-fmwouT5I.mjs} +2 -2
  96. package/dist/{settled-turn-finalizer-Dn91stmc.js → .setup/settled-turn-finalizer-DiAi6Kx6.mjs} +12 -12
  97. package/dist/{shared-client-CscigXXL.js → .setup/shared-client-DA4VR4Eb.mjs} +332 -221
  98. package/dist/{side-question-BGMJQf4U.js → .setup/side-question-BJ1wSDcB.mjs} +183 -230
  99. package/dist/{source-CElXU0Oy.js → .setup/source-CUzJq5WN.mjs} +11 -10
  100. package/dist/.setup/spawn-error-CL3n6MAa.mjs +57 -0
  101. package/dist/{thread-archive-guard-DfpBr-Sz.js → .setup/thread-archive-guard-C9frICzX.mjs} +10 -3
  102. package/dist/.setup/thread-history-page-DoVpnHim.mjs +83 -0
  103. package/dist/{thread-lifecycle-DXl1-I6b.js → .setup/thread-lifecycle-B3mfz1TG.mjs} +347 -2318
  104. package/dist/{thread-ownership-BsDRTsyp.js → .setup/thread-ownership-DcTtAcXj.mjs} +6 -4
  105. package/dist/{thread-policy-BuEQfE0g.js → .setup/thread-policy-DGuQsuFC.mjs} +19 -3
  106. package/dist/.setup/thread-requests-BLvGkP2R.mjs +2205 -0
  107. package/dist/{thread-resume-DsDOZpFg.js → .setup/thread-resume-DIBXwOpE.mjs} +8 -5
  108. package/dist/.setup/timeout-C910MdAB.mjs +80 -0
  109. package/dist/{transcript-history-projection-v17wXgdK.js → .setup/transcript-history-projection-ZZpkFkJ_.mjs} +96 -61
  110. package/dist/{transcript-mirror-C5CKgNy6.js → .setup/transcript-mirror-BtHDBp1G.mjs} +224 -195
  111. package/dist/{transcript-mirror-attestation-DibE0krH.js → .setup/transcript-mirror-attestation-CzM-94NC.mjs} +4 -1
  112. package/dist/{transport-stdio-BGjHoYLr.js → .setup/transport-stdio-h2VHOskC.mjs} +274 -89
  113. package/dist/{upstream-session-fork-BZerMte_.js → .setup/upstream-session-fork-BUr4OUbC.mjs} +51 -42
  114. package/dist/{usage-tCk-mg_x.js → .setup/usage-BML0r-ua.mjs} +5 -4
  115. package/dist/.setup/usage-limit-error-DUMbefVY.mjs +166 -0
  116. package/dist/{web-search-provider.runtime-B7bGbGWq.js → .setup/web-search-provider.runtime-CDKlN-Rv.mjs} +4 -3
  117. package/dist/api.js +23 -12
  118. package/dist/catalog-page-worker-entrypoint.js +12 -0
  119. package/dist/catalog-page.worker.js +9 -0
  120. package/dist/cli-metadata.js +1 -1
  121. package/dist/doctor-contract-api.js +8 -528
  122. package/dist/harness.js +1 -1
  123. package/dist/index.js +306 -215
  124. package/dist/media-understanding-provider.js +3 -3
  125. package/dist/migration-provider-api.js +1 -1
  126. package/dist/native-tool-policy.js +12 -0
  127. package/dist/provider-discovery.js +18 -0
  128. package/dist/session-history-worker-runtime.js +36 -35
  129. package/dist/session-history.worker.js +2 -2
  130. package/dist/web-search-contract-api.js +1 -1
  131. package/openclaw.plugin.json +354 -69
  132. package/package.json +14 -8
  133. package/dist/attempt-context-D44yeDII.js +0 -636
  134. package/dist/binding-connection-D3udKbIE.js +0 -60
  135. package/dist/event-projector-usage-BfXmpOec.js +0 -102
  136. package/dist/inference-proxy-HGXKUIre.js +0 -311
  137. package/dist/launch-args-RXQwn8zV.js +0 -90
  138. package/dist/native-subagent-history-owner-Pcp7JuVF.js +0 -34
  139. package/dist/native-subagent-monitor-fQ7eIXEf.js +0 -2978
  140. package/dist/node-exec-server.runtime-Cl2vapEi.js +0 -226
  141. package/dist/rpc-error-ttN_QjEm.js +0 -30
  142. package/dist/session-catalog-ct-AH01I.js +0 -1477
  143. package/dist/session-catalog-home-id-CwhLdC03.js +0 -18
  144. package/dist/session-catalog-provenance-D-dIfRAH.js +0 -96
  145. package/dist/timeout-BVw8aaM1.js +0 -33
  146. package/dist/version-omm6IPI3.js +0 -12
  147. /package/dist/{auth-profile-selection-DFu9e167.js → .setup/auth-profile-selection-DFu9e167.mjs} +0 -0
  148. /package/dist/{config-utils-DujwEnhg.js → .setup/config-utils-DujwEnhg.mjs} +0 -0
  149. /package/dist/{context-compaction-activity-CMla5FPJ.js → .setup/context-compaction-activity-CMla5FPJ.mjs} +0 -0
  150. /package/dist/{elicitation-input-DPoK8F7w.js → .setup/elicitation-input-DPoK8F7w.mjs} +0 -0
  151. /package/dist/{history-rejection-B4nOXNXF.js → .setup/history-rejection-B4nOXNXF.mjs} +0 -0
  152. /package/dist/{image-payload-sanitizer-tupAr-2o.js → .setup/image-payload-sanitizer-tupAr-2o.mjs} +0 -0
  153. /package/dist/{incognito-session-uhrBF6wJ.js → .setup/incognito-session-uhrBF6wJ.mjs} +0 -0
  154. /package/dist/{local-runtime-attribution-B_2mnqhb.js → .setup/local-runtime-attribution-B_2mnqhb.mjs} +0 -0
  155. /package/dist/{native-execution-policy-umd0tgh4.js → .setup/native-execution-policy-umd0tgh4.mjs} +0 -0
  156. /package/dist/{rolldown-runtime-8H4AJuhK.js → .setup/rolldown-runtime-8H4AJuhK.mjs} +0 -0
  157. /package/dist/{session-binding-meta-B7aEMU7g.js → .setup/session-binding-meta-B7aEMU7g.mjs} +0 -0
  158. /package/dist/{session-upstream-marker-D15C9NHp.js → .setup/session-upstream-marker-D15C9NHp.mjs} +0 -0
  159. /package/dist/{upstream-prompt-provenance-LphB8slG.js → .setup/upstream-prompt-provenance-LphB8slG.mjs} +0 -0
  160. /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.js";
2
- import { i as readUpstreamUserText, n as attachUpstreamUserText, r as readMirrorIdentity, t as attachCodexMirrorIdentity } from "./upstream-prompt-provenance-LphB8slG.js";
3
- import { t as projectBoundedCodexThreadHistory } from "./transcript-history-projection-v17wXgdK.js";
4
- 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-DibE0krH.js";
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
- return identity !== void 0 && readCodexMirrorSourceFingerprint(message) === expectedFingerprints.get(identity);
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
- if (recorder?.getAdmissionReceipt() && recorder.getPersistedMessage?.()?.display !== false) {
194
- const annotate = params.params.hostCapabilities.annotateCurrentUserTurn;
195
- if (!annotate || userPromptMessage.role !== "user") throw new Error("current host admission is unavailable for native prompt annotation");
196
- await annotate({
197
- mirrorIdentity: `${params.turnId}:prompt`,
198
- upstreamUserText: params.upstreamUserText,
199
- mirrorOrigin: "codex-app-server",
200
- mirrorSourceFingerprint: fingerprintCodexMirrorSourceMessage(userPromptMessage)
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, promptSnapshot as s, codexTranscriptMirrorRuntime as t };
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 { i as readUpstreamUserText, r as readMirrorIdentity } from "./upstream-prompt-provenance-LphB8slG.js";
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,