codex-overleaf-link 2.5.1 → 2.6.5

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 (111) hide show
  1. package/README.md +149 -398
  2. package/README.zh-CN.md +153 -404
  3. package/extension/bootstrap/manifest.template.json +1 -1
  4. package/extension/src/background.js +148 -3
  5. package/extension/src/backgroundSharedSessions.js +55 -2
  6. package/extension/src/backgroundUpdateCoordinator.js +128 -12
  7. package/extension/src/content/activeTurnControl.js +164 -7
  8. package/extension/src/content/composerAttachments.js +46 -10
  9. package/extension/src/content/composerPanel.js +92 -12
  10. package/extension/src/content/contentRuntime.js +1114 -321
  11. package/extension/src/content/contextTray.js +8 -2
  12. package/extension/src/content/contextUsageView.js +267 -0
  13. package/extension/src/content/diagnosticsController.js +77 -34
  14. package/extension/src/content/diagnosticsExport.js +1 -1
  15. package/extension/src/content/diagnosticsPanel.js +147 -42
  16. package/extension/src/content/generated/content.bundle.js +5761 -1237
  17. package/extension/src/content/generated/content.bundle.meta.json +6 -3
  18. package/extension/src/content/legacyGlobalRegistry.js +4 -0
  19. package/extension/src/content/localSkillsPanel.js +6 -4
  20. package/extension/src/content/markdownDomRenderer.js +5 -3
  21. package/extension/src/content/markdownText.js +53 -14
  22. package/extension/src/content/modelPicker.js +29 -19
  23. package/extension/src/content/nativeCompatibilityController.js +52 -19
  24. package/extension/src/content/otWarmMirror.js +1 -1
  25. package/extension/src/content/pageBridgeClient.js +7 -7
  26. package/extension/src/content/panelMaintenance.js +10 -2
  27. package/extension/src/content/panelRenderer.js +55 -28
  28. package/extension/src/content/pendingInputView.js +1 -1
  29. package/extension/src/content/projectSettingsCoordinator.js +30 -6
  30. package/extension/src/content/providerSettingsDialog.js +28 -19
  31. package/extension/src/content/recentProjects.js +30 -19
  32. package/extension/src/content/runActivitySummary.js +122 -14
  33. package/extension/src/content/runCompletionMeta.js +194 -6
  34. package/extension/src/content/runController.js +2 -1
  35. package/extension/src/content/runFailureNotice.js +8 -1
  36. package/extension/src/content/runPresence.js +18 -8
  37. package/extension/src/content/runQueueScheduler.js +27 -13
  38. package/extension/src/content/runRecoveryActions.js +2 -1
  39. package/extension/src/content/runResultActions.js +73 -24
  40. package/extension/src/content/runReviewController.js +102 -37
  41. package/extension/src/content/runTimelineView.js +224 -25
  42. package/extension/src/content/scopedPersistencePanelState.js +124 -46
  43. package/extension/src/content/selectionContextView.js +30 -3
  44. package/extension/src/content/sensitivePreflight.js +14 -1
  45. package/extension/src/content/sessionManager.js +49 -3
  46. package/extension/src/content/sessionMenuView.js +54 -18
  47. package/extension/src/content/sessionPersistence.js +25 -5
  48. package/extension/src/content/settingsPanel.js +15 -2
  49. package/extension/src/content/settingsWorkbench.js +127 -89
  50. package/extension/src/content/sharedSessionViewSync.js +13 -4
  51. package/extension/src/content/subagentActivityView.js +23 -7
  52. package/extension/src/content/updateNotice.js +60 -6
  53. package/extension/src/content/writebackOrchestrator.js +301 -72
  54. package/extension/src/content/writingStyleSettings.js +70 -17
  55. package/extension/src/page/compileBridge.js +193 -180
  56. package/extension/src/page/overleafCapabilities.js +4 -1
  57. package/extension/src/page/overleafEditor.js +12 -3
  58. package/extension/src/page/overleafProjectSnapshot.js +56 -3
  59. package/extension/src/page/snapshotRouter.js +75 -66
  60. package/extension/src/page/textCoordinates.js +17 -1
  61. package/extension/src/page/textFileCreator.js +9 -1
  62. package/extension/src/page/treeOperations.js +200 -19
  63. package/extension/src/page/writebackRouter.js +172 -113
  64. package/extension/src/pageBridge.js +124 -73
  65. package/extension/src/popup.js +1 -1
  66. package/extension/src/shared/agentTranscript.js +372 -18
  67. package/extension/src/shared/auditRecords.js +3 -0
  68. package/extension/src/shared/compatibility.js +1 -1
  69. package/extension/src/shared/compileAdapter.js +58 -17
  70. package/extension/src/shared/composerAttachmentDraft.js +27 -7
  71. package/extension/src/shared/contextUsage.js +125 -0
  72. package/extension/src/shared/failureReasons.js +57 -3
  73. package/extension/src/shared/i18n.js +315 -29
  74. package/extension/src/shared/lineReferences.js +38 -31
  75. package/extension/src/shared/pageRpcContract.js +1 -1
  76. package/extension/src/shared/panelIcons.js +39 -0
  77. package/extension/src/shared/projectFiles.js +2 -1
  78. package/extension/src/shared/reviewing.js +130 -1
  79. package/extension/src/shared/runActivityModel.js +70 -4
  80. package/extension/src/shared/runExecutionSnapshot.js +13 -0
  81. package/extension/src/shared/scopedPersistenceBrowserAdapter.js +34 -0
  82. package/extension/src/shared/sessionState.js +63 -4
  83. package/extension/src/shared/sessionTitle.js +14 -1
  84. package/extension/src/shared/sharedSessionBridge.js +81 -13
  85. package/extension/src/shared/staleGuard.js +130 -63
  86. package/extension/src/shared/storageDb.js +35 -3
  87. package/extension/src/shared/storageMigration.js +111 -2
  88. package/extension/src/shared/storageRunActions.js +62 -8
  89. package/extension/src/shared/undoOperations.js +126 -28
  90. package/extension/src/shared/updateRuntimeIdentity.js +16 -2
  91. package/extension/src/shared/writebackSettlement.js +21 -3
  92. package/extension/styles/panel.css +1293 -549
  93. package/native-host/src/bootstrapUpdate.js +52 -16
  94. package/native-host/src/chatBridgeRequest.js +60 -6
  95. package/native-host/src/chatBridgeResponse.js +10 -1
  96. package/native-host/src/chatCompletionsBridge.js +29 -2
  97. package/native-host/src/codexPromptAssembly.js +86 -118
  98. package/native-host/src/codexSessionRunner.js +127 -17
  99. package/native-host/src/debugLog.js +27 -3
  100. package/native-host/src/index.js +42 -11
  101. package/native-host/src/localSkills.js +1 -1
  102. package/native-host/src/mirrorWorkspace.js +47 -3
  103. package/native-host/src/nativeEnvironment.js +27 -5
  104. package/native-host/src/providerContextError.js +20 -0
  105. package/native-host/src/providerRuntime.js +1 -0
  106. package/native-host/src/skills/reviewer-response/SKILL.md +65 -0
  107. package/native-host/src/taskRunnerRuntime.js +28 -8
  108. package/native-host/src/textPatch.js +473 -377
  109. package/native-host/src/updateManager.js +144 -21
  110. package/native-host/src/writingStyleRuntime.js +1 -1
  111. package/package.json +5 -8
