diff --git a/devlog/_plan/261022_spanish_split/010_plan.md b/devlog/_plan/261022_spanish_split/010_plan.md new file mode 100644 index 00000000000..8ed2994ebd2 --- /dev/null +++ b/devlog/_plan/261022_spanish_split/010_plan.md @@ -0,0 +1,1351 @@ +# Spanish localization: split after #7406 + +## Delivery order + +The owner closed #7406 on October 22 because its combined locale changes were +too broad for the review queue and conflicted with dev. The original published +branch stays intact. Recover the contribution in independent branches rooted at +current dev, starting with the documentation site as requested: + +1. `codex/spanish-docs`: docs-site Spanish, directly related canonical/translated + documentation corrections, and the existing documentation regression guards. +2. `codex/spanish-dashboard`: shared Desktop/browser dashboard locale, total + auxiliary maps, formatting, tests and the dashboard contract. +3. `codex/spanish-readme`: README translation/navigation/manifest and its guard. + +Submit the first PR first. Preserve the later branches without opening multiple +review requests at once. Each submission must refresh dev and revalidate its +own diff; a clean merge today does not guarantee compatibility with future dev. + +## Documentation base and scope + +Initial base: `782655d2317d4c14a99d6db72e9be3368a27886d`, 23 commits after the combined +PR's last integration base. Before submission dev advanced to +`5f7f7db5765c7e99ab2f52c04d9fe0e4ce7608cf`; it was merged and its published +macOS storage-refusal clarification was synchronized in Spanish. Recovered changes use that base's files and retain +its new CLI registration and fallback navigation. The docs branch changes no +dashboard catalog, backend source, dependency, release or workflow implementation. + +Spanish covers all 74 current canonical paths, including the new fallback guide. +The refresh includes Remote Link peer versions, Windows refusal/recovery, apply +digests, client restart, service/install JSON and Claude reasoning details. +The sidecar note distinguishes web-search xAI from routed vision in both English +and Spanish. Other latest findings fix product metadata, prose number separators, +the plugin `name` string, and Pi loopback examples in all translated guides. +The timezone-dependent GUI test belongs to the separate dashboard branch. + +## Validation receipts + +- Frozen root/docs installs: no dependency or lockfile changes. System Bun is + 1.4.4; tests use the required Bun 1.4.3 in ignored scratch space. Its official + archive SHA-256 was verified against the GitHub release asset digest. +- Root `bun run typecheck`: passed. +- Final Spanish docs after the Pi contract guard: 15 passed, 0 failed (2,126 assertions). +- Structure and privacy scan: passed on staged files. +- Actual-browser inspection: Spanish landing/fallback guide at 1366 px, Pi at + 390 px, localized code controls, no horizontal page overflow, and 17 Spanish + Pagefind results for fallback. Captures remain outside the source branch. +- Initial Spanish docs and both layout tests: 41 passed, 0 failed. +- All docs guards, structure/hygiene/size and CLI export: 445 passed, one size + scan timed out while the docs build was running. Isolated size-guard retry + with `--timeout 120000`: 9 passed, 0 failed; repository scan took 691 ms. +- `OPENCODEX_DOCS_OFFLINE=1 bun run build`: 667 pages and 97,587 checked internal + links; Pagefind and sitemap completed. Existing unsupported sshconfig + highlighting falls back to text. + +The full root suite is not claimed passing for this branch. The preceding +combined-PR run hit its 900-second limit, with Windows symlink EPERM and timing +failures. This documentation-only split uses the root policy's resource +exception with explicit source-reading guards and exporter regressions instead. +Exact-head upstream CI and independent human language/render acceptance remain +required. No native Desktop acceptance is claimed. + +## Review hold + +Keep the first submission Draft for owner/localization acceptance. Do not reuse +old CI receipts as validation of a new head. Do not repeatedly request bot +reviews or wait for their completion after publication; the contributor will +inspect the result. Screenshot evidence belongs outside the feature branches. + +## PR #7559 consolidated review correction + +Reviewed all 36 CodeRabbit threads against canonical English and, for operational +claims, the current service guards, stop path, sidecar settings and CI workflow. +The corrections cover authentication, service repair/restart, search disable and +journal recovery, preview exit codes, adapter contracts and Spanish terminology. +Two suggested premises needed qualification: explicit `ocx stop` stops a managed +service and then restores native Codex; a valid refused preview can exit 0 because +inspection succeeded without applying a change. Neither was changed into the +incorrect behavior suggested by the review wording. + +The adjacent semantic pass also restored default-off wording for subagent force, +native subagent defaults, native WebSocket controls and custom context inference. +It checked account/queue/adapter state distinctions and removed unavailable +benchmark-filter instructions from every locale. The current backend, dependency +and workflow implementations remain outside this contribution. + +Merged dev at `ec8b8cfac11e8f179c4351f01baa32d76a71dd1b`, preserving both the new +chat layout shard and this branch's docs shard, then at +`9164950d926c770875a267edfeb74183af5caebc` and the docs-only update +`880127dbd356c720779222a14a97c11adc8cf881`. Spanish now includes Desktop +picker-state uncertainty, Antigravity family-quota evidence and the five-slot +`spawn_agent` model-selection rules, including both account-selector cases. + +Current validation: frozen root/docs installs, root typecheck and structure check +passed. The explicit docs/layout/hygiene/export/preview/service-auth group ran 588 +tests: 587 passed and the repository file-size scan timed out under the parallel +runner. Its isolated retry passed all 9 cases, with the repository scan completing +in 602 ms; no size cap or guard was changed. The root-suite resource exception +above still applies. The final Spanish-doc regression run passed all 15 tests +(2,132 assertions). The final offline site build completed with 667 pages and +97,652 checked internal links, Pagefind and sitemap. Desktop authentication and +service-token sections, mobile sidecar controls, six rendered coding benchmark +boards and Spanish search results were inspected in the real browser. The token +search returned 49 results. Screenshot evidence is pinned outside the source +branch at `588c95e9e636700f2035311017328d5670451e4a` on `pr-assets`. +Privacy scan and diff whitespace checks passed. Keep the Draft and independent +human language/render-acceptance hold; an agent's inspection is not that approval. + +## PR #7559 owner-requested refresh, October 24 (UTC) + +Addressed the owner's [October 24 UTC triage comment](https://github.com/lidge-jun/opencodex/pull/7559#issuecomment-6378349500). +Merged `dev` first at `2494848f56e8a4f283722b2ebd816977e828c7af`, then at +`ceef4889e4666dc0492a375d272eafa5b785361e` (2.93.0), preserving published history. +All eight upstream test-layout shards remain byte-for-byte identical to that +base; the Spanish documentation shard is appended without dropping any shard. +The provider documentation retains upstream's new Alibaba Token Plan section. + +Corrected the remaining nonblank condition in `es/reference/adapters.md`: a +string must contain a non-whitespace character to be converted, while empty and +whitespace-only strings remain unchanged. The existing runtime regression file +checks those cases and exact whitespace preservation. Updated Spanish to match +current JEV session pinning and saved strategies, Antigravity per-account model +availability, provider discovery and credits, Hermes affinity, native effort +normalization, Remote Link readiness/retry diagnostics, and the Bun 1.4.4 runtime. +The landing also translates the new code-signing-policy link while retaining the +required English signing attribution verbatim. + +Validation for this refresh: + +- Frozen root, GUI and docs-site installs passed; no contribution-owned lockfile + or dependency changes. Tests use isolated Bun 1.4.3 through `scripts/test.ts`. +- All docs guards plus layout, structure, hygiene, routed-agent conversion and + CLI-export regressions: 512 passed, 0 failed, 4,661 assertions across 20 files. +- Separate file-size guard: 9 passed, 0 failed, 85 assertions. No cap changed. +- After the final upstream merge, fixture teardown, Codex auth-context and + server-management-auth regressions: 143 passed, 0 failed, 693 assertions. +- After the final Spanish edits, the Spanish documentation guard was rechecked: + 15 passed, 0 failed, 2,138 assertions. These 15 are already included in the + 512-test group and are not an additional coverage count. +- Root typecheck and structure check passed again after the final upstream merge. +- The offline documentation build checks all 667 pages, internal links, Pagefind + and sitemap. Final build and staged privacy-scan receipts are recorded in the + PR's Verification section before publication. +- Actual-browser DOM checks confirmed the corrected adapter paragraph and JEV + section, Spanish language metadata, mobile navigation, and no page overflow at + 1366px and 390px. The browser screenshot service returned "Unable to capture + screenshot", including on a fresh tab, so this refresh has no new capture and + does not claim fresh visual acceptance. Existing captures stay on `pr-assets`. + +The documented full-root-suite resource exception still applies. Hosted CI for +the new exact head, including the owner's requested `lane=all`, requires +maintainer authorization. Human Spanish/render acceptance and fresh review are +still pending; keep Draft and do not describe a skipped bot review or an +`action_required` workflow as passing. Request one consolidated CodeRabbit +review after publication without waiting for its result. + +## Consolidated language and contract review, October 24 + +The contributor authorized corrections after a read-only audit of the completed +[CodeRabbit review](https://github.com/lidge-jun/opencodex/pull/7559#pullrequestreview-5636437341). +Its eleven inline findings and two outside-diff findings are addressed together: +native-context activation and trial wording, the Droid bridge limitation, +code-mode tool names, architecture metadata, live/offline CLI management, +cleanup preview behavior, catalog-refresh exit codes, empty effort lists, +current bundled Bun, the localized signing-policy link, and log scan limits. +Both files reported for missing final newlines were confirmed and corrected. + +The service-install caution was checked against `src/service/cli.ts`, +`src/service/orchestration.ts` and `src/service/health.ts`: installation stops +the tracked standalone listener before loading the managed service, then probes +the installed service port. English and Spanish now explain that handover and +show a post-install service-status check. This documents existing behavior. + +Read CodeRabbit's official [command reference](https://docs.coderabbit.ai/reference/review-commands), +[configuration reference](https://docs.coderabbit.ai/reference/configuration), +[path instructions](https://docs.coderabbit.ai/configuration/path-instructions) +and [pre-merge checks](https://docs.coderabbit.ai/pr-reviews/pre-merge-checks). +The repository uses the assertive profile and disables automatic Draft review. +Keep those settings intact. Add useful docstrings to the changed localization +and parity helpers instead of suppressing coverage checks. Publish one +consolidated update and request one full review, rather than triggering reviews +on a sequence of partial pushes. A full review is not an exhaustive guarantee. + +Merged current `dev` at `26598df2c4c07d781e344ac6119953fed77ecb27`, +preserving the complete upstream test-layout roster and this branch's docs shard. +Spanish now includes JEV pin-editor validation, Qoder provider-only catalogs and +replay-envelope refusal, connected-client stop preservation, account-slot +identity and headless listings, safe subagent limit conversion, edited-value +ownership, the native context-window override, Kimi K3.1 pricing and the +display-only Business Premium capacity weight. + +The broader pass examined every page's metadata, ran command/identifier/link +parity across all 74 canonical paths, checked negation candidates against their +English paragraphs, and reviewed operational contracts in the affected guides. +It corrected literal mistranslations in model names, protocol terminology and +negative conditions, plus unclear recovery and cost-limit wording. Only the +two current-bundle statements in each Windows-memory guide changed version; +historical Bun observations remain historical. A manifest-derived regression +now covers those statements to prevent the same version drift. + +Frozen installs, typecheck and structure checks passed. The expanded docs, +layout, hygiene, routed-agent, CLI-export, combo-target and service-preflight +group passed 556 tests with 5,043 assertions across 23 files. The direct +file-size-ratchet command passed; its first test scan exceeded 120 seconds +(8 passed, 1 timeout). The separate retry after the build passed all 9 tests +(85 assertions; repository scan 611 ms), without modifying a cap. Final Spanish +parity and CLI combo-file validation passed 68 tests (2,304 assertions); the 15 +Spanish cases overlap the first group, while the 53 combo cases are additional. +The build completed with 667 pages, 97,690 checked internal links, Pagefind and +sitemap. All nine landing locales were checked for an existing localized +signing-policy target or the canonical fallback, retaining the required signing +attribution. The full-root-suite resource exception remains explicit; no +old-head CI is presented as validation of this update. + +Actual-browser inspection confirmed the Spanish signing-policy navigation, +1280px landing and policy layout, 390px native-context rendering and mobile +navigation without page overflow, and 41 Spanish Pagefind results for context. +Fresh screenshots are published on the separate `pr-assets` branch, not this +source branch. The inspection also found and corrected the hero's accessible +English conjunction and untranslated beta announcement. + +Federico's human Spanish acceptance was recorded on the preceding published +head. The current correction is not a claim that he executed a new browser or +native Desktop test. Keep the fresh-review and maintainer-acceptance gates open +until their actual outcomes are available. + +## Final upstream refresh and verification, October 25 + +Before publication, `dev` advanced another 25 commits. Merged +`8ebe46b2076445d100cef1e52af4d98d78f8f1e1` without conflicts and retained the +upstream layout shards. Synchronized the nine changed canonical pages: +contribution/test-runner guidance, hard-lock candidate inspection, Hermes named +profiles and marketplace detection, Moonshot K3.1 seeds, Pi startup failures, +native citation projection, expected-Home sync flags, Kiro overage refusals, +and response-download backpressure. The test runner pin is now Bun 1.4.4, +matching the shipped runtime; the Spanish contributor version is covered by +the manifest-derived regression. Also clarified Kimi cache-key rejection, +effort-only LazyCodex saves, and identical-catalog no-op behavior. + +Final frozen installs changed no dependencies. Typecheck and structure checks +passed. Under the current 1.4.4 pin, the focused docs/layout/CLI/service group +passed 611 tests (5,218 assertions, 24 files). Eight additional relevant runtime +files passed 181 tests (3,465 assertions), including Hermes profiles, guarded +sync, Kiro, native compact and pinned HTTP. After the final prose edits, the +Spanish and Bun guards passed 18 tests (2,155 assertions), overlapping the first +group. The first file-size repository scan exceeded 120 seconds (8 passed, +1 timeout; 172 seconds observed in the case). The direct ratchet command +passed, then an isolated retry passed all 9 tests (85 assertions; repository +scan 447 ms), without a baseline or cap change. These results cover 801 unique +focused cases; they do not claim a full-root-suite result or establish the +cause of either earlier scan timeout. + +The final offline build completed with 667 pages, 97,705 checked internal links, +Pagefind and sitemap. Actual-browser inspection checked the newly synchronized +Hermes and expected-Home sync sections at 390px and recaptured the Spanish +landing at 1280px. The browser viewport was restored afterward. The additional +captures are on the fork's separate `pr-assets` branch at +`73c6b4592d0bd103c9717d049a0c6020b0321dd9`, under `spanish-docs-20261025/`; +no image is added to this source branch. + +Publish the correction commits together, document staged privacy validation, +resolve the eleven corrected inline threads, and request one full review. +Do not wait for CodeRabbit's result. The full-root resource exception, +authorized current-head CI, requested manual `lane=all`, and maintainer +acceptance remain explicit gates; the PR stays Draft. + +## Consolidated review correction, October 26 + +The contributor authorized correcting the eight new inline findings from the +completed CodeRabbit review of `8400645a26c36520f5df33ece80c8f49ed0c47b5`. +Merged 33 newer `dev` commits through +`81ce59591c06b2f1bde71748588fda69078662a2` (2.93.0), preserving history in +`f462c6907a898dc5a324a1032043daf923d48828`. The only conflict appended both +the upstream combo shard and this contribution's docs shard. The resulting +roster, all upstream shard contents, and the expected fixture roster were +compared with upstream; no upstream entry was dropped. + +The eight corrections cover prompt-base replacement, separate foreground Hub +and dashboard terminals, Stop ownership/refusals, cost coverage, proxy precedence, +sidecar save/apply receipts, Advisor failure/retry behavior, and manual Desktop +update instructions. English is clarified where it also obscured existing +behavior; the two-terminal correction is applied across all nine physical +documentation locales. No runtime or CI policy is changed by this contribution. + +The cost explanation was verified against `src/usage/summary.ts` and its cost +regressions. A known-zero-spend refusal is not unknown potentially billed work; +it does not make a subsequently measured attempt unpriced. A row consisting +only of known-zero refusals contributes no measured request fact, and a summary +containing only those rows is unmetered. A cancellation or unmeasured upstream +attempt can still be potentially billable. The updated prose preserves these +distinct cases rather than treating every failed request alike. + +Reviewed the complete prompt-layer and Advisor guides against current English +and the relevant runtime. Corrected additive layers versus replacing variants, +account attribution, repair/ownership, cached skill catalogs, unquoted JSON keys, +consultation deduplication, and task continuation after an unavailable preflight. +Actual-browser inspection also exposed mistranslated Remote Workspace grant, +prompt-acceptance, hard-link, ordered-message and containment language. Rechecked +that complete guide against English, retaining all commands and identifiers. +Escaped the English and Spanish `` labels so their text renders instead +of being interpreted as HTML. + +Synchronized the 18 canonical pages changed by the new upstream commits. Spanish +now includes Flex selection, opt-in combo cooldown reprobes, JEV Decisions +validation, Qoder/WorkBuddy homes and admission, provider seed repairs, MiniMax +retirement, Antigravity Chat limits, literal SSH Include paths, retired OpenCode +sidecars, restart handover, native compaction/tool rules, WebSocket liveness, +effort floors, Cursor globs and Windows launcher/update process-tree behavior. + +The existing docs guard now exercises separate foreground/GUI blocks in all +nine locales. Its code-span scanner correctly treats backslashes inside code +spans as literal, including a trailing-backslash path followed by identifiers. +The regression rejects an altered later identifier while preserving escaped +prose openers. This follows CommonMark 0.31.2 section 6.1; the helper remains a +technical-parity scanner, not a general Markdown parser. All 74 paths retain +command-block and inline-identifier parity. + +Frozen root, GUI and docs installs passed without lockfile changes. Bun 1.4.4 +matches the test/runtime pin. Typecheck, structure and the direct file-size +ratchet command passed without changing a cap. The isolated wrapper was used +for all tests: + +- Docs/layout/structure/hygiene/CLI group: 536 passed, 0 failed, 4,803 assertions, + 21 files. This includes all `docs-*.test.ts` guards, both layout tests, + structure-ssot, ci-structure-gate, repo-hygiene, cli-export-command, + cli-combo-set-targets and cli-combo-parity. +- Advisor/agent/cost/service/update group: 580 passed and one Windows fixture + failure, 4,185 assertions, 25 files. The failure is `advisor-budget.test.ts` + "a symlink is refused before SQLite can mutate its target": Windows returned + EPERM while `symlinkSync` created the fixture, before the behavior under test. + The test and implementation match upstream; neither was changed or skipped. +- Current-dev runtime group: 533 passed, 8 skipped, 0 failed, 5,145 assertions, + 20 files. It covers Flex, cooldown reprobes, JEV, client homes, provider seeds, + Cursor globs, required tools, compaction, WebSocket liveness, the CLI launcher, + sidecar usage and Antigravity Chat. The eight existing Windows skips cover + Cursor symlinks, POSIX SSH Include escaping and six PATH-based Bun cases; + those platform branches remain for authorized Linux/macOS CI. +- Re-ran the unchanged Advisor budget file on Linux using official Bun 1.4.4 + image `oven/bun@sha256:1d22548f177f4ff38e0c15baa3c2c46c6c2060ba2d1bc573bb4720b407548f1d`: + 4 passed, 0 failed, 13 assertions, including the symlink refusal. The disposable + container had no network, a read-only checkout and a private temporary + filesystem; no Windows permissions or personal configuration were changed. + Three cases overlap the Windows group, so these are not four new unique cases. +- The final docs/layout group above was rerun after the last prose and scanner + regression edits; it includes the Spanish and Bun guards. An earlier isolated + recheck passed 20 tests with 2,188 assertions, overlapping that group. + +The exact reproduction commands and final build, browser and staged privacy +receipts are included in the PR description. The full-root-suite resource +exception remains: this turn does not claim a passing full root run, and the +preceding combined-PR 900-second run included failures not all classified as +environmental. The unexecuted remainder and cross-platform coverage still need +authorized exact-head CI and the maintainer's requested manual `lane=all`. + +CodeRabbit reported 100% docstring coverage on the preceding head, but its +LanguageTool check did not cover everything because the organization's local +character budget was exhausted. The manual language/contract pass and parity +tests do not turn that into an exhaustive grammar-tool success. Keep that +limitation and fresh review separate from contributor language acceptance. + +The final offline build completed with 667 pages and 97,816 checked internal +links, including Pagefind and sitemap. The built nine-locale signing-policy and +attribution check passed. Actual-browser inspection at 1280px verified the +prompt-variant replacement warning and visible `` label; at 390px it +verified the two-terminal Hub setup and Advisor failure guidance. These pages +had Spanish language metadata and no horizontal page overflow. The Spanish +Pagefind query `asesor` returned 12 results and its Advisor result opened the +Spanish guide. The viewport was restored afterward; the preview remains at +`http://127.0.0.1:4323/es/`. Native Desktop was not exercised, and personal +Desktop port 10100, credentials and configuration were not used. + +Four fresh screenshots are on the fork's separate `pr-assets` branch at +`0a6e2aae19a79947362eb1530eb84b120addbcc1`, under +`spanish-docs-20261026/`. None is added to this source branch. Rechecked upstream +before publication: the branch contains the fetched current `dev` tip. +Publish the consolidated source update, resolve only the eight corrected +threads, and request one full review without waiting for it. Keep Draft until +fresh review, authorized exact-head CI and maintainer acceptance are recorded; +historical contributor language acceptance is not a new human or native test. + +## Consolidated review correction, October 27 + +The contributor authorized resolving the latest pending review. The completed +CodeRabbit review of `c5d9b720ba518f761127855c10da1aa65f77a1f7` supplied ten +inline findings and one outside-diff finding. All eleven are addressed together: +the separate Hub data/management origins, quota freshness, account selection, +replay-429 diagnostics, conversation-link normalization, provider generation +tests, Ollama tool rules, the exact `AdapterEvent` symbol, signing fallback, and +synced-folder detection. The outside-diff log-filter finding belongs to +`reference/cli/agents.md`, as its explanation states, rather than the path in +the generated heading; English and Spanish now document stderr and exit 2 for +usage errors versus stderr and exit 1 for operational failures. + +Preserved published history while merging 29 upstream commits through +`4118b90ba40076c62af66fd922421943204bb041` (2.94.0) in +`e0f3e246acbadb9aedfe56afcfddab248bc38392`. A final fetch found two more commits; +merged through `95cfa30ec72f201818b1c80ff9b03fe70c7a8a0e` in +`5b173a202026b7d15481ac1f144fbff329fab1d8`. Both layout conflict resolutions +retain every upstream entry and all eleven upstream shards, appending only +this contribution's docs shard. The expected fixture roster was checked +against upstream after removing only the additional Spanish-docs entry. + +Synchronized the fifteen canonical pages changed by those upstream commits. +Spanish now covers GPT-6.1 Terra's distinct native/API limits, context choices, +reasoning capabilities, Qoder image admission, provider seeds and verification +limits, Hermes refresh ownership, direct-account credit metadata, combo reprobe +reservations, checkpoint authority, Claude tool loading, the confirmed POSIX +Codex CLI update jobs, completed-tool relay, Mistral reasoning and Desktop +recovery verification. No backend, GUI, desktop, dependency or workflow +implementation differs from this integration base because of the contribution. + +The direct corrections also exposed adjacent mistranslations: a generation +window shorter than one second is unavailable; Ollama Cloud does not enforce +format constraints; non-streaming API callers still receive HTTP 413; and Hub +consent, client-key ownership, disconnection, TLS/Host/Origin checks and service +repair need their existing conditions preserved. These passages were compared +with current English and implementation. Signing fallback is clarified in +English, Spanish and Turkish: an unsigned original remains unchanged, an MSI +keeps its original updater signature if present, and the standalone executable +has no original updater signature. This is documentation of existing behavior, +not a change to signing or authorization. + +Corrected the first Hub connection command and the dashboard development +two-terminal recipe across all nine physical locales. The existing Hub guard +now checks each connection example, joining shell continuations before +checking the separate data/management origins. A read-only comparison finds +one invalid first example in each locale on the preceding published head and +none after the correction. The foreground-recipe regression checks both the +Remote Workspace and dashboard guides in every locale. No cap was increased, +test skipped, or upstream test-layout entry dropped. + +Frozen root, GUI and docs installs passed. Bun 1.4.4 matches the runtime/test +pin. Final root typecheck, structure check and the direct file-size ratchet +passed. Focused receipts, using repository wrappers and synthetic test homes: + +- All docs guards plus layout, structure and hygiene: 470 passed, 0 failed, + 4,882 assertions across 19 files. This final run follows both merges and the + Desktop guide synchronization. +- Provider completion/quota, Ollama tools, log filters, client connection and + spend-ledger contracts on Windows: 768 passed, 5 platform skips and one + fixture failure across 23 files, with 3,092 assertions. The failure is + `spend-ledger-owner.test.ts` "a dangling journal symlink is refused rather + than followed": Windows returned EPERM while creating the symlink fixture, + before exercising the behavior. The test and implementation match upstream. +- Linux storage/startup and signing-policy regressions: 56 passed, 25 skipped, + 0 failed, 303 assertions across 4 files. This covers the Windows-blocked + symlink case and POSIX identity/hard-link cases. The skips are native + PowerShell/Authenticode fixtures unavailable in the minimal Linux image. +- Windows signing-policy file: 26 passed, 12 existing platform skips, 0 failed, + 186 assertions. This does not establish real release signing. +- GUI quota freshness/refresh/account and log-filter tests: 93 passed, 0 failed, + 527 assertions across 7 files using the pinned GUI test wrapper and synthetic DOM. +- Current-dev contracts: the 19-file Linux group initially passed 511 tests, + skipped 1 and failed 9 (3,067 assertions) because its temporary mounts were + non-executable. A direct executable/access probe reproduced EACCES. Rechecking + only the two affected CLI apply/admission files with executable private + mounts passed all 50 tests with 1 root-user permission-case skip and 302 + assertions. The other 17 files had already passed 470 tests; these results + overlap and are not an additional unique 50 beyond that 19-file group. + Earlier preparation attempts lacked Node/npm or a writable workspace; their + failing setup logs are retained locally rather than described as successes. +- Latest Desktop recovery contracts on Windows: 82 passed, 8 existing platform + skips, 0 failed, 505 assertions across 3 files. Compiled native Linux recovery + and procfs cases remain for the appropriate platform. + +Linux storage used official Bun 1.4.4 image +`oven/bun@sha256:1d22548f177f4ff38e0c15baa3c2c46c6c2060ba2d1bc573bb4720b407548f1d`. +CLI apply additionally used Node 24.22.1/npm 11.19.1 from +`node@sha256:55fb5f5a527ea2c5c4a95f963e48ef90aa38c7b346054fdc8ee9957a2b55d205`, +with the same Bun copied into a disposable image. Network was disabled; the +checkout was mounted read-only, and the explicit source copy, private npm +prefixes, homes and temporary files lived only in container tmpfs. No personal +installation was updated or tested, and no host permission was changed. + +All 74 canonical paths retain command-block and inline-identifier parity. +The final build completed with 667 pages and 97,927 checked internal links, +including Pagefind and sitemap. Built locale signing-policy links and +attribution also passed. Actual-browser review checked the Hub connection, +provider generation contract and current model guidance at 1280px, and Hub and +Desktop guidance at 390px. Spanish metadata was present and the inspected +pages had no horizontal page overflow; long code remains internally scrollable. +Pagefind returned 15 results for `Terra`, and its GPT-6.1 Terra link opened the +Spanish provider guide. The viewport was restored after review. Native Desktop +was not exercised; personal port 10100 and personal configuration were untouched. + +Four screenshots are on the separate `pr-assets` branch at +`4789fc6f3a797341b6d5c4929fe4329b7b5a9b7b`, under +`spanish-docs-20261027/`; none is on the source branch. The exact commands, +staged privacy result and published source SHA are recorded in the PR body. + +The full-root-suite resource exception remains: no passing full root run is +claimed, and the earlier 900-second run had failures not all classified as +environmental. Focused success leaves the remainder, skipped native cases and +cross-platform coverage for authorized current-head CI and the maintainer's +requested manual `lane=all`. Adding `ci:full` through the connector was denied +with HTTP 403; no alternate credential route was attempted. The existing +fixture-path selector should independently choose the full Ubuntu lane for +this PR's fixture diff, subject to maintainer authorization. No CI policy is +changed. After publishing, resolve only the ten corrected threads and request +one full CodeRabbit review without waiting for its result. Keep the PR Draft +pending fresh review, authorized CI and maintainer acceptance. Historical +contributor Spanish acceptance is retained, not recast as a new human test. + +## Readiness refresh, October 29 + +The contributor authorized closing the actionable pending work after a read-only +audit. Fast-forwarded the clean checkout to the maintainer's published +`f074adb71c631b057ef375dbf683ed3e5b3bd14f`, retaining the ordinary carry merges, +their Spanish corrections and attribution. Merged 49 newer dev commits through +`3ea89653f5727aea41948ddbd5e833f74afe3e36` (2.95.0) in ordinary merge +`fae2396a53a066dbe05d31d49131f304cb57f618`. Before publication a fresh fetch still +reported that same tip and zero missing dev commits. No history was rewritten. + +Resolved four merge conflicts: the configuration sidebar retains Catalog with +Spanish copy and every upstream entry; landing and JSON-LD retain the new +gateway wording and locale registration; the test layout retains all 19 +upstream shards plus this contribution's docs shard. Compared the normalized +layout with upstream after removing only that shard, verified every upstream +shard, and compared the expected fixture map after removing only the added +Spanish-docs test entry. None was dropped. + +Spanish now covers all 78 canonical paths, including the new LM Studio strict +template, catalog omission and Windows ACL-timeout pages. Updated the changed +quickstart, Claude Desktop model visibility, constrained tool translation, +native model omission, context-overflow failover, Advisor caller policy, +provider/model batch probes, Kiro IAM login, Moonshot migration, xAI includes, +Opus thinking display, SSH recovery and keyless CC-Switch import. The previously +separate #7770 is now in dev, so its `completeOnMaxOutputTokens` setting is +included with the same default and exclusions as English. Added the new +Spanish runtime-evidence strings and regenerated the client support matrix with +the owning command; no other locale output changed. + +The shared landing-key contract now compares complete Spanish and French key +sets and verifies every visible/accessibility call. It found missing labels +from the upstream landing refresh; all are translated. Kept the French drum +accessibility label while adopting the new copy. Browser review also confirmed +that the full search pill crowded the brand at desktop widths: its name had an +81px text box for 127px of content. At intermediate widths the header now uses +the existing 44px accessible search button without its decorative label/shortcut, +reserves the brand and reduces gaps. At 1160px and 1280px the complete 127px +name fits, without page overflow; clicking search and opening a result still +works. Mobile keeps its existing controls. No runtime or CI behavior is changed. + +Frozen root and docs installs passed with Bun 1.4.4. Root typecheck passed for +2,243 files; structure check and direct file-size ratchet passed. Validation +used the isolated repository test wrapper and synthetic data: + +- The 20-file docs/client-matrix/layout/structure/hygiene batch initially had + 490 passes and two failures (5,462 assertions). The remaining failures identified + provider-role prose that did not name single-leading-system compatibility and + combined two role cases. Corrected the documentation, preserving the tests. + The final two affected files passed all 48 tests, 0 failures, 2,499 assertions; + 46 overlap the original batch. All selected cases are accounted for; this is + not a claim that the initial batch exited successfully. The new landing-key + check also caught omitted labels before this final run. +- The 14-file current-dev runtime-contract batch had 456 passes and two Windows + fixture-cleanup failures, 3,100 assertions. Both failures were EBUSY from + removing temporary SQLite fixture directories in `cc-switch-import.test.ts`. + A focused rerun of F1/F2 and F3 passed F1/F2 but retained the F3 cleanup failure + (1 pass, 1 fail, 7 filtered out, 98 assertions). No assertion or timeout was + weakened and the test/runtime source is unchanged from upstream. +- Ran the unchanged full CC-Switch file on Linux: 9 passes, 0 failures, 545 + assertions, including F1/F2, F3, WAL/hard-link and FIFO cases. The disposable + Bun 1.4.4/Node 24.22.1 container had no network, a read-only checkout and an + explicit private source copy, configuration and prefixes in temporary memory. + The Windows cleanup limitation remains disclosed; Linux does not establish + that Windows cleanup passed. These cases overlap the Windows batch. + +All 78 pages retain technical command/inline parity. Final docs build: 703 pages +and 104,154 internal links, including Pagefind and sitemap. Actual-browser +inspection covered the Spanish homepage on desktop/mobile, LM Studio at desktop +width, the new catalog reference on mobile and the Windows ACL page through +search. The compact search found one Spanish result for `icacls` and opened the +new Spanish troubleshooting page. Inspected pages had Spanish language metadata +and no horizontal page overflow. The viewport was restored; the isolated static +preview remains at port 4323. No personal Desktop state or port 10100 was used. + +Four screenshots are pinned on the separate `pr-assets` branch at +`2a461766e22f3aaad57f873a10fe420553484468`, under `spanish-docs-20261029/`. +No screenshot is on this source branch. The PR description records final staged +privacy validation, commands, the published head and exact-head CI status. + +Keep the full-root resource exception and unexecuted native-client/platform +coverage explicit. Independent final Spanish/render acceptance is the separate +maintainer-arranged gate requested in the October 28 triage; this implementing +agent's inspection and the contributor's historical acceptance do not replace +it. The current policy treats `lane=all` as a batched dev check, not a per-PR +gate; do not request or dispatch it again for this branch. The fixture-path diff +should choose the full Ubuntu PR lane when CI is authorized. Publish once, +update the description once, request one full CodeRabbit review without waiting +for its result, and leave Draft pending independent acceptance and current-head +CI. Do not merge or change CI permissions, labels or workflows. + +## 2026-10-29 — Windows CC-Switch fixture cleanup + +Reproduced the reported F3 cleanup failure on Windows with Bun 1.4.4, using the +repository wrapper and a dedicated ignored TEMP root. The unchanged case reached +all 15 assertions but failed its teardown with EBUSY after the 15-second removal +budget. Its uncached SQLite prepared statements survived the default deferred +connection close. F1/F2 used the same deferred-close pattern. + +Those two fixtures now use `Database.close(true)` to finalize outstanding +statements and release file handles before unlinking the hard-link alias or +removing their temporary home. The outer F3 finally also uses that idempotent, +strict close instead of swallowing close failures. The shared removal helper, +retry budget, assertions and test-home protections are unchanged. The owning +`structure/ops/test-sandbox-cleanup.md` contract records this lifecycle. + +Validation, from the repository root with `OCX_TEST_RUNNER_BUN` pinned to the +installed Bun executable and TEMP/TMP contained under the ignored task scratch: + +```powershell +bun scripts/test.ts --timeout 120000 --test-name-pattern 'F3:' tests/providers/cc-switch-import.test.ts +# Before the fix: 0 pass, 1 teardown failure, 8 filtered out, 15 assertions. +bun scripts/test.ts --timeout 120000 tests/providers/cc-switch-import.test.ts +# After the fix: 9 pass, 0 fail, 543 assertions; F3 completed in 164 ms. +bun scripts/test.ts --timeout 120000 tests/cli/cli-provider-cc-switch-import.test.ts tests/lib/remove-tree-helper.test.ts tests/ci-workflows/test-home-guard.test.ts tests/ci-workflows/test-home-guard-unpreloaded.test.ts tests/ci-workflows/test-temp-quarantine.test.ts +# 50 pass, 6 existing platform skips, 0 fail, 278 assertions. +bun run typecheck +# Zero type errors across 2,243 files. +bun run structure:check +bun scripts/file-size-ratchet.ts +git diff --check +# All passed. +``` + +The full root suite was not rerun for this fixture-only resource-lifecycle fix: +focused red/green reproduction, the entire affected file, related CLI and +home/removal guards cover the change without repeating the costly runtime suite +on the shared host. Broader hosted/platform coverage remains subject to the +maintainer's current-head PR CI approval. No production runtime or Desktop file +changed, no real credential or client configuration was imported, and the +Desktop listener remained on 127.0.0.1:10100 in the same observed process. + +This follow-up resolves the Windows cleanup limitation recorded above. It does +not resolve the 20 new documentation threads from CodeRabbit's completed review +of `9af015348`; those findings and independent Spanish/render acceptance remain +separate. Keep the PR in Draft and preserve the existing CI dispatch policy. + +## 2026-10-29 — Complete the twenty new documentation findings + +Reviewed all twenty open threads from the completed CodeRabbit review of +`9af015348`. The branch retains the Windows fixture fix in `eab49f9ad` and all +maintainer carry commits. A fresh fetch found no commits missing from `dev` +(`3ea89653f5727aea41948ddbd5e833f74afe3e36`, 2.95.0). + +| Finding | Correction | +| --- | --- | +| 1. Platform Support | Use a Starlight slug; navigation keeps the selected locale. | +| 2. Workflow revision | English and Spanish contributing/PR-quality pages describe the PR merge ref and pre-merge effect, subject to filters and fork approval; trusted default-branch gates remain separate. | +| 3. Activation | State the default-off opt-in and quota-window reset trigger; preserve process-restart recovery and retry timing. | +| 4. Installation | Distinguish the loopback root URL from non-loopback provider-table authentication. | +| 5. Log Guard | Limit filtering to rows persisted in local SQLite; preserve the listed exclusions. | +| 6. Quota privacy | Separate outbound quota signals from bounded local tier counts and selected tier; retain the no-account-ID/token/fingerprint guarantee. | +| 7. Combo options | Add the cooldown-reprobe options to both English and Spanish summaries. | +| 8. Cursor | Describe the selected Claude provider's default reasoning effort, without implying a provider change. | +| 9. Integration removal | State that edits can lock the switch and refuse Disable, leaving the managed block intact. | +| 10. Trace location | Name the actual Logs dashboard section. | +| 11. Executor pairing | Synchronize all nine locale recipes: silent input, stdin delivery, variable cleanup and agent launch only after successful pairing. | +| 12. Subagent roster | English and Spanish describe the first five priorities, non-allowlist semantics and catalog completion. | +| 13. Incomplete usage | Distinguish the warning from readable-only counts/dates/rankings and retain the incomplete-snapshot refusal/recovery. | +| 14. Native omission | Correct both English and Spanish defaults: absent/false/invalid values add no omission. | +| 15. Strict effort | Use the intersection of known effort scales, including empty scales; keep adaptive and dispatch distinctions. | +| 16. API-key scope | State that decision-destination scopes are enforced before credential or request-state reads. | +| 17. Migration | Clearly preserve parsing of old usage rows without routeDecision and explain index rebuilding. | +| 18. Non-loopback credentials | Include configured client API keys in English and Spanish, matching assertServerAuthConfig. | +| 19. Encrypted task recovery | English and Spanish describe the eligible recovery exception and retain the last native error after native attempts; link the existing trust/loopback/no-persistence restrictions. | +| 20. Video Bridge | Align the remaining seven locales with the English/Spanish environment-key reference and explicit key mode; also repair the Japanese example's translated JSON property. | + +No runtime, GUI, Desktop, workflow, dependency or lockfile change is made by this +batch. The primary GitHub Actions event reference confirms the merge-ref +distinction; provider, quota, admission and recovery claims were compared with +their current implementations and canonical guides. + +Two new regressions inside the existing Spanish-docs guard check that every +locale's Video Bridge example parses and requires the environment key/key-auth +shape, and that every Executor example reads silently, uses stdin and clears +its variable. Both failed before the corrections. The first full docs selection +had 392 passes and one failure caused by a changed inline code-span delimiter in +the effort table. The delimiter was restored without weakening the guard; final +affected-file validation passed all 20 cases and 2,542 assertions. The other +fourteen files' 373 passes remain valid and were not rerun on unchanged inputs. + +```powershell +$env:OCX_TEST_RUNNER_BUN = (Get-Command bun).Source +$docsTests = @(rg --files tests/ci-workflows -g 'docs-*.test.ts') +bun scripts/test.ts --timeout 120000 @docsTests tests/ci-workflows/client-support-matrix.test.ts +bun scripts/test.ts --timeout 120000 tests/ci-workflows/docs-spanish-localization.test.ts +bun scripts/test.ts --timeout 120000 tests/routing/jev-quota-signals.test.ts tests/routing/jev-decision-destination.test.ts tests/server/agent-task-recovery-combo.test.ts +bun run typecheck +bun run structure:check +bun scripts/file-size-ratchet.ts +git diff --check +``` + +The runtime-contract selection passed 46 tests / 270 assertions. Typecheck passed +2,243 files with zero errors. Structure and size gates pass without increasing +any cap. Frozen docs-site install changed no package; the final offline docs +build completed with 703 pages and 104,174 checked internal links, Pagefind and +sitemap. The full root suite was not rerun for this documentation/data-read +change on the shared host; focused docs, semantic runtime contracts and the full +site build cover this batch, with broader hosted/platform evidence left to +maintainer-authorized current-head PR CI. + +Six isolated shell smoke cases exercised the actual canonical Bash and Windows +PowerShell snippets with a stubbed ocx command: success and failure, stdin, +absence of the synthetic code from arguments/output, variable cleanup and agent +gating. The checks used private temporary homes, no live pairing, no network and +no execution-policy changes. These are agent-run fixtures, not native-client or +provider acceptance. + +Actual-browser inspection verified the corrected catalog text, clicked Platform +Support and reached the Spanish page with lang=es at 1280 px, and inspected +Executor pairing at 390 px without horizontal page overflow. Viewport overrides +were reset. Captures are kept outside the source branch under +`spanish-docs-review-20261029/` on pr-assets, with their pinned commit in the PR. +This does not replace the maintainer-arranged independent Spanish/render +acceptance. The personal Desktop listener remained on 127.0.0.1:10100 in the +same observed process; its configuration and credentials were not used. + +Publish the corrections once, then resolve the twenty corrected threads and +request one full CodeRabbit review without waiting for its result. Keep Draft +pending independent acceptance, current-head CI and maintainer review. Do not +merge, dispatch batched CI, change permissions/labels or infer an approval. + +## 2026-10-30 — Consolidated audit and seven review findings + +Merged the 37 newer dev commits through +`3cab4a74e4eec15ee5ff3bdd59dcab8ede938372` (2.95.0) in ordinary merge +`563de9172d93021fed7d3a41816104efb4b74db7`. The two conflict resolutions keep +all 20 test-layout shards, both new upstream test registrations, and both the +subagent priority explanation and the new workflow-limit panel. Contributor +history, maintainer carry commits and attribution are preserved. A fresh fetch +before publication found zero missing dev commits. + +| Open review | Disposition | +| --- | --- | +| Bun roles | Name the test runner and distributed runtime explicitly; their independent checks remain separate. | +| Provider-key examples | Pass literal environment references in all nine Agent Quickstart copies and English/Spanish JEV examples. Explain proxy startup, CLI resolution and separately configured service environments. | +| macOS uninstall | English and Spanish say to remove the managed terminal command before trashing the app; retained state and separately installed services are still identified. | +| OpenCode transport | All nine copies show manually configured HTTPS, explain the required TLS frontend and loopback-tunnel alternative, and retain the dedicated admission header. Seven older Grok copies now carry the same protected-transport and token-file instructions. | +| Remote Hub diagnostic | Label unauthenticated curl as transport-only; browser acceptance still requires an allowed signed-in identity. Matching executable comments are synchronized across locales. | +| Malformed enrollment journal | Say commands are rejected, preserve the original bytes and recovery instructions, and clarify exit 3, temporary-file cleanup and messages already in transit. | +| Windows signing | English, Spanish and the existing Turkish page distinguish attempted production signing from the original unsigned-file fallback. No signing or release policy changes. | + +The audit covers the entire Spanish content inventory mechanically: all **79** +canonical paths, executable blocks, inline identifiers and model names, +frontmatter, external references, API status codes, local links, locale maps, +metadata and benchmark placeholders. A numeric-prose comparison and semantic +pattern sweep supplemented manual English/source checks in affected and related +workflows. This is not an independent line-by-line linguistic acceptance of +every sentence or a live execution of every documented integration. + +Spanish now follows the new keychain chapter and its sidebar entry, task workflow +ceilings, Artificial Analysis role tiers, launcher verification, Claude agent +cleanup, Meta/xAI/Azure tool and include handling, model-label routing exception, +history-index validation and update-restart refusal. Additional confirmed wording +fixes restore account failover and affinity, jitter, token refresh semantics, +the absent-management-origin condition, and the distinction between context and +cumulative reasoning-archive storage. Duplicated archive-capacity prose is +removed without dropping the refusal codes or recovery guidance. + +The credential findings received a separate read-only source investigation and +one fresh candidate review. No surviving scoped credential-example defect or +compatibility regression was found. The public examples change; runtime, +dependencies, Desktop and CI policy do not. Two new existing-file regressions +failed before correction and pass after it. A whole-tree search found no +remaining shell-expanded `--api-key` example in Markdown documentation. + +Validation, Windows and Bun 1.4.4, repository wrapper/preload and synthetic homes: + +```powershell +$env:OCX_TEST_RUNNER_BUN = (Get-Command bun).Source +$docsTests = @(rg --files tests/ci-workflows -g 'docs-*.test.ts') +$related = @( + 'tests/ci-workflows/client-support-matrix.test.ts', + 'tests/test-layout.test.ts', 'tests/test-layout-tooling.test.ts', + 'tests/providers/provider-key-store.test.ts', 'tests/providers/opencode-cli.test.ts', + 'tests/cli/cli-provider.test.ts', 'tests/routing/jev-decision.test.ts', + 'tests/server/server-loopback-host-gate.test.ts', + 'tests/config/config-workflow-budget.test.ts', + 'tests/server/server-workflow-budget-settings.test.ts', + 'tests/server/management-workflow-budget-routes.test.ts', + 'tests/lib/workflow-budget.test.ts', + 'tests/routing/codex-role-capability-consent.test.ts', + 'tests/routing/codex-role-capability-redirects.test.ts', + 'tests/providers/cc-switch-import.test.ts' +) +bun scripts/test.ts --timeout 120000 @docsTests @related +# 655 pass, 0 fail; 7,053 assertions across 29 files. +bun scripts/test.ts --timeout 120000 tests/ci-workflows/docs-spanish-localization.test.ts +# Final prose rerun: 22 pass, 0 fail; 2,615 assertions. +bun run typecheck +# 2,252 files; zero type errors. +bun run structure:check +bun scripts/file-size-ratchet.ts +bun run privacy:scan +git diff --cached --check +``` + +Root and docs-site frozen installs changed no package or lockfile. Final offline +docs-site build, Pagefind and sitemap pass: **712 pages / 105,972 internal links**. +The first post-merge docs selection had 417 passes and five synchronization +failures. A later broad selection had 422 passes and two failures; corrected +prose edits had accidentally omitted adjacent provider details and were narrowed +to retain every canonical identifier/link. The final 655-case selection passed +without weakening assertions. The first build caught missing localized TLS +anchors; those anchors are now explicit and the final build passes. Earlier +failing commands are not described as exit 0. + +The full root suite was not repeated on this shared host. This documentation and +data-read change is covered locally by focused docs tests, related credential, +launcher, routing and workflow contracts, typecheck and the complete site build. +The earlier full-run timeout and unclassified failures remain historical limits; +no full-suite pass is claimed. Broader platform, packaged-client and live-provider +acceptance remain for maintainer-authorized current-head CI and human acceptance. + +Actual-browser checks inspected workflow-limit table rendering at 1280 px and +the new keychain chapter at 1280/390 px. The mobile page has lang=es and no +horizontal page overflow. Spanish search for “llavero” returned 16 results and +opened the new chapter. The viewport override was reset. Two captures are kept +outside the source branch on pr-assets, with immutable links in the description. +Browser-tool connection failures required a fresh Chrome tab; they were not +reported as product defects. This is agent inspection, not independent native +Spanish/render acceptance. Personal Desktop state and credentials were not used; +its observed loopback listener stayed in the same process during the work. + +Publish this consolidated batch, reply to and resolve the seven corrected +threads, update the description once, and request one full CodeRabbit review +without waiting for its result. CodeRabbit's official command documentation +distinguishes a full reanalysis from an incremental review; its configuration +and review scope are unchanged. Keep Draft for fresh review, independent human +language/render acceptance, current-head CI and maintainer integration approval. + +## 2026-10-31 — Full-review follow-up and current-dev synchronization + +Merged the 18 newer dev commits through +`98bd8c07bdb999e883c68c89e1a932c3598912bb` (2.96.0) in ordinary merge +`ab24a74ce`. The layout conflict preserves all 21 shards, including the new +file-identity shard and this contribution's docs shard, with every upstream +registration intact. A fresh fetch before staging found zero missing dev commits. + +| Review item | Published correction | +| --- | --- | +| Image relay | English/Spanish and affected retained translations distinguish an absent xAI provider from an existing provider without usable credentials. Normal ChatGPT image selection remains possible in the former case. | +| MiniMax startup | Separate the foreground proxy from integration/launch commands in all nine copies, with explicit second-terminal instructions. | +| Hub pairing | All shipped connect/rotate recipes read authority silently, pipe it to stdin and clear variables, including older admin-token and Korean text-fenced examples. | +| Parser messages/tools | Rewrite the Spanish normalization, namespacing, hosted-tool and sidecar rules while preserving identifiers. | +| OAuth/affinity | Explain refresh coordination, newer-credential protection, account affinity eviction and restart behavior in direct Spanish. | +| Qwen effort | Explain direct Alibaba effort values and Codex compatibility-level clamping. | +| CLI family table | Preserve command syntax and clarify experimental/default-disabled and proxy-launch behavior. | +| Account exit mapping | Say HTTP 404 maps to exit 4, HTTP 409 to exit 5 and other failures to exit 1. | +| Windows JSON | Name UTF-8 BOM explicitly and preserve UTF-16 refusal. | +| Session selectors | Require exact UUIDs or unique exact loaded names and preserve refusal of missing, duplicate, incomplete or unloaded targets. | +| Messaging platforms | Separate Unix-socket support, Windows refusal and independently qualified remote interoperability. | +| Messaging direction | Outbound worker enrollment does not grant arbitrary inbound local-session access; the broader allow-inbound grant stays explicit. | +| Diagnostic privacy | Use pull requests (PR), not public relations, in both affected Spanish privacy passages. | +| Ledger ownership | English/Spanish state that owner comparison is skipped on Windows; other file checks remain intact. | + +The full review also had three comments outside the diff and one unverified +comment. Corrected all four: Pi reasoning metadata in six retained translations; +remote-bind credential guidance in seven Agent Quickstarts; mobile landing-page +language selection; and the root CLI discovery description. Checked linked +remote-access chapters too: all nine now distinguish configured client keys and +token-file sources from independent management credentials. Added 13 stable +localized anchors rather than pointing at missing translated section fragments. + +Additional Spanish corrections cover adjacent bridge/transport/caching language, +consent wording, CLI help and error contracts. Current-dev synchronization covers +Claude Ultra/active quota windows, mandatory-tool combo eligibility, Qoder raster +ceilings, role-apply limits/recovery, and the new stored-thread MCP queue chapter. +All 79 current canonical paths retain example, identifier, link and shape parity. +This is technical and targeted semantic review, not independent human acceptance +of every sentence in every locale. + +Verification uses Bun 1.4.4, frozen root/docs installs with no lockfile changes, +the repository test wrapper/preload, synthetic homes and an ignored TEMP/TMP root. + +```powershell +$env:OCX_TEST_RUNNER_BUN = (Get-Command bun).Source +$docsTests = @(rg --files tests/ci-workflows -g 'docs-*.test.ts') +$related = @( + 'tests/ci-workflows/client-support-matrix.test.ts', + 'tests/test-layout.test.ts', 'tests/test-layout-tooling.test.ts', + 'tests/server/server-images.test.ts', 'tests/lib/spend-ledger-file-journal.test.ts', + 'tests/clients/client-export-reasoning-controls.test.ts', + 'tests/clients/client-export-reasoning-metadata.test.ts', + 'tests/clients/client-connect.test.ts', 'tests/providers/minimax-clients.test.ts', + 'tests/cli/cli-account.test.ts', 'tests/cli/cli-message-mcp.test.ts', + 'tests/codex-integration/messaging-mcp-queue.test.ts', + 'tests/codex-integration/messaging-remote-admission.test.ts', + 'tests/cli/cli-role-suggestion-history.test.ts', + 'tests/providers/provider-anthropic-usage-windows.test.ts', + 'tests/providers/qoder-cn-image-validation.test.ts', + 'tests/server/server-combo-required-tool-contract.test.ts', + 'tests/responses/responses-parser.test.ts' +) +bun scripts/test.ts --timeout 120000 @docsTests @related +# Initial expansion: 1052 pass, 35 platform skips, 4 fail, 1 post-timeout error. +bun scripts/test.ts --timeout 120000 tests/clients/client-connect.test.ts +# Complete isolated file: 53 pass, 0 fail; 309 assertions. +bun scripts/test.ts --timeout 120000 tests/cli/cli-role-suggestion-history.test.ts +# Final complete file: 9 pass, 0 fail; 197 assertions. +bun scripts/test.ts --timeout 120000 @docsTests +# Final documentation tree: 385 pass, 0 fail; 4811 assertions across 14 files. +bun run typecheck +# Final: 2259 files, zero errors. +bun run structure:check +bun scripts/file-size-ratchet.ts +bun run privacy:scan +git diff --cached --check +``` + +Three connection probes hit their unchanged 15-second internal deadline under +parallel host load and passed in the complete isolated 53-case file. Source and +tests match upstream; their deadlines were not altered. The role-history case +also exceeded its explicit 30-second store budget in isolation. It applies 50 +durable updates and restores 50 more, so that one case now uses the existing +bounded bulk-durable-I/O budget. Assertions, file limits and shared budget values +are unchanged. A scratch-only counterfactual replaced the CLI's imported role +limit with 49: the 50-role case failed its exit assertion in 234 ms with the larger +budget. No production file was mutated. The final full nine-case file passes. +The initial parallel command is not represented as passing or rerun wholesale. + +The first new recipe guards failed before correction. The post-merge baseline +had 20 passes and two dev-sync failures. Subsequent guards exposed retained +admin-token examples and a Korean text fence; the final 385-case docs selection +passes without dropping those cases. Thirty shipped Hub scripts (six distinct +bodies) execute with synthetic stdin and an in-process Bash stub; no real proxy, +provider, authority or native acceptance is involved. The first stub driver used +Windows text-mode CRLF input; binary LF fixture input corrected that driver. + +The first site build found 13 missing translated section fragments. After adding +the anchors and finishing the linked credential guidance, the complete offline +build, Pagefind and sitemap pass: **712 pages / 106109 internal links**. + +Actual-browser inspection verified the English-to-Spanish landing switch at +390 px, selected Spanish state and lang=es, and no horizontal page overflow at +320/390/1280 px. The mobile language panel is 272 px wide and fits the 320 px +viewport; desktop retains its existing selector. Captures are kept on pr-assets, +outside this source branch. A browser-session reset was needed after a tab expired +across user continuation; the temporary viewport override was then reset. +The personal Desktop listener remained in the same observed process on port +10100; its configuration and credentials were not used. + +The full root suite was not repeated on this shared host: this 32-file expansion, +the necessary isolated diagnostics, complete docs guards and full site build +cover the scoped change. Windows skips include native MCP/remote interoperability +and POSIX file checks; those are left to authorized hosted/platform validation. +No full-root, packaged Desktop or live-provider success is claimed. + +Publish this batch once, update the English description with exact-head evidence, +resolve the 14 corrected threads and record the three outside-diff dispositions +plus the unverified comment. Request one full CodeRabbit review without waiting +for its result. Keep Draft for fresh review, maintainer-arranged independent +Spanish/render acceptance, authorized current-head CI and maintainer approval. +Do not merge, dispatch CI, alter permissions or change CodeRabbit configuration. + + +## November 1: final-review corrections and current dev synchronization + +Ordinary merge bd7dba77ce06051bc75a7e0227d7d5607094c2f9 incorporates the two newer +upstream commits through 1783523b4c999a7d3b3d82c6fb07a7895ff93446 (2.97.0), +without rewriting published history. The layout conflict retains the upstream +JSON plus layout-docs.json: all 21 explicit shards and upstream registrations. +A fresh fetch before publication reports zero missing dev commits. + +The completed full review of dcd216c87e0da7f61f845adaa23b14d7f6a7a709 left +eight inline findings, one outside-diff finding and one unverified comment. +All are confirmed and corrected: + +| Review item | Disposition | +| --- | --- | +| Remote Link / fallback-off | Limit no-transmission assurances to failures before dispatch. After forwarding starts, Home may have received or processed the request; inspect the uncertain result before retrying. English/Spanish and the affected Turkish fallback copy agree. | +| Native Messages | Rewrite the Spanish identity/beta contract. English/Spanish identify the header bundle that must be observed, operator precedence, first-party destination, compatibility fallback, allowlist and stripping rules; headers grant no authorization. | +| Docker Hub | Create missing hub and remoteGui objects only for fresh volumes, with explicit replacement warnings and a separate existing-volume update recipe. Preserve siblings and existing CORS entries. Remove the incorrect assertion that the seed already contains a hub object. | +| reasoning_effort | State the model-subset clamp, independent xhigh/max labels, explicit alias exception and noReasoningModels omission. | +| Mistral | Specify both response paths, typed text/thinking arrays, byte/order preservation, parser reset, malformed-block errors and unchanged other hosts. | +| tool_search | Explain collision-safe public declarations and request/JSON/SSE lifecycle mapping; canonical OpenAI keeps its native type. | +| Bundled Bun | Distinguish current 1.4.4 from historical 1.3.14 and the stable >=1.4.0 upstream WS eligibility. Update all four architecture pages carrying the stale claim. | +| Workspace pairing | Explicitly require a Bash session for read -p recipes. Align both Workspace examples and affected Hub recipes in all nine locales. | +| Outside-diff admission headers | Correct both rows and precedence guidance in all nine server references against AUTH_MATRIX and resolveResponsesApiAuth: dedicated header wins, bearer is a fallback only when it is absent, x-api-key is rejected here. Management and native Messages contracts remain separate. | +| Unverified sidecar hierarchy | Use level-two headings for the initial web-search backend section in canonical English and Spanish. | + +The adjacent Spanish audit additionally corrects external-task envelopes, +checkpoint authority, unset-versus-disabled defaults, Google HTTP 400 versus +message-terminal 403, agéntico video processing, retry semantics, key terminology, +Azure delegation and the Docker readiness/host-mount guidance. Current-dev Pool +installation identity isolation and the 32 KiB turn-metadata limit are synchronized +in the Codex guide. Technical parity still covers all 79 canonical paths. This is +not independent human linguistic acceptance of every sentence. + +New guards validate Docker commands in order against docker/config.json and the +current configuration schema, compare all nine admission tables with the actual +AUTH_MATRIX, require an explicit Bash session for Workspace recipes, and compare +current bundle claims in all affected architecture pages with package.json. +The four newly selected regression cases first produced 0 passes / 4 failures +before the documentation correction; the final docs selection passes. + +Validation uses Bun 1.4.4, unchanged frozen root/docs lockfiles, the repository +wrapper/preload, synthetic homes and a dedicated ignored TEMP/TMP root. No +personal Desktop configuration, token, native home or provider account was used. +No process was listening on the personal port 10100 when inspected. + +```powershell +bun install --frozen-lockfile +$env:OCX_TEST_RUNNER_BUN = (Get-Command bun).Source +$docsTests = @(rg --files tests/ci-workflows -g 'docs-*.test.ts') +$related = @( + 'tests/test-layout.test.ts', + 'tests/test-layout-tooling.test.ts', + 'tests/clients/client-link-relay.test.ts', + 'tests/clients/link-relay-bound-transport.test.ts', + 'tests/server/server-auth.test.ts', + 'tests/server/data-plane-admission-identity.test.ts', + 'tests/cli/cli-config-command.test.ts', + 'tests/codex-integration/codex-installation-id.test.ts', + 'tests/codex-integration/codex-installation-wire.test.ts', + 'tests/codex-integration/codex-installation-sidecars.test.ts', + 'tests/codex-integration/codex-installation-live-ws.test.ts', + 'tests/codex-integration/codex-installation-live-http.test.ts', + 'tests/codex-integration/codex-installation-live-content.test.ts', + 'tests/codex-integration/codex-installation-invalid-account.test.ts', + 'tests/responses/codex-installation-turn-limit.test.ts' +) +bun scripts/test.ts --timeout 120000 @docsTests @related +# Initial 29-file expansion: 821 pass, 1 fail; 8763 assertions. +bun scripts/test.ts --timeout 120000 tests/server/server-auth.test.ts --test-name-pattern 'OpenAI option auth matrix keeps direct, pool, and API credentials independent' +# Isolated original failing case: 1 pass, 0 fail; 99 assertions, 24.2 s test body. +bun scripts/test.ts --timeout 120000 tests/server/server-auth.test.ts +# Final complete isolated file: 117 pass, 0 fail; 776 assertions, 286.7 s. +bun scripts/test.ts --timeout 120000 @docsTests +# Final: 387 pass, 0 fail; 4920 assertions across 14 files, including 25 Spanish cases. +bun run typecheck +# Final: 2262 files, zero errors. +bun run structure:check +bun scripts/file-size-ratchet.ts +bun run privacy:scan +git diff --cached --check +Push-Location docs-site +bun install --frozen-lockfile +$env:OPENCODEX_DOCS_OFFLINE = '1' +bun run build +Pop-Location +# Complete final site: 712 pages, 106109 checked internal links; Pagefind/sitemap pass. +``` + +The initial expansion failed the existing OpenAI option auth matrix case at its +unchanged explicit 30-second deadline. Teardown reported EBUSY on its isolated +fixture during Windows ACL hardening, then the worker stopped making progress. +Only the verified worker belonging to that test run was stopped; the wrapper +reported the failure and worker interruption after 308.4 seconds. The test and +ACL source match current dev. The original failing case passes alone without a +source, assertion or budget change. The complete isolated 117-case file also passes without source or deadline changes. The initial expansion is not +described as passing. This observation does not prove a general environment-only +classification for every earlier full-suite failure. + +Twelve documented Docker config commands execute through the real CLI with +synthetic separate OpenCodex/Codex homes, covering fresh initialization and +existing-volume sibling preservation. No Docker daemon or proxy is started by +that probe. Fifty-four Workspace Bash scenarios cover the 18 shipped examples: +success, rejected pairing and failed reads, agent-start conditions and secret +variable cleanup, using synthetic stdin and an in-process stub. These are CLI +and shell probes, not a real Docker deployment or native-provider acceptance. + +Actual-browser inspection of the complete final build verifies the new Docker +warning and code blocks at 1280/390/320 px, lang=es and no page-level horizontal +overflow. Long commands scroll within their code block. The corrected admission +rows render in Spanish at 320 px without page overflow. Viewport overrides were +reset. New desktop/mobile captures are on pr-assets, separate from this branch: +4a56832df793b75b7c5d7b3331da8c06bd11db33, directory spanish-docs-review-20261101. The October 31 landing, +search and prior platform evidence remains valid for its unchanged UI. + +Full-suite resource exception: the entire root suite is not repeated on this +shared Windows host. The focused expansion, isolated failure diagnostics, +complete docs guards and complete build cover this docs-only follow-up; residual +full-suite/platform coverage remains with authorized hosted CI. Earlier full-root +runs and native/live-provider acceptance are not represented as passing. + +Publish one source batch, reply to and resolve the eight corrected inline +threads, and record the outside-diff and unverified dispositions. Update the +English description once with current-head evidence and the scoped exception. +Request one full CodeRabbit review without waiting for its result. Keep Draft +for fresh review, maintainer-arranged independent Spanish/render acceptance, +authorized current-head CI and maintainer approval. No merge, CI dispatch/retry, +permission change or CodeRabbit configuration change is authorized here. + + +## November 4 follow-up: completed review and current-dev parity + +Merged upstream dev through `0a30c551304927c93c26a96c034bd39a166c7460` +(2.98.0; 55 commits beyond the previous integration base) using ordinary merge +`5a193fe103ebe0d94d1c6b52c1117d8392aaee37`. Published history is retained. +The Astro conflict keeps Spanish navigation and adds the new Ollama client guide. +The test-layout conflict keeps all upstream registrations and the docs shard; +its formatting follows upstream so the file remains below the size threshold. +A final fetch before publication found no missing dev commits. + +Disposition of review `5731399667` (November 2 UTC): + +- Correct the triage receipt heading to October 24 UTC. +- Separate the default and custom-port foreground quickstart commands in all + nine locales; explain the second terminal and shared OPENCODEX_HOME. +- Translate the storage database condition as locked, and clarify that model + changes save in click order, with pending unsent changes discarded on leaving. +- State in all nine server references that only a nonempty trimmed dedicated + header has priority; absent, empty and whitespace-only headers use bearer + fallback, while a nonempty invalid dedicated credential cannot fall back. +- Fix the outside-diff agent read-back wording: a failed, unknown or mismatched + read-back leaves upstream application unknown, so operators must inspect before + retrying. Rephrase both unverified receipt comments without changing behavior. + +Spanish covers all 80 current canonical documentation paths, including the new +Ollama API subset. Targeted semantic synchronization also covers Kiro structured +output and refusal behavior, Codex request-owned and durable affinity, pool +threshold selection, Anthropic quota windows, Kimi capabilities and monthly +quota, Qoder discovery deadlines, Artificial Analysis capability data, sync +fanout, service homes, uninstall refusal, orchestrated updates, HTTP CLI-update +authority and fixed Messages error normalization. Backend contracts, native +Desktop implementation, dependencies and CI/reviewer configuration are unchanged +relative to dev. These technical and targeted semantic checks do not replace +independent linguistic acceptance of every translated sentence. + +Validation on the working tree to be published, Bun 1.4.4: + +```powershell +bun install --frozen-lockfile +$env:OCX_TEST_RUNNER_BUN = (Get-Command bun).Source +# TEMP/TMP use a private ignored test directory; the repository wrapper/preload +# creates separate synthetic OpenCodex/Codex homes. +$docsTests = @(rg --files tests/ci-workflows -g 'docs-*.test.ts') +bun scripts/test.ts --timeout 120000 @docsTests tests/test-layout.test.ts tests/test-layout-tooling.test.ts tests/server/data-plane-admission-identity.test.ts +# 446 pass / 0 fail; 5640 assertions, 17 files, including 27 Spanish cases. + +$related = @( + 'tests/responses/responses-ollama-codec.test.ts', + 'tests/server/server-ollama-inbound.test.ts', + 'tests/providers/kiro/kiro-structured-output.test.ts', + 'tests/providers/kiro/kiro-structured-output-strict.test.ts', + 'tests/adapters/anthropic/anthropic-account-pool.test.ts', + 'tests/providers/provider-anthropic-usage-windows.test.ts', + 'tests/codex-integration/codex-affinity-request-owned.test.ts', + 'tests/codex-integration/codex-affinity-restart-matrix.test.ts', + 'tests/routing/codex-role-capability-pages.test.ts', + 'tests/cli/sync-fanout.test.ts', + 'tests/cli/sync-command-fanout.test.ts', + 'tests/update/update-orchestrated-plan.test.ts', + 'tests/update/update-orchestrated-arguments.test.ts', + 'tests/update/update-orchestrated-identity.test.ts', + 'tests/server/messages-sse-error-filter.test.ts', + 'tests/server/messages-sse-error-lifecycle.test.ts', + 'tests/server/safe-response-headers.test.ts' +) +bun scripts/test.ts --timeout 120000 @related +# Windows: 434 pass / 6 fail; 2929 assertions, 17 files, 123.3 seconds. +# All six failures occur while creating file symlinks (EPERM), before the +# intended store assertions. The complete failing test file matches dev. + +# Same unchanged 33-case affinity file in official oven/bun:1.4.4 Linux, +# image digest sha256:1d22548f177f4ff38e0c15baa3c2c46c6c2060ba2d1bc573bb4720b407548f1d: +$reviewRoot = (Get-Location).Path +docker run --name ocx-spanish-review-20261104 --rm --network none --read-only --user 0:0 --tmpfs /tmp:rw,nosuid,size=1g --env HOME=/tmp/runner --env OCX_TEST_RUNNER_BUN=/usr/local/bin/bun --mount "type=bind,source=$reviewRoot,target=/workspace,readonly" --workdir /workspace oven/bun:1.4.4 bun scripts/test.ts --timeout 120000 tests/codex-integration/codex-affinity-restart-matrix.test.ts +# Linux: 33 pass / 0 fail; 147 assertions, 65.7 seconds, including all six cases. +# The Windows expansion is not represented as green. Linux results do not +# replace verification on a Windows host allowed to create file symlinks. + +bun scripts/test.ts --timeout 120000 tests/ci-workflows/docs-spanish-localization.test.ts tests/test-layout.test.ts tests/test-layout-tooling.test.ts +# Final after anchor, wording and registry-format corrections: +# 56 pass / 0 fail; 3559 assertions, three files. +bun run typecheck +# Zero errors in 2316 files. +bun run structure:check +bun scripts/file-size-ratchet.ts +bun run privacy:scan +git diff --cached --check +Push-Location docs-site +bun install --frozen-lockfile +bun run build +Pop-Location +# Final complete build: 721 pages, 108027 internal links, Pagefind and sitemap. +``` + +The quickstart regression was observed failing before the command separation; +it passes after the correction. The header regression exercises the current +auth resolver with synthetic keys for empty, whitespace-only, invalid nonempty +and valid trimmed dedicated headers. Neither probe uses personal credentials. + +The final browser inspection covers the new Ollama guide, corrected foreground +quickstart, storage/save text and HTTP-update warning at desktop 1280 and mobile +390/320 px, lang=es and no page-level horizontal overflow. Long commands scroll +inside their blocks. Viewport overrides were reset. New captures are pinned on +pr-assets at `01ea6efd4b3651612c5a2099a7edcc80050a0f14`, directory +`spanish-docs-review-20261104`, outside the source branch. This is agent-run +browser evidence; native Desktop and independent human acceptance are separate. + +Full-suite resource exception remains: do not repeat the entire root suite on +this shared Windows host after prior expensive interrupted runs. Complete docs +checks, focused runtime coverage, explicit diagnostics of the six Windows +symlink failures and a successful isolated Linux run are documented above. +Residual full-suite and platform coverage belongs to authorized hosted CI. +No failed, unrun, approval-required or older-head suite is claimed as passing. + +Publish the corrections together, reply to the five corrected inline threads, +record outside-diff/unverified dispositions, and update the English description +once. Request one full CodeRabbit review without waiting for its result. Keep +Draft for fresh review, maintainer-arranged independent Spanish/render +acceptance, authorized current-head CI and maintainer approval. No merge, +workflow dispatch/retry, reviewer assignment or permission change is performed. + +## 2026-11-11: conflict resolution and current-dev refresh + +This entry supersedes the earlier head, page counts and Draft instructions for +the current handoff. The contributor subsequently authorized Ready for review +and requested Ingwannu; maintainer approval and independent language/render +acceptance remain separate. + +Merge `upstream/dev` normally, without rebasing or rewriting published history: +base `de0914a1a83b1d831aeb79aadd3a56d2e0182df4` (package 2.100.0), 284 commits +after the previously incorporated dev. Nine conflicts were resolved in the +Astro configuration, header, landing, English contribution/PR-quality and +protocol/provider references, test-layout registry and docs ownership note. +All upstream test registrations and the Spanish docs shard remain present. +The final pre-publication fetch found no newer dev commit. Runtime, GUI, +native Desktop, dependencies, lockfiles and CI policy match dev; the two +previously documented test-only fixture/budget fixes remain in the PR. + +Spanish now covers all 83 canonical paths. New pages are the public usage +dashboard, telemetry/privacy guide and custom-gateway verification guide. +The public telemetry and leaderboard dictionaries include complete Spanish +copy. This is the documentation website, not the installed proxy dashboard. +The upstream header design is retained with Spanish navigation and mobile +language selection. Edit links now target dev, since main was retired. + +The 22 November 4 inline findings have the following dispositions: + +| Area | Correction | +| --- | --- | +| Benchmark overview | Describe the score-per-dollar column and measured-cost badge; no sorting claim | +| Agent setup | Run init before foreground/background startup in every locale | +| Agent combo | Use the configured anthropic-apikey provider in the target | +| Source installation | Require Bun on PATH separately from npm's bundled Bun | +| Installation/quickstart restoration | Qualify standalone owner, linked-client and sibling behavior | +| Standalone quickstart | Put the executable on PATH or use its full path | +| Quickstart ports, Spanish and English | Use the selected port; retain 10100 as the default | +| Codex account-gated model row | Translate Pool, Direct, selector and verified-roster conditions accurately | +| Log Guard reclaim | Name the canonical logs_2.sqlite target and preserve safety checks | +| Remote Hub service | Keep launchd as the literal supervisor name | +| Remote Hub CORS recovery | Run the complete printed command without dropping the existing allowlist | +| Container persistence | Separate catalog backup from SQLite account persistence | +| Container deletion | State the exact configuration/account/history/token/client state removed by --volumes | +| Revocation navigation | Use Connect → API Keys consistently | +| Dashboard pricing | Distinguish a different vendor's price from exact-provider/configured pricing | +| Delegation guidance | Treat model/effort values as advisory; custom guidance replaces the built-in prompt | +| Gemini file URI | Say the provider accesses the referenced resource | +| Devin model discovery | Remove models absent from the live account roster from the displayed seed | +| Separate-home quickstart | Explain that a sibling does not independently reroute shared clients | +| Video Bridge environment | Set XAI_API_KEY before starting the proxy and restart after changes, all locales | +| Korean pairing command | Remove the unused echo pipeline; preserve silent input and printf | + +Both duplicated selected-port inline comments are covered by the same fix. +Four outside-diff findings are also corrected: same-home/free-port recovery +in the remaining locales; omit absent benchmark task counts and their +separator; use each board's localized cost unit in table headers; distinguish +impossible local decryption from experimental backend-assisted task recovery +in every translated v1 guide. The new same-home recovery assertion was +observed failing on the French guide before these corrections and passes +afterward. + +The current-dev audit updates provider/model admission and quota metadata, +forwarded headers, MCP stored-reply limits, Mistral/tool-schema compatibility, +custom-tool lowering, dictation/ScribeTray bounds, retained-compaction errors, +Desktop installer consent/startup ownership, update recovery, Remote Hub +container ownership and Remote Link lightweight agents, policy, diagnostics, +readiness and child operations. Commands, inline identifiers, API status +codes, links, table shapes, lists and model tokens retain English parity. +The generated client support pages were regenerated with `bun run docs:clients`. + +Verification on Windows, Bun 1.4.4, with synthetic homes and the repository +test wrapper: + +```powershell +bun install --frozen-lockfile +Push-Location docs-site +bun install --frozen-lockfile +Pop-Location + +$env:OCX_TEST_RUNNER_BUN = (Get-Command bun).Source +# TEMP and TMP point to a task-local test-temp directory. +$docsTests = @(rg --files tests/ci-workflows | Where-Object { + $_ -match '(docs-.*|client-support-matrix).*\.test\.ts$' +}) +bun scripts/test.ts --timeout 120000 @docsTests tests/test-layout.test.ts tests/test-layout-tooling.test.ts +# 459 pass / 0 fail, 10042 assertions, 20 files. + +bun scripts/test.ts --timeout 120000 tests/ci-workflows/docs-spanish-localization.test.ts +# Final affected guard: 29 pass / 0 fail, 3130 assertions. + +bun run typecheck +# No type errors in 2429 files. +bun run structure:check +bun scripts/file-size-ratchet.ts +bun run privacy:scan +git diff --cached --check upstream/dev -- docs-site scripts structure tests + +Push-Location docs-site +$env:OPENCODEX_DOCS_OFFLINE = '1' +bun run build +Pop-Location +# Complete site, Pagefind and sitemap: 748 pages / 111649 internal links. +``` + +The first merged-docs run had three parity failures, subsequently corrected: +list/table layout, a repeated technical identifier, and obsolete main URLs. +The final broad and affected-file results above replace those failures rather +than describing the initial run as green. Full-root and native-client/live- +provider execution were not repeated on this shared Windows host after the +previous expensive interrupted runs. The full-suite resource exception still +applies; broad runtime/platform validation remains for authorized hosted CI. +The November 4 EPERM and isolated Linux results above are historical, not +new-head execution results. + +Browser inspection verified Spanish landing/navigation, the new public usage +dashboard, mobile language switching without losing the dashboard route, +quickstart and the custom-gateway guide at 1280/390/320 px. Documents reported +lang=es and no page-level horizontal overflow. The public collector could not +be fetched from this environment; its translated unavailable/retry state was +verified, not successful live collector delivery. Synthetic-data telemetry +tests cover successful rendering separately. Temporary viewport overrides +were reset. No personal Desktop configuration, credentials or provider +accounts were used. + +Captures are pinned outside this PR branch at pr-assets commit +`bbba08cb630a99335fe905c81bb95bfbe4ff2983`, directory +`spanish-docs-review-20261111/`. No screenshot is staged on the source branch. +Full staged merge whitespace diagnostics include inherited dev-only trailing +lines; the contribution-relative staged diff check is clean. Unrelated +upstream whitespace was deliberately preserved. + +The contributor token cannot add ci:full (GitHub denied AddLabelsToLabelable). +The retained test-layout fixture change already selects the full Ubuntu test +lane under the current selector; a maintainer must still authorize fork CI +and can apply that label if needed. Missing, skipped, older-head or +action_required results are not passing evidence. Do not dispatch per-PR +lane=all, retry workflows, merge, or change permissions. + +Publish this merge and corrections together, reply to and resolve the 22 +corrected inline threads, update the English template description once and +request one full CodeRabbit review without waiting for its result. Restore +the authorized Ready-for-review state only after local checks and the known +findings are complete. Keep independent acceptance, current-head CI and +maintainer integration approval explicitly pending. diff --git a/docs-site/astro.config.mjs b/docs-site/astro.config.mjs index 2423554b630..49912f94c9d 100644 --- a/docs-site/astro.config.mjs +++ b/docs-site/astro.config.mjs @@ -2,6 +2,7 @@ import { defineConfig } from "astro/config"; import starlight from "@astrojs/starlight"; import internalLinks from "./src/integrations/internal-links.mjs"; +import { codeBlockLocale } from "./src/data/code-block-locale"; // Canonical GitHub Pages custom domain. The site is served at the domain root, // so Starlight must not emit the former /opencodex project-site prefix. @@ -62,13 +63,15 @@ export default defineConfig({ { icon: "github", label: "GitHub", href: "https://github.com/lidge-jun/opencodex" }, ], editLink: { - baseUrl: "https://github.com/lidge-jun/opencodex/edit/main/docs-site/", + baseUrl: "https://github.com/lidge-jun/opencodex/edit/dev/docs-site/", }, lastUpdated: true, - // English at the site root; French under /fr, Korean under /ko, Simplified Chinese under /zh-cn, Traditional Chinese under /zh-tw, Russian under /ru, Japanese under /ja, Turkish under /tr. + expressiveCode: { getBlockLocale: ({ file }) => codeBlockLocale(file) }, + // English at the site root; Spanish under /es, French under /fr, Korean under /ko, Simplified Chinese under /zh-cn, Traditional Chinese under /zh-tw, Russian under /ru, Japanese under /ja, Turkish under /tr. defaultLocale: "root", locales: { root: { label: "English", lang: "en" }, + es: { label: "Español", lang: "es" }, fr: { label: "Français", lang: "fr" }, ko: { label: "한국어", lang: "ko" }, "zh-cn": { label: "简体中文", lang: "zh-CN" }, @@ -80,117 +83,118 @@ export default defineConfig({ sidebar: [ { label: "Getting Started", - translations: { fr: "Démarrage", ko: "시작하기", "zh-CN": "开始使用", "zh-TW": "開始使用", ru: "Начало работы", ja: "はじめに", tr: "Başlangıç" }, + translations: { es: "Primeros pasos", fr: "Démarrage", ko: "시작하기", "zh-CN": "开始使用", "zh-TW": "開始使用", ru: "Начало работы", ja: "はじめに", tr: "Başlangıç" }, items: [ - { label: "Installation", translations: { fr: "Installation", ko: "설치", "zh-CN": "安装", "zh-TW": "安裝", ru: "Установка", ja: "インストール", tr: "Kurulum" }, slug: "getting-started/installation" }, - { label: "Quickstart", translations: { fr: "Démarrage rapide", ko: "빠른 시작", "zh-CN": "快速开始", "zh-TW": "快速入門", ru: "Быстрый старт", ja: "クイックスタート", tr: "Hızlı Başlangıç" }, slug: "getting-started/quickstart" }, - { label: "How It Works", translations: { fr: "Fonctionnement", ko: "동작 원리", "zh-CN": "工作原理", "zh-TW": "運作原理", ru: "Как это работает", ja: "仕組み", tr: "Nasıl Çalışır" }, slug: "getting-started/how-it-works" }, - { label: "Agent Quickstart", translations: { fr: "Démarrage rapide pour les agents", ko: "에이전트 퀵스타트", "zh-CN": "Agent 快速上手", "zh-TW": "Agent 快速上手", ru: "Быстрый старт для агентов", ja: "エージェント向けクイックスタート", tr: "Ajanlar İçin Hızlı Başlangıç" }, slug: "getting-started/for-agents" }, + { label: "Installation", translations: { es: "Instalación", fr: "Installation", ko: "설치", "zh-CN": "安装", "zh-TW": "安裝", ru: "Установка", ja: "インストール", tr: "Kurulum" }, slug: "getting-started/installation" }, + { label: "Quickstart", translations: { es: "Inicio rápido", fr: "Démarrage rapide", ko: "빠른 시작", "zh-CN": "快速开始", "zh-TW": "快速入門", ru: "Быстрый старт", ja: "クイックスタート", tr: "Hızlı Başlangıç" }, slug: "getting-started/quickstart" }, + { label: "How It Works", translations: { es: "Cómo funciona", fr: "Fonctionnement", ko: "동작 원리", "zh-CN": "工作原理", "zh-TW": "運作原理", ru: "Как это работает", ja: "仕組み", tr: "Nasıl Çalışır" }, slug: "getting-started/how-it-works" }, + { label: "Agent Quickstart", translations: { es: "Inicio rápido para agentes", fr: "Démarrage rapide pour les agents", ko: "에이전트 퀵스타트", "zh-CN": "Agent 快速上手", "zh-TW": "Agent 快速上手", ru: "Быстрый старт для агентов", ja: "エージェント向けクイックスタート", tr: "Ajanlar İçin Hızlı Başlangıç" }, slug: "getting-started/for-agents" }, ], }, { label: "Guides", - translations: { fr: "Guides", ko: "가이드", "zh-CN": "指南", "zh-TW": "指南", ru: "Руководства", ja: "ガイド", tr: "Kılavuzlar" }, + translations: { es: "Guías", fr: "Guides", ko: "가이드", "zh-CN": "指南", "zh-TW": "指南", ru: "Руководства", ja: "ガイド", tr: "Kılavuzlar" }, items: [ - { label: "Remote Hub Deployment", translations: { fr: "Déploiement Remote Hub", ko: "Remote Hub 배포", "zh-CN": "Remote Hub 部署", "zh-TW": "Remote Hub 部署", ru: "Развёртывание Remote Hub", ja: "Remote Hub のデプロイ", tr: "Remote Hub Dağıtımı" }, slug: "guides/remote-hub" }, - { label: "Remote Link", translations: { fr: "Liaison distante", ko: "Remote Link", "zh-CN": "远程链接", "zh-TW": "遠端連結", ru: "Удалённая связь", ja: "リモートリンク", tr: "Uzak Bağlantı" }, slug: "guides/remote-link" }, - { label: "Response Inspection", translations: { fr: "Inspection des réponses et réponses volumineuses", ko: "응답 검사와 대용량 응답", "zh-CN": "响应检查与大型响应", "zh-TW": "回應檢查與大型回應", ru: "Проверка ответов и большие ответы", ja: "レスポンスの検査と大きなレスポンス", tr: "Yanıt incelemesi ve büyük yanıtlar" }, slug: "guides/response-inspection" }, - { label: "Remote Workspace", translations: { fr: "Espace de travail distant", ko: "원격 워크스페이스", "zh-CN": "远程工作区", "zh-TW": "遠端工作區", ru: "Удалённая рабочая область", ja: "リモートワークスペース", tr: "Uzak Çalışma Alanı" }, slug: "guides/remote-workspace" }, - { label: "Providers", translations: { fr: "Fournisseurs", ko: "프로바이더", "zh-CN": "提供商", "zh-TW": "供應商", ru: "Провайдеры", ja: "プロバイダー", tr: "Sağlayıcılar" }, slug: "guides/providers" }, - { label: "Factory Droid Bridge", translations: { fr: "Pont Factory Droid", ko: "Factory Droid 브리지", "zh-CN": "Factory Droid 桥接", "zh-TW": "Factory Droid 橋接", ru: "Мост Factory Droid", ja: "Factory Droid ブリッジ", tr: "Factory Droid köprüsü" }, slug: "guides/factory-droid" }, - { label: "Ollama-Compatible Clients", translations: { fr: "Clients compatibles Ollama", ko: "Ollama 호환 클라이언트", "zh-CN": "Ollama 兼容客户端", "zh-TW": "Ollama 相容用戶端", ru: "Клиенты, совместимые с Ollama", ja: "Ollama 互換クライアント", tr: "Ollama uyumlu istemciler" }, slug: "guides/ollama-clients" }, - { label: "Cursor Private Inference", translations: { ko: "Cursor Private Inference", fr: "Cursor Private Inference", "zh-CN": "Cursor Private Inference", "zh-TW": "Cursor Private Inference", ru: "Cursor Private Inference", ja: "Cursor Private Inference", tr: "Cursor Private Inference" }, slug: "guides/cursor-private-inference" }, - { label: "Model Routing", translations: { fr: "Routage des modèles", ko: "모델 라우팅", "zh-CN": "模型路由", "zh-TW": "模型路由", ru: "Маршрутизация моделей", ja: "モデルルーティング", tr: "Model Yönlendirme" }, slug: "guides/model-routing" }, - { label: "Codex Integration", translations: { fr: "Intégration de Codex", ko: "Codex 통합", "zh-CN": "Codex 集成", "zh-TW": "Codex 整合", ru: "Интеграция с Codex", ja: "Codex 連携", tr: "Codex Entegrasyonu" }, slug: "guides/codex-integration" }, - { label: "Composer Usage-Gate Fallback", translations: { ko: "Codex 입력 제한 대체 경로" }, slug: "guides/composer-usage-gate-fallback" }, - { label: "Codex App Model Picker", translations: { fr: "Sélecteur de modèles de Codex App", ko: "Codex App 모델 선택기", "zh-CN": "Codex App 模型选择器", "zh-TW": "Codex App 模型選擇器", ru: "Выбор модели в Codex App", ja: "Codex App モデルピッカー", tr: "Codex App Model Seçici" }, slug: "guides/codex-app-models" }, - { label: "Codex Prompt Layers", translations: { fr: "Couches d'invite Codex", ko: "Codex 프롬프트 레이어", "zh-CN": "Codex 提示词层", "zh-TW": "Codex 提示詞層", ru: "Слои промпта Codex", ja: "Codex プロンプトレイヤー", tr: "Codex İstem Katmanları" }, slug: "guides/codex-prompt" }, - { label: "Native Context Compatibility", translations: { ko: "네이티브 컨텍스트 호환성", fr: "Compatibilité du contexte natif", "zh-CN": "原生上下文兼容性", "zh-TW": "原生脈絡相容性", ru: "Совместимость с нативным контекстом", ja: "ネイティブコンテキストの互換性", tr: "Yerel bağlam uyumluluğu" }, slug: "guides/codex-native-context" }, - { label: "macOS Menu Bar App", translations: { fr: "Application barre de menus macOS", ko: "macOS 메뉴바 앱", "zh-CN": "macOS 菜单栏应用", "zh-TW": "macOS 選單列 App", ru: "Приложение в строке меню macOS", ja: "macOS メニューバーアプリ", tr: "macOS Menü Çubuğu Uygulaması" }, slug: "guides/macos-menu-bar" }, - { label: "Desktop App", translations: { fr: "Application de bureau", ko: "데스크톱 앱", "zh-CN": "桌面应用", "zh-TW": "桌面 App", ru: "Настольное приложение", ja: "デスクトップアプリ", tr: "Masaüstü Uygulaması" }, slug: "guides/desktop-app" }, - { label: "Model Ordering", translations: { fr: "Ordre des modèles", ko: "모델 정렬에 관하여", "zh-CN": "模型排序", "zh-TW": "模型排序", ru: "Сортировка моделей", ja: "モデルの並び順", tr: "Model Sıralaması" }, slug: "guides/model-ordering" }, - { label: "Combos", translations: { fr: "Combinaisons", ko: "콤보", "zh-CN": "组合", "zh-TW": "組合", ru: "Комбо", ja: "コンボ", tr: "Kombolar" }, slug: "guides/combos" }, - { label: "Fallback off", translations: { fr: "Désactiver le repli", ko: "폴백 끄기", "zh-CN": "关闭回退", "zh-TW": "關閉備援", ru: "Отключение резерва", ja: "フォールバックをオフにする", tr: "Yedeği kapatma" }, slug: "guides/fallback-off" }, - { label: "Protocol Paths", translations: { fr: "Chemins de protocole", ko: "프로토콜 경로", "zh-CN": "协议路径", "zh-TW": "協定路徑", ru: "Пути протоколов", ja: "プロトコル経路", tr: "Protokol Yolları" }, slug: "guides/protocol-paths" }, - { label: "Claude Code", translations: { fr: "Claude Code", ko: "Claude Code", "zh-CN": "Claude Code", "zh-TW": "Claude Code", ru: "Claude Code", ja: "Claude Code", tr: "Claude Code" }, slug: "guides/claude-code" }, - { label: "Grok Build", translations: { fr: "Grok Build", ko: "Grok Build", "zh-CN": "Grok Build", "zh-TW": "Grok Build", ru: "Grok Build", ja: "Grok Build", tr: "Grok Build" }, slug: "guides/grok-build" }, - { label: "opencode", translations: { fr: "opencode", ko: "opencode", "zh-CN": "opencode", "zh-TW": "opencode", ru: "opencode", ja: "opencode", tr: "opencode" }, slug: "guides/opencode" }, - { label: "Pi", translations: { fr: "Pi", ko: "Pi", "zh-CN": "Pi", "zh-TW": "Pi", ru: "Pi", ja: "Pi", tr: "Pi" }, slug: "guides/pi" }, + { label: "Remote Hub Deployment", translations: { es: "Despliegue de Remote Hub", fr: "Déploiement Remote Hub", ko: "Remote Hub 배포", "zh-CN": "Remote Hub 部署", "zh-TW": "Remote Hub 部署", ru: "Развёртывание Remote Hub", ja: "Remote Hub のデプロイ", tr: "Remote Hub Dağıtımı" }, slug: "guides/remote-hub" }, + { label: "Remote Link", translations: { es: "Enlace remoto", fr: "Liaison distante", ko: "Remote Link", "zh-CN": "远程链接", "zh-TW": "遠端連結", ru: "Удалённая связь", ja: "リモートリンク", tr: "Uzak Bağlantı" }, slug: "guides/remote-link" }, + { label: "Response Inspection", translations: { es: "Inspección de respuestas", fr: "Inspection des réponses et réponses volumineuses", ko: "응답 검사와 대용량 응답", "zh-CN": "响应检查与大型响应", "zh-TW": "回應檢查與大型回應", ru: "Проверка ответов и большие ответы", ja: "レスポンスの検査と大きなレスポンス", tr: "Yanıt incelemesi ve büyük yanıtlar" }, slug: "guides/response-inspection" }, + { label: "Remote Workspace", translations: { es: "Espacio de trabajo remoto", fr: "Espace de travail distant", ko: "원격 워크스페이스", "zh-CN": "远程工作区", "zh-TW": "遠端工作區", ru: "Удалённая рабочая область", ja: "リモートワークスペース", tr: "Uzak Çalışma Alanı" }, slug: "guides/remote-workspace" }, + { label: "Providers", translations: { es: "Proveedores", fr: "Fournisseurs", ko: "프로바이더", "zh-CN": "提供商", "zh-TW": "供應商", ru: "Провайдеры", ja: "プロバイダー", tr: "Sağlayıcılar" }, slug: "guides/providers" }, + { label: "Factory Droid Bridge", translations: { es: "Puente Factory Droid", fr: "Pont Factory Droid", ko: "Factory Droid 브리지", "zh-CN": "Factory Droid 桥接", "zh-TW": "Factory Droid 橋接", ru: "Мост Factory Droid", ja: "Factory Droid ブリッジ", tr: "Factory Droid köprüsü" }, slug: "guides/factory-droid" }, + { label: "Ollama-Compatible Clients", translations: { es: "Clientes compatibles con Ollama", fr: "Clients compatibles Ollama", ko: "Ollama 호환 클라이언트", "zh-CN": "Ollama 兼容客户端", "zh-TW": "Ollama 相容用戶端", ru: "Клиенты, совместимые с Ollama", ja: "Ollama 互換クライアント", tr: "Ollama uyumlu istemciler" }, slug: "guides/ollama-clients" }, + { label: "Cursor Private Inference", translations: { es: "Inferencia privada de Cursor", ko: "Cursor Private Inference", fr: "Cursor Private Inference", "zh-CN": "Cursor Private Inference", "zh-TW": "Cursor Private Inference", ru: "Cursor Private Inference", ja: "Cursor Private Inference", tr: "Cursor Private Inference" }, slug: "guides/cursor-private-inference" }, + { label: "Model Routing", translations: { es: "Enrutamiento de modelos", fr: "Routage des modèles", ko: "모델 라우팅", "zh-CN": "模型路由", "zh-TW": "模型路由", ru: "Маршрутизация моделей", ja: "モデルルーティング", tr: "Model Yönlendirme" }, slug: "guides/model-routing" }, + { label: "Codex Integration", translations: { es: "Integración con Codex", fr: "Intégration de Codex", ko: "Codex 통합", "zh-CN": "Codex 集成", "zh-TW": "Codex 整合", ru: "Интеграция с Codex", ja: "Codex 連携", tr: "Codex Entegrasyonu" }, slug: "guides/codex-integration" }, + { label: "Composer Usage-Gate Fallback", translations: { es: "Alternativa ante límites de uso de Composer", ko: "Codex 입력 제한 대체 경로" }, slug: "guides/composer-usage-gate-fallback" }, + { label: "Codex App Model Picker", translations: { es: "Selector de modelos de Codex App", fr: "Sélecteur de modèles de Codex App", ko: "Codex App 모델 선택기", "zh-CN": "Codex App 模型选择器", "zh-TW": "Codex App 模型選擇器", ru: "Выбор модели в Codex App", ja: "Codex App モデルピッカー", tr: "Codex App Model Seçici" }, slug: "guides/codex-app-models" }, + { label: "Codex Prompt Layers", translations: { es: "Capas de instrucciones de Codex", fr: "Couches d'invite Codex", ko: "Codex 프롬프트 레이어", "zh-CN": "Codex 提示词层", "zh-TW": "Codex 提示詞層", ru: "Слои промпта Codex", ja: "Codex プロンプトレイヤー", tr: "Codex İstem Katmanları" }, slug: "guides/codex-prompt" }, + { label: "Native Context Compatibility", translations: { es: "Compatibilidad de contexto nativo", ko: "네이티브 컨텍스트 호환성", fr: "Compatibilité du contexte natif", "zh-CN": "原生上下文兼容性", "zh-TW": "原生脈絡相容性", ru: "Совместимость с нативным контекстом", ja: "ネイティブコンテキストの互換性", tr: "Yerel bağlam uyumluluğu" }, slug: "guides/codex-native-context" }, + { label: "macOS Menu Bar App", translations: { es: "Aplicación de barra de menús de macOS", fr: "Application barre de menus macOS", ko: "macOS 메뉴바 앱", "zh-CN": "macOS 菜单栏应用", "zh-TW": "macOS 選單列 App", ru: "Приложение в строке меню macOS", ja: "macOS メニューバーアプリ", tr: "macOS Menü Çubuğu Uygulaması" }, slug: "guides/macos-menu-bar" }, + { label: "Desktop App", translations: { es: "Aplicación de escritorio", fr: "Application de bureau", ko: "데스크톱 앱", "zh-CN": "桌面应用", "zh-TW": "桌面 App", ru: "Настольное приложение", ja: "デスクトップアプリ", tr: "Masaüstü Uygulaması" }, slug: "guides/desktop-app" }, + { label: "Model Ordering", translations: { es: "Orden de modelos", fr: "Ordre des modèles", ko: "모델 정렬에 관하여", "zh-CN": "模型排序", "zh-TW": "模型排序", ru: "Сортировка моделей", ja: "モデルの並び順", tr: "Model Sıralaması" }, slug: "guides/model-ordering" }, + { label: "Combos", translations: { es: "Combos", fr: "Combinaisons", ko: "콤보", "zh-CN": "组合", "zh-TW": "組合", ru: "Комбо", ja: "コンボ", tr: "Kombolar" }, slug: "guides/combos" }, + { label: "Fallback off", translations: { es: "Desactivar el fallback", fr: "Désactiver le repli", ko: "폴백 끄기", "zh-CN": "关闭回退", "zh-TW": "關閉備援", ru: "Отключение резерва", ja: "フォールバックをオフにする", tr: "Yedeği kapatma" }, slug: "guides/fallback-off" }, + { label: "Protocol Paths", translations: { es: "Rutas de protocolo", fr: "Chemins de protocole", ko: "프로토콜 경로", "zh-CN": "协议路径", "zh-TW": "協定路徑", ru: "Пути протоколов", ja: "プロトコル経路", tr: "Protokol Yolları" }, slug: "guides/protocol-paths" }, + { label: "Claude Code", translations: { es: "Claude Code", fr: "Claude Code", ko: "Claude Code", "zh-CN": "Claude Code", "zh-TW": "Claude Code", ru: "Claude Code", ja: "Claude Code", tr: "Claude Code" }, slug: "guides/claude-code" }, + { label: "Grok Build", translations: { es: "Grok Build", fr: "Grok Build", ko: "Grok Build", "zh-CN": "Grok Build", "zh-TW": "Grok Build", ru: "Grok Build", ja: "Grok Build", tr: "Grok Build" }, slug: "guides/grok-build" }, + { label: "opencode", translations: { es: "OpenCode", fr: "opencode", ko: "opencode", "zh-CN": "opencode", "zh-TW": "opencode", ru: "opencode", ja: "opencode", tr: "opencode" }, slug: "guides/opencode" }, + { label: "Pi", translations: { es: "Pi", fr: "Pi", ko: "Pi", "zh-CN": "Pi", "zh-TW": "Pi", ru: "Pi", ja: "Pi", tr: "Pi" }, slug: "guides/pi" }, { label: "ChatGPT Desktop (experimental)", slug: "guides/chatgpt-desktop" }, - { label: "Integrations", translations: { fr: "Intégrations", ko: "연동", "zh-CN": "集成", "zh-TW": "整合", ru: "Интеграции", ja: "連携", tr: "Entegrasyonlar" }, slug: "guides/integrations" }, - { label: "MiniMax clients", translations: { fr: "Clients MiniMax", ko: "MiniMax 클라이언트", "zh-CN": "MiniMax 客户端", "zh-TW": "MiniMax 客戶端", ru: "Клиенты MiniMax", ja: "MiniMax クライアント", tr: "MiniMax İstemcileri" }, slug: "guides/minimax" }, - { label: "Sidecars: Web Search & Vision", translations: { fr: "Services auxiliaires : recherche web et vision", ko: "사이드카: 웹 검색 & 비전", "zh-CN": "边车:网络搜索与视觉", "zh-TW": "邊車:網路搜尋與視覺", ru: "Сайдкары: веб-поиск и зрение", ja: "サイドカー: ウェブ検索 & ビジョン", tr: "Sidecar'lar: Web Arama ve Görme" }, slug: "guides/sidecars" }, - { label: "Local Plugins", translations: { fr: "Plugins locaux", ko: "로컬 플러그인", "zh-CN": "本地插件", "zh-TW": "本機外掛", ru: "Локальные плагины", ja: "ローカルプラグイン", tr: "Yerel Eklentiler" }, slug: "guides/local-plugins" }, - { label: "Image Bridge", translations: { fr: "Pont d’images", ko: "이미지 브릿지", "zh-CN": "图像桥接", "zh-TW": "圖像橋接", ru: "Image Bridge", ja: "画像ブリッジ", tr: "Image Bridge" }, slug: "guides/image-bridge" }, - { label: "Video Bridge", translations: { fr: "Pont vidéo", ko: "비디오 브릿지", "zh-CN": "视频桥接", "zh-TW": "影片橋接", ru: "Video Bridge", ja: "動画ブリッジ", tr: "Video Bridge" }, slug: "guides/video-bridge" }, - { label: "Web Dashboard", translations: { fr: "Tableau de bord web", ko: "웹 대시보드", "zh-CN": "网页控制台", "zh-TW": "網頁儀表板", ru: "Веб-дашборд", ja: "ウェブダッシュボード", tr: "Web Kontrol Paneli" }, slug: "guides/web-dashboard" }, - { label: "Telemetry & Privacy", translations: { fr: "Télémétrie et confidentialité", ko: "텔레메트리 및 개인정보", "zh-CN": "遥测与隐私", "zh-TW": "遙測與隱私", ru: "Телеметрия и конфиденциальность", ja: "テレメトリとプライバシー", tr: "Telemetri ve Gizlilik" }, slug: "guides/telemetry" }, - { label: "Sub-agent Surface", translations: { fr: "Interface des sous-agents", ko: "서브에이전트 서피스", "zh-CN": "子代理界面", "zh-TW": "子代理介面", ru: "Интерфейс подагентов", ja: "サブエージェントサーフェス", tr: "Alt Ajan Arayüzü" }, slug: "guides/sub-agent-surface" }, - { label: "Why v1 Is the Default", translations: { fr: "Pourquoi v1 est la valeur par défaut", ko: "v1이 기본값인 이유", "zh-CN": "为什么默认是 v1", "zh-TW": "為什麼預設是 v1", ru: "Почему v1 по умолчанию", ja: "v1 がデフォルトである理由", tr: "Neden varsayılan v1" }, slug: "guides/subagent-v1-default" }, + { label: "Integrations", translations: { es: "Integraciones", fr: "Intégrations", ko: "연동", "zh-CN": "集成", "zh-TW": "整合", ru: "Интеграции", ja: "連携", tr: "Entegrasyonlar" }, slug: "guides/integrations" }, + { label: "MiniMax clients", translations: { es: "Clientes MiniMax", fr: "Clients MiniMax", ko: "MiniMax 클라이언트", "zh-CN": "MiniMax 客户端", "zh-TW": "MiniMax 客戶端", ru: "Клиенты MiniMax", ja: "MiniMax クライアント", tr: "MiniMax İstemcileri" }, slug: "guides/minimax" }, + { label: "Sidecars: Web Search & Vision", translations: { es: "Sidecars: búsqueda web y visión", fr: "Services auxiliaires : recherche web et vision", ko: "사이드카: 웹 검색 & 비전", "zh-CN": "边车:网络搜索与视觉", "zh-TW": "邊車:網路搜尋與視覺", ru: "Сайдкары: веб-поиск и зрение", ja: "サイドカー: ウェブ検索 & ビジョン", tr: "Sidecar'lar: Web Arama ve Görme" }, slug: "guides/sidecars" }, + { label: "Local Plugins", translations: { es: "Plugins locales", fr: "Plugins locaux", ko: "로컬 플러그인", "zh-CN": "本地插件", "zh-TW": "本機外掛", ru: "Локальные плагины", ja: "ローカルプラグイン", tr: "Yerel Eklentiler" }, slug: "guides/local-plugins" }, + { label: "Image Bridge", translations: { es: "Puente de imágenes", fr: "Pont d’images", ko: "이미지 브릿지", "zh-CN": "图像桥接", "zh-TW": "圖像橋接", ru: "Image Bridge", ja: "画像ブリッジ", tr: "Image Bridge" }, slug: "guides/image-bridge" }, + { label: "Video Bridge", translations: { es: "Puente de video", fr: "Pont vidéo", ko: "비디오 브릿지", "zh-CN": "视频桥接", "zh-TW": "影片橋接", ru: "Video Bridge", ja: "動画ブリッジ", tr: "Video Bridge" }, slug: "guides/video-bridge" }, + { label: "Web Dashboard", translations: { es: "Dashboard web", fr: "Tableau de bord web", ko: "웹 대시보드", "zh-CN": "网页控制台", "zh-TW": "網頁儀表板", ru: "Веб-дашборд", ja: "ウェブダッシュボード", tr: "Web Kontrol Paneli" }, slug: "guides/web-dashboard" }, + { label: "Telemetry & Privacy", translations: { es: "Telemetría", fr: "Télémétrie et confidentialité", ko: "텔레메트리 및 개인정보", "zh-CN": "遥测与隐私", "zh-TW": "遙測與隱私", ru: "Телеметрия и конфиденциальность", ja: "テレメトリとプライバシー", tr: "Telemetri ve Gizlilik" }, slug: "guides/telemetry" }, + { label: "Sub-agent Surface", translations: { es: "Interfaz de subagentes", fr: "Interface des sous-agents", ko: "서브에이전트 서피스", "zh-CN": "子代理界面", "zh-TW": "子代理介面", ru: "Интерфейс подагентов", ja: "サブエージェントサーフェス", tr: "Alt Ajan Arayüzü" }, slug: "guides/sub-agent-surface" }, + { label: "Why v1 Is the Default", translations: { es: "Por qué v1 es la opción predeterminada", fr: "Pourquoi v1 est la valeur par défaut", ko: "v1이 기본값인 이유", "zh-CN": "为什么默认是 v1", "zh-TW": "為什麼預設是 v1", ru: "Почему v1 по умолчанию", ja: "v1 がデフォルトである理由", tr: "Neden varsayılan v1" }, slug: "guides/subagent-v1-default" }, ], }, { label: "Benchmarks", - translations: { fr: "Bancs d’essai", ko: "벤치마크", "zh-CN": "基准测试", "zh-TW": "基準測試", ru: "Бенчмарки", ja: "ベンチマーク", tr: "Kıyaslamalar" }, + translations: { es: "Pruebas comparativas", fr: "Bancs d’essai", ko: "벤치마크", "zh-CN": "基准测试", "zh-TW": "基準測試", ru: "Бенчмарки", ja: "ベンチマーク", tr: "Kıyaslamalar" }, collapsed: true, items: [ - { label: "Overview", translations: { fr: "Vue d’ensemble", ko: "개요", "zh-CN": "概览", "zh-TW": "概覽", ru: "Обзор", ja: "概要", tr: "Genel Bakış" }, slug: "benchmarks" }, - { label: "Coding", translations: { fr: "Programmation", ko: "코딩", "zh-CN": "编程", "zh-TW": "程式設計", ru: "Кодинг", ja: "コーディング", tr: "Kodlama" }, slug: "benchmarks/coding" }, - { label: "Frontend", translations: { fr: "Frontend", ko: "프론트엔드", "zh-CN": "前端", "zh-TW": "前端", ru: "Фронтенд", ja: "フロントエンド", tr: "Ön Yüz" }, slug: "benchmarks/frontend" }, - { label: "Terminal", translations: { fr: "Terminal", ko: "터미널", "zh-CN": "终端", "zh-TW": "終端", ru: "Терминал", ja: "ターミナル", tr: "Terminal" }, slug: "benchmarks/terminal" }, - { label: "Security", translations: { fr: "Sécurité", ko: "보안", "zh-CN": "安全", "zh-TW": "安全", ru: "Безопасность", ja: "セキュリティ", tr: "Güvenlik" }, slug: "benchmarks/security" }, - { label: "Intelligence", translations: { fr: "Intelligence", ko: "인텔리전스", "zh-CN": "智能", "zh-TW": "智慧", ru: "Интеллект", ja: "インテリジェンス", tr: "Zeka" }, slug: "benchmarks/intelligence" }, + { label: "Overview", translations: { es: "Descripción general", fr: "Vue d’ensemble", ko: "개요", "zh-CN": "概览", "zh-TW": "概覽", ru: "Обзор", ja: "概要", tr: "Genel Bakış" }, slug: "benchmarks" }, + { label: "Coding", translations: { es: "Codificación", fr: "Programmation", ko: "코딩", "zh-CN": "编程", "zh-TW": "程式設計", ru: "Кодинг", ja: "コーディング", tr: "Kodlama" }, slug: "benchmarks/coding" }, + { label: "Frontend", translations: { es: "Frontend", fr: "Frontend", ko: "프론트엔드", "zh-CN": "前端", "zh-TW": "前端", ru: "Фронтенд", ja: "フロントエンド", tr: "Ön Yüz" }, slug: "benchmarks/frontend" }, + { label: "Terminal", translations: { es: "Terminal", fr: "Terminal", ko: "터미널", "zh-CN": "终端", "zh-TW": "終端", ru: "Терминал", ja: "ターミナル", tr: "Terminal" }, slug: "benchmarks/terminal" }, + { label: "Security", translations: { es: "Seguridad", fr: "Sécurité", ko: "보안", "zh-CN": "安全", "zh-TW": "安全", ru: "Безопасность", ja: "セキュリティ", tr: "Güvenlik" }, slug: "benchmarks/security" }, + { label: "Intelligence", translations: { es: "Inteligencia", fr: "Intelligence", ko: "인텔리전스", "zh-CN": "智能", "zh-TW": "智慧", ru: "Интеллект", ja: "インテリジェンス", tr: "Zeka" }, slug: "benchmarks/intelligence" }, ], }, { label: "Reference", - translations: { fr: "Référence", ko: "레퍼런스", "zh-CN": "参考", "zh-TW": "參考", ru: "Справочник", ja: "リファレンス", tr: "Referans" }, + translations: { es: "Referencia", fr: "Référence", ko: "레퍼런스", "zh-CN": "参考", "zh-TW": "參考", ru: "Справочник", ja: "リファレンス", tr: "Referans" }, items: [ { label: "CLI", - translations: { fr: "CLI", ko: "CLI", "zh-CN": "命令行", "zh-TW": "命令列", ru: "CLI", ja: "CLI", tr: "CLI" }, + translations: { es: "CLI", fr: "CLI", ko: "CLI", "zh-CN": "命令行", "zh-TW": "命令列", ru: "CLI", ja: "CLI", tr: "CLI" }, items: [ - { label: "Overview", translations: { fr: "Vue d’ensemble", ko: "개요", "zh-CN": "概览", "zh-TW": "概覽", ru: "Обзор", ja: "概要", tr: "Genel Bakış" }, slug: "reference/cli" }, - { label: "Lifecycle & Service", translations: { fr: "Cycle de vie et service", ko: "라이프사이클 & 서비스", "zh-CN": "生命周期与服务", "zh-TW": "生命週期與服務", ru: "Жизненный цикл и служба", ja: "ライフサイクル & サービス", tr: "Yaşam Döngüsü ve Servis" }, slug: "reference/cli/lifecycle" }, - { label: "Providers, Accounts & Models", translations: { fr: "Fournisseurs, comptes et modèles", ko: "프로바이더, 계정 & 모델", "zh-CN": "提供商、账户与模型", "zh-TW": "供應商、帳號與模型", ru: "Провайдеры, аккаунты и модели", ja: "プロバイダー・アカウント・モデル", tr: "Sağlayıcılar, Hesaplar ve Modeller" }, slug: "reference/cli/providers-accounts" }, - { label: "Agents, Routing & Integrations", translations: { fr: "Agents, routage et intégrations", ko: "에이전트, 라우팅 & 통합", "zh-CN": "代理、路由与集成", "zh-TW": "代理、路由與整合", ru: "Агенты, маршрутизация и интеграции", ja: "エージェント・ルーティング・連携", tr: "Ajanlar, Yönlendirme ve Entegrasyonlar" }, slug: "reference/cli/agents" }, + { label: "Overview", translations: { es: "Descripción general", fr: "Vue d’ensemble", ko: "개요", "zh-CN": "概览", "zh-TW": "概覽", ru: "Обзор", ja: "概要", tr: "Genel Bakış" }, slug: "reference/cli" }, + { label: "Lifecycle & Service", translations: { es: "Ciclo de vida y servicio", fr: "Cycle de vie et service", ko: "라이프사이클 & 서비스", "zh-CN": "生命周期与服务", "zh-TW": "生命週期與服務", ru: "Жизненный цикл и служба", ja: "ライフサイクル & サービス", tr: "Yaşam Döngüsü ve Servis" }, slug: "reference/cli/lifecycle" }, + { label: "Providers, Accounts & Models", translations: { es: "Proveedores, cuentas y modelos", fr: "Fournisseurs, comptes et modèles", ko: "프로바이더, 계정 & 모델", "zh-CN": "提供商、账户与模型", "zh-TW": "供應商、帳號與模型", ru: "Провайдеры, аккаунты и модели", ja: "プロバイダー・アカウント・モデル", tr: "Sağlayıcılar, Hesaplar ve Modeller" }, slug: "reference/cli/providers-accounts" }, + { label: "Agents, Routing & Integrations", translations: { es: "Agentes, enrutamiento e integraciones", fr: "Agents, routage et intégrations", ko: "에이전트, 라우팅 & 통합", "zh-CN": "代理、路由与集成", "zh-TW": "代理、路由與整合", ru: "Агенты, маршрутизация и интеграции", ja: "エージェント・ルーティング・連携", tr: "Ajanlar, Yönlendirme ve Entegrasyonlar" }, slug: "reference/cli/agents" }, ], }, { label: "Configuration", - translations: { fr: "Configuration", ko: "설정", "zh-CN": "配置", "zh-TW": "設定", ru: "Конфигурация", ja: "設定", tr: "Yapılandırma" }, + translations: { es: "Configuración", fr: "Configuration", ko: "설정", "zh-CN": "配置", "zh-TW": "設定", ru: "Конфигурация", ja: "設定", tr: "Yapılandırma" }, items: [ - { label: "Overview", translations: { fr: "Vue d’ensemble", ko: "개요", "zh-CN": "概览", "zh-TW": "概覽", ru: "Обзор", ja: "概要", tr: "Genel Bakış" }, slug: "reference/configuration" }, - { label: "Providers", translations: { fr: "Fournisseurs", ko: "프로바이더", "zh-CN": "提供商", "zh-TW": "供應商", ru: "Провайдеры", ja: "プロバイダー", tr: "Sağlayıcılar" }, slug: "reference/configuration/providers" }, - { label: "Catalog", translations: { fr: "Catalogue", ko: "카탈로그", "zh-CN": "目录", "zh-TW": "目錄", ru: "Каталог", ja: "カタログ", tr: "Katalog" }, slug: "reference/configuration/catalog" }, - { label: "Routing", translations: { fr: "Routage", ko: "라우팅", "zh-CN": "路由", "zh-TW": "路由", ru: "Маршрутизация", ja: "ルーティング", tr: "Yönlendirme" }, slug: "reference/configuration/routing" }, - { label: "Agents", translations: { fr: "Agents", ko: "에이전트", "zh-CN": "代理", "zh-TW": "代理", ru: "Агенты", ja: "エージェント", tr: "Ajanlar" }, slug: "reference/configuration/agents" }, - { label: "Advisor", translations: { fr: "Conseiller", ko: "어드바이저", "zh-CN": "顾问", "zh-TW": "顧問", ru: "Консультант", ja: "アドバイザー", tr: "Danışman" }, slug: "reference/configuration/advisor" }, - { label: "Server & Runtime", translations: { fr: "Serveur et environnement d’exécution", ko: "서버 & 런타임", "zh-CN": "服务器与运行时", "zh-TW": "伺服器與執行階段", ru: "Сервер и рантайм", ja: "サーバー & ランタイム", tr: "Sunucu ve Çalışma Zamanı" }, slug: "reference/configuration/server" }, + { label: "Overview", translations: { es: "Descripción general", fr: "Vue d’ensemble", ko: "개요", "zh-CN": "概览", "zh-TW": "概覽", ru: "Обзор", ja: "概要", tr: "Genel Bakış" }, slug: "reference/configuration" }, + { label: "Providers", translations: { es: "Proveedores", fr: "Fournisseurs", ko: "프로바이더", "zh-CN": "提供商", "zh-TW": "供應商", ru: "Провайдеры", ja: "プロバイダー", tr: "Sağlayıcılar" }, slug: "reference/configuration/providers" }, + { label: "OS Keychain", translations: { es: "Llavero del sistema" }, slug: "reference/configuration/keychain" }, + { label: "Catalog", translations: { es: "Catálogo", fr: "Catalogue", ko: "카탈로그", "zh-CN": "目录", "zh-TW": "目錄", ru: "Каталог", ja: "カタログ", tr: "Katalog" }, slug: "reference/configuration/catalog" }, + { label: "Routing", translations: { es: "Enrutamiento", fr: "Routage", ko: "라우팅", "zh-CN": "路由", "zh-TW": "路由", ru: "Маршрутизация", ja: "ルーティング", tr: "Yönlendirme" }, slug: "reference/configuration/routing" }, + { label: "Agents", translations: { es: "Agentes", fr: "Agents", ko: "에이전트", "zh-CN": "代理", "zh-TW": "代理", ru: "Агенты", ja: "エージェント", tr: "Ajanlar" }, slug: "reference/configuration/agents" }, + { label: "Advisor", translations: { es: "Advisor", fr: "Conseiller", ko: "어드바이저", "zh-CN": "顾问", "zh-TW": "顧問", ru: "Консультант", ja: "アドバイザー", tr: "Danışman" }, slug: "reference/configuration/advisor" }, + { label: "Server & Runtime", translations: { es: "Servidor y entorno de ejecución", fr: "Serveur et environnement d’exécution", ko: "서버 & 런타임", "zh-CN": "服务器与运行时", "zh-TW": "伺服器與執行階段", ru: "Сервер и рантайм", ja: "サーバー & ランタイム", tr: "Sunucu ve Çalışma Zamanı" }, slug: "reference/configuration/server" }, ], }, - { label: "Client Support", translations: { fr: "Clients pris en charge", ko: "클라이언트 지원", "zh-CN": "客户端支持", "zh-TW": "用戶端支援", ru: "Поддержка клиентов", ja: "クライアント対応", tr: "İstemci desteği" }, slug: "reference/client-support" }, - { label: "Adapters", translations: { fr: "Adaptateurs", ko: "어댑터", "zh-CN": "适配器", "zh-TW": "適配器", ru: "Адаптеры", ja: "アダプター", tr: "Adaptörler" }, slug: "reference/adapters" }, - { label: "Architecture", translations: { fr: "Architecture", ko: "아키텍처", "zh-CN": "架构", "zh-TW": "架構", ru: "Архитектура", ja: "アーキテクチャ", tr: "Mimari" }, slug: "reference/architecture" }, - { label: "Platform Support", translations: { fr: "Prise en charge des plateformes", ko: "플랫폼 지원", "zh-CN": "平台支持", "zh-TW": "平台支援", ru: "Поддержка платформ", ja: "プラットフォーム対応", tr: "Platform Desteği" }, link: `${SITE_URL}/reference/platform-support` }, - { label: "Windows Code Signing", translations: { fr: "Signature du code Windows", ko: "Windows 코드 서명", "zh-CN": "Windows 代码签名", "zh-TW": "Windows 程式碼簽署", ru: "Подпись кода Windows", ja: "Windows コード署名", tr: "Windows Kod İmzalama" }, slug: "reference/code-signing" }, - { label: "Proxy API Formats", translations: { fr: "Formats de l’API proxy", ko: "프록시 API 형식", "zh-CN": "代理 API 格式", "zh-TW": "代理 API 格式", ru: "Форматы API прокси", ja: "プロキシAPI形式", tr: "Proxy API Formatları" }, slug: "reference/proxy-formats" }, - { label: "Management API", translations: { fr: "API de gestion", ko: "관리 API", "zh-CN": "管理 API", "zh-TW": "管理 API", ru: "API управления", ja: "管理API", tr: "Yönetim API'si" }, slug: "reference/management-api" }, + { label: "Client Support", translations: { es: "Compatibilidad con clientes", fr: "Clients pris en charge", ko: "클라이언트 지원", "zh-CN": "客户端支持", "zh-TW": "用戶端支援", ru: "Поддержка клиентов", ja: "クライアント対応", tr: "İstemci desteği" }, slug: "reference/client-support" }, + { label: "Adapters", translations: { es: "Adaptadores", fr: "Adaptateurs", ko: "어댑터", "zh-CN": "适配器", "zh-TW": "適配器", ru: "Адаптеры", ja: "アダプター", tr: "Adaptörler" }, slug: "reference/adapters" }, + { label: "Architecture", translations: { es: "Arquitectura", fr: "Architecture", ko: "아키텍처", "zh-CN": "架构", "zh-TW": "架構", ru: "Архитектура", ja: "アーキテクチャ", tr: "Mimari" }, slug: "reference/architecture" }, + { label: "Platform Support", translations: { es: "Soporte de plataforma", fr: "Prise en charge des plateformes", ko: "플랫폼 지원", "zh-CN": "平台支持", "zh-TW": "平台支援", ru: "Поддержка платформ", ja: "プラットフォーム対応", tr: "Platform Desteği" }, slug: "reference/platform-support" }, + { label: "Windows Code Signing", translations: { es: "Firma de código en Windows", fr: "Signature du code Windows", ko: "Windows 코드 서명", "zh-CN": "Windows 代码签名", "zh-TW": "Windows 程式碼簽署", ru: "Подпись кода Windows", ja: "Windows コード署名", tr: "Windows Kod İmzalama" }, slug: "reference/code-signing" }, + { label: "Proxy API Formats", translations: { es: "Formatos de API del proxy", fr: "Formats de l’API proxy", ko: "프록시 API 형식", "zh-CN": "代理 API 格式", "zh-TW": "代理 API 格式", ru: "Форматы API прокси", ja: "プロキシAPI形式", tr: "Proxy API Formatları" }, slug: "reference/proxy-formats" }, + { label: "Management API", translations: { es: "API de administración", fr: "API de gestion", ko: "관리 API", "zh-CN": "管理 API", "zh-TW": "管理 API", ru: "API управления", ja: "管理API", tr: "Yönetim API'si" }, slug: "reference/management-api" }, ], }, { label: "Troubleshooting", - translations: { fr: "Dépannage", ko: "문제 해결", "zh-CN": "故障排除", "zh-TW": "疑難排解", ru: "Устранение неполадок", ja: "トラブルシューティング", tr: "Sorun Giderme" }, + translations: { es: "Solución de problemas", fr: "Dépannage", ko: "문제 해결", "zh-CN": "故障排除", "zh-TW": "疑難排解", ru: "Устранение неполадок", ja: "トラブルシューティング", tr: "Sorun Giderme" }, collapsed: true, items: [ - { label: "Windows Memory Growth", translations: { fr: "Augmentation de la mémoire sous Windows", ko: "Windows 메모리 증가", "zh-CN": "Windows 内存增长", "zh-TW": "Windows 記憶體增長", ru: "Рост памяти в Windows", ja: "Windows メモリ増加", tr: "Windows Bellek Artışı" }, slug: "troubleshooting/windows-memory" }, - { label: "Disk Usage from Temp Files", translations: { fr: "Espace disque et fichiers temporaires", ko: "임시 파일 디스크 사용량", "zh-CN": "临时文件磁盘占用", "zh-TW": "暫存檔磁碟用量", ru: "Использование диска временными файлами", ja: "一時ファイルのディスク使用量", tr: "Geçici Dosya Disk Kullanımı" }, slug: "troubleshooting/disk-usage-temp-files" }, - { label: "Codex Cannot Sign In or Load", translations: { fr: "Codex ne peut pas se connecter", ko: "Codex 로그인 불가", "zh-CN": "Codex 无法登录", "zh-TW": "Codex 無法登入", ru: "Codex не может войти", ja: "Codex にサインインできない", tr: "Codex Oturum Açamıyor" }, slug: "troubleshooting/codex-cannot-sign-in" }, - { label: "Update Failed on Windows", translations: { fr: "Échec de la mise à jour sous Windows", ko: "Windows에서 업데이트 실패", "zh-CN": "Windows 上更新失败", "zh-TW": "Windows 上更新失敗", ru: "Сбой обновления в Windows", ja: "Windows で更新に失敗する", tr: "Windows'ta Güncelleme Başarısız" }, slug: "troubleshooting/update-failed" }, - { label: "Spend Ledger Refused in a Synced Folder", translations: { fr: "Registre de dépenses refusé dans un dossier synchronisé", ko: "동기화 폴더에서 지출 원장 거부", "zh-CN": "同步文件夹中的支出账本被拒绝", "zh-TW": "同步資料夾中的支出帳本被拒絕", ru: "Отказ журнала расходов в синхронизируемой папке", ja: "同期フォルダーで支出台帳が拒否される", tr: "Eşitlenen Klasörde Harcama Defteri Reddi" }, slug: "troubleshooting/spend-ledger-synced-folder" }, + { label: "Windows Memory Growth", translations: { es: "Crecimiento del uso de memoria en Windows", fr: "Augmentation de la mémoire sous Windows", ko: "Windows 메모리 증가", "zh-CN": "Windows 内存增长", "zh-TW": "Windows 記憶體增長", ru: "Рост памяти в Windows", ja: "Windows メモリ増加", tr: "Windows Bellek Artışı" }, slug: "troubleshooting/windows-memory" }, + { label: "Disk Usage from Temp Files", translations: { es: "Uso de disco por archivos temporales", fr: "Espace disque et fichiers temporaires", ko: "임시 파일 디스크 사용량", "zh-CN": "临时文件磁盘占用", "zh-TW": "暫存檔磁碟用量", ru: "Использование диска временными файлами", ja: "一時ファイルのディスク使用量", tr: "Geçici Dosya Disk Kullanımı" }, slug: "troubleshooting/disk-usage-temp-files" }, + { label: "Codex Cannot Sign In or Load", translations: { es: "Codex no puede iniciar sesión ni cargar", fr: "Codex ne peut pas se connecter", ko: "Codex 로그인 불가", "zh-CN": "Codex 无法登录", "zh-TW": "Codex 無法登入", ru: "Codex не может войти", ja: "Codex にサインインできない", tr: "Codex Oturum Açamıyor" }, slug: "troubleshooting/codex-cannot-sign-in" }, + { label: "Update Failed on Windows", translations: { es: "Fallo de actualización en Windows", fr: "Échec de la mise à jour sous Windows", ko: "Windows에서 업데이트 실패", "zh-CN": "Windows 上更新失败", "zh-TW": "Windows 上更新失敗", ru: "Сбой обновления в Windows", ja: "Windows で更新に失敗する", tr: "Windows'ta Güncelleme Başarısız" }, slug: "troubleshooting/update-failed" }, + { label: "Spend Ledger Refused in a Synced Folder", translations: { es: "Registro de gastos rechazado en una carpeta sincronizada", fr: "Registre de dépenses refusé dans un dossier synchronisé", ko: "동기화 폴더에서 지출 원장 거부", "zh-CN": "同步文件夹中的支出账本被拒绝", "zh-TW": "同步資料夾中的支出帳本被拒絕", ru: "Отказ журнала расходов в синхронизируемой папке", ja: "同期フォルダーで支出台帳が拒否される", tr: "Eşitlenen Klasörde Harcama Defteri Reddi" }, slug: "troubleshooting/spend-ledger-synced-folder" }, ], }, - { label: "Contributing", translations: { fr: "Contribuer", ko: "기여하기", "zh-CN": "贡献", "zh-TW": "貢獻", ru: "Как внести вклад", ja: "コントリビュート", tr: "Katkıda Bulunma" }, slug: "contributing" }, + { label: "Contributing", translations: { es: "Cómo contribuir", fr: "Contribuer", ko: "기여하기", "zh-CN": "贡献", "zh-TW": "貢獻", ru: "Как внести вклад", ja: "コントリビュート", tr: "Katkıda Bulunma" }, slug: "contributing" }, ], }), // Runs after Starlight has written the site: refuses a build with a broken internal link. diff --git a/docs-site/src/components/FrontierBoards.astro b/docs-site/src/components/FrontierBoards.astro index 2cd29564cb6..8dbeaf5b7d2 100644 --- a/docs-site/src/components/FrontierBoards.astro +++ b/docs-site/src/components/FrontierBoards.astro @@ -10,7 +10,7 @@ import data from "../data/frontier-benchmarks.json"; import { FRONTIER_STRINGS } from "../data/frontier-i18n"; interface Props { - locale?: "en" | "fr" | "ko" | "zh-cn" | "zh-tw" | "ru" | "ja" | "tr"; + locale?: "en" | "fr" | "ko" | "zh-cn" | "zh-tw" | "ru" | "ja" | "tr" | "es"; /** Comma-separated board ids to render; omit for all boards. */ boards?: string; /** Show the page-level subtitle (overview pages only). */ @@ -21,13 +21,16 @@ const { locale = "en", boards: boardsProp, intro = false } = Astro.props; const include = boardsProp ? new Set(boardsProp.split(",").map(s => s.trim()).filter(Boolean)) : null; const strings = FRONTIER_STRINGS[locale] as Record; const fallback = FRONTIER_STRINGS.en as Record; +/** Resolve a benchmark label, using the canonical copy for unknown localized keys. */ const t = (key: string): string => strings[key] ?? fallback[key] ?? key; +/** Substitute named display placeholders without changing the underlying benchmark data. */ const fill = (key: string, vars: Record): string => Object.entries(vars).reduce((acc, [k, v]) => acc.replace(`{${k}}`, v), t(key)); // The PR i18n has no column-header key for "score" — keep a tiny local map. -const SCORE_HEADER: Record = { en: "Score", fr: "Score", ko: "점수", "zh-cn": "得分", "zh-tw": "得分", ru: "Балл", ja: "スコア", tr: "Puan" }; +const SCORE_HEADER: Record = { es: "Puntuación", en: "Score", fr: "Score", ko: "점수", "zh-cn": "得分", "zh-tw": "得分", ru: "Балл", ja: "スコア", tr: "Puan" }; /** Dataset tags are kebab-case; i18n keys are camelCase (cheap-subagent → cheapSubagent). */ +/** Map dataset kebab-case tags to the existing translation-key suffix. */ const tagKey = (tag: string): string => tag.replace(/-([a-z])/g, (_, c) => c.toUpperCase()); const boards = data.benchmarks.filter(board => !include || include.has(board.id)).map(board => { @@ -61,8 +64,7 @@ const boards = data.benchmarks.filter(board => !include || include.has(board.id)

