codex-overleaf-link 2.4.1 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +272 -314
- package/README.zh-CN.md +287 -329
- package/extension/bootstrap/background.js +47 -10
- package/extension/bootstrap/manifest.template.json +9 -4
- package/extension/bootstrap/popup.html +10 -16
- package/extension/bootstrap/update.js +25 -2
- package/extension/runtime-manifest.json +3 -1
- package/extension/src/background.js +28 -3
- package/extension/src/backgroundSharedSessions.js +380 -0
- package/extension/src/backgroundUpdateCoordinator.js +442 -379
- package/extension/src/content/activeTurnControl.js +8 -0
- package/extension/src/content/assetTransferBroker.js +186 -12
- package/extension/src/content/changeHistoryView.js +175 -0
- package/extension/src/content/composerAttachments.js +24 -22
- package/extension/src/content/composerPanel.js +23 -8
- package/extension/src/content/contentRuntime.js +507 -507
- package/extension/src/content/diagnosticsController.js +1 -2
- package/extension/src/content/diagnosticsExport.js +222 -0
- package/extension/src/content/diagnosticsPanel.js +48 -19
- package/extension/src/content/diffReviewPanel.js +8 -5
- package/extension/src/content/generated/content.bundle.js +8330 -1349
- package/extension/src/content/generated/content.bundle.meta.json +22 -3
- package/extension/src/content/legacyGlobalRegistry.js +19 -1
- package/extension/src/content/localSkillsPanel.js +42 -7
- package/extension/src/content/markdownDomRenderer.js +9 -4
- package/extension/src/content/modelPicker.js +1 -1
- package/extension/src/content/pageBridgeClient.js +18 -3
- package/extension/src/content/panelMaintenance.js +48 -121
- package/extension/src/content/panelRenderer.js +4 -0
- package/extension/src/content/pendingInputView.js +109 -76
- package/extension/src/content/providerSettingsCoordinator.js +17 -6
- package/extension/src/content/providerSettingsDialog.js +661 -108
- package/extension/src/content/recentProjects.js +10 -1
- package/extension/src/content/runActivitySummary.js +631 -0
- package/extension/src/content/runController.js +3 -1
- package/extension/src/content/runFailureNotice.js +14 -1
- package/extension/src/content/runGuidanceController.js +4 -3
- package/extension/src/content/runPresence.js +306 -0
- package/extension/src/content/runQueueScheduler.js +2 -1
- package/extension/src/content/runResultActions.js +123 -3
- package/extension/src/content/runTimelineView.js +186 -154
- package/extension/src/content/selectionContextView.js +300 -0
- package/extension/src/content/sessionPersistence.js +6 -1
- package/extension/src/content/settingsPanel.js +77 -52
- package/extension/src/content/settingsWorkbench.js +374 -0
- package/extension/src/content/sharedSessionViewSync.js +72 -0
- package/extension/src/content/subagentActivityView.js +195 -0
- package/extension/src/content/trackedChangeCaptureController.js +7 -3
- package/extension/src/content/updateNotice.js +121 -50
- package/extension/src/content/writebackController.js +257 -0
- package/extension/src/content/writebackOrchestrator.js +146 -141
- package/extension/src/content/writebackPlan.js +231 -0
- package/extension/src/content/writebackRecovery.js +122 -0
- package/extension/src/content/writingStyleSettings.js +576 -0
- package/extension/src/content/writtenChangesView.js +152 -0
- package/extension/src/page/binaryAssetUploader.js +97 -19
- package/extension/src/page/overleafProjectSnapshot.js +1 -0
- package/extension/src/page/referenceProjects.js +148 -0
- package/extension/src/page/saveState.js +14 -2
- package/extension/src/page/snapshotRouter.js +44 -13
- package/extension/src/page/textCoordinates.js +102 -0
- package/extension/src/page/textFileCreator.js +350 -59
- package/extension/src/page/trackedChangeCapture.js +42 -56
- package/extension/src/page/trackedChangeOwnership.js +198 -0
- package/extension/src/page/trackedChangeReplay.js +164 -0
- package/extension/src/page/trackedChangesLifecycle.js +135 -149
- package/extension/src/page/treeOperations.js +26 -2
- package/extension/src/page/writebackReceiptJournal.js +112 -0
- package/extension/src/page/writebackRouter.js +175 -135
- package/extension/src/pageBridge.js +56 -101
- package/extension/src/popup.js +203 -59
- package/extension/src/shared/agentTranscript.js +18 -4
- package/extension/src/shared/auditRecords.js +71 -0
- package/extension/src/shared/changeHistoryModel.js +94 -0
- package/extension/src/shared/compatibility.js +1 -1
- package/extension/src/shared/compileAdapter.js +42 -0
- package/extension/src/shared/failureReasons.js +20 -0
- package/extension/src/shared/globalPreferences.js +1 -1
- package/extension/src/shared/i18n.js +93 -25
- package/extension/src/shared/managedUpdateProjection.js +6 -3
- package/extension/src/shared/pageRpcContract.js +7 -1
- package/extension/src/shared/providerProfiles.js +109 -0
- package/extension/src/shared/runActivityModel.js +361 -0
- package/extension/src/shared/runExecutionSnapshot.js +8 -2
- package/extension/src/shared/runExecutionSnapshotCodec.js +16 -4
- package/extension/src/shared/scopedPersistenceBrowserAdapter.js +6 -3
- package/extension/src/shared/selectionContext.js +28 -0
- package/extension/src/shared/sessionState.js +97 -6
- package/extension/src/shared/sharedSessionBridge.js +288 -0
- package/extension/src/shared/storageDb.js +22 -55
- package/extension/src/shared/storageMigration.js +3 -0
- package/extension/src/shared/storageRunActions.js +10 -4
- package/extension/src/shared/storageValuePruning.js +40 -0
- package/extension/src/shared/subagentActivityModel.js +174 -0
- package/extension/src/shared/undoOperations.js +87 -0
- package/extension/src/shared/updateConsent.js +37 -8
- package/extension/src/shared/writebackIntent.js +62 -0
- package/extension/src/shared/writebackSettlement.js +29 -10
- package/extension/src/shared/writingStyle.js +33 -0
- package/extension/styles/panel.css +1972 -384
- package/extension/styles/popup.css +110 -0
- package/native-host/src/anthropicBridgeRequest.js +2 -1
- package/native-host/src/codexModelRecovery.js +107 -0
- package/native-host/src/codexPromptAssembly.js +2 -0
- package/native-host/src/codexProviderLaunch.js +3 -3
- package/native-host/src/codexRuntimeIdentity.js +1 -0
- package/native-host/src/codexSessionRunner.js +106 -140
- package/native-host/src/codexSessionTiming.js +3 -0
- package/native-host/src/managedInstall.js +5 -4
- package/native-host/src/nativeEnvironment.js +70 -0
- package/native-host/src/nativeQuotas.js +15 -8
- package/native-host/src/overleafWorkspaceRules.js +16 -0
- package/native-host/src/processStopBarrier.js +80 -0
- package/native-host/src/providerModelCatalog.js +4 -3
- package/native-host/src/providerProfile.js +13 -1
- package/native-host/src/providerReasoning.js +9 -5
- package/native-host/src/providerStore.js +4 -0
- package/native-host/src/releaseTransport.js +14 -5
- package/native-host/src/selectionScope.js +58 -0
- package/native-host/src/skills/parallel-subagents/SKILL.md +31 -3
- package/native-host/src/skills/writing-style-builder/SKILL.md +146 -0
- package/native-host/src/subagentBroker.js +102 -98
- package/native-host/src/subagentTelemetry.js +316 -0
- package/native-host/src/subagentWorkspace.js +103 -0
- package/native-host/src/subagentWorkspacePath.js +31 -0
- package/native-host/src/taskRunnerRuntime.js +55 -5
- package/native-host/src/turnAttachments.js +113 -0
- package/native-host/src/updateManager.js +122 -12
- package/native-host/src/updateNetworkControl.js +75 -0
- package/native-host/src/updateTrust.js +21 -2
- package/native-host/src/vendor/pdfjs/LICENSE +177 -0
- package/native-host/src/vendor/pdfjs/SOURCE.txt +3 -0
- package/native-host/src/vendor/pdfjs/cmaps/78-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/78-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/78-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/78-RKSJ-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/78-RKSJ-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/78-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/78ms-RKSJ-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/78ms-RKSJ-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/83pv-RKSJ-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/90ms-RKSJ-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/90ms-RKSJ-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/90msp-RKSJ-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/90msp-RKSJ-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/90pv-RKSJ-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/90pv-RKSJ-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Add-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Add-RKSJ-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Add-RKSJ-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Add-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-0.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-1.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-2.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-3.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-4.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-5.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-6.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-0.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-1.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-2.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-3.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-4.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-5.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-0.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-1.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-2.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-3.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-4.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-5.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-6.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-0.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-1.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-2.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/B5-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/B5pc-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/B5pc-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/CNS-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/CNS-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/CNS1-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/CNS1-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/CNS2-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/CNS2-V.bcmap +3 -0
- package/native-host/src/vendor/pdfjs/cmaps/ETHK-B5-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/ETHK-B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/ETen-B5-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/ETen-B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/ETenms-B5-H.bcmap +3 -0
- package/native-host/src/vendor/pdfjs/cmaps/ETenms-B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Ext-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Ext-RKSJ-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Ext-RKSJ-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Ext-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GB-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GB-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GB-H.bcmap +4 -0
- package/native-host/src/vendor/pdfjs/cmaps/GB-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBK-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBK-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBK2K-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBK2K-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBKp-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBKp-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBT-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBT-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBT-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBT-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBTpc-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBTpc-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBpc-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBpc-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKdla-B5-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKdla-B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKdlb-B5-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKdlb-B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKgccs-B5-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKgccs-B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKm314-B5-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKm314-B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKm471-B5-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKm471-B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKscs-B5-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKscs-B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Hankaku.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Hiragana.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSC-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSC-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSC-Johab-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSC-Johab-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSCpc-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSCpc-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Katakana.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/LICENSE +36 -0
- package/native-host/src/vendor/pdfjs/cmaps/NWP-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/NWP-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/RKSJ-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/RKSJ-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Roman.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UCS2-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UCS2-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF16-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF16-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF32-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF32-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF8-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF8-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniGB-UCS2-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniGB-UCS2-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF16-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF16-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF32-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF32-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF8-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF8-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF16-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF16-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF32-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF32-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF8-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF8-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniKS-UCS2-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniKS-UCS2-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF16-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF16-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF32-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF32-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF8-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF8-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/WP-Symbol.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/pdf.mjs +26740 -0
- package/native-host/src/vendor/pdfjs/pdf.worker.mjs +62201 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitDingbats.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixed.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixedBold.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixedItalic.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerif.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerifBold.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerifItalic.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSymbol.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/LICENSE_FOXIT +27 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/LICENSE_LIBERATION +102 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-Bold.ttf +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-Italic.ttf +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-Regular.ttf +0 -0
- package/native-host/src/writingStyleEvidence.js +102 -0
- package/native-host/src/writingStylePdfWorker.js +35 -0
- package/native-host/src/writingStyleProfile.js +165 -0
- package/native-host/src/writingStyleRuntime.js +447 -0
- package/package.json +1 -1
|
@@ -2,19 +2,21 @@
|
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"entry": "extension/entries/content-entry.mjs",
|
|
4
4
|
"output": "extension/src/content/generated/content.bundle.js",
|
|
5
|
-
"sourceDigest": "
|
|
6
|
-
"outputDigest": "
|
|
7
|
-
"byteLength":
|
|
5
|
+
"sourceDigest": "a96cd1d3e417ecc9e124f48d9ad6dd728256c084f09a804d809299de8e4a7da3",
|
|
6
|
+
"outputDigest": "09a6e2a4d4c6be0f8f8ad284c601e6cdf1843be09161f70a225abd56277b9c19",
|
|
7
|
+
"byteLength": 2838686,
|
|
8
8
|
"inputs": [
|
|
9
9
|
"extension/entries/content-entry.mjs",
|
|
10
10
|
"extension/src/content/activeTurnControl.js",
|
|
11
11
|
"extension/src/content/applyResultFormatters.js",
|
|
12
12
|
"extension/src/content/assetTransferBroker.js",
|
|
13
|
+
"extension/src/content/changeHistoryView.js",
|
|
13
14
|
"extension/src/content/composerAttachments.js",
|
|
14
15
|
"extension/src/content/composerPanel.js",
|
|
15
16
|
"extension/src/content/contentRuntime.js",
|
|
16
17
|
"extension/src/content/contextTray.js",
|
|
17
18
|
"extension/src/content/diagnosticsController.js",
|
|
19
|
+
"extension/src/content/diagnosticsExport.js",
|
|
18
20
|
"extension/src/content/diagnosticsPanel.js",
|
|
19
21
|
"extension/src/content/diffReviewPanel.js",
|
|
20
22
|
"extension/src/content/globalPreferencesController.js",
|
|
@@ -43,10 +45,12 @@
|
|
|
43
45
|
"extension/src/content/providerSettingsDialog.js",
|
|
44
46
|
"extension/src/content/recentProjects.js",
|
|
45
47
|
"extension/src/content/reviewHunks.js",
|
|
48
|
+
"extension/src/content/runActivitySummary.js",
|
|
46
49
|
"extension/src/content/runController.js",
|
|
47
50
|
"extension/src/content/runFailureNotice.js",
|
|
48
51
|
"extension/src/content/runGuidanceController.js",
|
|
49
52
|
"extension/src/content/runGuidanceView.js",
|
|
53
|
+
"extension/src/content/runPresence.js",
|
|
50
54
|
"extension/src/content/runQueueScheduler.js",
|
|
51
55
|
"extension/src/content/runResultActions.js",
|
|
52
56
|
"extension/src/content/runScrollLayout.js",
|
|
@@ -55,20 +59,28 @@
|
|
|
55
59
|
"extension/src/content/scopedPersistenceCoordinator.js",
|
|
56
60
|
"extension/src/content/scopedPersistenceDetachedCommit.js",
|
|
57
61
|
"extension/src/content/scopedPersistencePanelState.js",
|
|
62
|
+
"extension/src/content/selectionContextView.js",
|
|
58
63
|
"extension/src/content/sessionForkController.js",
|
|
59
64
|
"extension/src/content/sessionManager.js",
|
|
60
65
|
"extension/src/content/sessionMenuView.js",
|
|
61
66
|
"extension/src/content/sessionPanel.js",
|
|
62
67
|
"extension/src/content/sessionPersistence.js",
|
|
63
68
|
"extension/src/content/settingsPanel.js",
|
|
69
|
+
"extension/src/content/settingsWorkbench.js",
|
|
70
|
+
"extension/src/content/sharedSessionViewSync.js",
|
|
71
|
+
"extension/src/content/subagentActivityView.js",
|
|
64
72
|
"extension/src/content/themeController.js",
|
|
65
73
|
"extension/src/content/trackedChangeCaptureController.js",
|
|
66
74
|
"extension/src/content/updateIdle.js",
|
|
67
75
|
"extension/src/content/updateNotice.js",
|
|
68
76
|
"extension/src/content/writebackController.js",
|
|
69
77
|
"extension/src/content/writebackOrchestrator.js",
|
|
78
|
+
"extension/src/content/writebackPlan.js",
|
|
79
|
+
"extension/src/content/writingStyleSettings.js",
|
|
80
|
+
"extension/src/content/writtenChangesView.js",
|
|
70
81
|
"extension/src/shared/agentTranscript.js",
|
|
71
82
|
"extension/src/shared/auditRecords.js",
|
|
83
|
+
"extension/src/shared/changeHistoryModel.js",
|
|
72
84
|
"extension/src/shared/compatibility.js",
|
|
73
85
|
"extension/src/shared/compileAdapter.js",
|
|
74
86
|
"extension/src/shared/failureReasons.js",
|
|
@@ -84,6 +96,7 @@
|
|
|
84
96
|
"extension/src/shared/projectFiles.js",
|
|
85
97
|
"extension/src/shared/providerProfiles.js",
|
|
86
98
|
"extension/src/shared/reviewing.js",
|
|
99
|
+
"extension/src/shared/runActivityModel.js",
|
|
87
100
|
"extension/src/shared/runExecutionSnapshot.js",
|
|
88
101
|
"extension/src/shared/runExecutionSnapshotCodec.js",
|
|
89
102
|
"extension/src/shared/runInputQueue.js",
|
|
@@ -91,21 +104,27 @@
|
|
|
91
104
|
"extension/src/shared/scopedPersistenceQueuePolicy.js",
|
|
92
105
|
"extension/src/shared/scopedPersistenceReceipt.js",
|
|
93
106
|
"extension/src/shared/scopedPersistenceTransaction.js",
|
|
107
|
+
"extension/src/shared/selectionContext.js",
|
|
94
108
|
"extension/src/shared/sensitiveScan.js",
|
|
95
109
|
"extension/src/shared/sessionState.js",
|
|
96
110
|
"extension/src/shared/sessionTitle.js",
|
|
97
111
|
"extension/src/shared/settlementFacts.js",
|
|
112
|
+
"extension/src/shared/sharedSessionBridge.js",
|
|
98
113
|
"extension/src/shared/staleGuard.js",
|
|
99
114
|
"extension/src/shared/storageDb.js",
|
|
100
115
|
"extension/src/shared/storageKeys.js",
|
|
101
116
|
"extension/src/shared/storageMigration.js",
|
|
102
117
|
"extension/src/shared/storageRunActions.js",
|
|
103
118
|
"extension/src/shared/storageSessionClaims.js",
|
|
119
|
+
"extension/src/shared/storageValuePruning.js",
|
|
120
|
+
"extension/src/shared/subagentActivityModel.js",
|
|
104
121
|
"extension/src/shared/summary.js",
|
|
105
122
|
"extension/src/shared/undoOperations.js",
|
|
106
123
|
"extension/src/shared/writebackEvidenceProjection.js",
|
|
124
|
+
"extension/src/shared/writebackIntent.js",
|
|
107
125
|
"extension/src/shared/writebackOperationEvidence.js",
|
|
108
126
|
"extension/src/shared/writebackSettlement.js",
|
|
127
|
+
"extension/src/shared/writingStyle.js",
|
|
109
128
|
"extension/vendor/katex/katex.min.js",
|
|
110
129
|
"extension/vendor/markdown-it/markdown-it.min.js"
|
|
111
130
|
]
|
|
@@ -17,12 +17,18 @@
|
|
|
17
17
|
'ApplyResultFormatters',
|
|
18
18
|
'AssetTransferBroker',
|
|
19
19
|
'AuditRecords',
|
|
20
|
+
'SelectionContext',
|
|
21
|
+
'SelectionContextView',
|
|
22
|
+
'WritebackIntent',
|
|
23
|
+
'ChangeHistoryModel',
|
|
24
|
+
'ChangeHistoryView',
|
|
20
25
|
'Compatibility',
|
|
21
26
|
'ComposerAttachments',
|
|
22
27
|
'ComposerPanel',
|
|
23
28
|
'ContentRuntime',
|
|
24
29
|
'ContextTray',
|
|
25
30
|
'DiagnosticsController',
|
|
31
|
+
'DiagnosticsExport',
|
|
26
32
|
'DiagnosticsPanel',
|
|
27
33
|
'DiffReviewPanel',
|
|
28
34
|
'FailureReasons',
|
|
@@ -51,6 +57,9 @@
|
|
|
51
57
|
'ProviderSettingsCoordinator',
|
|
52
58
|
'RecentProjects',
|
|
53
59
|
'ReviewHunks',
|
|
60
|
+
'RunActivitySummary',
|
|
61
|
+
'RunPresence',
|
|
62
|
+
'RunActivityModel',
|
|
54
63
|
'RunController',
|
|
55
64
|
'RunExecutionSnapshot',
|
|
56
65
|
'RunGuidanceController',
|
|
@@ -70,9 +79,13 @@
|
|
|
70
79
|
'SessionPersistence',
|
|
71
80
|
'SessionState',
|
|
72
81
|
'SettingsPanel',
|
|
82
|
+
'SharedSessionBridge',
|
|
83
|
+
'SharedSessionViewSync',
|
|
73
84
|
'StorageDb',
|
|
74
85
|
'StorageKeys',
|
|
75
86
|
'StorageMigration',
|
|
87
|
+
'SubagentActivityModel',
|
|
88
|
+
'SubagentActivityView',
|
|
76
89
|
'Summary',
|
|
77
90
|
'Theme',
|
|
78
91
|
'TrackedChangeCaptureController',
|
|
@@ -80,8 +93,13 @@
|
|
|
80
93
|
'UpdateIdle',
|
|
81
94
|
'UpdateNotice',
|
|
82
95
|
'WritebackController',
|
|
96
|
+
'WritebackIntent',
|
|
83
97
|
'WritebackOrchestrator',
|
|
84
|
-
'
|
|
98
|
+
'WritebackPlan',
|
|
99
|
+
'WritebackSettlement',
|
|
100
|
+
'WritingStyle',
|
|
101
|
+
'WritingStyleSettings',
|
|
102
|
+
'WrittenChangesView'
|
|
85
103
|
]);
|
|
86
104
|
|
|
87
105
|
const SUPPORT_MODULES = Object.freeze([
|
|
@@ -104,11 +104,26 @@
|
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
+
function createSkillMark(id) {
|
|
108
|
+
const mark = document.createElement('span');
|
|
109
|
+
mark.className = 'codex-local-skill-icon';
|
|
110
|
+
mark.setAttribute('aria-hidden', 'true');
|
|
111
|
+
// Static, locally owned glyphs only; skill metadata never supplies SVG.
|
|
112
|
+
const glyph = id === 'annotated-rewrite'
|
|
113
|
+
? '<path d="M3.2 12.8 4 9.7l6.6-6.6a1.4 1.4 0 0 1 2 2L6 11.7z"/><path d="m9.6 4.1 2.3 2.3"/>'
|
|
114
|
+
: id === 'parallel-subagents'
|
|
115
|
+
? '<circle cx="4" cy="3.5" r="1.75"/><circle cx="12" cy="3.5" r="1.75"/><circle cx="8" cy="12.5" r="1.75"/><path d="M4 5.25v1.5A1.75 1.75 0 0 0 5.75 8.5h4.5A1.75 1.75 0 0 0 12 6.75v-1.5M8 8.5v2.25"/>'
|
|
116
|
+
: '<rect x="3" y="2.5" width="10" height="11" rx="2"/><path d="M6 6h4M6 9h4"/>';
|
|
117
|
+
mark.innerHTML = '<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" focusable="false">' + glyph + '</svg>';
|
|
118
|
+
return mark;
|
|
119
|
+
}
|
|
120
|
+
|
|
107
121
|
function renderCodexOverleafSkillRow(list, skill, masterEnabled) {
|
|
108
122
|
const id = String(skill?.id || '').trim();
|
|
109
123
|
if (!id) {
|
|
110
124
|
return;
|
|
111
125
|
}
|
|
126
|
+
const compact = Boolean(list.closest?.('.codex-settings-workbench'));
|
|
112
127
|
const row = document.createElement('div');
|
|
113
128
|
row.className = 'codex-local-skill-row';
|
|
114
129
|
row.dataset.scope = 'codex-overleaf';
|
|
@@ -125,15 +140,34 @@
|
|
|
125
140
|
const trimmedTitle = typeof skill.title === 'string' ? skill.title.trim() : '';
|
|
126
141
|
text.textContent = trimmedTitle || id;
|
|
127
142
|
text.title = id;
|
|
128
|
-
|
|
143
|
+
text.className = 'codex-local-skill-name';
|
|
144
|
+
const copy = document.createElement('div');
|
|
145
|
+
copy.className = 'codex-local-skill-copy';
|
|
146
|
+
copy.append(text);
|
|
147
|
+
const descriptions = {
|
|
148
|
+
'annotated-rewrite': tx('Guided editing for document revisions.', '用于文稿修订的编辑流程。'),
|
|
149
|
+
'parallel-subagents': tx('Split independent subtasks across multiple agents.', '将相互独立的子任务分配给多个 agent。')
|
|
150
|
+
};
|
|
151
|
+
const description = descriptions[id]
|
|
152
|
+
|| (typeof skill.description === 'string' ? skill.description.replace(/\s+/g, ' ').trim() : '');
|
|
153
|
+
if (description) {
|
|
154
|
+
const help = document.createElement('span');
|
|
155
|
+
help.className = 'codex-local-skill-description';
|
|
156
|
+
help.textContent = description;
|
|
157
|
+
help.title = description;
|
|
158
|
+
copy.append(help);
|
|
159
|
+
}
|
|
160
|
+
if (compact) row.append(createSkillMark(id));
|
|
161
|
+
row.append(copy);
|
|
162
|
+
const controls = compact ? document.createElement('div') : row;
|
|
163
|
+
if (compact) controls.className = 'codex-local-skill-controls';
|
|
129
164
|
|
|
130
|
-
//
|
|
131
|
-
// row, after the Remove control. It remains a real checkbox input.
|
|
165
|
+
// Keep the same native input and callbacks; only its visual grouping changes.
|
|
132
166
|
const toggle = document.createElement('input');
|
|
133
167
|
toggle.type = 'checkbox';
|
|
134
168
|
toggle.className = 'codex-switch';
|
|
135
169
|
toggle.checked = isCodexOverleafSkillEnabled(id);
|
|
136
|
-
toggle.setAttribute('aria-label', tr('codexOverleafSkillEnableToggle'));
|
|
170
|
+
toggle.setAttribute('aria-label', (trimmedTitle || id) + ': ' + tr('codexOverleafSkillEnableToggle'));
|
|
137
171
|
if (!masterEnabled) {
|
|
138
172
|
toggle.disabled = true;
|
|
139
173
|
}
|
|
@@ -212,15 +246,16 @@
|
|
|
212
246
|
});
|
|
213
247
|
|
|
214
248
|
actions.append(removeBtn);
|
|
215
|
-
|
|
249
|
+
controls.append(actions);
|
|
216
250
|
|
|
217
251
|
// Store references so resetConfirmingRow can find and reset this row.
|
|
218
252
|
row._exitConfirming = exitConfirming;
|
|
219
253
|
row._skillId = id;
|
|
220
254
|
}
|
|
221
255
|
|
|
222
|
-
//
|
|
223
|
-
|
|
256
|
+
// The switch remains rightmost, including during removal confirmation.
|
|
257
|
+
controls.append(toggle);
|
|
258
|
+
if (compact) row.append(controls);
|
|
224
259
|
|
|
225
260
|
list.append(row);
|
|
226
261
|
}
|
|
@@ -454,11 +454,16 @@
|
|
|
454
454
|
const text = String(textNode.textContent || '');
|
|
455
455
|
const match = text.match(/^(\s*)(Conclusion:|结论:|Changes:|修改:)(\s*)/);
|
|
456
456
|
if (!match || !textNode.parentNode) continue;
|
|
457
|
+
// The answer speaks for itself: older stored reports still begin with a
|
|
458
|
+
// "Conclusion:" prefix, which is dropped rather than labelled.
|
|
459
|
+
if (['Conclusion:', '结论:'].includes(match[2])) {
|
|
460
|
+
textNode.textContent = `${match[1]}${text.slice(match[0].length)}`;
|
|
461
|
+
if (!String(block.textContent || '').trim()) block.remove?.();
|
|
462
|
+
continue;
|
|
463
|
+
}
|
|
457
464
|
const label = document.createElement('span');
|
|
458
465
|
label.className = 'run-system-label';
|
|
459
|
-
label.dataset.systemLabel =
|
|
460
|
-
? 'conclusion'
|
|
461
|
-
: 'changes';
|
|
466
|
+
label.dataset.systemLabel = 'changes';
|
|
462
467
|
label.textContent = `${match[2]}${match[3]}`;
|
|
463
468
|
textNode.textContent = `${match[1]}${text.slice(match[0].length)}`;
|
|
464
469
|
textNode.parentNode.insertBefore(label, textNode);
|
|
@@ -487,7 +492,7 @@
|
|
|
487
492
|
const check = document.createElement('span');
|
|
488
493
|
check.className = 'run-change-summary__check';
|
|
489
494
|
check.setAttribute('aria-hidden', 'true');
|
|
490
|
-
check.
|
|
495
|
+
check.innerHTML = '<svg class="codex-glyph" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="m3.5 8 3 3 6-6"/></svg>';
|
|
491
496
|
const text = document.createElement('span');
|
|
492
497
|
text.textContent = tx(
|
|
493
498
|
`${syncedFiles} ${syncedFiles === 1 ? 'file' : 'files'} synced`,
|
|
@@ -427,7 +427,7 @@
|
|
|
427
427
|
|
|
428
428
|
const check = document.createElement('span');
|
|
429
429
|
check.className = 'codex-model-config-check';
|
|
430
|
-
check.
|
|
430
|
+
check.innerHTML = '<svg class="codex-glyph" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="m3.5 8 3 3 6-6"/></svg>';
|
|
431
431
|
check.setAttribute('aria-hidden', 'true');
|
|
432
432
|
button.append(check);
|
|
433
433
|
return button;
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
['src/shared/reviewing.js', 'codex-overleaf-reviewing-script'],
|
|
10
10
|
['src/shared/projectFiles.js', 'codex-overleaf-project-files-script'],
|
|
11
11
|
['src/shared/compatibility.js', 'codex-overleaf-compatibility-page-script'],
|
|
12
|
-
['src/shared/pageRpcContract.js', 'codex-overleaf-page-rpc-contract-script'],
|
|
12
|
+
['src/shared/pageRpcContract.js', 'codex-overleaf-page-rpc-contract-script', true],
|
|
13
13
|
['src/shared/staleGuard.js', 'codex-overleaf-stale-guard-script'],
|
|
14
14
|
['src/shared/compileAdapter.js', 'codex-overleaf-compile-adapter-script'],
|
|
15
15
|
['src/shared/sensitiveScan.js', 'codex-overleaf-sensitive-scan-script'],
|
|
@@ -24,10 +24,15 @@
|
|
|
24
24
|
['src/page/textFileCreator.js', 'codex-overleaf-text-file-creator-script', true],
|
|
25
25
|
['src/page/binaryAssetUploader.js', 'codex-overleaf-binary-asset-uploader-script', true],
|
|
26
26
|
['src/page/snapshotRouter.js', 'codex-overleaf-snapshot-router-script'],
|
|
27
|
+
['src/page/referenceProjects.js', 'codex-overleaf-reference-projects-script', true],
|
|
27
28
|
['src/page/writeGuard.js', 'codex-overleaf-write-guard-script', true],
|
|
29
|
+
['src/page/trackedChangeOwnership.js', 'codex-overleaf-tracked-change-ownership-script', true],
|
|
28
30
|
['src/page/trackedChangeCapture.js', 'codex-overleaf-tracked-change-capture-script', true],
|
|
31
|
+
['src/page/trackedChangeReplay.js', 'codex-overleaf-tracked-change-replay-script', true],
|
|
29
32
|
['src/page/trackedChangesLifecycle.js', 'codex-overleaf-tracked-changes-lifecycle-script', true],
|
|
30
33
|
['src/page/writebackRouter.js', 'codex-overleaf-writeback-router-script', true],
|
|
34
|
+
['src/page/writebackReceiptJournal.js', 'codex-overleaf-writeback-receipt-script', true],
|
|
35
|
+
['src/page/textCoordinates.js', 'codex-overleaf-text-coordinates-script', true],
|
|
31
36
|
['src/pageBridge.js', 'codex-overleaf-page-bridge-script', true]
|
|
32
37
|
]);
|
|
33
38
|
const OPTIONAL_OT_SCRIPTS = Object.freeze([
|
|
@@ -44,6 +49,7 @@
|
|
|
44
49
|
const Contract = options.contract;
|
|
45
50
|
const Compatibility = options.compatibility;
|
|
46
51
|
const timeoutOverrides = { ...(options.timeoutOverrides || {}) };
|
|
52
|
+
const now = options.now || Date.now;
|
|
47
53
|
const revision = Contract.REVISION;
|
|
48
54
|
const capability = createCapability(cryptoImpl);
|
|
49
55
|
const activeCancellationHandlers = new Map();
|
|
@@ -66,9 +72,17 @@
|
|
|
66
72
|
function send(method, params, policy = {}) {
|
|
67
73
|
const id = cryptoImpl.randomUUID();
|
|
68
74
|
return new Promise((resolve, reject) => {
|
|
69
|
-
const
|
|
75
|
+
const requestTimeoutMs = Number.isFinite(Number(policy.timeoutMs))
|
|
70
76
|
? Number(policy.timeoutMs)
|
|
71
77
|
: Contract.resolveTimeoutMs(method, timeoutOverrides);
|
|
78
|
+
const remainingMs = params?.deadlineAt == null ? Infinity
|
|
79
|
+
: Number.isFinite(params.deadlineAt) ? params.deadlineAt - now() : 0;
|
|
80
|
+
if (remainingMs <= 0) {
|
|
81
|
+
resolve({ ok: false, code: 'writeback_deadline_exceeded', changedDocument: false,
|
|
82
|
+
rpcMethod: method, error: 'The operation deadline expired before this request was sent.' });
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const timeoutMs = Math.min(requestTimeoutMs, remainingMs);
|
|
72
86
|
const cancellable = policy.cancellation === 'content_abort';
|
|
73
87
|
let settled = false;
|
|
74
88
|
let timeout = null;
|
|
@@ -96,7 +110,8 @@
|
|
|
96
110
|
rejectOnce(error);
|
|
97
111
|
}
|
|
98
112
|
timeout = windowRef.setTimeout(() => {
|
|
99
|
-
resolveOnce({ ok: false, error: 'Page bridge timed out'
|
|
113
|
+
resolveOnce({ ok: false, error: 'Page bridge timed out',
|
|
114
|
+
...(method === 'applyOperations' ? { code: 'page_bridge_timeout', rpcMethod: method, requestId: id } : {}) });
|
|
100
115
|
}, timeoutMs);
|
|
101
116
|
function onMessage(event) {
|
|
102
117
|
if (event.source !== windowRef
|
|
@@ -33,128 +33,47 @@
|
|
|
33
33
|
StorageDb
|
|
34
34
|
} = deps;
|
|
35
35
|
|
|
36
|
-
//
|
|
37
|
-
//
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const filterInput = container.querySelector('[data-history-filter]');
|
|
47
|
-
if (filterInput && !filterInput.placeholder) {
|
|
48
|
-
filterInput.placeholder = tx('Filter by file or task\u2026', '按文件名或任务过滤…');
|
|
49
|
-
}
|
|
50
|
-
list.textContent = tx('Loading\u2026', '正在加载…');
|
|
51
|
-
let records = [];
|
|
52
|
-
try {
|
|
53
|
-
records = StorageDb?.getAllByIndex
|
|
54
|
-
? await StorageDb.getAllByIndex('auditLogs', 'projectId', getCurrentProjectId())
|
|
55
|
-
: [];
|
|
56
|
-
} catch (error) {
|
|
57
|
-
list.textContent = tx(`Could not load change history: ${error.message}`, `无法加载变更历史:${error.message}`);
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
auditHistoryRecords = (records || [])
|
|
61
|
-
.sort((a, b) => String(b?.createdAt || '').localeCompare(String(a?.createdAt || '')))
|
|
62
|
-
.slice(0, 50);
|
|
63
|
-
applyAuditHistoryFilter();
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function applyAuditHistoryFilter() {
|
|
67
|
-
const container = getSettingsPanelInstance()?.container;
|
|
68
|
-
const list = container?.querySelector('[data-history-list]');
|
|
69
|
-
if (!list) {
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
const query = String(container.querySelector('[data-history-filter]')?.value || '').trim().toLowerCase();
|
|
73
|
-
const filePaths = record => []
|
|
74
|
-
.concat(record?.appliedFiles || [], record?.changedFiles || [])
|
|
75
|
-
.map(file => (file && typeof file === 'object') ? file.path : file)
|
|
76
|
-
.filter(Boolean);
|
|
77
|
-
const rows = auditHistoryRecords.filter(record => {
|
|
78
|
-
if (!query) {
|
|
79
|
-
return true;
|
|
80
|
-
}
|
|
81
|
-
return [record?.promptSummary || '', ...filePaths(record)].join(' ').toLowerCase().includes(query);
|
|
82
|
-
});
|
|
83
|
-
list.replaceChildren();
|
|
84
|
-
if (!rows.length) {
|
|
85
|
-
const empty = document.createElement('div');
|
|
86
|
-
empty.className = 'codex-history-empty';
|
|
87
|
-
empty.textContent = query
|
|
88
|
-
? tx('No recorded changes match this filter.', '没有匹配该过滤条件的变更记录。')
|
|
89
|
-
: tx('No recorded changes for this project yet.', '本项目还没有已记录的变更。');
|
|
90
|
-
list.append(empty);
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
for (const record of rows) {
|
|
94
|
-
const row = document.createElement('div');
|
|
95
|
-
row.className = 'codex-history-row';
|
|
96
|
-
row.dataset.resultStatus = record.resultStatus || '';
|
|
97
|
-
const when = document.createElement('div');
|
|
98
|
-
when.className = 'codex-history-when';
|
|
99
|
-
when.textContent = record.createdAt ? new Date(record.createdAt).toLocaleString() : '';
|
|
100
|
-
const task = document.createElement('div');
|
|
101
|
-
task.className = 'codex-history-task';
|
|
102
|
-
task.textContent = record.promptSummary || '';
|
|
103
|
-
task.title = record.promptSummary || '';
|
|
104
|
-
const files = document.createElement('div');
|
|
105
|
-
files.className = 'codex-history-files';
|
|
106
|
-
const applied = (record.appliedFiles || [])
|
|
107
|
-
.map(file => (file && typeof file === 'object') ? file.path : file)
|
|
108
|
-
.filter(Boolean);
|
|
109
|
-
files.textContent = applied.length
|
|
110
|
-
? applied.join(' \u00b7 ')
|
|
111
|
-
: tx('No files were written.', '未写入文件。');
|
|
112
|
-
row.append(when, task, files);
|
|
113
|
-
// v1.8.0: rows jump to the run they describe (turnId === run.id).
|
|
114
|
-
if (record.sessionId && record.turnId && typeof onHistoryRowJump === 'function') {
|
|
115
|
-
row.classList.add('codex-history-row--linked');
|
|
116
|
-
row.setAttribute('role', 'button');
|
|
117
|
-
row.tabIndex = 0;
|
|
118
|
-
const jump = () => onHistoryRowJump(record);
|
|
119
|
-
row.addEventListener('click', jump);
|
|
120
|
-
row.addEventListener('keydown', keyEvent => {
|
|
121
|
-
if (keyEvent.key === 'Enter' || keyEvent.key === ' ') {
|
|
122
|
-
keyEvent.preventDefault();
|
|
123
|
-
jump();
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
list.append(row);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
36
|
+
// Read-only projection over scoped audit/session records. Prompt redaction
|
|
37
|
+
// remains owned by the audit writer; this view never persists task text.
|
|
38
|
+
const historyView = deps.ChangeHistoryView.create({
|
|
39
|
+
tx, StorageDb, getState, getCurrentProjectId, getSettingsPanelInstance,
|
|
40
|
+
getAccountScopeId: deps.getAccountScopeId,
|
|
41
|
+
sanitizeText: deps.sanitizeText,
|
|
42
|
+
onHistoryRowJump
|
|
43
|
+
});
|
|
44
|
+
function renderAuditHistoryPanel() { return historyView.load(); }
|
|
45
|
+
function applyAuditHistoryFilter() { historyView.filter(); }
|
|
130
46
|
|
|
131
47
|
// --- History & storage (v1.7.5): usage summary + clear-all in Settings ---
|
|
132
48
|
let storageUsageRequestId = 0;
|
|
133
49
|
function refreshStorageUsageSummary() {
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
50
|
+
const host = getSettingsPanelInstance()?.container;
|
|
51
|
+
const node = host?.querySelector('[data-storage-usage]');
|
|
52
|
+
if (!node) return;
|
|
53
|
+
const estimateNode = host.querySelector('[data-storage-estimate]') || node;
|
|
138
54
|
const requestId = ++storageUsageRequestId;
|
|
139
55
|
const projectId = getCurrentProjectId?.();
|
|
56
|
+
const accountScopeId = deps.getAccountScopeId?.();
|
|
140
57
|
const settingsScope = getPanel?.()?.dataset?.settingsScope;
|
|
141
|
-
const isCurrent = () => requestId === storageUsageRequestId
|
|
58
|
+
const isCurrent = () => requestId === storageUsageRequestId
|
|
59
|
+
&& projectId === getCurrentProjectId?.()
|
|
60
|
+
&& accountScopeId === deps.getAccountScopeId?.()
|
|
142
61
|
&& settingsScope === getPanel?.()?.dataset?.settingsScope
|
|
143
62
|
&& getSettingsPanelInstance()?.container?.querySelector('[data-storage-usage]') === node;
|
|
144
63
|
const current = getState();
|
|
145
|
-
const
|
|
146
|
-
const
|
|
64
|
+
const sessions = Array.isArray(current?.sessions) ? current.sessions : [];
|
|
65
|
+
const runIds = new Set(sessions.flatMap(session => session.id === current.activeSessionId
|
|
66
|
+
? current.runs || [] : session.runs || []).map(run => run?.id).filter(Boolean));
|
|
147
67
|
const counts = settingsScope === 'account'
|
|
148
|
-
? tx('
|
|
149
|
-
: tx(
|
|
150
|
-
|
|
151
|
-
`当前项目已加载 ${sessionCount} 个会话 · 当前会话 ${runCount} 轮运行`
|
|
152
|
-
);
|
|
153
|
-
// Dynamic text belongs to this renderer, not the loading-label translator.
|
|
68
|
+
? tx('Saved history across projects in this browser', '当前浏览器中跨项目保存的历史')
|
|
69
|
+
: tx(sessions.length + ' loaded conversations · ' + runIds.size + ' runs in this project',
|
|
70
|
+
'本项目已加载 ' + sessions.length + ' 个对话 · ' + runIds.size + ' 轮运行');
|
|
154
71
|
node.removeAttribute?.('data-i18n');
|
|
155
72
|
node.textContent = counts;
|
|
156
|
-
|
|
157
|
-
|
|
73
|
+
estimateNode.removeAttribute?.('data-i18n');
|
|
74
|
+
if (estimateNode !== node) estimateNode.textContent = tx('Estimating site storage…', '正在估算站点占用…');
|
|
75
|
+
const showEstimate = value => {
|
|
76
|
+
if (isCurrent()) estimateNode.textContent = estimateNode === node ? counts + ' · ' + value : value;
|
|
158
77
|
};
|
|
159
78
|
let timer;
|
|
160
79
|
const estimate = Promise.resolve().then(() => navigator.storage?.estimate?.());
|
|
@@ -162,11 +81,16 @@
|
|
|
162
81
|
return Promise.race([estimate, deadline]).then(info => {
|
|
163
82
|
if (!isCurrent()) return;
|
|
164
83
|
const usage = info?.usage;
|
|
165
|
-
if (!Number.isFinite(usage) || usage < 0) {
|
|
84
|
+
if (!Number.isFinite(usage) || usage < 0) {
|
|
85
|
+
showEstimate(tx('Site storage estimate unavailable; saved history is still accessible.', '暂无法估算站点容量,仍可查看已保存的历史。'));
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
166
88
|
const mb = usage / (1024 * 1024);
|
|
167
|
-
const size = usage === 0 ? '0 KB' : mb >= 1 ?
|
|
168
|
-
|
|
169
|
-
|
|
89
|
+
const size = usage === 0 ? '0 KB' : mb >= 1 ? mb.toFixed(1) + ' MB' : Math.max(1, Math.round(usage / 1024)) + ' KB';
|
|
90
|
+
showEstimate(tx('Site total ~' + size + ' (includes Overleaf data; not extension-only usage).',
|
|
91
|
+
'本站点总占用约 ' + size + ',包含 Overleaf 数据,并非插件单独占用。'));
|
|
92
|
+
}).catch(() => showEstimate(tx('Site storage estimate unavailable.', '暂无法估算站点容量。')))
|
|
93
|
+
.finally(() => clearTimeout(timer));
|
|
170
94
|
}
|
|
171
95
|
|
|
172
96
|
async function clearAllHistoryWithConfirm() {
|
|
@@ -175,12 +99,12 @@
|
|
|
175
99
|
return;
|
|
176
100
|
}
|
|
177
101
|
const confirmed = await showPluginConfirm({
|
|
178
|
-
title: tx('Clear
|
|
102
|
+
title: tx('Clear local history?', '清理本地历史?'),
|
|
179
103
|
message: tx(
|
|
180
|
-
'This permanently
|
|
181
|
-
'
|
|
104
|
+
'This permanently removes saved conversations, run and change records, undo information, and recent-project entries for ALL projects in this browser. Overleaf project files will not be deleted or reverted. Project settings and rules are kept. Removed history cannot be recovered.',
|
|
105
|
+
'将永久清理当前浏览器中所有项目的对话、运行与修改记录、撤销信息及最近项目条目。Overleaf 项目文件不会被删除或还原,项目设置与规则会保留。清理后的历史无法恢复。'
|
|
182
106
|
),
|
|
183
|
-
confirmLabel: tx('
|
|
107
|
+
confirmLabel: tx('Clear local history', '清理本地历史'),
|
|
184
108
|
destructive: true
|
|
185
109
|
});
|
|
186
110
|
if (!confirmed) {
|
|
@@ -188,6 +112,7 @@
|
|
|
188
112
|
}
|
|
189
113
|
try {
|
|
190
114
|
await StorageDb?.clearAllStores?.();
|
|
115
|
+
historyView.invalidate();
|
|
191
116
|
// v1.8.1: the dashboard's project-name cache lives in
|
|
192
117
|
// chrome.storage.local, outside the IndexedDB stores — clear it too so
|
|
193
118
|
// no (potentially sensitive) project titles outlive the wipe.
|
|
@@ -204,7 +129,8 @@
|
|
|
204
129
|
await saveState();
|
|
205
130
|
applyStateToPanel();
|
|
206
131
|
refreshStorageUsageSummary();
|
|
207
|
-
|
|
132
|
+
void renderAuditHistoryPanel();
|
|
133
|
+
showPluginToast(tx('Local history cleared. Overleaf files are unchanged.', '本地历史已清理,Overleaf 文件保持不变。'));
|
|
208
134
|
getPanel()?.querySelector('[data-task]')?.focus();
|
|
209
135
|
}
|
|
210
136
|
|
|
@@ -234,13 +160,14 @@
|
|
|
234
160
|
showPluginToast(tx('Nothing to refill: the original task text is unavailable.', '无法回填:原任务文本不可用。'));
|
|
235
161
|
return;
|
|
236
162
|
}
|
|
237
|
-
prepareRetryReplacement?.(run || null);
|
|
163
|
+
prepareRetryReplacement?.(run || null, task);
|
|
238
164
|
input.value = task;
|
|
239
165
|
getState().task = task;
|
|
240
166
|
autosizeTaskTextarea();
|
|
241
167
|
syncComposerSendAvailability();
|
|
242
|
-
saveStateSoon();
|
|
243
|
-
input.focus();
|
|
168
|
+
saveStateSoon(0);
|
|
169
|
+
input.focus({ preventScroll: true });
|
|
170
|
+
input.scrollIntoView?.({ block: 'nearest' });
|
|
244
171
|
try {
|
|
245
172
|
input.setSelectionRange(task.length, task.length);
|
|
246
173
|
} catch (error) {
|
|
@@ -334,6 +334,10 @@
|
|
|
334
334
|
overlay.setAttribute('role', 'dialog');
|
|
335
335
|
overlay.setAttribute('aria-modal', 'true');
|
|
336
336
|
overlay.setAttribute('aria-label', title);
|
|
337
|
+
// The settings workbench is a centered top-layer dialog; center over it instead of the sidebar.
|
|
338
|
+
if (panel.querySelector?.('.codex-settings-workbench[open]')) {
|
|
339
|
+
overlay.dataset.context = 'workbench';
|
|
340
|
+
}
|
|
337
341
|
|
|
338
342
|
const card = doc.createElement('section');
|
|
339
343
|
card.className = 'codex-plugin-confirm-card';
|