codex-chatgpt-control 0.5.1-alpha.2 → 0.5.1-alpha.4

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 (231) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +43 -0
  3. package/contracts/v1/fixtures/backend-capabilities.json +40 -1
  4. package/contracts/v1/fixtures/backend-compatibility.json +21 -0
  5. package/contracts/v1/fixtures/backend-version.json +6 -1
  6. package/contracts/v1/fixtures/download-blocked-by-browser.json +22 -0
  7. package/contracts/v1/fixtures/download-receipt-failed.json +22 -0
  8. package/contracts/v1/fixtures/download-receipt-timeout.json +22 -0
  9. package/contracts/v1/fixtures/journal-rpc-indeterminate.json +32 -0
  10. package/contracts/v1/fixtures/journal-rpc-unsupported-platform.json +32 -0
  11. package/contracts/v1/fixtures/journal-runtime-unavailable.json +32 -0
  12. package/contracts/v1/fixtures/operation-action-prepared-event.json +42 -0
  13. package/contracts/v1/fixtures/operation-action.json +13 -0
  14. package/contracts/v1/fixtures/operation-artifact-receipt.json +14 -0
  15. package/contracts/v1/fixtures/operation-artifact-transfer-intent-event.json +24 -0
  16. package/contracts/v1/fixtures/operation-artifact-transfer-receipt-event.json +26 -0
  17. package/contracts/v1/fixtures/operation-artifact-transfer-state.json +178 -0
  18. package/contracts/v1/fixtures/operation-blocker.json +10 -0
  19. package/contracts/v1/fixtures/operation-collect-request.json +17 -0
  20. package/contracts/v1/fixtures/operation-collect-result.json +42 -0
  21. package/contracts/v1/fixtures/operation-control-receipt.json +13 -0
  22. package/contracts/v1/fixtures/operation-control-request.json +18 -0
  23. package/contracts/v1/fixtures/operation-control-result.json +31 -0
  24. package/contracts/v1/fixtures/operation-event.json +18 -0
  25. package/contracts/v1/fixtures/operation-handle.json +10 -0
  26. package/contracts/v1/fixtures/operation-inspect-request.json +13 -0
  27. package/contracts/v1/fixtures/operation-inspect-result.json +205 -0
  28. package/contracts/v1/fixtures/operation-ownership-baseline-event.json +34 -0
  29. package/contracts/v1/fixtures/operation-receipt.json +32 -0
  30. package/contracts/v1/fixtures/operation-recovery-decision.json +7 -0
  31. package/contracts/v1/fixtures/operation-recovery-observation.json +12 -0
  32. package/contracts/v1/fixtures/operation-request.json +33 -0
  33. package/contracts/v1/fixtures/operation-state.json +144 -0
  34. package/contracts/v1/fixtures/operation-submission-witness-event.json +20 -0
  35. package/contracts/v1/fixtures/operation-submission-witness.json +11 -0
  36. package/contracts/v1/fixtures/operation-submit-result.json +16 -0
  37. package/contracts/v1/fixtures/operation-target-established-event.json +21 -0
  38. package/contracts/v1/manifest.json +185 -1
  39. package/contracts/v1/parity-suite.json +106 -8
  40. package/contracts/v1/schemas/backend-compatibility.schema.json +65 -0
  41. package/contracts/v1/schemas/backend-request.schema.json +8 -2
  42. package/contracts/v1/schemas/capabilities.schema.json +81 -1
  43. package/contracts/v1/schemas/manifest.schema.json +57 -0
  44. package/contracts/v1/schemas/operation-action.schema.json +155 -0
  45. package/contracts/v1/schemas/operation-artifact-receipt.schema.json +89 -0
  46. package/contracts/v1/schemas/operation-blocker.schema.json +70 -0
  47. package/contracts/v1/schemas/operation-collect-request.schema.json +46 -0
  48. package/contracts/v1/schemas/operation-collect-result.schema.json +74 -0
  49. package/contracts/v1/schemas/operation-control-receipt.schema.json +108 -0
  50. package/contracts/v1/schemas/operation-control-request.schema.json +111 -0
  51. package/contracts/v1/schemas/operation-control-result.schema.json +112 -0
  52. package/contracts/v1/schemas/operation-event.schema.json +756 -0
  53. package/contracts/v1/schemas/operation-handle.schema.json +55 -0
  54. package/contracts/v1/schemas/operation-inspect-request.schema.json +42 -0
  55. package/contracts/v1/schemas/operation-inspect-result.schema.json +1662 -0
  56. package/contracts/v1/schemas/operation-receipt.schema.json +153 -0
  57. package/contracts/v1/schemas/operation-recovery.schema.json +314 -0
  58. package/contracts/v1/schemas/operation-request.schema.json +158 -0
  59. package/contracts/v1/schemas/operation-state.schema.json +691 -0
  60. package/contracts/v1/schemas/operation-submission-witness.schema.json +48 -0
  61. package/contracts/v1/schemas/operation-submit-result.schema.json +94 -0
  62. package/contracts/v1/surface-drift-policy.json +50 -0
  63. package/contracts/v1/vectors/operation-request-digest-v1.json +43 -0
  64. package/dist/codex-chatgpt-control-backend.mjs +45882 -9361
  65. package/dist/codex-chatgpt-control-journal.mjs +5547 -0
  66. package/dist/codex-chatgpt-control-live-smoke.bundle.mjs +51677 -0
  67. package/dist/codex-chatgpt-control-release-canary.bundle.mjs +52104 -0
  68. package/dist/codex-chatgpt-control.bundle.mjs +48392 -10260
  69. package/dist/src/backend/client.d.ts +103 -2
  70. package/dist/src/backend/client.js +1436 -97
  71. package/dist/src/backend/compatibility.d.ts +12 -0
  72. package/dist/src/backend/compatibility.js +208 -0
  73. package/dist/src/backend/protocol.d.ts +84 -1
  74. package/dist/src/backend/protocol.js +31 -5
  75. package/dist/src/backend/runtime-identity.d.ts +10 -0
  76. package/dist/src/backend/runtime-identity.js +141 -0
  77. package/dist/src/backend/session.d.ts +10 -2
  78. package/dist/src/backend/session.js +478 -7
  79. package/dist/src/backend/stdio-server.d.ts +4 -1
  80. package/dist/src/backend/stdio-server.js +240 -28
  81. package/dist/src/browser/active-composer-file-input.d.ts +9 -0
  82. package/dist/src/browser/active-composer-file-input.js +33 -0
  83. package/dist/src/browser/attach.d.ts +4 -1
  84. package/dist/src/browser/attach.js +136 -28
  85. package/dist/src/browser/chatgpt-url.d.ts +2 -0
  86. package/dist/src/browser/chatgpt-url.js +9 -0
  87. package/dist/src/browser/downloads.d.ts +17 -1
  88. package/dist/src/browser/downloads.js +150 -28
  89. package/dist/src/browser/page-state.js +6 -0
  90. package/dist/src/client.d.ts +43 -0
  91. package/dist/src/client.js +1279 -59
  92. package/dist/src/commands/artifacts.js +6 -4
  93. package/dist/src/commands/chat-popover.d.ts +37 -0
  94. package/dist/src/commands/chat-popover.js +537 -0
  95. package/dist/src/commands/configuration.d.ts +5 -0
  96. package/dist/src/commands/configuration.js +134 -21
  97. package/dist/src/commands/context.js +10 -3
  98. package/dist/src/commands/doctor.d.ts +1 -1
  99. package/dist/src/commands/doctor.js +27 -4
  100. package/dist/src/commands/experience.d.ts +5 -0
  101. package/dist/src/commands/experience.js +104 -21
  102. package/dist/src/commands/files.js +14 -33
  103. package/dist/src/commands/modes.js +85 -21
  104. package/dist/src/commands/power-discovery.d.ts +130 -0
  105. package/dist/src/commands/power-discovery.js +669 -0
  106. package/dist/src/commands/project-sources.js +325 -31
  107. package/dist/src/commands/sequence.js +59 -32
  108. package/dist/src/commands/session.js +19 -6
  109. package/dist/src/commands/work.js +31 -0
  110. package/dist/src/dom/composer-text.d.ts +6 -0
  111. package/dist/src/dom/composer-text.js +85 -0
  112. package/dist/src/errors.d.ts +9 -0
  113. package/dist/src/errors.js +22 -0
  114. package/dist/src/index.d.ts +6 -0
  115. package/dist/src/index.js +9 -0
  116. package/dist/src/operations/artifact-output.d.ts +69 -0
  117. package/dist/src/operations/artifact-output.js +1748 -0
  118. package/dist/src/operations/artifact-stream.d.ts +19 -0
  119. package/dist/src/operations/artifact-stream.js +35 -0
  120. package/dist/src/operations/artifact-transfer.d.ts +149 -0
  121. package/dist/src/operations/artifact-transfer.js +1312 -0
  122. package/dist/src/operations/browser-adapter.d.ts +167 -0
  123. package/dist/src/operations/browser-adapter.js +2103 -0
  124. package/dist/src/operations/browser-observation.d.ts +110 -0
  125. package/dist/src/operations/browser-observation.js +1256 -0
  126. package/dist/src/operations/browser-target.d.ts +105 -0
  127. package/dist/src/operations/browser-target.js +531 -0
  128. package/dist/src/operations/canonical.d.ts +4 -0
  129. package/dist/src/operations/canonical.js +412 -0
  130. package/dist/src/operations/chatgpt-runtime.d.ts +72 -0
  131. package/dist/src/operations/chatgpt-runtime.js +1232 -0
  132. package/dist/src/operations/client.d.ts +138 -0
  133. package/dist/src/operations/client.js +1145 -0
  134. package/dist/src/operations/collector.d.ts +195 -0
  135. package/dist/src/operations/collector.js +1039 -0
  136. package/dist/src/operations/configuration-routing.d.ts +4 -0
  137. package/dist/src/operations/configuration-routing.js +14 -0
  138. package/dist/src/operations/control.d.ts +372 -0
  139. package/dist/src/operations/control.js +1498 -0
  140. package/dist/src/operations/file-identity.d.ts +33 -0
  141. package/dist/src/operations/file-identity.js +153 -0
  142. package/dist/src/operations/handle.d.ts +19 -0
  143. package/dist/src/operations/handle.js +727 -0
  144. package/dist/src/operations/index.d.ts +25 -0
  145. package/dist/src/operations/index.js +25 -0
  146. package/dist/src/operations/journal-authority.d.ts +12 -0
  147. package/dist/src/operations/journal-authority.js +1 -0
  148. package/dist/src/operations/journal-rpc-client.d.ts +12 -0
  149. package/dist/src/operations/journal-rpc-client.js +225 -0
  150. package/dist/src/operations/journal-rpc-protocol.d.ts +32 -0
  151. package/dist/src/operations/journal-rpc-protocol.js +214 -0
  152. package/dist/src/operations/journal-rpc-server.d.ts +15 -0
  153. package/dist/src/operations/journal-rpc-server.js +272 -0
  154. package/dist/src/operations/journal.d.ts +143 -0
  155. package/dist/src/operations/journal.js +1957 -0
  156. package/dist/src/operations/production-attachments.d.ts +118 -0
  157. package/dist/src/operations/production-attachments.js +1035 -0
  158. package/dist/src/operations/production-chatgpt-artifacts.d.ts +74 -0
  159. package/dist/src/operations/production-chatgpt-artifacts.js +1146 -0
  160. package/dist/src/operations/production-chatgpt-attachments.d.ts +80 -0
  161. package/dist/src/operations/production-chatgpt-attachments.js +1639 -0
  162. package/dist/src/operations/production-configuration.d.ts +42 -0
  163. package/dist/src/operations/production-configuration.js +1544 -0
  164. package/dist/src/operations/production-primitives.d.ts +53 -0
  165. package/dist/src/operations/production-primitives.js +856 -0
  166. package/dist/src/operations/production-work-steer.d.ts +203 -0
  167. package/dist/src/operations/production-work-steer.js +1218 -0
  168. package/dist/src/operations/recovery.d.ts +80 -0
  169. package/dist/src/operations/recovery.js +174 -0
  170. package/dist/src/operations/runtime-adapter.d.ts +126 -0
  171. package/dist/src/operations/runtime-adapter.js +802 -0
  172. package/dist/src/operations/send-once.d.ts +224 -0
  173. package/dist/src/operations/send-once.js +1081 -0
  174. package/dist/src/operations/service.d.ts +286 -0
  175. package/dist/src/operations/service.js +2831 -0
  176. package/dist/src/operations/staging.d.ts +136 -0
  177. package/dist/src/operations/staging.js +630 -0
  178. package/dist/src/operations/state-machine.d.ts +29 -0
  179. package/dist/src/operations/state-machine.js +2047 -0
  180. package/dist/src/operations/submission.d.ts +423 -0
  181. package/dist/src/operations/submission.js +1676 -0
  182. package/dist/src/operations/transactional-chat-power.d.ts +17 -0
  183. package/dist/src/operations/transactional-chat-power.js +212 -0
  184. package/dist/src/operations/turn-ownership.d.ts +202 -0
  185. package/dist/src/operations/turn-ownership.js +700 -0
  186. package/dist/src/operations/types.d.ts +454 -0
  187. package/dist/src/operations/types.js +20 -0
  188. package/dist/src/operations/wire-requests.d.ts +21 -0
  189. package/dist/src/operations/wire-requests.js +396 -0
  190. package/dist/src/operations/wire-results.d.ts +97 -0
  191. package/dist/src/operations/wire-results.js +818 -0
  192. package/dist/src/runner/responses.d.ts +3 -1
  193. package/dist/src/runner/responses.js +19 -1
  194. package/dist/src/runner/result.js +227 -55
  195. package/dist/src/runner/types.d.ts +12 -0
  196. package/dist/src/runtime/command-routing.d.ts +149 -0
  197. package/dist/src/runtime/command-routing.js +431 -0
  198. package/dist/src/runtime/coordinated-browser.d.ts +24 -0
  199. package/dist/src/runtime/coordinated-browser.js +315 -0
  200. package/dist/src/runtime/coordinated-page.d.ts +41 -0
  201. package/dist/src/runtime/coordinated-page.js +651 -0
  202. package/dist/src/runtime/operation-context.d.ts +142 -0
  203. package/dist/src/runtime/operation-context.js +410 -0
  204. package/dist/src/runtime/runtime-session.d.ts +95 -0
  205. package/dist/src/runtime/runtime-session.js +314 -0
  206. package/dist/src/runtime/tab-coordinator.d.ts +200 -0
  207. package/dist/src/runtime/tab-coordinator.js +1200 -0
  208. package/dist/src/runtime/value-boundaries.d.ts +18 -0
  209. package/dist/src/runtime/value-boundaries.js +49 -0
  210. package/dist/src/safety/blockers.js +8 -1
  211. package/dist/src/safety/untrusted-output.js +2 -1
  212. package/dist/src/scripts/backend-server.js +4 -1
  213. package/dist/src/scripts/capture-surface-profile.js +7 -2
  214. package/dist/src/scripts/journal-server.d.ts +2 -0
  215. package/dist/src/scripts/journal-server.js +37 -0
  216. package/dist/src/scripts/live-smoke/harness.js +79 -7
  217. package/dist/src/scripts/live-smoke/scenarios.d.ts +42 -1
  218. package/dist/src/scripts/live-smoke/scenarios.js +147 -30
  219. package/dist/src/scripts/live-smoke/transactional.d.ts +17 -0
  220. package/dist/src/scripts/live-smoke/transactional.js +254 -0
  221. package/dist/src/scripts/live-smoke/types.d.ts +3 -0
  222. package/dist/src/scripts/release-canary-module.js +17 -4
  223. package/dist/src/types.d.ts +38 -1
  224. package/package.json +8 -3
  225. package/references/2026-08-16-transactional-operations.md +459 -0
  226. package/references/2026-09-06-journal-service.md +140 -0
  227. package/references/agents-runner.md +34 -0
  228. package/references/backend-protocol.md +176 -0
  229. package/references/python-parity.md +137 -0
  230. package/references/responses-adapter.md +19 -0
  231. package/references/streaming.md +6 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,47 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.1-alpha.4
