codex-overleaf-link 2.3.6 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +59 -34
  2. package/README.zh-CN.md +543 -0
  3. package/extension/bootstrap/manifest.template.json +1 -1
  4. package/extension/src/background.js +3 -0
  5. package/extension/src/content/activeTurnControl.js +1 -0
  6. package/extension/src/content/assetTransferBroker.js +2 -0
  7. package/extension/src/content/contentRuntime.js +53 -50
  8. package/extension/src/content/contextTray.js +4 -0
  9. package/extension/src/content/diagnosticsController.js +4 -0
  10. package/extension/src/content/diagnosticsPanel.js +128 -4
  11. package/extension/src/content/generated/content.bundle.js +583 -112
  12. package/extension/src/content/generated/content.bundle.meta.json +4 -3
  13. package/extension/src/content/legacyGlobalRegistry.js +1 -0
  14. package/extension/src/content/modelPicker.js +21 -9
  15. package/extension/src/content/modelPickerSupport.js +38 -1
  16. package/extension/src/content/nativeCompatibilityController.js +4 -1
  17. package/extension/src/content/otWarmMirror.js +34 -30
  18. package/extension/src/content/otWarmMirrorController.js +20 -0
  19. package/extension/src/content/pageBridgeClient.js +2 -0
  20. package/extension/src/content/runResultActions.js +16 -1
  21. package/extension/src/content/runTimelineView.js +1 -1
  22. package/extension/src/content/sessionForkController.js +20 -11
  23. package/extension/src/content/trackedChangeCaptureController.js +153 -0
  24. package/extension/src/content/writebackOrchestrator.js +31 -0
  25. package/extension/src/page/binaryAssetUploader.js +101 -29
  26. package/extension/src/page/overleafRealtimeObserver.js +4 -1
  27. package/extension/src/page/textFileCreator.js +493 -0
  28. package/extension/src/page/trackedChangeCapture.js +342 -0
  29. package/extension/src/page/trackedChangesLifecycle.js +145 -149
  30. package/extension/src/page/treeOperations.js +30 -2
  31. package/extension/src/page/writebackRouter.js +94 -48
  32. package/extension/src/pageBridge.js +62 -25
  33. package/extension/src/shared/compatibility.js +1 -1
  34. package/extension/src/shared/pageRpcContract.js +2 -1
  35. package/extension/src/shared/sessionState.js +6 -2
  36. package/extension/src/shared/storageDb.js +10 -12
  37. package/extension/src/shared/storageRunActions.js +29 -1
  38. package/extension/src/shared/writebackSettlement.js +19 -5
  39. package/extension/styles/panel.css +55 -10
  40. package/native-host/src/taskRunnerRuntime.js +25 -0
  41. package/package.json +5 -1
package/README.md CHANGED
@@ -1,9 +1,10 @@
1
1
  <div align="center">
2
2
  <img src="extension/assets/icons/codex-overleaf-icon.png" width="96" alt="Codex Overleaf Link">
3
3
  <h1>Codex Overleaf Link</h1>
4
+ <p><strong>English</strong> | <a href="README.zh-CN.md" lang="zh-CN">简体中文</a></p>
4
5
  <p><strong>Empower Overleaf with Codex.</strong></p>
5
6
  <p>
6
- <img src="https://img.shields.io/badge/version-2.3.6-blue" alt="version">
7
+ <img src="https://img.shields.io/badge/version-2.4.0-blue" alt="version">
7
8
  <img src="https://img.shields.io/badge/platform-macOS%20%2F%20Windows%20%2F%20Linux-lightgrey" alt="platform">
8
9
  <img src="https://img.shields.io/badge/chrome-MV3-green" alt="chrome manifest v3">
9
10
  <img src="https://img.shields.io/badge/node-%3E%3D20-brightgreen" alt="node version">
@@ -38,14 +39,14 @@ Codex Overleaf Link adds a Codex panel directly inside Overleaf and mirrors the
38
39
  - **Project rules and preflight** — read-only / writable path rules gate browser writes; sensitive-content detection checks task context before sending it to Codex. File focus prioritizes context; use project rules to enforce writable paths.
39
40
  - **Models and skills** — discover local Codex models, choose supported reasoning and speed settings, and install or select Codex Overleaf skills from the slash menu. Skill loading and individual skill enablement are configurable.
40
41
  - **Local records and diagnostics** — preserve run outcomes and recovery evidence, inspect diagnostics, and export redacted issue-report bundles. Plugin Codex sessions use an isolated home.
