codex-overleaf-link 2.4.0 → 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 (327) hide show
  1. package/README.md +272 -311
  2. package/README.zh-CN.md +287 -326
  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 +572 -571
  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 +8974 -1781
  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 +51 -120
  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 +364 -356
  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 +194 -164
  42. package/extension/src/content/scopedPersistenceCoordinator.js +2 -1
  43. package/extension/src/content/scopedPersistencePanelState.js +45 -2
  44. package/extension/src/content/selectionContextView.js +300 -0
  45. package/extension/src/content/sessionPersistence.js +10 -2
  46. package/extension/src/content/settingsPanel.js +93 -54
  47. package/extension/src/content/settingsWorkbench.js +374 -0
  48. package/extension/src/content/sharedSessionViewSync.js +72 -0
  49. package/extension/src/content/subagentActivityView.js +195 -0
  50. package/extension/src/content/trackedChangeCaptureController.js +7 -3
  51. package/extension/src/content/updateNotice.js +121 -50
  52. package/extension/src/content/writebackController.js +257 -0
  53. package/extension/src/content/writebackOrchestrator.js +146 -141
  54. package/extension/src/content/writebackPlan.js +231 -0
  55. package/extension/src/content/writebackRecovery.js +122 -0
  56. package/extension/src/content/writingStyleSettings.js +576 -0
  57. package/extension/src/content/writtenChangesView.js +152 -0
  58. package/extension/src/page/binaryAssetUploader.js +97 -19
  59. package/extension/src/page/overleafProjectSnapshot.js +1 -0
  60. package/extension/src/page/referenceProjects.js +148 -0
  61. package/extension/src/page/saveState.js +58 -3
  62. package/extension/src/page/snapshotRouter.js +44 -13
  63. package/extension/src/page/textCoordinates.js +102 -0
  64. package/extension/src/page/textFileCreator.js +350 -59
  65. package/extension/src/page/trackedChangeCapture.js +42 -56
  66. package/extension/src/page/trackedChangeOwnership.js +198 -0
  67. package/extension/src/page/trackedChangeReplay.js +164 -0
  68. package/extension/src/page/trackedChangesLifecycle.js +139 -150
  69. package/extension/src/page/treeOperations.js +36 -29
  70. package/extension/src/page/writebackReceiptJournal.js +112 -0
  71. package/extension/src/page/writebackRouter.js +176 -136
  72. package/extension/src/pageBridge.js +59 -101
  73. package/extension/src/popup.js +203 -59
  74. package/extension/src/shared/agentTranscript.js +18 -4
  75. package/extension/src/shared/auditRecords.js +71 -0
  76. package/extension/src/shared/changeHistoryModel.js +94 -0
  77. package/extension/src/shared/compatibility.js +1 -1
  78. package/extension/src/shared/compileAdapter.js +42 -0
  79. package/extension/src/shared/failureReasons.js +20 -0
  80. package/extension/src/shared/globalPreferences.js +1 -1
  81. package/extension/src/shared/i18n.js +187 -65
  82. package/extension/src/shared/managedUpdateProjection.js +6 -3
  83. package/extension/src/shared/pageRpcContract.js +7 -1
  84. package/extension/src/shared/providerProfiles.js +109 -0
  85. package/extension/src/shared/runActivityModel.js +361 -0
  86. package/extension/src/shared/runExecutionSnapshot.js +8 -2
  87. package/extension/src/shared/runExecutionSnapshotCodec.js +16 -4
  88. package/extension/src/shared/scopedPersistenceBrowserAdapter.js +6 -3
  89. package/extension/src/shared/selectionContext.js +28 -0
  90. package/extension/src/shared/sessionState.js +97 -6
  91. package/extension/src/shared/sharedSessionBridge.js +288 -0
  92. package/extension/src/shared/storageDb.js +23 -55
  93. package/extension/src/shared/storageMigration.js +3 -0
  94. package/extension/src/shared/storageRunActions.js +54 -4
  95. package/extension/src/shared/storageValuePruning.js +40 -0
  96. package/extension/src/shared/subagentActivityModel.js +174 -0
  97. package/extension/src/shared/undoOperations.js +87 -0
  98. package/extension/src/shared/updateConsent.js +37 -8
  99. package/extension/src/shared/writebackIntent.js +62 -0
  100. package/extension/src/shared/writebackSettlement.js +29 -10
  101. package/extension/src/shared/writingStyle.js +33 -0
  102. package/extension/styles/panel.css +2136 -744
  103. package/extension/styles/popup.css +110 -0
  104. package/native-host/src/anthropicBridgeRequest.js +2 -1
  105. package/native-host/src/codexModelRecovery.js +107 -0
  106. package/native-host/src/codexPromptAssembly.js +2 -0
  107. package/native-host/src/codexProviderLaunch.js +3 -3
  108. package/native-host/src/codexRuntimeIdentity.js +1 -0
  109. package/native-host/src/codexSessionRunner.js +146 -177
  110. package/native-host/src/codexSessionTiming.js +71 -0
  111. package/native-host/src/managedInstall.js +5 -4
  112. package/native-host/src/nativeEnvironment.js +70 -0
  113. package/native-host/src/nativeQuotas.js +15 -8
  114. package/native-host/src/overleafWorkspaceRules.js +16 -0
  115. package/native-host/src/processStopBarrier.js +80 -0
  116. package/native-host/src/providerModelCatalog.js +4 -3
  117. package/native-host/src/providerProfile.js +13 -1
  118. package/native-host/src/providerReasoning.js +9 -5
  119. package/native-host/src/providerStore.js +4 -0
  120. package/native-host/src/readProgressGuard.js +84 -17
  121. package/native-host/src/releaseTransport.js +14 -5
  122. package/native-host/src/selectionScope.js +58 -0
  123. package/native-host/src/skills/parallel-subagents/SKILL.md +31 -3
  124. package/native-host/src/skills/writing-style-builder/SKILL.md +146 -0
  125. package/native-host/src/subagentBroker.js +102 -98
  126. package/native-host/src/subagentTelemetry.js +316 -0
  127. package/native-host/src/subagentWorkspace.js +103 -0
  128. package/native-host/src/subagentWorkspacePath.js +31 -0
  129. package/native-host/src/taskRunnerRuntime.js +55 -5
  130. package/native-host/src/turnAttachments.js +113 -0
  131. package/native-host/src/updateManager.js +122 -12
  132. package/native-host/src/updateNetworkControl.js +75 -0
  133. package/native-host/src/updateTrust.js +21 -2
  134. package/native-host/src/vendor/pdfjs/LICENSE +177 -0
  135. package/native-host/src/vendor/pdfjs/SOURCE.txt +3 -0
  136. package/native-host/src/vendor/pdfjs/cmaps/78-EUC-H.bcmap +0 -0
  137. package/native-host/src/vendor/pdfjs/cmaps/78-EUC-V.bcmap +0 -0
  138. package/native-host/src/vendor/pdfjs/cmaps/78-H.bcmap +0 -0
  139. package/native-host/src/vendor/pdfjs/cmaps/78-RKSJ-H.bcmap +0 -0
  140. package/native-host/src/vendor/pdfjs/cmaps/78-RKSJ-V.bcmap +0 -0
  141. package/native-host/src/vendor/pdfjs/cmaps/78-V.bcmap +0 -0
  142. package/native-host/src/vendor/pdfjs/cmaps/78ms-RKSJ-H.bcmap +0 -0
  143. package/native-host/src/vendor/pdfjs/cmaps/78ms-RKSJ-V.bcmap +0 -0
  144. package/native-host/src/vendor/pdfjs/cmaps/83pv-RKSJ-H.bcmap +0 -0
  145. package/native-host/src/vendor/pdfjs/cmaps/90ms-RKSJ-H.bcmap +0 -0
  146. package/native-host/src/vendor/pdfjs/cmaps/90ms-RKSJ-V.bcmap +0 -0
  147. package/native-host/src/vendor/pdfjs/cmaps/90msp-RKSJ-H.bcmap +0 -0
  148. package/native-host/src/vendor/pdfjs/cmaps/90msp-RKSJ-V.bcmap +0 -0
  149. package/native-host/src/vendor/pdfjs/cmaps/90pv-RKSJ-H.bcmap +0 -0
  150. package/native-host/src/vendor/pdfjs/cmaps/90pv-RKSJ-V.bcmap +0 -0
  151. package/native-host/src/vendor/pdfjs/cmaps/Add-H.bcmap +0 -0
  152. package/native-host/src/vendor/pdfjs/cmaps/Add-RKSJ-H.bcmap +0 -0
  153. package/native-host/src/vendor/pdfjs/cmaps/Add-RKSJ-V.bcmap +0 -0
  154. package/native-host/src/vendor/pdfjs/cmaps/Add-V.bcmap +0 -0
  155. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-0.bcmap +0 -0
  156. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-1.bcmap +0 -0
  157. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-2.bcmap +0 -0
  158. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-3.bcmap +0 -0
  159. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-4.bcmap +0 -0
  160. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-5.bcmap +0 -0
  161. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-6.bcmap +0 -0
  162. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
  163. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-0.bcmap +0 -0
  164. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-1.bcmap +0 -0
  165. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-2.bcmap +0 -0
  166. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-3.bcmap +0 -0
  167. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-4.bcmap +0 -0
  168. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-5.bcmap +0 -0
  169. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
  170. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-0.bcmap +0 -0
  171. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-1.bcmap +0 -0
  172. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-2.bcmap +0 -0
  173. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-3.bcmap +0 -0
  174. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-4.bcmap +0 -0
  175. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-5.bcmap +0 -0
  176. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-6.bcmap +0 -0
  177. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
  178. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-0.bcmap +0 -0
  179. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-1.bcmap +0 -0
  180. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-2.bcmap +0 -0
  181. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
  182. package/native-host/src/vendor/pdfjs/cmaps/B5-H.bcmap +0 -0
  183. package/native-host/src/vendor/pdfjs/cmaps/B5-V.bcmap +0 -0
  184. package/native-host/src/vendor/pdfjs/cmaps/B5pc-H.bcmap +0 -0
  185. package/native-host/src/vendor/pdfjs/cmaps/B5pc-V.bcmap +0 -0
  186. package/native-host/src/vendor/pdfjs/cmaps/CNS-EUC-H.bcmap +0 -0
  187. package/native-host/src/vendor/pdfjs/cmaps/CNS-EUC-V.bcmap +0 -0
  188. package/native-host/src/vendor/pdfjs/cmaps/CNS1-H.bcmap +0 -0
  189. package/native-host/src/vendor/pdfjs/cmaps/CNS1-V.bcmap +0 -0
  190. package/native-host/src/vendor/pdfjs/cmaps/CNS2-H.bcmap +0 -0
  191. package/native-host/src/vendor/pdfjs/cmaps/CNS2-V.bcmap +3 -0
  192. package/native-host/src/vendor/pdfjs/cmaps/ETHK-B5-H.bcmap +0 -0
  193. package/native-host/src/vendor/pdfjs/cmaps/ETHK-B5-V.bcmap +0 -0
  194. package/native-host/src/vendor/pdfjs/cmaps/ETen-B5-H.bcmap +0 -0
  195. package/native-host/src/vendor/pdfjs/cmaps/ETen-B5-V.bcmap +0 -0
  196. package/native-host/src/vendor/pdfjs/cmaps/ETenms-B5-H.bcmap +3 -0
  197. package/native-host/src/vendor/pdfjs/cmaps/ETenms-B5-V.bcmap +0 -0
  198. package/native-host/src/vendor/pdfjs/cmaps/EUC-H.bcmap +0 -0
  199. package/native-host/src/vendor/pdfjs/cmaps/EUC-V.bcmap +0 -0
  200. package/native-host/src/vendor/pdfjs/cmaps/Ext-H.bcmap +0 -0
  201. package/native-host/src/vendor/pdfjs/cmaps/Ext-RKSJ-H.bcmap +0 -0
  202. package/native-host/src/vendor/pdfjs/cmaps/Ext-RKSJ-V.bcmap +0 -0
  203. package/native-host/src/vendor/pdfjs/cmaps/Ext-V.bcmap +0 -0
  204. package/native-host/src/vendor/pdfjs/cmaps/GB-EUC-H.bcmap +0 -0
  205. package/native-host/src/vendor/pdfjs/cmaps/GB-EUC-V.bcmap +0 -0
  206. package/native-host/src/vendor/pdfjs/cmaps/GB-H.bcmap +4 -0
  207. package/native-host/src/vendor/pdfjs/cmaps/GB-V.bcmap +0 -0
  208. package/native-host/src/vendor/pdfjs/cmaps/GBK-EUC-H.bcmap +0 -0
  209. package/native-host/src/vendor/pdfjs/cmaps/GBK-EUC-V.bcmap +0 -0
  210. package/native-host/src/vendor/pdfjs/cmaps/GBK2K-H.bcmap +0 -0
  211. package/native-host/src/vendor/pdfjs/cmaps/GBK2K-V.bcmap +0 -0
  212. package/native-host/src/vendor/pdfjs/cmaps/GBKp-EUC-H.bcmap +0 -0
  213. package/native-host/src/vendor/pdfjs/cmaps/GBKp-EUC-V.bcmap +0 -0
  214. package/native-host/src/vendor/pdfjs/cmaps/GBT-EUC-H.bcmap +0 -0
  215. package/native-host/src/vendor/pdfjs/cmaps/GBT-EUC-V.bcmap +0 -0
  216. package/native-host/src/vendor/pdfjs/cmaps/GBT-H.bcmap +0 -0
  217. package/native-host/src/vendor/pdfjs/cmaps/GBT-V.bcmap +0 -0
  218. package/native-host/src/vendor/pdfjs/cmaps/GBTpc-EUC-H.bcmap +0 -0
  219. package/native-host/src/vendor/pdfjs/cmaps/GBTpc-EUC-V.bcmap +0 -0
  220. package/native-host/src/vendor/pdfjs/cmaps/GBpc-EUC-H.bcmap +0 -0
  221. package/native-host/src/vendor/pdfjs/cmaps/GBpc-EUC-V.bcmap +0 -0
  222. package/native-host/src/vendor/pdfjs/cmaps/H.bcmap +0 -0
  223. package/native-host/src/vendor/pdfjs/cmaps/HKdla-B5-H.bcmap +0 -0
  224. package/native-host/src/vendor/pdfjs/cmaps/HKdla-B5-V.bcmap +0 -0
  225. package/native-host/src/vendor/pdfjs/cmaps/HKdlb-B5-H.bcmap +0 -0
  226. package/native-host/src/vendor/pdfjs/cmaps/HKdlb-B5-V.bcmap +0 -0
  227. package/native-host/src/vendor/pdfjs/cmaps/HKgccs-B5-H.bcmap +0 -0
  228. package/native-host/src/vendor/pdfjs/cmaps/HKgccs-B5-V.bcmap +0 -0
  229. package/native-host/src/vendor/pdfjs/cmaps/HKm314-B5-H.bcmap +0 -0
  230. package/native-host/src/vendor/pdfjs/cmaps/HKm314-B5-V.bcmap +0 -0
  231. package/native-host/src/vendor/pdfjs/cmaps/HKm471-B5-H.bcmap +0 -0
  232. package/native-host/src/vendor/pdfjs/cmaps/HKm471-B5-V.bcmap +0 -0
  233. package/native-host/src/vendor/pdfjs/cmaps/HKscs-B5-H.bcmap +0 -0
  234. package/native-host/src/vendor/pdfjs/cmaps/HKscs-B5-V.bcmap +0 -0
  235. package/native-host/src/vendor/pdfjs/cmaps/Hankaku.bcmap +0 -0
  236. package/native-host/src/vendor/pdfjs/cmaps/Hiragana.bcmap +0 -0
  237. package/native-host/src/vendor/pdfjs/cmaps/KSC-EUC-H.bcmap +0 -0
  238. package/native-host/src/vendor/pdfjs/cmaps/KSC-EUC-V.bcmap +0 -0
  239. package/native-host/src/vendor/pdfjs/cmaps/KSC-H.bcmap +0 -0
  240. package/native-host/src/vendor/pdfjs/cmaps/KSC-Johab-H.bcmap +0 -0
  241. package/native-host/src/vendor/pdfjs/cmaps/KSC-Johab-V.bcmap +0 -0
  242. package/native-host/src/vendor/pdfjs/cmaps/KSC-V.bcmap +0 -0
  243. package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-H.bcmap +0 -0
  244. package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
  245. package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
  246. package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-V.bcmap +0 -0
  247. package/native-host/src/vendor/pdfjs/cmaps/KSCpc-EUC-H.bcmap +0 -0
  248. package/native-host/src/vendor/pdfjs/cmaps/KSCpc-EUC-V.bcmap +0 -0
  249. package/native-host/src/vendor/pdfjs/cmaps/Katakana.bcmap +0 -0
  250. package/native-host/src/vendor/pdfjs/cmaps/LICENSE +36 -0
  251. package/native-host/src/vendor/pdfjs/cmaps/NWP-H.bcmap +0 -0
  252. package/native-host/src/vendor/pdfjs/cmaps/NWP-V.bcmap +0 -0
  253. package/native-host/src/vendor/pdfjs/cmaps/RKSJ-H.bcmap +0 -0
  254. package/native-host/src/vendor/pdfjs/cmaps/RKSJ-V.bcmap +0 -0
  255. package/native-host/src/vendor/pdfjs/cmaps/Roman.bcmap +0 -0
  256. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UCS2-H.bcmap +0 -0
  257. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UCS2-V.bcmap +0 -0
  258. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF16-H.bcmap +0 -0
  259. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF16-V.bcmap +0 -0
  260. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF32-H.bcmap +0 -0
  261. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF32-V.bcmap +0 -0
  262. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF8-H.bcmap +0 -0
  263. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF8-V.bcmap +0 -0
  264. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UCS2-H.bcmap +0 -0
  265. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UCS2-V.bcmap +0 -0
  266. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF16-H.bcmap +0 -0
  267. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF16-V.bcmap +0 -0
  268. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF32-H.bcmap +0 -0
  269. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF32-V.bcmap +0 -0
  270. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF8-H.bcmap +0 -0
  271. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF8-V.bcmap +0 -0
  272. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-H.bcmap +0 -0
  273. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
  274. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
  275. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-V.bcmap +0 -0
  276. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF16-H.bcmap +0 -0
  277. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF16-V.bcmap +0 -0
  278. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF32-H.bcmap +0 -0
  279. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF32-V.bcmap +0 -0
  280. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF8-H.bcmap +0 -0
  281. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF8-V.bcmap +0 -0
  282. package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
  283. package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
  284. package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
  285. package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
  286. package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
  287. package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
  288. package/native-host/src/vendor/pdfjs/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
  289. package/native-host/src/vendor/pdfjs/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
  290. package/native-host/src/vendor/pdfjs/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
  291. package/native-host/src/vendor/pdfjs/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
  292. package/native-host/src/vendor/pdfjs/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
  293. package/native-host/src/vendor/pdfjs/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
  294. package/native-host/src/vendor/pdfjs/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
  295. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UCS2-H.bcmap +0 -0
  296. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UCS2-V.bcmap +0 -0
  297. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF16-H.bcmap +0 -0
  298. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF16-V.bcmap +0 -0
  299. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF32-H.bcmap +0 -0
  300. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF32-V.bcmap +0 -0
  301. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF8-H.bcmap +0 -0
  302. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF8-V.bcmap +0 -0
  303. package/native-host/src/vendor/pdfjs/cmaps/V.bcmap +0 -0
  304. package/native-host/src/vendor/pdfjs/cmaps/WP-Symbol.bcmap +0 -0
  305. package/native-host/src/vendor/pdfjs/pdf.mjs +26740 -0
  306. package/native-host/src/vendor/pdfjs/pdf.worker.mjs +62201 -0
  307. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitDingbats.pfb +0 -0
  308. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixed.pfb +0 -0
  309. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixedBold.pfb +0 -0
  310. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
  311. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixedItalic.pfb +0 -0
  312. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerif.pfb +0 -0
  313. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerifBold.pfb +0 -0
  314. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
  315. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerifItalic.pfb +0 -0
  316. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSymbol.pfb +0 -0
  317. package/native-host/src/vendor/pdfjs/standard_fonts/LICENSE_FOXIT +27 -0
  318. package/native-host/src/vendor/pdfjs/standard_fonts/LICENSE_LIBERATION +102 -0
  319. package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-Bold.ttf +0 -0
  320. package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
  321. package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-Italic.ttf +0 -0
  322. package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-Regular.ttf +0 -0
  323. package/native-host/src/writingStyleEvidence.js +102 -0
  324. package/native-host/src/writingStylePdfWorker.js +35 -0
  325. package/native-host/src/writingStyleProfile.js +165 -0
  326. package/native-host/src/writingStyleRuntime.js +447 -0
  327. package/package.json +1 -1
