codex-overleaf-link 2.4.1 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/README.md +272 -314
  2. package/README.zh-CN.md +287 -329
  3. package/extension/bootstrap/background.js +47 -10
  4. package/extension/bootstrap/manifest.template.json +9 -4
  5. package/extension/bootstrap/popup.html +10 -16
  6. package/extension/bootstrap/update.js +25 -2
  7. package/extension/runtime-manifest.json +3 -1
  8. package/extension/src/background.js +28 -3
  9. package/extension/src/backgroundSharedSessions.js +380 -0
  10. package/extension/src/backgroundUpdateCoordinator.js +442 -379
  11. package/extension/src/content/activeTurnControl.js +8 -0
  12. package/extension/src/content/assetTransferBroker.js +186 -12
  13. package/extension/src/content/changeHistoryView.js +175 -0
  14. package/extension/src/content/composerAttachments.js +24 -22
  15. package/extension/src/content/composerPanel.js +23 -8
  16. package/extension/src/content/contentRuntime.js +507 -507
  17. package/extension/src/content/diagnosticsController.js +1 -2
  18. package/extension/src/content/diagnosticsExport.js +222 -0
  19. package/extension/src/content/diagnosticsPanel.js +48 -19
  20. package/extension/src/content/diffReviewPanel.js +8 -5
  21. package/extension/src/content/generated/content.bundle.js +8330 -1349
  22. package/extension/src/content/generated/content.bundle.meta.json +22 -3
  23. package/extension/src/content/legacyGlobalRegistry.js +19 -1
  24. package/extension/src/content/localSkillsPanel.js +42 -7
  25. package/extension/src/content/markdownDomRenderer.js +9 -4
  26. package/extension/src/content/modelPicker.js +1 -1
  27. package/extension/src/content/pageBridgeClient.js +18 -3
  28. package/extension/src/content/panelMaintenance.js +48 -121
  29. package/extension/src/content/panelRenderer.js +4 -0
  30. package/extension/src/content/pendingInputView.js +109 -76
  31. package/extension/src/content/providerSettingsCoordinator.js +17 -6
  32. package/extension/src/content/providerSettingsDialog.js +661 -108
  33. package/extension/src/content/recentProjects.js +10 -1
  34. package/extension/src/content/runActivitySummary.js +631 -0
  35. package/extension/src/content/runController.js +3 -1
  36. package/extension/src/content/runFailureNotice.js +14 -1
  37. package/extension/src/content/runGuidanceController.js +4 -3
  38. package/extension/src/content/runPresence.js +306 -0
  39. package/extension/src/content/runQueueScheduler.js +2 -1
  40. package/extension/src/content/runResultActions.js +123 -3
  41. package/extension/src/content/runTimelineView.js +186 -154
  42. package/extension/src/content/selectionContextView.js +300 -0
  43. package/extension/src/content/sessionPersistence.js +6 -1
  44. package/extension/src/content/settingsPanel.js +77 -52
  45. package/extension/src/content/settingsWorkbench.js +374 -0
  46. package/extension/src/content/sharedSessionViewSync.js +72 -0
  47. package/extension/src/content/subagentActivityView.js +195 -0
  48. package/extension/src/content/trackedChangeCaptureController.js +7 -3
  49. package/extension/src/content/updateNotice.js +121 -50
  50. package/extension/src/content/writebackController.js +257 -0
  51. package/extension/src/content/writebackOrchestrator.js +146 -141
  52. package/extension/src/content/writebackPlan.js +231 -0
  53. package/extension/src/content/writebackRecovery.js +122 -0
  54. package/extension/src/content/writingStyleSettings.js +576 -0
  55. package/extension/src/content/writtenChangesView.js +152 -0
  56. package/extension/src/page/binaryAssetUploader.js +97 -19
  57. package/extension/src/page/overleafProjectSnapshot.js +1 -0
  58. package/extension/src/page/referenceProjects.js +148 -0
  59. package/extension/src/page/saveState.js +14 -2
  60. package/extension/src/page/snapshotRouter.js +44 -13
  61. package/extension/src/page/textCoordinates.js +102 -0
  62. package/extension/src/page/textFileCreator.js +350 -59
  63. package/extension/src/page/trackedChangeCapture.js +42 -56
  64. package/extension/src/page/trackedChangeOwnership.js +198 -0
  65. package/extension/src/page/trackedChangeReplay.js +164 -0
  66. package/extension/src/page/trackedChangesLifecycle.js +135 -149
  67. package/extension/src/page/treeOperations.js +26 -2
  68. package/extension/src/page/writebackReceiptJournal.js +112 -0
  69. package/extension/src/page/writebackRouter.js +175 -135
  70. package/extension/src/pageBridge.js +56 -101
  71. package/extension/src/popup.js +203 -59
  72. package/extension/src/shared/agentTranscript.js +18 -4
  73. package/extension/src/shared/auditRecords.js +71 -0
  74. package/extension/src/shared/changeHistoryModel.js +94 -0
  75. package/extension/src/shared/compatibility.js +1 -1
  76. package/extension/src/shared/compileAdapter.js +42 -0
  77. package/extension/src/shared/failureReasons.js +20 -0
  78. package/extension/src/shared/globalPreferences.js +1 -1
  79. package/extension/src/shared/i18n.js +93 -25
  80. package/extension/src/shared/managedUpdateProjection.js +6 -3
  81. package/extension/src/shared/pageRpcContract.js +7 -1
  82. package/extension/src/shared/providerProfiles.js +109 -0
  83. package/extension/src/shared/runActivityModel.js +361 -0
  84. package/extension/src/shared/runExecutionSnapshot.js +8 -2
  85. package/extension/src/shared/runExecutionSnapshotCodec.js +16 -4
  86. package/extension/src/shared/scopedPersistenceBrowserAdapter.js +6 -3
  87. package/extension/src/shared/selectionContext.js +28 -0
  88. package/extension/src/shared/sessionState.js +97 -6
  89. package/extension/src/shared/sharedSessionBridge.js +288 -0
  90. package/extension/src/shared/storageDb.js +22 -55
  91. package/extension/src/shared/storageMigration.js +3 -0
  92. package/extension/src/shared/storageRunActions.js +10 -4
  93. package/extension/src/shared/storageValuePruning.js +40 -0
  94. package/extension/src/shared/subagentActivityModel.js +174 -0
  95. package/extension/src/shared/undoOperations.js +87 -0
  96. package/extension/src/shared/updateConsent.js +37 -8
  97. package/extension/src/shared/writebackIntent.js +62 -0
  98. package/extension/src/shared/writebackSettlement.js +29 -10
  99. package/extension/src/shared/writingStyle.js +33 -0
  100. package/extension/styles/panel.css +1972 -384
  101. package/extension/styles/popup.css +110 -0
  102. package/native-host/src/anthropicBridgeRequest.js +2 -1
  103. package/native-host/src/codexModelRecovery.js +107 -0
  104. package/native-host/src/codexPromptAssembly.js +2 -0
  105. package/native-host/src/codexProviderLaunch.js +3 -3
  106. package/native-host/src/codexRuntimeIdentity.js +1 -0
  107. package/native-host/src/codexSessionRunner.js +106 -140
  108. package/native-host/src/codexSessionTiming.js +3 -0
  109. package/native-host/src/managedInstall.js +5 -4
  110. package/native-host/src/nativeEnvironment.js +70 -0
  111. package/native-host/src/nativeQuotas.js +15 -8
  112. package/native-host/src/overleafWorkspaceRules.js +16 -0
  113. package/native-host/src/processStopBarrier.js +80 -0
  114. package/native-host/src/providerModelCatalog.js +4 -3
  115. package/native-host/src/providerProfile.js +13 -1
  116. package/native-host/src/providerReasoning.js +9 -5
  117. package/native-host/src/providerStore.js +4 -0
  118. package/native-host/src/releaseTransport.js +14 -5
  119. package/native-host/src/selectionScope.js +58 -0
  120. package/native-host/src/skills/parallel-subagents/SKILL.md +31 -3
  121. package/native-host/src/skills/writing-style-builder/SKILL.md +146 -0
  122. package/native-host/src/subagentBroker.js +102 -98
  123. package/native-host/src/subagentTelemetry.js +316 -0
  124. package/native-host/src/subagentWorkspace.js +103 -0
  125. package/native-host/src/subagentWorkspacePath.js +31 -0
  126. package/native-host/src/taskRunnerRuntime.js +55 -5
  127. package/native-host/src/turnAttachments.js +113 -0
  128. package/native-host/src/updateManager.js +122 -12
  129. package/native-host/src/updateNetworkControl.js +75 -0
  130. package/native-host/src/updateTrust.js +21 -2
  131. package/native-host/src/vendor/pdfjs/LICENSE +177 -0
  132. package/native-host/src/vendor/pdfjs/SOURCE.txt +3 -0
  133. package/native-host/src/vendor/pdfjs/cmaps/78-EUC-H.bcmap +0 -0
  134. package/native-host/src/vendor/pdfjs/cmaps/78-EUC-V.bcmap +0 -0
  135. package/native-host/src/vendor/pdfjs/cmaps/78-H.bcmap +0 -0
  136. package/native-host/src/vendor/pdfjs/cmaps/78-RKSJ-H.bcmap +0 -0
  137. package/native-host/src/vendor/pdfjs/cmaps/78-RKSJ-V.bcmap +0 -0
  138. package/native-host/src/vendor/pdfjs/cmaps/78-V.bcmap +0 -0
  139. package/native-host/src/vendor/pdfjs/cmaps/78ms-RKSJ-H.bcmap +0 -0
  140. package/native-host/src/vendor/pdfjs/cmaps/78ms-RKSJ-V.bcmap +0 -0
  141. package/native-host/src/vendor/pdfjs/cmaps/83pv-RKSJ-H.bcmap +0 -0
  142. package/native-host/src/vendor/pdfjs/cmaps/90ms-RKSJ-H.bcmap +0 -0
  143. package/native-host/src/vendor/pdfjs/cmaps/90ms-RKSJ-V.bcmap +0 -0
  144. package/native-host/src/vendor/pdfjs/cmaps/90msp-RKSJ-H.bcmap +0 -0
  145. package/native-host/src/vendor/pdfjs/cmaps/90msp-RKSJ-V.bcmap +0 -0
  146. package/native-host/src/vendor/pdfjs/cmaps/90pv-RKSJ-H.bcmap +0 -0
  147. package/native-host/src/vendor/pdfjs/cmaps/90pv-RKSJ-V.bcmap +0 -0
  148. package/native-host/src/vendor/pdfjs/cmaps/Add-H.bcmap +0 -0
  149. package/native-host/src/vendor/pdfjs/cmaps/Add-RKSJ-H.bcmap +0 -0
  150. package/native-host/src/vendor/pdfjs/cmaps/Add-RKSJ-V.bcmap +0 -0
  151. package/native-host/src/vendor/pdfjs/cmaps/Add-V.bcmap +0 -0
  152. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-0.bcmap +0 -0
  153. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-1.bcmap +0 -0
  154. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-2.bcmap +0 -0
  155. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-3.bcmap +0 -0
  156. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-4.bcmap +0 -0
  157. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-5.bcmap +0 -0
  158. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-6.bcmap +0 -0
  159. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
  160. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-0.bcmap +0 -0
  161. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-1.bcmap +0 -0
  162. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-2.bcmap +0 -0
  163. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-3.bcmap +0 -0
  164. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-4.bcmap +0 -0
  165. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-5.bcmap +0 -0
  166. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
  167. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-0.bcmap +0 -0
  168. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-1.bcmap +0 -0
  169. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-2.bcmap +0 -0
  170. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-3.bcmap +0 -0
  171. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-4.bcmap +0 -0
  172. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-5.bcmap +0 -0
  173. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-6.bcmap +0 -0
  174. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
  175. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-0.bcmap +0 -0
  176. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-1.bcmap +0 -0
  177. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-2.bcmap +0 -0
  178. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
  179. package/native-host/src/vendor/pdfjs/cmaps/B5-H.bcmap +0 -0
  180. package/native-host/src/vendor/pdfjs/cmaps/B5-V.bcmap +0 -0
  181. package/native-host/src/vendor/pdfjs/cmaps/B5pc-H.bcmap +0 -0
  182. package/native-host/src/vendor/pdfjs/cmaps/B5pc-V.bcmap +0 -0
  183. package/native-host/src/vendor/pdfjs/cmaps/CNS-EUC-H.bcmap +0 -0
  184. package/native-host/src/vendor/pdfjs/cmaps/CNS-EUC-V.bcmap +0 -0
  185. package/native-host/src/vendor/pdfjs/cmaps/CNS1-H.bcmap +0 -0
  186. package/native-host/src/vendor/pdfjs/cmaps/CNS1-V.bcmap +0 -0
  187. package/native-host/src/vendor/pdfjs/cmaps/CNS2-H.bcmap +0 -0
  188. package/native-host/src/vendor/pdfjs/cmaps/CNS2-V.bcmap +3 -0
  189. package/native-host/src/vendor/pdfjs/cmaps/ETHK-B5-H.bcmap +0 -0
  190. package/native-host/src/vendor/pdfjs/cmaps/ETHK-B5-V.bcmap +0 -0
  191. package/native-host/src/vendor/pdfjs/cmaps/ETen-B5-H.bcmap +0 -0
  192. package/native-host/src/vendor/pdfjs/cmaps/ETen-B5-V.bcmap +0 -0
  193. package/native-host/src/vendor/pdfjs/cmaps/ETenms-B5-H.bcmap +3 -0
  194. package/native-host/src/vendor/pdfjs/cmaps/ETenms-B5-V.bcmap +0 -0
  195. package/native-host/src/vendor/pdfjs/cmaps/EUC-H.bcmap +0 -0
  196. package/native-host/src/vendor/pdfjs/cmaps/EUC-V.bcmap +0 -0
  197. package/native-host/src/vendor/pdfjs/cmaps/Ext-H.bcmap +0 -0
  198. package/native-host/src/vendor/pdfjs/cmaps/Ext-RKSJ-H.bcmap +0 -0
  199. package/native-host/src/vendor/pdfjs/cmaps/Ext-RKSJ-V.bcmap +0 -0
  200. package/native-host/src/vendor/pdfjs/cmaps/Ext-V.bcmap +0 -0
  201. package/native-host/src/vendor/pdfjs/cmaps/GB-EUC-H.bcmap +0 -0
  202. package/native-host/src/vendor/pdfjs/cmaps/GB-EUC-V.bcmap +0 -0
  203. package/native-host/src/vendor/pdfjs/cmaps/GB-H.bcmap +4 -0
  204. package/native-host/src/vendor/pdfjs/cmaps/GB-V.bcmap +0 -0
  205. package/native-host/src/vendor/pdfjs/cmaps/GBK-EUC-H.bcmap +0 -0
  206. package/native-host/src/vendor/pdfjs/cmaps/GBK-EUC-V.bcmap +0 -0
  207. package/native-host/src/vendor/pdfjs/cmaps/GBK2K-H.bcmap +0 -0
  208. package/native-host/src/vendor/pdfjs/cmaps/GBK2K-V.bcmap +0 -0
  209. package/native-host/src/vendor/pdfjs/cmaps/GBKp-EUC-H.bcmap +0 -0
  210. package/native-host/src/vendor/pdfjs/cmaps/GBKp-EUC-V.bcmap +0 -0
  211. package/native-host/src/vendor/pdfjs/cmaps/GBT-EUC-H.bcmap +0 -0
  212. package/native-host/src/vendor/pdfjs/cmaps/GBT-EUC-V.bcmap +0 -0
  213. package/native-host/src/vendor/pdfjs/cmaps/GBT-H.bcmap +0 -0
  214. package/native-host/src/vendor/pdfjs/cmaps/GBT-V.bcmap +0 -0
  215. package/native-host/src/vendor/pdfjs/cmaps/GBTpc-EUC-H.bcmap +0 -0
  216. package/native-host/src/vendor/pdfjs/cmaps/GBTpc-EUC-V.bcmap +0 -0
  217. package/native-host/src/vendor/pdfjs/cmaps/GBpc-EUC-H.bcmap +0 -0
  218. package/native-host/src/vendor/pdfjs/cmaps/GBpc-EUC-V.bcmap +0 -0
  219. package/native-host/src/vendor/pdfjs/cmaps/H.bcmap +0 -0
  220. package/native-host/src/vendor/pdfjs/cmaps/HKdla-B5-H.bcmap +0 -0
  221. package/native-host/src/vendor/pdfjs/cmaps/HKdla-B5-V.bcmap +0 -0
  222. package/native-host/src/vendor/pdfjs/cmaps/HKdlb-B5-H.bcmap +0 -0
  223. package/native-host/src/vendor/pdfjs/cmaps/HKdlb-B5-V.bcmap +0 -0
  224. package/native-host/src/vendor/pdfjs/cmaps/HKgccs-B5-H.bcmap +0 -0
  225. package/native-host/src/vendor/pdfjs/cmaps/HKgccs-B5-V.bcmap +0 -0
  226. package/native-host/src/vendor/pdfjs/cmaps/HKm314-B5-H.bcmap +0 -0
  227. package/native-host/src/vendor/pdfjs/cmaps/HKm314-B5-V.bcmap +0 -0
  228. package/native-host/src/vendor/pdfjs/cmaps/HKm471-B5-H.bcmap +0 -0
  229. package/native-host/src/vendor/pdfjs/cmaps/HKm471-B5-V.bcmap +0 -0
  230. package/native-host/src/vendor/pdfjs/cmaps/HKscs-B5-H.bcmap +0 -0
  231. package/native-host/src/vendor/pdfjs/cmaps/HKscs-B5-V.bcmap +0 -0
  232. package/native-host/src/vendor/pdfjs/cmaps/Hankaku.bcmap +0 -0
  233. package/native-host/src/vendor/pdfjs/cmaps/Hiragana.bcmap +0 -0
  234. package/native-host/src/vendor/pdfjs/cmaps/KSC-EUC-H.bcmap +0 -0
  235. package/native-host/src/vendor/pdfjs/cmaps/KSC-EUC-V.bcmap +0 -0
  236. package/native-host/src/vendor/pdfjs/cmaps/KSC-H.bcmap +0 -0
  237. package/native-host/src/vendor/pdfjs/cmaps/KSC-Johab-H.bcmap +0 -0
  238. package/native-host/src/vendor/pdfjs/cmaps/KSC-Johab-V.bcmap +0 -0
  239. package/native-host/src/vendor/pdfjs/cmaps/KSC-V.bcmap +0 -0
  240. package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-H.bcmap +0 -0
  241. package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
  242. package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
  243. package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-V.bcmap +0 -0
  244. package/native-host/src/vendor/pdfjs/cmaps/KSCpc-EUC-H.bcmap +0 -0
  245. package/native-host/src/vendor/pdfjs/cmaps/KSCpc-EUC-V.bcmap +0 -0
  246. package/native-host/src/vendor/pdfjs/cmaps/Katakana.bcmap +0 -0
  247. package/native-host/src/vendor/pdfjs/cmaps/LICENSE +36 -0
  248. package/native-host/src/vendor/pdfjs/cmaps/NWP-H.bcmap +0 -0
  249. package/native-host/src/vendor/pdfjs/cmaps/NWP-V.bcmap +0 -0
  250. package/native-host/src/vendor/pdfjs/cmaps/RKSJ-H.bcmap +0 -0
  251. package/native-host/src/vendor/pdfjs/cmaps/RKSJ-V.bcmap +0 -0
  252. package/native-host/src/vendor/pdfjs/cmaps/Roman.bcmap +0 -0
  253. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UCS2-H.bcmap +0 -0
  254. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UCS2-V.bcmap +0 -0
  255. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF16-H.bcmap +0 -0
  256. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF16-V.bcmap +0 -0
  257. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF32-H.bcmap +0 -0
  258. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF32-V.bcmap +0 -0
  259. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF8-H.bcmap +0 -0
  260. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF8-V.bcmap +0 -0
  261. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UCS2-H.bcmap +0 -0
  262. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UCS2-V.bcmap +0 -0
  263. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF16-H.bcmap +0 -0
  264. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF16-V.bcmap +0 -0
  265. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF32-H.bcmap +0 -0
  266. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF32-V.bcmap +0 -0
  267. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF8-H.bcmap +0 -0
  268. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF8-V.bcmap +0 -0
  269. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-H.bcmap +0 -0
  270. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
  271. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
  272. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-V.bcmap +0 -0
  273. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF16-H.bcmap +0 -0
  274. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF16-V.bcmap +0 -0
  275. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF32-H.bcmap +0 -0
  276. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF32-V.bcmap +0 -0
  277. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF8-H.bcmap +0 -0
  278. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF8-V.bcmap +0 -0
  279. package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
  280. package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
  281. package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
  282. package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
  283. package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
  284. package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
  285. package/native-host/src/vendor/pdfjs/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
  286. package/native-host/src/vendor/pdfjs/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
  287. package/native-host/src/vendor/pdfjs/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
  288. package/native-host/src/vendor/pdfjs/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
  289. package/native-host/src/vendor/pdfjs/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
  290. package/native-host/src/vendor/pdfjs/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
  291. package/native-host/src/vendor/pdfjs/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
  292. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UCS2-H.bcmap +0 -0
  293. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UCS2-V.bcmap +0 -0
  294. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF16-H.bcmap +0 -0
  295. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF16-V.bcmap +0 -0
  296. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF32-H.bcmap +0 -0
  297. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF32-V.bcmap +0 -0
  298. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF8-H.bcmap +0 -0
  299. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF8-V.bcmap +0 -0
  300. package/native-host/src/vendor/pdfjs/cmaps/V.bcmap +0 -0
  301. package/native-host/src/vendor/pdfjs/cmaps/WP-Symbol.bcmap +0 -0
  302. package/native-host/src/vendor/pdfjs/pdf.mjs +26740 -0
  303. package/native-host/src/vendor/pdfjs/pdf.worker.mjs +62201 -0
  304. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitDingbats.pfb +0 -0
  305. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixed.pfb +0 -0
  306. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixedBold.pfb +0 -0
  307. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
  308. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixedItalic.pfb +0 -0
  309. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerif.pfb +0 -0
  310. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerifBold.pfb +0 -0
  311. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
  312. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerifItalic.pfb +0 -0
  313. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSymbol.pfb +0 -0
  314. package/native-host/src/vendor/pdfjs/standard_fonts/LICENSE_FOXIT +27 -0
  315. package/native-host/src/vendor/pdfjs/standard_fonts/LICENSE_LIBERATION +102 -0
  316. package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-Bold.ttf +0 -0
  317. package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
  318. package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-Italic.ttf +0 -0
  319. package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-Regular.ttf +0 -0
  320. package/native-host/src/writingStyleEvidence.js +102 -0
  321. package/native-host/src/writingStylePdfWorker.js +35 -0
  322. package/native-host/src/writingStyleProfile.js +165 -0
  323. package/native-host/src/writingStyleRuntime.js +447 -0
  324. package/package.json +1 -1
