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.
- package/CHANGELOG.md +5 -0
- package/LICENSE +21 -0
- package/README.md +54 -0
- package/contracts/v1/fixtures/backend-capabilities.json +54 -0
- package/contracts/v1/fixtures/backend-error-event-missing-stream-input.json +10 -0
- package/contracts/v1/fixtures/backend-error-missing-run-input.json +10 -0
- package/contracts/v1/fixtures/backend-runner-plan-request.json +12 -0
- package/contracts/v1/fixtures/backend-version.json +10 -0
- package/contracts/v1/fixtures/command-descriptors.json +803 -0
- package/contracts/v1/fixtures/describe-runner-run.json +31 -0
- package/contracts/v1/fixtures/doctor-bridge-upload.json +34 -0
- package/contracts/v1/fixtures/help-root.json +6 -0
- package/contracts/v1/fixtures/named-plan-two-turn.json +39 -0
- package/contracts/v1/fixtures/output-json-parse-success.json +115 -0
- package/contracts/v1/fixtures/primitive-bootstrap-blocker.json +43 -0
- package/contracts/v1/fixtures/report-redaction-default.json +16 -0
- package/contracts/v1/fixtures/reports-create-redacted.json +16 -0
- package/contracts/v1/fixtures/reports-summarize-redacted.json +26 -0
- package/contracts/v1/fixtures/responses-basic-success.json +27 -0
- package/contracts/v1/fixtures/responses-hidden-instructions-unsupported.json +22 -0
- package/contracts/v1/fixtures/responses-unknown-field-unsupported.json +22 -0
- package/contracts/v1/fixtures/responses-unsupported-previous-response-id.json +22 -0
- package/contracts/v1/fixtures/responses-unsupported-temperature.json +22 -0
- package/contracts/v1/fixtures/run-basic-success.json +36 -0
- package/contracts/v1/fixtures/run-browser-bridge-blocker.json +180 -0
- package/contracts/v1/fixtures/run-file-attach-success.json +63 -0
- package/contracts/v1/fixtures/run-report-redacted.json +52 -0
- package/contracts/v1/fixtures/run-selector-drift-blocker.json +60 -0
- package/contracts/v1/fixtures/run-timeout-partial.json +81 -0
- package/contracts/v1/fixtures/run-two-turn-success.json +83 -0
- package/contracts/v1/fixtures/run-upload-permission-blocker.json +56 -0
- package/contracts/v1/fixtures/runner-budget-blocker.json +106 -0
- package/contracts/v1/fixtures/runner-full-agent-config.json +50 -0
- package/contracts/v1/fixtures/runner-input-items-and-files-plan.json +53 -0
- package/contracts/v1/fixtures/runner-metadata-only-plan.json +31 -0
- package/contracts/v1/fixtures/runner-visible-prefix-plan.json +28 -0
- package/contracts/v1/fixtures/runner-visible-setup-plan.json +37 -0
- package/contracts/v1/fixtures/stream-basic.ndjson +3 -0
- package/contracts/v1/fixtures/stream-blocked.ndjson +2 -0
- package/contracts/v1/fixtures/stream-submitted-completed.ndjson +3 -0
- package/contracts/v1/fixtures/workflow-ask-success.json +67 -0
- package/contracts/v1/manifest.json +210 -0
- package/contracts/v1/parity-suite.json +635 -0
- package/contracts/v1/schemas/agent.schema.json +52 -0
- package/contracts/v1/schemas/backend-event.schema.json +74 -0
- package/contracts/v1/schemas/backend-request.schema.json +59 -0
- package/contracts/v1/schemas/backend-response.schema.json +42 -0
- package/contracts/v1/schemas/capabilities.schema.json +33 -0
- package/contracts/v1/schemas/command-descriptor.schema.json +31 -0
- package/contracts/v1/schemas/command-result.schema.json +99 -0
- package/contracts/v1/schemas/manifest.schema.json +69 -0
- package/contracts/v1/schemas/response.schema.json +51 -0
- package/contracts/v1/schemas/run-result.schema.json +138 -0
- package/contracts/v1/schemas/sequence-plan.schema.json +44 -0
- package/contracts/v1/schemas/stream-event.schema.json +25 -0
- package/dist/codex-chatgpt-control-backend.mjs +5284 -0
- package/dist/codex-chatgpt-control.bundle.mjs +6013 -0
- package/dist/src/backend/client.d.ts +129 -0
- package/dist/src/backend/client.js +415 -0
- package/dist/src/backend/protocol.d.ts +74 -0
- package/dist/src/backend/protocol.js +128 -0
- package/dist/src/backend/session.d.ts +11 -0
- package/dist/src/backend/session.js +223 -0
- package/dist/src/backend/stdio-server.d.ts +9 -0
- package/dist/src/backend/stdio-server.js +88 -0
- package/dist/src/browser/attach.d.ts +8 -0
- package/dist/src/browser/attach.js +456 -0
- package/dist/src/browser/clipboard.d.ts +2 -0
- package/dist/src/browser/clipboard.js +26 -0
- package/dist/src/browser/downloads.d.ts +7 -0
- package/dist/src/browser/downloads.js +29 -0
- package/dist/src/browser/page-state.d.ts +17 -0
- package/dist/src/browser/page-state.js +66 -0
- package/dist/src/client.d.ts +167 -0
- package/dist/src/client.js +666 -0
- package/dist/src/commands/confirmations.d.ts +9 -0
- package/dist/src/commands/confirmations.js +33 -0
- package/dist/src/commands/context.d.ts +2 -0
- package/dist/src/commands/context.js +32 -0
- package/dist/src/commands/doctor.d.ts +16 -0
- package/dist/src/commands/doctor.js +120 -0
- package/dist/src/commands/files.d.ts +4 -0
- package/dist/src/commands/files.js +314 -0
- package/dist/src/commands/helpers.d.ts +16 -0
- package/dist/src/commands/helpers.js +128 -0
- package/dist/src/commands/messages.d.ts +16 -0
- package/dist/src/commands/messages.js +538 -0
- package/dist/src/commands/modes.d.ts +9 -0
- package/dist/src/commands/modes.js +323 -0
- package/dist/src/commands/output.d.ts +5 -0
- package/dist/src/commands/output.js +31 -0
- package/dist/src/commands/registry.d.ts +17 -0
- package/dist/src/commands/registry.js +275 -0
- package/dist/src/commands/reports.d.ts +14 -0
- package/dist/src/commands/reports.js +47 -0
- package/dist/src/commands/response-actions.d.ts +2 -0
- package/dist/src/commands/response-actions.js +141 -0
- package/dist/src/commands/sequence.d.ts +9 -0
- package/dist/src/commands/sequence.js +228 -0
- package/dist/src/commands/session.d.ts +2 -0
- package/dist/src/commands/session.js +25 -0
- package/dist/src/commands/threads.d.ts +6 -0
- package/dist/src/commands/threads.js +300 -0
- package/dist/src/dom/fixtures.d.ts +1 -0
- package/dist/src/dom/fixtures.js +8 -0
- package/dist/src/dom/menus.d.ts +8 -0
- package/dist/src/dom/menus.js +40 -0
- package/dist/src/dom/message-format.d.ts +30 -0
- package/dist/src/dom/message-format.js +593 -0
- package/dist/src/dom/messages.d.ts +40 -0
- package/dist/src/dom/messages.js +127 -0
- package/dist/src/dom/selectors.d.ts +20 -0
- package/dist/src/dom/selectors.js +72 -0
- package/dist/src/dom/visible-text.d.ts +5 -0
- package/dist/src/dom/visible-text.js +27 -0
- package/dist/src/errors.d.ts +32 -0
- package/dist/src/errors.js +127 -0
- package/dist/src/index.d.ts +34 -0
- package/dist/src/index.js +34 -0
- package/dist/src/logger.d.ts +15 -0
- package/dist/src/logger.js +25 -0
- package/dist/src/runner/agent.d.ts +2 -0
- package/dist/src/runner/agent.js +17 -0
- package/dist/src/runner/index.d.ts +7 -0
- package/dist/src/runner/index.js +7 -0
- package/dist/src/runner/interruptions.d.ts +3 -0
- package/dist/src/runner/interruptions.js +65 -0
- package/dist/src/runner/responses.d.ts +30 -0
- package/dist/src/runner/responses.js +171 -0
- package/dist/src/runner/result.d.ts +3 -0
- package/dist/src/runner/result.js +128 -0
- package/dist/src/runner/resume.d.ts +11 -0
- package/dist/src/runner/resume.js +26 -0
- package/dist/src/runner/stream.d.ts +13 -0
- package/dist/src/runner/stream.js +66 -0
- package/dist/src/runner/types.d.ts +264 -0
- package/dist/src/runner/types.js +1 -0
- package/dist/src/safety/blockers.d.ts +7 -0
- package/dist/src/safety/blockers.js +60 -0
- package/dist/src/safety/redaction.d.ts +2 -0
- package/dist/src/safety/redaction.js +18 -0
- package/dist/src/safety/report-redaction.d.ts +8 -0
- package/dist/src/safety/report-redaction.js +74 -0
- package/dist/src/safety/risk.d.ts +26 -0
- package/dist/src/safety/risk.js +28 -0
- package/dist/src/scripts/backend-server.d.ts +2 -0
- package/dist/src/scripts/backend-server.js +7 -0
- package/dist/src/scripts/check-parity-suite.d.ts +1 -0
- package/dist/src/scripts/check-parity-suite.js +10 -0
- package/dist/src/scripts/continue-thread.d.ts +27 -0
- package/dist/src/scripts/continue-thread.js +388 -0
- package/dist/src/scripts/live-smoke/harness.d.ts +11 -0
- package/dist/src/scripts/live-smoke/harness.js +151 -0
- package/dist/src/scripts/live-smoke/scenarios.d.ts +3 -0
- package/dist/src/scripts/live-smoke/scenarios.js +648 -0
- package/dist/src/scripts/live-smoke/types.d.ts +53 -0
- package/dist/src/scripts/live-smoke/types.js +1 -0
- package/dist/src/scripts/live-smoke-module.d.ts +3 -0
- package/dist/src/scripts/live-smoke-module.js +2 -0
- package/dist/src/scripts/live-smoke.d.ts +1 -0
- package/dist/src/scripts/live-smoke.js +54 -0
- package/dist/src/scripts/smoke-attach-file.d.ts +1 -0
- package/dist/src/scripts/smoke-attach-file.js +39 -0
- package/dist/src/scripts/smoke-hi.d.ts +1 -0
- package/dist/src/scripts/smoke-hi.js +25 -0
- package/dist/src/scripts/smoke-search-open-read.d.ts +1 -0
- package/dist/src/scripts/smoke-search-open-read.js +41 -0
- package/dist/src/testing/parity-suite.d.ts +12 -0
- package/dist/src/testing/parity-suite.js +213 -0
- package/dist/src/types.d.ts +495 -0
- package/dist/src/types.js +1 -0
- package/package.json +81 -0
- package/references/agents-runner.md +32 -0
- package/references/backend-protocol.md +238 -0
- package/references/python-parity.md +168 -0
- package/references/responses-adapter.md +28 -0
- package/references/safety.md +14 -0
- package/references/streaming.md +15 -0
- package/references/troubleshooting.md +91 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"args": {
|
|
3
|
+
"existingTab": "true or explicit policy to claim a user-open Chrome tab instead of opening a replacement",
|
|
4
|
+
"prompt": "message to send or workflow-specific input",
|
|
5
|
+
"report": "optional redacted report settings",
|
|
6
|
+
"thread": "optional thread selector"
|
|
7
|
+
},
|
|
8
|
+
"blockers": [
|
|
9
|
+
"browser_bridge_unavailable",
|
|
10
|
+
"login_required",
|
|
11
|
+
"captcha",
|
|
12
|
+
"rate_limit",
|
|
13
|
+
"selector_drift"
|
|
14
|
+
],
|
|
15
|
+
"defaults": {
|
|
16
|
+
"read": {
|
|
17
|
+
"format": "markdown"
|
|
18
|
+
},
|
|
19
|
+
"wait": true
|
|
20
|
+
},
|
|
21
|
+
"defaultTimeoutMs": 120000,
|
|
22
|
+
"examples": [
|
|
23
|
+
"const agent = chatgpt.agent({ name: \"reviewer\", instructions: \"Review deeply.\" }); await chatgpt.runner.run(agent, { input: \"Review this.\", thread: { type: \"new\" } });",
|
|
24
|
+
"await chatgpt.runner.run(agent, { input: \"Continue.\", thread: { type: \"url\", url: \"https://chatgpt.com/c/<conversation-id>\" }, existingTab: true });"
|
|
25
|
+
],
|
|
26
|
+
"layer": "workflow",
|
|
27
|
+
"name": "runner.run",
|
|
28
|
+
"retryPolicy": "Return structured CommandResult failures; do not resubmit prompts unless the sequence policy permits unmatched-turn recovery.",
|
|
29
|
+
"risk": "medium",
|
|
30
|
+
"summary": "Agents-style facade: run a visible ChatGPT browser-control agent against input, files, thread, existing-tab, mode, and response options."
|
|
31
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"result": {
|
|
3
|
+
"context": {
|
|
4
|
+
"timestamp": "2026-06-06T00:00:00.000Z"
|
|
5
|
+
},
|
|
6
|
+
"data": {
|
|
7
|
+
"checks": {
|
|
8
|
+
"bridge": {
|
|
9
|
+
"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.",
|
|
10
|
+
"remediation": [
|
|
11
|
+
"Ordinary shell: 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.",
|
|
12
|
+
"Codex Chrome bootstrap: 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 }).",
|
|
13
|
+
"Python live bridge: 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.",
|
|
14
|
+
"Extension availability: 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."
|
|
15
|
+
],
|
|
16
|
+
"status": "blocked"
|
|
17
|
+
},
|
|
18
|
+
"upload": {
|
|
19
|
+
"message": "Upload readiness requires a bootstrapped ChatGPT page.",
|
|
20
|
+
"remediation": [
|
|
21
|
+
"Codex Settings > Computer Use > Chrome > Permissions > Uploads: set to Always allow, or add chatgpt.com to the allowed upload domains.",
|
|
22
|
+
"Chrome chrome://extensions > Codex extension > Details: enable Allow access to file URLs."
|
|
23
|
+
],
|
|
24
|
+
"status": "unknown"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"ready": false
|
|
28
|
+
},
|
|
29
|
+
"ok": true,
|
|
30
|
+
"status": "ok",
|
|
31
|
+
"warnings": []
|
|
32
|
+
},
|
|
33
|
+
"schemaVersion": "chatgpt.browser_control.command_result.v1"
|
|
34
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"ok": true,
|
|
3
|
+
"requestId": "req_help",
|
|
4
|
+
"result": "ChatGPT browser-control SDK commands\n\nworkflow:\n- ask: Ask ChatGPT in a new or selected thread, optionally with files, wait/read, downloads, and reports.\n- askInThread: Open or claim an existing thread by URL, conversation id, title, or search query, then ask and read.\n- askWithFiles: Attach absolute local file paths, optionally set mode, ask, wait, and read.\n- askAndDownload: Ask ChatGPT to produce a visible downloadable output and save the latest exposed file.\n- runMessages: Run sequential prompts where later prompts can use earlier step data.\n- runner.run: Agents-style facade: run a visible ChatGPT browser-control agent against input, files, thread, existing-tab, mode, and response options.\n- responses.create: Narrow Responses-shaped adapter over the visible ChatGPT browser-control runner; rejects unsupported API-only fields before prompt submission.\n- copyLatest: Copy or DOM-read the latest assistant response with Markdown-first fidelity.\n- runPlan: Execute an inline SequencePlan or named macro through the existing sequence engine.\n- new-ask-read: Named macro: open a new thread, ask, wait, and read Markdown.\n- find-open-ask-read: Named macro: search history, open the first match, ask, wait, and read Markdown.\n- find-open-copy-latest: Named macro: search history, open the first match, and copy/read the latest response.\n- attach-ask-read: Named macro: open a new thread, attach files, ask, wait, and read Markdown.\n- ask-and-download: Named macro: ask in a new thread and download the latest file affordance.\n- two-turn: Named macro: run two sequential prompts in a new thread.\ndiagnostic:\n- doctor-upload: Named macro: preflight bridge, login, and upload permission remediation.\n- doctor: Preflight browser bridge, login, upload, download, clipboard, mode, and tool readiness.\nreport:\n- redacted-run-report: Named macro: create a redacted report for a supplied CommandResult.\n- createReport: Write a durable redacted run report for a command result.\nprimitive:\n- session.bootstrap: Attach to ChatGPT in Chrome and detect login/blocker state.\n- threads.new: Open a new ChatGPT thread.\n- threads.search: Search visible ChatGPT history by query.\n- threads.open: Open a thread by URL, conversation id, title, or search result.\n- messages.compose: Fill the composer without submitting.\n- messages.submit: Submit the current composer contents.\n- messages.ask: Compose, submit, optionally wait, and optionally read.\n- messages.wait: Wait for the latest assistant response to stabilize.\n- messages.readLatest: Read the latest message as Markdown, normalized text, blocks, or HTML.\n- messages.waitAndRead: Wait for completion and read the latest message.\n- files.attach: Attach absolute local file paths through visible ChatGPT upload controls.\n- files.downloadLatest: Download the latest visible ChatGPT file affordance.\n- response.copy: Click Copy response and return clipboard Markdown, with DOM fallback.\n- modes.set: Select a visible model or effort candidate when unambiguous.\n- tools.select: Select a visible ChatGPT tool when unambiguous.",
|
|
5
|
+
"schemaVersion": "chatgpt.browser_control.backend_response.v1"
|
|
6
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "run-messages",
|
|
3
|
+
"policy": {
|
|
4
|
+
"returnPartial": true,
|
|
5
|
+
"stopOnError": true
|
|
6
|
+
},
|
|
7
|
+
"steps": [
|
|
8
|
+
{
|
|
9
|
+
"command": "session.bootstrap",
|
|
10
|
+
"id": "bootstrap"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"command": "threads.new",
|
|
14
|
+
"id": "new"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"args": {
|
|
18
|
+
"read": {
|
|
19
|
+
"format": "markdown"
|
|
20
|
+
},
|
|
21
|
+
"text": "First visible turn.",
|
|
22
|
+
"wait": true
|
|
23
|
+
},
|
|
24
|
+
"command": "messages.ask",
|
|
25
|
+
"id": "first"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"args": {
|
|
29
|
+
"read": {
|
|
30
|
+
"format": "markdown"
|
|
31
|
+
},
|
|
32
|
+
"text": "Second visible turn.",
|
|
33
|
+
"wait": true
|
|
34
|
+
},
|
|
35
|
+
"command": "messages.ask",
|
|
36
|
+
"id": "second"
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
{
|
|
2
|
+
"result": {
|
|
3
|
+
"activeAgentName": "json-agent",
|
|
4
|
+
"context": {
|
|
5
|
+
"assistantTurnCount": 1,
|
|
6
|
+
"timestamp": "2026-06-06T00:00:00.000Z",
|
|
7
|
+
"title": "ChatGPT",
|
|
8
|
+
"turnCount": 2,
|
|
9
|
+
"url": "https://chatgpt.com/"
|
|
10
|
+
},
|
|
11
|
+
"data": {
|
|
12
|
+
"finalOutput": {
|
|
13
|
+
"score": 1,
|
|
14
|
+
"verdict": "ok"
|
|
15
|
+
},
|
|
16
|
+
"outputText": "{\"verdict\":\"ok\",\"score\":1}",
|
|
17
|
+
"thread": {
|
|
18
|
+
"title": "ChatGPT",
|
|
19
|
+
"url": "https://chatgpt.com/"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"finalOutput": {
|
|
23
|
+
"score": 1,
|
|
24
|
+
"verdict": "ok"
|
|
25
|
+
},
|
|
26
|
+
"interruptions": [],
|
|
27
|
+
"lastAgentName": "json-agent",
|
|
28
|
+
"newItems": [
|
|
29
|
+
{
|
|
30
|
+
"preview": "Return a JSON verdict.",
|
|
31
|
+
"redacted": true,
|
|
32
|
+
"role": "user",
|
|
33
|
+
"type": "message.submitted"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"format": "markdown",
|
|
37
|
+
"output_text": "{\"verdict\":\"ok\",\"score\":1}",
|
|
38
|
+
"role": "assistant",
|
|
39
|
+
"type": "message.completed"
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"ok": true,
|
|
43
|
+
"output": [
|
|
44
|
+
{
|
|
45
|
+
"preview": "Return a JSON verdict.",
|
|
46
|
+
"redacted": true,
|
|
47
|
+
"role": "user",
|
|
48
|
+
"type": "message.submitted"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"format": "markdown",
|
|
52
|
+
"output_text": "{\"verdict\":\"ok\",\"score\":1}",
|
|
53
|
+
"role": "assistant",
|
|
54
|
+
"type": "message.completed"
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"output_text": "{\"verdict\":\"ok\",\"score\":1}",
|
|
58
|
+
"state": {
|
|
59
|
+
"id": "run_fixed",
|
|
60
|
+
"resumable": false,
|
|
61
|
+
"thread": {
|
|
62
|
+
"title": "ChatGPT",
|
|
63
|
+
"url": "https://chatgpt.com/"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"status": "ok",
|
|
67
|
+
"steps": [
|
|
68
|
+
{
|
|
69
|
+
"command": "session.bootstrap",
|
|
70
|
+
"dataPreview": {
|
|
71
|
+
"browserName": "chrome",
|
|
72
|
+
"loggedIn": true,
|
|
73
|
+
"tabId": "unknown",
|
|
74
|
+
"url": "https://chatgpt.com/"
|
|
75
|
+
},
|
|
76
|
+
"endedAt": "2026-06-06T00:00:00.000Z",
|
|
77
|
+
"id": "bootstrap",
|
|
78
|
+
"ok": true,
|
|
79
|
+
"startedAt": "2026-06-06T00:00:00.000Z",
|
|
80
|
+
"status": "ok",
|
|
81
|
+
"warnings": []
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"command": "threads.new",
|
|
85
|
+
"dataPreview": {
|
|
86
|
+
"title": "ChatGPT",
|
|
87
|
+
"url": "https://chatgpt.com/"
|
|
88
|
+
},
|
|
89
|
+
"endedAt": "2026-06-06T00:00:00.000Z",
|
|
90
|
+
"id": "new",
|
|
91
|
+
"ok": true,
|
|
92
|
+
"startedAt": "2026-06-06T00:00:00.000Z",
|
|
93
|
+
"status": "ok",
|
|
94
|
+
"warnings": []
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"command": "messages.ask",
|
|
98
|
+
"dataPreview": {
|
|
99
|
+
"complete": true,
|
|
100
|
+
"prompt": "Return a JSON verdict.",
|
|
101
|
+
"responseText": "{\"verdict\":\"ok\",\"score\":1}",
|
|
102
|
+
"title": "ChatGPT"
|
|
103
|
+
},
|
|
104
|
+
"endedAt": "2026-06-06T00:00:00.000Z",
|
|
105
|
+
"id": "ask",
|
|
106
|
+
"ok": true,
|
|
107
|
+
"startedAt": "2026-06-06T00:00:00.000Z",
|
|
108
|
+
"status": "ok",
|
|
109
|
+
"warnings": []
|
|
110
|
+
}
|
|
111
|
+
],
|
|
112
|
+
"warnings": []
|
|
113
|
+
},
|
|
114
|
+
"schemaVersion": "chatgpt.browser_control.run_result.v1"
|
|
115
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"result": {
|
|
3
|
+
"blocker": {
|
|
4
|
+
"code": "codex_chrome_bridge_unavailable",
|
|
5
|
+
"kind": "browser_bridge_unavailable",
|
|
6
|
+
"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.",
|
|
7
|
+
"remediation": [
|
|
8
|
+
{
|
|
9
|
+
"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.",
|
|
10
|
+
"label": "Ordinary shell",
|
|
11
|
+
"userActionRequired": false
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"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 }).",
|
|
15
|
+
"label": "Codex Chrome bootstrap",
|
|
16
|
+
"userActionRequired": false
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"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.",
|
|
20
|
+
"label": "Python live bridge",
|
|
21
|
+
"userActionRequired": false
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"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.",
|
|
25
|
+
"label": "Extension availability",
|
|
26
|
+
"userActionRequired": true
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
"context": {
|
|
31
|
+
"timestamp": "2026-06-06T00:00:00.000Z"
|
|
32
|
+
},
|
|
33
|
+
"error": {
|
|
34
|
+
"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.",
|
|
35
|
+
"name": "BrowserBridgeUnavailableError",
|
|
36
|
+
"recoverable": true
|
|
37
|
+
},
|
|
38
|
+
"ok": false,
|
|
39
|
+
"status": "blocked",
|
|
40
|
+
"warnings": []
|
|
41
|
+
},
|
|
42
|
+
"schemaVersion": "chatgpt.browser_control.command_result.v1"
|
|
43
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"result": {
|
|
3
|
+
"context": {
|
|
4
|
+
"timestamp": "2026-06-06T00:00:00.000Z"
|
|
5
|
+
},
|
|
6
|
+
"data": {
|
|
7
|
+
"file": "[redacted:33 chars]",
|
|
8
|
+
"prompt": "[redacted:19 chars]",
|
|
9
|
+
"token": "[redacted:38 chars]"
|
|
10
|
+
},
|
|
11
|
+
"ok": true,
|
|
12
|
+
"status": "ok",
|
|
13
|
+
"warnings": []
|
|
14
|
+
},
|
|
15
|
+
"schemaVersion": "chatgpt.browser_control.command_result.v1"
|
|
16
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"result": {
|
|
3
|
+
"context": {
|
|
4
|
+
"timestamp": "2026-06-06T00:00:00.000Z"
|
|
5
|
+
},
|
|
6
|
+
"data": {
|
|
7
|
+
"bytes": 335,
|
|
8
|
+
"includeContent": false,
|
|
9
|
+
"path": "/tmp/codex-chatgpt-control/reports/contract-fixtures/fixed-contract-report.json"
|
|
10
|
+
},
|
|
11
|
+
"ok": true,
|
|
12
|
+
"status": "ok",
|
|
13
|
+
"warnings": []
|
|
14
|
+
},
|
|
15
|
+
"schemaVersion": "chatgpt.browser_control.command_result.v1"
|
|
16
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"result": {
|
|
3
|
+
"context": {
|
|
4
|
+
"timestamp": "2026-06-06T00:00:00.000Z"
|
|
5
|
+
},
|
|
6
|
+
"data": {
|
|
7
|
+
"blocker": {
|
|
8
|
+
"kind": "[redacted:26 chars]",
|
|
9
|
+
"message": "[redacted:258 chars]",
|
|
10
|
+
"visibleText": "[redacted:19 chars]"
|
|
11
|
+
},
|
|
12
|
+
"context": {
|
|
13
|
+
"timestamp": "2026-06-06T00:00:00.000Z"
|
|
14
|
+
},
|
|
15
|
+
"ok": false,
|
|
16
|
+
"status": "blocked",
|
|
17
|
+
"warnings": [
|
|
18
|
+
"[redacted:26 chars]"
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
"ok": true,
|
|
22
|
+
"status": "ok",
|
|
23
|
+
"warnings": []
|
|
24
|
+
},
|
|
25
|
+
"schemaVersion": "chatgpt.browser_control.command_result.v1"
|
|
26
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "chatgpt.browser_control.response.v1",
|
|
3
|
+
"response": {
|
|
4
|
+
"id": "chatgpt-browser-response-basic",
|
|
5
|
+
"object": "chatgpt.browser.response",
|
|
6
|
+
"created_at": 1780617600,
|
|
7
|
+
"status": "ok",
|
|
8
|
+
"output_text": "hi",
|
|
9
|
+
"output": [
|
|
10
|
+
{
|
|
11
|
+
"type": "message.completed",
|
|
12
|
+
"role": "assistant",
|
|
13
|
+
"output_text": "hi",
|
|
14
|
+
"format": "markdown"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"browser_control": {
|
|
18
|
+
"visibleUi": true,
|
|
19
|
+
"resultStatus": "ok",
|
|
20
|
+
"thread": {
|
|
21
|
+
"url": "https://chatgpt.com/c/example-basic",
|
|
22
|
+
"conversationId": "example-basic",
|
|
23
|
+
"title": "Basic"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"response": {
|
|
3
|
+
"browser_control": {
|
|
4
|
+
"resultStatus": "unsupported",
|
|
5
|
+
"unsupported": [
|
|
6
|
+
{
|
|
7
|
+
"alternative": "Set instructionsMode: \"visible_prefix\" to send instructions visibly.",
|
|
8
|
+
"path": "instructions",
|
|
9
|
+
"reason": "Responses API instructions are hidden context, but ChatGPT browser control can only submit visible text."
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"visibleUi": true
|
|
13
|
+
},
|
|
14
|
+
"created_at": 1780704000,
|
|
15
|
+
"id": "chatgpt-browser-mq1l6o00",
|
|
16
|
+
"object": "chatgpt.browser.response",
|
|
17
|
+
"output": [],
|
|
18
|
+
"output_text": "",
|
|
19
|
+
"status": "unsupported"
|
|
20
|
+
},
|
|
21
|
+
"schemaVersion": "chatgpt.browser_control.response.v1"
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"response": {
|
|
3
|
+
"browser_control": {
|
|
4
|
+
"resultStatus": "unsupported",
|
|
5
|
+
"unsupported": [
|
|
6
|
+
{
|
|
7
|
+
"alternative": "Use chatgpt.runner.run(...) for lower-level browser-control options.",
|
|
8
|
+
"path": "unknown_control",
|
|
9
|
+
"reason": "This field is not part of the narrow ChatGPT browser-control Responses adapter."
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"visibleUi": true
|
|
13
|
+
},
|
|
14
|
+
"created_at": 1780704000,
|
|
15
|
+
"id": "chatgpt-browser-mq1l6o00",
|
|
16
|
+
"object": "chatgpt.browser.response",
|
|
17
|
+
"output": [],
|
|
18
|
+
"output_text": "",
|
|
19
|
+
"status": "unsupported"
|
|
20
|
+
},
|
|
21
|
+
"schemaVersion": "chatgpt.browser_control.response.v1"
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"response": {
|
|
3
|
+
"browser_control": {
|
|
4
|
+
"resultStatus": "unsupported",
|
|
5
|
+
"unsupported": [
|
|
6
|
+
{
|
|
7
|
+
"alternative": "Use thread: { type: \"conversationId\", conversationId } or a ChatGPT thread URL.",
|
|
8
|
+
"path": "previous_response_id",
|
|
9
|
+
"reason": "This is an OpenAI API field that visible ChatGPT browser control cannot honestly support."
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"visibleUi": true
|
|
13
|
+
},
|
|
14
|
+
"created_at": 1780704000,
|
|
15
|
+
"id": "chatgpt-browser-mq1l6o00",
|
|
16
|
+
"object": "chatgpt.browser.response",
|
|
17
|
+
"output": [],
|
|
18
|
+
"output_text": "",
|
|
19
|
+
"status": "unsupported"
|
|
20
|
+
},
|
|
21
|
+
"schemaVersion": "chatgpt.browser_control.response.v1"
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"response": {
|
|
3
|
+
"browser_control": {
|
|
4
|
+
"resultStatus": "unsupported",
|
|
5
|
+
"unsupported": [
|
|
6
|
+
{
|
|
7
|
+
"alternative": "No browser-control equivalent. ChatGPT web does not expose API temperature.",
|
|
8
|
+
"path": "temperature",
|
|
9
|
+
"reason": "This is an OpenAI API field that visible ChatGPT browser control cannot honestly support."
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"visibleUi": true
|
|
13
|
+
},
|
|
14
|
+
"created_at": 1780704000,
|
|
15
|
+
"id": "chatgpt-browser-mq1l6o00",
|
|
16
|
+
"object": "chatgpt.browser.response",
|
|
17
|
+
"output": [],
|
|
18
|
+
"output_text": "",
|
|
19
|
+
"status": "unsupported"
|
|
20
|
+
},
|
|
21
|
+
"schemaVersion": "chatgpt.browser_control.response.v1"
|
|
22
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "chatgpt.browser_control.run_result.v1",
|
|
3
|
+
"result": {
|
|
4
|
+
"ok": true,
|
|
5
|
+
"status": "ok",
|
|
6
|
+
"output_text": "hi",
|
|
7
|
+
"finalOutput": "hi",
|
|
8
|
+
"output": [
|
|
9
|
+
{
|
|
10
|
+
"type": "message.completed",
|
|
11
|
+
"role": "assistant",
|
|
12
|
+
"output_text": "hi",
|
|
13
|
+
"format": "markdown"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"newItems": [
|
|
17
|
+
{
|
|
18
|
+
"type": "message.completed",
|
|
19
|
+
"role": "assistant",
|
|
20
|
+
"output_text": "hi",
|
|
21
|
+
"format": "markdown"
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"interruptions": [],
|
|
25
|
+
"state": {
|
|
26
|
+
"id": "state-basic-success",
|
|
27
|
+
"resumable": false
|
|
28
|
+
},
|
|
29
|
+
"activeAgentName": "reviewer",
|
|
30
|
+
"lastAgentName": "reviewer",
|
|
31
|
+
"warnings": [],
|
|
32
|
+
"context": {
|
|
33
|
+
"timestamp": "2026-06-05T00:00:00.000Z"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|