42
+ - **OT warm mirror** (Operational Transformation) keeps focused mirror files warm through optional, read-only observation of active Overleaf text edits. It is off by default and falls back to the normal snapshot path when unavailable, stale, or inconsistent. Overleaf writeback still uses the page bridge.
43
+
44
+ OT freshness expires after 30 seconds, and focused warm starts still verify current file content through the page bridge. OT observation never establishes whole-project freshness or replaces the Overleaf writeback path.
41
45
 
42
46
  ### Experimental features
43
47
 
44
48
  - **Third-party model providers** — configure Responses API, OpenAI-compatible Chat Completions, or Anthropic Messages endpoints in Settings. The local Codex CLI remains the agent runtime, with local protocol bridges adapting the selected endpoint. Compatibility varies by model and gateway; the built-in Codex provider remains the default.
45
49
  - **Parallel subagents** — enable the `parallel-subagents` skill for decomposable tasks. The native host runs workers with assigned files; the skill can split a single file into section jobs. Worker progress appears in the timeline, and detected ownership violations are withheld from Overleaf writeback.
46
- - **OT warm mirror** — optional, read-only observation of active Overleaf text edits keeps focused mirror files warm. It is off by default and falls back to the normal snapshot path when unavailable, stale, or inconsistent. Overleaf writeback still uses the page bridge.
47
-
48
- OT freshness expires after 30 seconds, and focused warm starts still verify current file content through the page bridge. OT observation never establishes whole-project freshness or replaces the Overleaf writeback path.
49
50
 
50
51
  ## Requirements
51
52
 
@@ -61,36 +62,50 @@ OT freshness expires after 30 seconds, and focused warm starts still verify curr
61
62
 
62
63
  ## Install
63
64
 
64
- Codex Overleaf Link has two parts: a **native host** (a local Node bridge) and the **Chrome extension**. Pick one of the two install paths below, then open Overleaf.
65
+ Codex Overleaf Link has two parts: a **native host** (a local Node bridge) and the **Chrome extension**. Installation with Codex is recommended; the installer script and npm commands remain available below.
65
66
 
66
- Either way, the final **Load unpacked** click is manual — Chrome does not let any installer or script load an unpacked extension for you.
67
+ Chrome may require a manual **Load unpacked** or **Reload** action. Codex should explain any remaining browser step and respect browser and operating-system permission boundaries.
67
68
 
68
- ### Option A — installer script (recommended)
69
+ ### Option A: Let Codex install it (recommended)
70
+
71
+ Give the following prompt to Codex with terminal access on the computer where Chrome runs:
72
+
73
+ ```text
74
+ Install Codex Overleaf Link from https://github.com/Ghqqqq/codex-overleaf-link on this computer.
75
+
76
+ Read the official README and installation scripts first. Detect the operating system and check Node.js >= 20, Codex CLI, and any other prerequisites required by the selected installation method.
77
+ Use the latest published stable GitHub release, excluding drafts and prereleases, unless a specific version was requested. Use the documented managed installation method and install matching Extension and Native Host versions; do not substitute an unreleased main checkout.
78
+ Reuse the existing Chrome profile and managed installation when available. Preserve project files, session history, settings, and provider credentials. Do not print secrets or remove an existing installation without approval.
79
+ Complete the terminal-side setup and checks. If Chrome requires a manual Load unpacked or Reload action, provide the exact managed extension folder and the remaining steps; do not bypass browser restrictions.
80
+ Report the chosen release, installed Extension and Native Host versions, the browser-loaded version when observable, and the native connection check. Matching on-disk versions alone do not prove Chrome has loaded the update. Clearly identify anything still requiring manual action.
81
+ ```
82
+
83
+ ### Option B: installer script
69
84
 
70
85
  One command installs the managed native host **and** managed extension runtime. On macOS/Linux it also creates the visible `~/Codex Overleaf Link Extension` shortcut when that path is available. The script attempts to copy the extension path on macOS and Windows; on macOS it also attempts to open Chrome's extensions page. Every platform prints the folder to load. Future signed stable updates target this same managed directory.
71
86
 
72
87
  macOS / Linux:
73
88
 
74
89
  ```bash
75
- CODEX_OVERLEAF_REF=v2.3.6 bash -c "$(curl -fsSL https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v2.3.6/install.sh)"
90
+ CODEX_OVERLEAF_REF=v2.4.0 bash -c "$(curl -fsSL https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v2.4.0/install.sh)"
76
91
  ```
