codex-chatgpt-control 0.1.0-alpha.1

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 (179) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/LICENSE +21 -0
  3. package/README.md +54 -0
  4. package/contracts/v1/fixtures/backend-capabilities.json +54 -0
  5. package/contracts/v1/fixtures/backend-error-event-missing-stream-input.json +10 -0
  6. package/contracts/v1/fixtures/backend-error-missing-run-input.json +10 -0
  7. package/contracts/v1/fixtures/backend-runner-plan-request.json +12 -0
  8. package/contracts/v1/fixtures/backend-version.json +10 -0
  9. package/contracts/v1/fixtures/command-descriptors.json +803 -0
  10. package/contracts/v1/fixtures/describe-runner-run.json +31 -0
  11. package/contracts/v1/fixtures/doctor-bridge-upload.json +34 -0
  12. package/contracts/v1/fixtures/help-root.json +6 -0
  13. package/contracts/v1/fixtures/named-plan-two-turn.json +39 -0
  14. package/contracts/v1/fixtures/output-json-parse-success.json +115 -0
  15. package/contracts/v1/fixtures/primitive-bootstrap-blocker.json +43 -0
  16. package/contracts/v1/fixtures/report-redaction-default.json +16 -0
  17. package/contracts/v1/fixtures/reports-create-redacted.json +16 -0
  18. package/contracts/v1/fixtures/reports-summarize-redacted.json +26 -0
  19. package/contracts/v1/fixtures/responses-basic-success.json +27 -0
  20. package/contracts/v1/fixtures/responses-hidden-instructions-unsupported.json +22 -0
  21. package/contracts/v1/fixtures/responses-unknown-field-unsupported.json +22 -0
  22. package/contracts/v1/fixtures/responses-unsupported-previous-response-id.json +22 -0
  23. package/contracts/v1/fixtures/responses-unsupported-temperature.json +22 -0
  24. package/contracts/v1/fixtures/run-basic-success.json +36 -0
  25. package/contracts/v1/fixtures/run-browser-bridge-blocker.json +180 -0
  26. package/contracts/v1/fixtures/run-file-attach-success.json +63 -0
  27. package/contracts/v1/fixtures/run-report-redacted.json +52 -0
  28. package/contracts/v1/fixtures/run-selector-drift-blocker.json +60 -0
  29. package/contracts/v1/fixtures/run-timeout-partial.json +81 -0
  30. package/contracts/v1/fixtures/run-two-turn-success.json +83 -0
  31. package/contracts/v1/fixtures/run-upload-permission-blocker.json +56 -0
  32. package/contracts/v1/fixtures/runner-budget-blocker.json +106 -0
  33. package/contracts/v1/fixtures/runner-full-agent-config.json +50 -0
  34. package/contracts/v1/fixtures/runner-input-items-and-files-plan.json +53 -0
  35. package/contracts/v1/fixtures/runner-metadata-only-plan.json +31 -0
  36. package/contracts/v1/fixtures/runner-visible-prefix-plan.json +28 -0
  37. package/contracts/v1/fixtures/runner-visible-setup-plan.json +37 -0
  38. package/contracts/v1/fixtures/stream-basic.ndjson +3 -0
  39. package/contracts/v1/fixtures/stream-blocked.ndjson +2 -0
  40. package/contracts/v1/fixtures/stream-submitted-completed.ndjson +3 -0
  41. package/contracts/v1/fixtures/workflow-ask-success.json +67 -0
  42. package/contracts/v1/manifest.json +210 -0
  43. package/contracts/v1/parity-suite.json +635 -0
  44. package/contracts/v1/schemas/agent.schema.json +52 -0
  45. package/contracts/v1/schemas/backend-event.schema.json +74 -0
  46. package/contracts/v1/schemas/backend-request.schema.json +59 -0
  47. package/contracts/v1/schemas/backend-response.schema.json +42 -0
  48. package/contracts/v1/schemas/capabilities.schema.json +33 -0
  49. package/contracts/v1/schemas/command-descriptor.schema.json +31 -0
  50. package/contracts/v1/schemas/command-result.schema.json +99 -0
  51. package/contracts/v1/schemas/manifest.schema.json +69 -0
  52. package/contracts/v1/schemas/response.schema.json +51 -0
  53. package/contracts/v1/schemas/run-result.schema.json +138 -0
  54. package/contracts/v1/schemas/sequence-plan.schema.json +44 -0
  55. package/contracts/v1/schemas/stream-event.schema.json +25 -0
  56. package/dist/codex-chatgpt-control-backend.mjs +5284 -0
  57. package/dist/codex-chatgpt-control.bundle.mjs +6013 -0
  58. package/dist/src/backend/client.d.ts +129 -0
  59. package/dist/src/backend/client.js +415 -0
  60. package/dist/src/backend/protocol.d.ts +74 -0
  61. package/dist/src/backend/protocol.js +128 -0
  62. package/dist/src/backend/session.d.ts +11 -0
  63. package/dist/src/backend/session.js +223 -0
  64. package/dist/src/backend/stdio-server.d.ts +9 -0
  65. package/dist/src/backend/stdio-server.js +88 -0
  66. package/dist/src/browser/attach.d.ts +8 -0
  67. package/dist/src/browser/attach.js +456 -0
  68. package/dist/src/browser/clipboard.d.ts +2 -0
  69. package/dist/src/browser/clipboard.js +26 -0
  70. package/dist/src/browser/downloads.d.ts +7 -0
  71. package/dist/src/browser/downloads.js +29 -0
  72. package/dist/src/browser/page-state.d.ts +17 -0
  73. package/dist/src/browser/page-state.js +66 -0
  74. package/dist/src/client.d.ts +167 -0
  75. package/dist/src/client.js +666 -0
  76. package/dist/src/commands/confirmations.d.ts +9 -0
  77. package/dist/src/commands/confirmations.js +33 -0
  78. package/dist/src/commands/context.d.ts +2 -0
  79. package/dist/src/commands/context.js +32 -0
  80. package/dist/src/commands/doctor.d.ts +16 -0
  81. package/dist/src/commands/doctor.js +120 -0
  82. package/dist/src/commands/files.d.ts +4 -0
  83. package/dist/src/commands/files.js +314 -0
  84. package/dist/src/commands/helpers.d.ts +16 -0
  85. package/dist/src/commands/helpers.js +128 -0
  86. package/dist/src/commands/messages.d.ts +16 -0
  87. package/dist/src/commands/messages.js +538 -0
  88. package/dist/src/commands/modes.d.ts +9 -0
  89. package/dist/src/commands/modes.js +323 -0
  90. package/dist/src/commands/output.d.ts +5 -0
  91. package/dist/src/commands/output.js +31 -0
  92. package/dist/src/commands/registry.d.ts +17 -0
  93. package/dist/src/commands/registry.js +275 -0
  94. package/dist/src/commands/reports.d.ts +14 -0
  95. package/dist/src/commands/reports.js +47 -0
  96. package/dist/src/commands/response-actions.d.ts +2 -0
  97. package/dist/src/commands/response-actions.js +141 -0
  98. package/dist/src/commands/sequence.d.ts +9 -0
  99. package/dist/src/commands/sequence.js +228 -0
  100. package/dist/src/commands/session.d.ts +2 -0
  101. package/dist/src/commands/session.js +25 -0
  102. package/dist/src/commands/threads.d.ts +6 -0
  103. package/dist/src/commands/threads.js +300 -0
  104. package/dist/src/dom/fixtures.d.ts +1 -0
  105. package/dist/src/dom/fixtures.js +8 -0
  106. package/dist/src/dom/menus.d.ts +8 -0
  107. package/dist/src/dom/menus.js +40 -0
  108. package/dist/src/dom/message-format.d.ts +30 -0
  109. package/dist/src/dom/message-format.js +593 -0
  110. package/dist/src/dom/messages.d.ts +40 -0
  111. package/dist/src/dom/messages.js +127 -0
  112. package/dist/src/dom/selectors.d.ts +20 -0
  113. package/dist/src/dom/selectors.js +72 -0
  114. package/dist/src/dom/visible-text.d.ts +5 -0
  115. package/dist/src/dom/visible-text.js +27 -0
  116. package/dist/src/errors.d.ts +32 -0
  117. package/dist/src/errors.js +127 -0
  118. package/dist/src/index.d.ts +34 -0
  119. package/dist/src/index.js +34 -0
  120. package/dist/src/logger.d.ts +15 -0
  121. package/dist/src/logger.js +25 -0
  122. package/dist/src/runner/agent.d.ts +2 -0
  123. package/dist/src/runner/agent.js +17 -0
  124. package/dist/src/runner/index.d.ts +7 -0
  125. package/dist/src/runner/index.js +7 -0
  126. package/dist/src/runner/interruptions.d.ts +3 -0
  127. package/dist/src/runner/interruptions.js +65 -0
  128. package/dist/src/runner/responses.d.ts +30 -0
  129. package/dist/src/runner/responses.js +171 -0
  130. package/dist/src/runner/result.d.ts +3 -0
  131. package/dist/src/runner/result.js +128 -0
  132. package/dist/src/runner/resume.d.ts +11 -0
  133. package/dist/src/runner/resume.js +26 -0
  134. package/dist/src/runner/stream.d.ts +13 -0
  135. package/dist/src/runner/stream.js +66 -0
  136. package/dist/src/runner/types.d.ts +264 -0
  137. package/dist/src/runner/types.js +1 -0
  138. package/dist/src/safety/blockers.d.ts +7 -0
  139. package/dist/src/safety/blockers.js +60 -0
  140. package/dist/src/safety/redaction.d.ts +2 -0
  141. package/dist/src/safety/redaction.js +18 -0
  142. package/dist/src/safety/report-redaction.d.ts +8 -0
  143. package/dist/src/safety/report-redaction.js +74 -0
  144. package/dist/src/safety/risk.d.ts +26 -0
  145. package/dist/src/safety/risk.js +28 -0
  146. package/dist/src/scripts/backend-server.d.ts +2 -0
  147. package/dist/src/scripts/backend-server.js +7 -0
  148. package/dist/src/scripts/check-parity-suite.d.ts +1 -0
  149. package/dist/src/scripts/check-parity-suite.js +10 -0
  150. package/dist/src/scripts/continue-thread.d.ts +27 -0
  151. package/dist/src/scripts/continue-thread.js +388 -0
  152. package/dist/src/scripts/live-smoke/harness.d.ts +11 -0
  153. package/dist/src/scripts/live-smoke/harness.js +151 -0
  154. package/dist/src/scripts/live-smoke/scenarios.d.ts +3 -0
  155. package/dist/src/scripts/live-smoke/scenarios.js +648 -0
  156. package/dist/src/scripts/live-smoke/types.d.ts +53 -0
  157. package/dist/src/scripts/live-smoke/types.js +1 -0
  158. package/dist/src/scripts/live-smoke-module.d.ts +3 -0
  159. package/dist/src/scripts/live-smoke-module.js +2 -0
  160. package/dist/src/scripts/live-smoke.d.ts +1 -0
  161. package/dist/src/scripts/live-smoke.js +54 -0
  162. package/dist/src/scripts/smoke-attach-file.d.ts +1 -0
  163. package/dist/src/scripts/smoke-attach-file.js +39 -0
  164. package/dist/src/scripts/smoke-hi.d.ts +1 -0
  165. package/dist/src/scripts/smoke-hi.js +25 -0
  166. package/dist/src/scripts/smoke-search-open-read.d.ts +1 -0
  167. package/dist/src/scripts/smoke-search-open-read.js +41 -0
  168. package/dist/src/testing/parity-suite.d.ts +12 -0
  169. package/dist/src/testing/parity-suite.js +213 -0
  170. package/dist/src/types.d.ts +495 -0
  171. package/dist/src/types.js +1 -0
  172. package/package.json +81 -0
  173. package/references/agents-runner.md +32 -0
  174. package/references/backend-protocol.md +238 -0
  175. package/references/python-parity.md +168 -0
  176. package/references/responses-adapter.md +28 -0
  177. package/references/safety.md +14 -0
  178. package/references/streaming.md +15 -0
  179. package/references/troubleshooting.md +91 -0
