Skip to content

feat(webview): add OpenAI Codex speed selector - #3

Closed
WebMad wants to merge 49 commits into
mainfrom
feat/openai-codex-fast-ui
Closed

feat(webview): add OpenAI Codex speed selector#3
WebMad wants to merge 49 commits into
mainfrom
feat/openai-codex-fast-ui

Conversation

@WebMad

@WebMad WebMad commented Jul 28, 2026

Copy link
Copy Markdown
Owner

Responsibility and scope

Adds the OpenAI Codex speed selector in settings and its localized copy. Tests travel with the behavior in this PR.

Behavior and state handling

  • The selector is wired through the buffered/cached settings callback.
  • It does not mutate live extension state directly and does not send a direct postMessage; changes remain buffered until the existing Save flow applies them.
  • Component tests cover rendering and settings interaction behavior.
  • All 18 supported locale files are updated, with translation completeness covered.

Explicit non-goals

  • No backend request-construction changes; those are isolated in the preceding PR.
  • No unrelated Task.throttle.test.ts fix.
  • No changeset.

Test evidence

  • Focused component tests pass for the selector and cached settings callback.
  • Translation completeness covers all 18 locale updates.
  • Repository type checks passed from the push hook.
  • The completed stack was locally verified before publication.

Stack dependency

  1. Zoo-Code-Org/Zoo-Code#1040 — shared service-tier primitives.
  2. WebMad/Zoo-Code#2 — backend persistence and request behavior.
  3. This PR — webview selector, component tests, and 18 locales (base: WebMad:feat/openai-codex-fast-backend).

Review after #2; this PR intentionally contains only its immediate-base UI and localization delta.