@@ -150,10 +150,10 @@
150
150
  undoTrackedTitle: 'Reject this run\'s Overleaf tracked changes?',
151
151
  undoNativeTitle: 'Undo this run\'s Overleaf writes?',
152
152
  undoTrackedMessage: 'This will use Overleaf Reject to undo {files}.\n\nIt will not rewrite files with text patches. If the extension cannot verify the matching tracked changes, it will stop and let you handle them in Overleaf review tools.',
153
- undoNativeMessage: 'This will use Overleaf Undo to roll back {files}.\n\nBefore running, Codex verifies the current content still matches this run\'s written content. If you edited it afterward, Codex stops to avoid undoing your new changes.',
153
+ undoNativeMessage: 'Undo this run\'s changes in {files}.',
154
154
  undoTrackedConfirm: 'Reject this run',
155
155
  undoTrackedStarted: 'Starting rejection of this run\'s Overleaf tracked changes',
156
- undoNativeStarted: 'Starting Overleaf native undo for this run',
156
+ undoNativeStarted: 'Undoing this run\'s changes',
157
157
  undoTrackedResult: 'Undo result: rejected {applied} tracked change(s), skipped {skipped}',
158
158
  undoNativeResult: 'Undo result: undone {applied} file(s), skipped {skipped}',
