codex-overleaf-link 2.4.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +272 -311
- package/README.zh-CN.md +287 -326
- 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 +572 -571
- 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 +8974 -1781
- 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 +51 -120
- 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 +364 -356
- 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 +194 -164
- package/extension/src/content/scopedPersistenceCoordinator.js +2 -1
- package/extension/src/content/scopedPersistencePanelState.js +45 -2
- package/extension/src/content/selectionContextView.js +300 -0
- package/extension/src/content/sessionPersistence.js +10 -2
- package/extension/src/content/settingsPanel.js +93 -54
- 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 +58 -3
- 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 +139 -150
- package/extension/src/page/treeOperations.js +36 -29
- package/extension/src/page/writebackReceiptJournal.js +112 -0
- package/extension/src/page/writebackRouter.js +176 -136
- package/extension/src/pageBridge.js +59 -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 +187 -65
- 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 +23 -55
- package/extension/src/shared/storageMigration.js +3 -0
- package/extension/src/shared/storageRunActions.js +54 -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 +2136 -744
- 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 +146 -177
- package/native-host/src/codexSessionTiming.js +71 -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/readProgressGuard.js +84 -17
- 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
package/README.zh-CN.md
CHANGED
|
@@ -1,127 +1,188 @@
|
|
|
1
1
|
<div align="center">
|
|
2
|
-
<img src="extension/assets/icons/codex-overleaf-icon.png" width="
|
|
2
|
+
<img src="extension/assets/icons/codex-overleaf-icon.png" width="72" alt="Codex Overleaf Link">
|
|
3
3
|
<h1>Codex Overleaf Link</h1>
|
|
4
|
-
<p><
|
|
5
|
-
<p><
|
|
6
|
-
<p>
|
|
7
|
-
|
|
8
|
-
<img src="https://img.shields.io/badge/platform-macOS%20%2F%20Windows%20%2F%20Linux-lightgrey" alt="支持平台">
|
|
9
|
-
<img src="https://img.shields.io/badge/chrome-MV3-green" alt="Chrome Manifest V3">
|
|
10
|
-
<img src="https://img.shields.io/badge/node-%3E%3D20-brightgreen" alt="Node.js 版本要求">
|
|
11
|
-
<a href="https://github.com/Ghqqqq/codex-overleaf-link/actions/workflows/test.yml"><img src="https://github.com/Ghqqqq/codex-overleaf-link/actions/workflows/test.yml/badge.svg" alt="测试状态"></a>
|
|
12
|
-
<img src="https://img.shields.io/badge/runtime%20dependencies-0-orange" alt="无 npm 运行时依赖">
|
|
13
|
-
<img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT 许可证">
|
|
14
|
-
</p>
|
|
4
|
+
<p><strong>Empower Overleaf with Codex.</strong></p>
|
|
5
|
+
<p><img src="https://img.shields.io/badge/version-2.5.0-blue" alt="version 2.5.0"></p>
|
|
6
|
+
<p><a href="README.md">English</a> | 简体中文</p>
|
|
7
|
+
<p>Chrome · macOS / Windows / Linux · 本地 Codex</p>
|
|
15
8
|
</div>
|
|
16
9
|
|
|
17
|
-
|
|
10
|
+
理解项目、修改段落、对照 PDF 查看结果。Codex Overleaf Link 把本地 Codex 工作流带进 Overleaf 编辑器,让项目上下文、模型选择和写作对话留在同一个工作区。
|
|
18
11
|
|
|
19
|
-
|
|
12
|
+