package/README.md CHANGED
@@ -2,515 +2,266 @@
2
2
  <img src="extension/assets/icons/codex-overleaf-icon.png" width="72" alt="Codex Overleaf Link">
3
3
  <h1>Codex Overleaf Link</h1>
4
4
  <p><strong>Empower Overleaf with Codex.</strong></p>
5
- <p><img src="https://img.shields.io/badge/version-2.5.1-blue" alt="version 2.5.1"></p>
6
- <p>English | <a href="README.zh-CN.md">简体中文</a></p>
7
- <p>Chrome · macOS / Windows / Linux · Local Codex</p>
8
5
  <p>
9
- <img src="https://img.shields.io/badge/platform-macOS%20%2F%20Windows%20%2F%20Linux-lightgrey" alt="platform">
6
+ <img src="https://img.shields.io/badge/version-2.6.5-blue" alt="version 2.6.5">
10
7
  <img src="https://img.shields.io/badge/chrome-MV3-green" alt="chrome manifest v3">
11
8
  <img src="https://img.shields.io/badge/node-%3E%3D20-brightgreen" alt="node version">
12
9
  <a href="https://github.com/Ghqqqq/codex-overleaf-link/actions/workflows/test.yml"><img src="https://github.com/Ghqqqq/codex-overleaf-link/actions/workflows/test.yml/badge.svg" alt="tests"></a>
13
10
  <img src="https://img.shields.io/badge/runtime%20dependencies-0-orange" alt="zero npm runtime dependencies">
14
11
  <img src="https://img.shields.io/badge/license-MIT-blue" alt="license">
15
12
  </p>
13
+ <p>English | <a href="README.zh-CN.md">简体中文</a></p>
16
14
  </div>
17
15
 
18
- Ask about the project, revise a passage, and review the result beside the PDF. Codex Overleaf Link brings a local Codex workflow into the Overleaf editor, with project context, model selection, and conversations in one place.
19
-
20
- ![The source editor, PDF preview, and a real Codex project review in the Example paper demo](assets/readme/2.5.0/overview@2x.png)
21
-
22
- *Interface captured on 2.5.0. A read-only review of the standard Overleaf example project.*
23
-
24
- <details>
25
- <summary>Read the conversation detail (native 2x PNG)</summary>
26
-
27
- <p align="center"><img src="assets/readme/2.5.0/conversation@2x.png" width="393" alt="Native high-resolution capture of the actual Codex conversation"></p>
16
+ Codex Overleaf Link adds a Codex panel next to the Overleaf editor. Ask about your project, or let Codex edit it: changes go back through the editor, as tracked changes if you want, and a run can be undone until you accept its changes. Codex runs on your machine through the Codex CLI.
28
17
 
29
- </details>
18
+ ![The panel next to the editor and PDF in the Overleaf example project](assets/readme/2.6.0/overview@2x.png)
30
19
 