77
92
 
78
93
  Windows PowerShell:
79
94
 
80
95
  ```powershell
81
- iwr https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v2.3.6/install.ps1 -OutFile install.ps1
82
- $env:CODEX_OVERLEAF_REF='v2.3.6'
96
+ iwr https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v2.4.0/install.ps1 -OutFile install.ps1
97
+ $env:CODEX_OVERLEAF_REF='v2.4.0'
83
98
  powershell -ExecutionPolicy Bypass -File install.ps1
84
99
  ```
85
100
 
86
101
  Then open `chrome://extensions`, enable **Developer mode**, click **Load unpacked**, and choose the extension folder printed by the installer. If the installer reports that it copied the path, you can paste it into the folder picker.
87
102
 
88
- ### Option B — npm managed install
103
+ ### Option C: npm managed install
89
104
 
90
105
  `npm exec` installs the same managed native host and extension runtime without keeping a source checkout. Use it if you prefer a pinned npm package.
91
106
 
92
107
  ```bash
93
- npm exec --yes codex-overleaf-link@2.3.6 -- install-managed
108
+ npm exec --yes codex-overleaf-link@2.4.0 -- install-managed
94
109
  ```
95
110
 
96
111
  Then, in `chrome://extensions`, enable **Developer mode**, click **Load unpacked**, and select the managed extension path printed by the command. The Release extension zip remains available for explicitly unmanaged/manual installations.
@@ -132,7 +147,10 @@ There are two task modes, Ask and Auto. Track is a separate setting for Auto wri
132
147
 
133
148
  Auto text writes do not wait for a per-hunk approval step. Deletes and binary create/overwrite operations require separate confirmation. Track applies to supported text edits; it does not make every file-tree or binary operation reversible.
134
149
 
135
- **Accept** finalizes this run's tracked text edits and leaves Overleaf in Editing mode. If the operation unexpectedly creates new tracked changes, the extension attempts to roll it back and reports what could be verified.
150
+ **Accept** is intended to finalize a run's tracked text edits and leaves Overleaf in Editing mode. If the operation unexpectedly creates new tracked changes, the extension attempts to roll it back and reports what could be verified.
151
+
152
+ > [!WARNING]
153
+ > Do not use the run card's **Accept** action when the affected files contain unrelated pending tracked changes from other runs or collaborators. Review and accept those changes individually in Overleaf's native Review panel. An Accepted badge or successful compilation alone does not prove that unrelated pending changes were preserved.
136
154
 
137
155
  **Undo** uses the run's saved recovery information. Concurrent changes or incomplete verification can prevent a full restoration. Cancel stops further work but does not automatically undo writes that already reached Overleaf; inspect the run card for the written parts and available recovery actions.
138
156
 
@@ -191,7 +209,6 @@ Update downloads retry transient network failures within a bounded time budget,
191
209
 
192
210
  After a manual reinstall, installed files and running components are shown separately. Use the reload action once Overleaf is saved and idle; pending Overleaf tabs can then refresh. A disk replacement alone is not reported as a successfully health-confirmed update.
193
211
 
194
-
195
212
  Managed installations **check** for signed stable updates automatically. When an update is available, choose **Update now** in the update notice or **Settings → Software updates** to authorize that version. The updater then downloads and verifies the coordinated extension/native bundle, waits until connected Overleaf tabs are saved and idle and the native host has no active work, and applies both components together. A failed health check restores the previous version. The update notice also offers postponement and progress details.
196
213
 
197
214
  Stable updates use signed release metadata and artifact hashes; draft and prerelease versions are not selected. Releases that require a different Bootstrap protocol need a managed reinstall. The updater does not silently add Chrome permissions.
@@ -208,9 +225,9 @@ npm installs, updates, and uninstalls the coordinated managed extension/native p
208
225
 
209
226
  | Action | Command |
210
227
  |--------|---------|
211
- | Install / recover / migrate | `npm exec --yes codex-overleaf-link@2.3.6 -- install-managed` |
212
- | Diagnose | `npm exec --yes codex-overleaf-link@2.3.6 -- doctor` |
213
- | Uninstall | `npm exec --yes codex-overleaf-link@2.3.6 -- uninstall-managed` |
228
+ | Install / recover / migrate | `npm exec --yes codex-overleaf-link@2.4.0 -- install-managed` |
229
+ | Diagnose | `npm exec --yes codex-overleaf-link@2.4.0 -- doctor` |
230
+ | Uninstall | `npm exec --yes codex-overleaf-link@2.4.0 -- uninstall-managed` |
214
231
 
