codex-overleaf-link 1.8.6 → 1.9.1

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 (73) hide show
  1. package/README.md +45 -21
  2. package/bin/codex-overleaf-link.mjs +58 -0
  3. package/extension/assets/icons/codex-overleaf-dialog-icon.png +0 -0
  4. package/extension/assets/icons/codex-overleaf-icon.png +0 -0
  5. package/extension/assets/icons/icon128.png +0 -0
  6. package/extension/assets/icons/icon16.png +0 -0
  7. package/extension/assets/icons/icon32.png +0 -0
  8. package/extension/assets/icons/icon48.png +0 -0
  9. package/extension/bootstrap/background.js +404 -0
  10. package/extension/bootstrap/manifest.template.json +51 -0
  11. package/extension/bootstrap/popup.css +26 -0
  12. package/extension/bootstrap/popup.html +38 -0
  13. package/extension/bootstrap/popup.js +44 -0
  14. package/extension/bootstrap/runtimeContext.js +2 -0
  15. package/extension/runtime-manifest.json +60 -0
  16. package/extension/src/background.js +532 -0
  17. package/extension/src/content/applyResultFormatters.js +387 -0
  18. package/extension/src/content/composerAttachments.js +522 -0
  19. package/extension/src/content/composerPanel.js +254 -0
  20. package/extension/src/content/contentRuntime.js +8897 -0
  21. package/extension/src/content/contextTray.js +686 -0
  22. package/extension/src/content/diagnosticsController.js +659 -0
  23. package/extension/src/content/diagnosticsPanel.js +342 -0
  24. package/extension/src/content/diffReviewPanel.js +797 -0
  25. package/extension/src/content/localSkillsPanel.js +280 -0
  26. package/extension/src/content/markdownText.js +606 -0
  27. package/extension/src/content/mirrorHealth.js +92 -0
  28. package/extension/src/content/modelPicker.js +489 -0
  29. package/extension/src/content/nativeChannel.js +62 -0
  30. package/extension/src/content/otWarmMirror.js +964 -0
  31. package/extension/src/content/otWarmMirrorController.js +174 -0
  32. package/extension/src/content/panelMaintenance.js +367 -0
  33. package/extension/src/content/panelRenderer.js +253 -0
  34. package/extension/src/content/recentProjects.js +1063 -0
  35. package/extension/src/content/reviewHunks.js +247 -0
  36. package/extension/src/content/runController.js +242 -0
  37. package/extension/src/content/runTimelineView.js +1131 -0
  38. package/extension/src/content/sessionManager.js +487 -0
  39. package/extension/src/content/sessionPanel.js +263 -0
  40. package/extension/src/content/settingsPanel.js +527 -0
  41. package/extension/src/content/themeController.js +91 -0
  42. package/extension/src/content/updateIdle.js +67 -0
  43. package/extension/src/content/writebackController.js +300 -0
  44. package/extension/src/content/writebackOrchestrator.js +850 -0
  45. package/extension/src/contentScript.js +8 -0
  46. package/extension/src/page/compileBridge.js +460 -0
  47. package/extension/src/page/overleafCapabilities.js +100 -0
  48. package/extension/src/page/overleafEditor.js +282 -0
  49. package/extension/src/page/overleafProjectSnapshot.js +234 -0
  50. package/extension/src/page/overleafRealtimeObserver.js +491 -0
  51. package/extension/src/page/pageBridgeCapability.js +71 -0
  52. package/extension/src/page/snapshotRouter.js +948 -0
  53. package/extension/src/page/trackedChangesLifecycle.js +1506 -0
  54. package/extension/src/page/treeOperations.js +1584 -0
  55. package/extension/src/page/writeGuard.js +142 -0
  56. package/extension/src/page/writebackRouter.js +1934 -0
  57. package/extension/src/pageBridge.js +2224 -0
  58. package/extension/src/popup.js +247 -0
  59. package/extension/src/shared/agentTranscript.js +18 -4
  60. package/extension/src/shared/compatibility.js +1 -1
  61. package/extension/styles/panel.css +4048 -0
  62. package/native-host/src/index.js +9 -2
  63. package/native-host/src/managedInstall.js +393 -0
  64. package/native-host/src/managedLauncherRuntime.js +71 -0
  65. package/native-host/src/nativeHostPlatform.js +16 -0
  66. package/native-host/src/runtimeInstaller.js +6 -1
  67. package/native-host/src/taskRunnerRuntime.js +8 -0
  68. package/native-host/src/updateArchive.js +253 -0
  69. package/native-host/src/updateManager.js +548 -0
  70. package/native-host/src/updateTrust.js +156 -0
  71. package/package.json +11 -2
  72. package/scripts/install-managed.mjs +64 -0
  73. package/scripts/uninstall-managed.mjs +48 -0