zoomote Bot and others added 30 commits July 18, 2026 19:17
…hLock (Zoo-Code-Org#912)

* fix: lock task history invalidation

* fix(task-history): address invalidation review feedback
…#961) (Zoo-Code-Org#962)

checkExistKey ignored Zoo Gateway session auth, so Finish saved config but never left the setup screen.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Roomote <roomote@roomote.dev>
DeepSeek V4 Pro and V4 Flash support image inputs via their OpenAI-compatible
API, but the model definitions had supportsImages: false. This change flips it
to true for both models, enabling users to attach images when using these models.
…treaming, and model metadata (Zoo-Code-Org#857)

* fix(moonshot): fix provider issues with model picker, refresh, and streaming

- Fix duplicate ModelPicker by adding moonshot to PROVIDERS_WITH_CUSTOM_MODEL_UI
- Fix HTTP 404 on Refresh Models by preserving /v1 in fetcher URL
- Fix empty model list (consequence of 404 fix)
- Fix 'No output generated' error by switching MoonshotHandler from
  OpenAICompatibleHandler (Vercel AI SDK) to OpenAiHandler (OpenAI Node SDK)
  which is what Moonshot's own API docs recommend
- Add dedicated Moonshot fetcher with proper model ID prefixing
- Update tests to match new handler implementation

All 6,660 backend and 1,432 webview-ui tests pass.

* feat(moonshot): add missing models with correct pricing from official docs

Add kimi-k2.7-code, kimi-k2.7-code-highspeed, and kimi-k2.6 to static
models map with accurate pricing from Moonshot documentation.

Also fix kimi-k2.5 to correctly mark supportsImages: true.

* Update webview-ui/src/components/settings/providers/Moonshot.tsx

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* fix(moonshot): remove fallback pricing for unknown models to match handler behavior

* Bump coverage

* fix(moonshot): address PR review feedback — add tests and fix inline import type

- Replace inline import() type with top-level OpenAI.Chat.Completions.X in moonshot.ts
- Add useSelectedModel moonshot tests (default model, router override, unknown fallback, getValidatedModelId)
- Add modelCache moonshot dispatch test for fetchModelsFromProvider switch
- Create Moonshot.spec.tsx with state machine tests (idle/loading/success/error states, race condition guard)

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Roomote <roomote@roomote.dev>
…milies (Zoo-Code-Org#899)

* fix(litellm): preserve reasoning_content for known reasoning model families

LiteLLM's /v1/model/info never reports reasoning capability flags, so infer
preserveReasoning from the model alias/routed-model name and use
convertToR1Format to keep reasoning_content intact across tool-call turns.

Signed-off-by: daewoongoh <dw.oh@samsung.com>

* test(litellm): cover preserveReasoning inference and message conversion branching

Add unit coverage for LITELLM_PRESERVE_REASONING_PATTERN matching per model
family, getLiteLLMModels setting preserveReasoning on matched models, and
LiteLLMHandler.createMessage branching between convertToR1Format and
convertToOpenAiMessages based on info.preserveReasoning.

Signed-off-by: daewoongoh <dw.oh@samsung.com>

* refactor(litellm): replace preserveReasoning regex with an explicit model id list

Regex-based family matching could over-match unrelated aliases sharing a
substring (e.g. glm-5-flash matching a glm-5 prefix), a gap flagged in
PR Zoo-Code-Org#899 review. LITELLM_PRESERVE_REASONING_MODEL_IDS now lists the exact
model ids that set preserveReasoning: true in their native provider
config, matched via isLiteLLMPreserveReasoningModel() against the final
segment of model_name/litellm_params.model.

Also fixes a test in litellm.spec.ts where the model_name alias itself
matched a known id, so the assertion didn't actually prove
litellm_params.model was being checked.

Signed-off-by: daewoongoh <dw.oh@samsung.com>

---------

Signed-off-by: daewoongoh <dw.oh@samsung.com>
)

* chore(deps): update dependency esbuild-wasm to v0.28.1

* fix(build): eagerly initialize stdout/stderr in esbuild-wasm to prevent V8 crash

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Elliott de Launay <edelaunay@wealthsimple.com>
…ode-Org#925)

* fix(webview): sync cachedState on mode changes in SettingsView

* test(settings): strengthen mode sync change detection

---------

Co-authored-by: Eason Liang <easonliang28@gmail.com>
* fix(code-index): index plain text files

* fix(tree-sitter): skip plain text definition parsing

* fix(code-index): address plain text review feedback

* fix(tree-sitter): preserve Scala structural parsing

* test(code-index): remove redundant async usage
)

* fix(mcp): remove obsolete server creation translations

* test(mcp): remove stale server creation references

* test(mcp): fix no-server prompt snapshot
… and surface delegation status (Zoo-Code-Org#935)

* feat(task-lifecycle): explicit interrupted status + delegation state machine

* feat(history-ui): delegation status badges in history list

* fix(ci): add dedicated fixtures for abandon e2e test and add missing i18n keys

* test: cover evictCurrentTask, markDelegatedChildInterrupted, and onTaskCompleted paths

* fix: address CodeRabbit review - guard active-only in markDelegatedChildInterrupted, evict on disposal, fix delegateParentAndOpenChild TOCTOU, translate i18n keys

* fix(e2e): allow parent status to be active or completed after child delegation

---------

Co-authored-by: Naved  Merchant <naved.merchant@gmail.com>
…o-Code-Org#989)

* refactor(types): use canonical provider category identifiers

* test(types): cover cross-category provider guards
…ode-Org#996)

* feat(types): add Kimi K3 to moonshot and opencode-go providers

* test(types): add moonshot registry suite and explicit kimi-k3 reasoning assertions

* test(types): widen moonshot registry entries to ModelInfo in tests

---------

Co-authored-by: Roomote <roomote@roomote.dev>
* feat: add Kimi Code provider

* no-mistakes(review): add explicit error handling for OAuth retry path

* no-mistakes(document): Fix incorrect provider attribution in OAuth comment

* no-mistakes: apply CI fixes

* no-mistakes: apply CI fixes

* fix(kimi-code): harden OAuth request handling

* feat(kimi-code): add configurable reasoning effort (low/high/max)

* fix(kimi-code): address review feedback and resolve main merge conflicts

- Wrap kimiCodeOAuthState aggregation in try/catch in ClineProvider
- Add non-401 OAuth no-retry test for createMessage
- Add vi.resetModules() to kimiCode sign-in/out spec setup
- Localize kimiCode settings strings in 9 locales
- Merge origin/main: adopt canonical providerIdentifiers registry,
  keep both kimi-code and zoo-gateway setup-gate checks

---------

Co-authored-by: Toray Altas <6816042+taltas@users.noreply.github.com>
Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: Naved  Merchant <naved.merchant@gmail.com>
…GPT OAuth (Zoo-Code-Org#889)

* fix(openai-codex): support Luna Responses Lite requests

* Nuke md file that shouldnt have been commited in the first place

* fix(openai-codex): address Luna Responses Lite review feedback

- Capture telemetry when transformLunaResponsesLiteBody throws in createMessage
- Drop weak Record<string, any> alias from transformLunaResponsesLiteBody signature
- Document intentional tool_choice/parallel_tool_calls and reasoning context overrides
- Strengthen tests: full input array assertion, reasoning context overwrite case,
  retry header coverage, single-build spy, and uuidv7 session shape check

---------

Co-authored-by: Naved  Merchant <naved.merchant@gmail.com>
Co-authored-by: Roomote <roomote@roomote.dev>
* feat(tree-sitter): add Dart definition support

* fix(tree-sitter): address Dart query review feedback

* fix(tree-sitter): include adjacent Dart function bodies

---------

Co-authored-by: Naved  Merchant <naved.merchant@gmail.com>
…Org#1010)

Add full Claude Opus 5 support across all provider paths with correct
model definitions, adaptive-thinking handling, fetcher overrides, and
accurate pricing from Anthropic's published docs.

Model definitions (anthropic.ts, bedrock.ts, vertex.ts):
- 1M native context window (no beta header required)
- Adaptive-thinking binary toggle (supportsReasoningBudget/Binary)
- supportsTemperature: false (sampling params return a 400)
- Pricing: input $5.0, output $25.0, cacheWrites $6.25, cacheReads $0.50
  per million tokens

Provider handling:
- Add opus-5 to the Bedrock adaptive-thinking guard
- Add claude-opus-5 to OpenRouter and Vercel AI Gateway allow-lists
- Apply Opus 5 overrides (maxTokens, reasoning budget, temperature)
  in the openrouter, requesty, and vercel-ai-gateway fetchers

Tests:
- Add Opus 5 coverage across provider and fetcher test suites

Co-authored-by: Naved Merchant <14171946+navedmerchant@users.noreply.github.com>
* chore: prepare v3.72.0 release

* fix: address v3.72.0 release review

* Update README.md

* Update README.md

---------

Co-authored-by: edelauna <54631123+edelauna@users.noreply.github.com>
… child fixture (Zoo-Code-Org#1002)

* test(e2e-mock): fix subtasks fixture collision between child and parent-resume fixtures (Zoo-Code-Org#1001)

The fast-child and SUBTASK_CHILD fixtures matched a bare marker that the
parent prompt embeds verbatim, so parent-resume turns could be served the
child fixture (mirrors Zoo-Code-Org#561, which fixed the same class for cross-profile
fixtures only). Parent-resume fixtures also guarded on the literal new_task
tool-call id, which validateAndFixToolResultIds can rewrite on resume.

- Add parent-marker exclusion (with aimock's last-user-message scoping) to
  the fast-child and SUBTASK_CHILD fixtures
- Guard parent-resume fixtures on the injected subtask result content
  instead of the fragile tool-call id

* test(e2e-mock): address PR review — injection-guard all parent fixtures, link fixture format contract

- Regular parent turn-1 fixture: exclude resume turns via
  SUBTASK_RESULT_INJECTION instead of relying on registration order
  (sequenceIndex is not viable here — the fixture is shared by 4 tests)
- Fast and api-hang parent-resume guards: match SUBTASK_RESULT_INJECTION
  instead of the child result text, which is embedded verbatim in the
  parent prompts and could match the parent's initial request on retry
- Add unit-test assertion pinning reopenParentFromDelegation's injected
  tool_result format to the 'completed.\n\nResult:' contract the e2e
  fixtures match on
- lastUserMessageContains: mirror aimock's getTextContent (text parts
  only) instead of JSON.stringify for non-string content
- Extract SUBTASK_FAST_CHILD_RESULT constant
- Replace tautological find()/assert pairs in the api-hang test
- Move the no-parent-resume assertion in the cancellation test behind
  the async settle gates and also assert no completion_result

---------

Co-authored-by: Roomote <roomote@roomote.dev>
…Zoo-Code-Org#872)

* fix(settings): buffer Save-managed settings in cachedState until Save

Several controls inside SettingsView wrote their changes to the extension host immediately via `updateSettings`, instead of buffering them in local `cachedState` and waiting for the user to click Save.
Because Discard reverts edits by resetting `cachedState` to the persisted state, any control that already posted `updateSettings` poisoned that source of truth — so Discard could no longer undo the change, silently breaking the Save/Discard contract.

Route all five Save-managed values exclusively through `cachedState` / `setCachedStateField` while SettingsView is open:

- allowedCommands / deniedCommands (AutoApproveSettings): drop the   immediate updateSettings on add/remove.
- profileThresholds (ContextManagementSettings): drop the immediate updateSettings on the non-default profile branch; remove the now-unused vscode import.
- includeTaskHistoryInEnhance (PromptsSettings): drop the immediate updateSettings on toggle.
- mcpEnabled (McpEnabledToggle / McpView): adopt the existing "props first, fall back to context" pattern so SettingsView can pass the buffered value and a cachedState-backed setter; uncontrolled usage keeps the original immediate behavior.

Genuinely-immediate actions (autoApprovalEnabled, per-server MCP toggle/delete/restart/timeout) are not in the Save payload and are left unchanged. The extension host side is correct and untouched.

Add/update tests at the webview-ui component layer: buffering assertions for each control, a McpEnabledToggle controlled/uncontrolled regression, and a SettingsView Discard regression.

Signed-off-by: JunyongParkDev <jun94.park@samsung.com>

* test(settings): cover buffered MCP enablement

* test(settings): verify discarded commands are reverted in UI

Strengthen the SettingsView regression test to verify that buffered
commands disappear from the UI when changes are discarded.

Signed-off-by: JunyongParkDev <jun94.park@samsung.com>

* fix(settings): restore immediate persistence for uncontrolled includeTaskHistoryInEnhance

The previous Save-buffering change dropped the updateSettings post unconditionally, which fixed the controlled path but broke the uncontrolled one:
with props omitted the toggle falls back to the context setter, which only updates local state and never persists.

Gate the post on whether the component is controlled:
- Controlled: setter buffers into cachedState, Save persists — no post here.
- Uncontrolled: context setter is local-only, so post updateSettings now.

Mirrors the props-first / context-fallback pattern used for McpEnabledToggle.
Adds an uncontrolled regression test (updates local state *and* posts), symmetric with the controlled "buffer only" case.

Signed-off-by: JunyongParkDev <jun94.park@samsung.com>

---------

Signed-off-by: JunyongParkDev <jun94.park@samsung.com>
… form-edited base URL (Zoo-Code-Org#878)

* ollama fetch fix

* address review comments
…g#906)

* Fix bedrock DNS resolution when behind a corporate proxy

When behind a corporate proxy, Node.js resolves DNS locally before contacting
the proxy. If the proxy is the only path to the endpoint, the request fails
with ENOTFOUND.

HttpsProxyAgent uses CONNECT tunneling so the proxy handles DNS resolution.
Configure NodeHttpHandler with HttpsProxyAgent when a system proxy is detected.

* test: add coverage for getSystemProxyUrl function

* fix: honor NO_PROXY, support http proxy, trim proxy env vars
* chore(deps): update node.js to v24

* chore(deps): target node 22 lts

* chore: downgrade Node to 22 LTS to fix Windows CI crash

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Elliott de Launay <edelauna@gmail.com>
Zoo-Code-Org#968)

The Architect mode custom instructions ended with 'put it in the /plans
directory', which models interpreted as an absolute filesystem path,
causing 'EROFS: read-only file system, mkdir /plans' when saving plan
files. Reword to './plans' and clarify it is relative to the workspace
root.

Fixes Zoo-Code-Org#965

Co-authored-by: Toray Altas <6816042+taltas@users.noreply.github.com>
…o-Code-Org#1014)

* feat(TaskRegistry): introduce TaskRegistry and migrate clineStack

* refactor(tests): replace `as any` casts with bracket notation for private member access

* chore(eslint): enforce no-explicit-any with bulk suppressions for existing violations

* docs(TaskRegistry): push method

* fixup! chore(eslint): enforce no-explicit-any with bulk suppressions for existing violations
…Code-Org#986)

* chore(deps): update dependency shell-quote to v1.9.0 [security]

* chore(deps): remove obsolete shell-quote types

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Elliott de Launay <edelauna@gmail.com>
WebMad and others added 3 commits July 26, 2026 22:46
…e-Org#1019)

* refactor(shared): use canonical profile provider identifiers

* test(shared): strengthen profile validator coverage

* test(shared): avoid mutating provider identifiers

* chore(lint): prune profile validator suppressions
* refactor(core): use canonical provider identifiers

* test(core): tighten canonical provider coverage

* test(core): avoid mutating provider identifiers

* test(core): address canonical identifier review feedback

* chore(lint): update test suppression counts

* test(core): keep existing non-null assertions
…oo-Code-Org#1024) (Zoo-Code-Org#1032)

* fix(ripgrep): resolve platform-specific binary for @vscode/ripgrep >=1.18

* fix(environment): gracefully handle ripgrep not found during file listing

* fix(ripgrep): use npm_config_arch for platform-package resolution

* refactor(ripgrep): replace createRequire resolver with static candidate paths

* fix(ripgrep): evaluate npm_config_arch at call time in candidate paths

---------

Co-authored-by: Naved  Merchant <naved.merchant@gmail.com>
Lee-Si-Yoon and others added 9 commits July 28, 2026 23:57
…de-Org#950)

* chore(lint): add core/webview to no-floating-promises ratchet

* fix(webview): catch indexing errors and cover changed handler paths

* chore(lint): triage new core/webview call sites after merging main

Also restore README.md to the upstream version, dropping an unintended formatter artifact picked up during the merge commit.

---------

Co-authored-by: edelauna <54631123+edelauna@users.noreply.github.com>
…Zoo-Code-Org#971)

* fix(branding): replace remaining user-facing "Roo" strings with "Zoo"

Replace user-facing product references from "Roo" to "Zoo":
- Webview panel and editor tab titles
- Integrated terminal names
- Diff view labels
- VS Code LM authorization justification
- LM Studio error messages
- Missing-parameter tool error (now i18n-keyed via tools:missingToolParameter[WithPath] across all 16 locales)
- Webview-ui localization strings (chat, settings, prompts across all locales)

Per review feedback, references to the external Roo provider/router remain
untouched: the routerRemoval messages, errors.roo/info.roo i18n keys, Roo
credit-balance notices, and other internal identifiers that reference the
legacy Roo provider rather than our brand.

* test: bump coverage for Roo-to-Zoo user-facing string changes (Zoo-Code-Org#971)

* chore: simplify i18n mocking in Task.spec.ts

* test: increase coverage of vscode-lm.ts and vscode-lm-format.ts

* fix(types): eliminate any casts in vscode-lm provider and format transform

---------

Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: Elliott de Launay <edelauna@gmail.com>
… emit output (Zoo-Code-Org#1043)

* fix(terminal): delay command_output ask for short foreground commands

The command_output ask fired on the first output chunk of any foreground
command, prompting users even for commands about to complete. Schedule the
ask instead so it only fires when the command is still running after a
5s delay, preserving the interrupt/feedback path for long-running commands
while letting short commands finish without prompting.

Closes Zoo-Code-Org#1042

* fix(terminal): anchor command_output ask delay to execution start

Anchor the ask-delay timer to onShellExecutionStarted (falling back to the
pre-runCommand timestamp) so shell-integration startup on cold terminals
does not consume the grace period, and expand ask-policy tests to cover
the agent-timeout cancel, re-anchor reschedule, ask error handling, and
non-message responses to restore patch coverage.

* test(terminal): cover fallback anchor for command_output ask delay

* fix(terminal): clean up pending command_output ask on completion

- Supersede a still-pending command_output ask in onCompleted so it
  resolves immediately instead of lingering until the next interactive
  message, and clear the Proceed/Kill controls in the webview when the
  final non-partial command_output say arrives.
- Continue the process for any ask answer, not just typed messages, so a
  non-message response actually backgrounds the command and the tool
  resolves before the process completes.
- Strengthen ask-policy tests: assert the rescheduled ask still fires at
  the re-anchored deadline, assert early resolution for non-message
  answers, and cover ask supersession on completion.

* test(terminal): note synthetic yesButtonClicked in non-message ask test

---------

Co-authored-by: Roomote <roomote@roomote.dev>
…, Story 3.1) (Zoo-Code-Org#1031)

* feat(TaskScheduler): introduce TaskScheduler and wire into ClineProvider

* feat(Task): keep track of active running task

* docs(eslint): updating guidance on how to handle suppression file

* fix(ClineProvider): route createTaskWithHistoryItem through taskScheduler

* test(e2e): add scheduler regression tests for task resume paths

* refactor(ClineProvider): extract scheduleTask helper to deduplicate fire-and-forget scheduling

* refactor(ClineProvider): extract scheduleTask helper to deduplicate fire-and-forget scheduling

---------

Co-authored-by: Naved  Merchant <naved.merchant@gmail.com>
…oo-Code-Org#1045)

* ci: harden E2E workflow against VS Code binary download failures

Add restore-keys fallback to the VS Code test binary cache, probe the VS
Code update API before running tests, fall back to a stale cached binary
(via VSCODE_VERSION) when the CDN is unreachable, and retry the mocked
E2E step so transient network blips don't fail the merge queue. Skip
writing the pass marker when the stale-binary fallback was used.

Closes Zoo-Code-Org#1044

* ci: scope E2E retries to binary download, probe CDN endpoint, prune stale binaries

Address review feedback on Zoo-Code-Org#1045:
- Retry only the VS Code binary download (its own step), so genuine
  test failures fail fast instead of re-running the whole suite.
- Probe the archive CDN endpoint (via the 302-redirect HEAD) in
  addition to the update API, so the stale-binary fallback also
  engages when only the CDN host is down.
- Restore/save the binary cache with restore+save actions and prune
  older vscode-linux-x64-* dirs so each saved entry keeps one binary
  instead of growing with every version bump; skip the save when the
  stale fallback was used.
- Emit a ::warning:: when endpoints are unreachable with no cached
  binary, and echo why the pass marker is skipped on fallback runs.

---------

Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: edelauna <54631123+edelauna@users.noreply.github.com>
)

* refactor(webview): use canonical provider identifiers

* test(webview): remove brittle identifier mutation tests

* fix(webview): handle remaining model providers explicitly

* test(webview): avoid unreachable coverage branch

* refactor(webview): use canonical anthropic identifier

* test(webview): cover Anthropic Opus 1M tier

* test(webview): use canonical Anthropic identifier

* fix(webview): address canonical provider review

* test(webview): use canonical provider identifiers

* test(webview): cover Kimi Code model selection
* refactor: finish canonical provider identifier audit

* fix: address provider identifier review feedback

* refactor: centralize Anthropic protocol value

* refactor: reuse canonical provider protocol constants

* refactor: centralize OpenAI protocol value

* test: use canonical keyless provider identifiers

* test: address protocol routing review feedback
* refactor(api): centralize service-tier primitives

* test(openai-native): cover omitted completion tiers

* test(openai-native): cover resolved streaming tiers

* test(api): cover service tier fallbacks

* test(api): cover remaining service tier branches

* refactor(api): remove duplicate tier capture

* test(openai-native): cover flex service tier

* test(openai-native): expand service tier coverage

* refactor: address service tier review feedback

* refactor(api): address service tier review feedback

* test(webview): add model info visual snapshot

* fix(webview): isolate visual test dependencies

* test(webview): update service tier visual baseline

* fix(webview): add @source directive so Tailwind utilities generate in CT builds

---------

Co-authored-by: Elliott de Launay <edelauna@gmail.com>
@WebMad
WebMad force-pushed the feat/openai-codex-fast-backend branch 3 times, most recently from 4d112a7 to ce11b1a Compare July 30, 2026 15:12
@WebMad
WebMad force-pushed the feat/openai-codex-fast-ui branch from 0285106 to 69e5851 Compare July 31, 2026 05:14
@WebMad
WebMad changed the base branch from feat/openai-codex-fast-backend to main July 31, 2026 05:14
@WebMad

WebMad commented Jul 31, 2026

Copy link
Copy Markdown
Owner Author

Replaced by Zoo-Code-Org#1076, targeting the upstream repository after the preceding stack PRs were merged.

@WebMad WebMad closed this Jul 31, 2026
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.