codex-overleaf-link 2.4.1 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (397) hide show
  1. package/README.md +275 -305
  2. package/README.zh-CN.md +290 -320
  3. package/extension/bootstrap/background.js +99 -19
  4. package/extension/bootstrap/manifest.template.json +9 -4
  5. package/extension/bootstrap/popup.html +11 -16
  6. package/extension/bootstrap/popupFallback.js +55 -0
  7. package/extension/bootstrap/update.js +25 -2
  8. package/extension/bootstrap/updateStatus.js +1 -0
  9. package/extension/runtime-manifest.json +3 -1
  10. package/extension/src/background.js +234 -56
  11. package/extension/src/backgroundBootstrapMigration.js +181 -0
  12. package/extension/src/backgroundSharedSessions.js +440 -0
  13. package/extension/src/backgroundUpdateCoordinator.js +541 -381
  14. package/extension/src/backgroundUpdateSafety.js +173 -0
  15. package/extension/src/content/activeTurnControl.js +16 -2
  16. package/extension/src/content/applyResultFormatters.js +46 -73
  17. package/extension/src/content/assetTransferBroker.js +244 -12
  18. package/extension/src/content/changeHistoryView.js +175 -0
  19. package/extension/src/content/composerAttachments.js +117 -67
  20. package/extension/src/content/composerPanel.js +41 -8
  21. package/extension/src/content/contentRuntime.js +1084 -1099
  22. package/extension/src/content/diagnosticsController.js +122 -97
  23. package/extension/src/content/diagnosticsExport.js +236 -0
  24. package/extension/src/content/diagnosticsPanel.js +78 -19
  25. package/extension/src/content/diffReviewPanel.js +8 -5
  26. package/extension/src/content/directoryCleanupRecovery.js +54 -0
  27. package/extension/src/content/generated/content.bundle.js +14680 -3606
  28. package/extension/src/content/generated/content.bundle.meta.json +30 -3
  29. package/extension/src/content/globalPreferencesController.js +1 -1
  30. package/extension/src/content/legacyGlobalRegistry.js +25 -1
  31. package/extension/src/content/localSkillsPanel.js +141 -16
  32. package/extension/src/content/markdownDomRenderer.js +9 -4
  33. package/extension/src/content/markdownText.js +5 -6
  34. package/extension/src/content/modelPicker.js +8 -5
  35. package/extension/src/content/nativeCompatibilityController.js +45 -20
  36. package/extension/src/content/otWarmMirror.js +4 -5
  37. package/extension/src/content/otWarmMirrorController.js +17 -20
  38. package/extension/src/content/pageBridgeClient.js +33 -5
  39. package/extension/src/content/panelMaintenance.js +87 -132
  40. package/extension/src/content/panelRenderer.js +10 -0
  41. package/extension/src/content/pendingInputView.js +109 -76
  42. package/extension/src/content/projectProviderSelection.js +13 -4
  43. package/extension/src/content/projectSessionCleanup.js +109 -62
  44. package/extension/src/content/projectSettingsCoordinator.js +39 -2
  45. package/extension/src/content/providerSettingsCoordinator.js +63 -14
  46. package/extension/src/content/providerSettingsDialog.js +724 -113
  47. package/extension/src/content/recentProjects.js +21 -6
  48. package/extension/src/content/runActivitySummary.js +665 -0
  49. package/extension/src/content/runCompletionMeta.js +344 -0
  50. package/extension/src/content/runController.js +40 -15
  51. package/extension/src/content/runFailureNotice.js +34 -12
  52. package/extension/src/content/runGuidanceController.js +76 -30
  53. package/extension/src/content/runGuidanceView.js +59 -10
  54. package/extension/src/content/runPresence.js +306 -0
  55. package/extension/src/content/runQueueScheduler.js +150 -43
  56. package/extension/src/content/runRecoveryActions.js +146 -0
  57. package/extension/src/content/runResultActions.js +11 -8
  58. package/extension/src/content/runReviewController.js +574 -0
  59. package/extension/src/content/runScrollLayout.js +21 -2
  60. package/extension/src/content/runTimelineView.js +315 -290
  61. package/extension/src/content/scopedPersistencePanelState.js +51 -6
  62. package/extension/src/content/selectionContextView.js +300 -0
  63. package/extension/src/content/sensitivePreflight.js +140 -0
  64. package/extension/src/content/sessionForkController.js +80 -17
  65. package/extension/src/content/sessionManager.js +1 -1
  66. package/extension/src/content/sessionPersistence.js +6 -1
  67. package/extension/src/content/settingsPanel.js +84 -55
  68. package/extension/src/content/settingsWorkbench.js +379 -0
  69. package/extension/src/content/sharedSessionViewSync.js +109 -0
  70. package/extension/src/content/subagentActivityView.js +195 -0
  71. package/extension/src/content/trackedChangeCaptureController.js +7 -3
  72. package/extension/src/content/updateIdle.js +4 -1
  73. package/extension/src/content/updateNotice.js +179 -56
  74. package/extension/src/content/updateSafetyReceiver.js +58 -0
  75. package/extension/src/content/writebackController.js +308 -2
  76. package/extension/src/content/writebackOrchestrator.js +213 -199
  77. package/extension/src/content/writebackPlan.js +231 -0
  78. package/extension/src/content/writebackRecovery.js +122 -0
  79. package/extension/src/content/writingStyleSettings.js +600 -0
  80. package/extension/src/content/writtenChangesView.js +152 -0
  81. package/extension/src/page/binaryAssetUploader.js +223 -23
  82. package/extension/src/page/fileMover.js +256 -0
  83. package/extension/src/page/overleafProjectSnapshot.js +1 -0
  84. package/extension/src/page/ownedDirectoryCleanup.js +94 -0
  85. package/extension/src/page/referenceProjects.js +149 -0
  86. package/extension/src/page/reviewContext.js +113 -0
  87. package/extension/src/page/saveState.js +20 -6
  88. package/extension/src/page/snapshotRouter.js +124 -48
  89. package/extension/src/page/textCoordinates.js +102 -0
  90. package/extension/src/page/textFileCreator.js +442 -71
  91. package/extension/src/page/trackedChangeCapture.js +53 -57
  92. package/extension/src/page/trackedChangeOwnership.js +216 -0
  93. package/extension/src/page/trackedChangeReplay.js +184 -0
  94. package/extension/src/page/trackedChangesLifecycle.js +343 -339
  95. package/extension/src/page/treeOperations.js +33 -12
  96. package/extension/src/page/updateSafetyProbe.js +41 -0
  97. package/extension/src/page/writebackReceiptJournal.js +114 -0
  98. package/extension/src/page/writebackRouter.js +242 -201
  99. package/extension/src/pageBridge.js +73 -102
  100. package/extension/src/popup.js +261 -65
  101. package/extension/src/shared/agentTranscript.js +41 -4
  102. package/extension/src/shared/auditRecords.js +73 -0
  103. package/extension/src/shared/changeHistoryModel.js +94 -0
  104. package/extension/src/shared/compatibility.js +22 -6
  105. package/extension/src/shared/compileAdapter.js +101 -37
  106. package/extension/src/shared/composerAttachmentDraft.js +151 -0
  107. package/extension/src/shared/directoryCleanupProof.js +43 -0
  108. package/extension/src/shared/failureReasons.js +329 -3
  109. package/extension/src/shared/globalPreferences.js +31 -14
  110. package/extension/src/shared/governanceRules.js +4 -37
  111. package/extension/src/shared/i18n.js +389 -25
  112. package/extension/src/shared/managedUpdateProjection.js +8 -5
  113. package/extension/src/shared/nativeRequestIdentity.js +1 -0
  114. package/extension/src/shared/pageRpcContract.js +9 -2
  115. package/extension/src/shared/projectFiles.js +21 -44
  116. package/extension/src/shared/providerProfiles.js +114 -3
  117. package/extension/src/shared/runActivityModel.js +361 -0
  118. package/extension/src/shared/runExecutionSnapshot.js +8 -2
  119. package/extension/src/shared/runExecutionSnapshotCodec.js +16 -4
  120. package/extension/src/shared/runInputQueue.js +48 -5
  121. package/extension/src/shared/scopedPersistenceBrowserAdapter.js +6 -3
  122. package/extension/src/shared/selectionContext.js +37 -0
  123. package/extension/src/shared/sessionState.js +166 -30
  124. package/extension/src/shared/settlementFacts.js +10 -2
  125. package/extension/src/shared/sharedSessionBridge.js +311 -0
  126. package/extension/src/shared/sharedSessionTransfer.js +140 -0
  127. package/extension/src/shared/staleGuard.js +118 -13
  128. package/extension/src/shared/storageDb.js +77 -78
  129. package/extension/src/shared/storageMigration.js +74 -111
  130. package/extension/src/shared/storageRunActions.js +211 -22
  131. package/extension/src/shared/storageValuePruning.js +40 -0
  132. package/extension/src/shared/subagentActivityModel.js +174 -0
  133. package/extension/src/shared/undoOperations.js +216 -6
  134. package/extension/src/shared/updateConsent.js +42 -11
  135. package/extension/src/shared/updateRuntimeIdentity.js +1 -1
  136. package/extension/src/shared/writebackIntent.js +78 -0
  137. package/extension/src/shared/writebackOperationEvidence.js +4 -15
  138. package/extension/src/shared/writebackSettlement.js +67 -48
  139. package/extension/src/shared/writingStyle.js +33 -0
  140. package/extension/styles/panel.css +1987 -385
  141. package/extension/styles/popup.css +110 -0
  142. package/native-host/src/anthropicBridgeRequest.js +6 -3
  143. package/native-host/src/anthropicBridgeResponse.js +6 -2
  144. package/native-host/src/anthropicMessagesBridge.js +24 -16
  145. package/native-host/src/bootstrapMigration.js +296 -0
  146. package/native-host/src/bootstrapMigrationContract.js +101 -0
  147. package/native-host/src/bootstrapUpdate.js +233 -0
  148. package/native-host/src/bootstrapUpdateWatchdog.js +44 -0
  149. package/native-host/src/chatBridgeResponse.js +10 -0
  150. package/native-host/src/chatCompletionsBridge.js +21 -15
  151. package/native-host/src/codexConfigPaths.js +106 -0
  152. package/native-host/src/codexHome.js +66 -73
  153. package/native-host/src/codexHomeScope.js +124 -0
  154. package/native-host/src/codexInheritedAuth.js +90 -0
  155. package/native-host/src/codexLocalSkills.js +301 -0
  156. package/native-host/src/codexModelRecovery.js +107 -0
  157. package/native-host/src/codexPromptAssembly.js +33 -12
  158. package/native-host/src/codexProviderLaunch.js +3 -3
  159. package/native-host/src/codexProviderTest.js +24 -26
  160. package/native-host/src/codexRuntimeIdentity.js +1 -0
  161. package/native-host/src/codexSessionRunner.js +211 -318
  162. package/native-host/src/codexSessionTiming.js +21 -8
  163. package/native-host/src/codexSkillIsolation.js +170 -0
  164. package/native-host/src/codexThreadFork.js +19 -3
  165. package/native-host/src/index.js +19 -7
  166. package/native-host/src/managedInstall.js +115 -39
  167. package/native-host/src/managedInstallRecovery.js +140 -0
  168. package/native-host/src/managedRuntimeEvidence.js +57 -0
  169. package/native-host/src/mirrorWorkspace.js +92 -22
  170. package/native-host/src/nativeDoctor.js +15 -0
  171. package/native-host/src/nativeEnvironment.js +70 -0
  172. package/native-host/src/nativeHelperLifecycle.js +21 -0
  173. package/native-host/src/nativeHostRegistration.js +33 -0
  174. package/native-host/src/nativeQuotas.js +15 -8
  175. package/native-host/src/nativeRunLifecycle.js +71 -0
  176. package/native-host/src/overleafWorkspaceRules.js +16 -0
  177. package/native-host/src/processStopBarrier.js +115 -0
  178. package/native-host/src/projectPathPlatform.js +30 -0
  179. package/native-host/src/providerHttp.js +80 -0
  180. package/native-host/src/providerModelCatalog.js +4 -3
  181. package/native-host/src/providerProfile.js +17 -3
  182. package/native-host/src/providerReasoning.js +10 -11
  183. package/native-host/src/providerRuntime.js +1 -0
  184. package/native-host/src/providerStore.js +76 -14
  185. package/native-host/src/releaseTransport.js +14 -5
  186. package/native-host/src/responsesPassthroughBridge.js +266 -52
  187. package/native-host/src/runtimeInstaller.js +21 -1
  188. package/native-host/src/selectionScope.js +86 -0
  189. package/native-host/src/skills/parallel-subagents/SKILL.md +31 -3
  190. package/native-host/src/skills/writing-style-builder/SKILL.md +146 -0
  191. package/native-host/src/subagentAdmission.js +26 -0
  192. package/native-host/src/subagentBroker.js +176 -159
  193. package/native-host/src/subagentTelemetry.js +325 -0
  194. package/native-host/src/subagentWorkspace.js +103 -0
  195. package/native-host/src/subagentWorkspacePath.js +34 -0
  196. package/native-host/src/taskRunnerRuntime.js +130 -57
  197. package/native-host/src/tomlStatements.js +140 -0
  198. package/native-host/src/turnAttachments.js +113 -0
  199. package/native-host/src/updateManager.js +406 -38
  200. package/native-host/src/updateNetworkControl.js +75 -0
  201. package/native-host/src/updateTrust.js +21 -2
  202. package/native-host/src/vendor/pdfjs/LICENSE +177 -0
  203. package/native-host/src/vendor/pdfjs/SOURCE.txt +3 -0
  204. package/native-host/src/vendor/pdfjs/cmaps/78-EUC-H.bcmap +0 -0
  205. package/native-host/src/vendor/pdfjs/cmaps/78-EUC-V.bcmap +0 -0
  206. package/native-host/src/vendor/pdfjs/cmaps/78-H.bcmap +0 -0
  207. package/native-host/src/vendor/pdfjs/cmaps/78-RKSJ-H.bcmap +0 -0
  208. package/native-host/src/vendor/pdfjs/cmaps/78-RKSJ-V.bcmap +0 -0
  209. package/native-host/src/vendor/pdfjs/cmaps/78-V.bcmap +0 -0
  210. package/native-host/src/vendor/pdfjs/cmaps/78ms-RKSJ-H.bcmap +0 -0
  211. package/native-host/src/vendor/pdfjs/cmaps/78ms-RKSJ-V.bcmap +0 -0
  212. package/native-host/src/vendor/pdfjs/cmaps/83pv-RKSJ-H.bcmap +0 -0
  213. package/native-host/src/vendor/pdfjs/cmaps/90ms-RKSJ-H.bcmap +0 -0
  214. package/native-host/src/vendor/pdfjs/cmaps/90ms-RKSJ-V.bcmap +0 -0
  215. package/native-host/src/vendor/pdfjs/cmaps/90msp-RKSJ-H.bcmap +0 -0
  216. package/native-host/src/vendor/pdfjs/cmaps/90msp-RKSJ-V.bcmap +0 -0
  217. package/native-host/src/vendor/pdfjs/cmaps/90pv-RKSJ-H.bcmap +0 -0
  218. package/native-host/src/vendor/pdfjs/cmaps/90pv-RKSJ-V.bcmap +0 -0
  219. package/native-host/src/vendor/pdfjs/cmaps/Add-H.bcmap +0 -0
  220. package/native-host/src/vendor/pdfjs/cmaps/Add-RKSJ-H.bcmap +0 -0
  221. package/native-host/src/vendor/pdfjs/cmaps/Add-RKSJ-V.bcmap +0 -0
  222. package/native-host/src/vendor/pdfjs/cmaps/Add-V.bcmap +0 -0
  223. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-0.bcmap +0 -0
  224. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-1.bcmap +0 -0
  225. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-2.bcmap +0 -0
  226. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-3.bcmap +0 -0
  227. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-4.bcmap +0 -0
  228. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-5.bcmap +0 -0
  229. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-6.bcmap +0 -0
  230. package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
  231. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-0.bcmap +0 -0
  232. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-1.bcmap +0 -0
  233. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-2.bcmap +0 -0
  234. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-3.bcmap +0 -0
  235. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-4.bcmap +0 -0
  236. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-5.bcmap +0 -0
  237. package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
  238. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-0.bcmap +0 -0
  239. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-1.bcmap +0 -0
  240. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-2.bcmap +0 -0
  241. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-3.bcmap +0 -0
  242. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-4.bcmap +0 -0
  243. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-5.bcmap +0 -0
  244. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-6.bcmap +0 -0
  245. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
  246. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-0.bcmap +0 -0
  247. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-1.bcmap +0 -0
  248. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-2.bcmap +0 -0
  249. package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
  250. package/native-host/src/vendor/pdfjs/cmaps/B5-H.bcmap +0 -0
  251. package/native-host/src/vendor/pdfjs/cmaps/B5-V.bcmap +0 -0
  252. package/native-host/src/vendor/pdfjs/cmaps/B5pc-H.bcmap +0 -0
  253. package/native-host/src/vendor/pdfjs/cmaps/B5pc-V.bcmap +0 -0
  254. package/native-host/src/vendor/pdfjs/cmaps/CNS-EUC-H.bcmap +0 -0
  255. package/native-host/src/vendor/pdfjs/cmaps/CNS-EUC-V.bcmap +0 -0
  256. package/native-host/src/vendor/pdfjs/cmaps/CNS1-H.bcmap +0 -0
  257. package/native-host/src/vendor/pdfjs/cmaps/CNS1-V.bcmap +0 -0
  258. package/native-host/src/vendor/pdfjs/cmaps/CNS2-H.bcmap +0 -0
  259. package/native-host/src/vendor/pdfjs/cmaps/CNS2-V.bcmap +3 -0
  260. package/native-host/src/vendor/pdfjs/cmaps/ETHK-B5-H.bcmap +0 -0
  261. package/native-host/src/vendor/pdfjs/cmaps/ETHK-B5-V.bcmap +0 -0
  262. package/native-host/src/vendor/pdfjs/cmaps/ETen-B5-H.bcmap +0 -0
  263. package/native-host/src/vendor/pdfjs/cmaps/ETen-B5-V.bcmap +0 -0
  264. package/native-host/src/vendor/pdfjs/cmaps/ETenms-B5-H.bcmap +3 -0
  265. package/native-host/src/vendor/pdfjs/cmaps/ETenms-B5-V.bcmap +0 -0
  266. package/native-host/src/vendor/pdfjs/cmaps/EUC-H.bcmap +0 -0
  267. package/native-host/src/vendor/pdfjs/cmaps/EUC-V.bcmap +0 -0
  268. package/native-host/src/vendor/pdfjs/cmaps/Ext-H.bcmap +0 -0
  269. package/native-host/src/vendor/pdfjs/cmaps/Ext-RKSJ-H.bcmap +0 -0
  270. package/native-host/src/vendor/pdfjs/cmaps/Ext-RKSJ-V.bcmap +0 -0
  271. package/native-host/src/vendor/pdfjs/cmaps/Ext-V.bcmap +0 -0
  272. package/native-host/src/vendor/pdfjs/cmaps/GB-EUC-H.bcmap +0 -0
  273. package/native-host/src/vendor/pdfjs/cmaps/GB-EUC-V.bcmap +0 -0
  274. package/native-host/src/vendor/pdfjs/cmaps/GB-H.bcmap +4 -0
  275. package/native-host/src/vendor/pdfjs/cmaps/GB-V.bcmap +0 -0
  276. package/native-host/src/vendor/pdfjs/cmaps/GBK-EUC-H.bcmap +0 -0
  277. package/native-host/src/vendor/pdfjs/cmaps/GBK-EUC-V.bcmap +0 -0
  278. package/native-host/src/vendor/pdfjs/cmaps/GBK2K-H.bcmap +0 -0
  279. package/native-host/src/vendor/pdfjs/cmaps/GBK2K-V.bcmap +0 -0
  280. package/native-host/src/vendor/pdfjs/cmaps/GBKp-EUC-H.bcmap +0 -0
  281. package/native-host/src/vendor/pdfjs/cmaps/GBKp-EUC-V.bcmap +0 -0
  282. package/native-host/src/vendor/pdfjs/cmaps/GBT-EUC-H.bcmap +0 -0
  283. package/native-host/src/vendor/pdfjs/cmaps/GBT-EUC-V.bcmap +0 -0
  284. package/native-host/src/vendor/pdfjs/cmaps/GBT-H.bcmap +0 -0
  285. package/native-host/src/vendor/pdfjs/cmaps/GBT-V.bcmap +0 -0
  286. package/native-host/src/vendor/pdfjs/cmaps/GBTpc-EUC-H.bcmap +0 -0
  287. package/native-host/src/vendor/pdfjs/cmaps/GBTpc-EUC-V.bcmap +0 -0
  288. package/native-host/src/vendor/pdfjs/cmaps/GBpc-EUC-H.bcmap +0 -0
  289. package/native-host/src/vendor/pdfjs/cmaps/GBpc-EUC-V.bcmap +0 -0
  290. package/native-host/src/vendor/pdfjs/cmaps/H.bcmap +0 -0
  291. package/native-host/src/vendor/pdfjs/cmaps/HKdla-B5-H.bcmap +0 -0
  292. package/native-host/src/vendor/pdfjs/cmaps/HKdla-B5-V.bcmap +0 -0
  293. package/native-host/src/vendor/pdfjs/cmaps/HKdlb-B5-H.bcmap +0 -0
  294. package/native-host/src/vendor/pdfjs/cmaps/HKdlb-B5-V.bcmap +0 -0
  295. package/native-host/src/vendor/pdfjs/cmaps/HKgccs-B5-H.bcmap +0 -0
  296. package/native-host/src/vendor/pdfjs/cmaps/HKgccs-B5-V.bcmap +0 -0
  297. package/native-host/src/vendor/pdfjs/cmaps/HKm314-B5-H.bcmap +0 -0
  298. package/native-host/src/vendor/pdfjs/cmaps/HKm314-B5-V.bcmap +0 -0
  299. package/native-host/src/vendor/pdfjs/cmaps/HKm471-B5-H.bcmap +0 -0
  300. package/native-host/src/vendor/pdfjs/cmaps/HKm471-B5-V.bcmap +0 -0
  301. package/native-host/src/vendor/pdfjs/cmaps/HKscs-B5-H.bcmap +0 -0
  302. package/native-host/src/vendor/pdfjs/cmaps/HKscs-B5-V.bcmap +0 -0
  303. package/native-host/src/vendor/pdfjs/cmaps/Hankaku.bcmap +0 -0
  304. package/native-host/src/vendor/pdfjs/cmaps/Hiragana.bcmap +0 -0
  305. package/native-host/src/vendor/pdfjs/cmaps/KSC-EUC-H.bcmap +0 -0
  306. package/native-host/src/vendor/pdfjs/cmaps/KSC-EUC-V.bcmap +0 -0
  307. package/native-host/src/vendor/pdfjs/cmaps/KSC-H.bcmap +0 -0
  308. package/native-host/src/vendor/pdfjs/cmaps/KSC-Johab-H.bcmap +0 -0
  309. package/native-host/src/vendor/pdfjs/cmaps/KSC-Johab-V.bcmap +0 -0
  310. package/native-host/src/vendor/pdfjs/cmaps/KSC-V.bcmap +0 -0
  311. package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-H.bcmap +0 -0
  312. package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
  313. package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
  314. package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-V.bcmap +0 -0
  315. package/native-host/src/vendor/pdfjs/cmaps/KSCpc-EUC-H.bcmap +0 -0
  316. package/native-host/src/vendor/pdfjs/cmaps/KSCpc-EUC-V.bcmap +0 -0
  317. package/native-host/src/vendor/pdfjs/cmaps/Katakana.bcmap +0 -0
  318. package/native-host/src/vendor/pdfjs/cmaps/LICENSE +36 -0
  319. package/native-host/src/vendor/pdfjs/cmaps/NWP-H.bcmap +0 -0
  320. package/native-host/src/vendor/pdfjs/cmaps/NWP-V.bcmap +0 -0
  321. package/native-host/src/vendor/pdfjs/cmaps/RKSJ-H.bcmap +0 -0
  322. package/native-host/src/vendor/pdfjs/cmaps/RKSJ-V.bcmap +0 -0
  323. package/native-host/src/vendor/pdfjs/cmaps/Roman.bcmap +0 -0
  324. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UCS2-H.bcmap +0 -0
  325. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UCS2-V.bcmap +0 -0
  326. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF16-H.bcmap +0 -0
  327. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF16-V.bcmap +0 -0
  328. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF32-H.bcmap +0 -0
  329. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF32-V.bcmap +0 -0
  330. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF8-H.bcmap +0 -0
  331. package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF8-V.bcmap +0 -0
  332. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UCS2-H.bcmap +0 -0
  333. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UCS2-V.bcmap +0 -0
  334. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF16-H.bcmap +0 -0
  335. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF16-V.bcmap +0 -0
  336. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF32-H.bcmap +0 -0
  337. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF32-V.bcmap +0 -0
  338. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF8-H.bcmap +0 -0
  339. package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF8-V.bcmap +0 -0
  340. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-H.bcmap +0 -0
  341. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
  342. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
  343. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-V.bcmap +0 -0
  344. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF16-H.bcmap +0 -0
  345. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF16-V.bcmap +0 -0
  346. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF32-H.bcmap +0 -0
  347. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF32-V.bcmap +0 -0
  348. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF8-H.bcmap +0 -0
  349. package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF8-V.bcmap +0 -0
  350. package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
  351. package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
  352. package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
  353. package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
  354. package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
  355. package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
  356. package/native-host/src/vendor/pdfjs/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
  357. package/native-host/src/vendor/pdfjs/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
  358. package/native-host/src/vendor/pdfjs/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
  359. package/native-host/src/vendor/pdfjs/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
  360. package/native-host/src/vendor/pdfjs/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
  361. package/native-host/src/vendor/pdfjs/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
  362. package/native-host/src/vendor/pdfjs/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
  363. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UCS2-H.bcmap +0 -0
  364. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UCS2-V.bcmap +0 -0
  365. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF16-H.bcmap +0 -0
  366. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF16-V.bcmap +0 -0
  367. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF32-H.bcmap +0 -0
  368. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF32-V.bcmap +0 -0
  369. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF8-H.bcmap +0 -0
  370. package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF8-V.bcmap +0 -0
  371. package/native-host/src/vendor/pdfjs/cmaps/V.bcmap +0 -0
  372. package/native-host/src/vendor/pdfjs/cmaps/WP-Symbol.bcmap +0 -0
  373. package/native-host/src/vendor/pdfjs/pdf.mjs +26740 -0
  374. package/native-host/src/vendor/pdfjs/pdf.worker.mjs +62201 -0
  375. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitDingbats.pfb +0 -0
  376. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixed.pfb +0 -0
  377. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixedBold.pfb +0 -0
  378. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
  379. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixedItalic.pfb +0 -0
  380. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerif.pfb +0 -0
  381. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerifBold.pfb +0 -0
  382. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
  383. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerifItalic.pfb +0 -0
  384. package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSymbol.pfb +0 -0
  385. package/native-host/src/vendor/pdfjs/standard_fonts/LICENSE_FOXIT +27 -0
  386. package/native-host/src/vendor/pdfjs/standard_fonts/LICENSE_LIBERATION +102 -0
  387. package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-Bold.ttf +0 -0
  388. package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
  389. package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-Italic.ttf +0 -0
  390. package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-Regular.ttf +0 -0
  391. package/native-host/src/writingStyleEvidence.js +102 -0
  392. package/native-host/src/writingStylePdfWorker.js +35 -0
  393. package/native-host/src/writingStyleProfile.js +165 -0
  394. package/native-host/src/writingStyleRuntime.js +475 -0
  395. package/native-host/src/writingStyleStore.js +73 -0
  396. package/package.json +1 -1
  397. package/scripts/install-managed.mjs +1 -0
