Skip to content

fix(cyberstrike): update ChatGPT Codex OpenAI defaults - #61

Merged
badchars merged 5 commits into
CyberStrikeus:mainfrom
bigzooooz:fix/openai-codex-chatgpt-models
Aug 6, 2026
Merged

fix(cyberstrike): update ChatGPT Codex OpenAI defaults#61
badchars merged 5 commits into
CyberStrikeus:mainfrom
bigzooooz:fix/openai-codex-chatgpt-models

Conversation

@bigzooooz

Copy link
Copy Markdown
Contributor

Fixes #56

Summary

  • Stop setting OpenAI serviceTier to auto by default.
  • Remove deprecated ChatGPT-authenticated Codex models from the OAuth model list.
  • Add current ChatGPT Codex model fallbacks.

Verification

  • cyberstrike models openai no longer lists gpt-5.2 or gpt-5.3-codex.
  • bun test test/plugin/codex.test.ts test/provider/transform.test.ts --timeout 30000
    • Relevant new regression passed.
    • Existing unrelated failure remains: @ai-sdk/xai > grok-3 returns empty object.

badchars and others added 4 commits July 22, 2026 22:44
…eus#54)

* ignore: update download stats 2026-06-24

* ignore: update download stats 2026-06-25

* ignore: update download stats 2026-06-26

* ignore: update download stats 2026-06-27

* ignore: update download stats 2026-06-28

* ignore: update download stats 2026-06-29

* ignore: update download stats 2026-06-30

* ignore: update download stats 2026-07-01

* ignore: update download stats 2026-07-02

* ignore: update download stats 2026-07-03

* ignore: update download stats 2026-07-04

* ignore: update download stats 2026-07-05

* ignore: update download stats 2026-07-06

* ignore: update download stats 2026-07-07

* ignore: update download stats 2026-07-08

* fix(copilot): use GitHub's first-party Copilot CLI OAuth app for device flow

Replace upstream OpenCode's third-party OAuth app (Ov23) with GitHub's
official Copilot CLI OAuth app (Iv1.b507a08c87ecfe98). This ensures
enterprise customers see "Authorize GitHub Copilot CLI by GitHub"
instead of "Authorize OpenCode by Anomaly", and enables
copilot_internal/v2/token access for live model catalog discovery.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(changelog): add unreleased section with MCP servers and Copilot OAuth fix

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(hackbrowser): enable GitHub Copilot OAuth for crawler subprocess

Copilot's OAuth auth uses a closure-based custom fetch in the main
process that can't cross the IPC boundary to the hackbrowser worker.
This follows the same pattern as the existing Anthropic OAuth path:
extract the bearer token, pass it via ModelDescriptor, and reconstruct
the authenticated fetch in the worker with Copilot-specific headers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(changelog): add hackbrowser Copilot OAuth support to unreleased

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: generate

* feat(mcp): disable all built-in MCP servers by default

All 11 built-in MCP servers are now installed but disabled by default
to avoid unnecessary token overhead. The system prompt lists disabled
servers so the agent can remind users to enable them when relevant.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(changelog): add MCP disabled-by-default to unreleased

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(hackbrowser): auto-install Chromium on first use

When hackbrowser detects Chromium is missing, it now attempts automatic
installation via playwright CLI before spawning the worker. Falls back
to the existing manual error message if auto-install fails (e.g. SSL
issues in corporate environments).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(changelog): add Chromium auto-install to unreleased

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(postinstall): bypass SSL verification for corporate proxy environments

Adds NODE_TLS_REJECT_UNAUTHORIZED=0 to the playwright npm install
subprocess in postinstall, preventing UNABLE_TO_GET_ISSUER_CERT_LOCALLY
errors from corporate MITM proxies. Only affects this subprocess.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(postinstall): auto-add npm global bin to Windows user PATH

Corporate Windows installs often lack npm's global bin in PATH, making
the cyberstrike command unreachable. Postinstall now detects this and
appends to user-level PATH via PowerShell (no admin required).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(changelog): add install.sh playwright auto-install

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(normalize): value-strip JSON bodies by shape-sniff, not content-type

