codex-overleaf-link 2.4.1 → 2.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +275 -305
- package/README.zh-CN.md +290 -320
- package/extension/bootstrap/background.js +99 -19
- package/extension/bootstrap/manifest.template.json +9 -4
- package/extension/bootstrap/popup.html +11 -16
- package/extension/bootstrap/popupFallback.js +55 -0
- package/extension/bootstrap/update.js +25 -2
- package/extension/bootstrap/updateStatus.js +1 -0
- package/extension/runtime-manifest.json +3 -1
- package/extension/src/background.js +234 -56
- package/extension/src/backgroundBootstrapMigration.js +181 -0
- package/extension/src/backgroundSharedSessions.js +440 -0
- package/extension/src/backgroundUpdateCoordinator.js +541 -381
- package/extension/src/backgroundUpdateSafety.js +173 -0
- package/extension/src/content/activeTurnControl.js +16 -2
- package/extension/src/content/applyResultFormatters.js +46 -73
- package/extension/src/content/assetTransferBroker.js +244 -12
- package/extension/src/content/changeHistoryView.js +175 -0
- package/extension/src/content/composerAttachments.js +117 -67
- package/extension/src/content/composerPanel.js +41 -8
- package/extension/src/content/contentRuntime.js +1084 -1099
- package/extension/src/content/diagnosticsController.js +122 -97
- package/extension/src/content/diagnosticsExport.js +236 -0
- package/extension/src/content/diagnosticsPanel.js +78 -19
- package/extension/src/content/diffReviewPanel.js +8 -5
- package/extension/src/content/directoryCleanupRecovery.js +54 -0
- package/extension/src/content/generated/content.bundle.js +14680 -3606
- package/extension/src/content/generated/content.bundle.meta.json +30 -3
- package/extension/src/content/globalPreferencesController.js +1 -1
- package/extension/src/content/legacyGlobalRegistry.js +25 -1
- package/extension/src/content/localSkillsPanel.js +141 -16
- package/extension/src/content/markdownDomRenderer.js +9 -4
- package/extension/src/content/markdownText.js +5 -6
- package/extension/src/content/modelPicker.js +8 -5
- package/extension/src/content/nativeCompatibilityController.js +45 -20
- package/extension/src/content/otWarmMirror.js +4 -5
- package/extension/src/content/otWarmMirrorController.js +17 -20
- package/extension/src/content/pageBridgeClient.js +33 -5
- package/extension/src/content/panelMaintenance.js +87 -132
- package/extension/src/content/panelRenderer.js +10 -0
- package/extension/src/content/pendingInputView.js +109 -76
- package/extension/src/content/projectProviderSelection.js +13 -4
- package/extension/src/content/projectSessionCleanup.js +109 -62
- package/extension/src/content/projectSettingsCoordinator.js +39 -2
- package/extension/src/content/providerSettingsCoordinator.js +63 -14
- package/extension/src/content/providerSettingsDialog.js +724 -113
- package/extension/src/content/recentProjects.js +21 -6
- package/extension/src/content/runActivitySummary.js +665 -0
- package/extension/src/content/runCompletionMeta.js +344 -0
- package/extension/src/content/runController.js +40 -15
- package/extension/src/content/runFailureNotice.js +34 -12
- package/extension/src/content/runGuidanceController.js +76 -30
- package/extension/src/content/runGuidanceView.js +59 -10
- package/extension/src/content/runPresence.js +306 -0
- package/extension/src/content/runQueueScheduler.js +150 -43
- package/extension/src/content/runRecoveryActions.js +146 -0
- package/extension/src/content/runResultActions.js +11 -8
- package/extension/src/content/runReviewController.js +574 -0
- package/extension/src/content/runScrollLayout.js +21 -2
- package/extension/src/content/runTimelineView.js +315 -290
- package/extension/src/content/scopedPersistencePanelState.js +51 -6
- package/extension/src/content/selectionContextView.js +300 -0
- package/extension/src/content/sensitivePreflight.js +140 -0
- package/extension/src/content/sessionForkController.js +80 -17
- package/extension/src/content/sessionManager.js +1 -1
- package/extension/src/content/sessionPersistence.js +6 -1
- package/extension/src/content/settingsPanel.js +84 -55
- package/extension/src/content/settingsWorkbench.js +379 -0
- package/extension/src/content/sharedSessionViewSync.js +109 -0
- package/extension/src/content/subagentActivityView.js +195 -0
- package/extension/src/content/trackedChangeCaptureController.js +7 -3
- package/extension/src/content/updateIdle.js +4 -1
- package/extension/src/content/updateNotice.js +179 -56
- package/extension/src/content/updateSafetyReceiver.js +58 -0
- package/extension/src/content/writebackController.js +308 -2
- package/extension/src/content/writebackOrchestrator.js +213 -199
- package/extension/src/content/writebackPlan.js +231 -0
- package/extension/src/content/writebackRecovery.js +122 -0
- package/extension/src/content/writingStyleSettings.js +600 -0
- package/extension/src/content/writtenChangesView.js +152 -0
- package/extension/src/page/binaryAssetUploader.js +223 -23
- package/extension/src/page/fileMover.js +256 -0
- package/extension/src/page/overleafProjectSnapshot.js +1 -0
- package/extension/src/page/ownedDirectoryCleanup.js +94 -0
- package/extension/src/page/referenceProjects.js +149 -0
- package/extension/src/page/reviewContext.js +113 -0
- package/extension/src/page/saveState.js +20 -6
- package/extension/src/page/snapshotRouter.js +124 -48
- package/extension/src/page/textCoordinates.js +102 -0
- package/extension/src/page/textFileCreator.js +442 -71
- package/extension/src/page/trackedChangeCapture.js +53 -57
- package/extension/src/page/trackedChangeOwnership.js +216 -0
- package/extension/src/page/trackedChangeReplay.js +184 -0
- package/extension/src/page/trackedChangesLifecycle.js +343 -339
- package/extension/src/page/treeOperations.js +33 -12
- package/extension/src/page/updateSafetyProbe.js +41 -0
- package/extension/src/page/writebackReceiptJournal.js +114 -0
- package/extension/src/page/writebackRouter.js +242 -201
- package/extension/src/pageBridge.js +73 -102
- package/extension/src/popup.js +261 -65
- package/extension/src/shared/agentTranscript.js +41 -4
- package/extension/src/shared/auditRecords.js +73 -0
- package/extension/src/shared/changeHistoryModel.js +94 -0
- package/extension/src/shared/compatibility.js +22 -6
- package/extension/src/shared/compileAdapter.js +101 -37
- package/extension/src/shared/composerAttachmentDraft.js +151 -0
- package/extension/src/shared/directoryCleanupProof.js +43 -0
- package/extension/src/shared/failureReasons.js +329 -3
- package/extension/src/shared/globalPreferences.js +31 -14
- package/extension/src/shared/governanceRules.js +4 -37
- package/extension/src/shared/i18n.js +389 -25
- package/extension/src/shared/managedUpdateProjection.js +8 -5
- package/extension/src/shared/nativeRequestIdentity.js +1 -0
- package/extension/src/shared/pageRpcContract.js +9 -2
- package/extension/src/shared/projectFiles.js +21 -44
- package/extension/src/shared/providerProfiles.js +114 -3
- 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/runInputQueue.js +48 -5
- package/extension/src/shared/scopedPersistenceBrowserAdapter.js +6 -3
- package/extension/src/shared/selectionContext.js +37 -0
- package/extension/src/shared/sessionState.js +166 -30
- package/extension/src/shared/settlementFacts.js +10 -2
- package/extension/src/shared/sharedSessionBridge.js +311 -0
- package/extension/src/shared/sharedSessionTransfer.js +140 -0
- package/extension/src/shared/staleGuard.js +118 -13
- package/extension/src/shared/storageDb.js +77 -78
- package/extension/src/shared/storageMigration.js +74 -111
- package/extension/src/shared/storageRunActions.js +211 -22
- package/extension/src/shared/storageValuePruning.js +40 -0
- package/extension/src/shared/subagentActivityModel.js +174 -0
- package/extension/src/shared/undoOperations.js +216 -6
- package/extension/src/shared/updateConsent.js +42 -11
- package/extension/src/shared/updateRuntimeIdentity.js +1 -1
- package/extension/src/shared/writebackIntent.js +78 -0
- package/extension/src/shared/writebackOperationEvidence.js +4 -15
- package/extension/src/shared/writebackSettlement.js +67 -48
- package/extension/src/shared/writingStyle.js +33 -0
- package/extension/styles/panel.css +1987 -385
- package/extension/styles/popup.css +110 -0
- package/native-host/src/anthropicBridgeRequest.js +6 -3
- package/native-host/src/anthropicBridgeResponse.js +6 -2
- package/native-host/src/anthropicMessagesBridge.js +24 -16
- package/native-host/src/bootstrapMigration.js +296 -0
- package/native-host/src/bootstrapMigrationContract.js +101 -0
- package/native-host/src/bootstrapUpdate.js +233 -0
- package/native-host/src/bootstrapUpdateWatchdog.js +44 -0
- package/native-host/src/chatBridgeResponse.js +10 -0
- package/native-host/src/chatCompletionsBridge.js +21 -15
- package/native-host/src/codexConfigPaths.js +106 -0
- package/native-host/src/codexHome.js +66 -73
- package/native-host/src/codexHomeScope.js +124 -0
- package/native-host/src/codexInheritedAuth.js +90 -0
- package/native-host/src/codexLocalSkills.js +301 -0
- package/native-host/src/codexModelRecovery.js +107 -0
- package/native-host/src/codexPromptAssembly.js +33 -12
- package/native-host/src/codexProviderLaunch.js +3 -3
- package/native-host/src/codexProviderTest.js +24 -26
- package/native-host/src/codexRuntimeIdentity.js +1 -0
- package/native-host/src/codexSessionRunner.js +211 -318
- package/native-host/src/codexSessionTiming.js +21 -8
- package/native-host/src/codexSkillIsolation.js +170 -0
- package/native-host/src/codexThreadFork.js +19 -3
- package/native-host/src/index.js +19 -7
- package/native-host/src/managedInstall.js +115 -39
- package/native-host/src/managedInstallRecovery.js +140 -0
- package/native-host/src/managedRuntimeEvidence.js +57 -0
- package/native-host/src/mirrorWorkspace.js +92 -22
- package/native-host/src/nativeDoctor.js +15 -0
- package/native-host/src/nativeEnvironment.js +70 -0
- package/native-host/src/nativeHelperLifecycle.js +21 -0
- package/native-host/src/nativeHostRegistration.js +33 -0
- package/native-host/src/nativeQuotas.js +15 -8
- package/native-host/src/nativeRunLifecycle.js +71 -0
- package/native-host/src/overleafWorkspaceRules.js +16 -0
- package/native-host/src/processStopBarrier.js +115 -0
- package/native-host/src/projectPathPlatform.js +30 -0
- package/native-host/src/providerHttp.js +80 -0
- package/native-host/src/providerModelCatalog.js +4 -3
- package/native-host/src/providerProfile.js +17 -3
- package/native-host/src/providerReasoning.js +10 -11
- package/native-host/src/providerRuntime.js +1 -0
- package/native-host/src/providerStore.js +76 -14
- package/native-host/src/releaseTransport.js +14 -5
- package/native-host/src/responsesPassthroughBridge.js +266 -52
- package/native-host/src/runtimeInstaller.js +21 -1
- package/native-host/src/selectionScope.js +86 -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/subagentAdmission.js +26 -0
- package/native-host/src/subagentBroker.js +176 -159
- package/native-host/src/subagentTelemetry.js +325 -0
- package/native-host/src/subagentWorkspace.js +103 -0
- package/native-host/src/subagentWorkspacePath.js +34 -0
- package/native-host/src/taskRunnerRuntime.js +130 -57
- package/native-host/src/tomlStatements.js +140 -0
- package/native-host/src/turnAttachments.js +113 -0
- package/native-host/src/updateManager.js +406 -38
- 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 +475 -0
- package/native-host/src/writingStyleStore.js +73 -0
- package/package.json +1 -1
- package/scripts/install-managed.mjs +1 -0
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
const tx = typeof options.tx === 'function' ? options.tx : (en) => en;
|
|
7
7
|
const tr = typeof options.tr === 'function' ? options.tr : (key) => key;
|
|
8
8
|
const appendPlainLog = typeof options.appendPlainLog === 'function' ? options.appendPlainLog : () => {};
|
|
9
|
+
const onChange = typeof options.onChange === 'function' ? options.onChange : () => {};
|
|
9
10
|
const limits = options.limits || {};
|
|
10
11
|
const maxAttachments = Number(limits.maxAttachments) || 8;
|
|
11
12
|
const maxAttachmentBytes = Number(limits.maxAttachmentBytes) || 12 * 1024 * 1024;
|
|
@@ -15,6 +16,8 @@
|
|
|
15
16
|
let attachments = [];
|
|
16
17
|
const pendingAttachmentKeys = new Set();
|
|
17
18
|
let pendingAttachmentBytes = 0;
|
|
19
|
+
let attachmentGeneration = 0;
|
|
20
|
+
let attachmentRevision = 0;
|
|
18
21
|
|
|
19
22
|
function handlePaste(event) {
|
|
20
23
|
const files = collectFilesFromDataTransfer(event.clipboardData);
|
|
@@ -59,51 +62,68 @@
|
|
|
59
62
|
}
|
|
60
63
|
|
|
61
64
|
async function addFiles(files) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
65
|
+
const generation = attachmentGeneration;
|
|
66
|
+
try {
|
|
67
|
+
for (const file of Array.from(files || [])) {
|
|
68
|
+
if (generation !== attachmentGeneration) return;
|
|
69
|
+
const dedupeKey = buildAttachmentDedupeKey(file);
|
|
70
|
+
if (isDuplicateAttachmentFile(dedupeKey)) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (attachments.length + pendingAttachmentKeys.size >= maxAttachments) {
|
|
74
|
+
appendPlainLog(tx(
|
|
75
|
+
`Attachment limit reached (${maxAttachments}).`,
|
|
76
|
+
`附件数量已达上限(${maxAttachments} 个)。`
|
|
77
|
+
));
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
validateAttachmentFile(file);
|
|
81
|
+
const fileSize = Number(file.size) || 0;
|
|
82
|
+
if (!canReserveAttachmentBytes(fileSize)) {
|
|
83
|
+
appendPlainLog(tx(
|
|
84
|
+
`Attachment total limit reached (${formatFileSize(maxAttachmentTotalBytes)}). Remove attachments or use smaller files.`,
|
|
85
|
+
`附件总大小已达上限(${formatFileSize(maxAttachmentTotalBytes)})。请移除部分附件或使用更小的文件。`
|
|
86
|
+
));
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
attachmentRevision += 1;
|
|
90
|
+
pendingAttachmentKeys.add(dedupeKey);
|
|
91
|
+
pendingAttachmentBytes += fileSize;
|
|
92
|
+
try {
|
|
93
|
+
const dataUrl = await readFileAsDataUrl(file, tx);
|
|
94
|
+
if (generation !== attachmentGeneration) return;
|
|
95
|
+
const preview = await buildAttachmentPreviewData(file, dataUrl);
|
|
96
|
+
if (generation !== attachmentGeneration) return;
|
|
97
|
+
const attachment = {
|
|
98
|
+
id: `${Date.now()}-${Math.random().toString(36).slice(2)}`,
|
|
99
|
+
name: normalizeAttachmentName(file.name),
|
|
100
|
+
mimeType: String(file.type || ''),
|
|
101
|
+
size: Number(file.size) || 0,
|
|
102
|
+
kind: preview.kind,
|
|
103
|
+
previewDataUrl: preview.previewDataUrl,
|
|
104
|
+
contentBase64: extractBase64FromDataUrl(dataUrl),
|
|
105
|
+
dedupeKey
|
|
106
|
+
};
|
|
107
|
+
if (!attachments.some(existing => buildAttachmentDedupeKey(existing) === dedupeKey)) {
|
|
108
|
+
attachments.push(attachment);
|
|
109
|
+
attachmentRevision += 1;
|
|
110
|
+
onChange();
|
|
111
|
+
}
|
|
112
|
+
} catch (error) {
|
|
113
|
+
if (generation !== attachmentGeneration) return;
|
|
114
|
+
throw error;
|
|
115
|
+
} finally {
|
|
116
|
+
// Cleared work no longer owns reservations in the current composer.
|
|
117
|
+
if (generation === attachmentGeneration) {
|
|
118
|
+
pendingAttachmentBytes = Math.max(0, pendingAttachmentBytes - fileSize);
|
|
119
|
+
pendingAttachmentKeys.delete(dedupeKey);
|
|
120
|
+
}
|
|
100
121
|
}
|
|
101
|
-
} finally {
|
|
102
|
-
pendingAttachmentBytes = Math.max(0, pendingAttachmentBytes - fileSize);
|
|
103
|
-
pendingAttachmentKeys.delete(dedupeKey);
|
|
104
122
|
}
|
|
123
|
+
} finally {
|
|
124
|
+
// A partial batch may have accepted files before validation or reading failed.
|
|
125
|
+
if (generation === attachmentGeneration) renderComposerAttachments();
|
|
105
126
|
}
|
|
106
|
-
renderComposerAttachments();
|
|
107
127
|
}
|
|
108
128
|
|
|
109
129
|
function getAttachmentsForRun() {
|
|
@@ -144,15 +164,21 @@
|
|
|
144
164
|
});
|
|
145
165
|
}
|
|
146
166
|
|
|
147
|
-
function clear() {
|
|
167
|
+
function clear(options = {}) {
|
|
168
|
+
attachmentGeneration += 1;
|
|
169
|
+
attachmentRevision += 1;
|
|
148
170
|
attachments = [];
|
|
149
171
|
pendingAttachmentKeys.clear();
|
|
172
|
+
pendingAttachmentBytes = 0;
|
|
150
173
|
renderComposerAttachments();
|
|
174
|
+
if (options.notify !== false) onChange();
|
|
151
175
|
}
|
|
152
176
|
|
|
153
177
|
function removeAttachment(id) {
|
|
178
|
+
const previousLength = attachments.length;
|
|
154
179
|
attachments = attachments.filter(attachment => attachment.id !== id);
|
|
155
180
|
renderComposerAttachments();
|
|
181
|
+
if (attachments.length !== previousLength) { attachmentRevision += 1; onChange(); }
|
|
156
182
|
}
|
|
157
183
|
|
|
158
184
|
function isDuplicateAttachmentFile(dedupeKey) {
|
|
@@ -260,14 +286,36 @@
|
|
|
260
286
|
if (!usable.length) {
|
|
261
287
|
return 0;
|
|
262
288
|
}
|
|
289
|
+
attachmentRevision += 1;
|
|
263
290
|
attachments = usable.map(item => ({ ...item }));
|
|
264
291
|
renderComposerAttachments();
|
|
265
292
|
return attachments.length;
|
|
266
293
|
}
|
|
267
294
|
|
|
295
|
+
// Only a just-rejected local-skill submission uses this in-memory recovery.
|
|
296
|
+
// It keeps the normal composer limits, without durable-draft truncation.
|
|
297
|
+
function restoreSubmittedAttachments(value, expectedRevision) {
|
|
298
|
+
if (expectedRevision !== attachmentRevision || attachments.length || pendingAttachmentBytes || pendingAttachmentKeys.size) return false;
|
|
299
|
+
if (!Array.isArray(value) || value.length > maxAttachments) return false;
|
|
300
|
+
let total = 0;
|
|
301
|
+
for (const item of value) {
|
|
302
|
+
const size = Number(item?.size);
|
|
303
|
+
if (!item?.name || typeof item.contentBase64 !== 'string' || !Number.isFinite(size) || size < 0 || size > maxAttachmentBytes) return false;
|
|
304
|
+
total += size;
|
|
305
|
+
}
|
|
306
|
+
if (total > maxAttachmentTotalBytes) return false;
|
|
307
|
+
attachments = value.map((item, index) => ({ ...item, id: `restored-${Date.now()}-${index}`, dedupeKey: buildAttachmentDedupeKey(item) }));
|
|
308
|
+
attachmentRevision += 1;
|
|
309
|
+
renderComposerAttachments();
|
|
310
|
+
onChange();
|
|
311
|
+
return true;
|
|
312
|
+
}
|
|
313
|
+
|
|
268
314
|
return {
|
|
269
315
|
serializePersistableAttachments,
|
|
270
316
|
restorePersistedAttachments,
|
|
317
|
+
restoreSubmittedAttachments,
|
|
318
|
+
getRevision: () => attachmentRevision,
|
|
271
319
|
handlePaste,
|
|
272
320
|
handleDragOver,
|
|
273
321
|
handleDragLeave,
|
|
@@ -361,54 +409,56 @@
|
|
|
361
409
|
}
|
|
362
410
|
|
|
363
411
|
function renderAttachmentPreviewList(attachments = [], container, options = {}) {
|
|
364
|
-
if (!container)
|
|
365
|
-
return;
|
|
366
|
-
}
|
|
412
|
+
if (!container) return;
|
|
367
413
|
container.replaceChildren();
|
|
368
414
|
const items = Array.isArray(attachments) ? attachments : [];
|
|
369
415
|
container.hidden = items.length === 0;
|
|
370
416
|
for (const attachment of items) {
|
|
371
417
|
const isImage = attachment.kind === 'image' && attachment.previewDataUrl;
|
|
372
|
-
const
|
|
418
|
+
const label = attachment.name || (options.tx ? options.tx('Attachment', '附件') : 'Attachment');
|
|
419
|
+
const card = document.createElement('div');
|
|
373
420
|
card.className = 'codex-attachment-preview-card';
|
|
374
421
|
card.dataset.kind = isImage ? 'image' : 'file';
|
|
422
|
+
card.title = label + ' · ' + formatFileSize(attachment.size);
|
|
375
423
|
if (isImage) {
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
424
|
+
const preview = document.createElement('button');
|
|
425
|
+
preview.type = 'button';
|
|
426
|
+
preview.className = 'codex-attachment-preview-open';
|
|
427
|
+
preview.setAttribute('aria-label', options.tx ? options.tx('Preview ' + label, '预览 ' + label) : 'Preview ' + label);
|
|
428
|
+
preview.addEventListener('click', () => showAttachmentPreviewDialog(attachment, options));
|
|
381
429
|
const image = document.createElement('img');
|
|
382
430
|
image.src = attachment.previewDataUrl;
|
|
383
|
-
image.alt =
|
|
384
|
-
|
|
431
|
+
image.alt = label;
|
|
432
|
+
preview.append(image);
|
|
433
|
+
card.append(preview);
|
|
385
434
|
} else {
|
|
386
435
|
const icon = document.createElement('span');
|
|
387
436
|
icon.className = 'codex-attachment-file-icon';
|
|
388
437
|
icon.textContent = getAttachmentIconLabel(attachment);
|
|
438
|
+
icon.setAttribute('aria-hidden', 'true');
|
|
389
439
|
card.append(icon);
|
|
390
440
|
}
|
|
391
|
-
|
|
392
441
|
const meta = document.createElement('span');
|
|
393
442
|
meta.className = 'codex-attachment-preview-meta';
|
|
394
443
|
const name = document.createElement('span');
|
|
395
444
|
name.className = 'codex-attachment-preview-name';
|
|
396
|
-
name.textContent =
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
445
|
+
name.textContent = label;
|
|
446
|
+
meta.append(name);
|
|
447
|
+
if (!isImage) {
|
|
448
|
+
const size = document.createElement('span');
|
|
449
|
+
size.className = 'codex-attachment-preview-size';
|
|
450
|
+
size.textContent = formatFileSize(attachment.size);
|
|
451
|
+
meta.append(size);
|
|
452
|
+
}
|
|
401
453
|
card.append(meta);
|
|
402
|
-
|
|
403
454
|
if (options.removable) {
|
|
404
455
|
const remove = document.createElement('button');
|
|
405
456
|
remove.type = 'button';
|
|
406
457
|
remove.className = 'codex-attachment-preview-remove';
|
|
407
458
|
remove.textContent = '×';
|
|
408
|
-
|
|
409
|
-
remove.
|
|
410
|
-
|
|
411
|
-
: `Remove ${attachment.name}`);
|
|
459
|
+
const removeLabel = options.tx ? options.tx('Remove ' + label, '移除 ' + label) : 'Remove ' + label;
|
|
460
|
+
remove.title = removeLabel;
|
|
461
|
+
remove.setAttribute('aria-label', removeLabel);
|
|
412
462
|
remove.addEventListener('click', event => {
|
|
413
463
|
event.preventDefault();
|
|
414
464
|
event.stopPropagation();
|
|
@@ -494,13 +544,13 @@
|
|
|
494
544
|
/\.(?:png|jpe?g|gif|webp|bmp|svg)$/i.test(String(attachment.name || ''));
|
|
495
545
|
}
|
|
496
546
|
|
|
497
|
-
function readFileAsDataUrl(file) {
|
|
547
|
+
function readFileAsDataUrl(file, tx = en => en) {
|
|
498
548
|
return new Promise((resolve, reject) => {
|
|
499
549
|
const reader = new FileReader();
|
|
500
550
|
reader.onload = () => {
|
|
501
551
|
resolve(String(reader.result || ''));
|
|
502
552
|
};
|
|
503
|
-
reader.onerror = () => reject(
|
|
553
|
+
reader.onerror = () => reject(new Error(tx('Could not read selected file.', '无法读取所选文件。'), { cause: reader.error }));
|
|
504
554
|
reader.readAsDataURL(file);
|
|
505
555
|
});
|
|
506
556
|
}
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
<div class="codex-pending-inputs" data-pending-inputs hidden></div>
|
|
19
19
|
<form class="codex-composer" data-composer-form>
|
|
20
20
|
<div class="codex-attachment-strip codex-attachment-preview-list" data-attachment-strip hidden></div>
|
|
21
|
+
<div class="codex-composer-selection" data-composer-selection hidden></div>
|
|
21
22
|
<div class="codex-composer-skill-context" data-composer-skill-context hidden>
|
|
22
23
|
<span class="codex-composer-skill-icon" aria-hidden="true">◇</span>
|
|
23
24
|
<span data-composer-skill-label></span>
|
|
@@ -35,17 +36,31 @@
|
|
|
35
36
|
<option value="ask">Ask</option>
|
|
36
37
|
<option value="auto">Auto</option>
|
|
37
38
|
</select>
|
|
39
|
+
<div class="codex-write-preferences">
|
|
40
|
+
<label class="codex-review-toggle" title="When enabled, Codex checks or switches Overleaf Reviewing/Track Changes before writing. Deletes still require confirmation.">
|
|
41
|
+
<input type="checkbox" data-require-reviewing>
|
|
42
|
+
<svg class="codex-composer-option-icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
|
|
43
|
+
<path d="m9 11 8-8 4 4-8 8M9 11l4 4-3 3H6v-4l3-3ZM3 21h7"></path>
|
|
44
|
+
</svg>
|
|
45
|
+
<span class="codex-review-label" data-i18n="requireReviewing">Track</span>
|
|
46
|
+
<svg class="codex-composer-option-check" viewBox="0 0 16 16" aria-hidden="true" focusable="false">
|
|
47
|
+
<path d="m3.5 8 3 3 6-6"></path>
|
|
48
|
+
</svg>
|
|
49
|
+
</label>
|
|
50
|
+
<label class="codex-recompile-toggle" title="Automatically recompile in Overleaf after Codex writes and record the result. Toggling this setting does not compile immediately. Ask mode does not trigger compilation.">
|
|
51
|
+
<input type="checkbox" data-auto-recompile>
|
|
52
|
+
<svg class="codex-composer-option-icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
|
|
53
|
+
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8ZM14 2v6h6m-11 7 2 2 4-4"></path>
|
|
54
|
+
</svg>
|
|
55
|
+
<span class="codex-recompile-label" data-i18n="autoCompile">Auto compile</span>
|
|
56
|
+
<svg class="codex-composer-option-check" viewBox="0 0 16 16" aria-hidden="true" focusable="false">
|
|
57
|
+
<path d="m3.5 8 3 3 6-6"></path>
|
|
58
|
+
</svg>
|
|
59
|
+
</label>
|
|
60
|
+
</div>
|
|
38
61
|
</div>
|
|
39
62
|
<div class="codex-composer-toolbar">
|
|
40
63
|
<button type="button" data-add-context title="Add @ context" aria-label="Add @ context" aria-expanded="false">+</button>
|
|
41
|
-
<label class="codex-review-toggle" title="When enabled, Codex checks or switches Overleaf Reviewing/Track Changes before writing. Deletes still require confirmation.">
|
|
42
|
-
<input type="checkbox" data-require-reviewing>
|
|
43
|
-
<span class="codex-review-label" data-i18n="requireReviewing">Track</span>
|
|
44
|
-
</label>
|
|
45
|
-
<label class="codex-recompile-toggle" title="After Codex writes, click Overleaf Recompile and record the compile result for this task. Ask mode will not trigger it.">
|
|
46
|
-
<input type="checkbox" data-auto-recompile>
|
|
47
|
-
<span class="codex-recompile-label" data-i18n="autoCompile">Compile</span>
|
|
48
|
-
</label>
|
|
49
64
|
<div class="codex-model-config" data-model-config>
|
|
50
65
|
<button type="button" class="codex-model-config-button" data-model-config-toggle aria-haspopup="menu" aria-expanded="false">
|
|
51
66
|
<span class="codex-model-speed-indicator" data-speed-indicator hidden aria-hidden="true">
|
|
@@ -117,6 +132,7 @@
|
|
|
117
132
|
`;
|
|
118
133
|
|
|
119
134
|
bindEvents(instance);
|
|
135
|
+
bindMenuLayout(instance);
|
|
120
136
|
|
|
121
137
|
return {
|
|
122
138
|
setRunning: running => setRunning(instance, running),
|
|
@@ -178,6 +194,22 @@
|
|
|
178
194
|
instance.listeners.push({ target, type, listener });
|
|
179
195
|
}
|
|
180
196
|
|
|
197
|
+
function bindMenuLayout(instance) {
|
|
198
|
+
const view = instance.container.ownerDocument?.defaultView || window;
|
|
199
|
+
const update = () => instance.callbacks.onMenuLayoutChange?.();
|
|
200
|
+
bind(instance, view, 'resize', update);
|
|
201
|
+
bind(instance, view.visualViewport, 'resize', update);
|
|
202
|
+
bind(instance, view.visualViewport, 'scroll', update);
|
|
203
|
+
const form = instance.container.querySelector('[data-composer-form]');
|
|
204
|
+
if (form && typeof view.ResizeObserver === 'function') {
|
|
205
|
+
instance.menuResizeObserver = new view.ResizeObserver(update);
|
|
206
|
+
instance.menuResizeObserver.observe(form);
|
|
207
|
+
instance.menuResizeObserver.observe(instance.container);
|
|
208
|
+
const panel = instance.container.closest?.('#codex-overleaf-panel');
|
|
209
|
+
if (panel && panel !== instance.container) instance.menuResizeObserver.observe(panel);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
181
213
|
function setRunning(target, running) {
|
|
182
214
|
const instance = target?._instance || target;
|
|
183
215
|
const runButton = instance?.container?.querySelector('[data-run]');
|
|
@@ -261,6 +293,7 @@
|
|
|
261
293
|
}
|
|
262
294
|
|
|
263
295
|
function destroy(instance) {
|
|
296
|
+
instance.menuResizeObserver?.disconnect();
|
|
264
297
|
for (const { target, type, listener } of instance.listeners.splice(0)) {
|
|
265
298
|
target.removeEventListener?.(type, listener);
|
|
266
299
|
}
|