215
232
  Use `--extension-id <chrome-extension-id>` only for a custom/dev unpacked extension id that differs from the official bundled id.
216
233
 
@@ -221,7 +238,7 @@ Use `--extension-id <chrome-extension-id>` only for a custom/dev unpacked extens
221
238
  Remove the managed extension/native installation (append `--browser chromium` on Linux Chromium):
222
239
 
223
240
  ```bash
224
- npm exec --yes codex-overleaf-link@2.3.6 -- uninstall-managed
241
+ npm exec --yes codex-overleaf-link@2.4.0 -- uninstall-managed
225
242
  ```
226
243
 
227
244
  The same command works in Windows PowerShell. It also applies to current `install.sh` / `install.ps1` installations, which install the managed pair.
@@ -229,7 +246,7 @@ The same command works in Windows PowerShell. It also applies to current `instal
229
246
  For an unmanaged checkout or native-only installation, use `npm run uninstall:native` from the checkout, or:
230
247
 
231
248
  ```bash
232
- npm exec --yes codex-overleaf-link@2.3.6 -- uninstall-native
249
+ npm exec --yes codex-overleaf-link@2.4.0 -- uninstall-native
233
250
  ```
234
251
 
235
252
  If you are removing an older native-only source installation and still have its source checkout, its bundled uninstaller can also be invoked directly:
@@ -239,7 +256,7 @@ node ~/.codex-overleaf/source/scripts/uninstall-native-host.mjs
239
256
  ```
240
257
 
241
258
  ```powershell
242
- node $env:LOCALAPPDATA\CodexOverleaf\source\scripts\uninstall-native-host.mjs
259
+ node "$env:LOCALAPPDATA\CodexOverleaf\source\scripts\uninstall-native-host.mjs"
243
260
  ```
244
261
 
245
262
  `uninstall-managed` removes the registered Native Messaging host, bridge executable, managed extension, and versioned native runtime. `uninstall-native` removes the native-only registration and runtime copy. Neither command clears browser session history/settings, project mirrors, plugin Codex history, provider credentials, or stored skills.
