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
|
@@ -372,6 +372,7 @@
|
|
|
372
372
|
status: 'running',
|
|
373
373
|
streamKey: getCodexStreamKey(method, params),
|
|
374
374
|
streamRole: method === 'item/agentMessage/delta' ? 'assistant' : 'reasoning',
|
|
375
|
+
streamPhase: params.phase || '',
|
|
375
376
|
appendText: true
|
|
376
377
|
};
|
|
377
378
|
}
|
|
@@ -412,12 +413,13 @@
|
|
|
412
413
|
};
|
|
413
414
|
}
|
|
414
415
|
if (method === 'warning' || method === 'guardianWarning' || method === 'configWarning') {
|
|
415
|
-
const title = cleanVisibleText(params.message || params.warning || '');
|
|
416
|
+
const title = cleanVisibleText(params.message || params.warning || params.summary || '');
|
|
417
|
+
if (!title) return technicalOnly(event, locale);
|
|
416
418
|
return {
|
|
417
419
|
kind: 'activity',
|
|
418
420
|
visible: true,
|
|
419
|
-
title
|
|
420
|
-
status: '
|
|
421
|
+
title,
|
|
422
|
+
status: event.status === 'failed' ? 'failed' : method === 'guardianWarning' ? 'warning' : 'info',
|
|
421
423
|
technicalDetail: normalizeRawEvent(event)
|
|
422
424
|
};
|
|
423
425
|
}
|
|
@@ -459,6 +461,7 @@
|
|
|
459
461
|
status,
|
|
460
462
|
streamKey: getItemStreamKey('agent', item),
|
|
461
463
|
streamRole: 'assistant',
|
|
464
|
+
streamPhase: item.phase || '',
|
|
462
465
|
replaceText: true
|
|
463
466
|
};
|
|
464
467
|
}
|
|
@@ -500,6 +503,10 @@
|
|
|
500
503
|
status,
|
|
501
504
|
detail: {
|
|
502
505
|
command: item.command,
|
|
506
|
+
itemId: item.id,
|
|
507
|
+
threadId: event.detail?.params?.threadId,
|
|
508
|
+
turnId: event.detail?.params?.turnId,
|
|
509
|
+
commandActions: item.commandActions,
|
|
503
510
|
output: item.aggregatedOutput,
|
|
504
511
|
exitCode: item.exitCode
|
|
505
512
|
}
|
|
@@ -863,6 +870,11 @@
|
|
|
863
870
|
: textFor(locale, '本轮没有可撤销的写入', 'this run has no reversible writes');
|
|
864
871
|
}
|
|
865
872
|
|
|
873
|
+
if (input.saveVerification && input.saveVerification.state !== 'not_checked') {
|
|
874
|
+
report.saveState = input.saveVerification.state === 'verified_saved'
|
|
875
|
+
? textFor(locale, '已确认保存', 'Saved')
|
|
876
|
+
: textFor(locale, '待确认,可检查保存状态', 'Pending confirmation; check save status');
|
|
877
|
+
}
|
|
866
878
|
const failed = input.status === 'failed' || input.status === 'blocked';
|
|
867
879
|
return {
|
|
868
880
|
title: textFor(locale, '本轮完成报告', 'Task report'),
|
|
@@ -946,6 +958,7 @@
|
|
|
946
958
|
});
|
|
947
959
|
}
|
|
948
960
|
|
|
961
|
+
if (report.saveState) meta.push({ key: 'saveState', label: textFor(locale, '保存', 'Save'), value: report.saveState });
|
|
949
962
|
return { conclusion, body: bodySections.join('\n\n'), meta };
|
|
950
963
|
}
|
|
951
964
|
|
|
@@ -976,6 +989,7 @@
|
|
|
976
989
|
if (nextStep) {
|
|
977
990
|
sections.push(textFor(locale, `下一步:${nextStep}`, `Next: ${nextStep}`));
|
|
978
991
|
}
|
|
992
|
+
if (report.saveState) sections.push(textFor(locale, `保存:${report.saveState}`, `Save: ${report.saveState}`));
|
|
979
993
|
return sections.join('\n\n');
|
|
980
994
|
}
|
|
981
995
|
|
|
@@ -1045,7 +1059,7 @@
|
|
|
1045
1059
|
if (input.mode === 'ask' || input.status === '只问不改') {
|
|
1046
1060
|
return textFor(locale, '这轮是只问不改。', 'This run was Ask mode.');
|
|
1047
1061
|
}
|
|
1048
|
-
if (input.status === 'rejected') {
|
|
1062
|
+
if (input.status === 'cancelled' || input.status === 'rejected') {
|
|
1049
1063
|
return textFor(locale, '你取消了这轮修改。', 'You cancelled this change.');
|
|
1050
1064
|
}
|
|
1051
1065
|
return '';
|
|
@@ -75,6 +75,7 @@
|
|
|
75
75
|
mirror: summarizeMirror(input.mirror),
|
|
76
76
|
auditLogs: summarizeAuditLogList(input.auditLogs),
|
|
77
77
|
run: summarizeRun(input.run),
|
|
78
|
+
...(Array.isArray(input.recentRuns) ? { recentRuns: input.recentRuns.slice(0, 8).map(summarizeRun) } : {}),
|
|
78
79
|
governance: summarizeGovernance(input.governance),
|
|
79
80
|
projectIdHash: hashString(stringField(input.projectId))
|
|
80
81
|
};
|
|
@@ -272,9 +273,22 @@
|
|
|
272
273
|
}
|
|
273
274
|
|
|
274
275
|
function summarizeRun(run = {}) {
|
|
276
|
+
run = run && typeof run === 'object' && !Array.isArray(run) ? run : {};
|
|
277
|
+
const captures = Array.isArray(run.trackedChangeCaptures) ? run.trackedChangeCaptures : [];
|
|
275
278
|
return removeEmptySummaryFields({
|
|
276
279
|
id: redactSecretLikeText(stringField(run.id)),
|
|
277
280
|
status: redactSecretLikeText(stringField(run.status)),
|
|
281
|
+
startedAt: redactSecretLikeText(stringField(run.startedAt)),
|
|
282
|
+
finishedAt: redactSecretLikeText(stringField(run.finishedAt)),
|
|
283
|
+
requireReviewing: typeof run.executionSnapshot?.requireReviewing === 'boolean'
|
|
284
|
+
? run.executionSnapshot.requireReviewing : undefined,
|
|
285
|
+
trackedChangeStatus: diagnosticToken(run.trackedChangeStatus),
|
|
286
|
+
undoStatus: diagnosticToken(run.undoStatus),
|
|
287
|
+
appliedOperationCount: Array.isArray(run.appliedOperations) ? run.appliedOperations.length : undefined,
|
|
288
|
+
undoTrackedChangeCount: Array.isArray(run.undoTrackedChanges) ? run.undoTrackedChanges.length : undefined,
|
|
289
|
+
captureCount: Array.isArray(run.trackedChangeCaptures) ? captures.length : undefined,
|
|
290
|
+
capturesTruncated: captures.length > 20 ? true : undefined,
|
|
291
|
+
trackedChangeCaptures: captures.slice(0, 20).map(summarizeTrackedCapture),
|
|
278
292
|
errorCode: redactSecretLikeText(stringField(run.errorCode)),
|
|
279
293
|
errorCategory: categorizeError(run.errorCode || run.message || run.error),
|
|
280
294
|
events: (Array.isArray(run.events) ? run.events : []).map(event => removeEmptyFields({
|
|
@@ -287,6 +301,63 @@
|
|
|
287
301
|
});
|
|
288
302
|
}
|
|
289
303
|
|
|
304
|
+
// Export only proof metadata, never document text, prompts, labels or raw IDs.
|
|
305
|
+
function diagnosticToken(value) {
|
|
306
|
+
const text = redactSecretLikeText(stringField(value));
|
|
307
|
+
return /^[a-z][a-z0-9_]{0,79}$/.test(text) ? text : undefined;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
function diagnosticNumbers(value, keys) {
|
|
311
|
+
const source = value && typeof value === 'object' ? value : {};
|
|
312
|
+
const result = {};
|
|
313
|
+
for (const key of keys) {
|
|
314
|
+
if (Number.isSafeInteger(source[key]) && source[key] >= 0) result[key] = source[key];
|
|
315
|
+
}
|
|
316
|
+
return result;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
function diagnosticFingerprint(value) {
|
|
320
|
+
return typeof value === 'string' && /^\d{1,16}:[a-f0-9]{1,8}:[a-f0-9]{1,8}$/.test(value)
|
|
321
|
+
? value : undefined;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
function summarizeTrackedCapture(value) {
|
|
325
|
+
const capture = value && typeof value === 'object' && !Array.isArray(value) ? value : {};
|
|
326
|
+
const before = Array.isArray(capture.before) ? capture.before : [];
|
|
327
|
+
const refs = Array.isArray(capture.refs) ? capture.refs : [];
|
|
328
|
+
const ranges = Array.isArray(capture.ranges) ? capture.ranges : [];
|
|
329
|
+
const diagnostics = capture.diagnostics || {};
|
|
330
|
+
const refSummary = ref => removeEmptySummaryFields({
|
|
331
|
+
idHash: stringField(ref?.id) ? hashString(ref.id) : undefined,
|
|
332
|
+
kind: diagnosticToken(ref?.kind),
|
|
333
|
+
...diagnosticNumbers(ref, ['from', 'to', 'textLength']),
|
|
334
|
+
textHash: diagnosticFingerprint(ref?.textHash)
|
|
335
|
+
});
|
|
336
|
+
return removeEmptySummaryFields({
|
|
337
|
+
pathHash: stringField(capture.path) ? hashString(capture.path) : undefined,
|
|
338
|
+
nativeDocIdHash: stringField(capture.nativeDocId) ? hashString(capture.nativeDocId) : undefined,
|
|
339
|
+
state: diagnosticToken(capture.state), reason: diagnosticToken(capture.reason),
|
|
340
|
+
source: diagnosticToken(capture.source),
|
|
341
|
+
...diagnosticNumbers(capture, ['startedAt', 'expiresAt']),
|
|
342
|
+
expectedFingerprint: diagnosticFingerprint(capture.expected),
|
|
343
|
+
beforeCount: before.length, refCount: refs.length, rangeCount: ranges.length,
|
|
344
|
+
truncated: before.length > 1200 || refs.length > 1200 || ranges.length > 1000 ? true : undefined,
|
|
345
|
+
before: before.slice(0, 1200).map(refSummary),
|
|
346
|
+
refs: refs.slice(0, 1200).map(refSummary),
|
|
347
|
+
ranges: ranges.slice(0, 1000).map(range => removeEmptySummaryFields({
|
|
348
|
+
...diagnosticNumbers(range, ['from', 'to', 'start', 'end', 'removedLength']),
|
|
349
|
+
removedHash: diagnosticFingerprint(range?.removedHash)
|
|
350
|
+
})),
|
|
351
|
+
diagnostics: removeEmptySummaryFields({
|
|
352
|
+
...diagnosticNumbers(diagnostics, ['beforeCount', 'afterCount', 'capturedCount',
|
|
353
|
+
'filteredCount', 'polls', 'elapsedMs', 'waitMs']),
|
|
354
|
+
reason: diagnosticToken(diagnostics.reason),
|
|
355
|
+
source: diagnosticToken(diagnostics.source),
|
|
356
|
+
sourceReason: diagnosticToken(diagnostics.sourceReason)
|
|
357
|
+
})
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
|
|
290
361
|
function summarizeGovernance(rules = {}) {
|
|
291
362
|
return {
|
|
292
363
|
readonlyPatternCount: Array.isArray(rules.readonlyPatterns) ? rules.readonlyPatterns.length : 0,
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
(function initChangeHistoryModel(root, factory) {
|
|
2
|
+
if (typeof module === 'object' && module.exports) {
|
|
3
|
+
module.exports = factory(require('./settlementFacts'), require('./sessionState'));
|
|
4
|
+
} else root.CodexOverleafModuleRegistry.define('ChangeHistoryModel', ['SettlementFacts', 'SessionState'], factory);
|
|
5
|
+
})(typeof globalThis !== 'undefined' ? globalThis : window, function changeHistoryModelFactory(SettlementFacts, SessionState) {
|
|
6
|
+
'use strict';
|
|
7
|
+
const array = value => Array.isArray(value) ? value : [];
|
|
8
|
+
const text = value => typeof value === 'string' ? value : '';
|
|
9
|
+
const opaque = value => /^\[.*(?:omitted|redacted|chars=\d+|hash=).*?\]$/i.test(text(value).trim());
|
|
10
|
+
|
|
11
|
+
function project(records, options = {}) {
|
|
12
|
+
const { projectId, accountScopeId } = options;
|
|
13
|
+
if (!projectId || !accountScopeId) return [];
|
|
14
|
+
const sanitize = options.sanitizeText || text;
|
|
15
|
+
const safe = value => text(sanitize(text(value))).trim();
|
|
16
|
+
const sessions = new Map();
|
|
17
|
+
const live = new Map();
|
|
18
|
+
for (const session of array(options.storedSessions)) {
|
|
19
|
+
if (session?.projectId === projectId && session.accountScopeId === accountScopeId) sessions.set(session.id, session);
|
|
20
|
+
}
|
|
21
|
+
// In-memory sessions already passed the runtime's account/project hydrate
|
|
22
|
+
// boundary. Their review state is newer than the persisted audit snapshot.
|
|
23
|
+
for (const session of array(options.sessions)) {
|
|
24
|
+
if (!session?.id) continue;
|
|
25
|
+
const prior = sessions.get(session.id);
|
|
26
|
+
const runs = new Map(array(prior?.runs).map(run => [run.id, run]));
|
|
27
|
+
const current = session.id === options.activeSessionId ? array(options.activeRuns) : array(session.runs);
|
|
28
|
+
for (const run of current) if (run?.id) runs.set(run.id, run);
|
|
29
|
+
sessions.set(session.id, { ...prior, ...session, runs: [...runs.values()] });
|
|
30
|
+
live.set(session.id, new Set(current.filter(run => run?.id && (!run.runProjectId || run.runProjectId === projectId)).map(run => run.id)));
|
|
31
|
+
}
|
|
32
|
+
function path(value) {
|
|
33
|
+
const raw = text(value).replace(/\\/g, '/').replace(/^\.\//, '');
|
|
34
|
+
if (/(^|\/)\.codex-overleaf-(subagents|attachments)(\/|$)/.test(raw)) return '';
|
|
35
|
+
const result = safe(raw);
|
|
36
|
+
if (!result || /^\[.*\]$/.test(result)) return '';
|
|
37
|
+
return result.slice(0, 320);
|
|
38
|
+
}
|
|
39
|
+
const seen = new Set();
|
|
40
|
+
return array(records).filter(record => record?.projectId === projectId
|
|
41
|
+
&& (!record.accountScopeId || record.accountScopeId === accountScopeId)
|
|
42
|
+
&& sessions.has(record.sessionId))
|
|
43
|
+
.slice().sort((a, b) => String(b.createdAt || '').localeCompare(String(a.createdAt || '')))
|
|
44
|
+
.filter(record => {
|
|
45
|
+
const key = JSON.stringify([record.sessionId, record.turnId || record.id]);
|
|
46
|
+
if (seen.has(key)) return false;
|
|
47
|
+
seen.add(key); return true;
|
|
48
|
+
}).slice(0, 50).map(record => {
|
|
49
|
+
const session = sessions.get(record.sessionId);
|
|
50
|
+
const candidate = array(session.runs).find(run => run.id === record.turnId);
|
|
51
|
+
const run = candidate && (!candidate.runProjectId || candidate.runProjectId === projectId) ? candidate : null;
|
|
52
|
+
const facts = SettlementFacts.compactSettlementFacts(run?.settlement || run?.settlementFacts || {});
|
|
53
|
+
const projection = run ? SettlementFacts.projectRunSettlement(run) : null;
|
|
54
|
+
const applied = array(record.appliedFiles).filter(file => path(typeof file === 'string' ? file : file?.path));
|
|
55
|
+
const review = text(run?.trackedChangeStatus);
|
|
56
|
+
const hasWrites = applied.length > 0 || run?.changedDocument === true
|
|
57
|
+
|| ['changed', 'possibly-changed'].includes(facts.documentEffect)
|
|
58
|
+
|| ['pending', 'accepted', 'rejected', 'needs_review'].includes(review)
|
|
59
|
+
|| run?.undoStatus === 'applied';
|
|
60
|
+
let files = applied.slice();
|
|
61
|
+
files.push(...facts.fileSettlements.filter(file => ['complete', 'partial'].includes(file.applied)
|
|
62
|
+
|| ['changed', 'possibly-changed'].includes(file.documentEffect)));
|
|
63
|
+
if (!files.length && hasWrites) files = array(record.changedFiles);
|
|
64
|
+
const paths = [...new Set(files.flatMap(file => typeof file === 'string'
|
|
65
|
+
? [path(file)] : [path(file?.path), path(file?.destinationPath)]).filter(Boolean))];
|
|
66
|
+
const unsafeSave = record.saveVerification?.ok === false
|
|
67
|
+
|| ['failed', 'unavailable'].includes(record.saveVerification?.state);
|
|
68
|
+
let status;
|
|
69
|
+
if (review === 'accepted') status = 'accepted';
|
|
70
|
+
else if (review === 'rejected' || run?.undoStatus === 'applied') status = 'undone';
|
|
71
|
+
else if (review === 'needs_review' || projection?.terminalState === 'needs_review'
|
|
72
|
+
|| facts.documentEffect === 'possibly-changed'
|
|
73
|
+
|| ['partial', 'needs-review'].includes(facts.evidence.settled)
|
|
74
|
+
|| hasWrites && (unsafeSave || ['failed', 'interrupted', 'needs_review_after_navigation'].includes(run?.status))) status = 'attention';
|
|
75
|
+
else if (run?.status === 'running' || record.resultStatus === 'draft' && !record.completedAt) status = 'running';
|
|
76
|
+
else if (review === 'pending') status = 'pending';
|
|
77
|
+
else if (!hasWrites) status = 'unchanged';
|
|
78
|
+
else status = run ? 'written' : 'unknown';
|
|
79
|
+
const suppliedSummary = safe(run?.safeTaskSummary || '');
|
|
80
|
+
const summary = suppliedSummary && !opaque(suppliedSummary)
|
|
81
|
+
? SessionState.computeSafeTaskSummary(suppliedSummary) : '';
|
|
82
|
+
// Audit promptSummary deliberately stores a privacy marker. Never
|
|
83
|
+
// recover it, render it, or turn it into an apparent task summary.
|
|
84
|
+
return {
|
|
85
|
+
key: JSON.stringify([record.sessionId, record.turnId || record.id]),
|
|
86
|
+
projectId, accountScopeId, sessionId: record.sessionId, turnId: record.turnId,
|
|
87
|
+
createdAt: text(record.createdAt), paths, hasWrites, status, summary,
|
|
88
|
+
operation: paths.length === 1 ? text(files[0]?.type) : '',
|
|
89
|
+
canJump: Boolean(run && live.get(record.sessionId)?.has(record.turnId))
|
|
90
|
+
};
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
return { project };
|
|
94
|
+
});
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
const MIN_NATIVE_VERSION = '1.0.0';
|
|
13
13
|
const MIN_COMPATIBLE_NATIVE_VERSION = '1.0.0';
|
|
14
14
|
const MIN_COMPATIBLE_EXTENSION_VERSION = '1.0.0';
|
|
15
|
-
const BUILD_TARGET_VERSION = '2.
|
|
15
|
+
const BUILD_TARGET_VERSION = '2.5.0';
|
|
16
16
|
const DEFAULT_CHROME_EXTENSION_ID = 'illdpneeeopfffmiepaejglgmhpmdhdc';
|
|
17
17
|
const REQUIRED_CAPABILITIES = Object.freeze([
|
|
18
18
|
'bridgePing',
|
|
@@ -163,7 +163,49 @@
|
|
|
163
163
|
return result;
|
|
164
164
|
}
|
|
165
165
|
|
|
166
|
+
function buildPostWriteCompileSummary({ result = null, logResult = null, error = null } = {}) {
|
|
167
|
+
const logAvailable = logResult?.ok === true;
|
|
168
|
+
const errors = logAvailable && Array.isArray(logResult.errors)
|
|
169
|
+
? logResult.errors.slice(0, 5).map(formatCompileDiagnosticForSummary)
|
|
170
|
+
: [];
|
|
171
|
+
const warnings = logAvailable && Array.isArray(logResult.warnings)
|
|
172
|
+
? logResult.warnings.slice(0, 5).map(formatCompileDiagnosticForSummary)
|
|
173
|
+
: [];
|
|
174
|
+
if (error) {
|
|
175
|
+
return {
|
|
176
|
+
status: 'failed',
|
|
177
|
+
reason: error?.message || 'Post-write compile failed.',
|
|
178
|
+
errors,
|
|
179
|
+
warnings,
|
|
180
|
+
logAvailable
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
if (!result?.ok) {
|
|
184
|
+
return {
|
|
185
|
+
status: 'failed',
|
|
186
|
+
reason: result?.reason || 'Post-write compile did not succeed.',
|
|
187
|
+
errors,
|
|
188
|
+
warnings,
|
|
189
|
+
logAvailable
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
return {
|
|
193
|
+
status: result.compile?.status || 'triggered',
|
|
194
|
+
reason: result.reason || '',
|
|
195
|
+
errors,
|
|
196
|
+
warnings,
|
|
197
|
+
logAvailable
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
function formatCompileDiagnosticForSummary(value) {
|
|
202
|
+
const text = String(value || '').replace(/\s+/g, ' ').trim();
|
|
203
|
+
return text.length > 180 ? `${text.slice(0, 179)}...` : text;
|
|
204
|
+
}
|
|
205
|
+
|
|
166
206
|
return {
|
|
207
|
+
buildPostWriteCompileSummary,
|
|
208
|
+
formatCompileDiagnosticForSummary,
|
|
167
209
|
COMPILABLE_EXTENSIONS,
|
|
168
210
|
MAX_LOG_BYTES,
|
|
169
211
|
extractErrorBlocks,
|
|
@@ -158,6 +158,26 @@
|
|
|
158
158
|
fallbackUserMessage: 'Create/delete/rename/move did not appear in the file tree as expected.',
|
|
159
159
|
fallbackNextAction: 'Inspect the file tree and retry if needed.'
|
|
160
160
|
},
|
|
161
|
+
source_zip_unavailable: {
|
|
162
|
+
stage: 'preflight', severity: 'blocked', defaultRetryable: true,
|
|
163
|
+
fallbackUserMessage: 'The project could not be checked before uploading this file.',
|
|
164
|
+
fallbackNextAction: 'Retry sync; only missing files will be uploaded.'
|
|
165
|
+
},
|
|
166
|
+
file_upload_unconfirmed: {
|
|
167
|
+
stage: 'verify', severity: 'warning', defaultRetryable: true,
|
|
168
|
+
fallbackUserMessage: 'The file was submitted, but its saved content is not yet confirmed.',
|
|
169
|
+
fallbackNextAction: 'Check the file before retrying; matching content will not be uploaded twice.'
|
|
170
|
+
},
|
|
171
|
+
subagent_unfinished_output: {
|
|
172
|
+
stage: 'preflight', severity: 'blocked', defaultRetryable: false,
|
|
173
|
+
fallbackUserMessage: 'A subagent stopped before finishing this file; the main agent must review and adopt it.',
|
|
174
|
+
fallbackNextAction: 'Have the main agent complete and adopt the pending file.'
|
|
175
|
+
},
|
|
176
|
+
subagent_unauthorized_edit: {
|
|
177
|
+
stage: 'preflight', severity: 'blocked', defaultRetryable: false,
|
|
178
|
+
fallbackUserMessage: 'A file changed outside the subagent ownership boundary and was not synced.',
|
|
179
|
+
fallbackNextAction: 'Review the ownership violation; it cannot be cleared through output adoption.'
|
|
180
|
+
},
|
|
161
181
|
partial_write_needs_review: {
|
|
162
182
|
stage: 'verify', severity: 'warning', defaultRetryable: false,
|
|
163
183
|
fallbackUserMessage: 'Some operations wrote, some were skipped.',
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
try {
|
|
113
113
|
const url = new URL(sender?.tab?.url || '');
|
|
114
114
|
allowed = sender.id === chromeApi.runtime.id && url.protocol === 'https:'
|
|
115
|
-
&& ['overleaf.com', 'www.overleaf.com'].includes(url.hostname)
|
|
115
|
+
&& ['overleaf.com', 'www.overleaf.com', 'cn.overleaf.com'].includes(url.hostname)
|
|
116
116
|
&& /^\/project(?:\/|$)/.test(url.pathname);
|
|
117
117
|
} catch (_error) { /* reject unrelated contexts */ }
|
|
118
118
|
if (!allowed) {
|
|
@@ -150,10 +150,10 @@
|
|
|
150
150
|
undoTrackedTitle: 'Reject this run\'s Overleaf tracked changes?',
|
|
151
151
|
undoNativeTitle: 'Undo this run\'s Overleaf writes?',
|
|
152
152
|
undoTrackedMessage: 'This will use Overleaf Reject to undo {files}.\n\nIt will not rewrite files with text patches. If the extension cannot verify the matching tracked changes, it will stop and let you handle them in Overleaf review tools.',
|
|
153
|
-
|
|
153
|
+
undoNativeMessage: 'Undo this run\'s changes in {files}.',
|
|
154
154
|
undoTrackedConfirm: 'Reject this run',
|
|
155
155
|
undoTrackedStarted: 'Starting rejection of this run\'s Overleaf tracked changes',
|
|
156
|
-
|
|
156
|
+
undoNativeStarted: 'Undoing this run\'s changes',
|
|
157
157
|
undoTrackedResult: 'Undo result: rejected {applied} tracked change(s), skipped {skipped}',
|
|
158
158
|
undoNativeResult: 'Undo result: undone {applied} file(s), skipped {skipped}',
|
|
159
159
|
undoSwitchedEditing: 'Switched to Editing for undo and left Editing active afterward.',
|
|
@@ -272,6 +272,24 @@
|
|
|
272
272
|
personalizationHelp: 'Style, terminology, and LaTeX conventions Codex should follow in this project.',
|
|
273
273
|
settingsSaved: 'Saved',
|
|
274
274
|
appearanceTitle: 'Appearance',
|
|
275
|
+
settingsWorkbenchTitle: 'Settings',
|
|
276
|
+
settingsWorkbenchSubtitle: 'Preferences, project rules, and local tools.',
|
|
277
|
+
settingsWorkbenchGeneral: 'General & appearance',
|
|
278
|
+
settingsWorkbenchModels: 'Models & connections',
|
|
279
|
+
settingsWorkbenchContext: 'Project context',
|
|
280
|
+
settingsWorkbenchInstructions: 'Instructions & skills',
|
|
281
|
+
settingsWorkbenchProtection: 'Protection & privacy',
|
|
282
|
+
settingsWorkbenchHistory: 'History & storage',
|
|
283
|
+
settingsWorkbenchAll: 'All settings',
|
|
284
|
+
settingsWorkbenchFilter: 'Filter settings by scope',
|
|
285
|
+
settingsWorkbenchCategories: 'Settings categories',
|
|
286
|
+
settingsWorkbenchProjectFilter: 'Show only settings that apply to this project.',
|
|
287
|
+
settingsWorkbenchOpenProject: 'Open a project to configure its settings.',
|
|
288
|
+
settingsWorkbenchClose: 'Close settings',
|
|
289
|
+
settingsWorkbenchEnableSkills: 'Enable Overleaf skills',
|
|
290
|
+
settingsWorkbenchSkillsHelp: 'Turn off all skills without changing individual selections.',
|
|
291
|
+
settingsWorkbenchSkillsList: 'Available skills',
|
|
292
|
+
settingsWorkbenchProviderOpenFailed: 'Could not open provider settings.',
|
|
275
293
|
themeLabel: 'Theme',
|
|
276
294
|
themeDark: 'Dark',
|
|
277
295
|
themeLight: 'Light',
|
|
@@ -300,22 +318,30 @@
|
|
|
300
318
|
runsTruncatedNote: 'Showing the most recent 20 runs — older runs were trimmed.',
|
|
301
319
|
eventsTruncatedNote: 'Earlier steps of this run were trimmed.',
|
|
302
320
|
newSessionTooltip: 'Start a fresh conversation — the current session\u2019s context will not carry over',
|
|
303
|
-
storageTitle: '
|
|
321
|
+
storageTitle: 'Local data',
|
|
322
|
+
storageSavedData: 'Saved conversations & records',
|
|
304
323
|
softwareUpdatesTitle: 'Software updates',
|
|
305
324
|
softwareUpdatesHelp: 'Automatically checks signed stable releases for the Extension and Native Host.',
|
|
306
325
|
checkForUpdates: 'Check for updates',
|
|
307
326
|
providerSettingsTitle: 'Model providers',
|
|
308
327
|
providerSettingsExperimental: 'Third-party experimental',
|
|
309
|
-
providerSettingsHelp: '
|
|
328
|
+
providerSettingsHelp: 'Manage model API connections.',
|
|
310
329
|
providerSettingsConfigure: 'Configure',
|
|
311
330
|
providerSettingsBuiltin: 'Built-in Codex is active',
|
|
312
331
|
providerSettingsLoading: 'Checking current project provider…',
|
|
313
|
-
storageUsageLoading: '
|
|
314
|
-
storageClearAll: 'Clear
|
|
315
|
-
storageClearAllHelp: '
|
|
332
|
+
storageUsageLoading: 'Loading saved history\u2026',
|
|
333
|
+
storageClearAll: 'Clear local history\u2026',
|
|
334
|
+
storageClearAllHelp: 'Clearing removes local conversations, change records and their undo information for all projects. Overleaf files, project settings and rules stay unchanged.',
|
|
316
335
|
runTurnNavLabel: 'Jump to a turn\u2026',
|
|
317
|
-
historyTitle: '
|
|
318
|
-
historyHelp: '
|
|
336
|
+
historyTitle: 'File changes',
|
|
337
|
+
historyHelp: 'Review file changes from the latest 50 recorded runs and open the matching conversation.',
|
|
338
|
+
historyStatusLabel: 'Change status',
|
|
339
|
+
historyStatusAll: 'All statuses',
|
|
340
|
+
historyStatusPending: 'Pending review',
|
|
341
|
+
historyStatusAccepted: 'Accepted',
|
|
342
|
+
historyStatusUndone: 'Undone',
|
|
343
|
+
historyStatusAttention: 'Needs attention',
|
|
344
|
+
historyStatusWritten: 'Written',
|
|
319
345
|
runSearchPlaceholder: 'Search this session\u2019s runs\u2026',
|
|
320
346
|
undoFileSelectTitle: 'Undo which files?',
|
|
321
347
|
undoFileSelectConfirm: 'Undo selected',
|
|
@@ -335,8 +361,8 @@
|
|
|
335
361
|
speedLabel: 'Speed',
|
|
336
362
|
requireReviewing: 'Track',
|
|
337
363
|
requireReviewingTitle: 'When enabled, Codex checks or switches Overleaf Reviewing/Track Changes before writing. Deletes still require confirmation.',
|
|
338
|
-
autoCompile: '
|
|
339
|
-
autoCompileTitle: '
|
|
364
|
+
autoCompile: 'Auto compile',
|
|
365
|
+
autoCompileTitle: 'Automatically recompile in Overleaf after Codex writes and record the result. Toggling this setting does not compile immediately. Ask mode does not trigger compilation.',
|
|
340
366
|
experimentalOtWarmMirror: 'OT warm mirror',
|
|
341
367
|
experimentalOtWarmMirrorShort: 'OT',
|
|
342
368
|
experimentalOtWarmMirrorTitle: 'Read-only local text warming. File scope and freshness are checked before reuse; normal project reading remains the fallback.',
|
|
@@ -376,7 +402,15 @@
|
|
|
376
402
|
queuedInputPaused: 'Queue paused',
|
|
377
403
|
queuedInputGuiding: 'Sending guidance',
|
|
378
404
|
queuedInputExecuting: 'Running',
|
|
379
|
-
queuedInputGuide: '
|
|
405
|
+
queuedInputGuide: 'Steer now',
|
|
406
|
+
queuedInputUpNext: 'Up next · sends after this run',
|
|
407
|
+
queuedInputUpNextMany: 'Up next · sends in order after this run',
|
|
408
|
+
queuedInputSteering: 'Steering the current turn…',
|
|
409
|
+
queuedInputMore: '{count} more queued',
|
|
410
|
+
queuedInputShowLess: 'Show less',
|
|
411
|
+
queuedInputEdit: 'Edit in the composer',
|
|
412
|
+
queuedInputEditBlocked: 'Send or clear the current draft before editing a queued message.',
|
|
413
|
+
queuedInputGuideHint: 'Steer is available once the current tool step finishes.',
|
|
380
414
|
queuedInputGuideTitle: 'Send this message into the active Codex turn now.',
|
|
381
415
|
queuedInputGuideUnavailable: 'The active turn is not ready for guidance yet.',
|
|
382
416
|
queuedInputGuideFailed: 'Guidance could not be delivered. The message remains queued.',
|
|
@@ -717,10 +751,10 @@
|
|
|
717
751
|
undoTrackedTitle: '拒绝本轮 Overleaf 留痕改动?',
|
|
718
752
|
undoNativeTitle: '撤销本轮 Overleaf 写入?',
|
|
719
753
|
undoTrackedMessage: '将通过 Overleaf 自己的 Reject/拒绝功能撤销 {files}。\n\n这不会用文本补丁重写文件;如果插件不能确认对应留痕记录,会停止并让你在 Overleaf 审阅面板手动处理。',
|
|
720
|
-
|
|
754
|
+
undoNativeMessage: '撤销本轮在 {files} 中的改动。',
|
|
721
755
|
undoTrackedConfirm: '拒绝本轮改动',
|
|
722
756
|
undoTrackedStarted: '开始拒绝本轮 Overleaf 留痕改动',
|
|
723
|
-
|
|
757
|
+
undoNativeStarted: '正在撤销本轮改动',
|
|
724
758
|
undoTrackedResult: '撤销结果:已拒绝 {applied} 条留痕,跳过 {skipped} 条',
|
|
725
759
|
undoNativeResult: '撤销结果:已撤销 {applied} 个文件,跳过 {skipped} 项',
|
|
726
760
|
undoSwitchedEditing: '撤销时已切到 Editing;撤销后保持 Editing。',
|
|
@@ -839,6 +873,24 @@
|
|
|
839
873
|
personalizationHelp: 'Codex 在本项目中应遵循的风格、术语和 LaTeX 约定。',
|
|
840
874
|
settingsSaved: '已保存',
|
|
841
875
|
appearanceTitle: '外观',
|
|
876
|
+
settingsWorkbenchTitle: '设置',
|
|
877
|
+
settingsWorkbenchSubtitle: '偏好设置、项目规则与本地工具。',
|
|
878
|
+
settingsWorkbenchGeneral: '常规与外观',
|
|
879
|
+
settingsWorkbenchModels: '模型与连接',
|
|
880
|
+
settingsWorkbenchContext: '项目上下文',
|
|
881
|
+
settingsWorkbenchInstructions: '指令与技能',
|
|
882
|
+
settingsWorkbenchProtection: '文件保护与隐私',
|
|
883
|
+
settingsWorkbenchHistory: '历史与存储',
|
|
884
|
+
settingsWorkbenchAll: '全部设置',
|
|
885
|
+
settingsWorkbenchFilter: '按作用范围筛选设置',
|
|
886
|
+
settingsWorkbenchCategories: '设置分类',
|
|
887
|
+
settingsWorkbenchProjectFilter: '仅显示作用于当前项目的设置。',
|
|
888
|
+
settingsWorkbenchOpenProject: '进入项目后可配置项目设置。',
|
|
889
|
+
settingsWorkbenchClose: '关闭设置',
|
|
890
|
+
settingsWorkbenchEnableSkills: '启用 Overleaf 技能',
|
|
891
|
+
settingsWorkbenchSkillsHelp: '关闭总开关时,各技能的单独选择会保留。',
|
|
892
|
+
settingsWorkbenchSkillsList: '可用技能',
|
|
893
|
+
settingsWorkbenchProviderOpenFailed: '无法打开模型服务设置。',
|
|
842
894
|
themeLabel: '主题',
|
|
843
895
|
themeDark: '深色',
|
|
844
896
|
themeLight: '浅色',
|
|
@@ -867,22 +919,30 @@
|
|
|
867
919
|
runsTruncatedNote: '仅显示最近 20 轮——更早的轮次已精简。',
|
|
868
920
|
eventsTruncatedNote: '本轮更早的步骤已精简。',
|
|
869
921
|
newSessionTooltip: '开启全新对话——当前会话的上下文不会带入',
|
|
870
|
-
storageTitle: '
|
|
922
|
+
storageTitle: '本地数据',
|
|
923
|
+
storageSavedData: '已保存的对话与记录',
|
|
871
924
|
softwareUpdatesTitle: '软件更新',
|
|
872
925
|
softwareUpdatesHelp: '自动检查 Extension 与 Native Host 的签名稳定版本。',
|
|
873
926
|
checkForUpdates: '检查更新',
|
|
874
927
|
providerSettingsTitle: '模型服务',
|
|
875
928
|
providerSettingsExperimental: '第三方实验性',
|
|
876
|
-
providerSettingsHelp: '
|
|
929
|
+
providerSettingsHelp: '管理模型 API 连接。',
|
|
877
930
|
providerSettingsConfigure: '配置',
|
|
878
931
|
providerSettingsBuiltin: '当前使用内置 Codex',
|
|
879
932
|
providerSettingsLoading: '正在读取当前项目的模型服务…',
|
|
880
|
-
storageUsageLoading: '
|
|
881
|
-
storageClearAll: '
|
|
882
|
-
storageClearAllHelp: '
|
|
933
|
+
storageUsageLoading: '正在读取已保存的历史…',
|
|
934
|
+
storageClearAll: '清理本地历史…',
|
|
935
|
+
storageClearAllHelp: '清理会移除所有项目的本地对话、修改记录及撤销信息。Overleaf 文件、项目设置与规则保持不变。',
|
|
883
936
|
runTurnNavLabel: '跳到某一轮…',
|
|
884
|
-
historyTitle: '
|
|
885
|
-
historyHelp: '
|
|
937
|
+
historyTitle: '文件修改记录',
|
|
938
|
+
historyHelp: '查看最近 50 轮的文件修改及处理状态,可跳转到对应对话。',
|
|
939
|
+
historyStatusLabel: '修改状态',
|
|
940
|
+
historyStatusAll: '所有状态',
|
|
941
|
+
historyStatusPending: '待接受',
|
|
942
|
+
historyStatusAccepted: '已接受',
|
|
943
|
+
historyStatusUndone: '已撤销',
|
|
944
|
+
historyStatusAttention: '需检查',
|
|
945
|
+
historyStatusWritten: '已写入',
|
|
886
946
|
runSearchPlaceholder: '搜索本会话的轮次…',
|
|
887
947
|
undoFileSelectTitle: '撤销哪些文件?',
|
|
888
948
|
undoFileSelectConfirm: '撤销所选',
|
|
@@ -902,8 +962,8 @@
|
|
|
902
962
|
speedLabel: '速度',
|
|
903
963
|
requireReviewing: '留痕',
|
|
904
964
|
requireReviewingTitle: '开启后,写入前会确认并尝试切到 Overleaf Reviewing/Track Changes;删除仍需确认。',
|
|
905
|
-
autoCompile: '
|
|
906
|
-
autoCompileTitle: 'Codex
|
|
965
|
+
autoCompile: '自动编译',
|
|
966
|
+
autoCompileTitle: 'Codex 写入后自动触发 Overleaf Recompile,并记录编译结果。切换此开关不会立即编译;只问不改时不触发编译。',
|
|
907
967
|
experimentalOtWarmMirror: 'OT 预热镜像',
|
|
908
968
|
experimentalOtWarmMirrorShort: 'OT',
|
|
909
969
|
experimentalOtWarmMirrorTitle: '只读本地文本预热;复用前校验文件范围和新鲜度,常规项目读取作为回退路径。',
|
|
@@ -943,13 +1003,21 @@
|
|
|
943
1003
|
queuedInputPaused: '队列已暂停',
|
|
944
1004
|
queuedInputGuiding: '正在发送引导',
|
|
945
1005
|
queuedInputExecuting: '正在运行',
|
|
946
|
-
queuedInputGuide: '
|
|
1006
|
+
queuedInputGuide: '现在插入',
|
|
1007
|
+
queuedInputUpNext: '下一条 · 本轮结束后发送',
|
|
1008
|
+
queuedInputUpNextMany: '接下来 · 本轮结束后依次发送',
|
|
1009
|
+
queuedInputSteering: '正在插入当前回合…',
|
|
1010
|
+
queuedInputMore: '还有 {count} 条待发送',
|
|
1011
|
+
queuedInputShowLess: '收起',
|
|
1012
|
+
queuedInputEdit: '拉回输入框编辑',
|
|
1013
|
+
queuedInputEditBlocked: '请先发送或清空当前输入框里的内容,再编辑排队消息。',
|
|
1014
|
+
queuedInputGuideHint: '当前工具步骤结束后才能插入。',
|
|
947
1015
|
queuedInputGuideTitle: '立即把这条消息发送到当前 Codex turn。',
|
|
948
1016
|
queuedInputGuideUnavailable: '当前 turn 尚未进入可引导状态。',
|
|
949
1017
|
queuedInputGuideFailed: '引导消息未送达,消息已保留在队列中。',
|
|
950
1018
|
queuedInputGuided: '后续引导已发送到当前 Codex turn。',
|
|
951
1019
|
queuedInputAdded: '后续任务已排队,将在当前任务完整结束后执行。',
|
|
952
|
-
queuedInputResume: '
|
|
1020
|
+
queuedInputResume: '继续',
|
|
953
1021
|
queuedInputRemove: '删除',
|
|
954
1022
|
queuedInputAttachmentsUnsupported: '当前排队消息支持文本和 @context;请先移除二进制附件。',
|
|
955
1023
|
queuedInputError_empty_input: '请先输入后续任务。',
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
'up_to_date',
|
|
14
14
|
'checking',
|
|
15
15
|
'update_available',
|
|
16
|
+
'manual_install_required',
|
|
16
17
|
'downloading',
|
|
17
18
|
'staged',
|
|
18
19
|
'waiting_for_idle',
|
|
@@ -27,7 +28,7 @@
|
|
|
27
28
|
|
|
28
29
|
const PHASE_TIMEOUTS = Object.freeze({
|
|
29
30
|
checking: 60 * 1000,
|
|
30
|
-
downloading:
|
|
31
|
+
downloading: 6 * 60 * 1000,
|
|
31
32
|
applying: 90 * 1000,
|
|
32
33
|
awaiting_health: 2 * 60 * 1000,
|
|
33
34
|
rolling_back: 60 * 1000
|
|
@@ -75,9 +76,11 @@
|
|
|
75
76
|
const TRANSITIONS = Object.freeze({
|
|
76
77
|
idle: Object.freeze(['checking']),
|
|
77
78
|
up_to_date: Object.freeze(['checking', 'idle']),
|
|
78
|
-
checking: Object.freeze(['idle', 'up_to_date', 'update_available', 'failed']),
|
|
79
|
+
checking: Object.freeze(['idle', 'up_to_date', 'update_available', 'manual_install_required', 'failed']),
|
|
80
|
+
// Only a reinstall resolves it; leave by checking again or going idle.
|
|
81
|
+
manual_install_required: Object.freeze(['checking', 'idle', 'update_available', 'failed']),
|
|
79
82
|
update_available: Object.freeze(['checking', 'downloading', 'deferred', 'failed']),
|
|
80
|
-
downloading: Object.freeze(['staged', 'failed']),
|
|
83
|
+
downloading: Object.freeze(['staged', 'failed', 'update_available', 'idle']),
|
|
81
84
|
staged: Object.freeze(['waiting_for_idle', 'applying', 'update_available', 'deferred', 'failed']),
|
|
82
85
|
waiting_for_idle: Object.freeze(['applying', 'update_available', 'deferred', 'failed']),
|
|
83
86
|
applying: Object.freeze(['staged', 'awaiting_health', 'rolling_back', 'failed']),
|
|
@@ -5,21 +5,27 @@
|
|
|
5
5
|
})(typeof window !== 'undefined' ? window : (typeof globalThis !== 'undefined' ? globalThis : this), function () {
|
|
6
6
|
'use strict';
|
|
7
7
|
|
|
8
|
-
var REVISION = '2026-09-
|
|
8
|
+
var REVISION = '2026-09-27-writing-style-references-v33';
|
|
9
9
|
var METHODS = freezeCatalog({
|
|
10
10
|
initializeCapability: entry('bridge.initialize', 'control', 'none', 'default', false, 'none'),
|
|
11
11
|
probe: entry('bridge.probe', 'read', 'none', 'default', false, 'safe'),
|
|
12
12
|
cancelActiveWrite: entry('write.cancel', 'control', 'none', 'default', false, 'idempotent'),
|
|
13
13
|
getProjectSnapshot: entry('snapshot.read', 'read', 'none', 'snapshot', true, 'safe'),
|
|
14
14
|
getProjectFileList: entry('snapshot.list', 'read', 'none', 'file_list', true, 'safe'),
|
|
15
|
+
listReferenceProjects: entry('reference.list', 'read', 'none', 'file_list', false, 'safe'),
|
|
16
|
+
getReferenceProjectSnapshot: entry('reference.read', 'read', 'none', 'snapshot', false, 'safe'),
|
|
17
|
+
cancelReferenceRead: entry('reference.cancel', 'control', 'none', 'default', false, 'idempotent'),
|
|
15
18
|
invalidateProjectSnapshot: entry('snapshot.invalidate', 'cache', 'none', 'default', false, 'idempotent'),
|
|
16
19
|
createCheckpoint: entry('checkpoint.create', 'page_state', 'none', 'default', false, 'no_retry'),
|
|
17
20
|
ensureReviewing: entry('reviewing.enable', 'page_state', 'optional', 'default', true, 'idempotent'),
|
|
18
21
|
ensureEditing: entry('reviewing.disable', 'page_state', 'optional', 'default', true, 'idempotent'),
|
|
19
22
|
applyOperations: entry('document.write', 'document', 'required', 'writeback', true, 'no_retry'),
|
|
23
|
+
getWritebackReceipt: entry('writeback.receipt', 'read', 'required', 'default', true, 'safe'),
|
|
24
|
+
getSelectionContext: entry('editor.selection', 'read', 'required', 'default', true, 'safe'),
|
|
20
25
|
binaryUploadBegin: entry('asset.stage', 'cache', 'required', 'default', false, 'no_retry'),
|
|
21
26
|
binaryUploadAppend: entry('asset.stage', 'cache', 'none', 'writeback', true, 'no_retry'),
|
|
22
27
|
binaryUploadCommit: entry('asset.write', 'document', 'required', 'writeback', true, 'no_retry'),
|
|
28
|
+
binaryUploadStatus: entry('asset.receipt', 'read', 'required', 'default', true, 'safe'),
|
|
23
29
|
binaryUploadAbort: entry('asset.stage', 'cache', 'none', 'default', false, 'idempotent'),
|
|
24
30
|
jumpToPosition: entry('editor.navigate', 'navigation', 'required', 'default', false, 'idempotent'),
|
|
25
31
|
reconcileTrackedChangeCapture: entry('tracked_changes.read', 'read', 'required', 'default', false, 'safe'),
|