|
|
20
13
|
|
|
21
|
-
|
|
14
|
+
*2.5.0 当前界面实拍,展示对 Overleaf 默认示例项目的一次只读导览。*
|
|
22
15
|
|
|
23
|
-
|
|
16
|
+
<details>
|
|
17
|
+
<summary>展开对话细节(原生 2× PNG)</summary>
|
|
18
|
+
|
|
19
|
+
<p align="center"><img src="assets/readme/2.5.0/conversation@2x.png" width="393" alt="Codex 真实对话的原生高清细节图"></p>
|
|
20
|
+
|
|
21
|
+
</details>
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
[快速开始](#quick-start) · [写作流程](#workflow) · [写作风格](#writing-style) · [模型连接](#connections) · [详细文档](#reference)
|
|
25
|
+
|
|
26
|
+
<a id="workflow"></a>
|
|
27
|
+
|
|
28
|
+
## 阅读、修改、审阅,在同一个工作区完成
|
|
29
|
+
|
|
30
|
+
| 需要完成的事 | 使用方式 | 结果 |
|
|
31
|
+
|---|---|---|
|
|
32
|
+
| 理解章节或定位问题 | **Ask** | 结合可用的项目上下文回答,不向 Overleaf 写入。 |
|
|
33
|
+
| 修改论文内容 | **Auto** | 改动写回项目,并在本轮记录中展示。 |
|
|
34
|
+
| 在 Overleaf 中审阅修改 | **Auto + Track** | 文本修改以留痕形式进入 Overleaf 审阅面板。 |
|
|
35
|
+
| 撤回某一轮修改 | **Undo changes** | 恢复符合条件的修改,移除符合条件的新建文件。 |
|
|
36
|
+
|
|
37
|
+
撤销在刷新后仍可继续。如果文件随后又被改动,该文件会保留供进一步处理;已经完成的撤销步骤会被记住,重试只处理剩余内容。
|
|
38
|
+
|
|
39
|
+
### 让对话带上合适的上下文
|
|
40
|
+
|
|
41
|
+
通过 `@` 或 **+** 添加项目文件,用 `@compile-log` 引用编译问题,也可以直接选中编辑器里的文字。**Add to Chat** 把选区加入上下文;**Edit Selection** 指定本次修改范围。PDF 和图片也可以作为参考附在输入框中。
|
|
42
|
+
|
|
43
|
+
<p align="center"><img src="assets/readme/2.5.0/context@2x.png" width="510" alt="真实输入框草稿,附有 main.tex 和 sample.bib 两个上下文文件"></p>
|
|
44
|
+
|
|
45
|
+
*尚未发送的草稿,已附加两个项目文件。上下文条目直接显示在输入框中。*
|
|
24
46
|
|
|
25
|
-
|
|
47
|
+
### 看清执行过程,也能进入子代理对话
|
|
26
48
|
|
|
27
|
-
|
|
49
|
+
每一轮对话保留运行记录和最终结果。展开时间线,可以查看读取、命令与修改。启用 **Parallel Subagents** 后,主 agent 可以在子代理执行期间继续工作;点击子任务卡片即可查看对应对话,再返回主任务。
|
|
28
50
|
|
|
29
|
-
|
|
51
|
+
<table>
|
|
52
|
+
<tr>
|
|
53
|
+
<td width="50%" align="center"><img src="assets/readme/2.5.0/activity@2x.png" width="393" alt="真实运行记录,包含两个已完成的子代理任务"></td>
|
|
54
|
+
<td width="50%" align="center"><img src="assets/readme/2.5.0/subagent@2x.png" width="393" alt="Structure 子代理的真实只读对话"></td>
|
|
55
|
+
</tr>
|
|
56
|
+
</table>
|
|
30
57
|
|
|
31
|
-
|
|
58
|
+
*同一次真实任务的运行记录与子对话。图中子任务已经完成;并行子代理目前属于实验功能。*
|
|
32
59
|
|
|
33
|
-
-
|
|
34
|
-
- **实时进度与后续输入**:查看 Codex 事件、取消任务、将下一条消息加入队列,或在条件就绪时通过 **Guide** 把排队消息送入当前任务。暂停的队列可从面板恢复。
|
|
35
|
-
- **会话历史**:新建、重命名、继续或删除会话;复制结果,或从符合条件的对话节点分叉出新会话。最近项目历史便于返回之前的工作。
|
|
36
|
-
- **项目上下文**:通过 `@` 自动补全或 **+** 上下文面板选择文件,加入 `@compile-log`,也可粘贴或拖入文件作为下一轮的附件。
|
|
37
|
-
- **二进制资产**:Codex 生成的图片、PDF 等受支持资产,在 Overleaf 中新建或覆盖前需要单独确认。分块传输支持超过单条 Native Messaging 响应容量的文件。
|
|
38
|
-
- **编译反馈**:**Compile** 开关会在符合条件的文件写入后请求 Overleaf 重新编译,并记录结果。Ask 模式不会触发写入后的自动编译。
|
|
39
|
-
- **项目规则与运行前检查**:只读 / 可写路径规则约束浏览器写入;敏感内容检测会在上下文发送给 Codex 前进行检查。焦点文件用于优先组织上下文,持续的写入范围限制应通过项目规则设置。
|
|
40
|
-
- **模型与技能**:发现本地 Codex 可用模型,选择受支持的推理强度和速度设置,通过斜杠菜单安装或选择 Codex Overleaf 技能。技能加载及单个技能的启用状态均可配置。
|
|
41
|
-
- **本地记录与诊断**:保留运行结果和恢复依据,检查诊断信息,导出脱敏的问题报告包。插件的 Codex 会话使用独立的主目录。
|
|
42
|
-
- **OT 预热镜像**(Operational Transformation,操作变换):可选的只读观察机制会跟踪当前 Overleaf 文本编辑器的改动,让相关焦点文件的本地镜像保持预热。该功能默认关闭;不可用、过期或状态不一致时,会回退到常规项目快照读取。向 Overleaf 写回仍经过页面桥接层。
|
|
60
|
+
<a id="writing-style"></a>
|
|
43
61
|
|
|
44
|
-
|
|
62
|
+
## Write in My Style <sub>实验功能</sub>
|
|
45
63
|
|
|
46
|
-
|
|
64
|
+
从选定的 Overleaf 项目与 PDF 中提取写作习惯,生成可复用的写作风格 skill。
|
|
47
65
|
|
|
48
|
-
|
|
49
|
-
|
|
66
|
+
1. 打开 **Settings → General & appearance → Writing style**。
|
|
67
|
+
2. 选择参考项目,或加入可提取文本的 PDF。
|
|
68
|
+
3. 生成风格后为当前项目启用;参考资料变化后,通过 **Update style** 更新已有 skill。
|
|
50
69
|
|
|
51
|
-
|
|
70
|
+
风格 skill 用于指导措辞、句式节奏、组织方式和语气。参考资料提供风格依据,当前写作任务提供论文的事实、结果与引用。
|
|
52
71
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
72
|
+

|
|
73
|
+
|
|
74
|
+
*参考资料选择与风格生成入口,截图未包含私人写作样本。*
|
|
75
|
+
|
|
76
|
+
<a id="connections"></a>
|
|
77
|
+
|
|
78
|
+
## 选择合适的模型与连接方式
|
|
79
|
+
|
|
80
|
+
默认使用本机 Codex CLI 的模型目录,在输入框中选择模型与推理强度。需要其他接口时,打开 **Settings → Models & connections**。
|
|
81
|
+
|
|
82
|
+
快捷入口覆盖 OpenAI 兼容接口、Anthropic 兼容接口,以及 Kimi、GLM 和 DeepSeek。快捷入口预填连接默认值,API 密钥和模型 ID 仍需单独填写。第三方模型服务目前属于实验功能。
|
|
83
|
+
|
|
84
|
+

|
|
85
|
+
|
|
86
|
+
*连接配置界面实拍,没有展示 API 密钥。*
|
|
87
|
+
|
|
88
|
+
<a id="quick-start"></a>
|
|
89
|
+
|
|
90
|
+
## 快速开始
|
|
91
|
+
|
|
92
|
+
> **从旧版本升级**
|
|
93
|
+
>
|
|
94
|
+
> **2.5.0 之前的版本需要手动更新到 2.5.0。** 本次升级无法通过插件内的“立即更新”完成。运行下方安装命令后,在 `chrome://extensions` 中重新加载扩展,并刷新 Overleaf 页面。
|
|
95
|
+
|
|
96
|
+
**准备条件:** Chrome、Node.js 20+,以及已安装并登录的 Codex CLI。源码安装还需要 Git。
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
npm exec --yes codex-overleaf-link@2.5.0 -- install-managed
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
1. 运行托管安装命令,取得安装器输出的扩展目录。
|
|
103
|
+
2. 在 `chrome://extensions` 开启**开发者模式**,点击**加载已解压的扩展程序**并选择该目录。
|
|
104
|
+
3. 打开 Overleaf 项目,先用 **Ask** 阅读和提问;需要改文件时切换到 **Auto**。
|
|
105
|
+
|
|
106
|
+
支持 `overleaf.com`、`www.overleaf.com` 和 `cn.overleaf.com` 的项目页面。
|
|
107
|
+
|
|
108
|
+
<a id="reference"></a>
|
|
109
|
+
|
|
110
|
+
## 安装与维护参考
|
|
111
|
+
|
|
112
|
+
完整的安装、升级、隐私、排障和开发说明见下文。
|
|
113
|
+
|
|
114
|
+
<details>
|
|
115
|
+
<summary><strong>展开详细文档</strong></summary>
|
|
116
|
+
|
|
117
|
+
## 需要准备
|
|
118
|
+
|
|
119
|
+
| | |
|
|
120
|
+
|---|---|
|
|
121
|
+
| 电脑 | macOS、Windows 或 Linux |
|
|
122
|
+
| 浏览器 | Google Chrome。Linux 上的 Chromium 也可以,见[浏览器支持](#浏览器支持)。 |
|
|
123
|
+
| Node.js 20+ 和 Git | 安装器和本地桥接程序会用到 |
|
|
124
|
+
| [Codex CLI](https://github.com/openai/codex) | 已安装并登录,可用 `codex --version` 检查 |
|
|
125
|
+
| Overleaf | `overleaf.com` 或 `cn.overleaf.com` 账号 |
|
|
126
|
+
| TeX *(可选)* | 只在本地 `latexmk` 检查时需要 |
|
|
62
127
|
|
|
63
128
|
## 安装
|
|
64
129
|
|
|
65
|
-
Codex
|
|
130
|
+
插件由两部分组成:一个在本机运行 Codex 的小程序(**native host**),和负责显示面板的 **Chrome 扩展**。安装器会把两者作为配套的一对装好,之后可以自动更新。
|
|
66
131
|
|
|
67
|
-
Chrome
|
|
132
|
+
Chrome 不允许脚本替你加载扩展,所以无论哪种方式,最后都要在 `chrome://extensions` 里手动点一下。
|
|
68
133
|
|
|
69
134
|
### 方式 A:让 Codex 安装(推荐)
|
|
70
135
|
|
|
71
|
-
|
|
136
|
+
如果你已经在 Chrome 所在的电脑上用终端里的 Codex,把下面这段话发给它:
|
|
72
137
|
|
|
73
138
|
```text
|
|
74
|
-
|
|
139
|
+
Install Codex Overleaf Link from https://github.com/Ghqqqq/codex-overleaf-link on this computer.
|
|
75
140
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
141
|
+
Read the official README and installation scripts first. Detect the operating system and check Node.js >= 20, Codex CLI, and any other prerequisites required by the selected installation method.
|
|
142
|
+
Use the latest published stable GitHub release, excluding drafts and prereleases, unless a specific version was requested. Use the documented managed installation method and install matching Extension and Native Host versions; do not substitute an unreleased main checkout.
|
|
143
|
+
Reuse the existing Chrome profile and managed installation when available. Preserve project files, session history, settings, and provider credentials. Do not print secrets or remove an existing installation without approval.
|
|
144
|
+
Complete the terminal-side setup and checks. If Chrome requires a manual Load unpacked or Reload action, provide the exact managed extension folder and the remaining steps; do not bypass browser restrictions.
|
|
145
|
+
Report the chosen release, installed Extension and Native Host versions, the browser-loaded version when observable, and the native connection check. Matching on-disk versions alone do not prove Chrome has loaded the update. Clearly identify anything still requiring manual action.
|
|
81
146
|
```
|
|
82
147
|
|
|
83
|
-
### 方式 B
|
|
84
|
-
|
|
85
|
-
一条命令安装配套的托管 Native Host 和扩展运行时。在 macOS/Linux 上,如果对应路径可用,还会创建方便选择的 `~/Codex Overleaf Link Extension` 快捷入口。脚本会尝试在 macOS 和 Windows 上复制扩展路径,并在 macOS 上打开 Chrome 扩展管理页。所有平台都会打印需要加载的目录。后续签名正式版更新会沿用该托管目录。
|
|
148
|
+
### 方式 B:一行命令安装
|
|
86
149
|
|
|
87
150
|
macOS / Linux:
|
|
88
151
|
|
|
89
152
|
```bash
|
|
90
|
-
CODEX_OVERLEAF_REF=v2.
|
|
153
|
+
CODEX_OVERLEAF_REF=v2.5.0 bash -c "$(curl -fsSL https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v2.5.0/install.sh)"
|
|
91
154
|
```
|
|
92
155
|
|
|
93
156
|
Windows PowerShell:
|
|
94
157
|
|
|
95
158
|
```powershell
|
|
96
|
-
iwr https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v2.
|
|
97
|
-
$env:CODEX_OVERLEAF_REF='v2.
|
|
159
|
+
iwr https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v2.5.0/install.ps1 -OutFile install.ps1
|
|
160
|
+
$env:CODEX_OVERLEAF_REF='v2.5.0'
|
|
98
161
|
powershell -ExecutionPolicy Bypass -File install.ps1
|
|
99
162
|
```
|
|
100
163
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
### 方式 C:npm 托管安装
|
|
164
|
+
脚本会检查环境、构建扩展、安装 native host,最后打印 Chrome 需要加载的文件夹。macOS 上还会自动复制这个路径并打开 Chrome 扩展页;macOS 和 Linux 上会在主目录留一个 `~/Codex Overleaf Link Extension` 快捷方式。
|
|
104
165
|
|
|
105
|
-
|
|
166
|
+
### 方式 C:npm
|
|
106
167
|
|
|
107
168
|
```bash
|
|
108
|
-
npm exec --yes codex-overleaf-link@2.
|
|
169
|
+
npm exec --yes codex-overleaf-link@2.5.0 -- install-managed
|
|
109
170
|
```
|
|
110
171
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
### 打开 Overleaf
|
|
172
|
+
效果和方式 B 一样,只是不用保留源码目录。
|
|
114
173
|
|
|
115
|
-
|
|
174
|
+
### 在 Chrome 里完成
|
|
116
175
|
|
|
117
|
-
|
|
176
|
+
1. 打开 `chrome://extensions`,打开右上角的**开发者模式**。
|
|
177
|
+
2. 点**加载已解压的扩展程序**,选择安装器打印的那个文件夹。
|
|
178
|
+
3. 打开或刷新一个 Overleaf 项目,面板会出现在右侧。
|
|
118
179
|
|
|
119
|
-
|
|
180
|
+
如果之前从别的文件夹加载过旧版本,把旧的删掉,免得 Chrome 里出现两个。
|
|
120
181
|
|
|
121
|
-
|
|
182
|
+
官方构建自带固定的扩展 key,扩展 id 永远不变,不需要 `--extension-id`。自己构建的版本见[扩展 ID](#扩展-id)。
|
|
122
183
|
|
|
123
184
|
<details>
|
|
124
|
-
<summary><strong
|
|
185
|
+
<summary><strong>手动从源码安装</strong>(自定义位置)</summary>
|
|
125
186
|
|
|
126
187
|
```bash
|
|
127
188
|
git clone https://github.com/Ghqqqq/codex-overleaf-link.git
|
|
@@ -131,125 +192,110 @@ npm run build:content
|
|
|
131
192
|
npm run install:native
|
|
132
193
|
```
|
|
133
194
|
|
|
134
|
-
|
|
195
|
+
然后在 Chrome 里把 `extension/` 作为已解压扩展加载。这种安装不受托管:改了代码要自己重新构建并重新加载扩展,改了 native 运行时要重新执行 `npm run install:native`。如果 Chrome 分配了不同的扩展 id,执行 `npm run install:native -- --extension-id <chrome-extension-id>`。
|
|
135
196
|
|
|
136
197
|
</details>
|
|
137
198
|
|
|
138
|
-
##
|
|
199
|
+
## 第一次使用
|
|
139
200
|
|
|
140
|
-
|
|
201
|
+
1. 打开一个项目。如果面板没显示,点页面边缘的 Codex 标签。native host 连上后,标题栏会变绿。
|
|
202
|
+
2. 模式保持 **Ask**,先试一个只读的问题:*“用一句话概括每一章的论点。”*
|
|
203
|
+
3. 想让它动手改时,切到 **Auto**,描述要改什么,然后发送。Codex 先改本地副本,扩展再把改动写进 Overleaf;如果开着 **Compile**,还会自动重新编译。
|
|
204
|
+
4. 在回答下面看结果。摘要行写明写入了什么、能不能撤销;文件行里是具体改动。
|
|
141
205
|
|
|
142
|
-
|
|
143
|
-
|------------------|----------|--------------|
|
|
144
|
-
| **Ask** | Codex 阅读并分析项目;即使产生本地改动,也不会写回 Overleaf。 | 阅读回答,需要编辑时再切换为 Auto。 |
|
|
145
|
-
| **Auto + Track 开启** | 立即写入符合条件的改动;受支持的文本编辑记录在 Overleaf Reviewing / Track Changes 中。如果无法确认所需模式,本轮会被阻止。 | 查看写入差异与 Overleaf 留痕,再使用该轮可用的 **Accept** 或 **Undo** 操作。 |
|
|
146
|
-
| **Auto + Track 关闭** | 确认 Overleaf 处于 Editing 模式后写入符合条件的改动。 | 查看写入差异;存在恢复依据时可使用 **Undo**。 |
|
|
206
|
+
标题行会实时说明当前在做什么:读取项目、启动 Codex、等待模型首次响应,然后是思考和修改。遇到需要你处理的情况,比如有文件被跳过、Overleaf 还没确认保存,详情会自动展开。
|
|
147
207
|
|
|
148
|
-
Auto
|
|
208
|
+
## Ask、Auto 和 Track
|
|
149
209
|
|
|
150
|
-
|
|
210
|
+
| | Codex 能做什么 | 改动去哪里 |
|
|
211
|
+
|---|---|---|
|
|
212
|
+
| **Ask** | 阅读和分析 | 哪里都不去,不碰 Overleaf。 |
|
|
213
|
+
| **Auto** | 阅读和修改 | 在编辑模式下直接写进 Overleaf。 |
|
|
214
|
+
| **Auto + Track** | 阅读和修改 | 以留痕修改写入,可在 Overleaf 审阅面板里逐条查看。 |
|
|
151
215
|
|
|
152
|
-
|
|
153
|
-
> 如果相关文件中还有其他任务或协作者的待审留痕,应暂时避免使用运行卡片中的 **Accept**。应通过 Overleaf 原生 Review 面板逐条审阅和接受这些改动。仅凭 Accepted 标识或编译成功,无法证明无关的待审留痕已得到保留。
|
|
154
|
-
|
|
155
|
-
**Undo** 使用该轮保存的恢复信息。并发改动或不完整的验证可能阻止完整恢复。Cancel 会停止后续工作,但不会自动撤销已经写入 Overleaf 的内容;应查看运行卡片中的已写入部分和可用恢复操作。
|
|
216
|
+
Auto 不会逐段等你确认,但删除文件、新建或替换图片和 PDF 一定会先问你。每次写入前,扩展都会核对要改的那段文字是否还和 Codex 看到的一致。如果合作者在这期间改了同一处,这个文件会被跳过并报告,绝不会被覆盖。
|
|
156
217
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
## 模型与 API 服务
|
|
218
|
+
**撤销改动**会把这一轮动过的文件恢复原样,新建的文件也会删掉,刷新页面后照样可用。如果之后有人又改了同一段,撤销会在那个文件上停下来,不会去猜。
|
|
160
219
|
|
|
161
|
-
|
|
220
|
+
**接受改动**会一次性确认 Track 模式下这一轮的全部改动,并让 Overleaf 回到编辑模式。
|
|
162
221
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
1. 打开 **Project Settings → Model providers → Configure**,选择 **+ Add provider**。
|
|
166
|
-
2. 填写 **Provider name**、**Base URL**、**API key** 和 **Default model** ID。其他模型 ID 可填入 **Additional models**,每行一个。第三方服务使用此配置列表,模型 ID 必须与接口实际接受的名称一致。除 localhost 外,接口必须使用 HTTPS。
|
|
167
|
-
3. 在 **Advanced compatibility** 中,将 **API protocol** 保持为 Auto,或选择接口支持的协议。如果 URL 已包含完整协议端点路径,应启用 **Base URL is the full protocol endpoint**。
|
|
168
|
-
4. 检查端点披露信息。可选的 **Test connection** 会向选定的测试模型发送真实请求。选择 **Save** 保存配置,或选择 **Save and use for this project** 将其用于当前项目的后续任务。
|
|
222
|
+
> [!WARNING]
|
|
223
|
+
> 如果同一批文件里还有合作者或其他轮次留下的、无关的留痕修改,不要用运行卡片上的**接受改动**。请到 Overleaf 的审阅面板里逐条处理。
|
|
169
224
|
|
|
170
|
-
|
|
225
|
+
**取消**会停止这一轮。已经写进去的内容会保留,卡片上会标出哪些部分已写入,方便你撤销。
|
|
171
226
|
|
|
172
|
-
|
|
227
|
+
## 模型与 API 服务
|
|
173
228
|
|
|
174
|
-
|
|
229
|
+
默认使用本机 Codex CLI 的登录、模型和配置。在输入框的模型控件里选择模型和推理强度即可。
|
|
175
230
|
|
|
176
|
-
|
|
231
|
+
想换别的接口,打开 **项目设置 → 模型服务 → 配置 → 添加模型服务**:
|
|
177
232
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
| **Chat Completions** | 兼容 OpenAI Chat Completions 的端点。 |
|
|
183
|
-
| **Anthropic Messages** | 接受 Anthropic Messages 格式的端点。 |
|
|
233
|
+
1. 填写**服务名称**、**基础 URL** 和 **API 密钥**。除 localhost 外必须使用 HTTPS。
|
|
234
|
+
2. 在**模型**里逐个添加模型,ID 要和接口接受的完全一致,并把其中一个设为默认。
|
|
235
|
+
3. **API 协议**保持自动,或手动选 Responses API、Chat Completions 或 Anthropic Messages。如果 URL 已经是完整的接口路径,勾选**基础 URL 已是完整协议端点**。
|
|
236
|
+
4. **测试连接**会对你选的模型真实发一次请求。最后选**保存并用于当前项目**。
|
|
184
237
|
|
|
185
|
-
|
|
238
|
+
这个选择对当前项目的所有会话生效,其他项目各自保留自己的设置。切换后历史保留,新的对话轮次会开新线程。不同网关对工具调用和推理的处理不一样,测试通过不代表每个模型在长任务里表现都相同。API key 只保存在本机 native host 里,任务上下文会发给你选的接口。
|
|
186
239
|
|
|
187
240
|
## 上下文与附件
|
|
188
241
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
生成的二进制资产写回采用独立流程:受支持的资产每个最大 **10 MiB**,确认后分块传输。LaTeX 编译产物会被过滤;特别是根目录中存在同名 TeX 源文件时,对应根目录 PDF 的变化会被视为编译产物。
|
|
196
|
-
|
|
197
|
-
## 常见工作流
|
|
198
|
-
|
|
199
|
-
- **理解项目**:使用 Ask 解释文档结构、公式或指定文件,无需写入 Overleaf。
|
|
200
|
-
- **修复编译错误**:在 Ask 中加入 `@compile-log` 进行诊断。需要应用修复时,切换为 Auto,按需选择 Track,保留 Compile 开启,并检查写入内容和编译结果。
|
|
201
|
-
- **改写或翻译章节**:通过 `@` 自动补全选择文件,说明目标章节及修改要求,使用 Auto + Track。写入后在 Overleaf 检查,再按需 Accept 或 Undo。
|
|
202
|
-
- **创建插图**:将参考资料作为输入区附件,使用 Auto 请求 Codex 生成受支持的资产并更新 LaTeX,随后审阅独立的资产写入确认。运行报告中会列出被跳过的文件。
|
|
203
|
-
- **继续任务或尝试另一种方案**:在 Codex 运行时排队后续消息,使用 Guide 提供即时指导,或从符合条件的已完成轮次分叉。分叉会话仍共享同一个 Overleaf 项目,不会创建项目副本。
|
|
204
|
-
- **并行润色多个章节**:启用实验性 `parallel-subagents` 技能,指定章节或文件,使用 Auto + Track,在写回后检查合并结果。
|
|
242
|
+
- **文件**:输入 `@` 或用 **+** 面板最多添加五个文件,跨轮次保持选中,直到你清除。Codex 仍然可以读项目里的其他文件。
|
|
243
|
+
- **选区**:在编辑器里选中文字,作为上下文附加,或选**仅此处**把修改限制在这段范围内。发出去的消息上也会保留这张选区卡片。
|
|
244
|
+
- **编译日志**:`@compile-log` 会附上当前的错误和警告。
|
|
245
|
+
- **附件**:把 PDF、图片粘贴或拖进输入框。每轮最多 8 个,单个 12 MiB,总共 32 MiB。附件只给 Codex 阅读,不会写进 Overleaf。
|
|
246
|
+
- **生成的文件**:Codex 新建的图片、PDF 等资源(单个不超过 10 MiB)在加入项目前会先请你确认。LaTeX 编译产物会被过滤掉。
|
|
205
247
|
|
|
206
248
|
## 更新
|
|
207
249
|
|
|
208
|
-
|
|
250
|
+
托管安装会自动去 GitHub 检查新的已签名正式版。有更新时,在提示里或 **设置 → 软件更新** 里点**立即更新**。更新会等所有 Overleaf 标签页都保存好、没有任务在跑时才开始,扩展和 native host 一起替换;新版本健康检查不通过会自动回到旧版本。草稿和预发布版本不会被选中,更新也不会悄悄增加 Chrome 权限。
|
|
209
251
|
|
|
210
|
-
|
|
252
|
+
更新器会使用 HTTP(S) 代理环境变量以及 macOS/Windows 系统代理。只有 SOCKS 或 PAC 的环境需要提供一个 HTTP 代理地址。
|
|
211
253
|
|
|
212
|
-
|
|
254
|
+
### 从 v2.4.x 或更早版本升级
|
|
213
255
|
|
|
214
|
-
|
|
256
|
+
v2.5.0 新增了 `cn.overleaf.com` 支持,需要一项新的 Chrome 权限,因此安装结构升级到了 Bootstrap 协议 3。旧版更新器按设计会拒绝这一步,而不是自己去加权限。**这一版没法通过“立即更新”升级**。请手动运行一次安装:
|
|
215
257
|
|
|
216
|
-
|
|
258
|
+
```bash
|
|
259
|
+
npm exec --yes codex-overleaf-link@2.5.0 -- install-managed
|
|
260
|
+
```
|
|
217
261
|
|
|
218
|
-
|
|
262
|
+
然后在 `chrome://extensions` 里点扩展的**重新加载**,再刷新 Overleaf。会话、设置、模型服务的 key 和项目镜像都会保留。之后的版本又可以在插件里直接更新。
|
|
219
263
|
|
|
220
|
-
v2.
|
|
264
|
+
从 v2.5.0 起,如果以后某个版本又需要重新安装,面板会直接提示“这次更新需要重新安装”,写明原因,给出对应版本的命令和复制按钮,而不是显示更新失败。新增 Overleaf 站点也不再需要重装:扩展弹窗会请你允许访问该站点,Chrome 确认后即可使用。
|
|
221
265
|
|
|
222
|
-
|
|
266
|
+
源码安装和 Release zip 安装不受托管,始终需要手动更新。
|
|
223
267
|
|
|
224
|
-
|
|
268
|
+
## 常用命令
|
|
225
269
|
|
|
226
270
|
| 操作 | 命令 |
|
|
227
|
-
|
|
228
|
-
|
|
|
229
|
-
| 诊断 | `npm exec --yes codex-overleaf-link@2.
|
|
230
|
-
| 卸载 | `npm exec --yes codex-overleaf-link@2.
|
|
271
|
+
|---|---|
|
|
272
|
+
| 安装、修复或迁移 | `npm exec --yes codex-overleaf-link@2.5.0 -- install-managed` |
|
|
273
|
+
| 诊断 | `npm exec --yes codex-overleaf-link@2.5.0 -- doctor` |
|
|
274
|
+
| 卸载 | `npm exec --yes codex-overleaf-link@2.5.0 -- uninstall-managed` |
|
|
275
|
+
|
|
276
|
+
npm 负责安装、更新和卸载配套的托管扩展与 native host。旧的 `install-native` 命令只用于明确不受托管的扩展目录:
|
|
231
277
|
|
|
232
|
-
|
|
278
|
+
```bash
|
|
279
|
+
npm exec --yes codex-overleaf-link@2.5.0 -- install-native
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
只有自定义或开发版扩展 id 与官方 id 不同时,才需要 `--extension-id <chrome-extension-id>`。Linux Chromium 请在以上命令后加 `--browser chromium`。
|
|
233
283
|
|
|
234
284
|
<a id="uninstall"></a>
|
|
235
285
|
<details>
|
|
236
286
|
<summary><strong>卸载</strong></summary>
|
|
237
287
|
|
|
238
|
-
移除托管扩展 / Native Host 安装;Linux Chromium 需要追加 `--browser chromium`:
|
|
239
|
-
|
|
240
288
|
```bash
|
|
241
|
-
npm exec --yes codex-overleaf-link@2.
|
|
289
|
+
npm exec --yes codex-overleaf-link@2.5.0 -- uninstall-managed
|
|
242
290
|
```
|
|
243
291
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
非托管源码安装或仅安装 Native Host 的情况,可在源码目录中运行 `npm run uninstall:native`,或执行:
|
|
292
|
+
PowerShell 里同样可用,也能卸载 `install.sh` / `install.ps1` 装的版本。源码安装或只装了 native host 的情况,在源码目录里执行 `npm run uninstall:native`,或者:
|
|
247
293
|
|
|
248
294
|
```bash
|
|
249
|
-
npm exec --yes codex-overleaf-link@2.
|
|
295
|
+
npm exec --yes codex-overleaf-link@2.5.0 -- uninstall-native
|
|
250
296
|
```
|
|
251
297
|
|
|
252
|
-
|
|
298
|
+
旧的 native-only 源码安装也可以用它自带的卸载脚本:
|
|
253
299
|
|
|
254
300
|
```bash
|
|
255
301
|
node ~/.codex-overleaf/source/scripts/uninstall-native-host.mjs
|
|
@@ -259,94 +305,63 @@ node ~/.codex-overleaf/source/scripts/uninstall-native-host.mjs
|
|
|
259
305
|
node "$env:LOCALAPPDATA\CodexOverleaf\source\scripts\uninstall-native-host.mjs"
|
|
260
306
|
```
|
|
261
307
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
还需要在 `chrome://extensions` 中移除扩展条目。若需要删除已保存的 Codex Overleaf 历史,应在移除扩展之前使用面板中的历史清理功能。Windows 的 Native 安装位于 `%LOCALAPPDATA%\CodexOverleaf`,项目镜像、插件 Codex 历史、服务配置和技能位于 `%USERPROFILE%\.codex-overleaf`;彻底清理文件系统数据需要处理两个目录。详见[本地数据与清理](#本地数据与清理)。
|
|
308
|
+
卸载会移除 native host 注册、桥接程序、托管扩展和运行时,不会动你的历史、设置、项目镜像、模型服务 key 和 skills。别忘了在 `chrome://extensions` 里把扩展也删掉。Windows 上安装位于 `%LOCALAPPDATA%\CodexOverleaf`,数据位于 `%USERPROFILE%\.codex-overleaf`,彻底清理需要两处都处理。见[本地数据与清理](#本地数据与清理)。
|
|
265
309
|
|
|
266
310
|
</details>
|
|
267
311
|
|
|
268
312
|
## 常见问题与故障排查
|
|
269
313
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
托管安装可重新运行[托管安装器](#安装),在 `chrome://extensions` 中重新加载扩展,再刷新 Overleaf 标签页。这会恢复安装不完整或运行时更新不兼容时的配套扩展 / Native Host。
|
|
314
|
+
**面板提示“需要更新 native host”,或找不到 native host。**
|
|
315
|
+
重新运行安装器,在 `chrome://extensions` 里重新加载扩展,再刷新 Overleaf:
|
|
273
316
|
|
|
274
317
|
```bash
|
|
275
|
-
npm exec --yes codex-overleaf-link@2.
|
|
318
|
+
npm exec --yes codex-overleaf-link@2.5.0 -- install-managed
|
|
276
319
|
```
|
|
277
320
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
**找不到 Codex CLI**
|
|
281
|
-
|
|
282
|
-
在新终端中确认 `codex --version` 能正常运行;使用内置服务时还需确认已登录。macOS/Linux 的 PATH 变化后,重新安装 Native Host 会重新生成启动器。Windows 应先确认 PowerShell 中的 `Get-Command codex` 成功,再重新安装。
|
|
283
|
-
|
|
284
|
-
**扩展 ID 不匹配**
|
|
285
|
-
|
|
286
|
-
复制 `chrome://extensions` 中显示的 ID,并使用该 ID 重新安装 Native Host,详见[扩展 ID](#扩展-id)。
|
|
287
|
-
|
|
288
|
-
**Linux Chromium 无法连接**
|
|
321
|
+
源码安装请在同一个源码目录里重新构建,并重新执行 `npm run install:native`。
|
|
289
322
|
|
|
290
|
-
|
|
323
|
+
**找不到 Codex CLI。**
|
|
324
|
+
确认在新终端里 `codex --version` 能运行(Windows 上用 `Get-Command codex`),使用内置服务时确认已登录。然后重新运行安装器,让启动器拿到新的 PATH。
|
|
291
325
|
|
|
292
|
-
|
|
326
|
+
**扩展 id 不匹配。**
|
|
327
|
+
从 `chrome://extensions` 复制 id,用它重新安装。见[扩展 ID](#扩展-id)。
|
|
293
328
|
|
|
294
|
-
|
|
329
|
+
**有文件被跳过。**
|
|
330
|
+
通常是合作者改了同一处、编辑器没能及时打开那个文件,或者项目规则把它设成了只读。回答下面的详情会写明原因,**重试同步**只会写入还没完成的文件。不要为了重试而把整个任务再跑一遍,那样可能把同一处改两次。
|
|
295
331
|
|
|
296
|
-
|
|
332
|
+
**撤销或接受按钮不见了。**
|
|
333
|
+
这两个按钮取决于这一轮实际写入了什么。如果文件确实写进去了但按钮没了,先到 Overleaf 里核对改动,再导出诊断信息提 issue。
|
|
297
334
|
|
|
298
|
-
|
|
335
|
+
**写入被项目规则拦下,或触发了敏感信息检查。**
|
|
336
|
+
规则可以把路径设为只读,或限制 Codex 能写的位置,可以在项目设置里调整,或缩小请求范围。敏感信息检查会在上下文离开本机前查找 token、密钥之类的内容,把它找到的内容删掉或打码即可。
|
|
299
337
|
|
|
300
|
-
|
|
338
|
+
**排队的消息或分叉跑不起来。**
|
|
339
|
+
排队消息会沿用发送时的设置。如果那份模型服务配置被改过或删了,请重新发送。分叉需要一个已记录的 Codex 对话节点,没有时会禁用。
|
|
301
340
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
如果文件已写入但 Accept 缺失,应先在 Overleaf 检查实际改动,再决定是否重试。仅为恢复按钮而重复提交任务,可能造成重复修改。报告问题时可附上运行结果和脱敏诊断包。
|
|
305
|
-
|
|
306
|
-
**项目治理规则阻止写入**
|
|
307
|
-
|
|
308
|
-
项目规则可能将路径设为只读,或限制可写路径。可改用 Ask、调整项目治理设置,或将修改请求限定到允许的路径。
|
|
309
|
-
|
|
310
|
-
**敏感内容预检警告**
|
|
311
|
-
|
|
312
|
-
运行前检查会在上下文中寻找疑似令牌或密钥。应检查报告指出的文件,并脱敏或移除相关内容。选中某个焦点文件,不会排除完整项目快照中的其他文件。只有项目敏感内容设置允许时,才提供显式确认后继续的选项。
|
|
313
|
-
|
|
314
|
-
**附件与二进制文件大小限制**
|
|
315
|
-
|
|
316
|
-
输入区附件用于上下文;生成资产的新建或覆盖需要独立确认。写回采用分块传输,单文件上限为 10 MiB。不受支持的类型、超大文件及被过滤的编译产物,会作为跳过的本地改动报告。详见[上下文与附件](#上下文与附件)。
|
|
317
|
-
|
|
318
|
-
**排队消息或分叉会话无法运行**
|
|
319
|
-
|
|
320
|
-
排队任务保留提交时捕获的设置。模型服务配置被修改或删除后,可能需要重新提交。只有当前 Codex 轮次可接收指导时,Guide 才可用,否则消息仍保留在队列中。Fork 需要已记录的 Codex 对话轮次位置;该位置不可用时,分叉操作会被禁用。
|
|
341
|
+
**反馈 bug。**
|
|
342
|
+
用面板里的**导出诊断信息**。导出包默认不含项目正文、提示词、编译日志、diff 和密钥。如果另外附日志,请先检查里面的文件名、token 和文档内容。
|
|
321
343
|
|
|
322
344
|
## 工作原理
|
|
323
345
|
|
|
324
346
|
```mermaid
|
|
325
347
|
flowchart TD
|
|
326
|
-
O[Overleaf 项目与编辑器] <--> P[
|
|
348
|
+
O[Overleaf 项目与编辑器] <--> P[页面桥接]
|
|
327
349
|
P <--> C[Codex 面板与内容运行时]
|
|
328
|
-
C <--> B[扩展
|
|
329
|
-
B <-->|Native Messaging over stdio| N[本地 Node
|
|
350
|
+
C <--> B[扩展 service worker]
|
|
351
|
+
B <-->|Native Messaging over stdio| N[本地 Node host]
|
|
330
352
|
N <--> M[项目镜像与基线]
|
|
331
353
|
N <-->|JSON RPC over stdio| A[Codex app-server]
|
|
332
|
-
A
|
|
354
|
+
A -->|读取与修改| M
|
|
333
355
|
```
|
|
334
356
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
4. Native Host 收集实际文件变化,计算文本差异 / 补丁,并准备受支持的二进制传输。Ask 返回回答,不执行写回。
|
|
341
|
-
5. Auto 在确认项目身份、路径规则、编辑模式及每个补丁对应的预期文本后,通过浏览器应用符合条件的操作。冲突操作会被跳过并报告。
|
|
342
|
-
6. 扩展在写入后立即记录恢复依据,再验证保存状态、更新镜像基线,并按设置重新编译。运行报告分别呈现写入、保存确认和编译检查的结果。
|
|
343
|
-
|
|
344
|
-
接受留痕文本时,会先使用 Overleaf 原生撤销路径恢复本轮开始前的文本,再关闭留痕重放本轮改动。页面桥接层会检查 Editing 模式是否稳定;如果重放意外生成新留痕,则尝试回滚。
|
|
357
|
+
1. 发送任务时,扩展记下你的设置,把 Overleaf 项目同步到本地镜像;镜像仍是最新时直接复用。
|
|
358
|
+
2. native host 针对这份镜像启动 `codex app-server`,使用独立的 Codex home,插件的运行不会和你自己的 Codex 会话混在一起。
|
|
359
|
+
3. Codex 完成后,host 把镜像和基线做比较,生成文本补丁和资源传输。Ask 到这里就结束。
|
|
360
|
+
4. Auto 模式下,扩展通过 Overleaf 编辑器逐个写入补丁,写之前检查项目、路径规则、编辑模式和预期文字,对不上的就跳过并报告。
|
|
361
|
+
5. 先记录撤销点,再确认保存状态、刷新镜像,开着自动编译时重新编译。
|
|
345
362
|
|
|
346
363
|
## 开发
|
|
347
364
|
|
|
348
|
-
加载源码扩展前,先安装锁定的开发依赖并构建内容脚本:
|
|
349
|
-
|
|
350
365
|
```bash
|
|
351
366
|
npm ci
|
|
352
367
|
npm run build:content
|
|
@@ -358,186 +373,132 @@ npm run check:architecture
|
|
|
358
373
|
npm run benchmark:large
|
|
359
374
|
```
|
|
360
375
|
|
|
361
|
-
项目没有 npm
|
|
362
|
-
|
|
363
|
-
隔离世界中的 bundle 由 [content-entry.mjs](extension/entries/content-entry.mjs) 生成。修改源模块后,需要运行 `npm run build:content` 并重新加载扩展;页面世界的桥接模块仍独立加载。非托管源码安装在修改 Native 运行时或复制到其中的共享文件后,需要重新运行 `npm run install:native`。`npm run bridge` 可直接启动基于标准输入 / 输出的 Native Host,用于协议开发。
|
|
376
|
+
项目没有 npm 运行时依赖。开发时使用固定版本的 **esbuild**,Markdown 和数学公式渲染库直接打包在扩展里。测试使用 Node 自带的测试运行器,包含基于 VM 的浏览器集成测试。[CI](.github/workflows/test.yml) 在 macOS、Ubuntu 和 Windows 上用 Node 24.18.0 运行,并在 Ubuntu 上演练托管更新。
|
|
364
377
|
|
|
365
|
-
|
|
378
|
+
内容脚本由 [content-entry.mjs](extension/entries/content-entry.mjs) 打包生成。修改模块后执行 `npm run build:content`,再重新加载扩展。要把本地构建装进已有的托管安装,执行 `npm run install:managed`,然后重新加载扩展并刷新 Overleaf。`npm run bridge` 会直接在 stdio 上启动 native host,方便调协议。
|
|
366
379
|
|
|
367
|
-
|
|
|
368
|
-
|
|
369
|
-
| 面板与任务编排 | `extension/src/content/contentRuntime.js
|
|
370
|
-
| 页面快照与写回 | `extension/src/pageBridge.js
|
|
371
|
-
|
|
|
372
|
-
| Codex 与本地镜像 | `native-host/src/taskRunnerRuntime.js
|
|
373
|
-
|
|
|
374
|
-
| 托管更新与打包 | `extension/bootstrap
|
|
380
|
+
| 模块 | 入口 |
|
|
381
|
+
|---|---|
|
|
382
|
+
| 面板与任务编排 | `extension/src/content/contentRuntime.js`, `extension/src/content/runController.js` |
|
|
383
|
+
| 页面快照与写回 | `extension/src/pageBridge.js`, `extension/src/page/snapshotRouter.js`, `extension/src/page/writebackRouter.js` |
|
|
384
|
+
| 浏览器与本地通信 | `extension/src/background.js`, `native-host/src/index.js` |
|
|
385
|
+
| Codex 与本地镜像 | `native-host/src/taskRunnerRuntime.js`, `native-host/src/codexSessionRunner.js`, `native-host/src/mirrorWorkspace.js` |
|
|
386
|
+
| 共享协议与持久化 | `extension/src/shared/`, `extension/src/content/scopedPersistenceCoordinator.js` |
|
|
387
|
+
| 托管更新与打包 | `extension/bootstrap/`, `extension/src/backgroundUpdateCoordinator.js`, `native-host/src/updateManager.js`, `scripts/` |
|
|
375
388
|
|
|
376
|
-
|
|
389
|
+
对真实项目做浏览器冒烟测试:
|
|
377
390
|
|
|
378
391
|
```bash
|
|
379
392
|
npm run smoke:extension -- --url 'https://www.overleaf.com/project/<project-id>' --probe panel,native,project,diagnostics --json .local/smoke.json
|
|
380
393
|
```
|
|
381
394
|
|
|
382
|
-
|
|
395
|
+
默认用临时 Chrome 配置启动。需要已登录 Overleaf 的配置时,加 `--profile-dir <test-profile-dir> --keep-profile`。发布相关见 `npm run build:release`、`npm run verify:release-artifacts` 和 `npm run rehearse:update-hop`。
|
|
383
396
|
|
|
384
397
|
## 浏览器支持
|
|
385
398
|
|
|
386
|
-
| 平台 |
|
|
387
|
-
|
|
388
|
-
| macOS | Google Chrome |
|
|
389
|
-
| Windows | Google Chrome |
|
|
390
|
-
| Linux | Google Chrome |
|
|
391
|
-
| Linux | Chromium |
|
|
399
|
+
| 平台 | 浏览器 | 说明 |
|
|
400
|
+
|---|---|---|
|
|
401
|
+
| macOS | Google Chrome | 默认安装器 |
|
|
402
|
+
| Windows | Google Chrome | PowerShell 安装器 |
|
|
403
|
+
| Linux | Google Chrome | 默认安装器 |
|
|
404
|
+
| Linux | Chromium | 安装和卸载时加 `--browser chromium` |
|
|
392
405
|
|
|
393
|
-
|
|
406
|
+
macOS 和 Windows 上的 Chromium 暂不支持。扩展在 `overleaf.com`、`www.overleaf.com` 和 `cn.overleaf.com` 的项目页上运行,不覆盖自建的 Overleaf。
|
|
394
407
|
|
|
395
|
-
Linux Chromium
|
|
408
|
+
Linux Chromium:
|
|
396
409
|
|
|
397
410
|
```bash
|
|
398
|
-
CODEX_OVERLEAF_REF=v2.
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
Linux Chromium 卸载:
|
|
402
|
-
|
|
403
|
-
```bash
|
|
404
|
-
npm exec --yes codex-overleaf-link@2.4.0 -- uninstall-managed --browser chromium
|
|
411
|
+
CODEX_OVERLEAF_REF=v2.5.0 bash -c "$(curl -fsSL https://raw.githubusercontent.com/Ghqqqq/codex-overleaf-link/v2.5.0/install.sh)" -- --browser chromium
|
|
412
|
+
npm exec --yes codex-overleaf-link@2.5.0 -- uninstall-managed --browser chromium
|
|
405
413
|
```
|
|
406
414
|
|
|
407
415
|
## 扩展 ID
|
|
408
416
|
|
|
409
|
-
|
|
417
|
+
仓库里带有固定的扩展 key,官方构建的 id 始终是:
|
|
410
418
|
|
|
411
|
-
```text
|
|
412
|
-
illdpneeeopfffmiepaejglgmhpmdhdc
|
|
413
419
|
```
|
|
414
|
-
|
|
415
|
-
安装器默认使用该 ID。托管安装使用自定义 ID 时,应以 `chrome://extensions` 中显示的值重新运行安装器:
|
|
416
|
-
|
|
417
|
-
```bash
|
|
418
|
-
npm exec --yes codex-overleaf-link@2.4.0 -- install-managed --extension-id "<your-chrome-extension-id>"
|
|
420
|
+
illdpneeeopfffmiepaejglgmhpmdhdc
|
|
419
421
|
```
|
|
420
422
|
|
|
421
|
-
|
|
423
|
+
如果你加载的是自己构建的版本,Chrome 给了不同的 id,就用那个 id 重新安装,让 native host 的 `allowed_origins` 对得上:
|
|
422
424
|
|
|
423
425
|
```bash
|
|
424
|
-
npm exec --yes codex-overleaf-link@2.
|
|
426
|
+
npm exec --yes codex-overleaf-link@2.5.0 -- install-managed --extension-id "<your-chrome-extension-id>"
|
|
425
427
|
```
|
|
426
428
|
|
|
427
|
-
|
|
429
|
+
不受托管的扩展改用 `install-native --extension-id "<your-chrome-extension-id>"`。源码安装器也会读取 `CODEX_OVERLEAF_EXTENSION_ID` 环境变量。
|
|
428
430
|
|
|
429
|
-
##
|
|
431
|
+
## 发布文件
|
|
430
432
|
|
|
431
|
-
|
|
433
|
+
每个 GitHub Release 包含:
|
|
432
434
|
|
|
433
|
-
- `codex-overleaf-link-extension-v2.
|
|
434
|
-
- `codex-overleaf-native-host-v2.
|
|
435
|
-
- `codex-overleaf-update-v2.
|
|
436
|
-
- `codex-overleaf-link-2.
|
|
437
|
-
- `install.sh
|
|
438
|
-
- `
|
|
439
|
-
- `
|
|
440
|
-
- `
|
|
441
|
-
- `SHA256SUMS`、`release-manifest.json`、`release-manifest.sig`:校验和、发布元数据及其 Ed25519 签名。
|
|
442
|
-
- `release-notes.md`:随制品分发的发布说明。
|
|
435
|
+
- `codex-overleaf-link-extension-v2.5.0.zip`:扩展本体,用于手动加载。
|
|
436
|
+
- `codex-overleaf-native-host-v2.5.0.tar.gz`:安装器使用的 native host 运行时。
|
|
437
|
+
- `codex-overleaf-update-v2.5.0.tar.gz`:插件内更新下载的合并包。
|
|
438
|
+
- `codex-overleaf-link-2.5.0.tgz`:`npm exec` 命令背后的 npm 包。
|
|
439
|
+
- `install.sh` 和 `install.ps1`:固定到本版本的安装器。
|
|
440
|
+
- `uninstall-native-host.mjs` 及其依赖 `nativeHostPlatform.js`、`manifest.js`、`runtimeInstaller.js`。
|
|
441
|
+
- `SHA256SUMS`、`release-manifest.json` 和 `release-manifest.sig`:校验和,以及更新器会验证的 Ed25519 签名元数据。
|
|
442
|
+
- `release-notes.md`。
|
|
443
443
|
|
|
444
444
|
## 本地数据与清理
|
|
445
445
|
|
|
446
|
-
|
|
446
|
+
没有托管后端,也没有遥测,下面这些都在你自己的电脑上。运行任务时,上下文会发送给 Codex 或你配置的模型服务。项目规则只管能写哪里,不会把文件从模型的阅读范围里藏起来。
|
|
447
447
|
|
|
448
|
-
|
|
448
|
+
| 内容 | 位置(macOS/Linux;括号内为 Windows) |
|
|
449
|
+
|---|---|
|
|
450
|
+
| 会话、运行记录、历史 | Chrome 中 Overleaf 站点下的 IndexedDB 数据库 `codex-overleaf` |
|
|
451
|
+
| 偏好和项目设置 | 扩展的 `chrome.storage.local` |
|
|
452
|
+
| 托管扩展 | `~/.codex-overleaf/managed/extension`(`%LOCALAPPDATA%\CodexOverleaf\managed\extension`) |
|
|
453
|
+
| 托管 native host | `~/.codex-overleaf/managed/native`(`%LOCALAPPDATA%\CodexOverleaf\managed\native`) |
|
|
454
|
+
| 安装器源码 | `~/.codex-overleaf/source`(`%LOCALAPPDATA%\CodexOverleaf\source`) |
|
|
455
|
+
| 桥接程序 | `~/.codex-overleaf/codex-overleaf-bridge`(`%LOCALAPPDATA%\CodexOverleaf\codex-overleaf-bridge.cmd`) |
|
|
456
|
+
| 项目镜像 | `~/.codex-overleaf/projects`(`%USERPROFILE%\.codex-overleaf\projects`) |
|
|
457
|
+
| 插件 Codex home | `~/.codex-overleaf/codex-home`(`%USERPROFILE%\.codex-overleaf\codex-home`) |
|
|
458
|
+
| Codex Overleaf skills | `~/.codex-overleaf/skills`(`%USERPROFILE%\.codex-overleaf\skills`) |
|
|
459
|
+
| 模型服务配置和 key | `~/.codex-overleaf/providers.json`、`provider-secrets.json`(`%USERPROFILE%\.codex-overleaf`) |
|
|
460
|
+
| 日志 | `~/.codex-overleaf/native-host.log`、`native-host-launcher.log`(`%LOCALAPPDATA%\CodexOverleaf\native-host.log`) |
|
|
449
461
|
|
|
450
|
-
|
|
451
|
-
|------|------|------|
|
|
452
|
-
| 浏览器 IndexedDB | Overleaf 页面来源下的 `codex-overleaf` 数据库 | 会话、轮次、事件、产物和审计记录。 |
|
|
453
|
-
| 浏览器扩展存储 | `chrome.storage.local` | `codexOverleafGlobalPrefsV1` 中的全局界面偏好,以及项目设置、治理规则、所选技能 ID 和面板状态。 |
|
|
454
|
-
| 托管扩展 | macOS/Linux:`~/.codex-overleaf/managed/extension`;Windows:`%LOCALAPPDATA%\CodexOverleaf\managed\extension` | Chrome 加载的稳定目录,包含 Bootstrap 和可替换运行时文件。 |
|
|
455
|
-
| 托管 Native Host | macOS/Linux:`~/.codex-overleaf/managed/native`;Windows:`%LOCALAPPDATA%\CodexOverleaf\managed\native` | 版本化运行时、当前 / 上一版本指针、Bootstrap 启动器和更新暂存数据。 |
|
|
456
|
-
| 源码安装器检出目录 | macOS/Linux:`~/.codex-overleaf/source`;Windows:`%LOCALAPPDATA%\CodexOverleaf\source` | `install.sh` / `install.ps1` 保留的源码;npm 托管安装无需此目录。 |
|
|
457
|
-
| Native-only 运行时 | macOS/Linux:`~/.codex-overleaf/native-host-runtime`;Windows:`%LOCALAPPDATA%\CodexOverleaf\native-host-runtime` | 非托管 / Native-only 安装的运行时副本;Windows 托管安装的 Native Messaging 清单也保存在这里。 |
|
|
458
|
-
| Native 桥接启动程序 | macOS/Linux:`~/.codex-overleaf/codex-overleaf-bridge`;Windows:`%LOCALAPPDATA%\CodexOverleaf\codex-overleaf-bridge.cmd` | Native Messaging 启动入口。 |
|
|
459
|
-
| 项目镜像 | macOS/Linux:`~/.codex-overleaf/projects`;Windows:`%USERPROFILE%\.codex-overleaf\projects` | 各 Overleaf 项目的本地工作区与镜像元数据。 |
|
|
460
|
-
| 插件 Codex 主目录 | macOS/Linux:`~/.codex-overleaf/codex-home`;Windows:`%USERPROFILE%\.codex-overleaf\codex-home` | 插件任务的隔离主目录;复制认证 / 配置元数据,不复用全局 Codex 会话,也不继承全局个性化。 |
|
|
461
|
-
| Codex Overleaf 技能 | macOS/Linux:`~/.codex-overleaf/skills`;Windows:`%USERPROFILE%\.codex-overleaf\skills` | 扩展管理的项目 / 插件技能。 |
|
|
462
|
-
| 模型服务配置 | macOS/Linux:`~/.codex-overleaf/providers.json` 和 `provider-secrets.json`;Windows 位于 `%USERPROFILE%\.codex-overleaf` 下 | 服务配置与分开存储的 API key。 |
|
|
463
|
-
| Native 日志 | macOS/Linux:`~/.codex-overleaf/native-host.log`;Windows:`%LOCALAPPDATA%\CodexOverleaf\native-host.log` | Native 调试事件;在可行处使用内容长度摘要。 |
|
|
464
|
-
| 启动器日志 | macOS/Linux:`~/.codex-overleaf/native-host-launcher.log` | POSIX 启动路径和 Node 诊断;Windows `.cmd` 启动器目前不单独生成启动日志。 |
|
|
462
|
+
历史数据库属于 Overleaf 页面,不属于扩展,所以删除扩展并不会清掉它。参见 Chrome 关于[内容脚本存储](https://developer.chrome.com/docs/extensions/develop/concepts/storage-and-cookies#storage)的说明。
|
|
465
463
|
|
|
466
|
-
|
|
464
|
+
插件的 Codex home 会复制你的登录和配置,但不带个性化内容:不复制 `~/.codex/AGENTS.md`,去掉顶层 `personality`,也不链接全局的 `rules` 和 `memories`。两个 skill 加载开关默认都是开启的,都在设置里:
|
|
467
465
|
|
|
468
|
-
-
|
|
469
|
-
-
|
|
466
|
+
- `加载 Codex 本地技能`(Load local Codex skills):把你自己的 skills 和插件(`~/.codex/skills`、本地 Codex `plugins`、`superpowers` 及相关配置)带进独立的 `~/.codex-overleaf/codex-home`。只影响这个插件 home,不会写入或复用全局的 `~/.codex/sessions`。
|
|
467
|
+
- `加载 Codex Overleaf 专属技能`(Load Codex Overleaf skills):加载本扩展管理的 skills,位于 `~/.codex-overleaf/skills`(Windows 上为 `%USERPROFILE%\.codex-overleaf\skills`)。关掉只是隐藏,文件不会删除。
|
|
470
468
|
|
|
471
|
-
|
|
469
|
+
Native Messaging 注册位置:
|
|
472
470
|
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
| 平台 / 浏览器 | 注册路径 |
|
|
476
|
-
|---------------|----------|
|
|
471
|
+
| 平台 | 路径 |
|
|
472
|
+
|---|---|
|
|
477
473
|
| macOS Chrome | `~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.codex.overleaf.json` |
|
|
478
474
|
| Linux Chrome | `~/.config/google-chrome/NativeMessagingHosts/com.codex.overleaf.json` |
|
|
479
475
|
| Linux Chromium | `~/.config/chromium/NativeMessagingHosts/com.codex.overleaf.json` |
|
|
480
|
-
| Windows Chrome | `HKCU\Software\Google\Chrome\NativeMessagingHosts\com.codex.overleaf
|
|
481
|
-
|
|
482
|
-
完整卸载与数据删除:
|
|
483
|
-
|
|
484
|
-
1. 如果需要清除保存的运行历史,应在移除扩展前使用 **Settings → History & storage → Clear all history**。使用过多个浏览器配置文件或 Overleaf 来源时,需要分别处理。扩展已经移除时,可在 Overleaf 页面的 **DevTools → Application → IndexedDB** 中删除 `codex-overleaf` 数据库。应只针对该数据库,避免清空全部 Overleaf 站点数据。
|
|
485
|
-
2. 托管安装运行 `uninstall-managed`,非托管 / Native-only 安装运行 `uninstall-native`,详见[卸载](#uninstall)。Linux Chromium 需要传入 `--browser chromium`。
|
|
486
|
-
3. 在各浏览器配置文件的 `chrome://extensions` 中移除扩展。Chrome 会在卸载扩展时清除其 `chrome.storage.local` 设置,详见 [Chrome storage API 文档](https://developer.chrome.com/docs/extensions/reference/api/storage#storage_areas)。
|
|
487
|
-
4. 如需清除剩余的默认文件系统数据,包括项目镜像、插件 Codex 历史、模型服务凭据、技能和源码检出目录,可使用以下对应命令;自定义安装根目录也需要单独处理。
|
|
476
|
+
| Windows Chrome | `HKCU\Software\Google\Chrome\NativeMessagingHosts\com.codex.overleaf` → `%LOCALAPPDATA%\CodexOverleaf\native-host-runtime\com.codex.overleaf.json` |
|
|
488
477
|
|
|
489
|
-
|
|
478
|
+
彻底删除:
|
|
490
479
|
|
|
491
|
-
|
|
480
|
+
1. 在扩展还装着的时候,在每个用过的 Chrome 配置里打开 **设置 → 历史与存储 → 清理本地历史…**。如果扩展已经删了,就在 Overleaf 页面的 **开发者工具 → Application → IndexedDB** 里删除 `codex-overleaf` 数据库。
|
|
481
|
+
2. 运行 `uninstall-managed`(不受托管的安装用 `uninstall-native`),见[卸载](#uninstall)。
|
|
482
|
+
3. 在 `chrome://extensions` 里删除扩展,Chrome 会一并清掉它的 `chrome.storage.local`。
|
|
483
|
+
4. 删除本地文件夹。**这会永久删除镜像、插件历史、模型服务 key 和 skills。**
|
|
492
484
|
|
|
493
485
|
```bash
|
|
494
486
|
rm -rf ~/.codex-overleaf ~/Codex\ Overleaf\ Link\ Extension
|
|
495
487
|
```
|
|
496
488
|
|
|
497
|
-
Windows PowerShell:
|
|
498
|
-
|
|
499
489
|
```powershell
|
|
500
490
|
Remove-Item -Recurse -Force "$env:LOCALAPPDATA\CodexOverleaf", "$env:USERPROFILE\.codex-overleaf" -ErrorAction SilentlyContinue
|
|
501
491
|
```
|
|
502
492
|
|
|
503
|
-
输入区附件暂存于镜像工作区内的 `.codex-overleaf-attachments`,写回时会忽略该目录。提交后清空输入区附件栏,并不意味着本地镜像或 Codex 历史中的文件会立即删除。
|
|
504
|
-
|
|
505
|
-
## 兼容性矩阵
|
|
506
|
-
|
|
507
|
-
此矩阵用于发布候选版验收和兼容性报告。发布兼容性结论前,应从测试机器记录准确版本。
|
|
508
|
-
|
|
509
|
-
| 字段 | macOS Chrome | Windows Chrome | Linux Chrome | Linux Chromium |
|
|
510
|
-
|------|--------------|----------------|--------------|----------------|
|
|
511
|
-
| 操作系统 / 版本 / 架构 | 记录 macOS 版本及 `arm64` / `x64`。 | 记录 Windows 版本及 `arm64` / `x64`。 | 记录发行版、版本及 `arm64` / `x64`。 | 记录发行版、版本及 `arm64` / `x64`。 |
|
|
512
|
-
| 浏览器 / 通道 / 版本 | 记录 Google Chrome 通道和版本。 | 记录 Google Chrome 通道和版本。 | 记录 Google Chrome 通道和版本。 | 记录 Chromium 通道 / 软件包和版本。 |
|
|
513
|
-
| 安装方式 | 推荐托管安装;也支持非托管 Release ZIP 或源码安装。 | 同 macOS Chrome。 | 同 macOS Chrome。 | 托管或非托管安装均需使用 `--browser chromium` 注册。 |
|
|
514
|
-
| 扩展 ID | 内置 ID 为 `illdpneeeopfffmiepaejglgmhpmdhdc`;自定义 ID 使用 `--extension-id` 传入。 | 同 macOS Chrome。 | 同 macOS Chrome。 | 同 macOS Chrome。 |
|
|
515
|
-
| 安装 / 更新命令 | `npm exec --yes codex-overleaf-link@2.4.0 -- install-managed` | `npm exec --yes codex-overleaf-link@2.4.0 -- install-managed` | `npm exec --yes codex-overleaf-link@2.4.0 -- install-managed` | `npm exec --yes codex-overleaf-link@2.4.0 -- install-managed --browser chromium` |
|
|
516
|
-
| 卸载命令 | `npm exec --yes codex-overleaf-link@2.4.0 -- uninstall-managed` | `npm exec --yes codex-overleaf-link@2.4.0 -- uninstall-managed` | `npm exec --yes codex-overleaf-link@2.4.0 -- uninstall-managed` | `npm exec --yes codex-overleaf-link@2.4.0 -- uninstall-managed --browser chromium` |
|
|
517
|
-
| 清单 / 注册表路径 | `~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.codex.overleaf.json` | `HKCU\Software\Google\Chrome\NativeMessagingHosts\com.codex.overleaf` 指向 `%LOCALAPPDATA%\CodexOverleaf\native-host-runtime\com.codex.overleaf.json` | `~/.config/google-chrome/NativeMessagingHosts/com.codex.overleaf.json` | `~/.config/chromium/NativeMessagingHosts/com.codex.overleaf.json` |
|
|
518
|
-
| 托管运行时路径 | `~/.codex-overleaf/managed/extension` 和 `~/.codex-overleaf/managed/native`。 | `%LOCALAPPDATA%\CodexOverleaf\managed\extension` 和 `%LOCALAPPDATA%\CodexOverleaf\managed\native`。 | 同 macOS Chrome。 | 同 macOS Chrome。 |
|
|
519
|
-
| Node / Git / Codex / TeX | 记录准确版本,安装和服务前提见[环境要求](#环境要求)。 | 同 macOS Chrome。 | 同 macOS Chrome。 | 同 macOS Chrome。 |
|
|
520
|
-
| Native 兼容性 | 当前协议为 2,扩展支持 Native 协议范围 1–2;必需能力与运行时版本另行校验。 | 同 macOS Chrome。 | 同 macOS Chrome。 | 同 macOS Chrome。 |
|
|
521
|
-
| Overleaf 行为检查 | 当前文件识别、完整快照来源、文件树写入、Undo 检查点、Reviewing 控制、编译捕获、保存状态验证、OT 预热镜像回退。 | 相同检查。 | 相同检查。 | 相同检查。 |
|
|
522
|
-
| 最近冒烟测试日期 / 结果 | 记录日期、测试者和通过 / 失败。 | 记录日期、测试者和通过 / 失败。 | 记录日期、测试者和通过 / 失败。 | 记录日期、测试者和通过 / 失败。 |
|
|
523
|
-
|
|
524
|
-
当前握手要求 `bridgePing`、`mirrorSync`、`mirrorPatchFiles`、`mirrorStatus`、`codexRun`、`codexCancel`、`codexSteer`、`codexModels`、`historyClearPlugin`、`localSkills`、`mirrorSensitiveScan`、`providerProfiles`、`assetTransfer` 和 `threadFork`。[compatibility.js](extension/src/shared/compatibility.js) 维护该列表及协议 / 版本规则。协议范围存在交集,只满足兼容性判定的一部分条件。
|
|
525
|
-
|
|
526
|
-
此表用于记录兼容性结果;列出某个组合不代表该浏览器版本已经完成实测。CI 覆盖 macOS、Ubuntu 和 Windows 的本地测试,真实 Overleaf 兼容性仍需要浏览器冒烟测试。
|
|
527
|
-
|
|
528
493
|
## 参与贡献
|
|
529
494
|
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
1. Fork 本仓库。
|
|
533
|
-
2. 创建功能分支。
|
|
534
|
-
3. 运行 `npm test`,确认测试通过。
|
|
535
|
-
4. 提交说明清晰的 pull request。
|
|
536
|
-
|
|
537
|
-
修改功能行为、版本引用、安装命令或故障排查说明时,应同步更新 [README.md](README.md) 和 [README.zh-CN.md](README.zh-CN.md)。正文按语言翻译,命令、文件路径和 API 标识保持一致。
|
|
495
|
+
欢迎提 issue 和 PR。比较大的改动请先开 issue 聊聊思路。提交前跑一遍 `npm test`;功能、版本或命令有变化时,请同步更新 [README.md](README.md) 和 [README.zh-CN.md](README.zh-CN.md)。
|
|
538
496
|
|
|
539
497
|
## 许可证
|
|
540
498
|
|
|
541
499
|
[MIT](LICENSE)
|
|
542
500
|
|
|
543
501
|
<p align="center"><a href="README.md" lang="en">English</a> | <strong>简体中文</strong></p>
|
|
502
|
+
|
|
503
|
+
|
|
504
|
+
</details>
|