159
159
  undoSwitchedEditing: 'Switched to Editing for undo and left Editing active afterward.',
@@ -272,6 +272,24 @@
272
272
  personalizationHelp: 'Style, terminology, and LaTeX conventions Codex should follow in this project.',
273
273
  settingsSaved: 'Saved',
274
274
  appearanceTitle: 'Appearance',
275
+ settingsWorkbenchTitle: 'Settings',
276
+ settingsWorkbenchSubtitle: 'Preferences, project rules, and local tools.',
277
+ settingsWorkbenchGeneral: 'General & appearance',
278
+ settingsWorkbenchModels: 'Models & connections',
279
+ settingsWorkbenchContext: 'Project context',
280
+ settingsWorkbenchInstructions: 'Instructions & skills',
281
+ settingsWorkbenchProtection: 'Protection & privacy',
282
+ settingsWorkbenchHistory: 'History & storage',
283
+ settingsWorkbenchAll: 'All settings',
284
+ settingsWorkbenchFilter: 'Filter settings by scope',
285
+ settingsWorkbenchCategories: 'Settings categories',
286
+ settingsWorkbenchProjectFilter: 'Show only settings that apply to this project.',
287
+ settingsWorkbenchOpenProject: 'Open a project to configure its settings.',
288
+ settingsWorkbenchClose: 'Close settings',
289
+ settingsWorkbenchEnableSkills: 'Enable Overleaf skills',
290
+ settingsWorkbenchSkillsHelp: 'Turn off all skills without changing individual selections.',
291
+ settingsWorkbenchSkillsList: 'Available skills',
292
+ settingsWorkbenchProviderOpenFailed: 'Could not open provider settings.',
275
293
  themeLabel: 'Theme',
276
294
  themeDark: 'Dark',
277
295
  themeLight: 'Light',
