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
|
@@ -7,15 +7,32 @@
|
|
|
7
7
|
|
|
8
8
|
function create(deps = {}) {
|
|
9
9
|
const {
|
|
10
|
-
SessionState, getState, setState, sendBackgroundNative, saveState,
|
|
10
|
+
SessionState, getState, setState, getScope, sendBackgroundNative, saveState,
|
|
11
11
|
applyStateToPanel, showPluginToast, tr
|
|
12
12
|
} = deps;
|
|
13
13
|
|
|
14
14
|
async function forkRunFromNode(runId) {
|
|
15
15
|
const previousState = getState();
|
|
16
|
+
const skillPreferences = {
|
|
17
|
+
loadCodexLocalSkills: previousState.loadCodexLocalSkills !== false,
|
|
18
|
+
loadCodexOverleafSkills: previousState.loadCodexOverleafSkills !== false,
|
|
19
|
+
codexLocalSkillEnabled: { ...previousState.codexLocalSkillEnabled }
|
|
20
|
+
};
|
|
16
21
|
const source = findSource(previousState, runId);
|
|
17
22
|
if (!source) return failFork('session_fork_source_missing', tr('forkRunUnavailable'));
|
|
18
|
-
const
|
|
23
|
+
const scope = getScope ? { ...getScope() } : null;
|
|
24
|
+
const requestedActiveId = previousState.activeSessionId;
|
|
25
|
+
// The Native request and copied history must describe the same origin,
|
|
26
|
+
// even when the source session is edited while the request is pending.
|
|
27
|
+
const { session, run, runIndex } = JSON.parse(JSON.stringify(source));
|
|
28
|
+
const sameScope = () => {
|
|
29
|
+
const current = getScope?.();
|
|
30
|
+
return !scope || ['accountScopeId', 'projectId', 'generation'].every(key => current?.[key] === scope[key]);
|
|
31
|
+
};
|
|
32
|
+
const currentSource = () => {
|
|
33
|
+
const current = findSource(getState(), runId);
|
|
34
|
+
return current?.session.id === session.id && current.run.codexTurnId === run.codexTurnId;
|
|
35
|
+
};
|
|
19
36
|
const draftThreadId = run.codexTurnId && run.interruptedDraft?.turnId === run.codexTurnId
|
|
20
37
|
? run.interruptedDraft.threadId : '';
|
|
21
38
|
// Provider switches replace the session thread, not the selected node's origin.
|
|
@@ -25,25 +42,39 @@
|
|
|
25
42
|
}
|
|
26
43
|
let response;
|
|
27
44
|
try {
|
|
45
|
+
const resolveLocalSkills = deps.captureLocalSkillIdsForFork || deps.getEnabledCodexLocalSkillIds;
|
|
46
|
+
const enabledCodexLocalSkillIds = skillPreferences.loadCodexLocalSkills
|
|
47
|
+
? captureLocalSkillIds(await resolveLocalSkills?.(skillPreferences)) : [];
|
|
48
|
+
if (!sameScope() || !currentSource()) return null;
|
|
49
|
+
if (resolveLocalSkills && !Array.isArray(enabledCodexLocalSkillIds)) {
|
|
50
|
+
throw codedError('codex_local_skill_unavailable', tr('forkRunFailed'));
|
|
51
|
+
}
|
|
28
52
|
response = await sendBackgroundNative({
|
|
29
53
|
method: 'codex.thread.fork',
|
|
30
54
|
params: {
|
|
31
55
|
threadId: sourceThreadId,
|
|
32
56
|
lastTurnId: run.codexTurnId,
|
|
33
57
|
speedTier: session.speedTier,
|
|
34
|
-
loadCodexLocalSkills:
|
|
35
|
-
loadCodexOverleafSkills:
|
|
58
|
+
loadCodexLocalSkills: skillPreferences.loadCodexLocalSkills,
|
|
59
|
+
loadCodexOverleafSkills: skillPreferences.loadCodexOverleafSkills,
|
|
60
|
+
enabledCodexLocalSkillIds
|
|
36
61
|
}
|
|
37
62
|
});
|
|
38
63
|
} catch (error) {
|
|
64
|
+
if (!sameScope() || !currentSource()) return null;
|
|
39
65
|
return failFork(error?.code || 'session_fork_failed', error?.message || tr('forkRunFailed'));
|
|
40
66
|
}
|
|
67
|
+
if (!sameScope() || !currentSource()) {
|
|
68
|
+
if (response?.ok && response.result?.threadId) await clearFork(response.result.threadId);
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
41
71
|
if (!response?.ok || !response.result?.threadId) {
|
|
42
72
|
return failFork(response?.error?.code || 'session_fork_failed', response?.error?.message || tr('forkRunFailed'));
|
|
43
73
|
}
|
|
44
74
|
const copiedRuns = session.runs.slice(0, runIndex + 1).map(copyRunSnapshot);
|
|
45
75
|
const titleBase = String(session.title || copiedRuns[0]?.task || tr('newSessionFallback')).trim();
|
|
46
|
-
const
|
|
76
|
+
const mergeBase = getState();
|
|
77
|
+
const forkTitle = buildUniqueForkTitle(mergeBase.sessions, titleBase);
|
|
47
78
|
const forked = SessionState.createSession({
|
|
48
79
|
title: forkTitle,
|
|
49
80
|
titleSource: 'manual',
|
|
@@ -62,27 +93,55 @@
|
|
|
62
93
|
forkedFromSessionId: session.id,
|
|
63
94
|
forkedFromRunId: run.id
|
|
64
95
|
});
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
})
|
|
96
|
+
const activeId = mergeBase.activeSessionId === requestedActiveId
|
|
97
|
+
? forked.id : mergeBase.activeSessionId;
|
|
98
|
+
const installed = SessionState.setActiveSession({
|
|
99
|
+
...mergeBase, sessions: [...(mergeBase.sessions || []), forked]
|
|
100
|
+
}, activeId);
|
|
101
|
+
const installedSnapshot = JSON.stringify(installed);
|
|
102
|
+
const forkSnapshot = JSON.stringify(forked);
|
|
103
|
+
setState(installed);
|
|
70
104
|
try {
|
|
105
|
+
// Keep the visible composer and active-session owner aligned during save.
|
|
106
|
+
applyStateToPanel();
|
|
71
107
|
await saveState();
|
|
72
108
|
} catch (error) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
109
|
+
if (sameScope()) {
|
|
110
|
+
const current = getState();
|
|
111
|
+
const currentFork = current.sessions?.find(item => item.id === forked.id);
|
|
112
|
+
// Never erase work entered into the fork after its optimistic insert.
|
|
113
|
+
if (!currentFork || JSON.stringify(currentFork) === forkSnapshot) {
|
|
114
|
+
if (currentFork) {
|
|
115
|
+
if (current === installed && JSON.stringify(current) === installedSnapshot) {
|
|
116
|
+
setState(mergeBase);
|
|
117
|
+
} else {
|
|
118
|
+
const remaining = current.sessions.filter(item => item.id !== forked.id);
|
|
119
|
+
const fallbackId = remaining.some(item => item.id === mergeBase.activeSessionId)
|
|
120
|
+
? mergeBase.activeSessionId : remaining[remaining.length - 1]?.id;
|
|
121
|
+
setState(SessionState.setActiveSession({ ...current, sessions: remaining },
|
|
122
|
+
current.activeSessionId === forked.id ? fallbackId : current.activeSessionId));
|
|
123
|
+
}
|
|
124
|
+
try { applyStateToPanel(); } catch (_renderError) { /* Preserve the original failure and finish cleanup. */ }
|
|
125
|
+
}
|
|
126
|
+
await clearFork(response.result.threadId, forked.id);
|
|
127
|
+
}
|
|
128
|
+
if (sameScope()) showPluginToast(error.message || tr('forkRunFailed'), { status: 'failed', sticky: true });
|
|
129
|
+
}
|
|
79
130
|
throw error;
|
|
80
131
|
}
|
|
81
|
-
|
|
132
|
+
// Persistence owns its captured scope. A late result cannot render a new
|
|
133
|
+
// view or delete a thread that may already have been saved in the old one.
|
|
134
|
+
if (!sameScope() || !getState().sessions?.some(item => item.id === forked.id)) return null;
|
|
82
135
|
showPluginToast(tr('forkRunDone'), { status: 'completed' });
|
|
83
136
|
return forked;
|
|
84
137
|
}
|
|
85
138
|
|
|
139
|
+
async function clearFork(threadId, sessionId) {
|
|
140
|
+
try {
|
|
141
|
+
await sendBackgroundNative({ method: 'codex.history.clearPlugin', params: { sessionId, threadId } });
|
|
142
|
+
} catch (_error) { /* Best-effort cleanup must not restore a stale view. */ }
|
|
143
|
+
}
|
|
144
|
+
|
|
86
145
|
function failFork(code, message) {
|
|
87
146
|
showPluginToast(message, { status: 'failed', sticky: true });
|
|
88
147
|
throw codedError(code, message);
|
|
@@ -91,6 +150,10 @@
|
|
|
91
150
|
return { forkRunFromNode };
|
|
92
151
|
}
|
|
93
152
|
|
|
153
|
+
function captureLocalSkillIds(value) {
|
|
154
|
+
return Array.isArray(value) ? [...value] : undefined;
|
|
155
|
+
}
|
|
156
|
+
|
|
94
157
|
function buildUniqueForkTitle(sessions = [], sourceTitle = '') {
|
|
95
158
|
const fallback = String(sourceTitle || 'New Session').trim() || 'New Session';
|
|
96
159
|
const baseTitle = fallback
|
|
@@ -201,7 +201,7 @@
|
|
|
201
201
|
}
|
|
202
202
|
});
|
|
203
203
|
if (!response?.ok) {
|
|
204
|
-
showPluginToast(tr('deleteSessionHistoryFailedToast', { message: response?.error?.message || '
|
|
204
|
+
showPluginToast(tr('deleteSessionHistoryFailedToast', { message: response?.error?.message || tr('deleteSessionNativeFailureDetail') }), { status: 'warning', sticky: true });
|
|
205
205
|
} else if (response.result?.skipped) {
|
|
206
206
|
showPluginToast(tr('deleteSessionNoThreadToast'), { status: 'info' });
|
|
207
207
|
} else {
|
|
@@ -85,7 +85,12 @@
|
|
|
85
85
|
record !== rawExistingSessions[index] && !writable.some(item => item.id === record.id)
|
|
86
86
|
);
|
|
87
87
|
if (cleanedExisting.length || writable.length) {
|
|
88
|
-
await StorageDb.putRecords('sessions', [...cleanedExisting, ...writable]
|
|
88
|
+
const written = await StorageDb.putRecords('sessions', [...cleanedExisting, ...writable], {
|
|
89
|
+
reviewRunIds: options.reviewRunIds
|
|
90
|
+
});
|
|
91
|
+
// Check the actual durable result, including a decision already saved
|
|
92
|
+
// from another origin, instead of acknowledging only the proposed view.
|
|
93
|
+
return written.filter(record => writable.some(candidate => candidate.id === record.id));
|
|
89
94
|
}
|
|
90
95
|
return writable;
|
|
91
96
|
}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
(function
|
|
1
|
+
(function (root, factory) {
|
|
2
|
+
if (typeof module === 'object' && module.exports) {
|
|
3
|
+
module.exports = factory(require('./settingsWorkbench'));
|
|
4
|
+
} else {
|
|
5
|
+
root.CodexOverleafModuleRegistry.define('SettingsPanel', ['SettingsWorkbench'], factory);
|
|
6
|
+
}
|
|
7
|
+
})(typeof globalThis !== 'undefined' ? globalThis : this, function settingsPanelFactory(SettingsWorkbench) {
|
|
2
8
|
'use strict';
|
|
3
9
|
|
|
4
10
|
function codexIcon(name) {
|
|
@@ -45,10 +51,16 @@
|
|
|
45
51
|
<div class="codex-project-settings-status" data-project-settings-status></div>
|
|
46
52
|
<div class="codex-project-settings-scope">
|
|
47
53
|
<div class="codex-project-settings-scope-title codex-set-eyebrow" data-i18n="settingsScopeProjectTitle">This project</div>
|
|
54
|
+
<details class="codex-set-group" data-set-group="writing-style" open>
|
|
55
|
+
<summary class="codex-set-group-head">
|
|
56
|
+
<span class="codex-set-group-title">${codexSetIcon('pen')}<span data-writing-style-heading>Writing style</span></span>
|
|
57
|
+
</summary>
|
|
58
|
+
<div class="codex-set-card" data-writing-style-settings></div>
|
|
59
|
+
</details>
|
|
48
60
|
<details class="codex-set-group" data-set-group="personalization" open>
|
|
49
61
|
<summary class="codex-set-group-head">
|
|
50
62
|
<span class="codex-set-group-title">${codexSetIcon('pen')}<span data-i18n="personalizationConfig">Personalization</span></span>
|
|
51
|
-
<span class="codex-set-saved" data-set-saved hidden
|
|
63
|
+
<span class="codex-set-saved" data-set-saved hidden><svg class="codex-glyph" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="m3.5 8 3 3 6-6"/></svg><span data-i18n="settingsSaved">Saved</span></span>
|
|
52
64
|
</summary>
|
|
53
65
|
<div class="codex-set-card">
|
|
54
66
|
<p class="codex-set-row-help" data-i18n="personalizationHelp">Style, terminology, and LaTeX conventions Codex should follow in this project.</p>
|
|
@@ -58,7 +70,7 @@
|
|
|
58
70
|
<details class="codex-set-group" data-set-group="protection" open>
|
|
59
71
|
<summary class="codex-set-group-head">
|
|
60
72
|
<span class="codex-set-group-title">${codexSetIcon('shield')}<span data-i18n="fileProtectionTitle">File protection</span></span>
|
|
61
|
-
<span class="codex-set-saved" data-set-saved hidden
|
|
73
|
+
<span class="codex-set-saved" data-set-saved hidden><svg class="codex-glyph" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="m3.5 8 3 3 6-6"/></svg><span data-i18n="settingsSaved">Saved</span></span>
|
|
62
74
|
</summary>
|
|
63
75
|
<div class="codex-set-card">
|
|
64
76
|
<div class="codex-set-row">
|
|
@@ -78,7 +90,7 @@
|
|
|
78
90
|
<details class="codex-set-group" data-set-group="privacy" open>
|
|
79
91
|
<summary class="codex-set-group-head">
|
|
80
92
|
<span class="codex-set-group-title">${codexSetIcon('lock')}<span data-i18n="privacyTitle">Privacy</span></span>
|
|
81
|
-
<span class="codex-set-saved" data-set-saved hidden
|
|
93
|
+
<span class="codex-set-saved" data-set-saved hidden><svg class="codex-glyph" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="m3.5 8 3 3 6-6"/></svg><span data-i18n="settingsSaved">Saved</span></span>
|
|
82
94
|
</summary>
|
|
83
95
|
<div class="codex-set-card">
|
|
84
96
|
<label class="codex-project-settings-row codex-project-settings-row--switch">
|
|
@@ -96,7 +108,7 @@
|
|
|
96
108
|
<details class="codex-set-group" data-set-group="experimental">
|
|
97
109
|
<summary class="codex-set-group-head">
|
|
98
110
|
<span class="codex-set-group-title">${codexSetIcon('database')}<span data-i18n="otSettingsTitle">Project cache</span></span>
|
|
99
|
-
<span class="codex-set-saved" data-set-saved hidden
|
|
111
|
+
<span class="codex-set-saved" data-set-saved hidden><svg class="codex-glyph" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="m3.5 8 3 3 6-6"/></svg><span data-i18n="settingsSaved">Saved</span></span>
|
|
100
112
|
</summary>
|
|
101
113
|
<div class="codex-set-card">
|
|
102
114
|
<label class="codex-project-settings-row codex-project-settings-row--switch">
|
|
@@ -113,19 +125,37 @@
|
|
|
113
125
|
<div class="codex-project-settings-scope codex-project-settings-scope--global">
|
|
114
126
|
<details class="codex-set-group" data-set-group="history" data-history-card>
|
|
115
127
|
<summary class="codex-set-group-head">
|
|
116
|
-
<span class="codex-set-group-title">${codexSetIcon('history')}<span data-i18n="historyTitle">
|
|
128
|
+
<span class="codex-set-group-title">${codexSetIcon('history')}<span data-i18n="historyTitle">File changes</span><span class="codex-history-count" data-history-count aria-live="polite"></span></span>
|
|
117
129
|
</summary>
|
|
118
130
|
<div class="codex-set-card">
|
|
119
|
-
<p class="codex-set-row-help" data-i18n="historyHelp">
|
|
120
|
-
<
|
|
131
|
+
<p class="codex-set-row-help" data-i18n="historyHelp">Review recent file changes and open the matching conversation.</p>
|
|
132
|
+
<div class="codex-history-toolbar">
|
|
133
|
+
<label class="codex-history-search">
|
|
134
|
+
<span class="codex-history-search-mark" aria-hidden="true"></span>
|
|
135
|
+
<input type="search" class="codex-set-select codex-history-filter" data-history-filter autocomplete="off">
|
|
136
|
+
</label>
|
|
137
|
+
<select class="codex-set-select codex-history-status-filter" data-history-status data-i18n-aria-label="historyStatusLabel">
|
|
138
|
+
<option value="all" data-i18n="historyStatusAll">All statuses</option>
|
|
139
|
+
<option value="pending" data-i18n="historyStatusPending">Pending review</option>
|
|
140
|
+
<option value="accepted" data-i18n="historyStatusAccepted">Accepted</option>
|
|
141
|
+
<option value="undone" data-i18n="historyStatusUndone">Undone</option>
|
|
142
|
+
<option value="attention" data-i18n="historyStatusAttention">Needs attention</option>
|
|
143
|
+
<option value="written" data-i18n="historyStatusWritten">Written</option>
|
|
144
|
+
</select>
|
|
145
|
+
</div>
|
|
121
146
|
<div class="codex-history-list" data-history-list></div>
|
|
147
|
+
<button type="button" class="codex-history-jump codex-history-more" data-history-more hidden></button>
|
|
148
|
+
<label class="codex-history-include" hidden>
|
|
149
|
+
<input type="checkbox" data-history-include-empty>
|
|
150
|
+
<span data-history-include-label></span>
|
|
151
|
+
</label>
|
|
122
152
|
</div>
|
|
123
153
|
</details>
|
|
124
154
|
<div class="codex-project-settings-scope-title codex-set-eyebrow" data-i18n="settingsScopeGlobalTitle">All projects</div>
|
|
125
155
|
<details class="codex-set-group" data-set-group="appearance" open>
|
|
126
156
|
<summary class="codex-set-group-head">
|
|
127
157
|
<span class="codex-set-group-title">${codexSetIcon('appearance')}<span data-i18n="appearanceTitle">Appearance</span></span>
|
|
128
|
-
<span class="codex-set-saved" data-set-saved hidden
|
|
158
|
+
<span class="codex-set-saved" data-set-saved hidden><svg class="codex-glyph" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="m3.5 8 3 3 6-6"/></svg><span data-i18n="settingsSaved">Saved</span></span>
|
|
129
159
|
</summary>
|
|
130
160
|
<div class="codex-set-card">
|
|
131
161
|
<label class="codex-project-settings-row codex-project-settings-row--select">
|
|
@@ -153,7 +183,7 @@
|
|
|
153
183
|
</summary>
|
|
154
184
|
<div class="codex-set-card codex-provider-settings-entry">
|
|
155
185
|
<div class="codex-provider-settings-entry-copy">
|
|
156
|
-
<p class="codex-set-row-help" data-i18n="providerSettingsHelp">
|
|
186
|
+
<p class="codex-set-row-help" data-i18n="providerSettingsHelp">Manage model API connections.</p>
|
|
157
187
|
<p class="codex-provider-settings-summary" data-provider-settings-summary data-tone="loading">${t(instance, 'providerSettingsLoading')}</p>
|
|
158
188
|
</div>
|
|
159
189
|
<button type="button" class="codex-set-btn" data-provider-settings-open data-i18n="providerSettingsConfigure">Configure</button>
|
|
@@ -162,7 +192,7 @@
|
|
|
162
192
|
<details class="codex-set-group" data-set-group="context-loading" open>
|
|
163
193
|
<summary class="codex-set-group-head">
|
|
164
194
|
<span class="codex-set-group-title">${codexSetIcon('database')}<span data-i18n="contextLoadingTitle">Context loading</span></span>
|
|
165
|
-
<span class="codex-set-saved" data-set-saved hidden
|
|
195
|
+
<span class="codex-set-saved" data-set-saved hidden><svg class="codex-glyph" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="m3.5 8 3 3 6-6"/></svg><span data-i18n="settingsSaved">Saved</span></span>
|
|
166
196
|
</summary>
|
|
167
197
|
<div class="codex-set-card">
|
|
168
198
|
<label class="codex-project-settings-row codex-project-settings-row--switch">
|
|
@@ -186,18 +216,24 @@
|
|
|
186
216
|
</details>
|
|
187
217
|
<details class="codex-set-group" data-set-group="storage" data-storage-card>
|
|
188
218
|
<summary class="codex-set-group-head">
|
|
189
|
-
<span class="codex-set-group-title">${codexSetIcon('database')}<span data-i18n="storageTitle">
|
|
219
|
+
<span class="codex-set-group-title">${codexSetIcon('database')}<span data-i18n="storageTitle">Local data</span></span>
|
|
190
220
|
</summary>
|
|
191
221
|
<div class="codex-set-card">
|
|
192
|
-
<
|
|
193
|
-
|
|
194
|
-
|
|
222
|
+
<div class="codex-storage-data-row">
|
|
223
|
+
<div class="codex-storage-data-copy">
|
|
224
|
+
<div class="codex-storage-data-label" data-i18n="storageSavedData">Saved conversations & records</div>
|
|
225
|
+
<p class="codex-set-row-help" data-storage-usage data-i18n="storageUsageLoading">Loading saved history…</p>
|
|
226
|
+
</div>
|
|
227
|
+
<button type="button" class="codex-set-btn codex-set-btn--danger" data-clear-all-history data-i18n="storageClearAll">Clear local history…</button>
|
|
228
|
+
</div>
|
|
229
|
+
<p class="codex-set-row-help codex-storage-clear-help" data-i18n="storageClearAllHelp">Clearing removes local history and undo information. Overleaf project files stay unchanged.</p>
|
|
230
|
+
<p class="codex-storage-estimate" data-storage-estimate aria-live="polite"></p>
|
|
195
231
|
</div>
|
|
196
232
|
</details>
|
|
197
233
|
<details class="codex-set-group" data-set-group="skills" open>
|
|
198
234
|
<summary class="codex-set-group-head">
|
|
199
235
|
<span class="codex-set-group-title">${codexSetIcon('bolt')}<span data-i18n="localSkillsTitle">Skills</span></span>
|
|
200
|
-
<span class="codex-set-saved" data-set-saved hidden
|
|
236
|
+
<span class="codex-set-saved" data-set-saved hidden><svg class="codex-glyph" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="m3.5 8 3 3 6-6"/></svg><span data-i18n="settingsSaved">Saved</span></span>
|
|
201
237
|
</summary>
|
|
202
238
|
<div class="codex-set-card">
|
|
203
239
|
<label class="codex-project-settings-row codex-project-settings-row--switch">
|
|
@@ -206,7 +242,7 @@
|
|
|
206
242
|
</label>
|
|
207
243
|
<p class="codex-set-row-help" data-i18n="loadCodexLocalSkillsHelp">Pull skills from your local Codex installation.</p>
|
|
208
244
|
<button type="button" class="codex-skills-entry" data-skills-entry>
|
|
209
|
-
<span class="codex-skills-entry-label" data-i18n="
|
|
245
|
+
<span class="codex-skills-entry-label" data-i18n="skillsManageEntry">Manage skills</span>
|
|
210
246
|
<span class="codex-skills-entry-summary" data-skills-entry-summary></span>
|
|
211
247
|
<span class="codex-skills-entry-chevron" aria-hidden="true">›</span>
|
|
212
248
|
</button>
|
|
@@ -216,11 +252,11 @@
|
|
|
216
252
|
</section>
|
|
217
253
|
<section class="codex-custom-instructions-panel codex-skills-panel" data-skills-screen>
|
|
218
254
|
<div class="codex-custom-instructions-head">
|
|
219
|
-
<button type="button" data-skills-back title="Back" aria-label="Back">‹</button>
|
|
255
|
+
<button type="button" data-skills-back data-i18n-title="settingsBack" data-i18n-aria-label="settingsBack" title="Back" aria-label="Back">‹</button>
|
|
220
256
|
<div>
|
|
221
|
-
<div class="codex-custom-instructions-title" data-i18n="
|
|
257
|
+
<div class="codex-custom-instructions-title" data-i18n="localSkillsTitle">Skills</div>
|
|
222
258
|
</div>
|
|
223
|
-
<span class="codex-set-saved" data-set-saved hidden
|
|
259
|
+
<span class="codex-set-saved" data-set-saved hidden><svg class="codex-glyph" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="m3.5 8 3 3 6-6"/></svg><span data-i18n="settingsSaved">Saved</span></span>
|
|
224
260
|
</div>
|
|
225
261
|
<div class="codex-set-card">
|
|
226
262
|
<label class="codex-project-settings-row codex-project-settings-row--switch">
|
|
@@ -230,6 +266,9 @@
|
|
|
230
266
|
</div>
|
|
231
267
|
<div class="codex-skills-divider"></div>
|
|
232
268
|
<div class="codex-local-skill-list" data-local-skill-list></div>
|
|
269
|
+
<div class="codex-skills-divider"></div>
|
|
270
|
+
<div class="codex-wb-skills-list-title codex-wb-skills-caption" data-i18n="codexLocalSkillsTitle">Local Codex skills</div>
|
|
271
|
+
<div class="codex-local-skill-list" data-codex-local-skill-list></div>
|
|
233
272
|
</section>
|
|
234
273
|
`;
|
|
235
274
|
|
|
@@ -247,6 +286,8 @@
|
|
|
247
286
|
if (event.target.open) instance.callbacks.onStorageOpen?.();
|
|
248
287
|
});
|
|
249
288
|
container.querySelector('[data-history-filter]')?.addEventListener('input', () => instance.callbacks.onHistoryFilter?.());
|
|
289
|
+
container.querySelector('[data-history-status]')?.addEventListener('change', () => instance.callbacks.onHistoryFilter?.());
|
|
290
|
+
container.querySelector('[data-history-include-empty]')?.addEventListener('change', () => instance.callbacks.onHistoryFilter?.());
|
|
250
291
|
// OT mirror: a single visible switch; legacy storage/DOM keys are retained. The click is
|
|
251
292
|
// intercepted (the runtime's handler preventDefaults, runs the enable
|
|
252
293
|
// confirmation, then sets checked + drives the change flow itself) so the
|
|
@@ -265,8 +306,9 @@
|
|
|
265
306
|
Promise.resolve(instance.callbacks.onInputChange?.(event))
|
|
266
307
|
.then(() => {
|
|
267
308
|
flashSaved(instance, event);
|
|
268
|
-
if (selector === '[data-language-select]'
|
|
269
|
-
instance.callbacks.onStorageOpen?.();
|
|
309
|
+
if (selector === '[data-language-select]') {
|
|
310
|
+
if (container.querySelector('[data-storage-card]')?.open) instance.callbacks.onStorageOpen?.();
|
|
311
|
+
instance.callbacks.onHistoryFilter?.();
|
|
270
312
|
}
|
|
271
313
|
}).catch(() => {});
|
|
272
314
|
});
|
|
@@ -280,12 +322,18 @@
|
|
|
280
322
|
element?.addEventListener?.('input', () => updateGovernanceNotes(instance));
|
|
281
323
|
element?.addEventListener?.('change', () => updateGovernanceNotes(instance));
|
|
282
324
|
}
|
|
283
|
-
|
|
325
|
+
instance.workbench = SettingsWorkbench.mount(instance, { icon: codexIcon });
|
|
284
326
|
|
|
285
327
|
return {
|
|
286
328
|
get container() { return instance.container; },
|
|
287
329
|
show: () => show(instance),
|
|
288
330
|
hide: () => hide(instance),
|
|
331
|
+
openProviderPage: () => {
|
|
332
|
+
const host = instance.workbench?.revealProviders();
|
|
333
|
+
if (host) show(instance);
|
|
334
|
+
return host || null;
|
|
335
|
+
},
|
|
336
|
+
setProviderCloseGuard: guard => instance.workbench?.setProviderCloseGuard(guard),
|
|
289
337
|
loadState: state => loadState(instance, state),
|
|
290
338
|
readState: () => readState(instance),
|
|
291
339
|
setStatus: (text, status) => setStatus(instance, text, status),
|
|
@@ -293,6 +341,7 @@
|
|
|
293
341
|
setSkillsSummary: text => setSkillsSummary(instance, text),
|
|
294
342
|
setProviderSummary: summary => setProviderSummary(instance, summary),
|
|
295
343
|
refreshNotes: () => updateGovernanceNotes(instance),
|
|
344
|
+
refreshLocale: () => instance.workbench?.refresh(),
|
|
296
345
|
destroy: () => destroy(instance),
|
|
297
346
|
_instance: instance
|
|
298
347
|
};
|
|
@@ -310,10 +359,12 @@
|
|
|
310
359
|
button.dataset.active = 'true';
|
|
311
360
|
button.setAttribute('aria-expanded', 'true');
|
|
312
361
|
}
|
|
313
|
-
|
|
362
|
+
if (instance.workbench) instance.workbench.show();
|
|
363
|
+
else root.querySelector('[data-custom-instructions-input]')?.focus?.();
|
|
314
364
|
}
|
|
315
365
|
|
|
316
366
|
function refreshSettingsScope(instance, root) {
|
|
367
|
+
if (instance.workbench) { instance.workbench.refresh(); return; }
|
|
317
368
|
const accountScope = instance.container?.closest?.('[data-settings-scope]')?.dataset?.settingsScope === 'account';
|
|
318
369
|
const prefix = accountScope ? 'recentProjects_settings' : 'projectSettings';
|
|
319
370
|
for (const [selector, suffix] of [['[data-settings-title]', 'Title'], ['[data-settings-subtitle]', 'Subtitle']]) {
|
|
@@ -337,6 +388,7 @@
|
|
|
337
388
|
button.setAttribute('aria-expanded', 'false');
|
|
338
389
|
}
|
|
339
390
|
clearStatus(instance);
|
|
391
|
+
instance.workbench?.hide();
|
|
340
392
|
}
|
|
341
393
|
|
|
342
394
|
function isVisible(target) {
|
|
@@ -386,6 +438,7 @@
|
|
|
386
438
|
setValue(scope, '[data-theme-select]', state.theme || 'dark');
|
|
387
439
|
setValue(scope, '[data-language-select]', state.language || 'en');
|
|
388
440
|
}
|
|
441
|
+
instance.workbench?.refresh();
|
|
389
442
|
}
|
|
390
443
|
|
|
391
444
|
function readState(target) {
|
|
@@ -413,7 +466,7 @@
|
|
|
413
466
|
|
|
414
467
|
function setStatus(target, text, status = 'info') {
|
|
415
468
|
const instance = target?._instance || target;
|
|
416
|
-
const element =
|
|
469
|
+
const element = instance?.container?.querySelector('[data-project-settings-status]');
|
|
417
470
|
if (!element) {
|
|
418
471
|
return;
|
|
419
472
|
}
|
|
@@ -423,7 +476,7 @@
|
|
|
423
476
|
|
|
424
477
|
function clearStatus(target) {
|
|
425
478
|
const instance = target?._instance || target;
|
|
426
|
-
const element =
|
|
479
|
+
const element = instance?.container?.querySelector('[data-project-settings-status]');
|
|
427
480
|
if (!element) {
|
|
428
481
|
return;
|
|
429
482
|
}
|
|
@@ -440,11 +493,11 @@
|
|
|
440
493
|
element.textContent = text || '';
|
|
441
494
|
}
|
|
442
495
|
|
|
443
|
-
// Flash the "
|
|
496
|
+
// Flash the check-mark "Saved" indicator after a field auto-saves, then fade it out.
|
|
444
497
|
// The fields persist immediately on change, so this is purely a confirmation
|
|
445
498
|
// cue — it never gates the save itself.
|
|
446
499
|
function flashSaved(instance, event) {
|
|
447
|
-
// Card-level feedback: the
|
|
500
|
+
// Card-level feedback: the check appears on the card that was actually
|
|
448
501
|
// changed (falls back to the screen's first badge, e.g. the skills page).
|
|
449
502
|
const origin = event?.target?.closest?.('details.codex-set-group, section');
|
|
450
503
|
const badge = origin?.querySelector?.('[data-set-saved]')
|
|
@@ -530,31 +583,6 @@
|
|
|
530
583
|
element.dataset.tone = typeof value === 'object' && value.tone ? value.tone : 'ok';
|
|
531
584
|
}
|
|
532
585
|
|
|
533
|
-
// Collapse memory: card open/closed state persists per browser profile.
|
|
534
|
-
const GROUP_STORE_KEY = 'codexOverleafSettingsGroups';
|
|
535
|
-
|
|
536
|
-
function setupGroupPersistence(instance) {
|
|
537
|
-
let stored = {};
|
|
538
|
-
try {
|
|
539
|
-
stored = JSON.parse(globalThis.localStorage?.getItem(GROUP_STORE_KEY) || '{}') || {};
|
|
540
|
-
} catch (_error) {
|
|
541
|
-
stored = {};
|
|
542
|
-
}
|
|
543
|
-
for (const details of instance.container.querySelectorAll('details[data-set-group]')) {
|
|
544
|
-
const key = details.dataset.setGroup;
|
|
545
|
-
if (key in stored) {
|
|
546
|
-
details.open = stored[key] !== false;
|
|
547
|
-
}
|
|
548
|
-
details.addEventListener('toggle', () => {
|
|
549
|
-
try {
|
|
550
|
-
const current = JSON.parse(globalThis.localStorage?.getItem(GROUP_STORE_KEY) || '{}') || {};
|
|
551
|
-
current[key] = details.open;
|
|
552
|
-
globalThis.localStorage?.setItem(GROUP_STORE_KEY, JSON.stringify(current));
|
|
553
|
-
} catch (_error) { /* private mode — collapse state just doesn't persist */ }
|
|
554
|
-
});
|
|
555
|
-
}
|
|
556
|
-
}
|
|
557
|
-
|
|
558
586
|
function getRoot(instance) {
|
|
559
587
|
return instance?.container?.querySelector('[data-project-settings-panel]') || null;
|
|
560
588
|
}
|
|
@@ -582,6 +610,7 @@
|
|
|
582
610
|
}
|
|
583
611
|
|
|
584
612
|
function destroy(instance) {
|
|
613
|
+
instance.workbench?.destroy();
|
|
585
614
|
if (instance._savedFlashTimer) {
|
|
586
615
|
clearTimeout(instance._savedFlashTimer);
|
|
587
616
|
instance._savedFlashTimer = null;
|
|
@@ -589,7 +618,7 @@
|
|
|
589
618
|
instance.container.textContent = '';
|
|
590
619
|
}
|
|
591
620
|
|
|
592
|
-
|
|
621
|
+
return {
|
|
593
622
|
create,
|
|
594
623
|
loadState,
|
|
595
624
|
readState,
|
|
@@ -601,4 +630,4 @@
|
|
|
601
630
|
setSkillsSummary,
|
|
602
631
|
setProviderSummary
|
|
603
632
|
};
|
|
604
|
-
})
|
|
633
|
+
});
|