@@ -1,18 +1,25 @@
1
1
  (function initStorageDb(root, factory) {
2
2
  if (typeof module === 'object' && module.exports) {
3
3
  module.exports = factory(require('./storageRunActions'), require('./runInputQueue'),
4
- require('./settlementFacts'), require('./storageSessionClaims'), require('./sessionState'));
4
+ require('./settlementFacts'), require('./storageSessionClaims'), require('./sessionState'), require('./runActivityModel'), require('./sharedSessionBridge'), require('./subagentActivityModel'), require('./storageValuePruning'), require('./composerAttachmentDraft'), require('./sharedSessionTransfer'));
5
5
  } else {
6
6
  root.CodexOverleafModuleRegistry.define('StorageDb', [
7
7
  'StorageRunActions',
8
8
  'RunInputQueue',
9
9
  'SettlementFacts',
10
10
  'StorageSessionClaims',
11
- 'SessionState'
11
+ 'SessionState',
12
+ 'RunActivityModel',
13
+ 'SharedSessionBridge',
14
+ 'SubagentActivityModel',
15
+ 'StorageValuePruning',
16
+ 'ComposerAttachmentDraft',
17
+ 'SharedSessionTransfer'
12
18
  ], factory);
13
19
  }
14
- })(typeof globalThis !== 'undefined' ? globalThis : window, function storageDbFactory(StorageRunActions, RunInputQueue, SettlementFacts, StorageSessionClaims, SessionState) {
20
+ })(typeof globalThis !== 'undefined' ? globalThis : window, function storageDbFactory(StorageRunActions, RunInputQueue, SettlementFacts, StorageSessionClaims, SessionState, RunActivityModel, SharedSessionBridge, SubagentActivityModel, StorageValuePruning, ComposerAttachmentDraft, SharedSessionTransfer) {
15
21
  'use strict';
22
+ const { removeEmptySummaryFields, removeEmptyFields } = StorageValuePruning;
16
23
  if (!StorageRunActions?.compactRunsForStorage || !StorageRunActions?.compactRunActionPayload || !StorageRunActions?.compactProviderSnapshot || !StorageRunActions?.compactRunExecutionSnapshot || !StorageRunActions?.compactStructuredEventValue || !StorageRunActions?.hashString || !RunInputQueue?.compactForStorage || !SettlementFacts?.compactSettlementFacts || !StorageSessionClaims?.createSessionClaimer) {
17
24
  throw new Error('Codex Overleaf storage run-action helpers are unavailable.');
18
25
  }
@@ -135,6 +142,7 @@
135
142
  });
