@openclaw/codex 2026.9.5 → 2026.9.7
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/README.md +2 -0
- package/assets/icon.png +0 -0
- package/dist/.setup/{account-usage-runtime-C2MOIvfq.mjs → account-usage-runtime-DFhbh1zz.mjs} +6 -6
- package/dist/.setup/{apply-CJ0ZfmBG.mjs → apply-D3GcSoSa.mjs} +35 -55
- package/dist/.setup/{attempt-client-cleanup-BpYKdTA0.mjs → attempt-client-cleanup-DOP-cW5j.mjs} +179 -73
- package/dist/.setup/attempt-workspace-context-C5HigshI.mjs +164 -0
- package/dist/.setup/{auth-binding-DhLWa_7K.mjs → auth-binding-BLWz7stm.mjs} +14 -1
- package/dist/.setup/{auth-cache-key-QirmgiCo.mjs → auth-cache-key-Dbvq-QgB.mjs} +41 -111
- package/dist/.setup/{auth-profile-WqZtZfXN.mjs → auth-profile-B0okYl2D.mjs} +1 -2
- package/dist/.setup/auth-profile-health-oHizqgye.mjs +53 -0
- package/dist/.setup/auth-profile-recovery-BREezV0L.mjs +14 -0
- package/dist/.setup/auth-start-options-BPIPeEX8.mjs +44 -0
- package/dist/.setup/{binding-connection-Bm38niE8.mjs → binding-connection-DTtN1KrX.mjs} +2 -2
- package/dist/.setup/{binding-connection.runtime-CnRMC0ta.mjs → binding-connection.runtime-6TpgD1M6.mjs} +5 -5
- package/dist/.setup/{bounded-turn-BtlZcivC.mjs → bounded-turn-CbjoN2OW.mjs} +140 -37
- package/dist/.setup/bounded-turn-isolation-B8K_ylqk.mjs +14 -0
- package/dist/.setup/{build-state-Xx9ybZqa.mjs → build-state-Da1_z0kd.mjs} +1 -1
- package/dist/.setup/{capabilities-_vXcZGSx.mjs → capabilities-B3WEZl4e.mjs} +2 -10
- package/dist/.setup/{client-vXs2929Q.mjs → client-N0JpgSzF.mjs} +635 -872
- package/dist/.setup/client-catalog-response-5HHLdcde.mjs +285 -0
- package/dist/.setup/{command-dispatch-naHIZwwF.mjs → command-dispatch-BeAoaovI.mjs} +9 -8
- package/dist/.setup/{command-formatters-CGEkdawF.mjs → command-formatters-R3ckE3Co.mjs} +36 -64
- package/dist/.setup/{command-handlers-BtAJEW1X.mjs → command-handlers-ylTMS00z.mjs} +301 -488
- package/dist/.setup/{command-rpc-DHFpn4le.mjs → command-rpc-CGJGUQ6Y.mjs} +40 -28
- package/dist/.setup/compact-C2WamavS.mjs +776 -0
- package/dist/.setup/{config-CedDWjM-.mjs → config-DKhXquav.mjs} +26 -28
- package/dist/.setup/{config-options-BsanJ8QG.mjs → config-options-CzyWLTJt.mjs} +68 -65
- package/dist/.setup/{config-parsing-CcB9iPoq.mjs → config-parsing-b088LyhT.mjs} +57 -60
- package/dist/.setup/{config-runtime-CeAhl_h4.mjs → config-runtime-C0NbLms1.mjs} +2 -2
- package/dist/.setup/{config-security-BRQ2mgW9.mjs → config-security-CE-FcGw9.mjs} +51 -215
- package/dist/.setup/{config-utils-DujwEnhg.mjs → config-utils-D0CXecki.mjs} +3 -13
- package/dist/.setup/context-engine-projection-PezSESth.mjs +387 -0
- package/dist/.setup/{conversation-binding-DhzrpTM6.mjs → conversation-binding-3Min8qvP.mjs} +71 -105
- package/dist/.setup/{conversation-binding-data-CrcyZk6O.mjs → conversation-binding-data-C746z5Pn.mjs} +8 -12
- package/dist/.setup/{conversation-control-DN53ns41.mjs → conversation-control-CEP8X5JC.mjs} +30 -69
- package/dist/.setup/{cyber-failover-DYwbmf1o.mjs → cyber-failover-XV0nNRZu.mjs} +1 -1
- package/dist/.setup/{cyber-failover-notice-e9G3J9-e.mjs → cyber-failover-notice-RNpGpTyP.mjs} +1 -1
- package/dist/.setup/{dynamic-tools-D16lOp67.mjs → dynamic-tools-DzlsLUuS.mjs} +3136 -3167
- package/dist/.setup/{effective-mcp-catalog-K6kLCN8X.mjs → effective-mcp-catalog-CxUtC-xG.mjs} +8 -17
- package/dist/.setup/{ephemeral-turn-R1gA8Sn6.mjs → ephemeral-turn-CDsPJOa2.mjs} +9 -6
- package/dist/.setup/event-projector-assistant-message-CigreO4K.mjs +69 -0
- package/dist/.setup/{event-projector-usage-C7Ntzs-f.mjs → event-projector-usage-03R0I2dM.mjs} +4 -26
- package/dist/.setup/event-projector-values-DJSz8BTk.mjs +106 -0
- package/dist/.setup/incognito-session-DWYapfwf.mjs +2 -0
- package/dist/.setup/{inference-context-fulhZuz8.mjs → inference-context-D-9gWlTR.mjs} +16 -18
- package/dist/.setup/inference-dispatch-CMZtjQyz.mjs +359 -0
- package/dist/.setup/inference-metadata-CgIf7sOx.mjs +81 -0
- package/dist/.setup/inference-proxy-DhcXOgUE.mjs +561 -0
- package/dist/.setup/{isolated-completion-B6srt48J.mjs → isolated-completion-Dm3PzxJk.mjs} +15 -11
- package/dist/.setup/launch-args-DbFCehO7.mjs +196 -0
- package/dist/.setup/{managed-binary-DP6Rib3P.mjs → managed-binary-kiWRhNRE.mjs} +16 -9
- package/dist/.setup/{model-catalog-DkvUuBey.mjs → model-catalog-PAuZgJC6.mjs} +14 -14
- package/dist/.setup/model-runtime-BdqzOMkU.mjs +11 -0
- package/dist/.setup/{models-BDFgm_G-.mjs → models-DHXZtVVk.mjs} +9 -18
- package/dist/.setup/{native-auth-BLZGqFjw.mjs → native-auth-CuG53tu4.mjs} +5 -5
- package/dist/.setup/{native-execution-policy-YBMHSzC4.mjs → native-execution-policy-BxZJy5mP.mjs} +6 -31
- package/dist/.setup/{native-subagent-monitor-B1hxzIOy.mjs → native-subagent-monitor-Dpsmf2wz.mjs} +4422 -3808
- package/dist/.setup/native-subagent-pending-assignments-DwkCzLvD.mjs +203 -0
- package/dist/.setup/native-task-assignments-DMQ0g3hu.mjs +194 -0
- package/dist/.setup/{node-cli-sessions-Cl8b2ZF3.mjs → node-cli-sessions-HC4W6FLI.mjs} +99 -111
- package/dist/.setup/node-exec-server.runtime-BgBfWQqo.mjs +244 -0
- package/dist/.setup/{plan-xD7WKYTM.mjs → plan-Y-QIvrKB.mjs} +118 -163
- package/dist/.setup/{plugin-activation-r8nq5Jzp.mjs → plugin-activation-cNHRfaxU.mjs} +10 -47
- package/dist/.setup/{plugin-app-cache-key-BOxKP7db.mjs → plugin-app-cache-key-BL9B5H0L.mjs} +9 -42
- package/dist/.setup/{plugin-inventory-DUle8DLz.mjs → plugin-inventory-Cky2XJUw.mjs} +32 -23
- package/dist/.setup/{plugin-marketplace-discovery-P-Vndfqq.mjs → plugin-marketplace-discovery-D_dV9FXa.mjs} +22 -25
- package/dist/.setup/{plugin-metadata-cache-DsS5buNa.mjs → plugin-metadata-cache-DsjsL1dr.mjs} +328 -318
- package/dist/.setup/protocol-CANUwXJ3.mjs +17 -0
- package/dist/.setup/provider-DH8NSzGt.mjs +51 -0
- package/dist/.setup/{provider-capabilities-B8J4Dy-O.mjs → provider-capabilities-CAxoF-X1.mjs} +35 -12
- package/dist/.setup/{rate-limits-DOEGYRNs.mjs → rate-limits-B7-X2TgG.mjs} +123 -166
- package/dist/.setup/{request-BioXJLYa.mjs → request-BHZ1nz8d.mjs} +25 -16
- package/dist/.setup/responses-oauth-twnuTaAa.mjs +93 -0
- package/dist/.setup/rpc-error-BlD2vuzn.mjs +31 -0
- package/dist/.setup/{run-attempt-rlA07pUv.mjs → run-attempt-D8RZUOzY.mjs} +2046 -1454
- package/dist/.setup/{run-attempt-lifecycle-B7JbY4-F.mjs → run-attempt-lifecycle-C-6O3Exn.mjs} +10 -24
- package/dist/.setup/{runtime-artifact-Dy38Z5iU.mjs → runtime-artifact-DDQ-HGXf.mjs} +43 -47
- package/dist/.setup/runtime-artifact-connection-D68qQn1m.mjs +78 -0
- package/dist/.setup/sandbox-guard-DjCz2eOw.mjs +126 -0
- package/dist/.setup/scope-DOC1Xjc8.mjs +6 -0
- package/dist/.setup/session-binding-DGCYAfvD.mjs +443 -0
- package/dist/.setup/{session-binding-record-TH3xA0zj.mjs → session-binding-record-Oe9L-CNY.mjs} +73 -132
- package/dist/.setup/{session-binding-sidecars-CKYEcfNn.mjs → session-binding-sidecars-jo6H8dFr.mjs} +242 -60
- package/dist/.setup/{session-catalog-fUdWDx-U.mjs → session-catalog-4sCdv5qx.mjs} +598 -452
- package/dist/.setup/{session-catalog-adoption-CR_whkEW.mjs → session-catalog-adoption-BU_pHWG7.mjs} +59 -26
- package/dist/.setup/{session-catalog-archive-CwZaPacf.mjs → session-catalog-archive-spHfihri.mjs} +7 -7
- package/dist/.setup/session-catalog-events-DePDzzjc.mjs +139 -0
- package/dist/.setup/session-catalog-home-id-vlih0B_g.mjs +22 -0
- package/dist/.setup/{session-catalog-index-B141u15s.mjs → session-catalog-index-CZvDzC6z.mjs} +286 -182
- package/dist/.setup/{session-catalog-index-order-Cc5BzlQr.mjs → session-catalog-index-order-BcQpHks3.mjs} +2 -2
- package/dist/.setup/{session-catalog-index-state-BAuDztHN.mjs → session-catalog-index-state-TeO7EyO-.mjs} +6 -2
- package/dist/.setup/session-catalog-limits-DDxOsQeC.mjs +14 -0
- package/dist/.setup/session-catalog-list-request-CvtxrYSe.mjs +170 -0
- package/dist/.setup/session-catalog-native-projection-DjhwGL6x.mjs +178 -0
- package/dist/.setup/{session-catalog-node-adoption-BVRsYOSh.mjs → session-catalog-node-adoption-DgXvSGu0.mjs} +30 -35
- package/dist/.setup/{session-catalog-node-continue-Dowv8osw.mjs → session-catalog-node-continue-DjKXHBbi.mjs} +25 -18
- package/dist/.setup/session-catalog-node-lookup-CtAXI5W5.mjs +56 -0
- package/dist/.setup/{session-catalog-native-projection-ChV3cCtm.mjs → session-catalog-parsing-CPGaPYr-.mjs} +14 -180
- package/dist/.setup/{session-catalog-projection-C1Bj9Jl-.mjs → session-catalog-projection-Cr5qP5Dj.mjs} +15 -5
- package/dist/.setup/session-catalog-provenance-DoAvktcj.mjs +95 -0
- package/dist/.setup/{session-cli-DIj-IE-E.mjs → session-cli-Cn_nCqfq.mjs} +11 -24
- package/dist/.setup/{session-history-C--SrLI8.mjs → session-history-D83lJWHG.mjs} +16 -23
- package/dist/.setup/{session-history-import-JHXT5Xfi.mjs → session-history-import-WhX-X33a.mjs} +7 -10
- package/dist/.setup/session-history-read-Ov3StuL4.mjs +133 -0
- package/dist/.setup/{session-history.worker-CpNj7H_P.mjs → session-history.worker-MnPKncqP.mjs} +14 -23
- package/dist/.setup/session-initialization-6aveB9qb.mjs +22 -0
- package/dist/.setup/{session-permission-policy-DhurXY0l.mjs → session-permission-policy-Ci_fVX6y.mjs} +4 -8
- package/dist/.setup/{session-retirement-CU87AOg9.mjs → session-retirement-qMTxkNx2.mjs} +31 -12
- package/dist/.setup/{settled-turn-context-fmwouT5I.mjs → settled-turn-context-D4yj4rxf.mjs} +1 -1
- package/dist/.setup/{settled-turn-finalizer-CiY2bLFK.mjs → settled-turn-finalizer-BsvEabkw.mjs} +17 -13
- package/dist/.setup/{shared-client-BpTtuLQ5.mjs → shared-client-DqyTMYug.mjs} +826 -485
- package/dist/.setup/shared-client-lifecycle-DJIgqgMw.mjs +153 -0
- package/dist/.setup/{side-question-DSCZyoBD.mjs → side-question-C4kCmQy1.mjs} +206 -334
- package/dist/.setup/{source-Bjp4UQij.mjs → source-CS_7GFJZ.mjs} +82 -139
- 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-lifecycle-DPflntEJ.mjs +2362 -0
- package/dist/.setup/{incognito-session-uhrBF6wJ.mjs → thread-ownership-queue-Dp24d7-F.mjs} +1 -2
- package/dist/.setup/{thread-ownership-skomxnIt.mjs → thread-ownership-roNP0l1c.mjs} +47 -10
- package/dist/.setup/thread-policy-DTd-DtkX.mjs +109 -0
- package/dist/.setup/thread-requests-B_bRnMGN.mjs +2102 -0
- package/dist/.setup/{thread-resume-BkNpj9Pz.mjs → thread-resume-CdDaoc7T.mjs} +6 -6
- package/dist/.setup/timeout-CXOfNoaX.mjs +46 -0
- package/dist/.setup/transcript-history-projection-DRSifI-1.mjs +201 -0
- package/dist/.setup/{transcript-mirror-attestation-CzM-94NC.mjs → transcript-mirror-attestation-YSegaktH.mjs} +3 -4
- package/dist/.setup/{transcript-mirror-D4qp_leP.mjs → transcript-mirror-kxmCYsuF.mjs} +224 -206
- package/dist/.setup/{transport-stdio-Cmx94Oiy.mjs → transport-stdio-Bdegpn2V.mjs} +138 -75
- package/dist/.setup/transport-websocket-BTBE-LD9.mjs +211 -0
- package/dist/.setup/{upstream-prompt-provenance-LphB8slG.mjs → upstream-prompt-provenance-fXkKbPVC.mjs} +3 -9
- package/dist/.setup/{upstream-session-fork-D3UKxgVD.mjs → upstream-session-fork-CBeVjBpT.mjs} +48 -40
- package/dist/.setup/{usage-BOgBEKso.mjs → usage-BMzNxeR_.mjs} +5 -4
- package/dist/.setup/{usage-limit-error-C0ow7DOc.mjs → usage-limit-error-QXerDo3i.mjs} +5 -20
- package/dist/.setup/{web-search-provider.runtime-CTGuJt6i.mjs → web-search-provider.runtime-P77OUeoo.mjs} +10 -20
- package/dist/api.js +25 -16
- 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 +50 -8
- package/dist/harness.js +344 -1
- package/dist/index.js +345 -346
- package/dist/media-understanding-provider.js +9 -22
- package/dist/migration-provider-api.js +1 -1
- package/dist/provider-discovery.js +1 -1
- package/dist/session-history-worker-runtime.js +16 -33
- package/dist/session-history.worker.js +1 -1
- package/openclaw.plugin.json +14 -2
- package/package.json +11 -7
- package/dist/.setup/attempt-context-VXVwTCfS.mjs +0 -636
- package/dist/.setup/compact-C3i3qlzj.mjs +0 -687
- package/dist/.setup/event-projector-assistant-message-DNUR1s0A.mjs +0 -105
- package/dist/.setup/event-projector-items-DyTQ_XqL.mjs +0 -200
- package/dist/.setup/harness-rxaaoN-o.mjs +0 -349
- package/dist/.setup/history-rejection-B4nOXNXF.mjs +0 -13
- package/dist/.setup/image-payload-sanitizer-tupAr-2o.mjs +0 -79
- package/dist/.setup/inference-proxy-CC15HuSi.mjs +0 -311
- package/dist/.setup/launch-args-DnMak49W.mjs +0 -111
- package/dist/.setup/local-runtime-attribution-B_2mnqhb.mjs +0 -19
- package/dist/.setup/native-subagent-history-YXaL6dMd.mjs +0 -135
- package/dist/.setup/native-subagent-task-ids-DsuOonKv.mjs +0 -411
- package/dist/.setup/node-exec-server.runtime-BaViBKNz.mjs +0 -226
- package/dist/.setup/plugin-approval-roundtrip-CjfzafAZ.mjs +0 -122
- package/dist/.setup/provider-fFh_-VR3.mjs +0 -50
- package/dist/.setup/rolldown-runtime-8H4AJuhK.mjs +0 -14
- package/dist/.setup/sandbox-guard-BBP-RbTf.mjs +0 -166
- package/dist/.setup/session-binding-_0W_fHRr.mjs +0 -721
- package/dist/.setup/session-catalog-events-jMcYfQyd.mjs +0 -250
- package/dist/.setup/session-history-read-B3ZfSUbF.mjs +0 -50
- package/dist/.setup/session-initialization-DH1z6fXn.mjs +0 -75
- package/dist/.setup/thread-history-page-BTx-4xsg.mjs +0 -83
- package/dist/.setup/thread-lifecycle-Cik28qWn.mjs +0 -4904
- package/dist/.setup/thread-policy-Cjs4B8xf.mjs +0 -54
- package/dist/.setup/timeout-DZF05XrR.mjs +0 -63
- package/dist/.setup/transcript-history-projection-DHNBDhCU.mjs +0 -243
- package/dist/.setup/version-CoqzXPgK.mjs +0 -12
|
@@ -1,12 +1,200 @@
|
|
|
1
|
-
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.mjs";
|
|
2
1
|
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-
|
|
4
|
-
import { t as projectBoundedCodexThreadHistory } from "./transcript-history-projection-
|
|
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-
|
|
2
|
+
import { i as readUpstreamUserText, n as attachUpstreamUserText, r as readMirrorIdentity, t as attachCodexMirrorIdentity } from "./upstream-prompt-provenance-fXkKbPVC.mjs";
|
|
3
|
+
import { t as projectBoundedCodexThreadHistory } from "./transcript-history-projection-DRSifI-1.mjs";
|
|
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-YSegaktH.mjs";
|
|
5
|
+
import { t as __exportAll } from "./session-binding-sidecars-jo6H8dFr.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;
|
|
@@ -41,12 +229,10 @@ function buildFromPrepared(params, preparedUserMessage) {
|
|
|
41
229
|
function buildCodexUserPromptMessage(params) {
|
|
42
230
|
return buildFromPrepared(params, params.userTurnTranscriptRecorder?.message);
|
|
43
231
|
}
|
|
44
|
-
function buildCodexUpstreamPromptMessage(params, identity, upstreamUserText) {
|
|
45
|
-
const message = attachCodexMirrorIdentity(buildCodexUserPromptMessage(params), identity);
|
|
46
|
-
return upstreamUserText ? attachUpstreamUserText(message, upstreamUserText) : message;
|
|
47
|
-
}
|
|
48
232
|
function promptSnapshot(params, turnId, upstreamUserText) {
|
|
49
|
-
|
|
233
|
+
if (params.suppressNextUserMessagePersistence) return [];
|
|
234
|
+
const message = attachCodexMirrorIdentity(buildCodexUserPromptMessage(params), `${turnId}:prompt`);
|
|
235
|
+
return [upstreamUserText ? attachUpstreamUserText(message, upstreamUserText) : message];
|
|
50
236
|
}
|
|
51
237
|
async function buildResolvedCodexUserPromptMessage(params) {
|
|
52
238
|
return buildFromPrepared(params, await params.userTurnTranscriptRecorder?.resolveMessage() ?? params.userTurnTranscriptRecorder?.message);
|
|
@@ -72,9 +258,6 @@ var transcript_mirror_exports = /* @__PURE__ */ __exportAll({
|
|
|
72
258
|
mirrorPromptAtTurnStartBestEffort: () => mirrorPromptAtTurnStartBestEffort,
|
|
73
259
|
projectBoundedCodexThreadHistory: () => projectBoundedCodexThreadHistory
|
|
74
260
|
});
|
|
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
261
|
/** Imports a bounded, user-visible Codex history tail into a new OpenClaw transcript. */
|
|
79
262
|
async function importCodexThreadHistoryToTranscript(params) {
|
|
80
263
|
const { transcriptMessages, importedMessages, omittedMessages } = projectBoundedCodexThreadHistory({
|
|
@@ -110,6 +293,9 @@ async function mirrorBestEffort(params) {
|
|
|
110
293
|
messagesSnapshot: params.result.messagesSnapshot,
|
|
111
294
|
turnId: params.turnId
|
|
112
295
|
});
|
|
296
|
+
const recorder = params.params.userTurnTranscriptRecorder;
|
|
297
|
+
const admittedPromptIdentity = recorder?.getAdmissionReceipt() ? `${params.turnId}:prompt` : void 0;
|
|
298
|
+
const admittedPrompt = admittedPromptIdentity ? recorder?.getPersistedMessage?.() : void 0;
|
|
113
299
|
params.assertWriteCurrent?.();
|
|
114
300
|
const mirrorResult = await mirror({
|
|
115
301
|
assertWriteCurrent: params.assertWriteCurrent,
|
|
@@ -118,7 +304,7 @@ async function mirrorBestEffort(params) {
|
|
|
118
304
|
sessionId: params.params.sessionId,
|
|
119
305
|
storePath: params.params.sessionTarget?.storePath,
|
|
120
306
|
cwd: params.cwd,
|
|
121
|
-
messages,
|
|
307
|
+
messages: admittedPromptIdentity ? messages.filter((message) => readMirrorIdentity(message) !== admittedPromptIdentity) : messages,
|
|
122
308
|
idempotencyScope: `codex-app-server:${params.threadId}`,
|
|
123
309
|
runId: params.params.runId,
|
|
124
310
|
runMirrorIdentityPrefix: `${params.turnId}:`,
|
|
@@ -140,9 +326,10 @@ async function mirrorBestEffort(params) {
|
|
|
140
326
|
const identity = readMirrorIdentity(message);
|
|
141
327
|
return identity ? [[identity, fingerprintCodexMirrorSourceMessage(message)]] : [];
|
|
142
328
|
}));
|
|
143
|
-
const mirroredMessages = mirrorResult.messagesPresent.filter((message) => {
|
|
329
|
+
const mirroredMessages = [...admittedPrompt ? [admittedPrompt] : [], ...mirrorResult.messagesPresent].filter((message) => {
|
|
144
330
|
const identity = readMirrorIdentity(message);
|
|
145
|
-
|
|
331
|
+
const expectedFingerprint = identity ? expectedFingerprints.get(identity) : void 0;
|
|
332
|
+
return expectedFingerprint !== void 0 && readCodexMirrorSourceFingerprint(message) === expectedFingerprint;
|
|
146
333
|
});
|
|
147
334
|
const assistantMirrorIdentity = `${params.turnId}:assistant`;
|
|
148
335
|
const assistantTranscriptMessage = mirroredMessages.find((message) => readMirrorIdentity(message) === assistantMirrorIdentity);
|
|
@@ -191,16 +378,26 @@ async function mirrorPromptAtTurnStartBestEffort(params) {
|
|
|
191
378
|
inputProvenance: params.params.inputProvenance,
|
|
192
379
|
message: attachUpstreamUserText(attachCodexMirrorIdentity(await buildResolvedCodexUserPromptMessage(params.params), `${params.turnId}:prompt`), params.upstreamUserText)
|
|
193
380
|
});
|
|
381
|
+
const annotate = params.params.hostCapabilities.annotateCurrentUserTurn;
|
|
382
|
+
if (annotate) await annotate({
|
|
383
|
+
mirrorIdentity: `${params.turnId}:prompt`,
|
|
384
|
+
upstreamUserText: params.upstreamUserText,
|
|
385
|
+
mirrorOrigin: "codex-app-server",
|
|
386
|
+
mirrorSourceFingerprint: fingerprintCodexMirrorSourceMessage(userPromptMessage)
|
|
387
|
+
});
|
|
194
388
|
const recorder = params.params.userTurnTranscriptRecorder;
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
389
|
+
const admission = recorder?.getAdmissionReceipt();
|
|
390
|
+
if (admission) {
|
|
391
|
+
const message = recorder?.getPersistedMessage?.();
|
|
392
|
+
if (message) {
|
|
393
|
+
params.params.hostCapabilities.assertActive();
|
|
394
|
+
params.notifyUserMessagePersisted({
|
|
395
|
+
anchor: admission,
|
|
396
|
+
appended: false,
|
|
397
|
+
message
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
return;
|
|
204
401
|
}
|
|
205
402
|
const mirrorResult = await mirror({
|
|
206
403
|
assertCurrent: params.params.hostCapabilities.assertActive,
|
|
@@ -227,176 +424,6 @@ async function mirrorPromptAtTurnStartBestEffort(params) {
|
|
|
227
424
|
});
|
|
228
425
|
}
|
|
229
426
|
}
|
|
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
427
|
async function deliverAsyncMessageBestEffort(params) {
|
|
401
428
|
const mirrorIdentity = `${params.turnId}:async:${params.itemId}`;
|
|
402
429
|
const deliveryIntentId = `block-reply:v1:codex-app-server:${[
|
|
@@ -417,7 +444,9 @@ async function deliverAsyncMessageBestEffort(params) {
|
|
|
417
444
|
cwd: params.cwd,
|
|
418
445
|
config: params.params.config,
|
|
419
446
|
messages: [attachCodexMirrorIdentity(params.message, mirrorIdentity)],
|
|
420
|
-
idempotencyScope: `codex-app-server:${params.threadId}
|
|
447
|
+
idempotencyScope: `codex-app-server:${params.threadId}`,
|
|
448
|
+
runId: params.params.runId,
|
|
449
|
+
runMirrorIdentityPrefix: `${params.turnId}:`
|
|
421
450
|
});
|
|
422
451
|
} catch (error) {
|
|
423
452
|
embeddedAgentLog.warn("failed to persist codex async agent message", {
|
|
@@ -457,16 +486,5 @@ const codexTranscriptMirrorRuntime = {
|
|
|
457
486
|
async function deliverAsyncBlockReply(onBlockReply, text, deliveryIntentId) {
|
|
458
487
|
await deliverAgentHarnessUserInputPrompt({ onBlockReply: (payload) => onBlockReply(payload, { deliveryIntentId }) }, [], { intro: text });
|
|
459
488
|
}
|
|
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
489
|
//#endregion
|
|
472
490
|
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 };
|