{t(`frontier.board.${board.id}.title`)}

{fill("frontier.updated", { date: board.updated })} - {" · "} - {fill("frontier.tasks", { count: String(board.taskCount) })} + {board.taskCount != null && · {fill("frontier.tasks", { count: String(board.taskCount) })}} {" · "} {t("frontier.sourceLink")} {board.provenance.license && · {board.provenance.license}} @@ -76,7 +78,7 @@ const boards = data.benchmarks.filter(board => !include || include.has(board.id) {t("frontier.col.model")} {t("frontier.col.effort")} {SCORE_HEADER[locale] ?? SCORE_HEADER.en} - {t("frontier.col.cost")} + {board.chart.xLabel} {board.allMeasured && {t("frontier.col.efficiency")}} {t("frontier.col.tags")} diff --git a/docs-site/src/components/Header.astro b/docs-site/src/components/Header.astro index 7e86a7de5dc..32b7248152e 100644 --- a/docs-site/src/components/Header.astro +++ b/docs-site/src/components/Header.astro @@ -84,8 +84,47 @@ const fr = { 'GitHub, {count} stars': 'GitHub, {count} étoiles', } as const; +const es: Record = { + "Auto": "Automático", + "Light": "Claro", + "Dark": "Oscuro", + "Theme": "Tema", + "Click to use the next theme": "Haz clic para cambiar al siguiente tema", + "Getting Started": "Primeros pasos", + "Installation": "Instalación", + "Quickstart": "Inicio rápido", + "How It Works": "Cómo funciona", + "Agent Quickstart": "Inicio rápido para agentes", + "Guides": "Guías", + "Providers": "Proveedores", + "Model Routing": "Enrutamiento de modelos", + "Combos": "Combos", + "Codex Integration": "Integración con Codex", + "Codex App Model Picker": "Selector de modelos de Codex App", + "Sidecars: Search & Vision": "Sidecars: búsqueda y visión", + "Image Bridge": "Puente de imágenes", + "Video Bridge": "Puente de video", + "Web Dashboard": "Dashboard web", + "Sub-agent Surface": "Interfaz de subagentes", + "Reference": "Referencia", + "Configuration": "Configuración", + "Adapters": "Adaptadores", + "Architecture": "Arquitectura", + "Proxy API Formats": "Formatos de API del proxy", + "Management API": "API de administración", + "Contributing": "Cómo contribuir", + "Dashboard": "Panel de telemetría", + "Explore guides": "Explorar las guías", + "Main": "Navegación principal", + "Select language": "Elegir idioma", + "Menu": "Menú", + "GitHub": "GitHub", + "GitHub, {count} stars": "GitHub, {count} estrellas", +}; + +/** Select navigation copy; typed dictionaries require complete French and Spanish keys. */ const t = (en: K, ko: string, zh: string, ru: string, ja: string, zhTW: string, tr: string): string => - locale === 'fr' ? fr[en] : locale === 'ko' ? ko : locale === 'zh-cn' ? zh : locale === 'zh-tw' ? zhTW : locale === 'ru' ? ru : locale === 'ja' ? ja : locale === 'tr' ? tr : en; + locale === 'es' ? es[en] : locale === 'fr' ? fr[en] : locale === 'ko' ? ko : locale === 'zh-cn' ? zh : locale === 'zh-tw' ? zhTW : locale === 'ru' ? ru : locale === 'ja' ? ja : locale === 'tr' ? tr : en; const starCount = await getStarCount(); const starLocale = locale ?? 'en'; @@ -97,9 +136,10 @@ const starLabel = t( const githubAccessibleName = starCount === null ? githubLabel : starLabel.replace('{count}', starCount.toLocaleString(starLocale)); -type LanguageOption = { code: 'root' | 'fr' | 'ko' | 'zh-cn' | 'zh-tw' | 'ru' | 'ja' | 'tr'; label: string }; +type LanguageOption = { code: 'root' | 'fr' | 'ko' | 'zh-cn' | 'zh-tw' | 'ru' | 'ja' | 'tr' | 'es'; label: string }; const languages: LanguageOption[] = [ { code: 'root', label: 'English' }, + { code: 'es', label: 'Español' }, { code: 'fr', label: 'Français' }, { code: 'ko', label: '한국어' }, { code: 'zh-cn', label: '简体中文' }, @@ -341,8 +381,21 @@ const contributing: NavLink = {

+
+ {t('Select language', '언어 선택', '选择语言', 'Выбрать язык', '言語を選択', '選擇語言', 'Dil seçin')} +
+
{groups.map((group, i) => ( -
+
{group.label} @@ -407,6 +460,21 @@ const contributing: NavLink = { } :global(.sl-skip-link:focus) { min-height: 44px; } + /* Longer locale labels need room before the full search pill fits. */ + @media (min-width: 50rem) and (max-width: 89.99rem) { + .header { gap: 0.5rem; } + .title-wrapper { flex-shrink: 0; } + .search-wrapper :global(button[data-open-modal]) { + width: 44px; + min-width: 44px; + min-height: 44px; + padding: 0; + justify-content: center; + } + .search-wrapper :global(button[data-open-modal] > span), + .search-wrapper :global(button[data-open-modal] > kbd) { display: none; } + } + .search-wrapper, .github-link, .right-group, @@ -950,6 +1018,9 @@ const contributing: NavLink = { translate 0.4s cubic-bezier(0.22, 1, 0.36, 1), visibility 0s; } + .lp-menu-languages ul { display: grid; grid-template-columns: repeat(2, 1fr); } + .lp-menu-languages a[aria-current='true'] { color: var(--sl-color-text-accent); font-weight: 600; } + @media (min-width: 50rem) { .lp-menu-languages { display: none; } } .lp-menu-group, .lp-menu-contrib { border-bottom: 1px solid var(--sl-color-gray-5); diff --git a/docs-site/src/components/Landing.astro b/docs-site/src/components/Landing.astro index 060818b175b..d46efe94e6b 100644 --- a/docs-site/src/components/Landing.astro +++ b/docs-site/src/components/Landing.astro @@ -24,12 +24,14 @@ import SiteJsonLd from './SiteJsonLd.astro'; import { GITHUB_URL, getStarCount, formatStarCount } from '../data/github-stars'; interface Props { - locale?: 'fr' | 'ko' | 'zh-cn' | 'zh-tw' | 'ru' | 'ja' | 'tr'; + locale?: 'fr' | 'ko' | 'zh-cn' | 'zh-tw' | 'ru' | 'ja' | 'tr' | 'es'; } const { locale } = Astro.props; const base = import.meta.env.BASE_URL.replace(/\/?$/, '/'); const prefix = locale ? `${base}${locale}/` : base; +const signingPolicies = import.meta.glob('../content/docs/*/reference/code-signing.md'); +const signingPolicyPrefix = locale && `../content/docs/${locale}/reference/code-signing.md` in signingPolicies ? prefix : base; const fr = { 'Install': 'Installer', @@ -63,6 +65,7 @@ const fr = { 'Project': 'Projet', 'Contributing': 'Contribuer', 'Run ': 'Faites tourner ', + 'Codex and Claude': 'Codex et Claude', ' on the models you choose.': ' sur les modèles de votre choix.', 'opencodex is one local gateway for your AI coding tools and models. It serves Codex, Claude Code, Claude Desktop and Grok Build from one port and connects more tools through managed configs, translating each wire format to the provider you choose, with streaming, tool calls, reasoning and images where the model supports them. Zero client patches.': 'opencodex est une passerelle locale unique pour vos outils de code IA et vos modèles. Il sert Codex, Claude Code, Claude Desktop et Grok Build sur un même port et connecte d’autres outils via des configurations gérées, en traduisant chaque format de protocole vers le fournisseur de votre choix, avec la diffusion en continu, les appels d’outils, le raisonnement et les images lorsque le modèle les prend en charge. Aucune modification des clients.', 'Get Started': 'Commencer', @@ -93,7 +96,7 @@ const fr = { 'Claude Code running a routed model through opencodex — gpt-5.6-luna-medium active in the status bar': 'Claude Code exécutant un modèle routé par opencodex, avec gpt-5.6-luna-medium actif dans la barre d’état', 'Search & vision sidecars': 'Services auxiliaires de recherche et de vision', 'Give non-OpenAI models real web search and image understanding through a gpt-5.6-luna sidecar.': 'Ajoutez aux modèles autres qu’OpenAI une véritable recherche web et la compréhension des images grâce à un service auxiliaire gpt-5.6-luna.', - 'ocx init writes a provider into your Codex config and shares one model catalog with Codex CLI, TUI, App, and SDK. ocx stop restores native Codex cleanly.': 'ocx init ajoute un fournisseur à votre configuration Codex et partage un catalogue de modèles unique entre Codex CLI, TUI, App et SDK. ocx stop restaure proprement Codex dans son état natif.', + 'ocx init writes a provider into your Codex config and shares one model catalog with Codex CLI, TUI, App, and SDK. On a standalone owner, ocx stop restores native Codex; linked clients and siblings retain their shared routing.': 'ocx init ajoute un fournisseur à votre configuration Codex et partage un catalogue de modèles unique entre Codex CLI, TUI, App et SDK. Sur une instance autonome propriétaire, ocx stop restaure Codex natif ; les clients liés et les instances sœurs conservent leur routage partagé.', 'Documentation map': 'Plan de la documentation', 'Explore the docs': 'Explorer la documentation', 'opencodex is an independent community project, not affiliated with or endorsed by OpenAI, Anthropic, or any other provider. Some providers may restrict accounts that route traffic through third-party proxies — review each provider’s Terms of Service before connecting.': 'opencodex est un projet communautaire indépendant, sans affiliation avec OpenAI, Anthropic ou tout autre fournisseur, et sans approbation de leur part. Certains fournisseurs peuvent restreindre les comptes qui acheminent leur trafic par des proxys tiers ; consultez les conditions d’utilisation de chaque fournisseur avant de vous connecter.', @@ -120,8 +123,99 @@ const fr = { 'Star on GitHub, {count} stars': 'Mettre une étoile sur GitHub, {count} étoiles', } as const; +const es: Record = { + "Install": "Instalar", + "Start the proxy": "Iniciar el proxy", + "Add a provider and connect Codex": "Añade un proveedor y conecta Codex", + "In another terminal: launch Claude Code through ocx": "En otra terminal: inicia Claude Code mediante ocx", + "See supported tools": "Ver herramientas compatibles", + "Codex now routes through ocx": "Codex ahora se conecta a través de ocx", + "Getting Started": "Primeros pasos", + "Installation": "Instalación", + "Quickstart": "Inicio rápido", + "How It Works": "Cómo funciona", + "Agent Quickstart": "Inicio rápido para agentes", + "Guides": "Guías", + "Providers": "Proveedores", + "Model Routing": "Enrutamiento de modelos", + "Combos": "Combos", + "Codex Integration": "Integración con Codex", + "Codex App Model Picker": "Selector de modelos de Codex App", + "Sidecars: Search & Vision": "Sidecars: búsqueda y visión", + "Image Bridge": "Puente de imágenes", + "Video Bridge": "Puente de video", + "Web Dashboard": "Dashboard web", + "Sub-agent Surface": "Interfaz de subagentes", + "Reference": "Referencia", + "Configuration": "Configuración", + "Adapters": "Adaptadores", + "Architecture": "Arquitectura", + "Proxy API Formats": "Formatos de API del proxy", + "Management API": "API de administración", + "Project": "Proyecto", + "Contributing": "Cómo contribuir", + "Run ": "Ejecuta ", + "Codex and Claude": "Codex y Claude", + " on the models you choose.": " con los modelos que elijas.", + "opencodex is one local gateway for your AI coding tools and models. It serves Codex, Claude Code, Claude Desktop and Grok Build from one port and connects more tools through managed configs, translating each wire format to the provider you choose, with streaming, tool calls, reasoning and images where the model supports them. Zero client patches.": "opencodex es una única pasarela local para tus herramientas de programación con IA y tus modelos. Conecta Codex, Claude Code, Claude Desktop y Grok Build por un mismo puerto, y otras herramientas mediante configuraciones administradas. Convierte cada protocolo para el proveedor que elijas, con streaming, llamadas a herramientas, razonamiento e imágenes cuando el modelo lo permite. No requiere parches en los clientes.", + "Get Started": "Comenzar", + "Supported providers": "Proveedores compatibles", + "40+ providers": "Más de 40 proveedores", + "The opencodex dashboard — live proxy status, routed providers, and available models": "Dashboard de opencodex: estado del proxy en tiempo real, proveedores enrutados y modelos disponibles", + "Install. Start. Connect your tool.": "Instala. Inicia. Conecta tu herramienta.", + "Install.": "Instala.", + "Start.": "Inicia.", + "Connect your tool.": "Conecta tu herramienta.", + "Full quickstart": "Inicio rápido completo", + "Watch Codex run on a routed model.": "Mira cómo Codex ejecuta un modelo enrutado.", + "Codex App running a task on a routed non-OpenAI model": "Codex App ejecuta una tarea con un modelo enrutado de otro proveedor distinto de OpenAI", + "One task, streamed end to end through opencodex.": "Una tarea, transmitida de extremo a extremo a través de opencodex.", + "One proxy, the whole surface.": "Un proxy para todas las funciones.", + "Any provider": "Cualquier proveedor", + "Five adapters cover Anthropic Messages, Google Gemini, Azure, the OpenAI Responses passthrough, and every OpenAI-compatible Chat Completions endpoint — 40+ built-in providers.": "Cinco adaptadores cubren Anthropic Messages, Google Gemini, Azure, el paso directo de OpenAI Responses y cualquier endpoint de Chat Completions compatible con OpenAI. Más de 40 proveedores integrados.", + "OAuth or API key": "OAuth o clave API", + "Log in with your xAI, Anthropic, or Kimi account — auto-refreshed — forward your ChatGPT login, or paste a key.": "Inicia sesión con tu cuenta de xAI, Anthropic o Kimi, con renovación automática; reenvía tu sesión de ChatGPT o pega una clave API.", + "ChatGPT account pool": "Grupo de cuentas ChatGPT", + "Existing threads keep their account; new sessions auto-route to the lowest-usage healthy one after quota refresh.": "Los hilos existentes conservan su cuenta. Tras actualizar las cuotas, las sesiones nuevas se asignan automáticamente a la cuenta disponible con menor uso.", + "Native in the model picker": "Nativo en el selector de modelos", + "Routed models show up in Codex App with reasoning effort levels, next to the native ones.": "Los modelos enrutados aparecen en la aplicación Codex con niveles de esfuerzo de razonamiento, junto a los nativos.", + "Codex App model picker with reasoning effort levels": "Selector de modelos de Codex App con niveles de esfuerzo de razonamiento", + "Sub-agents": "Subagentes", + "Pin up to five routed or native models for Codex spawn_agent, and switch the v1 / base / v2 surface globally.": "Fija hasta cinco modelos enrutados o nativos para spawn_agent de Codex y cambia globalmente entre las interfaces v1, base y v2.", + "ocx claude launches Claude Code against the same port — every routed model in the /model picker, auto-context up to 1M, roster sub-agents, and your claude.ai login stays active.": "ocx claude inicia Claude Code en el mismo puerto: todos los modelos enrutados aparecen en /model, con contexto automático de hasta 1M y subagentes del listado. Tu sesión de claude.ai permanece activa.", + "Claude Code running a routed model through opencodex — gpt-5.6-luna-medium active in the status bar": "Claude Code ejecutando un modelo enrutado a través de opencodex — gpt-5.6-luna-medium activo en la barra de estado", + "Search & vision sidecars": "Sidecars de búsqueda y visión", + "Give non-OpenAI models real web search and image understanding through a gpt-5.6-luna sidecar.": "Añade búsqueda web y comprensión de imágenes a los modelos de otros proveedores mediante un sidecar gpt-5.6-luna.", + "ocx init writes a provider into your Codex config and shares one model catalog with Codex CLI, TUI, App, and SDK. On a standalone owner, ocx stop restores native Codex; linked clients and siblings retain their shared routing.": "ocx init escribe un proveedor en tu configuración de Codex y comparte el catálogo con Codex CLI, TUI, App y SDK. En la instancia independiente propietaria, ocx stop restaura Codex nativo; los clientes enlazados y las instancias hermanas conservan su enrutamiento compartido.", + "Documentation map": "Mapa de la documentación", + "Explore the docs": "Explorar la documentación", + "opencodex is an independent community project, not affiliated with or endorsed by OpenAI, Anthropic, or any other provider. Some providers may restrict accounts that route traffic through third-party proxies — review each provider’s Terms of Service before connecting.": "opencodex es un proyecto comunitario independiente, sin afiliación ni respaldo de OpenAI, Anthropic u otros proveedores. Algunos proveedores pueden restringir las cuentas que enrutan tráfico a través de proxies de terceros. Revisa los términos de servicio de cada proveedor antes de conectarte.", + "Desktop beta": "Aplicación de escritorio beta", + "Other platforms": "Otras plataformas", + "Download": "Descargar", + "Download for macOS": "Descargar para macOS", + "Download for Windows": "Descargar para Windows", + "Download for Linux": "Descargar para Linux", + "Download OpenCodex": "Descargar OpenCodex", + "The desktop app bundles the proxy, the dashboard and a tray. Beta.": "La aplicación de escritorio incluye el proxy, el dashboard y una bandeja. Versión beta.", + "Universal · Apple Silicon and Intel · macOS 13+ · .dmg": "Universal · Apple Silicon e Intel · macOS 13+ · .dmg", + "Installer not code-signed yet": "El instalador aún no tiene firma de código", + ".deb package": "Paquete .deb", + "Recommended for your system": "Recomendado para tu sistema", + "Prefer the terminal?": "¿Prefieres la terminal?", + "Installation guide": "Guía de instalación", + "All releases and checksums": "Todas las versiones y sumas de comprobación", + "Desktop app guide": "Guía de la aplicación de escritorio", + "Code signing policy": "Política de firma de código", + "Desktop App": "Aplicación de escritorio", + "Latest release": "La última versión", + "Star on GitHub": "Dar una estrella en GitHub", + "Star on GitHub, {count} stars": "Dar una estrella en GitHub, {count} estrellas", +}; + +/** Select landing copy while requiring Spanish and French to cover every source key. */ const t = (en: K, ko: string, zh: string, ru: string, ja: string, zhTW: string, tr: string): string => - locale === 'fr' ? fr[en] : locale === 'ko' ? ko : locale === 'zh-cn' ? zh : locale === 'zh-tw' ? zhTW : locale === 'ru' ? ru : locale === 'ja' ? ja : locale === 'tr' ? tr : en; + locale === 'es' ? es[en] : locale === 'fr' ? fr[en] : locale === 'ko' ? ko : locale === 'zh-cn' ? zh : locale === 'zh-tw' ? zhTW : locale === 'ru' ? ru : locale === 'ja' ? ja : locale === 'tr' ? tr : en; const starCount = await getStarCount(); const starLocale = locale || 'en'; @@ -263,7 +357,7 @@ const docsMap = [ Codex and Claude Code. 4-face rotateX cylinder, fixed slot width via inline-grid stacking; reduced-motion collapses to a static pairing. */}

- {t('Run ', '', '让 ', 'Запускайте ', '', '讓 ', '')} + {t('Run ', '', '让 ', 'Запускайте ', '', '讓 ', '')}