136
143
  }
137
144
  var claimSessionsForAccount = StorageSessionClaims.createSessionClaimer(openDb, function () { return IDBKeyRange; });
145
+ var composerDraftStore = ComposerAttachmentDraft.createStore(openDb);
138
146
 
139
147
  function putRecord(storeName, record) {
140
148
  return openDb().then(function (db) {
@@ -232,17 +240,7 @@
232
240
  }
233
241
 
234
242
  function clearAllStores() {
235
- return openDb().then(function (db) {
236
- var storeNames = Object.keys(STORES);
237
- return new Promise(function (resolve, reject) {
238
- var tx = db.transaction(storeNames, 'readwrite');
239
- for (var i = 0; i < storeNames.length; i++) {
240
- tx.objectStore(storeNames[i]).clear();
241
- }
242
- tx.oncomplete = function () { resolve(); };
243
- tx.onerror = function (event) { reject(event.target.error); };
244
- });
245
- });
243
+ return composerDraftStore.clear(Object.keys(STORES));
246
244
  }
247
245
 
248
246
  // --- Record builders ---
@@ -272,14 +270,17 @@
272
270
  var lastActivityAt = typeof input.lastActivityAt === 'string' && input.lastActivityAt
273
271
  ? input.lastActivityAt
274
272
  : updatedAt;
275
- return {
273
+ var record = {
276
274
  id: input.id || generateId('ses'),
277
275
  projectId: input.projectId || '',
278
276
  title: normalizeSessionTitleForStorage(input.title, titleSource),
279
277
  titleSource: titleSource,
280
278
  codexThreadId: typeof input.codexThreadId === 'string' ? input.codexThreadId : '',
279
+ forkedFromSessionId: normalizeTextField(input.forkedFromSessionId, 160),
280
+ forkedFromRunId: normalizeTextField(input.forkedFromRunId, 160),
281
281
  status: typeof input.status === 'string' && input.status ? input.status : 'active',
282
282
  focusFiles: normalizePathList(input.focusFiles),
283
+ selectionContext: SessionState.normalizeSelectionContext(input.selectionContext),
283
284
  projectReferenceFiles: SessionState.normalizeProjectReferenceFiles(input.projectReferenceFiles),
284
285
  pendingInputs: RunInputQueue.compactForStorage(input.pendingInputs, {
285
286
  normalizeField: normalizeTextField,
@@ -287,7 +288,8 @@
287
288
  normalizePaths: normalizePathList
288
289
  }),
289
290
  history: compactHistoryForStorage(input.history),
290
- runs: compactRunsForStorage(input.runs, options),
291
+ runs: compactRunsForStorage(input.runs, { preserveRunActionPayload: false,
292
+ deferDirectoryCleanup: options.preserveRunActionPayload === true || options.deferDirectoryCleanup === true }),
291
293
  task: normalizeDisplayTextForStorage(input.task, SESSION_STORAGE_LIMITS.taskChars),
292
294
  mode: normalizeCurrentMode(input.mode), providerId: typeof input.providerId === 'string' && input.providerId ? input.providerId : 'builtin',
293
295
  model: typeof input.model === 'string' ? input.model : '',
@@ -301,6 +303,23 @@
301
303
  accountScopeUnavailable: accountScopeUnavailable,
302
304
  safeTaskSummary: safeTaskSummary
303
305
  };
306
+ if (options.preserveRunActionPayload === true) {
307
+ // Count the real display record before allocating recovery space. Adding
308
+ // older checkpoints must not make an otherwise valid history unwritable.
309
+ var metadataText = JSON.stringify(record), metadataBytes = SharedSessionTransfer.byteLength(metadataText);
310
+ record.runs = compactRunsForStorage(input.runs, { ...options,
311
+ canRetainActionPayload: function (bytes, chars) {
312
+ var totalBytes = metadataBytes + bytes + 4096, totalChars = metadataText.length + chars + 4096;
313
+ return totalBytes <= SharedSessionTransfer.MAX_WIRE_BYTES
314
+ || (totalBytes <= SharedSessionTransfer.MAX_RECORD_BYTES && totalChars * 2 <= SharedSessionTransfer.MAX_WIRE_BYTES);
315
+ } });
316
+ }
317
+ for (var run of record.runs) SessionState.pruneRunRecoveryScope(run, record);
318
+ return record;
319
+ }
320
+
321
+ function compactSessionBatchActions(records, options) {
322
+ return StorageRunActions.compactSessionBatchActions(records, options, buildSessionRecord, SharedSessionTransfer);
304
323
  }
305
324
 
306
325
  function resolveAccountScopeId(input) {
@@ -411,6 +430,7 @@
411
430
  var now = new Date().toISOString();
412
431
  return {
413
432
  id: input.id || generateId('aud'),
433
+ accountScopeId: typeof input.accountScopeId === 'string' ? input.accountScopeId : '',
414
434
  projectId: typeof input.projectId === 'string' ? input.projectId : '',
415
435
  sessionId: typeof input.sessionId === 'string' ? input.sessionId : '',
416
436
  turnId: typeof input.turnId === 'string' ? input.turnId : '',
@@ -460,7 +480,8 @@
460
480
  customInstructionsByProject: normalizeStringMap(state.customInstructionsByProject),
461
481
  governanceRulesByProject: normalizeGovernanceRulesMap(state.governanceRulesByProject),
462
482
  selectedLocalSkillIdsByProject: normalizeStringListMap(state.selectedLocalSkillIdsByProject),
463
- codexOverleafSkillEnabled: normalizeCodexOverleafSkillEnabledMap(state.codexOverleafSkillEnabled)
483
+ codexOverleafSkillEnabled: normalizeCodexOverleafSkillEnabledMap(state.codexOverleafSkillEnabled),
484
+ codexLocalSkillEnabled: SessionState.normalizeCodexLocalSkillEnabled(state.codexLocalSkillEnabled)
464
485
  };
465
486
  return prefs;
466
487
  }
@@ -513,7 +534,7 @@
513
534
  continue;
514
535
  }
515
536
  result[key] = typeof value[rawKey] === 'string'
516
- ? normalizeTextField(value[rawKey], CUSTOM_INSTRUCTIONS_MAX_CHARS)
537
+ ? normalizeDisplayTextForStorage(value[rawKey], CUSTOM_INSTRUCTIONS_MAX_CHARS)
517
538
  : '';
518
539
  }