@@ -6,15 +6,19 @@ const UPDATE_STATE_KEY = 'codex-overleaf-managed-update-state-v1';
6
6
  const UPDATE_RELOAD_TABS_KEY = 'codex-overleaf-managed-update-tabs-v1';
7
7
  const CHECK_ALARM = 'codex-overleaf-stable-update-check';
8
8
  const IDLE_ALARM = 'codex-overleaf-staged-update-idle';
9
- const OVERLEAF_EDITOR_MATCHES = [
10
- 'https://www.overleaf.com/project/*',
11
- 'https://overleaf.com/project/*'
12
- ];
13
- const OVERLEAF_MATCHES = [
9
+ // Built-in sites. The replaceable runtime manifest may list more; any extra
10
+ // site is used only after Chrome reports its permission as granted, so a later
11
+ // release can add an Overleaf site without changing this Bootstrap file.
12
+ const BUILT_IN_OVERLEAF_MATCHES = Object.freeze([
14
13
  'https://www.overleaf.com/project',
15
14
  'https://overleaf.com/project',
16
- ...OVERLEAF_EDITOR_MATCHES
17
- ];
15
+ 'https://cn.overleaf.com/project',
16
+ 'https://www.overleaf.com/project/*',
17
+ 'https://overleaf.com/project/*',
18
+ 'https://cn.overleaf.com/project/*'
19
+ ]);
20
+ let OVERLEAF_MATCHES = [...BUILT_IN_OVERLEAF_MATCHES];
21
+ let OVERLEAF_HOSTS = hostsOf(OVERLEAF_MATCHES);
18
22
  const APPLYING_STATES = new Set(['applying', 'awaiting_health', 'rolling_back']);