@@ -300,22 +318,30 @@
300
318
  runsTruncatedNote: 'Showing the most recent 20 runs — older runs were trimmed.',
301
319
  eventsTruncatedNote: 'Earlier steps of this run were trimmed.',
302
320
  newSessionTooltip: 'Start a fresh conversation — the current session\u2019s context will not carry over',
303
- storageTitle: 'History & storage',
321
+ storageTitle: 'Local data',
322
+ storageSavedData: 'Saved conversations & records',
304
323
  softwareUpdatesTitle: 'Software updates',
305
324
  softwareUpdatesHelp: 'Automatically checks signed stable releases for the Extension and Native Host.',
306
325
  checkForUpdates: 'Check for updates',
307
326
  providerSettingsTitle: 'Model providers',
308
327
  providerSettingsExperimental: 'Third-party experimental',
309
- providerSettingsHelp: 'Configure experimental third-party model APIs. Compatibility varies by provider and gateway.',
328
+ providerSettingsHelp: 'Manage model API connections.',
310
329
  providerSettingsConfigure: 'Configure',
311
330
  providerSettingsBuiltin: 'Built-in Codex is active',
312
331
  providerSettingsLoading: 'Checking current project provider…',
313
- storageUsageLoading: 'Calculating usage\u2026',
314
- storageClearAll: 'Clear all history\u2026',
315
- storageClearAllHelp: 'Removes every stored session, run and audit record for all projects. Project settings and rules are kept.',
332
+ storageUsageLoading: 'Loading saved history\u2026',
333
+ storageClearAll: 'Clear local history\u2026',
334
+ storageClearAllHelp: 'Clearing removes local conversations, change records and their undo information for all projects. Overleaf files, project settings and rules stay unchanged.',
316
335
  runTurnNavLabel: 'Jump to a turn\u2026',
317
- historyTitle: 'Change history',
318
- historyHelp: 'What Codex wrote to this project, per run. Filter by file name or task text.',
336
+ historyTitle: 'File changes',
337
+ historyHelp: 'Review file changes from the latest 50 recorded runs and open the matching conversation.',
338
+ historyStatusLabel: 'Change status',
339
+ historyStatusAll: 'All statuses',
340
+ historyStatusPending: 'Pending review',
341
+ historyStatusAccepted: 'Accepted',
342
+ historyStatusUndone: 'Undone',
343
+ historyStatusAttention: 'Needs attention',
344
+ historyStatusWritten: 'Written',
319
345
  runSearchPlaceholder: 'Search this session\u2019s runs\u2026',
320
346
  undoFileSelectTitle: 'Undo which files?',
321
347
  undoFileSelectConfirm: 'Undo selected',
@@ -335,8 +361,8 @@
335
361
  speedLabel: 'Speed',
336
362
  requireReviewing: 'Track',
337
363
  requireReviewingTitle: 'When enabled, Codex checks or switches Overleaf Reviewing/Track Changes before writing. Deletes still require confirmation.',
338
- autoCompile: 'Compile',
339
- autoCompileTitle: 'After Codex writes, click Overleaf Recompile and record the compile result for this task. Ask mode will not trigger it.',
364
+ autoCompile: 'Auto compile',
365
+ autoCompileTitle: 'Automatically recompile in Overleaf after Codex writes and record the result. Toggling this setting does not compile immediately. Ask mode does not trigger compilation.',
340
366
  experimentalOtWarmMirror: 'OT warm mirror',
341
367
  experimentalOtWarmMirrorShort: 'OT',
342
368
  experimentalOtWarmMirrorTitle: 'Read-only local text warming. File scope and freshness are checked before reuse; normal project reading remains the fallback.',
@@ -376,7 +402,15 @@
376
402
  queuedInputPaused: 'Queue paused',
377
403
  queuedInputGuiding: 'Sending guidance',
378
404
  queuedInputExecuting: 'Running',
379
- queuedInputGuide: 'Guide',
405
+ queuedInputGuide: 'Steer now',
406
+ queuedInputUpNext: 'Up next · sends after this run',
407
+ queuedInputUpNextMany: 'Up next · sends in order after this run',
408
+ queuedInputSteering: 'Steering the current turn…',
409
+ queuedInputMore: '{count} more queued',
410
+ queuedInputShowLess: 'Show less',
411
+ queuedInputEdit: 'Edit in the composer',
412
+ queuedInputEditBlocked: 'Send or clear the current draft before editing a queued message.',
413
+ queuedInputGuideHint: 'Steer is available once the current tool step finishes.',
380
414
  queuedInputGuideTitle: 'Send this message into the active Codex turn now.',
381
415
  queuedInputGuideUnavailable: 'The active turn is not ready for guidance yet.',
382
416
  queuedInputGuideFailed: 'Guidance could not be delivered. The message remains queued.',
@@ -508,14 +542,39 @@
508
542
  failureReason_editor_project_id_unavailable_next: 'Refresh the Overleaf tab and retry; if it persists, reload the extension.',
509
543
  // Welcome-panel + write-guard: Recent-projects
510
544
  // variant copy. Spec §5.3–§5.5, §5.8, §5.10 are the source of truth.
511
- recentProjects_welcome: 'Codex Overleaf Link',
512
- recentProjects_welcome_subtitle: 'Open a project from the Overleaf list on the left to start.',
513
- recentProjects_empty: "You haven't run any Codex sessions yet. Open a project from the Overleaf list on the left to start.",
514
- recentProjects_sessions_empty: 'No sessions in this project yet',
515
- recentProjects_sessions_toggle: "Show / manage this project's sessions",
516
- recentProjects_sessions_action: 'View runs',
517
- recentProjects_sessions_action_open: 'Hide runs',
518
- recentProjects_clearProject: 'Delete all sessions for this project',
545
+ recentProjects_welcome: 'Continue working',
546
+ recentProjects_focusEyebrow: 'Last conversation',
547
+ recentProjects_historyHeading: 'Other recent conversations',
548
+ recentProjects_historyHint: 'Select to continue',
549
+ recentProjects_projectConversations: "View this project's conversations",
550
+ recentProjects_allProjects: 'All projects',
551
+ recentProjects_showAllConversations: 'View all {count} conversations',
552
+ recentProjects_unstarted: 'Not started \u00b7 {count}',
553
+ recentProjects_unstartedHint: 'Empty conversations are kept here, without deleting their records.',
554
+ recentProjects_noStarted: 'No conversation has been started yet. Empty conversations are available below.',
555
+ recentProjects_savedDraft: 'Saved draft, ready to continue.',
556
+ recentProjects_attention: 'Needs attention',
557
+ recentProjects_unavailableRecords: 'Records with unavailable project links',
558
+ recentProjects_loadingHistory: 'Loading conversations...',
559
+ recentProjects_loadFailed: 'Conversation history could not be read. Please retry.',
560
+ recentProjects_continueHint: 'Open this conversation without automatically starting a task.',
561
+ recentProjects_more: 'More options',
562
+ recentProjects_continue: 'Continue',
563
+ recentProjects_openProject: 'Open project',
564
+ recentProjects_loadingConversation: 'Loading conversation...',
565
+ recentProjects_noConversation: 'No saved conversation',
566
+ recentProjects_noRuns: 'No runs yet',
567
+ recentProjects_previewUnavailable: 'Conversation unavailable',
568
+ recentProjects_previewUnavailableHint: 'Saved conversation could not be loaded.',
569
+ recentProjects_conversationGone: 'This conversation is no longer available. Choose another conversation from the refreshed list.',
570
+ recentProjects_continueFailed: 'Could not open the conversation. Please try again.',
571
+ recentProjects_welcome_subtitle: 'Conversations saved in this browser',
572
+ recentProjects_empty: 'No conversations saved in this browser yet. Open an Overleaf project and start a Codex conversation.',
573
+ recentProjects_sessions_empty: 'No saved conversations in this project',
574
+ recentProjects_sessions_toggle: "Show or manage this project's conversations",
575
+ recentProjects_sessions_action: 'All conversations',
576
+ recentProjects_sessions_action_open: 'Hide conversations',
577
+ recentProjects_clearProject: 'Delete this project\'s conversations',
519
578
  recentProjects_clearProject_title: 'Delete all Codex sessions for {project}?',