4
+
5
+ - Detects Chrome's explicit blocked-download error page, avoids alternate
6
+ download attempts, and keeps signed download URLs out of rejected-page results.
7
+ - Requires filename-scoped workbook previews when browser filtering is absent.
8
+ - Repairs Chat detection and configuration when current Power or Advanced
9
+ menus are open, preserving scoped Work evidence and verified effort changes.
10
+ - Recognizes current Work model/Power menus and the independent Fast-mode
11
+ checkbox, with verified selection/restoration and legacy Advanced support.
12
+ - Recovers an unconfirmed Send through a fresh client using the authenticated
13
+ saved tab, baseline, unique turn and matching prompt, without sending again.
14
+ - Adds an explicit authenticated journal service and packaged CLI for browser
15
+ hosts without process identity. Journal files and locks remain owned by real
16
+ Node; browser capabilities remain in the active browser host.
17
+ - Supports the new private-file journal transport on macOS/Linux; Windows
18
+ returns an explicit unsupported-platform error before filesystem access.
19
+ - Preserves multiline composer text, recognizes zero-file composer state,
20
+ and forwards the requested response format during exact-turn collection.
21
+ - Bounds native download completion receipt waits and reports unverified
22
+ completion without repeating the download or switching strategies.
23
+ - Uses one journal-call deadline across queued admission and dispatch and
24
+ bounds concurrent turn evidence requests while preserving digest identities.
25
+ - Adds transactional live qualification with durable Send inspection, guarded
26
+ same-ID recovery, owned receipts and duplicate-submission checks.
27
+ - Preserves journal-unavailable and indeterminate-write results across Node
28
+ and Python through shared fixtures, with bounded transport and private reports.
29
+
30
+ ## 0.5.1-alpha.3
31
+
32
+ - Adds the transactional `operations.submit`, `collect`, `inspect`, `control`,
33
+ and `run` surface with durable request identity, monotonic mutation
34
+ boundaries, exact ownership, non-repetition, and redacted recovery receipts.
35
+ - Adds capability-aware runtime identity, correlated multiplexed backend
36
+ traffic, process-scoped tab coordination, bounded DOM/file/artifact
37
+ observation, and deterministic configuration restoration.
38
+ - Hardens browser acquisition and attachment input scoping, acts-then-throws
39
+ settlement, late deadline behavior, output path validation, journal quotas,
40
+ lifecycle controls, and visible blocker classification.
41
+ - Extends release-canary coverage with exact per-scenario tab cleanup and
42
+ independent Chat/Work/configuration postconditions; refreshes all four plugin
43
+ runtime bundles from the qualified source.
44
+
3
45
  ## 0.5.1-alpha.2