19
23
  const FAST_IDLE_RETRY_BLOCKERS = new Set(['recent_user_activity', 'save_state_not_stable']);
20
24
  const FAST_IDLE_RETRY_MS = 4000;
@@ -58,6 +62,10 @@ chrome.runtime.onMessage.addListener((message, _sender, sendResponse) => {
58
62
  return undefined;
59
63
  });
60
64
 
65
+ // A newly granted site starts working without a reload or reinstall.
66
+ chrome.permissions?.onAdded?.addListener(() => { registerManagedRuntime().catch(() => {}); });
67
+ chrome.permissions?.onRemoved?.addListener(() => { registerManagedRuntime().catch(() => {}); });
68
+
61
69
  chrome.alarms.onAlarm.addListener(alarm => {
62
70
  if (alarm.name === CHECK_ALARM) {
63
71
  checkAndStage().catch(() => {});
@@ -105,6 +113,10 @@ async function registerManagedRuntime() {
105
113
  }
106
114
  const manifest = await response.json();
107
115
  validateRuntimeManifest(manifest);
116
+ const matches = await grantedMatches(manifest.matches);
117
+ if (!matches.length) throw new Error('No Overleaf site in the runtime manifest is permitted.');
118
+ OVERLEAF_MATCHES = [...new Set([...BUILT_IN_OVERLEAF_MATCHES, ...matches])];
119
+ OVERLEAF_HOSTS = hostsOf(OVERLEAF_MATCHES);
108
120
  managedRuntimeAssets = {
109
121
  js: ['bootstrap/runtimeContext.js', ...manifest.js.map(value => 'runtime/' + value)],
110
122
  css: manifest.css.map(value => 'runtime/' + value)
@@ -115,7 +127,7 @@ async function registerManagedRuntime() {
115
127
  }
116
128
  await chrome.scripting.registerContentScripts([{
117
129
  id: RUNTIME_SCRIPT_ID,
118
- matches: manifest.matches,
130
+ matches,
119
131
  js: managedRuntimeAssets.js,
120
132
  css: managedRuntimeAssets.css,
121
133
  runAt: manifest.runAt || 'document_idle',
@@ -127,7 +139,7 @@ function validateRuntimeManifest(manifest) {
127
139
  if (!manifest || manifest.schemaVersion !== 1 || !Array.isArray(manifest.matches) || !Array.isArray(manifest.js) || !Array.isArray(manifest.css)) {
128
140
  throw new Error('Managed runtime manifest is invalid.');
129
141
  }
130
- if (!manifest.matches.length || manifest.matches.some(value => !OVERLEAF_MATCHES.includes(value))) {
142
+ if (!manifest.matches.length || manifest.matches.some(value => !isProjectMatch(value))) {
131
143
  throw new Error('Managed runtime match patterns are invalid.');
132
144
  }
133
145
  const paths = [...manifest.js, ...manifest.css];
@@ -303,11 +315,36 @@ async function probeTabIdle(tab) {
303
315
  return { idle: false, blockers: ['tab_probe_unavailable'] };
304
316
  }
305
317
 
318
+ // Only project pages on overleaf.com or one of its subdomains: the same scope
319
+ // as optional_host_permissions and web_accessible_resources in the manifest.
320
+ function isProjectMatch(value) {
321
+ return typeof value === 'string'
322
+ && /^https:\/\/(?:[a-z0-9-]+\.)*overleaf\.com\/project(?:\/\*)?$/.test(value);
323
+ }
324
+
325
+ function hostsOf(matches) {
326
+ return new Set(matches.map(value => {
327
+ try { return new URL(value.replace(/\*$/, '')).host; } catch (_error) { return ''; }
328
+ }).filter(Boolean));
329
+ }
330
+
331
+ // Built-in sites are granted at install; a site a later runtime adds only
332
+ // counts once the user has approved Chrome's prompt for it (see the popup).
333
+ async function grantedMatches(matches) {
334
+ const result = [];
335
+ for (const value of matches) {
336
+ if (BUILT_IN_OVERLEAF_MATCHES.includes(value)) { result.push(value); continue; }
337
+ const granted = await chrome.permissions.contains({ origins: [value] }).catch(() => false);
338
+ if (granted) result.push(value);
339
+ }
340
+ return result;
341
+ }
342
+
306
343
  function isEditorProjectTab(tab) {
307
344
  try {
308
345
  const url = new URL(tab?.url || '');
309
346
  return url.protocol === 'https:' &&
310
- (url.hostname === 'www.overleaf.com' || url.hostname === 'overleaf.com') &&
347
+ OVERLEAF_HOSTS.has(url.host) &&
311
348
  /^\/project\/[^/]+(?:\/|$)/.test(url.pathname);
312
349
  } catch (_error) {
313
350
  return false;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "Codex Overleaf Link",
4
- "version": "2.4.0",
4
+ "version": "2.5.0",
5
5
  "description": "Connect the active Overleaf project to a local Codex bridge.",
6
6
  "icons": {
7
7
  "16": "assets/icons/icon16.png",
@@ -20,7 +20,12 @@
20
20
  "https://www.overleaf.com/project",
21
21
  "https://overleaf.com/project",
22
22
  "https://www.overleaf.com/project/*",
23
- "https://overleaf.com/project/*"
23
+ "https://overleaf.com/project/*",
24
+ "https://cn.overleaf.com/project",
25
+ "https://cn.overleaf.com/project/*"
26
+ ],
27
+ "optional_host_permissions": [
28
+ "https://*.overleaf.com/*"
24
29
  ],
25
30
  "background": {
26
31
  "service_worker": "bootstrap/background.js"
@@ -36,8 +41,8 @@
36
41
  "runtime/src/pageBridge.js"
37
42
  ],
38
43
  "matches": [
39
- "https://www.overleaf.com/*",
40
- "https://overleaf.com/*"
44
+ "https://overleaf.com/*",
45
+ "https://*.overleaf.com/*"
41
46
  ]
42
47
  }
43
48
  ],
@@ -1,24 +1,18 @@
1
1
  <!doctype html>
2
- <html>
2
+ <html lang="en" class="popup-minimal-root" data-popup-theme="dark">
3
3
  <head>
4
4
  <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
5
6
  <title>Codex Overleaf Link</title>
6
- <link rel="stylesheet" href="popup.css">
7
+ <link id="popup-styles" rel="stylesheet" href="../runtime/styles/popup.css">
7
8
  </head>
8
- <body>
9
- <h1 class="popup-brand">Codex Overleaf Link</h1>
10
- <div class="version-status" data-popup-context>
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" data-popup-context>Open panel in Overleaf</button>
15
- <p id="status" data-popup-context>Use this on an Overleaf project tab.</p>
16
- <div id="native-install" class="install" data-popup-context hidden>
17
- <strong>Native host attention required</strong>
18
- <p>Run this command in Terminal, then reload this extension in Chrome.</p>
19
- <code id="install-command"></code>
20
- <button id="copy-install-command" class="secondary" type="button">Copy install command</button>
21
- </div>
9
+ <body class="popup-minimal">
10
+ <!-- The popup body is drawn by the replaceable runtime (runtime/src/popup.js),
11
+ so popup changes ship through normal updates. This shell only holds
12
+ the fallback shown if the runtime cannot load. -->
13
+ <main id="popup-shell" data-bootstrap-shell>
14
+ <p class="popup-note">Codex Overleaf Link could not load its runtime. Rerun the installer, then reload the extension.</p>
15
+ </main>
22
16
  <script src="../runtime/src/shared/compatibility.js"></script>
23
17
  <script src="../runtime/src/popup.js"></script>
24
18
  <script src="updateStatus.js"></script>
@@ -88,6 +88,7 @@
88
88
  up_to_date: ['Everything is up to date', 'Extension and Native Host are on the latest stable release.', 'Up to date', 'success'],
89
89
  checking: ['Checking for updates', 'Reading the latest signed stable release.', 'Checking', 'active'],
90
90
  update_available: ['A stable update is ready', 'Review the target version, then update when convenient.', 'Available', 'success'],
91
+ manual_install_required: ['This update needs a one-time reinstall', 'Update now cannot apply this release. Run the command below once, then reload the extension and refresh Overleaf. Your sessions, settings, provider keys and project mirrors are kept.', 'Reinstall', 'warning'],
91
92
  downloading: ['Downloading the signed release', 'The package is being fetched and verified before any files change.', 'Downloading', 'active'],
92
93
  staged: ['Update verified', 'The signed package is ready and waiting for a safe installation point.', 'Verified', 'active'],
93
94
  waiting: ['Waiting for a safe point', 'Active Overleaf work will finish before the runtime changes.', 'Waiting', 'warning'],
@@ -164,6 +165,12 @@
164
165
  { id: 'install', label: 'Update now', kind: 'primary' }
165
166
  ];
166
167
  }
168
+ if (phase === 'manual_install_required') {
169
+ return [
170
+ { id: 'later', label: 'Later', kind: 'quiet' },
171
+ { id: 'copy-command', label: 'Copy command', kind: 'primary' }
172
+ ];
173
+ }
167
174
  if (['failed', 'rolled_back'].includes(phase)) {
168
175
  return [
169
176
  { id: 'close', label: 'Close', kind: 'quiet' },
@@ -229,8 +236,14 @@
229
236
  ? 'The extension may restart briefly. This window will reconnect and restore the saved progress.'
230
237
  : 'This window can stay open while work continues elsewhere. Progress is saved automatically.';
231
238
 
232
- const technical = technicalText(currentView);
233
- elements.details.hidden = !technical || !['failed', 'rolled_back'].includes(presentation.phase);
239
+ // The signed reason and the exact reinstall command replace the generic
240
+ // detail; the command stays visible and selectable in the details box.
241
+ const manual = presentation.phase === 'manual_install_required';
242
+ const reason = manual ? String(currentView.manualReason?.en || currentView.manualReason?.zh || '').trim() : '';
243
+ if (reason) elements.detail.textContent = reason + ' ' + presentation.detail;
244
+ const technical = manual ? manualCommand(target) : technicalText(currentView);
245
+ elements.details.hidden = !technical || !['failed', 'rolled_back', 'manual_install_required'].includes(presentation.phase);
246
+ elements.details.open = manual || elements.details.open;
234
247
  elements.technicalMessage.textContent = technical;
235
248
  renderActions(presentation.phase);
236
249
  schedulePolling(presentation.phase);
@@ -286,8 +299,18 @@
286
299
  }, 1100);
287
300
  }
288
301
 
302
+ function manualCommand(version) {
303
+ const pinned = /^\d+\.\d+\.\d+$/.test(String(version || '')) ? version : 'latest';
304
+ return `npm exec --yes codex-overleaf-link@${pinned} -- install-managed`;
305
+ }
306
+
289
307
  async function runAction(action) {
290
308
  if (actionPending) return;
309
+ if (action === 'copy-command') {
310
+ const target = versionOf(currentView, ['latestVersion', 'targetVersion', 'availableVersion'], '');
311
+ await navigator.clipboard.writeText(manualCommand(target)).catch(() => {});
312
+ return;
313
+ }
291
314
  if (action === 'close') {
292
315
  window.close();
293
316
  return;
@@ -4,7 +4,9 @@
4
4
  "https://www.overleaf.com/project",
5
5
  "https://overleaf.com/project",
6
6
  "https://www.overleaf.com/project/*",
7
- "https://overleaf.com/project/*"
7
+ "https://overleaf.com/project/*",
8
+ "https://cn.overleaf.com/project",
9
+ "https://cn.overleaf.com/project/*"
8
10
  ],
9
11
  "js": [
10
12
  "src/content/generated/content.bundle.js"
@@ -20,6 +20,29 @@ if (!globalThis.CodexOverleafGlobalPreferences) {
20
20
  importScripts(runtimeBase ? chrome.runtime.getURL(`${runtimeBase}/src/shared/globalPreferences.js`) : 'shared/globalPreferences.js');
21
21
  }
22
22
  globalThis.CodexOverleafGlobalPreferences?.installBackground(chrome);
23
+ if (!globalThis.CodexOverleafStorageRunActions) {
24
+ const runtimeBase = String(globalThis.__CODEX_OVERLEAF_RUNTIME_BASE__ || '');
25
+ // The service worker has its own loading graph; the content bundle's
26
+ // registry and shared-module imports do not exist in this context.
27
+ const storageDependencies = [
28
+ ['CodexOverleafModuleRegistry', 'content/moduleRegistryKernel.js'],
29
+ ['CodexOverleafUndoOperations', 'shared/undoOperations.js'],
30
+ ['CodexOverleafSelectionContext', 'shared/selectionContext.js'],
31
+ ['CodexOverleafWritebackIntent', 'shared/writebackIntent.js'],
32
+ ['CodexOverleafWritingStyle', 'shared/writingStyle.js'],
33
+ ['CodexOverleafStorageRunActions', 'shared/storageRunActions.js']
34
+ ];
35
+ for (const [globalName, scriptPath] of storageDependencies) {
36
+ if (!globalThis[globalName]) {
37
+ importScripts(runtimeBase ? chrome.runtime.getURL(`${runtimeBase}/src/${scriptPath}`) : scriptPath);
38
+ }
39
+ }
40
+ }
41
+ if (!globalThis.CodexOverleafSharedSessionsBackground) {
42
+ const runtimeBase = String(globalThis.__CODEX_OVERLEAF_RUNTIME_BASE__ || '');
43
+ importScripts(runtimeBase ? chrome.runtime.getURL(`${runtimeBase}/src/backgroundSharedSessions.js`) : 'backgroundSharedSessions.js');
44
+ }
45
+ globalThis.CodexOverleafSharedSessionsBackground.installBackground(chrome);
23
46
  if (!globalThis.CodexOverleafUpdateRuntimeIdentity) {
24
47
  const runtimeBase = String(globalThis.__CODEX_OVERLEAF_RUNTIME_BASE__ || '');
25
48
  importScripts(runtimeBase ? chrome.runtime.getURL(`${runtimeBase}/src/shared/updateRuntimeIdentity.js`) : 'shared/updateRuntimeIdentity.js');
@@ -35,8 +58,10 @@ if (!globalThis.CodexOverleafUpdateRuntimeIdentity) {
35
58
  const MANAGED_OVERLEAF_MATCHES = [
36
59
  'https://www.overleaf.com/project',
37
60
  'https://overleaf.com/project',
61
+ 'https://cn.overleaf.com/project',
38
62
  'https://www.overleaf.com/project/*',
39
- 'https://overleaf.com/project/*'
63
+ 'https://overleaf.com/project/*',
64
+ 'https://cn.overleaf.com/project/*'
40
65
  ];
41
66
  const COMPATIBILITY_REQUIRED_METHODS = new Set([
42
67
  'codex.run',
@@ -382,7 +407,7 @@ if (!globalThis.CodexOverleafUpdateRuntimeIdentity) {
382
407
  try {
383
408
  const url = new URL(tab?.url || '');
384
409
  return url.protocol === 'https:' &&
385
- (url.hostname === 'www.overleaf.com' || url.hostname === 'overleaf.com') &&
410
+ (['overleaf.com', 'www.overleaf.com', 'cn.overleaf.com'].includes(url.hostname)) &&
386
411
  /^\/project\/[^/]+(?:\/|$)/.test(url.pathname);
387
412
  } catch (_error) {
388
413
  return false;
@@ -853,7 +878,7 @@ if (!globalThis.CodexOverleafUpdateRuntimeIdentity) {
853
878
  try {
854
879
  const url = new URL(senderUrl);
855
880
  return url.protocol === 'https:' && (
856
- url.hostname === 'www.overleaf.com' || url.hostname === 'overleaf.com'
881
+ ['overleaf.com', 'www.overleaf.com', 'cn.overleaf.com'].includes(url.hostname)
857
882
  );
858
883
  } catch (_error) {
859
884
  return false;