bodyKeyShapeHash only took the JSON path when the content-type contained "json", so
JSON bodies sent under other content-types (application/csp-report, +json variants,
mislabeled JSON) fell through to the raw bodyHash and every volatile-value payload
fragmented into its own endpoint — CSP violation reports seen ×55 on one host.

Take the JSON branch when the content-type says json OR the trimmed body starts with
{ or [, and on parse failure fall through to the form/multipart handlers instead of
returning. Verified: two different csp-report bodies collapse to one key, an extra
field stays distinct, JSON/form/multipart unchanged; 73 normalize tests pass; live
ingest of 3 distinct csp-reports yields 1 request row.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* refactor(normalize): one parseBody dispatch — observe form/multipart values + parse SOAP/XML

bodyKeyShapeHash (endpoint key) and bodySlots (observed values) each re-decided how to read a
body and had drifted: keying learned form/multipart, value extraction stayed JSON-only, so
form-app values (an ASP.NET HiddenUserID → IDOR substrate) and CSP/XML bodies were never
observed. Introduce a single parseBody(body, contentType) that both project from — key from
the field names, slots from name+value.

This closes the form/multipart/CSP observation gap and adds SOAP/XML: value-invariant dedup
(Add(5,3) and Add(99,7) collapse to one endpoint), operation-distinction (free — the SOAP
operation is the element under <Body>, already in the path), and observed element/attribute
values, by parsing XML to an object and reusing the SAME keyPaths/jsonLeaves walks
(fast-xml-parser isolated behind xml.ts, XML triggered by content-type only — no `<`-sniff
that would swallow HTML/`<?php` payloads).

keyHash for every non-XML body is byte-identical (golden characterization over 290 real +
synthetic bodies); 99 normalize tests pass; validated live in the ingest pipeline
(JSON/form/SOAP dedup + observation).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(agent): raise proxy-tester soft step cap 15 → 50

More headroom for multi-step verification + reporting on complex endpoints. Still a soft cap
(forces a text wrap-up at the limit) and only applies when not explicitly configured;
affordable with prompt caching (extra turns re-read the cached prefix).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(hackbrowser): advance crawling — occlusion recovery, robust selectors, file upload, stateful-flow coverage

Crawl-uplevel work, validated end-to-end (no regressions). Distinct improvements:

- Occlusion: structural probeClickPoint (elementFromPoint hit-test, shadow/iframe
  safe-default) + safe recovery (Escape/backdrop + wait + real retry) + principle-based
  LLM-dismiss rule. Crash-safe on non-CSS Playwright selectors (role=/text=) so a probe
  never kills the crawl.
- Selectors: element-unique CSS (querySelectorAll uniqueness verify + positional-path
  fallback) fixes sibling-cluster loss; force CSS selector for <input type=file> (a
  role=textbox selector resolves to 0 nodes → setInputFiles timeout); action-priority
  element cap keeps footer submit buttons on large forms/modals.
- File upload: form-embedded (executeFileSelect) + click-triggered (filechooser) file
  selection with bundled, accept-matched sample files (mechanical, no LLM).
- Redirect-collapse dedup: single-cred skips N-routes→1-gate collapses by landed URL;
  multi-cred enqueues the landed URL instead of mislabeling gate content under each route
  (fixes false "both creds can access X" access-control data).
- Inline depth-first exploration: pages reached via a state-changing action (e.g. an
  ASP.NET postback) are explored in place while their server-side state is alive, via a
  DIP-injected ExploreContext + shared handleNavigation — reaching/submitting forms that a
  later queued GET could never load (session-timeout).
- Planner: occlusion-dismiss (least-committal) + fill-modal (fill+submit, don't X-close) rules.

Validated: 96/96 unit + 128/130 coverage, built-in livecrawl smoke, live Juice Shop
(single + multi-credential), and a synthetic repro per fix. Zero regressions.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* chore: generate

* chore: update nix node_modules hashes

* chore: test commit attribution

* ignore: update download stats 2026-07-09

* ignore: update download stats 2026-07-10

* ignore: update download stats 2026-07-11

* ignore: update download stats 2026-07-12

* ignore: update download stats 2026-07-13

* ignore: update download stats 2026-07-14

* ignore: update download stats 2026-07-15

* ignore: update download stats 2026-07-16

* ignore: update download stats 2026-07-17

* ignore: update download stats 2026-07-18

* ignore: update download stats 2026-07-19

* ignore: update download stats 2026-07-20

* ignore: update download stats 2026-07-21

* fix(codex): allow GPT-5.6 models through the OAuth model filter

The OAuth loader dropped every model whose id neither contains "codex"
nor appears in allowedModels. The ChatGPT backend serves gpt-5.6-sol,
gpt-5.6-terra, gpt-5.6-luna, gpt-5.5, gpt-5.4 and gpt-5.4-mini, none of
which match either rule, so they disappeared from the model list after
signing in with a ChatGPT account.

They are already present in the models.dev catalog, so listing the slugs
is enough.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(codex): drop unsupported service_tier for the Codex backend

ProviderTransform.options() sets serviceTier "auto" for every OpenAI
model, but that value only exists on the platform API. Requests routed
to chatgpt.com/backend-api/codex fail with:

  Bad Request: Unsupported service_tier: auto

options() only receives the model, so it cannot tell an OAuth request
apart from a platform one. Strip the value in the Codex fetch wrapper
instead, where the URL and auth headers are already rewritten.

Only "auto" is removed. The backend does serve its own tier -- the Fast
speed tier sends service_tier "priority" -- so that value is preserved.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Orhan Yildirim <orhan_yil@msn.com>
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: cyberstrike-bot[bot] <cyberstrike-bot[bot]@users.noreply.github.com>
Co-authored-by: Serhatcck <serhatdbs@outlook.com>
@bigzooooz
bigzooooz requested a review from badchars as a code owner August 1, 2026 11:39
@github-actions

github-actions Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Hey! Your PR title Fix/OpenAI codex chatgpt models doesn't follow conventional commit format.

Please update it to start with one of:

  • feat: or feat(scope): new feature
  • fix: or fix(scope): bug fix
  • docs: or docs(scope): documentation changes
  • chore: or chore(scope): maintenance tasks
  • refactor: or refactor(scope): code refactoring
  • test: or test(scope): adding or updating tests

Where scope is the package name (e.g., app, desktop, cyberstrike).

See CONTRIBUTING.md for details.

@bigzooooz bigzooooz changed the title Fix/OpenAI codex chatgpt models fix(cyberstrike): update ChatGPT Codex OpenAI defaults Aug 1, 2026
@badchars

badchars commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Thanks for the contribution @bigzooooz! The Codex service_tier fix and updated model list look solid. Merging now.

@badchars
badchars merged commit ffee69d into CyberStrikeus:main Aug 6, 2026
2 checks passed
badchars added a commit that referenced this pull request Aug 6, 2026
* fix(prompt): correct skill count from 120+ to 7,600+

* fix(codex): make GPT-5.6 models usable over ChatGPT OAuth (#54)

* ignore: update download stats 2026-06-24

* ignore: update download stats 2026-06-25

* ignore: update download stats 2026-06-26

* ignore: update download stats 2026-06-27

* ignore: update download stats 2026-06-28

* ignore: update download stats 2026-06-29

* ignore: update download stats 2026-06-30

* ignore: update download stats 2026-07-01

* ignore: update download stats 2026-07-02

* ignore: update download stats 2026-07-03

* ignore: update download stats 2026-07-04

* ignore: update download stats 2026-07-05

* ignore: update download stats 2026-07-06

* ignore: update download stats 2026-07-07

* ignore: update download stats 2026-07-08

* fix(copilot): use GitHub's first-party Copilot CLI OAuth app for device flow

Replace upstream OpenCode's third-party OAuth app (Ov23) with GitHub's
official Copilot CLI OAuth app (Iv1.b507a08c87ecfe98). This ensures
enterprise customers see "Authorize GitHub Copilot CLI by GitHub"
instead of "Authorize OpenCode by Anomaly", and enables
copilot_internal/v2/token access for live model catalog discovery.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(changelog): add unreleased section with MCP servers and Copilot OAuth fix

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(hackbrowser): enable GitHub Copilot OAuth for crawler subprocess

Copilot's OAuth auth uses a closure-based custom fetch in the main
process that can't cross the IPC boundary to the hackbrowser worker.
This follows the same pattern as the existing Anthropic OAuth path:
extract the bearer token, pass it via ModelDescriptor, and reconstruct
the authenticated fetch in the worker with Copilot-specific headers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(changelog): add hackbrowser Copilot OAuth support to unreleased

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: generate

* feat(mcp): disable all built-in MCP servers by default

All 11 built-in MCP servers are now installed but disabled by default
to avoid unnecessary token overhead. The system prompt lists disabled
servers so the agent can remind users to enable them when relevant.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(changelog): add MCP disabled-by-default to unreleased

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(hackbrowser): auto-install Chromium on first use

When hackbrowser detects Chromium is missing, it now attempts automatic
installation via playwright CLI before spawning the worker. Falls back
to the existing manual error message if auto-install fails (e.g. SSL
issues in corporate environments).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(changelog): add Chromium auto-install to unreleased

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(postinstall): bypass SSL verification for corporate proxy environments

Adds NODE_TLS_REJECT_UNAUTHORIZED=0 to the playwright npm install
subprocess in postinstall, preventing UNABLE_TO_GET_ISSUER_CERT_LOCALLY
errors from corporate MITM proxies. Only affects this subprocess.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(postinstall): auto-add npm global bin to Windows user PATH

Corporate Windows installs often lack npm's global bin in PATH, making
the cyberstrike command unreachable. Postinstall now detects this and
appends to user-level PATH via PowerShell (no admin required).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(changelog): add install.sh playwright auto-install

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(normalize): value-strip JSON bodies by shape-sniff, not content-type

bodyKeyShapeHash only took the JSON path when the content-type contained "json", so
JSON bodies sent under other content-types (application/csp-report, +json variants,
mislabeled JSON) fell through to the raw bodyHash and every volatile-value payload
fragmented into its own endpoint — CSP violation reports seen ×55 on one host.

Take the JSON branch when the content-type says json OR the trimmed body starts with
{ or [, and on parse failure fall through to the form/multipart handlers instead of
returning. Verified: two different csp-report bodies collapse to one key, an extra
field stays distinct, JSON/form/multipart unchanged; 73 normalize tests pass; live
ingest of 3 distinct csp-reports yields 1 request row.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* refactor(normalize): one parseBody dispatch — observe form/multipart values + parse SOAP/XML

bodyKeyShapeHash (endpoint key) and bodySlots (observed values) each re-decided how to read a
body and had drifted: keying learned form/multipart, value extraction stayed JSON-only, so
form-app values (an ASP.NET HiddenUserID → IDOR substrate) and CSP/XML bodies were never
observed. Introduce a single parseBody(body, contentType) that both project from — key from
the field names, slots from name+value.

This closes the form/multipart/CSP observation gap and adds SOAP/XML: value-invariant dedup
(Add(5,3) and Add(99,7) collapse to one endpoint), operation-distinction (free — the SOAP
operation is the element under <Body>, already in the path), and observed element/attribute
values, by parsing XML to an object and reusing the SAME keyPaths/jsonLeaves walks
(fast-xml-parser isolated behind xml.ts, XML triggered by content-type only — no `<`-sniff
that would swallow HTML/`<?php` payloads).

keyHash for every non-XML body is byte-identical (golden characterization over 290 real +
synthetic bodies); 99 normalize tests pass; validated live in the ingest pipeline
(JSON/form/SOAP dedup + observation).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(agent): raise proxy-tester soft step cap 15 → 50

More headroom for multi-step verification + reporting on complex endpoints. Still a soft cap
(forces a text wrap-up at the limit) and only applies when not explicitly configured;
affordable with prompt caching (extra turns re-read the cached prefix).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(hackbrowser): advance crawling — occlusion recovery, robust selectors, file upload, stateful-flow coverage

Crawl-uplevel work, validated end-to-end (no regressions). Distinct improvements:

- Occlusion: structural probeClickPoint (elementFromPoint hit-test, shadow/iframe
  safe-default) + safe recovery (Escape/backdrop + wait + real retry) + principle-based
  LLM-dismiss rule. Crash-safe on non-CSS Playwright selectors (role=/text=) so a probe
  never kills the crawl.
- Selectors: element-unique CSS (querySelectorAll uniqueness verify + positional-path
  fallback) fixes sibling-cluster loss; force CSS selector for <input type=file> (a
  role=textbox selector resolves to 0 nodes → setInputFiles timeout); action-priority
  element cap keeps footer submit buttons on large forms/modals.
- File upload: form-embedded (executeFileSelect) + click-triggered (filechooser) file
  selection with bundled, accept-matched sample files (mechanical, no LLM).
- Redirect-collapse dedup: single-cred skips N-routes→1-gate collapses by landed URL;
  multi-cred enqueues the landed URL instead of mislabeling gate content under each route
  (fixes false "both creds can access X" access-control data).
- Inline depth-first exploration: pages reached via a state-changing action (e.g. an
  ASP.NET postback) are explored in place while their server-side state is alive, via a
  DIP-injected ExploreContext + shared handleNavigation — reaching/submitting forms that a
  later queued GET could never load (session-timeout).
- Planner: occlusion-dismiss (least-committal) + fill-modal (fill+submit, don't X-close) rules.

Validated: 96/96 unit + 128/130 coverage, built-in livecrawl smoke, live Juice Shop
(single + multi-credential), and a synthetic repro per fix. Zero regressions.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* chore: generate

* chore: update nix node_modules hashes

* chore: test commit attribution

* ignore: update download stats 2026-07-09

* ignore: update download stats 2026-07-10

* ignore: update download stats 2026-07-11

* ignore: update download stats 2026-07-12

* ignore: update download stats 2026-07-13

* ignore: update download stats 2026-07-14

* ignore: update download stats 2026-07-15

* ignore: update download stats 2026-07-16

* ignore: update download stats 2026-07-17

* ignore: update download stats 2026-07-18

* ignore: update download stats 2026-07-19

* ignore: update download stats 2026-07-20

* ignore: update download stats 2026-07-21

* fix(codex): allow GPT-5.6 models through the OAuth model filter

The OAuth loader dropped every model whose id neither contains "codex"
nor appears in allowedModels. The ChatGPT backend serves gpt-5.6-sol,
gpt-5.6-terra, gpt-5.6-luna, gpt-5.5, gpt-5.4 and gpt-5.4-mini, none of
which match either rule, so they disappeared from the model list after
signing in with a ChatGPT account.

They are already present in the models.dev catalog, so listing the slugs
is enough.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(codex): drop unsupported service_tier for the Codex backend

ProviderTransform.options() sets serviceTier "auto" for every OpenAI
model, but that value only exists on the platform API. Requests routed
to chatgpt.com/backend-api/codex fail with:

  Bad Request: Unsupported service_tier: auto

options() only receives the model, so it cannot tell an OAuth request
apart from a platform one. Strip the value in the Codex fetch wrapper
instead, where the URL and auth headers are already rewritten.

Only "auto" is removed. The backend does serve its own tier -- the Fast
speed tier sends service_tier "priority" -- so that value is preserved.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Orhan Yildirim <orhan_yil@msn.com>
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: cyberstrike-bot[bot] <cyberstrike-bot[bot]@users.noreply.github.com>
Co-authored-by: Serhatcck <serhatdbs@outlook.com>

* fix(codex): use version-based regex filter for future model compatibility

* fix: update ChatGPT Codex OpenAI defaults

---------

Co-authored-by: badchars <badchars@users.noreply.github.com>
Co-authored-by: gutslabs <128259593+Gutslabs@users.noreply.github.com>
Co-authored-by: Orhan Yildirim <orhan_yil@msn.com>
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: cyberstrike-bot[bot] <cyberstrike-bot[bot]@users.noreply.github.com>
Co-authored-by: Serhatcck <serhatdbs@outlook.com>
Co-authored-by: test <test@example.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

OpenAI ChatGPT OAuth requests fail with "Unsupported service_tier: auto"

3 participants