4
46
 
5
47
  - Adds confirmation-gated, fail-closed `messages.stop` lifecycle control with
package/README.md CHANGED
@@ -29,6 +29,49 @@ const result = await chatgpt.runner.run(reviewer, {
29
29
  });
30
30
  ```
31
31
 
32
+ ## Transactional operation preview
33
+
34
+ Supported Chat, Work, Runner, and Responses workflows accept an optional
35
+ caller-owned canonical UUID `operationId`. Supplying it opts that invocation
36
+ into durable submit-once recovery and exact-turn collection; omitting it keeps
37
+ the compatibility path.
38
+
39
+ ```ts
40
+ const result = await chatgpt.ask({
41
+ operationId: "123e4567-e89b-42d3-a456-426614174000",
42
+ prompt: "Summarize the visible thread.",
43
+ thread: { type: "conversationId", conversationId: "caller-owned-conversation-id" },
44
+ wait: false,
45
+ read: false
46
+ });
47
+ ```
48
+
49
+ The direct `chatgpt.operations` surface exposes `submit`, `collect`, `inspect`,
50
+ `control`, and SDK-composed `run`. Persist and reuse the fresh returned handle
51
+ after partial or uncertain results; never retry the same logical Send under a
52
+ new ID. `operations.inspect` is browser-free. Browser-touching calls fail
53
+ closed when bridge access, target evidence, or a required provider primitive
54
+ is unavailable. See
55
+ [Transactional browser operations](references/2026-08-16-transactional-operations.md)
56
+ for request schemas, concurrency, recovery, privacy, transport bounds, and the
57
+ stricter transactional artifact-provider capability matrix.
58
+
59
+ If the browser host lacks process identity, start `codex-chatgpt-control-journal`
60
+ in an ordinary Node terminal with `--state-root /absolute/private/state` and
61
+ `--directory /absolute/private/new-session`. Then configure
62
+ `operations: { journalService: { descriptorPath: "/absolute/private/new-session/connection.json" } }`
63
+ on the browser client. The explicit private-file connection keeps browser
64
+ control in the active host and durable journal authority in the Node process.
65
+ Keep the descriptor secret and reuse the same operation identity after any
66
+ uncertain write. See [the journal service runbook](references/2026-09-06-journal-service.md)
67
+ for startup, recovery and qualification. Without a configured service, an
68
+ unsupported local journal returns `journal_runtime_unavailable` before browser
69
+ work.
70
+
71
+ The private-file journal service supports macOS/Linux. On Windows it returns
72
+ `journal_rpc_unsupported_platform` before filesystem access; the existing local
73
+ Node journal path is unchanged.
74
+
32
75
  Inspect the visible surface and apply verified configuration:
33
76
 
34
77
  ```ts
