codex-overleaf-link 1.7.1 → 1.7.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.
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  <h1>Codex Overleaf Link</h1>
4
4
  <p><strong>Empower Overleaf with Codex.</strong></p>
5
5
  <p>
6
- <img src="https://img.shields.io/badge/version-1.7.1-blue" alt="version">
6
+ <img src="https://img.shields.io/badge/version-1.7.5-blue" alt="version">
7
7
  <img src="https://img.shields.io/badge/platform-macOS%20%2F%20Windows%20%2F%20Linux-lightgrey" alt="platform">
8
8
  <img src="https://img.shields.io/badge/chrome-MV3-green" alt="chrome manifest v3">
9
9
  <img src="https://img.shields.io/badge/node-%3E%3D20-brightgreen" alt="node version">
@@ -38,14 +38,14 @@ One command installs the native host **and** sets up the extension: the script r
38
38
  macOS / Linux:
39
39
 
40
40
  ```bash
41
- CODEX_OVERLEAF_REF=v1.7.1 bash -c "$(curl -fsSL https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v1.7.1/install.sh)"
41
+ CODEX_OVERLEAF_REF=v1.7.5 bash -c "$(curl -fsSL https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v1.7.5/install.sh)"
42
42
  ```
43
43
 
44
44
  Windows PowerShell:
45
45
 
46
46
  ```powershell
47
- iwr https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v1.7.1/install.ps1 -OutFile install.ps1
48
- $env:CODEX_OVERLEAF_REF='v1.7.1'
47
+ iwr https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v1.7.5/install.ps1 -OutFile install.ps1
48
+ $env:CODEX_OVERLEAF_REF='v1.7.5'
49
49
  powershell -ExecutionPolicy Bypass -File install.ps1
50
50
  ```
51
51
 
@@ -56,10 +56,10 @@ Then, in the `chrome://extensions` tab the script opened: enable **Developer mod
56
56
  `npm exec` installs and updates the **native host only** — it does not include the Chrome extension. Use it if you prefer a pinned npm package to a source checkout.
57
57
 
58
58
  ```bash
59
- npm exec --yes codex-overleaf-link@1.7.1 -- install-native
59
+ npm exec --yes codex-overleaf-link@1.7.5 -- install-native
60
60
  ```
61
61
 