@@ -0,0 +1,51 @@
1
+ {
2
+ "manifest_version": 3,
3
+ "name": "Codex Overleaf Link",
4
+ "version": "1.9.1",
5
+ "description": "Connect the active Overleaf project to a local Codex bridge.",
6
+ "icons": {
7
+ "16": "assets/icons/icon16.png",
8
+ "32": "assets/icons/icon32.png",
9
+ "48": "assets/icons/icon48.png",
10
+ "128": "assets/icons/icon128.png"
11
+ },
12
+ "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlvUmSiwPTRFSmr9fVJ8HTtlCaYP34o4zrLvqqJV3Ha4+QWQuBTkLmbONvDm7heCh8sDqUzMBA7yPtLu5kGtx85FnHBxWcasgLMmdSfGKcfApVyQGfEJ9WoRYsr1QVG9xTdAmtIa5zdFFHdfLN3OrBgxLDSt2jjpiEZbs9w3VLlsJlVY2y+98L86RywHQzk/l2OEwIJ2Waa7ef0mRnNMQ0k7S1xJNFV5YOMHEc06+OkCg32zJlfGhHY+NVzpxgCYvJEPB/SR2JLLi1U43jvIStCXBZeQ1cT10tXvgwV1F7RPbA9cjelzyamW9yhK3XlyD7TnPiYfvOOYxDByP9s8H7QIDAQAB",
13
+ "permissions": [
14
+ "alarms",
15
+ "nativeMessaging",
16
+ "scripting",
17
+ "storage"
18
+ ],
19
+ "host_permissions": [
20
+ "https://www.overleaf.com/project/*",
21
+ "https://overleaf.com/project/*"
22
+ ],
23
+ "background": {
24
+ "service_worker": "bootstrap/background.js"
25
+ },
26
+ "web_accessible_resources": [
27
+ {
28
+ "resources": [
29
+ "assets/icons/codex-overleaf-icon.png",
30
+ "assets/icons/codex-overleaf-dialog-icon.png",
31
+ "runtime/src/shared/*",
32
+ "runtime/src/page/*",
33
+ "runtime/src/pageBridge.js"
34
+ ],
35
+ "matches": [
36
+ "https://www.overleaf.com/*",
37
+ "https://overleaf.com/*"
38
+ ]
39
+ }
40
+ ],
41
+ "action": {
42
+ "default_title": "Codex Overleaf Link",
43
+ "default_icon": {
44
+ "16": "assets/icons/icon16.png",
45
+ "32": "assets/icons/icon32.png",
46
+ "48": "assets/icons/icon48.png",
47
+ "128": "assets/icons/icon128.png"
48
+ },
49
+ "default_popup": "bootstrap/popup.html"
50
+ }
51
+ }
@@ -0,0 +1,26 @@
1
+ body {
2
+ width: 328px;
3
+ margin: 0;
4
+ padding: 16px;
5
+ color: #e8ecef;
6
+ background: #171918;
7
+ font: 13px/1.45 -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
8
+ }
9
+ h1 { margin: 0 0 12px; font-size: 16px; }
10
+ p { margin: 8px 0 0; }
11
+ .version-status, .section-head, .update-actions { display: flex; align-items: center; gap: 8px; }
12
+ .version-status { margin-bottom: 12px; color: #a8aeaa; font-size: 12px; }
13
+ .section-head { justify-content: space-between; }
14
+ .status-icon { display: inline-flex; min-width: 24px; min-height: 24px; align-items: center; justify-content: center; border-radius: 999px; color: #fff; font: 10px/1 ui-monospace, monospace; }
15
+ .status-icon.compatible { background: #397d50; }
16
+ .status-icon.update-available { background: #9b6a26; }
17
+ .status-icon.incompatible { background: #a84038; }
18
+ button { width: 100%; border: 1px solid #5b8fc9; background: #2f6eae; color: #fff; border-radius: 7px; padding: 8px 10px; cursor: pointer; }
19
+ button.secondary { margin-top: 8px; border-color: #3c4440; background: #242826; color: #dce1de; }
20
+ button.quiet { margin-top: 8px; border-color: transparent; background: transparent; color: #b8bfba; }
21
+ .updates, .install { margin-top: 14px; padding: 11px; border: 1px solid #303532; border-radius: 9px; background: #1d201e; }
22
+ .install[hidden], button[hidden] { display: none; }
23
+ .update-state { color: #83cf96; font-size: 11px; text-transform: capitalize; }
24
+ .muted { color: #939a96; font-size: 12px; }
25
+ .update-actions > button { flex: 1; }
26
+ code { display: block; margin-top: 8px; padding: 8px; overflow: auto; border-radius: 6px; background: #111312; color: #dce1de; white-space: pre-wrap; word-break: break-word; font: 11px/1.45 ui-monospace, monospace; }
@@ -0,0 +1,38 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Codex Overleaf Link</title>
6
+ <link rel="stylesheet" href="popup.css">
7
+ </head>
8
+ <body>
9
+ <h1>Codex Overleaf Link</h1>
10
+ <div class="version-status">
11
+ <span id="compat-status-icon" class="status-icon incompatible" title="Native host incompatible">X</span>
12
+ <span id="version-pair">Extension unknown / Native unknown</span>
13
+ </div>
14
+ <button id="open-panel">Open panel in Overleaf</button>
15
+ <p id="status">Use this on an Overleaf project tab.</p>
16
+ <section class="updates" aria-labelledby="updates-title">
17
+ <div class="section-head">
18
+ <strong id="updates-title">Stable updates</strong>
19
+ <span id="update-state" class="update-state">Checking</span>
20
+ </div>
21
+ <p id="update-versions">Current unknown · Latest unknown</p>
22
+ <p id="update-detail" class="muted">Automatic updates apply when Overleaf is saved and idle.</p>
23
+ <div class="update-actions">
24
+ <button id="check-update" class="secondary" type="button">Check now</button>
25
+ <button id="postpone-update" class="quiet" type="button" hidden>Later</button>
26
+ </div>
27
+ </section>
28
+ <div id="native-install" class="install" hidden>
29
+ <strong>Native host attention required</strong>
30
+ <p>Run this command in Terminal, then reload this extension in Chrome.</p>
31
+ <code id="install-command"></code>
32
+ <button id="copy-install-command" class="secondary" type="button">Copy install command</button>
33
+ </div>
34
+ <script src="../runtime/src/shared/compatibility.js"></script>
35
+ <script src="../runtime/src/popup.js"></script>
36
+ <script src="popup.js"></script>
37
+ </body>
38
+ </html>
@@ -0,0 +1,44 @@
1
+ 'use strict';
2
+
3
+ const updateState = document.getElementById('update-state');
4
+ const updateVersions = document.getElementById('update-versions');
5
+ const updateDetail = document.getElementById('update-detail');
6
+ const checkButton = document.getElementById('check-update');
7
+ const postponeButton = document.getElementById('postpone-update');
8
+
9
+ checkButton.addEventListener('click', async () => {
10
+ checkButton.disabled = true;
11
+ updateState.textContent = 'Checking';
12
+ await chrome.runtime.sendMessage({ type: 'codex-overleaf/update-check-now' }).catch(() => null);
13
+ checkButton.disabled = false;
14
+ await refreshUpdateState();
15
+ });
16
+
17
+ postponeButton.addEventListener('click', async () => {
18
+ await chrome.runtime.sendMessage({ type: 'codex-overleaf/update-postpone' }).catch(() => null);
19
+ await refreshUpdateState();
20
+ });
21
+
22
+ refreshUpdateState();
23
+
24
+ async function refreshUpdateState() {
25
+ const state = await chrome.runtime.sendMessage({ type: 'codex-overleaf/update-get-state' }).catch(() => null);
26
+ if (!state) {
27
+ updateState.textContent = 'Unavailable';
28
+ return;
29
+ }
30
+ updateState.textContent = String(state.state || 'idle').replaceAll('_', ' ');
31
+ updateVersions.textContent = 'Current v' + (state.currentVersion || 'unknown') + ' · Latest v' + (state.latestVersion || 'unknown');
32
+ postponeButton.hidden = !['update_available', 'downloading', 'verifying', 'staged', 'waiting_for_idle'].includes(state.state);
33
+ if (state.managed === false) {
34
+ updateDetail.textContent = 'Run install-managed once to enable automatic extension and native-host updates.';
35
+ } else if (state.state === 'waiting_for_idle') {
36
+ updateDetail.textContent = 'Downloaded and verified. Waiting until every Overleaf tab is saved and idle.';
37
+ } else if (state.state === 'rolled_back') {
38
+ updateDetail.textContent = 'The previous version was restored after a failed health check.';
39
+ } else if (state.state === 'committed') {
40
+ updateDetail.textContent = 'The extension and native host were updated together.';
41
+ } else {
42
+ updateDetail.textContent = 'Automatic stable updates apply when Overleaf is saved and idle.';
43
+ }
44
+ }
@@ -0,0 +1,2 @@
1
+ 'use strict';
2
+ globalThis.__CODEX_OVERLEAF_RUNTIME_PREFIX__ = 'runtime/';
@@ -0,0 +1,60 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "matches": [
4
+ "https://www.overleaf.com/project/*",
5
+ "https://overleaf.com/project/*"
6
+ ],
7
+ "js": [
8
+ "src/shared/summary.js",
9
+ "src/shared/failureReasons.js",
10
+ "src/shared/agentTranscript.js",
11
+ "src/shared/reviewing.js",
12
+ "src/shared/projectFiles.js",
13
+ "src/shared/lineReferences.js",
14
+ "src/shared/undoOperations.js",
15
+ "src/shared/otText.js",
16
+ "src/shared/i18n.js",
17
+ "src/shared/models.js",
18
+ "src/shared/sessionState.js",
19
+ "src/shared/storageKeys.js",
20
+ "src/shared/staleGuard.js",
21
+ "src/shared/storageDb.js",
22
+ "src/shared/storageMigration.js",
23
+ "src/shared/compileAdapter.js",
24
+ "src/shared/compatibility.js",
25
+ "src/shared/governanceRules.js",
26
+ "src/shared/sensitiveScan.js",
27
+ "src/shared/auditRecords.js",
28
+ "src/content/nativeChannel.js",
29
+ "src/content/writebackController.js",
30
+ "src/content/reviewHunks.js",
31
+ "src/content/diffReviewPanel.js",
32
+ "src/content/contextTray.js",
33
+ "src/content/localSkillsPanel.js",
34
+ "src/content/runController.js",
35
+ "src/content/mirrorHealth.js",
36
+ "src/content/otWarmMirrorController.js",
37
+ "src/content/composerAttachments.js",
38
+ "src/content/panelRenderer.js",
39
+ "src/content/sessionPanel.js",
40
+ "src/content/settingsPanel.js",
41
+ "src/content/diagnosticsPanel.js",
42
+ "src/content/composerPanel.js",
43
+ "src/content/themeController.js",
44
+ "src/content/markdownText.js",
45
+ "src/content/diagnosticsController.js",
46
+ "src/content/runTimelineView.js",
47
+ "src/content/sessionManager.js",
48
+ "src/content/applyResultFormatters.js",
49
+ "src/content/modelPicker.js",
50
+ "src/content/recentProjects.js",
51
+ "src/content/otWarmMirror.js",
52
+ "src/content/writebackOrchestrator.js",
53
+ "src/content/panelMaintenance.js",
54
+ "src/content/updateIdle.js",
55
+ "src/content/contentRuntime.js",
56
+ "src/contentScript.js"
57
+ ],
58
+ "css": ["styles/panel.css"],
59
+ "runAt": "document_idle"
60
+ }