@@ -1,8 +1,16 @@
1
1
  {
2
+ "backendSessionId": "fixture-backend-session",
3
+ "buildDigest": "unknown",
4
+ "cancellation": {
5
+ "requests": false,
6
+ "streams": false,
7
+ "supported": false
8
+ },
2
9
  "commands": [
3
10
  "backend.version",
4
11
  "backend.health",
5
12
  "backend.capabilities",
13
+ "backend.hello",
6
14
  "runner.run",
7
15
  "runner.plan",
8
16
  "runner.stream",
@@ -58,15 +66,46 @@
58
66
  "modes.set",
59
67
  "modes.get",
60
68
  "tools.select",
61
- "response.copy"
69
+ "response.copy",
70
+ "operations.submit",
71
+ "operations.collect",
72
+ "operations.inspect",
73
+ "operations.control"
62
74
  ],
75
+ "multiplexing": {
76
+ "streams": true,
77
+ "unary": true
78
+ },
79
+ "packageName": "codex-chatgpt-control",
80
+ "packageVersion": "unknown",
63
81
  "protocolVersion": "chatgpt.browser_control.backend_request.v1",
82
+ "requestIds": {
83
+ "required": true,
84
+ "scope": "connection"
85
+ },
86
+ "runtime": "node",
87
+ "runtimeVersion": "fixture-runtime",
64
88
  "streaming": {
65
89
  "modes": [
66
90
  "ndjson"
67
91
  ],
68
92
  "tokenDeltas": false
69
93
  },
94
+ "supportedProtocolVersions": [
95
+ "chatgpt.browser_control.backend_request.v1"
96
+ ],
97
+ "tabs": {
98
+ "authoritativeClaim": false,
99
+ "concurrent": false,
100
+ "concurrentTabs": false,
101
+ "coordination": false,
102
+ "coordinationScope": "none",
103
+ "fencing": false,
104
+ "stableBrowserIdentity": false,
105
+ "stableIdentity": false,
106
+ "stableProviderIdentity": false,
107
+ "stableTabIdentity": false
108
+ },
70
109
  "transports": [
71
110
  "stdio"
72
111
  ]
@@ -0,0 +1,21 @@
1
+ {
2
+ "schemaVersion": "chatgpt.browser_control.backend_compatibility.v1",
3
+ "status": "warning",
4
+ "mode": "multiplexed",
5
+ "protocolVersion": "chatgpt.browser_control.backend_request.v1",
6
+ "backendSessionId": "fixture-backend-session",
7
+ "packageName": "codex-chatgpt-control",
8
+ "packageVersion": "0.5.1-alpha.2",
9
+ "runtime": "node",
10
+ "runtimeVersion": "v22.14.0",
11
+ "buildDigest": "sha256:backend-build",
12
+ "warnings": [
13
+ {
14
+ "code": "build_digest_mismatch",
15
+ "field": "buildDigest",
16
+ "expected": "sha256:expected-build",
17
+ "received": "sha256:backend-build",
18
+ "message": "Backend build digest differs from the expected runtime (sha256:expected-build versus sha256:backend-build)."
19
+ }
20
+ ]
21
+ }
@@ -2,9 +2,14 @@
2
2
  "ok": true,
3
3
  "requestId": "req_backend_version",
4
4
  "result": {
5
+ "backendSessionId": "fixture-backend-session",
6
+ "buildDigest": "unknown",
5
7
  "name": "codex-chatgpt-control-backend",
8
+ "packageName": "codex-chatgpt-control",
9
+ "packageVersion": "unknown",
6
10
  "protocolVersion": "chatgpt.browser_control.backend_request.v1",
7
- "runtime": "node"
11
+ "runtime": "node",
12
+ "runtimeVersion": "fixture-runtime"
8
13
  },
9
14
  "schemaVersion": "chatgpt.browser_control.backend_response.v1"
10
15
  }