520
579
  recentProjects_clearProject_message: 'This permanently deletes all {count} plugin sessions, run history, and matching plugin-local Codex thread history for {project}. It will not modify Overleaf files or global Codex history.',
521
580
  recentProjects_clearProject_confirm: 'Delete all',
@@ -531,15 +590,17 @@
531
590
  recentProjects_degraded: 'Sign in to Overleaf to see your recent Codex projects.',
532
591
  recentProjects_row_projectLinkUnavailable: 'Project link unavailable.',
533
592
  recentProjects_settings_entry: 'Settings & Diagnostics',
534
- recentProjects_badge_pending: 'pending',
535
- recentProjects_badge_accepted: 'accepted',
536
- recentProjects_badge_rejected: 'rejected',
537
- recentProjects_badge_needs_review: 'pending',
538
- recentProjects_badge_running: 'running',
539
- recentProjects_badge_completed: 'completed',
540
- recentProjects_badge_failed: 'failed',
541
- recentProjects_badge_interrupted: 'interrupted',
542
- recentProjects_badge_stale: 'stale',
593
+ recentProjects_settingsTitle: 'General Settings',
594
+ recentProjects_settingsSubtitle: 'Manage Codex preferences and local history across all projects.',
595
+ recentProjects_badge_pending: 'Last run pending',
596
+ recentProjects_badge_accepted: 'Last changes accepted',
597
+ recentProjects_badge_rejected: 'Last changes undone',
598
+ recentProjects_badge_needs_review: 'Last run needs review',
599
+ recentProjects_badge_running: 'Last recorded as running',
600
+ recentProjects_badge_completed: 'Last run completed',
601
+ recentProjects_badge_failed: 'Last run failed',
602
+ recentProjects_badge_interrupted: 'Last run may have been interrupted',
603
+ recentProjects_badge_stale: 'Last run status unconfirmed',
543
604
  recentProjects_unnamed: 'Project \u00b7 {prefix}',
544
605
  recentProjects_zombieRunningNote: 'Marked as running, but it may be a leftover from an interrupted run.',
545
606
  recentProjects_zombieDeleteConfirm: 'This session is marked as running. If no other tab is actually running it, you can delete it anyway.',
@@ -547,9 +608,9 @@
547
608
  recentProjects_degraded_hint: 'Could not identify the Overleaf account on this page, so the project list is hidden to avoid mixing accounts. This usually resolves on a reload.',
548
609
  recentProjects_sessionsCount: '{count} session(s)',
549
610
  recentProjects_welcome_stats: '{projects} projects \u00b7 {sessions} Codex sessions',
550
- recentProjects_badge_background_completed: 'completed in background',
551
- recentProjects_badge_needs_review_after_navigation: 'pending',
552
- recentProjects_badge_abandoned_after_navigation: 'abandoned'
611
+ recentProjects_badge_background_completed: 'Last run completed in background',
612
+ recentProjects_badge_needs_review_after_navigation: 'Last run needs review',
613
+ recentProjects_badge_abandoned_after_navigation: 'Last run stopped after navigation'
553
614
  },