62
- Then add the extension yourself: download `codex-overleaf-link-extension-v1.7.1.zip` from the [v1.7.1 GitHub Release](https://github.com/Ghqqqq/codex-overleaf-link/releases/tag/v1.7.1), unzip it to a stable folder, and in `chrome://extensions` enable **Developer mode**, click **Load unpacked**, and select that folder.
62
+ Then add the extension yourself: download `codex-overleaf-link-extension-v1.7.5.zip` from the [v1.7.5 GitHub Release](https://github.com/Ghqqqq/codex-overleaf-link/releases/tag/v1.7.5), unzip it to a stable folder, and in `chrome://extensions` enable **Developer mode**, click **Load unpacked**, and select that folder.
63
63
 
64
64
  ### Open Overleaf
65
65
 
@@ -86,9 +86,9 @@ npm installs, updates, uninstalls, and diagnoses the native host only. npm does
86
86
 
87
87
  | Action | Command |
88
88
  |--------|---------|
89
- | Install / update | `npm exec --yes codex-overleaf-link@1.7.1 -- install-native` |
90
- | Diagnose | `npm exec --yes codex-overleaf-link@1.7.1 -- doctor` |
91
- | Uninstall | `npm exec --yes codex-overleaf-link@1.7.1 -- uninstall-native` |
89
+ | Install / update | `npm exec --yes codex-overleaf-link@1.7.5 -- install-native` |
90
+ | Diagnose | `npm exec --yes codex-overleaf-link@1.7.5 -- doctor` |
91
+ | Uninstall | `npm exec --yes codex-overleaf-link@1.7.5 -- uninstall-native` |
92
92
 
93
93
  Use `--extension-id <chrome-extension-id>` only for a custom/dev unpacked extension id that differs from the official bundled id.
94
94
 
@@ -98,13 +98,13 @@ To update, re-run any of the [native host installers](#install) — they install
98
98
 
99
99
  ## GitHub Release Artifacts
100
100
 
101
- The v1.7.1 GitHub Release contains:
101
+ The v1.7.5 GitHub Release contains:
102
102
 
103
- - `codex-overleaf-link-extension-v1.7.1.zip`: loadable Chrome extension package for manual unpacked installation.
104
- - `codex-overleaf-native-host-v1.7.1.tar.gz`: native host runtime files used by the installer and release verification.
105
- - `codex-overleaf-link-1.7.1.tgz`: npm native host CLI package for pinned install, doctor, and uninstall flows.
106
- - `install.sh`: release-pinned macOS / Linux installer that defaults to `v1.7.1` when run directly from the release artifact.
107
- - `install.ps1`: release-pinned Windows PowerShell installer that defaults to `v1.7.1` when run directly from the release artifact.
103
+ - `codex-overleaf-link-extension-v1.7.5.zip`: loadable Chrome extension package for manual unpacked installation.
104
+ - `codex-overleaf-native-host-v1.7.5.tar.gz`: native host runtime files used by the installer and release verification.
105
+ - `codex-overleaf-link-1.7.5.tgz`: npm native host CLI package for pinned install, doctor, and uninstall flows.
106
+ - `install.sh`: release-pinned macOS / Linux installer that defaults to `v1.7.5` when run directly from the release artifact.
107
+ - `install.ps1`: release-pinned Windows PowerShell installer that defaults to `v1.7.5` when run directly from the release artifact.
108
108
  - `uninstall-native-host.mjs`: native host uninstaller that removes the Chrome Native Messaging manifest, bridge executable, and runtime copy.
109
109
  - `nativeHostPlatform.js`, `manifest.js`, `runtimeInstaller.js`: helper files required by the loose uninstaller asset.
110
110
  - `SHA256SUMS` and `release-manifest.json`: checksum and artifact metadata for release verification.
@@ -115,7 +115,7 @@ The v1.7.1 GitHub Release contains:
115
115
  Remove the native host (use `--browser chromium` on Linux Chromium):
116
116
 
117
117
  ```bash
118
- npm exec --yes codex-overleaf-link@1.7.1 -- uninstall-native
118
+ npm exec --yes codex-overleaf-link@1.7.5 -- uninstall-native
119
119
  ```
120
120
 
121
121
  The same command works on Windows PowerShell. If you installed from a manual checkout or source installer, you can also run `npm run uninstall:native` inside the repo, use `node ~/.codex-overleaf/source/scripts/uninstall-native-host.mjs` on macOS / Linux, or use `node $env:LOCALAPPDATA\CodexOverleaf\source\scripts\uninstall-native-host.mjs` on Windows PowerShell.
@@ -150,13 +150,13 @@ Then remove the extension from `chrome://extensions`. To delete local data: on m
150
150
  Linux Chromium install or update:
151
151
 
152
152
  ```bash
153
- CODEX_OVERLEAF_REF=v1.7.1 bash -c "$(curl -fsSL https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v1.7.1/install.sh)" -- --browser chromium
153
+ CODEX_OVERLEAF_REF=v1.7.5 bash -c "$(curl -fsSL https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v1.7.5/install.sh)" -- --browser chromium
154
154
  ```
155
155
 
156
156
  Linux Chromium uninstall:
157
157
 
158
158
  ```bash
159
- npm exec --yes codex-overleaf-link@1.7.1 -- uninstall-native --browser chromium
159
+ npm exec --yes codex-overleaf-link@1.7.5 -- uninstall-native --browser chromium
160
160
  ```
161
161
 
162
162
  ## Features
@@ -291,7 +291,7 @@ Composer attachments are turn-scoped Codex context. Limits are 8 attachments per
291
291
  Re-run any [native host installer](#install), reload the extension in `chrome://extensions`, then refresh the Overleaf tab. This also fixes extension/native version mismatch and native protocol mismatch.
292
292
 
293
293
  ```bash
294
- npm exec --yes codex-overleaf-link@1.7.1 -- install-native
294
+ npm exec --yes codex-overleaf-link@1.7.5 -- install-native
295
295
  ```
296
296
 
297
297
  **The Windows popup or panel shows a Bash recovery command**
@@ -340,8 +340,8 @@ Use this matrix for release-candidate signoff and compatibility reports. Record
340
340
  | Browser/channel/version | Google Chrome channel and version. | Google Chrome channel and version. | Google Chrome channel and version. | Chromium channel/package and version. |
341
341
  | Install mode | Manual unpacked extension from GitHub Release zip or checkout. | Manual unpacked extension from GitHub Release zip or checkout. | Manual unpacked extension from GitHub Release zip or checkout. | Manual unpacked extension from GitHub Release zip or checkout; native host installed with `--browser chromium`. |
342
342
  | 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`. |
343
- | Installer/update command | `npm exec --yes codex-overleaf-link@1.7.1 -- install-native` | `npm exec --yes codex-overleaf-link@1.7.1 -- install-native` | `npm exec --yes codex-overleaf-link@1.7.1 -- install-native` | `npm exec --yes codex-overleaf-link@1.7.1 -- install-native --browser chromium` |
344
- | Uninstall command | `npm exec --yes codex-overleaf-link@1.7.1 -- uninstall-native` | `npm exec --yes codex-overleaf-link@1.7.1 -- uninstall-native` | `npm exec --yes codex-overleaf-link@1.7.1 -- uninstall-native` | `npm exec --yes codex-overleaf-link@1.7.1 -- uninstall-native --browser chromium` |
343
+ | Installer/update command | `npm exec --yes codex-overleaf-link@1.7.5 -- install-native` | `npm exec --yes codex-overleaf-link@1.7.5 -- install-native` | `npm exec --yes codex-overleaf-link@1.7.5 -- install-native` | `npm exec --yes codex-overleaf-link@1.7.5 -- install-native --browser chromium` |
344
+ | Uninstall command | `npm exec --yes codex-overleaf-link@1.7.5 -- uninstall-native` | `npm exec --yes codex-overleaf-link@1.7.5 -- uninstall-native` | `npm exec --yes codex-overleaf-link@1.7.5 -- uninstall-native` | `npm exec --yes codex-overleaf-link@1.7.5 -- uninstall-native --browser chromium` |
345
345
  | 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` |
346
346
  | Bridge/runtime/source path | Bridge `~/.codex-overleaf/codex-overleaf-bridge`; runtime `~/.codex-overleaf/native-host-runtime`; source `~/.codex-overleaf/source`. | Bridge `%LOCALAPPDATA%\CodexOverleaf\codex-overleaf-bridge.cmd`; runtime `%LOCALAPPDATA%\CodexOverleaf\native-host-runtime`; source `%LOCALAPPDATA%\CodexOverleaf\source`. | Bridge `~/.codex-overleaf/codex-overleaf-bridge`; runtime `~/.codex-overleaf/native-host-runtime`; source `~/.codex-overleaf/source`. | Bridge `~/.codex-overleaf/codex-overleaf-bridge`; runtime `~/.codex-overleaf/native-host-runtime`; source `~/.codex-overleaf/source`. |
347
347
  | Node/Git/Codex/TeX | Node.js >= 20; Git; Codex CLI installed and logged in; TeX optional. | Node.js >= 20; Git; Codex CLI installed and logged in; TeX optional. | Node.js >= 20; Git; Codex CLI installed and logged in; TeX optional. | Node.js >= 20; Git; Codex CLI installed and logged in; TeX optional. |
@@ -12,7 +12,7 @@
12
12
  const MIN_NATIVE_VERSION = '1.0.0';
13
13
  const MIN_COMPATIBLE_NATIVE_VERSION = '1.0.0';
14
14
  const MIN_COMPATIBLE_EXTENSION_VERSION = '1.0.0';
15
- const BUILD_TARGET_VERSION = '1.7.1';
15
+ const BUILD_TARGET_VERSION = '1.7.5';
16
16
  const DEFAULT_CHROME_EXTENSION_ID = 'illdpneeeopfffmiepaejglgmhpmdhdc';
17
17
  const REQUIRED_CAPABILITIES = Object.freeze([
18
18
  'bridgePing',
@@ -273,6 +273,23 @@
273
273
  addContext: 'Add @ context',
274
274
  attachFiles: 'Attach files (PDF, images)',
275
275
  fileProtectionTitle: 'File protection',
276
+ sessionEvictTitle: 'Session limit reached',
277
+ sessionEvictMessage: 'You have 20 sessions. Creating a new one will permanently delete the oldest session "{title}" and all of its history.',
278
+ sessionEvictConfirm: 'Delete oldest & create',
279
+ sessionSwitchRunningTitle: 'A run is still in progress',
280
+ sessionSwitchRunningMessage: 'The current session is still running. If you leave now, the run continues in the background and its result is saved to that session.',
281
+ sessionSwitchRunningConfirm: 'Leave & continue in background',
282
+ diffHunkRevert: 'Undo decision',
283
+ runsTruncatedNote: 'Showing the most recent 20 runs — older runs were trimmed.',
284
+ eventsTruncatedNote: 'Earlier steps of this run were trimmed.',
285
+ newSessionTooltip: 'Start a fresh conversation — the current session\u2019s context will not carry over',
286
+ storageTitle: 'History & storage',
287
+ storageUsageLoading: 'Calculating usage\u2026',
288
+ storageClearAll: 'Clear all history\u2026',
289
+ storageClearAllHelp: 'Removes every stored session, run and audit record for all projects. Project settings and rules are kept.',
290
+ runTurnNavLabel: 'Jump to a turn\u2026',
291
+ historyTitle: 'Change history',
292
+ historyHelp: 'What Codex wrote to this project, per run. Filter by file name or task text.',
276
293
  privacyTitle: 'Privacy',
277
294
  governanceBroadReadonlyWarning: '"{pattern}" matches every file — Codex will not be able to write anything. Saved; narrow it if unintended.',
278
295
  governanceWritableAllowlistNote: 'Writable allowlist active — files outside these patterns cannot be written.',
@@ -447,6 +464,7 @@
447
464
  recentProjects_badge_running: 'running',
448
465
  recentProjects_badge_completed: 'completed',
449
466
  recentProjects_badge_failed: 'failed',
467
+ recentProjects_badge_interrupted: 'interrupted',
450
468
  recentProjects_badge_background_completed: 'completed in background',
451
469
  recentProjects_badge_needs_review_after_navigation: 'pending',
452
470
  recentProjects_badge_abandoned_after_navigation: 'abandoned'
@@ -713,6 +731,23 @@
713
731
  addContext: '添加 @ 上下文',
714
732
  attachFiles: '添加附件(PDF、图片)',
715
733
  fileProtectionTitle: '文件保护',
734
+ sessionEvictTitle: '会话数已达上限',
735
+ sessionEvictMessage: '当前已有 20 个会话。新建将永久删除最早的会话「{title}」及其全部历史。',
736
+ sessionEvictConfirm: '删除最早并新建',
737
+ sessionSwitchRunningTitle: '仍有运行进行中',
738
+ sessionSwitchRunningMessage: '当前会话还在运行。现在离开的话,该运行会在后台继续,结果仍会记录到原会话。',
739
+ sessionSwitchRunningConfirm: '离开并后台继续',
740
+ diffHunkRevert: '撤销该决定',
741
+ runsTruncatedNote: '仅显示最近 20 轮——更早的轮次已精简。',
742
+ eventsTruncatedNote: '本轮更早的步骤已精简。',
743
+ newSessionTooltip: '开启全新对话——当前会话的上下文不会带入',
744
+ storageTitle: '历史与存储',
745
+ storageUsageLoading: '正在计算占用…',
746
+ storageClearAll: '清空全部历史…',
747
+ storageClearAllHelp: '删除所有项目已存储的全部会话、运行与审计记录。项目设置与规则会保留。',
748
+ runTurnNavLabel: '跳到某一轮…',
749
+ historyTitle: '变更历史',
750
+ historyHelp: 'Codex 每一轮写入本项目的记录。可按文件名或任务内容过滤。',
716
751
  privacyTitle: '隐私',
717
752
  governanceBroadReadonlyWarning: '「{pattern}」匹配所有文件——Codex 将无法写入任何内容。已保存;若非有意请收窄范围。',
718
753
  governanceWritableAllowlistNote: '已设置可写白名单——白名单之外的文件都不可写。',
@@ -886,6 +921,7 @@
886
921
  recentProjects_badge_running: '运行中',
887
922
  recentProjects_badge_completed: '已完成',
888
923
  recentProjects_badge_failed: '失败',
924
+ recentProjects_badge_interrupted: '已中断',
889
925
  recentProjects_badge_background_completed: '后台已完成',
890
926
  recentProjects_badge_needs_review_after_navigation: '待处理',
891
927
  recentProjects_badge_abandoned_after_navigation: '已中止'
@@ -561,10 +561,16 @@
561
561
  const locale = options.locale || i18n.DEFAULT_LOCALE;
562
562
  const events = normalizeRunEvents(run.events);
563
563
  if (shouldStopRestoredRun) {
564
+ // v1.7.5: a reload-orphaned run is 'interrupted', not 'failed' — nothing
565
+ // went wrong with the task itself. The notice is a report-kind event
566
+ // carrying a retryable failure code so the recovery-action registry
567
+ // offers "Edit & resend" right on the card.
564
568
  events.push({
565
569
  title: i18n.t(locale, 'restoredRunStoppedTitle'),
566
570
  status: 'failed',
571
+ kind: 'report',
567
572
  detail: i18n.t(locale, 'restoredRunStoppedDetail'),
573
+ failure: { code: 'native_request_failed', source: 'panel_reload' },
568
574
  timestamp: new Date().toISOString()
569
575
  });
570
576
  }
@@ -576,7 +582,7 @@
576
582
  model: typeof run.model === 'string' ? run.model : '',
577
583
  reasoningEffort: typeof run.reasoningEffort === 'string' ? run.reasoningEffort : '',
578
584
  speedTier: typeof run.speedTier === 'string' ? run.speedTier : '',
579
- status: shouldStopRestoredRun ? 'failed' : normalizeRunStatus(run.status),
585
+ status: shouldStopRestoredRun ? 'interrupted' : normalizeRunStatus(run.status),
580
586
  statusText: shouldStopRestoredRun ? i18n.t(locale, 'restoredRunStoppedStatus') : sanitizeAssistantVisibleText(run.statusText),
581
587
  runProjectId: normalizeProjectPrefKey(run.runProjectId),
582
588
  startedAt: typeof run.startedAt === 'string' ? run.startedAt : '',
@@ -654,6 +660,7 @@
654
660
  'running',
655
661
  'completed',
656
662
  'failed',
663
+ 'interrupted',
657
664
  'background_completed',
658
665
  'needs_review_after_navigation',
659
666
  'abandoned_after_navigation'
@@ -697,6 +704,19 @@
697
704
  if (event.failure) {
698
705
  normalized.failure = sanitizeAssistantVisibleValue(event.failure);
699
706
  }
707
+ if (Array.isArray(event.compileErrors) && event.compileErrors.length) {
708
+ normalized.compileErrors = event.compileErrors.slice(0, 5)
709
+ .map(item => sanitizeAssistantVisibleText(String(item)))
710
+ .filter(Boolean);
711
+ }
712
+ if (Array.isArray(event.rejectedHunks) && event.rejectedHunks.length) {
713
+ normalized.rejectedHunks = event.rejectedHunks.slice(0, 10)
714
+ .map(item => ({
715
+ path: sanitizeAssistantVisibleText(String(item?.path || '')),
716
+ summary: sanitizeAssistantVisibleText(String(item?.summary || ''))
717
+ }))
718
+ .filter(item => item.path);
719
+ }
700
720
  return normalized;
701
721
  })
702
722
  .slice(-MAX_RUN_EVENTS);
@@ -847,7 +867,12 @@
847
867
  const limits = options.aggressive ? STORAGE_AGGRESSIVE_LIMITS : STORAGE_DEFAULT_LIMITS;
848
868
  const compact = compactPanelStateForStorage(input, limits);
849
869
  if (!options.aggressive && estimateJsonBytes(compact) > limits.targetBytes) {
850
- return prepareStateForStorage(input, { aggressive: true });
870
+ // Surface the silent degradation: callers can pass onAggressive to tell
871
+ // the user history is being trimmed harder than the normal limits.
872
+ if (typeof options.onAggressive === 'function') {
873
+ options.onAggressive();
874
+ }
875
+ return prepareStateForStorage(input, { ...options, aggressive: true });
851
876
  }
852
877
  return compact;
853
878
  }
@@ -1091,6 +1116,19 @@
1091
1116
  if (event.failure) {
1092
1117
  compact.failure = sanitizeAssistantVisibleValue(event.failure);
1093
1118
  }
1119
+ if (Array.isArray(event.compileErrors) && event.compileErrors.length) {
1120
+ compact.compileErrors = event.compileErrors.slice(0, 5)
1121
+ .map(item => sanitizeAssistantVisibleText(String(item)))
1122
+ .filter(Boolean);
1123
+ }
1124
+ if (Array.isArray(event.rejectedHunks) && event.rejectedHunks.length) {
1125
+ compact.rejectedHunks = event.rejectedHunks.slice(0, 10)
1126
+ .map(item => ({
1127
+ path: sanitizeAssistantVisibleText(String(item?.path || '')),
1128
+ summary: sanitizeAssistantVisibleText(String(item?.summary || ''))
1129
+ }))
1130
+ .filter(item => item.path);
1131
+ }
1094
1132
  return compact;
1095
1133
  });
1096
1134
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-overleaf-link",
3
- "version": "1.7.1",
3
+ "version": "1.7.5",
4
4
  "description": "Cross-platform Chrome bridge that connects Codex to the active Overleaf project.",
5
5
  "license": "MIT",
6
6
  "type": "commonjs",