@@ -0,0 +1,22 @@
1
+ {
2
+ "result": {
3
+ "blocker": {
4
+ "code": "download_blocked_by_browser",
5
+ "kind": "download_unavailable",
6
+ "message": "Chrome displayed ERR_BLOCKED_BY_CLIENT during the download. Inspect the existing download and Chrome restrictions before retrying; completion is unverified.",
7
+ "resumable": false
8
+ },
9
+ "context": {
10
+ "timestamp": "2026-06-06T00:00:00.000Z"
11
+ },
12
+ "error": {
13
+ "message": "Chrome displayed ERR_BLOCKED_BY_CLIENT during the download. Inspect the existing download and Chrome restrictions before retrying; completion is unverified.",
14
+ "name": "DownloadBrowserBlockedError",
15
+ "recoverable": false
16
+ },
17
+ "ok": false,
18
+ "status": "blocked",
19
+ "warnings": []
20
+ },
21
+ "schemaVersion": "chatgpt.browser_control.command_result.v1"
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "result": {
3
+ "blocker": {
4
+ "code": "download_receipt_failed",
5
+ "kind": "download_unavailable",
6
+ "message": "The browser did not provide a verified download receipt. Inspect the existing download before retrying; completion is unverified.",
7
+ "resumable": false
8
+ },
9
+ "context": {
10
+ "timestamp": "2026-06-06T00:00:00.000Z"
11
+ },
12
+ "error": {
13
+ "message": "The browser did not provide a verified download receipt. Inspect the existing download before retrying; completion is unverified.",
14
+ "name": "DownloadReceiptFailedError",
15
+ "recoverable": false
16
+ },
17
+ "ok": false,
18
+ "status": "blocked",
19
+ "warnings": []
20
+ },
21
+ "schemaVersion": "chatgpt.browser_control.command_result.v1"
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "result": {
3
+ "blocker": {
4
+ "code": "download_receipt_timeout",
5
+ "kind": "download_unavailable",
6
+ "message": "Download event receipt did not complete before the deadline. Completion is unverified; inspect the existing download before retrying.",
7
+ "resumable": false
8
+ },
9
+ "context": {
10
+ "timestamp": "2026-06-06T00:00:00.000Z"
11
+ },
12
+ "error": {
13
+ "message": "Download event receipt did not complete before the deadline. Completion is unverified; inspect the existing download before retrying.",
14
+ "name": "DownloadReceiptTimeoutError",
15
+ "recoverable": false
16
+ },
17
+ "ok": false,
18
+ "status": "blocked",
19
+ "warnings": []
20
+ },
21
+ "schemaVersion": "chatgpt.browser_control.command_result.v1"
22
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "result": {
3
+ "blocker": {
4
+ "code": "journal_rpc_outcome_indeterminate",
5
+ "kind": "unknown",
6
+ "message": "The journal service connection ended without confirming a durable write. Preserve the operation identity and reconcile its state before any further browser action.",
7
+ "remediation": [
8
+ {
9
+ "instruction": "Restore the private journal-service connection, then inspect or reconcile the same operation identity. Never create a new operation ID to retry an uncertain Send.",
10
+ "label": "Reconnect the same journal",
11
+ "userActionRequired": false
12
+ }
13
+ ],
14
+ "resumable": false
15
+ },
16
+ "context": {
17
+ "timestamp": "2026-06-06T00:00:00.000Z"
18
+ },
19
+ "data": {
20
+ "operationId": "123e4567-e89b-42d3-a456-426614174000"
21
+ },
22
+ "error": {
23
+ "message": "The journal service connection ended without confirming a durable write. Preserve the operation identity and reconcile its state before any further browser action.",
24
+ "name": "OperationError",
25
+ "recoverable": false
26
+ },
27
+ "ok": false,
28
+ "status": "partial",
29
+ "warnings": []
30
+ },
31
+ "schemaVersion": "chatgpt.browser_control.command_result.v1"
32
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "result": {
3
+ "blocker": {
4
+ "code": "journal_rpc_unsupported_platform",
5
+ "kind": "unknown",
6
+ "message": "The private-file journal service requires POSIX file ownership and permissions and is unavailable on Windows.",
7
+ "remediation": [
8
+ {
9
+ "instruction": "On Windows, use the local journal in an ordinary Node browser host without operations.journalService. The private-file journal service requires a POSIX host. Preserve any existing operation identity.",
10
+ "label": "Use a supported journal host",
11
+ "userActionRequired": false
12
+ }
13
+ ],
14
+ "resumable": false
15
+ },
16
+ "context": {
17
+ "timestamp": "2026-06-06T00:00:00.000Z"
18
+ },
19
+ "data": {
20
+ "operationId": "123e4567-e89b-42d3-a456-426614174000"
21
+ },
22
+ "error": {
23
+ "message": "The private-file journal service requires POSIX file ownership and permissions and is unavailable on Windows.",
24
+ "name": "OperationError",
25
+ "recoverable": false
26
+ },
27
+ "ok": false,
28
+ "status": "blocked",
29
+ "warnings": []
30
+ },
31
+ "schemaVersion": "chatgpt.browser_control.command_result.v1"
32
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "result": {
3
+ "blocker": {
4
+ "code": "journal_runtime_unavailable",
5
+ "kind": "unknown",
6
+ "message": "Transactional operations require a Node host with process identity, file ownership, and process liveness APIs. This host cannot safely open the operation journal.",
7
+ "remediation": [
8
+ {
9
+ "instruction": "Start the packaged journal service in a supported Node host and configure operations.journalService.descriptorPath in the browser client.",
10
+ "label": "Use a supported transactional host",
11
+ "userActionRequired": false
12
+ }
13
+ ],
14
+ "resumable": false
15
+ },
16
+ "context": {
17
+ "timestamp": "2026-06-06T00:00:00.000Z"
18
+ },
19
+ "data": {
20
+ "operationId": "123e4567-e89b-42d3-a456-426614174000"
21
+ },
22
+ "error": {
23
+ "message": "Transactional operations require a Node host with process identity, file ownership, and process liveness APIs. This host cannot safely open the operation journal.",
24
+ "name": "OperationError",
25
+ "recoverable": false
26
+ },
27
+ "ok": false,
28
+ "status": "blocked",
29
+ "warnings": []
30
+ },
31
+ "schemaVersion": "chatgpt.browser_control.command_result.v1"
32
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "schemaVersion": "chatgpt.browser_control.operation_event.v1",
3
+ "revision": 5,
4
+ "previousEventDigest": "hmac-sha256:3333333333333333333333333333333333333333333333333333333333333333",
5
+ "eventDigest": "hmac-sha256:4444444444444444444444444444444444444444444444444444444444444444",
6
+ "event": {
7
+ "type": "action_prepared",
8
+ "action": {
9
+ "actionId": "33333333-3333-4333-8333-333333333333",
10
+ "kind": "send",
11
+ "repeatPolicy": "observe_only_after_intent",
12
+ "requestDigest": "hmac-sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
13
+ "targetDigest": "hmac-sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
14
+ },
15
+ "intentAt": "2026-08-16T00:00:01.000Z",
16
+ "baseline": {
17
+ "schemaVersion": "chatgpt.browser_control.operation_ownership_baseline.v1",
18
+ "operationId": "11111111-1111-4111-8111-111111111111",
19
+ "requestDigest": "hmac-sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
20
+ "targetBindingDigest": "hmac-sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
21
+ "actionId": "33333333-3333-4333-8333-333333333333",
22
+ "baseline": {
23
+ "schemaVersion": "chatgpt.browser_control.turn_ownership.v1",
24
+ "snapshotDigest": "hmac-sha256:1212121212121212121212121212121212121212121212121212121212121212",
25
+ "target": {
26
+ "provider": { "status": "available", "value": "chrome" },
27
+ "browser": { "status": "available", "value": "browser-1" },
28
+ "tab": { "status": "available", "value": "tab-1" },
29
+ "thread": { "status": "available", "value": "conversation-1" },
30
+ "conversation": { "status": "available", "value": "conversation-1" },
31
+ "canonicalThreadUrl": { "status": "available", "value": "https://chatgpt.com/c/sanitized" },
32
+ "authoritativeTabClaim": { "status": "unavailable", "reason": "not_exposed" },
33
+ "coordinationScope": "process"
34
+ },
35
+ "userTurns": [],
36
+ "assistantTurns": [],
37
+ "completeness": "complete"
38
+ },
39
+ "observedAt": "2026-08-16T00:00:01.000Z"
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "actionId": "33333333-3333-4333-8333-333333333333",
3
+ "kind": "file_handoff",
4
+ "repeatPolicy": "observe_only_after_intent",
5
+ "requestDigest": "hmac-sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
6
+ "targetDigest": "hmac-sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
7
+ "intentRevision": 4,
8
+ "intentAt": "2026-08-16T00:00:01.000Z",
9
+ "outcome": "satisfied",
10
+ "receiptRevision": 5,
11
+ "receiptAt": "2026-08-16T00:00:02.000Z",
12
+ "evidenceDigest": "hmac-sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
13
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "schemaVersion": "chatgpt.browser_control.operation_artifact_receipt.v1",
3
+ "operationId": "11111111-1111-4111-8111-111111111111",
4
+ "artifactKey": "artifact-0",
5
+ "assistantTurnId": "assistant-turn-1",
6
+ "sourceIdentityDigest": "hmac-sha256:abababababababababababababababababababababababababababababababab",
7
+ "kind": "file",
8
+ "ordinal": 0,
9
+ "outputKey": "operation-11111111-result.bin",
10
+ "mimeType": "application/octet-stream",
11
+ "bytes": 32,
12
+ "sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
13
+ "status": "transferred"
14
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "schemaVersion": "chatgpt.browser_control.operation_event.v1",
3
+ "revision": 5,
4
+ "previousEventDigest": "hmac-sha256:3333333333333333333333333333333333333333333333333333333333333333",
5
+ "eventDigest": "hmac-sha256:4444444444444444444444444444444444444444444444444444444444444444",
6
+ "event": {
7
+ "type": "artifact_transfer_intent",
8
+ "intent": {
9
+ "schemaVersion": "chatgpt.browser_control.artifact_transfer_intent.v1",
10
+ "operationId": "11111111-1111-4111-8111-111111111111",
11
+ "requestDigest": "hmac-sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
12
+ "targetBindingDigest": "hmac-sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
13
+ "assistantTurnId": "assistant-turn-1",
14
+ "sourceIdentityDigest": "hmac-sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
15
+ "kind": "file",
16
+ "ordinal": 0,
17
+ "transferActionId": "66666666-6666-4666-8666-666666666666",
18
+ "destinationIdentityDigest": "hmac-sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
19
+ "actionKind": "local_output_commit",
20
+ "repeatPolicy": "reconcile_local_effect",
21
+ "intentAt": "2026-08-16T00:00:03.000Z"
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "schemaVersion": "chatgpt.browser_control.operation_event.v1",
3
+ "revision": 6,
4
+ "previousEventDigest": "hmac-sha256:4444444444444444444444444444444444444444444444444444444444444444",
5
+ "eventDigest": "hmac-sha256:5555555555555555555555555555555555555555555555555555555555555555",
6
+ "event": {
7
+ "type": "artifact_transfer_receipt",
8
+ "receipt": {
9
+ "schemaVersion": "chatgpt.browser_control.artifact_transfer_receipt.v1",
10
+ "operationId": "11111111-1111-4111-8111-111111111111",
11
+ "requestDigest": "hmac-sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
12
+ "targetBindingDigest": "hmac-sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
13
+ "assistantTurnId": "assistant-turn-1",
14
+ "sourceIdentityDigest": "hmac-sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
15
+ "kind": "file",
16
+ "ordinal": 0,
17
+ "transferActionId": "66666666-6666-4666-8666-666666666666",
18
+ "destinationIdentityDigest": "hmac-sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
19
+ "outputKey": "artifact-transfer-1",
20
+ "bytes": 12,
21
+ "sha256": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
22
+ "status": "transferred",
23
+ "observedAt": "2026-08-16T00:00:04.000Z"
24
+ }
25
+ }
26
+ }