519
540
  return result;
@@ -634,9 +655,9 @@
634
655
  function normalizeSessionTitleForStorage(value, titleSource) {
635
656
  var title = typeof value === 'string' ? value.trim() : '';
636
657
  if (titleSource === 'manual') {
637
- return normalizeTextField(title === LEGACY_DEFAULT_SESSION_TITLE ? '' : title, SESSION_STORAGE_LIMITS.sessionTitleChars);
658
+ return normalizeDisplayTextForStorage(title === LEGACY_DEFAULT_SESSION_TITLE ? '' : title, SESSION_STORAGE_LIMITS.sessionTitleChars);
638
659
  }
639
- return normalizeTextField(title === LEGACY_DEFAULT_SESSION_TITLE ? '' : title, SESSION_STORAGE_LIMITS.sessionTitleChars);
660
+ return normalizeDisplayTextForStorage(title === LEGACY_DEFAULT_SESSION_TITLE ? '' : title, SESSION_STORAGE_LIMITS.sessionTitleChars);
640
661
  }
641
662
 
642
663
  function compactHistoryForStorage(history) {
@@ -654,22 +675,27 @@
654
675
  function compactRunsForStorage(runs, options) {
655
676
  return StorageRunActions.compactRunsForStorage(runs, options, SESSION_STORAGE_LIMITS.maxRunsPerSession, compactRunForStorage);
656
677
  }
657
- function compactRunForStorage(run, keepActionPayload) {
658
- var actionPayload = StorageRunActions.compactRunActionPayload(run, keepActionPayload);
678
+ function compactRunForStorage(run, keepActionPayload, preparedActionPayload) {
679
+ run = SessionState.recoverRecordedRunFailure(run);
680
+ var actionPayload = preparedActionPayload || StorageRunActions.compactRunActionPayload(run, keepActionPayload);
659
681
  var compact = {
682
+ ...SessionState.pickWritebackRecovery(run),
660
683
  id: run.id,
684
+ forkSnapshot: run.forkSnapshot === true,
685
+ forkSourceRunId: normalizeTextField(run.forkSourceRunId, 160),
661
686
  task: normalizeDisplayTextForStorage(run.task || 'untitled task', SESSION_STORAGE_LIMITS.taskChars),
662
687
  mode: typeof run.mode === 'string' ? redactSecretLikeText(run.mode) : '', ...StorageRunActions.compactProviderSnapshot(run),
663
688
  ...StorageRunActions.compactRunExecutionSnapshot(run, function (text) { return normalizeTextField(text, 4096); }),
664
689
  model: normalizeTextField(run.model, 80),
665
690
  reasoningEffort: typeof run.reasoningEffort === 'string' ? redactSecretLikeText(run.reasoningEffort) : '',
666
691
  speedTier: typeof run.speedTier === 'string' ? redactSecretLikeText(run.speedTier) : '',
667
- status: normalizeRunStatus(run.status),
692
+ status: SessionState.normalizeRunStatus(run.status, run),
668
693
  statusText: normalizeDisplayTextForStorage(run.statusText, SESSION_STORAGE_LIMITS.statusTextChars),
669
694
  runProjectId: normalizeProjectPrefKey(run.runProjectId),
670
695
  startedAt: typeof run.startedAt === 'string' ? redactSecretLikeText(run.startedAt) : '',
671
696
  finishedAt: typeof run.finishedAt === 'string' ? redactSecretLikeText(run.finishedAt) : '',
672
697
  events: compactRunEventsForStorage(run.events),
698
+ ...(run.subagents?.length ? { subagents: SubagentActivityModel.normalize(run.subagents, sanitizeAssistantVisibleText) } : {}),
673
699
  attachments: compactRunAttachmentsForStorage(run.attachments),
674
700
  appliedOperations: actionPayload.appliedOperations,
675
701
  undoOperations: actionPayload.undoOperations,
@@ -677,7 +703,10 @@
677
703
  undoTrackedChanges: actionPayload.undoTrackedChanges,
678
704
  undoExpectedFiles: actionPayload.undoExpectedFiles,
679
705
  ...(actionPayload.trackedChangeCaptures ? { trackedChangeCaptures: actionPayload.trackedChangeCaptures } : {}),
706
+ ...(actionPayload.pendingDirectoryCleanup ? { pendingDirectoryCleanup: actionPayload.pendingDirectoryCleanup } : {}),
707
+ ...(actionPayload.recoveryRetention ? { recoveryRetention: SessionState.normalizeRecoveryRetention(actionPayload.recoveryRetention) } : {}),
680
708
  undoStatus: normalizeDisplayTextForStorage(run.undoStatus, SESSION_STORAGE_LIMITS.statusTextChars),
709
+ ...(run.undoOwnerProtocol === 1 ? { undoOwnerProtocol: 1 } : {}),
681
710
  nativeRequestId: normalizeTextField(run.nativeRequestId, 160),
682
711
  codexThreadId: normalizeTextField(run.codexThreadId, 160), codexTurnId: normalizeTextField(run.codexTurnId, 160),
683
712
  nativeEventSeq: Number.isFinite(Number(run.nativeEventSeq)) ? Number(run.nativeEventSeq) : 0,
@@ -716,9 +745,17 @@
716
745
  status: normalizeEventStatus(event.status),
717
746
  timestamp: typeof event.timestamp === 'string' ? redactSecretLikeText(event.timestamp) : '',
718
747
  kind: typeof event.kind === 'string' ? redactSecretLikeText(event.kind) : 'activity',
748
+ guidanceId: normalizeTextField(event.guidanceId, 160),
719
749
  streamKey: typeof event.streamKey === 'string' ? redactSecretLikeText(event.streamKey) : '',
720
750
  streamRole: typeof event.streamRole === 'string' ? redactSecretLikeText(event.streamRole) : ''
721
751
  };
752
+ // Persist the bounded display projection, never the raw tool payload.
753
+ // Hydration uses the same model; dropping this metadata demotes tools
754
+ // to hidden diagnostics after an otherwise successful history reload.
755
+ var activity = RunActivityModel.capture(event, sanitizeAssistantVisibleText);
756
+ if (activity) compact.activity = activity;
757
+ var streamPhase = RunActivityModel.normalizePhase(event.streamPhase);
758
+ if (streamPhase) compact.streamPhase = streamPhase;
722
759
  if (event.subagent === true) {
723
760
  compact.subagent = true;
724
761
  }
@@ -744,7 +781,7 @@
744
781
 
745
782
  // Deep-copies a known-safe structured event value (the completion-report
746
783
  // {conclusion, body, meta[]} payload, or a FailureReason object) preserving
747
- // its shape while redacting + truncating every string field. Bounded depth +
784
+ // its shape while applying display-path rules and string limits. Bounded depth +
748
785
  // breadth so a pathological value can't blow up the stored record.
749
786
  function compactStructuredEventValueForStorage(value, depth) {
750
787
  return StorageRunActions.compactStructuredEventValue(value, {
@@ -787,7 +824,11 @@
787
824
  }
788
825
 
789
826
  function normalizeDisplayTextForStorage(value, maxChars) {
790
- return normalizeTextField(value, maxChars);
827
+ var text = sanitizeAssistantVisibleText(value);
828
+ if (!Number.isFinite(maxChars) || maxChars <= 0 || text.length <= maxChars) {
829
+ return text;
830
+ }
831
+ return text.slice(0, Math.max(0, maxChars - 1)) + '…';
791
832
  }
792
833
 
793
834
  function summarizeStructuredValueForStorage(value, maxChars) {
@@ -914,25 +955,6 @@
914
955
  .trim(), maxChars || SESSION_STORAGE_LIMITS.pathChars);
915
956
  }
916
957
 
917
- function normalizeRunStatus(status) {
918
- // Welcome-panel + write-guard: the run-status
919
- // enum gained three post-navigation values. The storage normalizer must
920
- // accept them so a settled run round-trips intact through `buildSessionRecord`.
921
- // Unknown legacy values fall through to `completed` (the historical default).
922
- return [
923
- 'pending',
924
- 'running',
925
- 'completed',
926
- 'failed',
927
- 'background_completed',
928
- 'needs_review_after_navigation',
929
- 'abandoned_after_navigation',
930
- // v1.8.1: reload-orphaned runs settle to 'interrupted' (v1.7.6); the
931
- // storage round-trip must not rewrite them to a false 'completed'.
932
- 'interrupted'
933
- ].indexOf(status) !== -1 ? status : 'completed';
934
- }
935
-
936
958
  function normalizeEventStatus(status) {
937
959
  return VALID_EVENT_STATUSES[status] ? status : 'info';
938
960
  }
@@ -1016,7 +1038,7 @@
1016
1038
  }
1017
1039
 
1018
1040
  function normalizeTextField(value, maxChars) {
1019
- var text = sanitizeAssistantVisibleText(value);
1041
+ var text = sanitizeAssistantVisibleText(redactSecretLikeText(value));
1020
1042
  if (!Number.isFinite(maxChars) || maxChars <= 0 || text.length <= maxChars) {
1021
1043
  return text;
1022
1044
  }
@@ -1027,7 +1049,8 @@
1027
1049
  if (typeof value !== 'string' || !value) {
1028
1050
  return '';
1029
1051
  }
1030
- var text = redactSecretLikeText(value);
1052
+ // Preserve conversation examples and quotations through save/reload.
1053
+ var text = value;
1031
1054
  if (!mightContainLocalReferenceText(text)) {
1032
1055
  return text;
1033
1056
  }
@@ -1106,37 +1129,7 @@
1106
1129
  return 'error';
1107
1130
  }
1108
1131
 
1109
- function removeEmptySummaryFields(value) {
1110
- var result = {};
1111
- var keys = Object.keys(value || {});
1112
- for (var i = 0; i < keys.length; i++) {
1113
- var key = keys[i];
1114
- var item = value[key];
1115
- if (item === undefined || item === '' || item === null) {
1116
- continue;
1117
- }
1118
- if (Array.isArray(item) && item.length === 0) {
1119
- continue;
1120
- }
1121
- if (item && typeof item === 'object' && !Array.isArray(item) && Object.keys(item).length === 0) {
1122
- continue;
1123
- }
1124
- result[key] = item;
1125
- }
1126
- return result;
1127
- }
1128
1132
 
1129
- function removeEmptyFields(value) {
1130
- var result = {};
1131
- var keys = Object.keys(value);
1132
- for (var i = 0; i < keys.length; i++) {
1133
- var key = keys[i];
1134
- if (value[key] !== undefined && value[key] !== '') {
1135
- result[key] = value[key];
1136
- }
1137
- }
1138
- return result;
1139
- }
1140
1133
 
1141
1134
  // Welcome-panel + write-guard: the Recent-projects
1142
1135
  // dashboard variant calls `listRecentProjectsAcrossAccount` to get the
@@ -1328,7 +1321,7 @@
1328
1321
  }
1329
1322
  var hashString = StorageRunActions.hashString;
1330
1323
 
1331
- return {
1324
+ return SharedSessionBridge.decorate({
1332
1325
  TARGET_SCHEMA_VERSION: TARGET_SCHEMA_VERSION,
1333
1326
  DB_NAME: DB_NAME,
1334
1327
  STORES: STORES,
@@ -1342,7 +1335,13 @@
1342
1335
  deleteByIndex: deleteByIndex,
1343
1336
  clearStore: clearStore,
1344
1337
  clearAllStores: clearAllStores,
1338
+ clearAuxiliaryStores: function () { return composerDraftStore.clear(Object.keys(STORES).filter(name => name !== 'sessions')); },
1339
+ readComposerAttachmentDraft: composerDraftStore.read,
1340
+ writeComposerAttachmentDraft: composerDraftStore.write,
1345
1341
  buildSessionRecord: buildSessionRecord,
1342
+ compactSessionBatchActions: compactSessionBatchActions,
1343
+ projectRetentionWarnings: StorageRunActions.projectRetentionWarnings,
1344
+ projectRetentionUpdates: StorageRunActions.projectRetentionUpdates,
1346
1345
  mergeSessionReviewState: StorageRunActions.mergeSessionReviewState,
1347
1346
  buildTurnRecord: buildTurnRecord,
1348
1347
  buildEventRecord: buildEventRecord,
@@ -1355,5 +1354,5 @@
1355
1354
  filterRecentProjectsAcrossAccount: filterRecentProjectsAcrossAccount,
1356
1355
  derivePrimaryStatusBadge: derivePrimaryStatusBadge,
1357
1356
  getAllSessions: getAllSessions
1358
- };
1357
+ });
1359
1358
  });