@@ -255,7 +272,7 @@ Remove the extension entry from `chrome://extensions` as well. To erase saved Co
255
272
  For a managed installation, rerun the [managed installer](#install), reload the extension in `chrome://extensions`, then refresh the Overleaf tab. This recovers the coordinated extension/native pair after an incomplete installation or incompatible runtime update.
256
273
 
257
274
  ```bash
258
- npm exec --yes codex-overleaf-link@2.3.6 -- install-managed
275
+ npm exec --yes codex-overleaf-link@2.4.0 -- install-managed
259
276
  ```
260
277
 
261
278
  For an unmanaged checkout, rebuild the extension and reinstall its native host from the same checkout. Use PowerShell installation commands on Windows.
@@ -284,6 +301,8 @@ The stale-write guard checks the original content and expected patch ranges. It
284
301
 
285
302
  Track requires an Overleaf Reviewing state that the extension can verify. Accept and Undo depend on the run's actual writes and saved recovery evidence; some operations or later collaborator edits prevent full recovery. Follow the run card's specific next action. Turning Track off selects ordinary Editing for future Auto runs.
286
303
 
304
+ If files were written but Accept is missing, inspect the actual changes in Overleaf before retrying. Repeating a task solely to recover the button can duplicate edits. Export redacted diagnostics with the run result when reporting the issue.
305
+
287
306
  **Governance blocked write**
288
307
 
289
308
  Project governance rules can mark paths read-only or restrict writable paths. Switch to ask-only mode, adjust the project governance settings, or narrow the requested edit to an allowed path.
@@ -376,13 +395,13 @@ The shipped extension targets `https://overleaf.com/project` and `https://www.ov
376
395
  Linux Chromium install or update:
377
396
 
378
397
  ```bash
379
- CODEX_OVERLEAF_REF=v2.3.6 bash -c "$(curl -fsSL https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v2.3.6/install.sh)" -- --browser chromium
398
+ CODEX_OVERLEAF_REF=v2.4.0 bash -c "$(curl -fsSL https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v2.4.0/install.sh)" -- --browser chromium
380
399
  ```
381
400
 
382
401
  Linux Chromium uninstall:
383
402
 
384
403
  ```bash
385
- npm exec --yes codex-overleaf-link@2.3.6 -- uninstall-managed --browser chromium
404
+ npm exec --yes codex-overleaf-link@2.4.0 -- uninstall-managed --browser chromium
386
405
  ```
387
406
 
388
407
  ## Extension ID
@@ -396,27 +415,27 @@ illdpneeeopfffmiepaejglgmhpmdhdc
396
415
  The installer uses this id by default. For a managed installation with a custom id, rerun the managed installer with the id shown in `chrome://extensions`:
397
416
 
398
417
  ```bash
399
- npm exec --yes codex-overleaf-link@2.3.6 -- install-managed --extension-id <your-chrome-extension-id>
418
+ npm exec --yes codex-overleaf-link@2.4.0 -- install-managed --extension-id "<your-chrome-extension-id>"
400
419
  ```
401
420
 
402
421
  For an unmanaged extension, use the native-only installer:
403
422
 
404
423
  ```bash
405
- npm exec --yes codex-overleaf-link@2.3.6 -- install-native --extension-id <your-chrome-extension-id>
424
+ npm exec --yes codex-overleaf-link@2.4.0 -- install-native --extension-id "<your-chrome-extension-id>"
406
425
  ```
407
426
 
408
427
  Both npm commands work in PowerShell. Source installers also accept the `CODEX_OVERLEAF_EXTENSION_ID` environment variable. The Native Messaging manifest's `allowed_origins` must match the loaded extension id.
409
428
 
410
429
  ## GitHub Release Artifacts
411
430
 
412
- The v2.3.6 GitHub Release contains:
431
+ The v2.4.0 GitHub Release contains:
413
432
 
414
- - `codex-overleaf-link-extension-v2.3.6.zip`: loadable Chrome extension package for manual unpacked installation.
415
- - `codex-overleaf-native-host-v2.3.6.tar.gz`: native host runtime files used by the installer and release verification.
416
- - `codex-overleaf-update-v2.3.6.tar.gz`: coordinated extension/native bundle used by the managed updater.
417
- - `codex-overleaf-link-2.3.6.tgz`: npm native host CLI package for pinned install, doctor, and uninstall flows.
418
- - `install.sh`: release-pinned macOS / Linux installer that defaults to `v2.3.6` when run directly from the release artifact.
419
- - `install.ps1`: release-pinned Windows PowerShell installer that defaults to `v2.3.6` when run directly from the release artifact.
433
+ - `codex-overleaf-link-extension-v2.4.0.zip`: loadable Chrome extension package for manual unpacked installation.
434
+ - `codex-overleaf-native-host-v2.4.0.tar.gz`: native host runtime files used by the installer and release verification.
435
+ - `codex-overleaf-update-v2.4.0.tar.gz`: coordinated extension/native bundle used by the managed updater.
436
+ - `codex-overleaf-link-2.4.0.tgz`: npm native host CLI package for pinned install, doctor, and uninstall flows.
437
+ - `install.sh`: release-pinned macOS / Linux installer that defaults to `v2.4.0` when run directly from the release artifact.
438
+ - `install.ps1`: release-pinned Windows PowerShell installer that defaults to `v2.4.0` when run directly from the release artifact.
420
439
  - `uninstall-native-host.mjs`: native host uninstaller that removes the Chrome Native Messaging manifest, bridge executable, and runtime copy.
421
440
  - `nativeHostPlatform.js`, `manifest.js`, `runtimeInstaller.js`: helper files required by the loose uninstaller asset.
422
441
  - `SHA256SUMS`, `release-manifest.json`, and `release-manifest.sig`: checksums, release metadata, and its Ed25519 signature.
@@ -467,6 +486,8 @@ Full uninstall and data deletion:
467
486
  3. Remove the extension entry from `chrome://extensions` in each browser profile. Chrome removes that extension's `chrome.storage.local` settings when it is uninstalled. See the [Chrome storage API documentation](https://developer.chrome.com/docs/extensions/reference/api/storage#storage_areas).
468
487
  4. To erase all remaining default filesystem data, including project mirrors, plugin Codex history, provider credentials, skills, and source checkouts, use the appropriate command below. Also remove any custom installation roots you configured.
469
488
 
489
+ **The following commands permanently delete data in the listed directories. Back up any project mirrors, history, or configuration that must be kept before running them.**
490
+
470
491
  macOS/Linux:
471
492
 
472
493
  ```bash
@@ -491,8 +512,8 @@ Use this matrix for release-candidate signoff and compatibility reports. Record
491
512
  | Browser/channel/version | Google Chrome channel and version. | Google Chrome channel and version. | Google Chrome channel and version. | Chromium channel/package and version. |
492
513
  | Install mode | Managed pair recommended; unmanaged Release zip or checkout also available. | Same as macOS Chrome. | Same as macOS Chrome. | Managed or unmanaged; register with `--browser chromium`. |
493
514
  | Extension id | Bundled id `illdpneeeopfffmiepaejglgmhpmdhdc`, or actual custom id passed with `--extension-id`. | Bundled id `illdpneeeopfffmiepaejglgmhpmdhdc`, or actual custom id passed with `--extension-id`. | Bundled id `illdpneeeopfffmiepaejglgmhpmdhdc`, or actual custom id passed with `--extension-id`. | Bundled id `illdpneeeopfffmiepaejglgmhpmdhdc`, or actual custom id passed with `--extension-id`. |
494
- | Installer/update command | `npm exec --yes codex-overleaf-link@2.3.6 -- install-managed` | `npm exec --yes codex-overleaf-link@2.3.6 -- install-managed` | `npm exec --yes codex-overleaf-link@2.3.6 -- install-managed` | `npm exec --yes codex-overleaf-link@2.3.6 -- install-managed --browser chromium` |
495
- | Uninstall command | `npm exec --yes codex-overleaf-link@2.3.6 -- uninstall-managed` | `npm exec --yes codex-overleaf-link@2.3.6 -- uninstall-managed` | `npm exec --yes codex-overleaf-link@2.3.6 -- uninstall-managed` | `npm exec --yes codex-overleaf-link@2.3.6 -- uninstall-managed --browser chromium` |
515
+ | Installer/update command | `npm exec --yes codex-overleaf-link@2.4.0 -- install-managed` | `npm exec --yes codex-overleaf-link@2.4.0 -- install-managed` | `npm exec --yes codex-overleaf-link@2.4.0 -- install-managed` | `npm exec --yes codex-overleaf-link@2.4.0 -- install-managed --browser chromium` |
516
+ | Uninstall command | `npm exec --yes codex-overleaf-link@2.4.0 -- uninstall-managed` | `npm exec --yes codex-overleaf-link@2.4.0 -- uninstall-managed` | `npm exec --yes codex-overleaf-link@2.4.0 -- uninstall-managed` | `npm exec --yes codex-overleaf-link@2.4.0 -- uninstall-managed --browser chromium` |
496
517
  | Manifest/registry path | `~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.codex.overleaf.json` | `HKCU\Software\Google\Chrome\NativeMessagingHosts\com.codex.overleaf` -> `%LOCALAPPDATA%\CodexOverleaf\native-host-runtime\com.codex.overleaf.json` | `~/.config/google-chrome/NativeMessagingHosts/com.codex.overleaf.json` | `~/.config/chromium/NativeMessagingHosts/com.codex.overleaf.json` |
497
518
  | Managed runtime paths | `~/.codex-overleaf/managed/extension` and `~/.codex-overleaf/managed/native`. | `%LOCALAPPDATA%\CodexOverleaf\managed\extension` and `%LOCALAPPDATA%\CodexOverleaf\managed\native`. | Same as macOS Chrome. | Same as macOS Chrome. |
498
519
  | Node/Git/Codex/TeX | Record exact versions; see [Requirements](#requirements) for installation and provider prerequisites. | Same as macOS Chrome. | Same as macOS Chrome. | Same as macOS Chrome. |
@@ -513,6 +534,10 @@ Contributions are welcome. Please open an issue before submitting large changes
513
534
  3. Run `npm test` and ensure all tests pass.
514
535
  4. Submit a pull request with a clear description.
515
536
 
537
+ Keep [README.md](README.md) and [README.zh-CN.md](README.zh-CN.md) aligned when changing behavior, version pins, installation commands, or troubleshooting. Translate prose while preserving commands, file paths, and API identifiers.
538
+
516
539
  ## License
517
540
 
518
541
  [MIT](LICENSE)
542
+
543
+ <p align="center"><strong>English</strong> | <a href="README.zh-CN.md" lang="zh-CN">简体中文</a></p>