554
615
  zh: {
555
616
  resizePanel: '拖动调整 Codex 面板宽度,双击恢复默认宽度',
@@ -690,10 +751,10 @@
690
751
  undoTrackedTitle: '拒绝本轮 Overleaf 留痕改动?',
691
752
  undoNativeTitle: '撤销本轮 Overleaf 写入?',
692
753
  undoTrackedMessage: '将通过 Overleaf 自己的 Reject/拒绝功能撤销 {files}。\n\n这不会用文本补丁重写文件;如果插件不能确认对应留痕记录,会停止并让你在 Overleaf 审阅面板手动处理。',
693
- undoNativeMessage: '将通过 Overleaf 自己的 Undo/撤销功能回退 {files}。\n\n执行前会确认当前内容仍是本轮写入后的内容;如果你已经手动改过,Codex 会停止,避免撤掉你的新修改。',
754
+ undoNativeMessage: '撤销本轮在 {files} 中的改动。',
694
755
  undoTrackedConfirm: '拒绝本轮改动',
695
756
  undoTrackedStarted: '开始拒绝本轮 Overleaf 留痕改动',
696
- undoNativeStarted: '开始用 Overleaf 原生撤销回退本轮写入',
757
+ undoNativeStarted: '正在撤销本轮改动',
697
758
  undoTrackedResult: '撤销结果:已拒绝 {applied} 条留痕,跳过 {skipped} 条',
698
759
  undoNativeResult: '撤销结果:已撤销 {applied} 个文件,跳过 {skipped} 项',
699
760
  undoSwitchedEditing: '撤销时已切到 Editing;撤销后保持 Editing。',
@@ -812,6 +873,24 @@
812
873
  personalizationHelp: 'Codex 在本项目中应遵循的风格、术语和 LaTeX 约定。',
813
874
  settingsSaved: '已保存',
814
875
  appearanceTitle: '外观',
876
+ settingsWorkbenchTitle: '设置',
877
+ settingsWorkbenchSubtitle: '偏好设置、项目规则与本地工具。',
878
+ settingsWorkbenchGeneral: '常规与外观',
879
+ settingsWorkbenchModels: '模型与连接',
880
+ settingsWorkbenchContext: '项目上下文',
881
+ settingsWorkbenchInstructions: '指令与技能',
882
+ settingsWorkbenchProtection: '文件保护与隐私',
883
+ settingsWorkbenchHistory: '历史与存储',
884
+ settingsWorkbenchAll: '全部设置',
885
+ settingsWorkbenchFilter: '按作用范围筛选设置',
886
+ settingsWorkbenchCategories: '设置分类',
887
+ settingsWorkbenchProjectFilter: '仅显示作用于当前项目的设置。',
888
+ settingsWorkbenchOpenProject: '进入项目后可配置项目设置。',
889
+ settingsWorkbenchClose: '关闭设置',
890
+ settingsWorkbenchEnableSkills: '启用 Overleaf 技能',
891
+ settingsWorkbenchSkillsHelp: '关闭总开关时,各技能的单独选择会保留。',
892
+ settingsWorkbenchSkillsList: '可用技能',
893
+ settingsWorkbenchProviderOpenFailed: '无法打开模型服务设置。',
815
894
  themeLabel: '主题',
816
895
  themeDark: '深色',
817
896
  themeLight: '浅色',
@@ -840,22 +919,30 @@
840
919
  runsTruncatedNote: '仅显示最近 20 轮——更早的轮次已精简。',
841
920
  eventsTruncatedNote: '本轮更早的步骤已精简。',
842
921
  newSessionTooltip: '开启全新对话——当前会话的上下文不会带入',
843
- storageTitle: '历史与存储',
922
+ storageTitle: '本地数据',
923
+ storageSavedData: '已保存的对话与记录',
844
924
  softwareUpdatesTitle: '软件更新',
845
925
  softwareUpdatesHelp: '自动检查 Extension 与 Native Host 的签名稳定版本。',
846
926
  checkForUpdates: '检查更新',
847
927
  providerSettingsTitle: '模型服务',
848
928
  providerSettingsExperimental: '第三方实验性',
849
- providerSettingsHelp: '配置实验性第三方模型 API;兼容性取决于具体模型服务与网关。',
929
+ providerSettingsHelp: '管理模型 API 连接。',
850
930
  providerSettingsConfigure: '配置',
851
931
  providerSettingsBuiltin: '当前使用内置 Codex',
852
932
  providerSettingsLoading: '正在读取当前项目的模型服务…',
853
- storageUsageLoading: '正在计算占用…',
854
- storageClearAll: '清空全部历史…',
855
- storageClearAllHelp: '删除所有项目已存储的全部会话、运行与审计记录。项目设置与规则会保留。',
933
+ storageUsageLoading: '正在读取已保存的历史…',
934
+ storageClearAll: '清理本地历史…',
935
+ storageClearAllHelp: '清理会移除所有项目的本地对话、修改记录及撤销信息。Overleaf 文件、项目设置与规则保持不变。',
856
936
  runTurnNavLabel: '跳到某一轮…',
857
- historyTitle: '变更历史',
858
- historyHelp: 'Codex 每一轮写入本项目的记录。可按文件名或任务内容过滤。',
937
+ historyTitle: '文件修改记录',
938
+ historyHelp: '查看最近 50 轮的文件修改及处理状态,可跳转到对应对话。',
939
+ historyStatusLabel: '修改状态',
940
+ historyStatusAll: '所有状态',
941
+ historyStatusPending: '待接受',
942
+ historyStatusAccepted: '已接受',
943
+ historyStatusUndone: '已撤销',
944
+ historyStatusAttention: '需检查',
945
+ historyStatusWritten: '已写入',
859
946
  runSearchPlaceholder: '搜索本会话的轮次…',
860
947
  undoFileSelectTitle: '撤销哪些文件?',
861
948
  undoFileSelectConfirm: '撤销所选',
@@ -875,8 +962,8 @@
875
962
  speedLabel: '速度',
876
963
  requireReviewing: '留痕',
877
964
  requireReviewingTitle: '开启后,写入前会确认并尝试切到 Overleaf Reviewing/Track Changes;删除仍需确认。',
878
- autoCompile: '编译',
879
- autoCompileTitle: 'Codex 写入后自动点击 Overleaf Recompile,并把编译结果记录到本轮任务。只问不改时不会触发。',
965
+ autoCompile: '自动编译',
966
+ autoCompileTitle: 'Codex 写入后自动触发 Overleaf Recompile,并记录编译结果。切换此开关不会立即编译;只问不改时不触发编译。',
880
967
  experimentalOtWarmMirror: 'OT 预热镜像',
881
968
  experimentalOtWarmMirrorShort: 'OT',
882
969
  experimentalOtWarmMirrorTitle: '只读本地文本预热;复用前校验文件范围和新鲜度,常规项目读取作为回退路径。',
@@ -916,13 +1003,21 @@
916
1003
  queuedInputPaused: '队列已暂停',
917
1004
  queuedInputGuiding: '正在发送引导',
918
1005
  queuedInputExecuting: '正在运行',
919
- queuedInputGuide: '立即引导',
1006
+ queuedInputGuide: '现在插入',
1007
+ queuedInputUpNext: '下一条 · 本轮结束后发送',
1008
+ queuedInputUpNextMany: '接下来 · 本轮结束后依次发送',
1009
+ queuedInputSteering: '正在插入当前回合…',
1010
+ queuedInputMore: '还有 {count} 条待发送',
1011
+ queuedInputShowLess: '收起',
1012
+ queuedInputEdit: '拉回输入框编辑',
1013
+ queuedInputEditBlocked: '请先发送或清空当前输入框里的内容,再编辑排队消息。',
1014
+ queuedInputGuideHint: '当前工具步骤结束后才能插入。',
920
1015
  queuedInputGuideTitle: '立即把这条消息发送到当前 Codex turn。',
921
1016
  queuedInputGuideUnavailable: '当前 turn 尚未进入可引导状态。',
922
1017
  queuedInputGuideFailed: '引导消息未送达,消息已保留在队列中。',
923
1018
  queuedInputGuided: '后续引导已发送到当前 Codex turn。',
924
1019
  queuedInputAdded: '后续任务已排队,将在当前任务完整结束后执行。',
925
- queuedInputResume: '恢复队列',
1020
+ queuedInputResume: '继续',
926
1021
  queuedInputRemove: '删除',
927
1022
  queuedInputAttachmentsUnsupported: '当前排队消息支持文本和 @context;请先移除二进制附件。',
928
1023
  queuedInputError_empty_input: '请先输入后续任务。',
@@ -1047,14 +1142,39 @@
1047
1142
  failureReason_editor_project_id_unavailable_next: '请刷新 Overleaf 页面后重试;如果仍然失败,请重新加载扩展。',
1048
1143
  // Welcome-panel + write-guard: Recent-projects
1049
1144
  // variant copy. 见 spec §5.3–§5.5、§5.8、§5.10。
1050
- recentProjects_welcome: 'Codex Overleaf Link',
1051
- recentProjects_welcome_subtitle: '从左侧 Overleaf 项目列表中打开任意项目即可开始。',
1052
- recentProjects_empty: '你还没有运行过 Codex 会话。从左侧 Overleaf 项目列表中打开任意项目即可开始。',
1053
- recentProjects_sessions_empty: '该项目还没有会话',
1054
- recentProjects_sessions_toggle: '查看/管理该项目的会话',
1055
- recentProjects_sessions_action: '查看会话',
1056
- recentProjects_sessions_action_open: '收起会话',
1057
- recentProjects_clearProject: '删除该项目的全部会话',
1145
+ recentProjects_welcome: '继续工作',
1146
+ recentProjects_focusEyebrow: '上次对话',
1147
+ recentProjects_historyHeading: '其他最近对话',
1148
+ recentProjects_historyHint: '点击条目继续',
1149
+ recentProjects_projectConversations: '查看该项目的全部对话',
1150
+ recentProjects_allProjects: '所有项目',
1151
+ recentProjects_showAllConversations: '查看全部 {count} 段对话',
1152
+ recentProjects_unstarted: '未开始 · {count}',
1153
+ recentProjects_unstartedHint: '空白对话收纳在这里,记录不会被删除。',
1154
+ recentProjects_noStarted: '尚无已开始的对话,空白对话可在下方展开。',
1155
+ recentProjects_savedDraft: '草稿已保存,可继续补充。',
1156
+ recentProjects_attention: '需要查看',
1157
+ recentProjects_unavailableRecords: '项目链接不可用的记录',
1158
+ recentProjects_loadingHistory: '正在加载对话…',
1159
+ recentProjects_loadFailed: '暂时无法读取对话历史,请重试。',
1160
+ recentProjects_continueHint: '仅打开这段对话,不会自动启动任务。',
1161
+ recentProjects_more: '更多选项',
1162
+ recentProjects_continue: '继续',
1163
+ recentProjects_openProject: '打开项目',
1164
+ recentProjects_loadingConversation: '正在加载对话…',
1165
+ recentProjects_noConversation: '暂无保存的对话',
1166
+ recentProjects_noRuns: '尚未运行任务',
1167
+ recentProjects_previewUnavailable: '暂时无法读取对话',
1168
+ recentProjects_previewUnavailableHint: '已保存的对话暂时无法读取。',
1169
+ recentProjects_conversationGone: '该对话已不可用,请从更新后的列表中选择其他对话。',
1170
+ recentProjects_continueFailed: '暂时无法打开对话,请重试。',
1171
+ recentProjects_welcome_subtitle: '当前浏览器保存的对话',
1172
+ recentProjects_empty: '当前浏览器还没有保存的对话。打开一个 Overleaf 项目,与 Codex 开始对话即可。',
1173
+ recentProjects_sessions_empty: '该项目还没有保存的对话',
1174
+ recentProjects_sessions_toggle: '查看或管理该项目的对话',
1175
+ recentProjects_sessions_action: '全部对话',
1176
+ recentProjects_sessions_action_open: '收起对话',
1177
+ recentProjects_clearProject: '删除该项目的全部对话',
1058
1178
  recentProjects_clearProject_title: '删除 {project} 的全部 Codex 会话?',
1059
1179
  recentProjects_clearProject_message: '这会永久删除 {project} 的全部 {count} 个插件会话、运行历史及对应的插件本地 Codex 线程历史。不会修改 Overleaf 文件或全局 Codex 历史。',
1060
1180
  recentProjects_clearProject_confirm: '全部删除',
@@ -1070,15 +1190,17 @@
1070
1190
  recentProjects_degraded: '请登录 Overleaf 后查看你最近的 Codex 项目。',
1071
1191
  recentProjects_row_projectLinkUnavailable: '项目链接不可用。',
1072
1192
  recentProjects_settings_entry: '设置与诊断',
1073
- recentProjects_badge_pending: '待处理',
1074
- recentProjects_badge_accepted: '已接受',
1075
- recentProjects_badge_rejected: '已撤回',
1076
- recentProjects_badge_needs_review: '待处理',
1077
- recentProjects_badge_running: '运行中',
1078
- recentProjects_badge_completed: '已完成',
1079
- recentProjects_badge_failed: '失败',
1080
- recentProjects_badge_interrupted: '已中断',
1081
- recentProjects_badge_stale: '久未处理',
1193
+ recentProjects_settingsTitle: '通用设置',
1194
+ recentProjects_settingsSubtitle: '管理适用于所有项目的 Codex 偏好设置与本地历史记录。',
1195
+ recentProjects_badge_pending: '上次运行待处理',
1196
+ recentProjects_badge_accepted: '上次修改已接受',
1197
+ recentProjects_badge_rejected: '上次修改已撤回',
1198
+ recentProjects_badge_needs_review: '上次运行需要检查',
1199
+ recentProjects_badge_running: '上次记录为运行中',
1200
+ recentProjects_badge_completed: '上次运行已完成',
1201
+ recentProjects_badge_failed: '上次运行失败',
1202
+ recentProjects_badge_interrupted: '上次运行可能已中断',
1203
+ recentProjects_badge_stale: '上次运行状态未确认',
1082
1204
  recentProjects_unnamed: '项目 · {prefix}',
1083
1205
  recentProjects_zombieRunningNote: '标记为运行中,但可能是被中断后的残留。',
1084
1206
  recentProjects_zombieDeleteConfirm: '该会话标记为运行中。如果确认没有其他标签页在运行它,可以直接删除。',
@@ -1086,9 +1208,9 @@
1086
1208
  recentProjects_degraded_hint: '无法识别本页的 Overleaf 账号,为避免账号间串数据已隐藏项目列表。通常刷新即可恢复。',
1087
1209
  recentProjects_sessionsCount: '{count} 个会话',
1088
1210
  recentProjects_welcome_stats: '{projects} 个项目 · {sessions} 个 Codex 会话',
1089
- recentProjects_badge_background_completed: '后台已完成',
1090
- recentProjects_badge_needs_review_after_navigation: '待处理',
1091
- recentProjects_badge_abandoned_after_navigation: '已中止'
1211
+ recentProjects_badge_background_completed: '上次运行已在后台完成',
1212
+ recentProjects_badge_needs_review_after_navigation: '上次运行需要检查',
1213
+ recentProjects_badge_abandoned_after_navigation: '上次运行已在离开页面后停止'
1092
1214
  }