@@ -8,6 +8,7 @@
8
8
  'use strict';
9
9
 
10
10
  var PREFS_KEY = 'codexOverleafPrefs';
11
+ var LEGACY_MIGRATION_PREFIX = 'codexOverleafLegacyPanelMigration:';
11
12
  var SESSION_TOMBSTONES_KEY = 'codexOverleafSessionTombstones';
12
13
  var SESSION_TOMBSTONE_ENTRY_PREFIX = 'codexOverleafSessionTombstone:v2:';
13
14
  var MAX_DELETED_SESSION_IDS_PER_PROJECT = 100;
@@ -50,6 +51,9 @@
50
51
  }
51
52
 
52
53
  function withProjectPreferenceLock(projectId, work) {
54
+ if (StorageDb.sharedSessionsEnabled?.()) {
55
+ return StorageDb.withSharedLock('preferences', { projectId: projectId }, work);
56
+ }
53
57
  var lockName = 'codex-overleaf-project-prefs:' + compactScopePart(projectId);
54
58
  var lockManager = typeof navigator !== 'undefined' && navigator && navigator.locks;
55
59
  if (lockManager && typeof lockManager.request === 'function') {
@@ -136,118 +140,77 @@
136
140
 
137
141
  function runMigrationIfNeeded(projectId, legacyStorageKey, accountScopeId) {
138
142
  projectId = normalizeProjectPrefKey(projectId);
139
- var normalizedAccountScopeId = normalizeTextField(accountScopeId, PROJECT_PREF_KEY_MAX_CHARS);
140
- if (!normalizedAccountScopeId || !projectId) {
141
- return Promise.resolve({
142
- prefs: normalizePrefs({}),
143
- sessions: [],
144
- activeSessionId: '',
145
- migrated: false,
146
- reason: 'account_scope_unavailable'
147
- });
148
- }
149
- return withProjectPreferenceLock(projectId, function () {
150
- return chrome.storage.local.get(null).then(function (stored) {
151
- var claimed = claimLegacyProjectPreferences(
152
- stored[PREFS_KEY] || {},
153
- normalizedAccountScopeId,
154
- projectId
155
- );
156
- var storedPrefs = claimed.prefs;
157
- var persistClaim = claimed.changed
158
- ? chrome.storage.local.set({ [PREFS_KEY]: storedPrefs })
159
- : Promise.resolve();
160
- return persistClaim.then(function () {
161
- var prefs = buildProjectPreferenceView(
162
- storedPrefs,
163
- normalizedAccountScopeId,
164
- projectId
165
- );
166
- var tombstones = collectSessionTombstones(stored);
167
- var deletedSessionIds = getDeletedSessionIds(tombstones, projectId);
168
- var schemaVersion = prefs.storageSchemaVersion || 0;
169
-
170
- if (schemaVersion >= StorageDb.TARGET_SCHEMA_VERSION) {
171
- var activeSessionByProject = prefs.activeSessionByProject || {};
172
- var activeSessionId = activeSessionByProject[projectId] || '';
173
- if (typeof StorageDb.claimSessionsForAccount !== 'function') {
174
- return Promise.reject(Object.assign(
175
- new Error('Atomic legacy-session claiming is unavailable.'),
176
- { code: 'scoped_claim_unavailable' }
177
- ));
178
- }
179
- return StorageDb.claimSessionsForAccount(
180
- projectId,
181
- normalizedAccountScopeId,
182
- deletedSessionIds
183
- ).then(function (visibleSessions) {
184
- var visibleActiveSessionId = visibleSessions.some(function (session) {
185
- return session && session.id === activeSessionId;
186
- })
187
- ? activeSessionId
188
- : visibleSessions.length
189
- ? visibleSessions[visibleSessions.length - 1].id
190
- : '';
191
- return {
192
- prefs: prefs,
193
- sessions: visibleSessions,
194
- activeSessionId: visibleActiveSessionId,
195
- migrated: false
196
- };
197
- });
198
- }
199
-
200
- // Migration v0 → v1
201
- var legacyBlob = stored[legacyStorageKey] || {};
202
- var legacySessions = Array.isArray(legacyBlob.sessions) ? legacyBlob.sessions : [];
203
- var migratedSessions = [];
204
-
205
- for (var i = 0; i < legacySessions.length; i++) {
206
- var legacy = legacySessions[i];
207
- if (!legacy || !legacy.id) { continue; }
208
- if (deletedSessionIds.indexOf(legacy.id) !== -1) { continue; }
209
- var record = StorageDb.buildSessionRecord(
210
- buildLegacySessionRecordInput(projectId, legacyBlob, legacy, normalizedAccountScopeId)
211
- );
212
- migratedSessions.push(record);
213
- }
214
-
215
- var putPromise = migratedSessions.length
216
- ? StorageDb.putRecords('sessions', migratedSessions)
217
- : Promise.resolve([]);
218
-
219
- return putPromise.then(function () {
220
- var newPrefs = StorageDb.extractLightweightPrefs(legacyBlob, projectId);
221
- newPrefs.activeSessionByProject = StorageDb.buildActiveSessionByProject(
222
- {},
223
- projectId,
224
- legacyBlob.activeSessionId || (migratedSessions.length ? migratedSessions[migratedSessions.length - 1].id : '')
225
- );
226
- var mergedPrefs = mergeScopedProjectPreferences(
227
- storedPrefs,
228
- newPrefs,
229
- normalizedAccountScopeId,
230
- projectId
231
- );
232
- var prefsView = buildProjectPreferenceView(
233
- mergedPrefs,
234
- normalizedAccountScopeId,
235
- projectId
236
- );
237
-
238
- return chrome.storage.local.set({ [PREFS_KEY]: mergedPrefs }).then(function () {
239
- return chrome.storage.local.remove(legacyStorageKey).catch(function () {});
240
- }).then(function () {
241
- return {
242
- prefs: prefsView,
243
- sessions: migratedSessions,
244
- activeSessionId: prefsView.activeSessionByProject[projectId] || '',
245
- migrated: true
246
- };
247
- });
248
- });
143
+ var account = normalizeTextField(accountScopeId, PROJECT_PREF_KEY_MAX_CHARS);
144
+ if (!account || !projectId) return Promise.resolve({ prefs: normalizePrefs({}), sessions: [],
145
+ activeSessionId: '', migrated: false, reason: 'account_scope_unavailable' });
146
+ return withProjectPreferenceLock(projectId, async function () {
147
+ var stored = await chrome.storage.local.get(null);
148
+ var claimed = claimLegacyProjectPreferences(stored[PREFS_KEY] || {}, account, projectId);
149
+ var storedPrefs = claimed.prefs;
150
+ if (claimed.changed) await chrome.storage.local.set({ [PREFS_KEY]: storedPrefs });
151
+ var prefs = buildProjectPreferenceView(storedPrefs, account, projectId);
152
+ var deleted = getDeletedSessionIds(collectSessionTombstones(stored), projectId);
153
+ var markerKey = LEGACY_MIGRATION_PREFIX + encodeURIComponent(String(legacyStorageKey || ''));
154
+ var marker = stored[markerKey];
155
+ var legacyBlob = stored[legacyStorageKey];
156
+ var hasLegacy = Boolean(legacyBlob && typeof legacyBlob === 'object' && !Array.isArray(legacyBlob));
157
+ var schemaCurrent = (prefs.storageSchemaVersion || 0) >= StorageDb.TARGET_SCHEMA_VERSION;
158
+ if (marker && (marker.projectId !== projectId || marker.sourceKey !== legacyStorageKey || !marker.accountScopeId)) {
159
+ throw Object.assign(new Error('The legacy history source has a conflicting migration identity.'), { code: 'legacy_migration_scope_conflict' });
160
+ }
161
+ if (typeof StorageDb.claimSessionsForAccount !== 'function') {
162
+ throw Object.assign(new Error('Atomic legacy-session claiming is unavailable.'), { code: 'scoped_claim_unavailable' });
163
+ }
164
+ var visible = await StorageDb.claimSessionsForAccount(projectId, account, deleted);
165
+ function result(currentPrefs, sessions, migrated) {
166
+ var wanted = currentPrefs.activeSessionByProject?.[projectId] || '';
167
+ return { prefs: currentPrefs, sessions: sessions,
168
+ activeSessionId: sessions.some(session => session.id === wanted) ? wanted : sessions.at(-1)?.id || '',
169
+ migrated: migrated };
170
+ }
171
+ if ((schemaCurrent && !hasLegacy) || marker?.complete || (marker && marker.accountScopeId !== account)) {
172
+ return result(prefs, visible, false);
173
+ }
174
+ legacyBlob = hasLegacy ? legacyBlob : {};
175
+ var legacySessions = Array.isArray(legacyBlob.sessions) ? legacyBlob.sessions : [];
176
+ var owners = new Set([legacyBlob.accountScopeId, legacyBlob.__codexOverleafFallbackAccountScopeId,
177
+ ...legacySessions.map(session => session?.accountScopeId)].filter(value => typeof value === 'string' && value));
178
+ if ([...owners].some(owner => owner !== account)) return result(prefs, visible, false);
179
+ // The shared preferences lock serializes this source claim across accounts.
180
+ // Keep it after a write failure; only its owner can finish the import.
181
+ if (hasLegacy && !marker) {
182
+ marker = { sourceKey: legacyStorageKey, projectId: projectId, accountScopeId: account, complete: false };
183
+ await chrome.storage.local.set({ [markerKey]: marker });
184
+ }
185
+ var existingIds = new Set(visible.map(session => session.id));
186
+ var incoming = legacySessions.filter(session => session?.id && !deleted.includes(session.id) && !existingIds.has(session.id))
187
+ .map(session => StorageDb.buildSessionRecord(buildLegacySessionRecordInput(projectId, legacyBlob, session, account)));
188
+ var written = incoming.length ? await StorageDb.putRecords('sessions', incoming) : [];
189
+ if (incoming.length && (!Array.isArray(written) || incoming.some(session => !written.some(record =>
190
+ record.id === session.id && record.accountScopeId === account && record.projectId === projectId)))) {
191
+ throw Object.assign(new Error('Legacy history was not confirmed in the main session store.'), { code: 'legacy_migration_not_persisted' });
192
+ }
193
+ var sessions = [...visible, ...written];
194
+ var newPrefs = StorageDb.extractLightweightPrefs(legacyBlob, projectId);
195
+ if (schemaCurrent) {
196
+ // A later project's import must not reset current global preferences.
197
+ var legacyPrefs = newPrefs;
198
+ newPrefs = Object.assign({}, legacyPrefs, prefs);
199
+ PROJECT_SCOPED_PREF_MAPS.forEach(function (name) {
200
+ newPrefs[name] = Object.assign({}, legacyPrefs[name] || {}, prefs[name] || {});
249
201
  });
250
- });
202
+ }
203
+ var currentActive = prefs.activeSessionByProject?.[projectId];
204
+ var activeId = sessions.some(session => session.id === currentActive) ? currentActive
205
+ : legacyBlob.activeSessionId || sessions.at(-1)?.id || '';
206
+ newPrefs.activeSessionByProject = StorageDb.buildActiveSessionByProject({}, projectId, activeId);
207
+ var mergedPrefs = mergeScopedProjectPreferences(storedPrefs, newPrefs, account, projectId);
208
+ await chrome.storage.local.set({ [PREFS_KEY]: mergedPrefs });
209
+ // Completion is per source and owner, independent of the global schema.
210
+ // A failed cleanup cannot replay old content or transfer it to another account.
211
+ if (hasLegacy) await chrome.storage.local.set({ [markerKey]: { ...marker, complete: true } });
212
+ await chrome.storage.local.remove(legacyStorageKey).catch(function () {});
213
+ return result(buildProjectPreferenceView(mergedPrefs, account, projectId), sessions, true);
251
214
  });
252
215
  }
253
216