20
+ [Features](#features) · [Install](#install) · [How it works](#how-it-works) · [Configuration](#configuration) · [Troubleshooting](#troubleshooting)
31
21
 
32
- [Quick start](#quick-start) · [Writing workflow](#workflow) · [Writing style](#writing-style) · [Models](#connections) · [Detailed reference](#reference)
22
+ ## Features
33
23
 
34
- <a id="workflow"></a>
24
+ ### Ask, Auto and Track
35
25
 
36
- ## Read, revise, and review in one workspace
37
-
38
- | Intent | Control | Result |
26
+ | Mode | Codex can | Changes go to |
39
27
  |---|---|---|
40
- | Understand a section or investigate a problem | **Ask** | An answer grounded in the available project context, without writing to Overleaf. |
41
- | Make a change to the paper | **Auto** | Changes are written back to the project and shown in the run record. |
42
- | Review edits in Overleaf | **Auto + Track** | Text edits appear as Overleaf tracked changes. |
43
- | Reverse a run | **Undo changes** | Eligible edits are restored and eligible newly created files are removed. |
44
-
45
- Undo also works after refresh. If a file was edited again afterwards, that file stays available for review; completed Undo steps are retained so a retry can focus on the remaining work.
46
-
47
- ### Give the conversation the right context
48
-
49
- Use `@` or **+** to attach project files, add `@compile-log` for a compile issue, or select text in the editor. **Add to Chat** provides context; **Edit Selection** sets the requested edit range. PDFs and images can be attached to the composer as references.
50
-
51
- <p align="center"><img src="assets/readme/2.5.0/context@2x.png" width="510" alt="A real composer draft with main.tex and sample.bib attached as context"></p>
52
-
53
- *An unsent draft with two project files attached. File context remains visible in the composer.*
54
-
55
- ### Follow the work and open a subagent's conversation
56
-
57
- A run keeps its activity and result together. Expand its timeline to inspect reads, commands, and edits. With **Parallel Subagents** enabled, the main agent can continue working while delegated readers or workers run alongside it. Open a worker card to read that conversation, then return to the main task.
58
-
59
- <table>
60
- <tr>
61
- <td width="50%" align="center"><img src="assets/readme/2.5.0/activity@2x.png" width="393" alt="The actual run timeline and two completed subagent cards"></td>
62
- <td width="50%" align="center"><img src="assets/readme/2.5.0/subagent@2x.png" width="393" alt="The actual read-only Structure subagent conversation"></td>
63
- </tr>
64
- </table>
65
-
66
- *The same real task, shown as an activity view and as a child conversation. These captures show completed workers. Parallel Subagents is experimental.*
67
-
68
- <a id="writing-style"></a>
28
+ | **Ask** | read the project | nowhere; Overleaf is not touched |
29
+ | **Auto** | read and edit | Overleaf, in Editing mode |
30
+ | **Auto + Track** | read and edit | Overleaf, as tracked changes |
69
31
 
70
- ## Write in My Style <sub>Experimental</sub>
32
+ With Track on, each rewritten sentence becomes one tracked change and small fixes stay word-level, so the Review panel reads like edits made by hand. **Accept changes** accepts the run's own tracked changes. **Undo changes** restores the files the run wrote and removes the files it created, also after a page reload.
71
33
 
72
- Build a reusable writing-style skill from selected Overleaf projects and PDFs.
34
+ ![A tracked change in Overleaf's Review panel, with Accept changes and Undo changes on the run card](assets/readme/2.6.0/review@2x.png)
73
35
 
74
- 1. Open **Settings → General & appearance → Writing style**.
75
- 2. Choose references from projects or add text-based PDFs.
76
- 3. Generate the style, then enable it for the project. Add or change references and use **Update style** to refresh the skill.
36
+ - Auto doesn't ask before each edit, but deleting files and adding or replacing images and PDFs always ask first.
37
+ - If a file is edited again after the run, Undo stops at that file instead of overwriting it.
38
+ - **Cancel** stops a run. Files already written stay and can still be undone.
39
+ - Track Changes depends on the project owner's Overleaf plan. When it isn't available, the panel asks before the run whether to write without tracking.
77
40
 
78
- The skill is intended to guide phrasing, rhythm, organization, and tone. Reference material supports the writing style; the current task supplies the paper's facts, results, and citations.
41
+ ### Context
79
42
 
80
- ![The real Write in My Style reference setup in General settings](assets/readme/2.5.0/writing-style@2x.png)
43
+ Attach project files with `@` or **+**, add `@compile-log` for a compile problem, or select lines in the editor and choose **Add to Chat** to reference them as a range such as `main.tex:22-24`. **Edit Selection** limits the edit to the selected text. PDFs and images can be attached for Codex to read; they are never added to the project. The line above the composer shows what Codex will read next: the current file, the selected files, or the whole project.
81
44
 
82
- *Reference selection and generation controls. No private writing samples are shown.*
45
+ Up to five project files stay attached across turns. Attachments are limited to 8 per turn, 12 MiB each and 32 MiB in total.
83
46
 
84
- <a id="connections"></a>
47
+ <p align="center">
48
+ <img src="assets/readme/2.6.0/selection@2x.png" width="340" align="top" alt="Lines selected in the editor, with the Add to Chat and Edit Selection toolbar">
49
+ <img src="assets/readme/2.6.0/context@2x.png" width="340" align="top" alt="Two files and a line range attached to the composer">
50
+ </p>
85
51
 
86
- ## Bring the model that fits
52
+ ### Run timeline and subagents
87
53
 
88
- Use the local Codex CLI's model catalog, choose a reasoning level in the composer, or configure a compatible provider in **Settings → Models & connections**.
54
+ Each run keeps its steps and its answer together. Expand the timeline to see what Codex read, ran and changed. With **Parallel Subagents** on *(experimental)*, the main agent can hand work to readers and workers that run alongside it. Open one to read its conversation, then go back to the main task.
89
55
 
90
- Connection shortcuts cover OpenAI-compatible and Anthropic-compatible APIs, Kimi, GLM, and DeepSeek. A shortcut fills connection defaults; the API key and accepted model IDs are still supplied separately. Third-party providers are experimental.
56
+ <p align="center">
57
+ <img src="assets/readme/2.6.0/activity@2x.png" width="340" align="top" alt="A run timeline with two subagents">
58
+ <img src="assets/readme/2.6.0/subagent@2x.png" width="340" align="top" alt="A subagent's read-only conversation">
59
+ </p>
91
60
 
92
- ![Real connection shortcuts for custom, OpenAI-compatible, Anthropic-compatible, Kimi, GLM, and DeepSeek endpoints](assets/readme/2.5.0/providers@2x.png)
61
+ ### Context window
93
62
 
94
- *Actual connection setup. No API keys are visible.*
63
+ The ring beside the model shows how full the conversation's context window is. Open it to see the latest input, cached input and output, or to compact the conversation; `/compact` does the same.
95
64
 
96
- <a id="quick-start"></a>
65
+ <p align="center">
66
+ <img src="assets/readme/2.6.0/context-window@2x.png" width="340" align="top" alt="Context window usage beside the model">
67
+ <img src="assets/readme/2.6.0/slash-menu@2x.png" width="340" align="top" alt="Typing / opens the command and skill menu, with /compact first">
68
+ </p>
97
69
 
98
- ## Quick start
70
+ ### Results and compile check
99
71
 
100
- > **Upgrading from an older version**
101
- >
102
- > **Local candidate:** 2.5.1 is being tested and has not been published. For this checkout, use `npm run build:content` followed by `npm run install:managed`. The version-pinned npm and download commands below apply after publication. The compatible 2.5.0 → 2.5.1 update migration is implemented and awaiting complete acceptance; it is not yet available through the public update feed.
72
+ Every run ends with a short result. If a run doesn't go as planned, its card names the cause, what it means for the document, and a next step: **Didn't finish**, **Partly written**, **Not written**, or **Check Overleaf** when a write couldn't be confirmed.
103
73
 
104
- > **Versions earlier than 2.5.0 require a manual installation to move to the 2.5.x line.** The in-extension **Update now** action cannot perform this upgrade. Run the installation command below, reload the extension in `chrome://extensions`, then refresh the Overleaf page.
74
+ - If you or a collaborator edit a file while Codex works, Codex's patch is moved around your edit, and Undo keeps it. If both change the same text, the file is left as it is and reported as **Not written**. **Retry sync** writes only the files that are still pending.
75
+ - With **Auto compile** on, Overleaf recompiles after the write. Errors are read from that compile's log and listed on the card. The fix button drafts a request with `@compile-log` in the composer, for you to send.
105
76
 
106
- **Prerequisites:** Chrome, Node.js 20+, and an installed, signed-in Codex CLI. Source installation also uses Git.
77
+ <p align="center">
78
+ <img src="assets/readme/2.6.0/compile-card@2x.png" width="340" align="top" alt="A compile error on the run card, with a Fix 1 compile error button">
79
+ <img src="assets/readme/2.6.0/compile-draft@2x.png" width="340" align="top" alt="A fix request with @compile-log drafted in the composer">
80
+ </p>
107
81
 
108
- ```bash
109
- npm exec --yes codex-overleaf-link@2.5.1 -- install-managed
110
- ```
82
+ ### Write in My Style *(experimental)*
111
83
 
112
- 1. Run the managed installer. It prints the extension directory.
113
- 2. In `chrome://extensions`, enable **Developer mode**, choose **Load unpacked**, and select that directory.
114
- 3. Open an Overleaf project and start with **Ask**. Switch to **Auto** when a file change is intended.
84
+ Builds a writing-style skill from Overleaf projects and PDFs you choose.
115
85
 
116
- The extension supports project pages on `overleaf.com`, `www.overleaf.com`, and `cn.overleaf.com`.
86
+ 1. Open **Settings → This project → Writing**.
87
+ 2. Under **Write in My Style**, pick reference projects or add text-based PDFs.
88
+ 3. Generate the style and turn it on for the project. After you change the references, **Update style** refreshes it.
117
89
 
118
- <a id="reference"></a>
90
+ The style guides phrasing, rhythm, structure and tone; facts, results and citations still come from your project. The same page holds the project's **Personalization** notes for terminology and LaTeX conventions.
119
91
 
120
- ## Setup and reference
92
+ <p align="center"><img src="assets/readme/2.6.0/writing-style@2x.png" width="700" alt="The Writing page in Settings"></p>
121
93
 
122
- Detailed installation, upgrade, privacy, troubleshooting, and development instructions are available below.
94
+ ### Models and providers
123
95
 
124
- <details>
125
- <summary><strong>Open the detailed reference</strong></summary>
96
+ The panel uses the local Codex CLI's models by default; choose the model and reasoning level in the composer. To use another endpoint *(experimental)*, add a provider under **Settings → All projects → Models & connections**. Shortcuts fill in the defaults for OpenAI-compatible and Anthropic-compatible APIs, Kimi, GLM and DeepSeek; you add the API key and model IDs.
126
97
 
127
- ## What you need
128
-
129
- | | |
130
- |---|---|
131
- | Computer | macOS, Windows, or Linux |
132
- | Browser | Google Chrome. Linux Chromium also works; see [Browser support](#browser-support). |
133
- | Node.js 20+ and Git | Used by the installers and the local bridge |
134
- | [Codex CLI](https://github.com/openai/codex) | Installed and signed in. Check with `codex --version`. |
135
- | Overleaf | An account on `overleaf.com` or `cn.overleaf.com` |
136
- | TeX *(optional)* | Only for local `latexmk` checks |
98
+ <p align="center"><img src="assets/readme/2.6.0/providers@2x.png" width="700" alt="Provider shortcuts in Models & connections"></p>
137
99
 
138
100
  ## Install
139
101
 
140
- There are two pieces: a small local program, the **native host**, that runs Codex on your machine, and the **Chrome extension** that draws the panel. The installers set up both as a matched pair that can update itself later.
102
+ You need Google Chrome on macOS, Windows or Linux (or Chromium on Linux), Node.js 20+, and the [Codex CLI](https://github.com/openai/codex), installed and signed in. The extension works on `overleaf.com`, `www.overleaf.com` and `cn.overleaf.com`; self-hosted Overleaf is not supported.
141
103
 
142
- Chrome does not let scripts load an extension for you, so every route ends with one short manual step in `chrome://extensions`.
143
-
144
- ### Option A: Let Codex install it (recommended)
104
+ ### Let Codex install it (recommended)
145
105
 
146
106
  If you already use Codex in a terminal on the computer where Chrome runs, give it this prompt:
147
107
 
148
108
  ```text
149
- Install Codex Overleaf Link from https://github.com/Ghqqqq/codex-overleaf-link on this computer.
150
-
151
- 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.
152
- 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.
153
- 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.
154
- 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.
155
- 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.
109
+ Install Codex Overleaf Link on this computer. Follow the install steps in https://github.com/Ghqqqq/codex-overleaf-link, then tell me what I still need to do in Chrome.
156
110
  ```
157
111
 
158
- ### Option B: One-line installer
159
-
160
- macOS / Linux:
112
+ ### Install with npm
161
113
 
162
114
  ```bash
163
- CODEX_OVERLEAF_REF=v2.5.1 bash -c "$(curl -fsSL https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v2.5.1/install.sh)"
115
+ npm exec --yes codex-overleaf-link@2.6.5 -- install-managed
164
116
  ```
165
117
 
166
- Windows PowerShell:
167
-
168
- ```powershell
169
- iwr https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v2.5.1/install.ps1 -OutFile install.ps1
170
- $env:CODEX_OVERLEAF_REF='v2.5.1'
171
- powershell -ExecutionPolicy Bypass -File install.ps1
172
- ```
173
-
174
- The script checks the prerequisites, builds the extension, installs the native host, and prints the folder Chrome should load. On macOS it also copies that path and opens Chrome's extensions page. On macOS and Linux it leaves a `~/Codex Overleaf Link Extension` shortcut in your home folder.
175
-
176
- ### Option C: npm
177
-
178
- ```bash
179
- npm exec --yes codex-overleaf-link@2.5.1 -- install-managed
180
- ```
181
-
182
- Same result as Option B, without keeping a source checkout around.
118
+ The installer sets up the native host and a managed copy of the extension, then prints the extension's folder.
183
119
 
184
120
  ### Finish in Chrome
185
121
 
186
- 1. Open `chrome://extensions` and turn on **Developer mode**.
187
- 2. Click **Load unpacked** and choose the folder the installer printed.
188
- 3. Open or refresh an Overleaf project. The panel appears on the right.
189
-
190
- If an older copy is still loaded from a different folder, remove it so Chrome doesn't show two.
191
-
192
- The official build carries a bundled extension key, so it always gets the same stable id and you never need `--extension-id`. Custom builds are covered under [Extension ID](#extension-id).
193
-
194
- <details>
195
- <summary><strong>Manual checkout install</strong> (custom location)</summary>
196
-
197
- ```bash
198
- git clone https://github.com/Ghqqqq/codex-overleaf-link.git
199
- cd codex-overleaf-link
200
- npm ci
201
- npm run build:content
202
- npm run install:native
203
- ```
204
-
205
- Then load `extension/` as an unpacked extension in Chrome. This install is unmanaged: rebuild and reload the extension after changes, and rerun `npm run install:native` after changing the native runtime. If Chrome assigns a different extension id, rerun `npm run install:native -- --extension-id <chrome-extension-id>`.
206
-
207
- </details>
208
-
209
- ## Your first run
210
-
211
- 1. Open a project and click the Codex edge tab if the panel is hidden. The header turns green once the native host is connected.
212
- 2. Leave the mode on **Ask** and try something that reads the project: *"Summarise what each chapter argues, in one sentence each."*
213
- 3. When you want edits, switch to **Auto**, describe the change, and send. Codex edits its local copy, then the extension writes the changes into Overleaf and recompiles if **Compile** is on.
214
- 4. Check the result under the answer. The summary line says what was written and whether it can be undone; the file rows show the actual changes.
215
-
216
- The run header tells you what is happening at each moment: reading the project, starting Codex, waiting for the model's first reply, then thinking and editing. If something needs your attention, such as a skipped file or a save Overleaf hasn't confirmed yet, the details open by themselves.
217
-
218
- ## Ask, Auto and Track
219
-
220
- | | What Codex may do | Where the changes go |
221
- |---|---|---|
222
- | **Ask** | Read and analyse | Nowhere. Overleaf is not touched. |
223
- | **Auto** | Read and edit | Written straight into Overleaf in Editing mode. |
224
- | **Auto + Track** | Read and edit | Written as tracked changes you can review in Overleaf's Review panel. |
225
-
226
- Auto does not stop for per-hunk approval, but deleting files and creating or replacing images and PDFs always ask first. Before each write the extension checks that the text it is about to change still matches what Codex saw. If a collaborator edited the same lines in the meantime, that file is skipped and reported, never overwritten.
227
-
228
- **Undo changes** puts the run's files back the way they were, created files included, and works after a page reload. If someone edited the same text afterwards, Undo stops for that file instead of guessing.
229
-
230
- **Accept changes** finalises a Track run's changes in one step and leaves Overleaf in Editing mode.
231
-
232
- > [!WARNING]
233
- > Don't use the run card's **Accept changes** when the same files contain unrelated tracked changes from collaborators or other runs. Accept those individually in Overleaf's Review panel instead.
234
-
235
- **Cancel** stops the run. Anything already written stays, and the card shows which parts landed so you can undo them.
236
-
237
- ## Models and API providers
238
-
239
- By default the panel uses your local Codex CLI: its login, models and settings. Pick a model and reasoning level from the control in the composer.
240
-
241
- To use another endpoint, open **Project Settings → Model providers → Configure → Add provider**:
242
-
243
- 1. Enter a **Provider name**, the **Base URL** and your **API key**. HTTPS is required except for localhost.
244
- 2. Under **Models**, add each model with the exact ID your endpoint accepts, and mark one as the default.
245
- 3. Leave **API protocol** on Auto, or pick Responses API, Chat Completions or Anthropic Messages. If the URL already ends with the full endpoint path, tick **Base URL is the full protocol endpoint**.
246
- 4. **Test connection** sends one real request to a model you pick. Then choose **Save and use for this project**.
247
-
248
- The choice applies to every session in the current project; other projects keep their own. Switching keeps your history and starts fresh threads for new turns. Gateways differ in how they handle tools and reasoning, so a passing test doesn't guarantee every model behaves the same in long tasks. API keys stay with the native host on your machine; task context is sent to the endpoint you chose.
249
-
250
- ## Context and attachments
251
-
252
- - **Files**: type `@` or use the **+** tray to add up to five files. They stay selected across turns until you clear them. Codex can still read the rest of the project.
253
- - **Selections**: select text in the editor and attach it as context, or as **Selection only** to restrict the edit to that range. The chip stays visible on the message you sent.
254
- - **Compile log**: `@compile-log` attaches the current errors and warnings.
255
- - **Attachments**: paste or drop PDFs and images into the composer. Up to 8 per turn, 12 MiB each and 32 MiB in total. They are only for Codex to read and are never written to Overleaf.
256
- - **Generated files**: images, PDFs and other assets Codex creates (up to 10 MiB each) ask for confirmation before they're added to the project. LaTeX build output is filtered out.
257
-
258
- ## Updating
259
-
260
- Managed installs check GitHub for new signed stable releases on their own. When one is available, choose **Update now** in the notice or under **Settings → Software updates**. The update waits until every Overleaf tab is saved and no task is running, replaces the extension and native host together, and restores the previous version if the new one fails its health check. Drafts and prereleases are never picked up, and an update never adds Chrome permissions silently.
261
-
262
- The 2.5.1 candidate adds a compatible update from the published 2.5.0 installation through the same **Update now** action. Its signed package carries the startup-file fixes, retains recovery copies and progress, and reloads the extension before confirming the updated startup code. Bootstrap protocol 3 and existing Chrome permissions remain unchanged. This migration is still undergoing local acceptance; the candidate is unpublished.
263
-
264
- The updater respects HTTP(S) proxy environment variables and the macOS/Windows system proxy. SOCKS-only or PAC-only setups need an HTTP proxy endpoint.
265
-
266
- ### Coming from v2.4.x or earlier
267
-
268
- v2.5.0 adds `cn.overleaf.com` support, which needs a new Chrome permission, so it moves the install to Bootstrap protocol 3. Older updaters refuse that step by design rather than granting permissions themselves. **Installations older than 2.5.0 need the full installer for this migration.** Run the installer once:
269
-
270
- ```bash
271
- npm exec --yes codex-overleaf-link@2.5.1 -- install-managed
272
- ```
273
-
274
- Then click **Reload** on the extension in `chrome://extensions` and refresh Overleaf. Your sessions, settings, provider keys and project mirrors are kept. In-place updates require the target release to pass the Bootstrap compatibility checks.
275
-
276
- From v2.5.0 on, a release that ever needs another reinstall is announced in the panel as **Reinstall needed for this update**, with the reason, the exact command for that version, and a copy button, instead of a failed update. New Overleaf sites no longer need a reinstall at all: the extension popup asks you to allow the site, and Chrome confirms it.
277
-
278
- Checkout and Release-zip installs are unmanaged and always update by hand.
279
-
280
- ## Commands
281
-
282
- | Action | Command |
283
- |---|---|
284
- | Install, repair or migrate | `npm exec --yes codex-overleaf-link@2.5.1 -- install-managed` |
285
- | Diagnose | `npm exec --yes codex-overleaf-link@2.5.1 -- doctor` |
286
- | Uninstall | `npm exec --yes codex-overleaf-link@2.5.1 -- uninstall-managed` |
122
+ In `chrome://extensions`, turn on **Developer mode**, click **Load unpacked** and pick the extension folder. Open an Overleaf project and the panel appears on the right.
287
123
 
288
- npm installs, updates, and uninstalls the coordinated managed extension/native pair. The legacy `install-native` command remains available only for explicitly unmanaged extension directories:
289
-
290
- ```bash
291
- npm exec --yes codex-overleaf-link@2.5.1 -- install-native
292
- ```
293
-
294
- Use `--extension-id <chrome-extension-id>` only for a custom/dev unpacked extension id that differs from the official bundled id. On Linux Chromium, add `--browser chromium` to any of these.
295
-
296
- <a id="uninstall"></a>
297
124
  <details>
298
- <summary><strong>Uninstall</strong></summary>
299
-
300
- ```bash
301
- npm exec --yes codex-overleaf-link@2.5.1 -- uninstall-managed
302
- ```
303
-
304
- This works in PowerShell too, and also removes installs made by `install.sh` / `install.ps1`. For an unmanaged checkout or native-only install, run `npm run uninstall:native` from the checkout, or:
305
-
306
- ```bash
307
- npm exec --yes codex-overleaf-link@2.5.1 -- uninstall-native
308
- ```
309
-
310
- An older native-only source install can also be removed with its bundled uninstaller:
125
+ <summary>Other ways to install</summary>
311
126
 
312
127
  ```bash
313
- node ~/.codex-overleaf/source/scripts/uninstall-native-host.mjs
128
+ # macOS / Linux
129
+ CODEX_OVERLEAF_REF=v2.6.5 bash -c "$(curl -fsSL https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v2.6.5/install.sh)"
314
130
  ```
315
131
 
316
132
  ```powershell
317
- node "$env:LOCALAPPDATA\CodexOverleaf\source\scripts\uninstall-native-host.mjs"
133
+ # Windows
134
+ iwr https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v2.6.5/install.ps1 -OutFile install.ps1
135
+ $env:CODEX_OVERLEAF_REF='v2.6.5'
136
+ powershell -ExecutionPolicy Bypass -File install.ps1
318
137
  ```
319
138
 
320
- Uninstalling removes the native host registration, bridge, managed extension and runtimes. It leaves your history, settings, project mirrors, provider keys and skills alone. Remove the extension from `chrome://extensions` as well. On Windows the install lives under `%LOCALAPPDATA%\CodexOverleaf` and your data under `%USERPROFILE%\.codex-overleaf`, so a full cleanup covers both. See [Local data and cleanup](#local-data-and-cleanup).
321
-
322
- </details>
323
-
324
- ## FAQ and troubleshooting
325
-
326
- **The panel says "Native host update required", or can't find the native host.**
327
- Rerun the installer, reload the extension in `chrome://extensions`, then refresh Overleaf:
328
-
329
139
  ```bash
330
- npm exec --yes codex-overleaf-link@2.5.1 -- install-managed
140
+ # From source. Unmanaged: rebuild and reload the extension yourself after changes.
141
+ git clone https://github.com/Ghqqqq/codex-overleaf-link.git && cd codex-overleaf-link
142
+ npm ci && npm run build:content && npm run install:native
143
+ # then load extension/ as an unpacked extension
331
144
  ```
332
145
 
333
- For a checkout install, rebuild and rerun `npm run install:native` from the same checkout.
334
-
335
- **Codex CLI not found.**
336
- Make sure `codex --version` works in a new terminal (on Windows, `Get-Command codex`), and that you're signed in for the built-in provider. Then rerun the installer so the launcher picks up your PATH.
337
-
338
- **Extension id mismatch.**
339
- Copy the id from `chrome://extensions` and reinstall with it. See [Extension ID](#extension-id).
146
+ The official build always has the extension ID `illdpneeeopfffmiepaejglgmhpmdhdc`. If a custom build gets a different ID, pass `--extension-id <id>` to the installer. For Chromium on Linux, add `--browser chromium`.
340
147
 
341
- **A file was skipped.**
342
- Usually a collaborator changed those lines, the file couldn't be opened in the editor in time, or a project rule marks it read-only. The details under the answer say which, and **Retry sync** writes only the files that are still pending. Don't rerun the whole task just to retry. That can apply the same edit twice.
343
-
344
- **Undo changes or Accept changes is missing.**
345
- Both depend on what the run actually wrote. If files were written but the button is gone, check the changes in Overleaf before doing anything else, and attach exported diagnostics to an issue.
346
-
347
- **A write was blocked by a project rule, or the sensitive-content check fired.**
348
- Rules can make paths read-only or restrict where Codex may write. Adjust them in Project Settings or narrow the request. The sensitive-content check looks for things like tokens and keys before context leaves your machine; remove or redact what it found.
349
-
350
- **A queued message or a fork won't run.**
351
- Queued messages keep the settings they were sent with. If that provider profile was changed or deleted, send the message again. A fork needs a recorded Codex turn and is disabled when there isn't one.
352
-
353
- **Reporting a bug.**
354
- Use **Export Diagnostics** in the panel. The bundle leaves out project text, prompts, compile logs, diffs and secrets by default. If you attach other logs, check them for file names, tokens and document text first.
148
+ </details>
355
149
 
356
150
  ## How it works
357
151
 
358
152
  ```mermaid
359
153
  flowchart TD
360
154
  O[Overleaf project and editor] <--> P[Page bridge]
361
- P <--> C[Codex panel and content runtime]
155
+ P <--> C[Panel and content runtime]
362
156
  C <--> B[Extension service worker]
363
- B <-->|Native Messaging over stdio| N[Local Node host]
157
+ B <-->|Native Messaging over stdio| N[Native host, Node]
364
158
  N <--> M[Project mirror and baseline]
365
- N <-->|JSON RPC over stdio| A[Codex app-server]
366
- A -->|Reads and edits| M
159
+ N <-->|JSON-RPC over stdio| A[codex app-server]
160
+ A -->|reads and edits| M
367
161
  ```
368
162
 
369
- 1. When you send a task, the extension captures your settings and syncs the Overleaf project into a local mirror, or reuses the mirror if it's still current.
370
- 2. The native host starts `codex app-server` against that mirror with an isolated Codex home, so plugin runs don't mix with your own Codex sessions.
371
- 3. When Codex finishes, the host compares the mirror with its baseline and turns the differences into text patches and asset transfers. Ask stops here.
372
- 4. In Auto, the extension writes each patch through the Overleaf editor after checking the project, path rules, edit mode and the expected text. Anything that doesn't line up is skipped and reported.
373
- 5. The undo point is recorded before any further step, then the save state is verified, the mirror refreshed and, if enabled, the project recompiled.
163
+ 1. When you send a task, the extension saves the run's settings and syncs the project into a local mirror, or reuses the mirror if it is still current.
164
+ 2. The native host starts `codex app-server` on the mirror, with a Codex home of its own.
165
+ 3. When Codex is done, the host compares the mirror with its baseline and turns the differences into text patches and file transfers. An Ask run ends here.
166
+ 4. In Auto, the extension writes each patch through the Overleaf editor. Before writing it checks the project, path rules, edit mode and expected text, and shifts the patch past edits made elsewhere in the file since the run started.
167
+ 5. It then records the undo point, confirms the save, refreshes the mirror and, if Auto compile is on, recompiles.
374
168
 
375
- ## Development
169
+ Contributor notes on the architecture are in [docs/architecture](docs/architecture/README.md).
376
170
 
377
- ```bash
378
- npm ci
379
- npm run build:content
380
- npm test
381
- npm run verify:source
382
- npm run verify:npm-package
383
- npm run verify:update-boundary
384
- npm run check:architecture
385
- npm run benchmark:large
386
- ```
171
+ ## Configuration
387
172
 
388
- There are no npm runtime dependencies. Development uses a pinned **esbuild**; the Markdown and math libraries are vendored into the extension. Tests use Node's built-in runner, including VM-based browser integration tests. [CI](.github/workflows/test.yml) runs on macOS, Ubuntu and Windows with Node 24.18.0 and rehearses the managed-update hop on Ubuntu.
173
+ **Providers.** In **Settings → All projects → Models & connections → Add provider**, enter the base URL (HTTPS, except for localhost), the API key and the model IDs your endpoint accepts, and pick the protocol: Auto, Responses, Chat Completions or Anthropic Messages. **Test connection** sends one real request. The choice applies to the current project; other projects keep theirs. Keys are stored by the native host, and task context goes to the endpoint you chose.
389
174
 
390
- The content script is bundled from [content-entry.mjs](extension/entries/content-entry.mjs). Edit the modules, run `npm run build:content`, and reload the extension. To push a local build into an existing managed install, run `npm run install:managed`, then reload the extension and Overleaf. `npm run bridge` starts the native host on stdio for protocol work.
175
+ **Skills.** The plugin's Codex home copies your Codex login and config, but not `~/.codex/AGENTS.md`, `personality`, `rules` or `memories`. **Load local Codex skills** adds `~/.codex/skills` and your local plugins; **Load Codex Overleaf skills** adds `~/.codex-overleaf/skills`. Both are on by default.
391
176
 
392
- | Area | Entry points |
393
- |---|---|
394
- | Panel and task orchestration | `extension/src/content/contentRuntime.js`, `extension/src/content/runController.js` |
395
- | Page snapshot and writeback | `extension/src/pageBridge.js`, `extension/src/page/snapshotRouter.js`, `extension/src/page/writebackRouter.js` |
396
- | Browser/native transport | `extension/src/background.js`, `native-host/src/index.js` |
397
- | Codex and local mirror | `native-host/src/taskRunnerRuntime.js`, `native-host/src/codexSessionRunner.js`, `native-host/src/mirrorWorkspace.js` |
398
- | Shared contracts and persistence | `extension/src/shared/`, `extension/src/content/scopedPersistenceCoordinator.js` |
399
- | Managed updates and packaging | `extension/bootstrap/`, `extension/src/backgroundUpdateCoordinator.js`, `native-host/src/updateManager.js`, `scripts/` |
400
-
401
- Browser smoke test against a real project:
402
-
403
- ```bash
404
- npm run smoke:extension -- --url 'https://www.overleaf.com/project/<project-id>' --probe panel,native,project,diagnostics --json .local/smoke.json
405
- ```
406
-
407
- It launches Chrome with a temporary profile by default. Use `--profile-dir <test-profile-dir> --keep-profile` for a profile that's already signed in to Overleaf. For releases, see `npm run build:release`, `npm run verify:release-artifacts` and `npm run rehearse:update-hop`.
177
+ **Data.** There is no hosted backend and no telemetry. Task context goes to Codex or to the provider you configured, after a check for tokens and keys. Path rules decide what Codex may write; they don't hide files from it.
408
178
 
409
- ## Browser support
179
+ <details>
180
+ <summary>Where things are stored</summary>
410
181
 
411
- | Platform | Browser | Notes |
182
+ | What | macOS / Linux | Windows |
412
183
  |---|---|---|
413
- | macOS | Google Chrome | Default installer |
414
- | Windows | Google Chrome | PowerShell installer |
415
- | Linux | Google Chrome | Default installer |
416
- | Linux | Chromium | Add `--browser chromium` when installing or uninstalling |
417
-
418
- Chromium on macOS and Windows isn't supported yet. The extension runs on project pages of `overleaf.com`, `www.overleaf.com` and `cn.overleaf.com`; self-hosted Overleaf isn't covered.
419
-
420
- Linux Chromium:
184
+ | Sessions and history | IndexedDB `codex-overleaf` on the Overleaf site | same |
185
+ | Preferences | the extension's `chrome.storage.local` | same |
186
+ | Managed extension and native host | `~/.codex-overleaf/managed/` | `%LOCALAPPDATA%\CodexOverleaf\managed\` |
187
+ | Installer checkout | `~/.codex-overleaf/source` | `%LOCALAPPDATA%\CodexOverleaf\source` |
188
+ | Project mirrors | `~/.codex-overleaf/projects` | `%USERPROFILE%\.codex-overleaf\projects` |
189
+ | Plugin Codex home | `~/.codex-overleaf/codex-home` | `%USERPROFILE%\.codex-overleaf\codex-home` |
190
+ | Skills | `~/.codex-overleaf/skills` | `%USERPROFILE%\.codex-overleaf\skills` |
191
+ | Providers and keys | `~/.codex-overleaf/providers.json`, `provider-secrets.json` | `%USERPROFILE%\.codex-overleaf\` |
192
+ | Logs | `~/.codex-overleaf/native-host.log` | `%LOCALAPPDATA%\CodexOverleaf\native-host.log` |
193
+ | Native Messaging manifest | Chrome: `~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.codex.overleaf.json` (macOS), `~/.config/google-chrome/NativeMessagingHosts/` (Linux); Chromium: `~/.config/chromium/NativeMessagingHosts/` | `HKCU\Software\Google\Chrome\NativeMessagingHosts\com.codex.overleaf` |
194
+
195
+ The history database belongs to the Overleaf site, so removing the extension doesn't delete it.
421
196
 
422
- ```bash
423
- CODEX_OVERLEAF_REF=v2.5.1 bash -c "$(curl -fsSL https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v2.5.1/install.sh)" -- --browser chromium
424
- npm exec --yes codex-overleaf-link@2.5.1 -- uninstall-managed --browser chromium
425
- ```
197
+ </details>
426
198
 
427
- ## Extension ID
199
+ ## Updating
428
200
 
429
- The repo ships a fixed extension key, so the official build always gets this id:
201
+ Managed installs check GitHub Releases for signed stable versions. **Update now**, in the update notice or under **Settings → All projects → Software updates**, waits until Overleaf is saved and idle, replaces the extension and native host together, and rolls back if the new version fails its health check. **Restore previous version** takes you back. The updater follows HTTP(S) proxy variables and the macOS/Windows system proxy.
430
202
 
431
- ```
432
- illdpneeeopfffmiepaejglgmhpmdhdc
433
- ```
434
-
435
- If you load a custom build and Chrome gives it a different id, reinstall with that id so the native host's `allowed_origins` matches:
203
+ - From 2.5.1 or later, updates happen in place.
204
+ - From 2.5.0, update to 2.5.1 first.
205
+ - From anything older, rerun the installer. It moves the install to Bootstrap protocol 3, which the `cn.overleaf.com` permission needs. Then reload the extension. Sessions, settings and keys are kept.
436
206
 
437
- ```bash
438
- npm exec --yes codex-overleaf-link@2.5.1 -- install-managed --extension-id "<your-chrome-extension-id>"
439
- ```
207
+ Source checkouts and release-zip installs are unmanaged; update them by hand. Each GitHub release carries the extension zip, the native host runtime, the update bundle, the npm package, installers pinned to that release, and signed checksums.
440
208
 
441
- For an unmanaged extension, use `install-native --extension-id "<your-chrome-extension-id>"` instead. The source installers also read `CODEX_OVERLEAF_EXTENSION_ID`.
442
-
443
- ## Release artifacts
444
-
445
- Each GitHub Release includes:
209
+ ## Commands
446
210
 
447
- - `codex-overleaf-link-extension-v2.5.1.zip`: the extension, for manual unpacked installation.
448
- - `codex-overleaf-native-host-v2.5.1.tar.gz`: the native host runtime used by the installers.
449
- - `codex-overleaf-update-v2.5.1.tar.gz`: the combined bundle the in-product updater downloads.
450
- - `codex-overleaf-link-2.5.1.tgz`: the npm package behind the `npm exec` commands.
451
- - `install.sh` and `install.ps1`: installers pinned to this release.
452
- - `uninstall-native-host.mjs` plus its helpers `nativeHostPlatform.js`, `manifest.js` and `runtimeInstaller.js`.
453
- - `SHA256SUMS`, `release-manifest.json` and `release-manifest.sig`: checksums and the Ed25519-signed release metadata the updater verifies.
454
- - `release-notes.md`.
211
+ | Task | Command |
212
+ |---|---|
213
+ | Install, repair or migrate | `npm exec --yes codex-overleaf-link@2.6.5 -- install-managed` |
214
+ | Diagnose | `npm exec --yes codex-overleaf-link@2.6.5 -- doctor` |
215
+ | Uninstall | `npm exec --yes codex-overleaf-link@2.6.5 -- uninstall-managed` |
216
+ | Native host only, for an unmanaged extension | `npm exec --yes codex-overleaf-link@2.6.5 -- install-native` / `uninstall-native` |
455
217
 
456
- ## Local data and cleanup
218
+ `uninstall-managed` removes the native host registration, the bridge, the managed extension and its runtimes. Your history, settings, mirrors, keys and skills stay. To remove everything, clear the history under **Settings → All projects → Local data → Clear local history…**, uninstall, remove the extension in `chrome://extensions`, and delete `~/.codex-overleaf` and the `~/Codex Overleaf Link Extension` shortcut (on Windows, `%USERPROFILE%\.codex-overleaf` and `%LOCALAPPDATA%\CodexOverleaf`).
457
219
 
458
- There is no hosted backend and no telemetry. Everything below lives on your machine. During a run, task context is sent to Codex or to the provider you configured. Project rules control what may be written; they don't hide files from the model.
220
+ <a name="faq-and-troubleshooting"></a>
459
221
 
460
- | What | Where (macOS/Linux; Windows in brackets) |
461
- |---|---|
462
- | Sessions, runs, history | IndexedDB database `codex-overleaf` under the Overleaf site in Chrome |
463
- | Preferences and project settings | `chrome.storage.local` of the extension |
464
- | Managed extension | `~/.codex-overleaf/managed/extension` (`%LOCALAPPDATA%\CodexOverleaf\managed\extension`) |
465
- | Managed native host | `~/.codex-overleaf/managed/native` (`%LOCALAPPDATA%\CodexOverleaf\managed\native`) |
466
- | Installer checkout | `~/.codex-overleaf/source` (`%LOCALAPPDATA%\CodexOverleaf\source`) |
467
- | Native bridge | `~/.codex-overleaf/codex-overleaf-bridge` (`%LOCALAPPDATA%\CodexOverleaf\codex-overleaf-bridge.cmd`) |
468
- | Project mirrors | `~/.codex-overleaf/projects` (`%USERPROFILE%\.codex-overleaf\projects`) |
469
- | Plugin Codex home | `~/.codex-overleaf/codex-home` (`%USERPROFILE%\.codex-overleaf\codex-home`) |
470
- | Codex Overleaf skills | `~/.codex-overleaf/skills` (`%USERPROFILE%\.codex-overleaf\skills`) |
471
- | Provider profiles and keys | `~/.codex-overleaf/providers.json`, `provider-secrets.json` (`%USERPROFILE%\.codex-overleaf`) |
472
- | Logs | `~/.codex-overleaf/native-host.log`, `native-host-launcher.log` (`%LOCALAPPDATA%\CodexOverleaf\native-host.log`) |
222
+ ## Troubleshooting
473
223
 
474
- The history database belongs to the Overleaf page, not to the extension, so removing the extension does not erase it. See Chrome's notes on [content-script storage](https://developer.chrome.com/docs/extensions/develop/concepts/storage-and-cookies#storage).
224
+ - **The native host is missing or needs an update.** Rerun `install-managed`, reload the extension and refresh Overleaf.
225
+ - **Codex CLI not found.** Make sure `codex --version` works in a new terminal, then rerun the installer so it picks up your `PATH`.
226
+ - **Extension ID mismatch.** Copy the ID from `chrome://extensions` and reinstall with `--extension-id <id>`.
227
+ - **A file was skipped.** Its target text changed during the run, the editor couldn't open it, or a path rule makes it read-only. The details under the answer say which.
228
+ - **A write was blocked by a path rule or the sensitive-content check.** Path rules can make files read-only; the check looks for tokens and keys before context leaves your machine. Change the rule in the project settings, or remove what the check found.
229
+ - **The compile result is unconfirmed.** The panel only reports a compile whose log it could read. Check the log in Overleaf.
230
+ - **Undo changes or Accept changes is missing.** Both depend on what the run wrote. If files were written but the button is gone, check the changes in Overleaf and attach **Export Diagnostics** to an issue.
231
+ - **A queued message or a fork won't run.** Queued messages keep the settings they were sent with; if that provider was changed or deleted, send the message again. Forking needs a recorded Codex turn.
232
+ - **Reporting a bug.** Attach **Export Diagnostics** from the panel. By default it leaves out project text, prompts, compile logs, diffs and secrets.
475
233
 
476
- The plugin's Codex home copies your login and config but not your personalisation: no `~/.codex/AGENTS.md`, no top-level `personality` key, no global `rules` or `memories`. Skill loading toggles default to enabled, and both live in Settings:
234
+ ## Development
477
235
 
478
- - `Load local Codex skills` brings your own skills and plugins (`~/.codex/skills`, local Codex `plugins`, `superpowers` and related configuration) into the isolated `~/.codex-overleaf/codex-home`. It only affects that plugin home and does not write to or reuse global `~/.codex/sessions`.
479
- - `Load Codex Overleaf skills` loads the skills this extension manages from `~/.codex-overleaf/skills` (`%USERPROFILE%\.codex-overleaf\skills` on Windows). Turning it off hides them without deleting the files.
236
+ ```bash
237
+ npm ci
238
+ npm test # core suite
239
+ npm run test:platform # installation and process contracts
240
+ npm run build:content # bundle the content script
241
+ npm run install:managed # put a local build into the managed install
242
+ ```
480
243
 
481
- Native Messaging registration:
244
+ The content script is bundled from [content-entry.mjs](extension/entries/content-entry.mjs). There are no npm runtime dependencies: development uses a pinned esbuild, and the Markdown and math libraries are vendored. `npm run bridge` runs the native host on stdio.
482
245
 
483
- | Platform | Path |
246
+ | Area | Entry points |
484
247
  |---|---|
485
- | macOS Chrome | `~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.codex.overleaf.json` |
486
- | Linux Chrome | `~/.config/google-chrome/NativeMessagingHosts/com.codex.overleaf.json` |
487
- | Linux Chromium | `~/.config/chromium/NativeMessagingHosts/com.codex.overleaf.json` |
488
- | Windows Chrome | `HKCU\Software\Google\Chrome\NativeMessagingHosts\com.codex.overleaf` → `%LOCALAPPDATA%\codex-overleaf\native-messaging-hosts\com.codex.overleaf.json` |
489
-
490
- To remove everything:
248
+ | Panel and runs | `extension/src/content/contentRuntime.js`, `runController.js` |
249
+ | Snapshots and writeback | `extension/src/pageBridge.js`, `extension/src/page/snapshotRouter.js`, `writebackRouter.js` |
250
+ | Transport | `extension/src/background.js`, `native-host/src/index.js` |
251
+ | Codex and the mirror | `native-host/src/taskRunnerRuntime.js`, `codexSessionRunner.js`, `mirrorWorkspace.js` |
252
+ | Patches | `native-host/src/textPatch.js` |
253
+ | Updates and packaging | `extension/bootstrap/`, `native-host/src/updateManager.js`, `scripts/` |
491
254
 
492
- 1. While the extension is still installed, use **Settings → History & storage → Clear local history…** in each Chrome profile you used. If it's already gone, delete the `codex-overleaf` database from the Overleaf page's **DevTools → Application → IndexedDB**.
493
- 2. Run `uninstall-managed` (or `uninstall-native` for an unmanaged install). See [Uninstall](#uninstall).
494
- 3. Remove the extension in `chrome://extensions`. Chrome clears its `chrome.storage.local` with it.
495
- 4. Delete the local folders. **This permanently removes mirrors, plugin history, provider keys and skills.**
255
+ To run standalone panel, Native, project-read and diagnostics probes against a real project:
496
256
 
497
257
  ```bash
498
- rm -rf ~/.codex-overleaf ~/Codex\ Overleaf\ Link\ Extension
499
- ```
500
-
501
- ```powershell
502
- Remove-Item -Recurse -Force "$env:LOCALAPPDATA\CodexOverleaf", "$env:USERPROFILE\.codex-overleaf" -ErrorAction SilentlyContinue
258
+ npm run smoke:extension -- --url 'https://www.overleaf.com/project/<id>' --probe panel,native,project,diagnostics --json .local/smoke.json
503
259
  ```
504
260
 
505
- ## Contributing
261
+ For local Managed installation acceptance, follow the [development SOP](docs/architecture/change-workflow.md#4-implement-and-validate-obtain-evidence-proportional-to-risk), including extension Reload, loaded build identity, Ask with zero writes, reversible two-file write/Undo, editor cleanup and refreshed history. Apply the SOP's Luna selection, model/run-ID recording, and unavailable-model blocker rules to real-model runs.
506
262
 
507
- Issues and pull requests are welcome. For larger changes, open an issue first so we can talk through the approach. Run `npm test` before submitting, and keep [README.md](README.md) and [README.zh-CN.md](README.zh-CN.md) in step when behaviour, versions or commands change.
263
+ Pull requests are welcome. For larger changes, please open an issue first, and keep both READMEs in step.
508
264
 
509
265
  ## License
510
266
 
511
267
  [MIT](LICENSE)
512
-
513
- <p align="center"><strong>English</strong> | <a href="README.zh-CN.md" lang="zh-CN">简体中文</a></p>
514
-
515
-
516
- </details>