@@ -0,0 +1,180 @@
1
+ {
2
+ "result": {
3
+ "activeAgentName": "reviewer",
4
+ "blocker": {
5
+ "code": "codex_chrome_bridge_unavailable",
6
+ "kind": "browser_bridge_unavailable",
7
+ "message": "Codex cannot access the ChatGPT browser bridge from this backend process. In an ordinary shell this is expected; for a live Codex Chrome run, bootstrap the Chrome plugin runtime with setupBrowserRuntime({ globals: globalThis }) before using globalThis.agent.",
8
+ "remediation": [
9
+ {
10
+ "instruction": "Treat browser_bridge_unavailable from a plain shell as an expected protocol/blocker-path result, not proof that Chrome, ChatGPT, or the Codex extension is broken.",
11
+ "label": "Ordinary shell",
12
+ "userActionRequired": false
13
+ },
14
+ {
15
+ "instruction": "For a live run, initialize the Chrome plugin runtime in node_repl with setupBrowserRuntime({ globals: globalThis }), then set globalThis.browser = await agent.browsers.get(\"extension\") before calling createChatGPT({ agent: globalThis.agent }).",
16
+ "label": "Codex Chrome bootstrap",
17
+ "userActionRequired": false
18
+ },
19
+ {
20
+ "instruction": "For Python browser-bridge smokes, keep the bridge-hosted Node backend JS execution alive and run scripts/http_stdio_relay.mjs with CHATGPT_BROWSER_BACKEND_HTTP_URL; a plain Python-spawned Node subprocess cannot inherit globalThis.agent.",
21
+ "label": "Python live bridge",
22
+ "userActionRequired": false
23
+ },
24
+ {
25
+ "instruction": "If this command was already running inside a bootstrapped bridge host, verify the Codex Chrome extension is installed and enabled, then restart Chrome or Codex before retrying.",
26
+ "label": "Extension availability",
27
+ "userActionRequired": true
28
+ }
29
+ ]
30
+ },
31
+ "context": {
32
+ "timestamp": "2026-06-06T00:00:00.000Z"
33
+ },
34
+ "data": {
35
+ "outputText": ""
36
+ },
37
+ "error": {
38
+ "message": "Codex cannot access the ChatGPT browser bridge from this backend process. In an ordinary shell this is expected; for a live Codex Chrome run, bootstrap the Chrome plugin runtime with setupBrowserRuntime({ globals: globalThis }) before using globalThis.agent.",
39
+ "name": "BrowserBridgeUnavailableError",
40
+ "recoverable": true
41
+ },
42
+ "interruptions": [
43
+ {
44
+ "blocker": {
45
+ "code": "codex_chrome_bridge_unavailable",
46
+ "kind": "browser_bridge_unavailable",
47
+ "message": "Codex cannot access the ChatGPT browser bridge from this backend process. In an ordinary shell this is expected; for a live Codex Chrome run, bootstrap the Chrome plugin runtime with setupBrowserRuntime({ globals: globalThis }) before using globalThis.agent.",
48
+ "remediation": [
49
+ {
50
+ "instruction": "Treat browser_bridge_unavailable from a plain shell as an expected protocol/blocker-path result, not proof that Chrome, ChatGPT, or the Codex extension is broken.",
51
+ "label": "Ordinary shell",
52
+ "userActionRequired": false
53
+ },
54
+ {
55
+ "instruction": "For a live run, initialize the Chrome plugin runtime in node_repl with setupBrowserRuntime({ globals: globalThis }), then set globalThis.browser = await agent.browsers.get(\"extension\") before calling createChatGPT({ agent: globalThis.agent }).",
56
+ "label": "Codex Chrome bootstrap",
57
+ "userActionRequired": false
58
+ },
59
+ {
60
+ "instruction": "For Python browser-bridge smokes, keep the bridge-hosted Node backend JS execution alive and run scripts/http_stdio_relay.mjs with CHATGPT_BROWSER_BACKEND_HTTP_URL; a plain Python-spawned Node subprocess cannot inherit globalThis.agent.",
61
+ "label": "Python live bridge",
62
+ "userActionRequired": false
63
+ },
64
+ {
65
+ "instruction": "If this command was already running inside a bootstrapped bridge host, verify the Codex Chrome extension is installed and enabled, then restart Chrome or Codex before retrying.",
66
+ "label": "Extension availability",
67
+ "userActionRequired": true
68
+ }
69
+ ],
70
+ "resumable": false
71
+ },
72
+ "command": "session.bootstrap",
73
+ "fix": {
74
+ "steps": [
75
+ "Treat browser_bridge_unavailable from a plain shell as an expected protocol/blocker-path result, not proof that Chrome, ChatGPT, or the Codex extension is broken.",
76
+ "For a live run, initialize the Chrome plugin runtime in node_repl with setupBrowserRuntime({ globals: globalThis }), then set globalThis.browser = await agent.browsers.get(\"extension\") before calling createChatGPT({ agent: globalThis.agent }).",
77
+ "For Python browser-bridge smokes, keep the bridge-hosted Node backend JS execution alive and run scripts/http_stdio_relay.mjs with CHATGPT_BROWSER_BACKEND_HTTP_URL; a plain Python-spawned Node subprocess cannot inherit globalThis.agent.",
78
+ "If this command was already running inside a bootstrapped bridge host, verify the Codex Chrome extension is installed and enabled, then restart Chrome or Codex before retrying."
79
+ ],
80
+ "summary": "Resolve the reported blocker before resuming."
81
+ },
82
+ "id": "interruption_fixed",
83
+ "message": "Codex cannot access the ChatGPT browser bridge from this backend process. In an ordinary shell this is expected; for a live Codex Chrome run, bootstrap the Chrome plugin runtime with setupBrowserRuntime({ globals: globalThis }) before using globalThis.agent.",
84
+ "resume": {
85
+ "reason": "The underlying browser-control command did not mark this blocker as resumable.",
86
+ "supported": false
87
+ },
88
+ "status": "partial",
89
+ "type": "unsupported"
90
+ }
91
+ ],
92
+ "lastAgentName": "reviewer",
93
+ "newItems": [
94
+ {
95
+ "blocker": {
96
+ "code": "codex_chrome_bridge_unavailable",
97
+ "kind": "browser_bridge_unavailable",
98
+ "message": "Codex cannot access the ChatGPT browser bridge from this backend process. In an ordinary shell this is expected; for a live Codex Chrome run, bootstrap the Chrome plugin runtime with setupBrowserRuntime({ globals: globalThis }) before using globalThis.agent.",
99
+ "remediation": [
100
+ {
101
+ "instruction": "Treat browser_bridge_unavailable from a plain shell as an expected protocol/blocker-path result, not proof that Chrome, ChatGPT, or the Codex extension is broken.",
102
+ "label": "Ordinary shell",
103
+ "userActionRequired": false
104
+ },
105
+ {
106
+ "instruction": "For a live run, initialize the Chrome plugin runtime in node_repl with setupBrowserRuntime({ globals: globalThis }), then set globalThis.browser = await agent.browsers.get(\"extension\") before calling createChatGPT({ agent: globalThis.agent }).",
107
+ "label": "Codex Chrome bootstrap",
108
+ "userActionRequired": false
109
+ },
110
+ {
111
+ "instruction": "For Python browser-bridge smokes, keep the bridge-hosted Node backend JS execution alive and run scripts/http_stdio_relay.mjs with CHATGPT_BROWSER_BACKEND_HTTP_URL; a plain Python-spawned Node subprocess cannot inherit globalThis.agent.",
112
+ "label": "Python live bridge",
113
+ "userActionRequired": false
114
+ },
115
+ {
116
+ "instruction": "If this command was already running inside a bootstrapped bridge host, verify the Codex Chrome extension is installed and enabled, then restart Chrome or Codex before retrying.",
117
+ "label": "Extension availability",
118
+ "userActionRequired": true
119
+ }
120
+ ],
121
+ "resumable": false
122
+ },
123
+ "type": "run.blocked"
124
+ }
125
+ ],
126
+ "ok": false,
127
+ "output": [
128
+ {
129
+ "blocker": {
130
+ "code": "codex_chrome_bridge_unavailable",
131
+ "kind": "browser_bridge_unavailable",
132
+ "message": "Codex cannot access the ChatGPT browser bridge from this backend process. In an ordinary shell this is expected; for a live Codex Chrome run, bootstrap the Chrome plugin runtime with setupBrowserRuntime({ globals: globalThis }) before using globalThis.agent.",
133
+ "remediation": [
134
+ {
135
+ "instruction": "Treat browser_bridge_unavailable from a plain shell as an expected protocol/blocker-path result, not proof that Chrome, ChatGPT, or the Codex extension is broken.",
136
+ "label": "Ordinary shell",
137
+ "userActionRequired": false
138
+ },
139
+ {
140
+ "instruction": "For a live run, initialize the Chrome plugin runtime in node_repl with setupBrowserRuntime({ globals: globalThis }), then set globalThis.browser = await agent.browsers.get(\"extension\") before calling createChatGPT({ agent: globalThis.agent }).",
141
+ "label": "Codex Chrome bootstrap",
142
+ "userActionRequired": false
143
+ },
144
+ {
145
+ "instruction": "For Python browser-bridge smokes, keep the bridge-hosted Node backend JS execution alive and run scripts/http_stdio_relay.mjs with CHATGPT_BROWSER_BACKEND_HTTP_URL; a plain Python-spawned Node subprocess cannot inherit globalThis.agent.",
146
+ "label": "Python live bridge",
147
+ "userActionRequired": false
148
+ },
149
+ {
150
+ "instruction": "If this command was already running inside a bootstrapped bridge host, verify the Codex Chrome extension is installed and enabled, then restart Chrome or Codex before retrying.",
151
+ "label": "Extension availability",
152
+ "userActionRequired": true
153
+ }
154
+ ],
155
+ "resumable": false
156
+ },
157
+ "type": "run.blocked"
158
+ }
159
+ ],
160
+ "output_text": "",
161
+ "state": {
162
+ "id": "run_fixed",
163
+ "resumable": false
164
+ },
165
+ "status": "partial",
166
+ "steps": [
167
+ {
168
+ "command": "session.bootstrap",
169
+ "endedAt": "2026-06-06T00:00:00.000Z",
170
+ "id": "bootstrap",
171
+ "ok": false,
172
+ "startedAt": "2026-06-06T00:00:00.000Z",
173
+ "status": "blocked",
174
+ "warnings": []
175
+ }
176
+ ],
177
+ "warnings": []
178
+ },
179
+ "schemaVersion": "chatgpt.browser_control.run_result.v1"
180
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "schemaVersion": "chatgpt.browser_control.run_result.v1",
3
+ "result": {
4
+ "ok": true,
5
+ "status": "ok",
6
+ "output_text": "I reviewed brief.md.",
7
+ "finalOutput": "I reviewed brief.md.",
8
+ "output": [
9
+ {
10
+ "type": "thread.opened",
11
+ "thread": {
12
+ "url": "https://chatgpt.com/c/example-file",
13
+ "conversationId": "example-file"
14
+ }
15
+ },
16
+ {
17
+ "type": "file.attached",
18
+ "file": {
19
+ "path": "[redacted]/brief.md",
20
+ "name": "brief.md",
21
+ "bytes": 1842
22
+ }
23
+ },
24
+ {
25
+ "type": "message.completed",
26
+ "role": "assistant",
27
+ "output_text": "I reviewed brief.md.",
28
+ "format": "markdown"
29
+ }
30
+ ],
31
+ "newItems": [
32
+ {
33
+ "type": "file.attached",
34
+ "file": {
35
+ "path": "[redacted]/brief.md",
36
+ "name": "brief.md",
37
+ "bytes": 1842
38
+ }
39
+ },
40
+ {
41
+ "type": "message.completed",
42
+ "role": "assistant",
43
+ "output_text": "I reviewed brief.md.",
44
+ "format": "markdown"
45
+ }
46
+ ],
47
+ "interruptions": [],
48
+ "state": {
49
+ "id": "state-file-success",
50
+ "resumable": false,
51
+ "thread": {
52
+ "url": "https://chatgpt.com/c/example-file",
53
+ "conversationId": "example-file"
54
+ }
55
+ },
56
+ "activeAgentName": "reviewer",
57
+ "lastAgentName": "reviewer",
58
+ "warnings": [],
59
+ "context": {
60
+ "timestamp": "2026-06-05T00:00:00.000Z"
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "schemaVersion": "chatgpt.browser_control.run_result.v1",
3
+ "result": {
4
+ "ok": true,
5
+ "status": "ok",
6
+ "output_text": "Report written.",
7
+ "finalOutput": "Report written.",
8
+ "output": [
9
+ {
10
+ "type": "message.submitted",
11
+ "role": "user",
12
+ "preview": "[redacted]",
13
+ "redacted": true
14
+ },
15
+ {
16
+ "type": "report.created",
17
+ "path": "reports/runs/redacted-run.json",
18
+ "contentPolicy": {
19
+ "includeContent": false,
20
+ "maxPreviewChars": 0,
21
+ "redacted": true
22
+ }
23
+ }
24
+ ],
25
+ "newItems": [
26
+ {
27
+ "type": "report.created",
28
+ "path": "reports/runs/redacted-run.json",
29
+ "contentPolicy": {
30
+ "includeContent": false,
31
+ "maxPreviewChars": 0,
32
+ "redacted": true
33
+ }
34
+ }
35
+ ],
36
+ "interruptions": [],
37
+ "state": {
38
+ "id": "state-report-redacted",
39
+ "resumable": false
40
+ },
41
+ "activeAgentName": "reporter",
42
+ "lastAgentName": "reporter",
43
+ "warnings": [],
44
+ "reportPath": "reports/runs/redacted-run.json",
45
+ "data": {
46
+ "reportPath": "reports/runs/redacted-run.json"
47
+ },
48
+ "context": {
49
+ "timestamp": "2026-06-05T00:00:00.000Z"
50
+ }
51
+ }
52
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "schemaVersion": "chatgpt.browser_control.run_result.v1",
3
+ "result": {
4
+ "ok": false,
5
+ "status": "unsupported",
6
+ "output_text": "",
7
+ "output": [
8
+ {
9
+ "type": "run.blocked",
10
+ "blocker": {
11
+ "kind": "selector_drift",
12
+ "message": "No unique visible ChatGPT mode matched the requested label.",
13
+ "candidates": [
14
+ {
15
+ "label": "Auto"
16
+ },
17
+ {
18
+ "label": "Extended"
19
+ }
20
+ ]
21
+ }
22
+ }
23
+ ],
24
+ "newItems": [],
25
+ "interruptions": [
26
+ {
27
+ "id": "interrupt-selector-drift",
28
+ "type": "selector_drift",
29
+ "status": "unsupported",
30
+ "message": "No unique visible ChatGPT mode matched the requested label.",
31
+ "resume": {
32
+ "supported": false,
33
+ "reason": "Visible candidate selection must be resolved by the caller."
34
+ }
35
+ }
36
+ ],
37
+ "state": {
38
+ "id": "state-selector-drift",
39
+ "resumable": false
40
+ },
41
+ "activeAgentName": "reviewer",
42
+ "lastAgentName": "reviewer",
43
+ "warnings": [],
44
+ "blocker": {
45
+ "kind": "selector_drift",
46
+ "message": "No unique visible ChatGPT mode matched the requested label.",
47
+ "candidates": [
48
+ {
49
+ "label": "Auto"
50
+ },
51
+ {
52
+ "label": "Extended"
53
+ }
54
+ ]
55
+ },
56
+ "context": {
57
+ "timestamp": "2026-06-05T00:00:00.000Z"
58
+ }
59
+ }
60
+ }
@@ -0,0 +1,81 @@
1
+ {
2
+ "schemaVersion": "chatgpt.browser_control.run_result.v1",
3
+ "result": {
4
+ "ok": false,
5
+ "status": "partial",
6
+ "output_text": "Partial assistant text captured before timeout.",
7
+ "finalOutput": "Partial assistant text captured before timeout.",
8
+ "output": [
9
+ {
10
+ "type": "thread.opened",
11
+ "thread": {
12
+ "url": "https://chatgpt.com/c/example-timeout",
13
+ "conversationId": "example-timeout"
14
+ }
15
+ },
16
+ {
17
+ "type": "message.submitted",
18
+ "role": "user",
19
+ "preview": "[redacted]",
20
+ "redacted": true
21
+ },
22
+ {
23
+ "type": "message.completed",
24
+ "role": "assistant",
25
+ "output_text": "Partial assistant text captured before timeout.",
26
+ "format": "markdown"
27
+ }
28
+ ],
29
+ "newItems": [
30
+ {
31
+ "type": "message.completed",
32
+ "role": "assistant",
33
+ "output_text": "Partial assistant text captured before timeout.",
34
+ "format": "markdown"
35
+ }
36
+ ],
37
+ "interruptions": [
38
+ {
39
+ "id": "interrupt-timeout",
40
+ "type": "timeout",
41
+ "status": "timeout",
42
+ "message": "The assistant response did not stabilize before the configured timeout.",
43
+ "resume": {
44
+ "supported": true,
45
+ "stateId": "state-timeout-partial"
46
+ }
47
+ }
48
+ ],
49
+ "state": {
50
+ "id": "state-timeout-partial",
51
+ "resumable": true,
52
+ "thread": {
53
+ "url": "https://chatgpt.com/c/example-timeout",
54
+ "conversationId": "example-timeout"
55
+ },
56
+ "nextStepId": "read-latest"
57
+ },
58
+ "activeAgentName": "reviewer",
59
+ "lastAgentName": "reviewer",
60
+ "warnings": [
61
+ "Response may still be generating in the visible ChatGPT thread."
62
+ ],
63
+ "steps": [
64
+ {
65
+ "id": "open",
66
+ "command": "threads.open",
67
+ "status": "ok",
68
+ "ok": true
69
+ },
70
+ {
71
+ "id": "ask",
72
+ "command": "messages.ask",
73
+ "status": "timeout",
74
+ "ok": false
75
+ }
76
+ ],
77
+ "context": {
78
+ "timestamp": "2026-06-05T00:00:00.000Z"
79
+ }
80
+ }
81
+ }
@@ -0,0 +1,83 @@
1
+ {
2
+ "schemaVersion": "chatgpt.browser_control.run_result.v1",
3
+ "result": {
4
+ "ok": true,
5
+ "status": "ok",
6
+ "output_text": "second answer",
7
+ "finalOutput": "second answer",
8
+ "output": [
9
+ {
10
+ "type": "thread.opened",
11
+ "thread": {
12
+ "url": "https://chatgpt.com/c/example-two-turn",
13
+ "conversationId": "example-two-turn"
14
+ }
15
+ },
16
+ {
17
+ "type": "message.submitted",
18
+ "role": "user",
19
+ "preview": "first",
20
+ "redacted": false
21
+ },
22
+ {
23
+ "type": "message.completed",
24
+ "role": "assistant",
25
+ "output_text": "first answer",
26
+ "format": "markdown"
27
+ },
28
+ {
29
+ "type": "message.submitted",
30
+ "role": "user",
31
+ "preview": "second",
32
+ "redacted": false
33
+ },
34
+ {
35
+ "type": "message.completed",
36
+ "role": "assistant",
37
+ "output_text": "second answer",
38
+ "format": "markdown"
39
+ }
40
+ ],
41
+ "newItems": [
42
+ {
43
+ "type": "message.submitted",
44
+ "role": "user",
45
+ "preview": "first",
46
+ "redacted": false
47
+ },
48
+ {
49
+ "type": "message.completed",
50
+ "role": "assistant",
51
+ "output_text": "first answer",
52
+ "format": "markdown"
53
+ },
54
+ {
55
+ "type": "message.submitted",
56
+ "role": "user",
57
+ "preview": "second",
58
+ "redacted": false
59
+ },
60
+ {
61
+ "type": "message.completed",
62
+ "role": "assistant",
63
+ "output_text": "second answer",
64
+ "format": "markdown"
65
+ }
66
+ ],
67
+ "interruptions": [],
68
+ "state": {
69
+ "id": "state-two-turn-success",
70
+ "resumable": false,
71
+ "thread": {
72
+ "url": "https://chatgpt.com/c/example-two-turn",
73
+ "conversationId": "example-two-turn"
74
+ }
75
+ },
76
+ "activeAgentName": "reviewer",
77
+ "lastAgentName": "reviewer",
78
+ "warnings": [],
79
+ "context": {
80
+ "timestamp": "2026-06-05T00:00:00.000Z"
81
+ }
82
+ }
83
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "schemaVersion": "chatgpt.browser_control.run_result.v1",
3
+ "result": {
4
+ "ok": false,
5
+ "status": "blocked",
6
+ "output_text": "",
7
+ "output": [
8
+ {
9
+ "type": "run.blocked",
10
+ "blocker": {
11
+ "kind": "permission",
12
+ "message": "A browser or ChatGPT permission is required before continuing."
13
+ }
14
+ }
15
+ ],
16
+ "newItems": [],
17
+ "interruptions": [
18
+ {
19
+ "id": "interrupt-upload-permission",
20
+ "type": "permission_required",
21
+ "status": "blocked",
22
+ "message": "A browser or ChatGPT permission is required before continuing.",
23
+ "resume": {
24
+ "supported": false,
25
+ "reason": "The user must update local browser or Codex permission settings."
26
+ }
27
+ }
28
+ ],
29
+ "state": {
30
+ "id": "state-upload-permission",
31
+ "resumable": false
32
+ },
33
+ "activeAgentName": "reviewer",
34
+ "lastAgentName": "reviewer",
35
+ "warnings": [],
36
+ "blocker": {
37
+ "kind": "permission",
38
+ "message": "A browser or ChatGPT permission is required before continuing.",
39
+ "remediation": [
40
+ {
41
+ "label": "Enable Codex upload permission",
42
+ "instruction": "Open Codex Settings > Computer Use > Chrome > Permissions and set Uploads to Always allow.",
43
+ "userActionRequired": true
44
+ },
45
+ {
46
+ "label": "Allow Chrome extension file URLs",
47
+ "instruction": "Open chrome://extensions, select the Codex extension, and enable Allow access to file URLs.",
48
+ "userActionRequired": true
49
+ }
50
+ ]
51
+ },
52
+ "context": {
53
+ "timestamp": "2026-06-05T00:00:00.000Z"
54
+ }
55
+ }
56
+ }