1093
1215
  };
1094
1216
 
@@ -13,6 +13,7 @@
13
13
  'up_to_date',
14
14
  'checking',
15
15
  'update_available',
16
+ 'manual_install_required',
16
17
  'downloading',
17
18
  'staged',
18
19
  'waiting_for_idle',
@@ -27,7 +28,7 @@
27
28
 
28
29
  const PHASE_TIMEOUTS = Object.freeze({
29
30
  checking: 60 * 1000,
30
- downloading: 2 * 60 * 1000,
31
+ downloading: 6 * 60 * 1000,
31
32
  applying: 90 * 1000,
32
33
  awaiting_health: 2 * 60 * 1000,
33
34
  rolling_back: 60 * 1000
@@ -75,9 +76,11 @@
75
76
  const TRANSITIONS = Object.freeze({
76
77
  idle: Object.freeze(['checking']),
77
78
  up_to_date: Object.freeze(['checking', 'idle']),
78
- checking: Object.freeze(['idle', 'up_to_date', 'update_available', 'failed']),
79
+ checking: Object.freeze(['idle', 'up_to_date', 'update_available', 'manual_install_required', 'failed']),
80
+ // Only a reinstall resolves it; leave by checking again or going idle.
81
+ manual_install_required: Object.freeze(['checking', 'idle', 'update_available', 'failed']),
79
82
  update_available: Object.freeze(['checking', 'downloading', 'deferred', 'failed']),
80
- downloading: Object.freeze(['staged', 'failed']),
83
+ downloading: Object.freeze(['staged', 'failed', 'update_available', 'idle']),
81
84
  staged: Object.freeze(['waiting_for_idle', 'applying', 'update_available', 'deferred', 'failed']),
82
85
  waiting_for_idle: Object.freeze(['applying', 'update_available', 'deferred', 'failed']),
83
86
  applying: Object.freeze(['staged', 'awaiting_health', 'rolling_back', 'failed']),
@@ -5,21 +5,27 @@
5
5
  })(typeof window !== 'undefined' ? window : (typeof globalThis !== 'undefined' ? globalThis : this), function () {
6
6
  'use strict';
7
7
 
8
- var REVISION = '2026-09-14-native-text-upload-v28';
8
+ var REVISION = '2026-09-27-writing-style-references-v33';
9
9
  var METHODS = freezeCatalog({
10
10
  initializeCapability: entry('bridge.initialize', 'control', 'none', 'default', false, 'none'),
11
11
  probe: entry('bridge.probe', 'read', 'none', 'default', false, 'safe'),
12
12
  cancelActiveWrite: entry('write.cancel', 'control', 'none', 'default', false, 'idempotent'),
13
13
  getProjectSnapshot: entry('snapshot.read', 'read', 'none', 'snapshot', true, 'safe'),
14
14
  getProjectFileList: entry('snapshot.list', 'read', 'none', 'file_list', true, 'safe'),
15
+ listReferenceProjects: entry('reference.list', 'read', 'none', 'file_list', false, 'safe'),
16
+ getReferenceProjectSnapshot: entry('reference.read', 'read', 'none', 'snapshot', false, 'safe'),
17
+ cancelReferenceRead: entry('reference.cancel', 'control', 'none', 'default', false, 'idempotent'),
15
18
  invalidateProjectSnapshot: entry('snapshot.invalidate', 'cache', 'none', 'default', false, 'idempotent'),
16
19
  createCheckpoint: entry('checkpoint.create', 'page_state', 'none', 'default', false, 'no_retry'),
17
20
  ensureReviewing: entry('reviewing.enable', 'page_state', 'optional', 'default', true, 'idempotent'),
18
21
  ensureEditing: entry('reviewing.disable', 'page_state', 'optional', 'default', true, 'idempotent'),
19
22
  applyOperations: entry('document.write', 'document', 'required', 'writeback', true, 'no_retry'),
23
+ getWritebackReceipt: entry('writeback.receipt', 'read', 'required', 'default', true, 'safe'),
24
+ getSelectionContext: entry('editor.selection', 'read', 'required', 'default', true, 'safe'),
20
25
  binaryUploadBegin: entry('asset.stage', 'cache', 'required', 'default', false, 'no_retry'),
21
26
  binaryUploadAppend: entry('asset.stage', 'cache', 'none', 'writeback', true, 'no_retry'),
22
27
  binaryUploadCommit: entry('asset.write', 'document', 'required', 'writeback', true, 'no_retry'),
28
+ binaryUploadStatus: entry('asset.receipt', 'read', 'required', 'default', true, 'safe'),
23
29
  binaryUploadAbort: entry('asset.stage', 'cache', 'none', 'default', false, 'idempotent'),
24
30
  jumpToPosition: entry('editor.navigate', 'navigation', 'required', 'default', false, 'idempotent'),
25
31
  reconcileTrackedChangeCapture: entry('tracked_changes.read', 'read', 'required', 'default', false, 'safe'),
@@ -9,6 +9,105 @@
9
9
 
10
10
  const BUILTIN_PROVIDER_ID = 'builtin';
11
11
 
12
+ const PROVIDER_CONNECTIONS = {
13
+ kimi: {
14
+ anthropic: { baseUrl: 'https://api.moonshot.cn/anthropic', wireApiPreference: 'anthropic', authMode: 'bearer', reasoningAdapter: 'anthropic' },
15
+ chat: { baseUrl: 'https://api.moonshot.cn/v1', wireApiPreference: 'chat', authMode: 'bearer', reasoningAdapter: 'auto' }
16
+ },
17
+ glm: {
18
+ anthropic: { baseUrl: 'https://open.bigmodel.cn/api/anthropic', wireApiPreference: 'anthropic', authMode: 'bearer', reasoningAdapter: 'anthropic' },
19
+ chat: { baseUrl: 'https://open.bigmodel.cn/api/paas/v4', wireApiPreference: 'chat', authMode: 'bearer', reasoningAdapter: 'auto' }
20
+ },
21
+ deepseek: {
22
+ anthropic: { baseUrl: 'https://api.deepseek.com/anthropic', wireApiPreference: 'anthropic', authMode: 'x-api-key', reasoningAdapter: 'anthropic' },
23
+ chat: { baseUrl: 'https://api.deepseek.com', wireApiPreference: 'chat', authMode: 'bearer', reasoningAdapter: 'deepseek' }
24
+ }
25
+ };
26
+
27
+ // Shortcuts select a protocol-specific connection, never an active provider.
28
+ const PROVIDER_PRESETS = [
29
+ { id: 'custom', name: 'Custom connection', short: '+', baseUrl: '', wireApiPreference: 'auto' },
30
+ { id: 'openai-compatible', name: 'OpenAI-compatible API', short: 'API', baseUrl: '', wireApiPreference: 'auto' },
31
+ { id: 'anthropic-compatible', name: 'Anthropic-compatible API', short: 'API', baseUrl: '', wireApiPreference: 'anthropic', authMode: 'x-api-key', reasoningAdapter: 'anthropic' },
32
+ { id: 'kimi', name: 'Kimi', short: 'K', ...PROVIDER_CONNECTIONS.kimi.anthropic },
33
+ { id: 'glm', name: 'GLM', short: 'G', ...PROVIDER_CONNECTIONS.glm.anthropic },
34
+ { id: 'deepseek', name: 'DeepSeek', short: 'D', ...PROVIDER_CONNECTIONS.deepseek.anthropic }
35
+ ];
36
+ const MODEL_EFFORTS = ['none', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max'];
37
+
38
+ function getPresetConnectionInfo(baseUrl) {
39
+ const normalized = normalizeText(baseUrl).replace(/\/+$/, '');
40
+ for (const [id, variants] of Object.entries(PROVIDER_CONNECTIONS)) {
41
+ for (const connection of Object.values(variants)) {
42
+ if (normalized === connection.baseUrl) return { id, connection: { ...connection } };
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+
48
+ function getPresetConnection(id, protocol) {
49
+ const variants = Object.prototype.hasOwnProperty.call(PROVIDER_CONNECTIONS, id)
50
+ ? PROVIDER_CONNECTIONS[id] : null;
51
+ const connection = variants && Object.prototype.hasOwnProperty.call(variants, protocol)
52
+ ? variants[protocol] : null;
53
+ return connection ? { ...connection } : null;
54
+ }
55
+
56
+ function getProviderPresets() {
57
+ return PROVIDER_PRESETS.map(preset => ({ ...preset }));
58
+ }
59
+
60
+ function buildPresetDraft(id) {
61
+ const preset = PROVIDER_PRESETS.find(item => item.id === id) || PROVIDER_PRESETS[0];
62
+ const { id: _id, short: _short, ...connection } = preset;
63
+ return { ...buildEmptyDraft(), ...connection,
64
+ name: preset.id === 'custom' ? 'Custom provider' : preset.name };
65
+ }
66
+
67
+ function updateDraftModel(draft, originalId, patch) {
68
+ const models = Array.isArray(draft.models) ? draft.models : [];
69
+ const existing = models.find(model => model.id === originalId);
70
+ const fail = (message, field) => { throw Object.assign(new Error(message), { field }); };
71
+ const id = normalizeText(patch.id);
72
+ if (!id || id.length > 200 || /[\0\r\n"&|<>^%!\x60]/.test(id))
73
+ fail('Enter a valid model ID (up to 200 characters).', 'id');
74
+ if (models.some(model => model.id === id && model.id !== originalId))
75
+ fail('This model ID is already configured.', 'id');
76
+ if (!existing && models.length >= 32) fail('A provider can contain up to 32 models.', 'id');
77
+ const contextWindow = Number(patch.contextWindow);
78
+ if (!Number.isSafeInteger(contextWindow) || contextWindow < 8192 || contextWindow > 4000000)
79
+ fail('Context window must be an integer between 8192 and 4000000.', 'contextWindow');
80
+ const maxOutputTokens = patch.maxOutputTokens === '' || patch.maxOutputTokens == null
81
+ ? null : Number(patch.maxOutputTokens);
82
+ if (maxOutputTokens !== null && (!Number.isSafeInteger(maxOutputTokens)
83
+ || maxOutputTokens < 256 || maxOutputTokens > 65536 || maxOutputTokens >= contextWindow))
84
+ fail('Output limit must be between 256 and 65536 and smaller than the context window.', 'maxOutputTokens');
85
+ const model = { ...existing, id, label: normalizeText(patch.label).slice(0, 200) || id,
86
+ contextWindow, maxOutputTokens,
87
+ inputModalities: normalizeInputModalities(patch.inputModalities),
88
+ supportsParallelToolCalls: patch.supportsParallelToolCalls === true,
89
+ upstreamResponseMode: normalizeUpstreamResponseMode(patch.upstreamResponseMode, true),
90
+ reasoningEfforts: MODEL_EFFORTS.filter(effort => patch.reasoningEfforts?.includes(effort)),
91
+ reasoningAdapter: patch.reasoningAdapter ? normalizeReasoningAdapter(patch.reasoningAdapter) : '',
92
+ reasoningCapability: patch.reasoningCapability ? normalizeReasoningCapability(patch.reasoningCapability)
93
+ : patch.reasoningEfforts?.length ? 'effort' : '',
94
+ baseInstructions: normalizeText(patch.baseInstructions).slice(0, 8000)
95
+ };
96
+ model.resolvedUpstreamResponseMode = model.upstreamResponseMode === existing?.upstreamResponseMode
97
+ ? existing.resolvedUpstreamResponseMode || '' : '';
98
+ return { ...draft,
99
+ models: existing ? models.map(item => item.id === originalId ? model : item) : [...models, model],
100
+ defaultModelId: !draft.defaultModelId || draft.defaultModelId === originalId ? id : draft.defaultModelId
101
+ };
102
+ }
103
+
104
+ function removeDraftModel(draft, id) {
105
+ const models = (draft.models || []).filter(model => model.id !== id);
106
+ return { ...draft, models, defaultModelId: draft.defaultModelId === id
107
+ ? models[0]?.id || '' : draft.defaultModelId };
108
+ }
109
+
110
+
12
111
  function normalizeCatalog(value = {}) {
13
112
  const providers = Array.isArray(value.providers)
14
113
  ? value.providers.map(normalizeProvider).filter(Boolean)
@@ -110,6 +209,9 @@
110
209
  upstreamResponseMode: normalizeUpstreamResponseMode(value?.upstreamResponseMode, true),
111
210
  resolvedUpstreamResponseMode: normalizeUpstreamResponseMode(value?.resolvedUpstreamResponseMode, false),
112
211
  contextWindow: normalizeInteger(value?.contextWindow) || 262144,
212
+ maxOutputTokens: value?.maxOutputTokens == null ? null : Math.min(65536, Math.max(256, normalizeInteger(value.maxOutputTokens))),
213
+ reasoningAdapter: value?.reasoningAdapter ? normalizeReasoningAdapter(value.reasoningAdapter) : '',
214
+ reasoningCapability: value?.reasoningCapability ? normalizeReasoningCapability(value.reasoningCapability) : '',
113
215
  supportsParallelToolCalls: value?.supportsParallelToolCalls === true,
114
216
  inputModalities: normalizeInputModalities(value?.inputModalities),
115
217
  baseInstructions: normalizeText(value?.baseInstructions)
@@ -286,6 +388,13 @@
286
388
 
287
389
  return {
288
390
  BUILTIN_PROVIDER_ID,
391
+ MODEL_EFFORTS,
392
+ getProviderPresets,
393
+ getPresetConnectionInfo,
394
+ getPresetConnection,
395
+ buildPresetDraft,
396
+ updateDraftModel,
397
+ removeDraftModel,
289
398
  buildBuiltinProvider,
290
399
  buildEmptyDraft,
291
400
  buildRunSelection,