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
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
(function initSubagentActivityView(root, factory) {
|
|
2
|
+
root.CodexOverleafModuleRegistry.define('SubagentActivityView', ['SubagentActivityModel', 'RunActivityModel'], factory);
|
|
3
|
+
})(typeof globalThis !== 'undefined' ? globalThis : window, function subagentActivityViewFactory(Agents, Activity) {
|
|
4
|
+
'use strict';
|
|
5
|
+
function create(deps) {
|
|
6
|
+
const { tx, getPanel, plain, make, icon, formatElapsed, renderBlocks } = deps;
|
|
7
|
+
let viewer = null;
|
|
8
|
+
function statusLabel(status) {
|
|
9
|
+
return ({ pending: tx('Starting', '启动中'), running: tx('Running', '运行中'),
|
|
10
|
+
completed: tx('Completed', '已完成'), failed: tx('Failed', '失败'),
|
|
11
|
+
cancelled: tx('Stopped', '已停止'), unknown: tx('Status unconfirmed', '状态未确认') })[status] || '';
|
|
12
|
+
}
|
|
13
|
+
function latest(agent) {
|
|
14
|
+
const blocks = Activity.project({ status: agent.status, events: agent.events || [] }).blocks;
|
|
15
|
+
const last = blocks.at(-1);
|
|
16
|
+
const item = last?.kind === 'exploreGroup' ? last.items.at(-1) : last;
|
|
17
|
+
return plain(item?.meta?.target || item?.meta?.command || item?.event?.title || agent.task).slice(0, 180);
|
|
18
|
+
}
|
|
19
|
+
function elapsed(agent, run) {
|
|
20
|
+
const duration = Agents.elapsedMs(agent, run, Date.now());
|
|
21
|
+
return duration === null ? '' : formatElapsed(duration);
|
|
22
|
+
}
|
|
23
|
+
function close() {
|
|
24
|
+
if (!viewer) return;
|
|
25
|
+
const previous = viewer; viewer = null;
|
|
26
|
+
previous.shell.remove();
|
|
27
|
+
for (const [node, inert] of previous.inert) if (node.isConnected) node.inert = inert;
|
|
28
|
+
if (previous.log?.isConnected) previous.log.scrollTop = previous.parentScroll;
|
|
29
|
+
if (previous.trigger?.isConnected) previous.trigger.focus({ preventScroll: true });
|
|
30
|
+
}
|
|
31
|
+
function open(card, key, trigger) {
|
|
32
|
+
const agent = card.run.subagents?.find(item => item.key === key);
|
|
33
|
+
const panel = getPanel();
|
|
34
|
+
if (!agent || !panel) return;
|
|
35
|
+
if (viewer?.card.id === card.id) {
|
|
36
|
+
viewer.scrolls.set(viewer.key, viewer.body.scrollTop);
|
|
37
|
+
viewer.key = key; viewer.rows.clear(); viewer.events.replaceChildren(); renderViewer(card); return;
|
|
38
|
+
}
|
|
39
|
+
close();
|
|
40
|
+
const shell = make('section', 'codex-subagent-view');
|
|
41
|
+
shell.setAttribute('role', 'region');
|
|
42
|
+
shell.setAttribute('aria-label', tx('Subagent conversation', '子代理对话'));
|
|
43
|
+
const header = make('header', 'codex-subagent-view-head');
|
|
44
|
+
const back = make('button', 'codex-subagent-back');
|
|
45
|
+
back.type = 'button'; back.textContent = tx('Back to main task', '返回主任务');
|
|
46
|
+
back.addEventListener('click', close);
|
|
47
|
+
const readonly = make('span', 'codex-subagent-readonly'); readonly.textContent = tx('Read only', '只读');
|
|
48
|
+
header.append(back, readonly);
|
|
49
|
+
const parent = make('div', 'codex-subagent-parent');
|
|
50
|
+
const parentLabel = make('span', 'codex-subagent-parent-label');
|
|
51
|
+
const parentCount = make('span', 'codex-subagent-parent-count');
|
|
52
|
+
parent.append(parentLabel, parentCount);
|
|
53
|
+
const siblings = make('nav', 'codex-subagent-siblings'); siblings.setAttribute('aria-label', tx('Subagents', '子代理'));
|
|
54
|
+
const body = make('div', 'codex-subagent-body');
|
|
55
|
+
const title = make('h3', 'codex-subagent-title');
|
|
56
|
+
const meta = make('div', 'codex-subagent-meta');
|
|
57
|
+
const assignment = make('details', 'codex-subagent-assignment');
|
|
58
|
+
const assignmentLabel = make('summary', ''); assignmentLabel.textContent = tx('Assigned task', '派遣任务');
|
|
59
|
+
const prompt = make('p', ''); assignment.append(assignmentLabel, prompt);
|
|
60
|
+
const events = make('div', 'run-workflow-list');
|
|
61
|
+
events.dataset.expanded = 'true';
|
|
62
|
+
const empty = make('p', 'codex-subagent-empty');
|
|
63
|
+
const limit = make('p', 'codex-subagent-history-note');
|
|
64
|
+
const bottom = make('button', 'codex-subagent-latest'); bottom.type = 'button';
|
|
65
|
+
bottom.textContent = tx('Latest activity', '最新活动'); bottom.hidden = true;
|
|
66
|
+
bottom.addEventListener('click', () => { body.scrollTop = body.scrollHeight; });
|
|
67
|
+
body.append(title, meta, assignment, events, empty, limit);
|
|
68
|
+
const footer = make('footer', 'codex-subagent-footer');
|
|
69
|
+
footer.textContent = tx('Continue the conversation in the main task.', '后续对话在主任务中继续。');
|
|
70
|
+
shell.append(header, parent, siblings, body, bottom, footer);
|
|
71
|
+
const log = panel.querySelector('[data-log]');
|
|
72
|
+
const inert = Array.from(panel.children).map(node => [node, node.inert]);
|
|
73
|
+
for (const [node] of inert) node.inert = true;
|
|
74
|
+
panel.append(shell);
|
|
75
|
+
viewer = { shell, card, key, trigger, log, parentScroll: log?.scrollTop || 0, inert,
|
|
76
|
+
title, meta, assignment, prompt, parentLabel, parentCount, siblings, body, events, empty, limit, bottom,
|
|
77
|
+
rows: new Map(), siblingRows: new Map(), scrolls: new Map(), renderedKey: '' };
|
|
78
|
+
body.addEventListener('scroll', () => {
|
|
79
|
+
if (viewer?.shell === shell) bottom.hidden = body.scrollHeight - body.scrollTop - body.clientHeight < 70;
|
|
80
|
+
}, { passive: true });
|
|
81
|
+
shell.addEventListener('keydown', event => { if (event.key === 'Escape') { event.stopPropagation(); close(); } });
|
|
82
|
+
renderViewer(card); back.focus({ preventScroll: true });
|
|
83
|
+
}
|
|
84
|
+
function mount(card) {
|
|
85
|
+
const el = make('section', 'run-subagents');
|
|
86
|
+
const heading = make('div', 'run-subagents-heading');
|
|
87
|
+
const label = make('span', ''); label.textContent = tx('Subagents', '子代理');
|
|
88
|
+
const count = make('span', 'run-subagents-count'); count.setAttribute('aria-live', 'polite');
|
|
89
|
+
heading.append(icon('agent'), label, count);
|
|
90
|
+
const rows = make('div', 'run-subagents-rows'); el.append(heading, rows);
|
|
91
|
+
card.events.before(el);
|
|
92
|
+
card.subagentGroup = { el, count, rows, cache: new Map() };
|
|
93
|
+
}
|
|
94
|
+
function update(card) {
|
|
95
|
+
if (!card.subagentGroup) mount(card);
|
|
96
|
+
const agents = card.run.subagents || [], group = card.subagentGroup;
|
|
97
|
+
group.el.hidden = agents.length === 0;
|
|
98
|
+
const running = agents.filter(agent => ['pending', 'running'].includes(Agents.effectiveStatus(agent, card.run))).length;
|
|
99
|
+
const completed = agents.filter(agent => Agents.effectiveStatus(agent, card.run) === 'completed').length;
|
|
100
|
+
const failed = agents.filter(agent => Agents.effectiveStatus(agent, card.run) === 'failed').length;
|
|
101
|
+
group.count.textContent = [
|
|
102
|
+
running ? tx(running + ' active', running + ' 进行中') : '',
|
|
103
|
+
completed ? tx(completed + ' completed', completed + ' 已完成') : '',
|
|
104
|
+
failed ? tx(failed + ' failed', failed + ' 失败') : ''
|
|
105
|
+
].filter(Boolean).join(' · ') || tx(agents.length + ' recorded', agents.length + ' 项记录');
|
|
106
|
+
const keep = new Set();
|
|
107
|
+
for (const agent of agents) {
|
|
108
|
+
keep.add(agent.key);
|
|
109
|
+
let row = group.cache.get(agent.key);
|
|
110
|
+
if (!row) {
|
|
111
|
+
const el = make('button', 'run-subagent-row'); el.type = 'button';
|
|
112
|
+
const mark = icon('agent'), copy = make('span', 'run-subagent-copy');
|
|
113
|
+
const name = make('span', 'run-subagent-name'), activity = make('span', 'run-subagent-activity');
|
|
114
|
+
copy.append(name, activity);
|
|
115
|
+
const tail = make('span', 'run-subagent-tail'), status = make('span', ''), time = make('span', 'run-subagent-time');
|
|
116
|
+
tail.append(status, time);
|
|
117
|
+
el.append(mark, copy, tail);
|
|
118
|
+
el.addEventListener('click', () => open(card, agent.key, el));
|
|
119
|
+
row = { el, name, activity, status, time }; group.cache.set(agent.key, row); group.rows.append(el);
|
|
120
|
+
}
|
|
121
|
+
const status = Agents.effectiveStatus(agent, card.run);
|
|
122
|
+
row.el.dataset.state = status;
|
|
123
|
+
row.name.textContent = plain(agent.title || agent.jobId || agent.threadId);
|
|
124
|
+
row.activity.textContent = latest(agent) || statusLabel(status);
|
|
125
|
+
row.activity.title = row.activity.textContent;
|
|
126
|
+
row.status.textContent = statusLabel(status); row.time.textContent = elapsed(agent, card.run);
|
|
127
|
+
row.el.setAttribute('aria-label', row.name.textContent + ', ' + statusLabel(status) + ', ' + tx('Open conversation', '查看子对话'));
|
|
128
|
+
}
|
|
129
|
+
for (const [key, row] of group.cache) if (!keep.has(key)) { row.el.remove(); group.cache.delete(key); }
|
|
130
|
+
if (viewer?.card.id === card.id) renderViewer(card);
|
|
131
|
+
}
|
|
132
|
+
function renderViewer(card) {
|
|
133
|
+
try {
|
|
134
|
+
renderViewerContent(card);
|
|
135
|
+
if (viewer) viewer.renderError = false;
|
|
136
|
+
} catch (error) {
|
|
137
|
+
// A read-only child view must not interrupt the parent event or settlement path.
|
|
138
|
+
if (!viewer) return;
|
|
139
|
+
if (!viewer.renderError) console.warn('[codex-overleaf] Child conversation render failed:', plain(error?.message));
|
|
140
|
+
viewer.renderError = true;
|
|
141
|
+
viewer.rows.clear(); viewer.events.replaceChildren();
|
|
142
|
+
viewer.empty.hidden = false;
|
|
143
|
+
viewer.empty.textContent = tx('Unable to display this subagent conversation. Return to the main task and reopen it.',
|
|
144
|
+
'暂时无法显示子代理对话,请返回主任务后重新打开。');
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function renderViewerContent(card) {
|
|
148
|
+
if (!viewer || !viewer.shell.isConnected) { if (viewer) close(); return; }
|
|
149
|
+
const agent = card.run.subagents?.find(item => item.key === viewer.key);
|
|
150
|
+
if (!agent) { close(); return; }
|
|
151
|
+
viewer.card = card;
|
|
152
|
+
const switched = viewer.renderedKey !== agent.key;
|
|
153
|
+
const follow = !switched && viewer.body.scrollHeight - viewer.body.scrollTop - viewer.body.clientHeight < 70;
|
|
154
|
+
const childStatus = Agents.effectiveStatus(agent, card.run);
|
|
155
|
+
viewer.title.textContent = plain(agent.title || agent.jobId || agent.threadId);
|
|
156
|
+
viewer.meta.textContent = [statusLabel(childStatus), elapsed(agent, card.run), agent.model, agent.reasoningEffort].filter(Boolean).join(' · ');
|
|
157
|
+
viewer.prompt.textContent = plain(agent.task);
|
|
158
|
+
viewer.assignment.hidden = !viewer.prompt.textContent;
|
|
159
|
+
const parent = Activity.project(card.run), last = parent.blocks.at(-1);
|
|
160
|
+
const lastItem = last?.kind === 'exploreGroup' ? last.items.at(-1) : last;
|
|
161
|
+
const parentWork = plain(lastItem?.meta?.target || lastItem?.meta?.command || lastItem?.event?.title).slice(0, 150);
|
|
162
|
+
viewer.parentLabel.textContent = tx('Main agent · ', '主 agent · ') + (card.run.status === 'running'
|
|
163
|
+
? parentWork || tx('Working', '处理中') : tx('Run ended', '本轮已结束'));
|
|
164
|
+
const running = (card.run.subagents || []).filter(item => ['pending', 'running'].includes(Agents.effectiveStatus(item, card.run))).length;
|
|
165
|
+
viewer.parentCount.textContent = tx(running + ' subagents active', running + ' 个子任务进行中');
|
|
166
|
+
for (const sibling of card.run.subagents || []) {
|
|
167
|
+
let button = viewer.siblingRows.get(sibling.key);
|
|
168
|
+
if (!button) {
|
|
169
|
+
button = make('button', 'codex-subagent-sibling'); button.type = 'button';
|
|
170
|
+
button.addEventListener('click', () => open(viewer.card, sibling.key, viewer.trigger));
|
|
171
|
+
viewer.siblingRows.set(sibling.key, button); viewer.siblings.append(button);
|
|
172
|
+
}
|
|
173
|
+
button.textContent = plain(sibling.title || sibling.jobId || sibling.threadId);
|
|
174
|
+
button.setAttribute('aria-pressed', String(sibling.key === agent.key));
|
|
175
|
+
button.title = statusLabel(Agents.effectiveStatus(sibling, card.run));
|
|
176
|
+
}
|
|
177
|
+
const childRun = { id: card.id + ':' + agent.key, status: ['pending', 'running'].includes(childStatus) ? 'running' : childStatus,
|
|
178
|
+
events: agent.events || [], mode: 'ask' };
|
|
179
|
+
const result = Activity.project(childRun);
|
|
180
|
+
const childCard = { id: childRun.id, projection: result };
|
|
181
|
+
renderBlocks(viewer.events, result.blocks, viewer.rows, childCard, childRun);
|
|
182
|
+
viewer.empty.hidden = result.blocks.length > 0;
|
|
183
|
+
viewer.empty.textContent = agent.historyUnavailable
|
|
184
|
+
? tx('This runtime could not read the child history. Recorded updates remain available.', '当前运行端无法读取子会话历史,已记录的活动仍会保留。')
|
|
185
|
+
: tx('Waiting for recorded activity from this subagent.', '等待该子代理的活动记录。');
|
|
186
|
+
viewer.limit.hidden = !agent.clipped;
|
|
187
|
+
viewer.limit.textContent = tx('Older details were trimmed to keep history bounded.', '较早的详细记录已按历史容量上限裁剪。');
|
|
188
|
+
if (switched) viewer.body.scrollTop = viewer.scrolls.get(agent.key) || 0;
|
|
189
|
+
else if (follow) viewer.body.scrollTop = viewer.body.scrollHeight;
|
|
190
|
+
viewer.renderedKey = agent.key;
|
|
191
|
+
}
|
|
192
|
+
return { update, close, isOpen: () => Boolean(viewer?.shell.isConnected) };
|
|
193
|
+
}
|
|
194
|
+
return { create };
|
|
195
|
+
});
|
|
@@ -10,8 +10,10 @@
|
|
|
10
10
|
const cancelTimer = deps.clearTimeout || clearTimeout;
|
|
11
11
|
let timer = null, busy = false, disposed = false;
|
|
12
12
|
const runs = () => deps.getRuns() || [];
|
|
13
|
+
const mergedRecovery = capture => capture?.source === 'native'
|
|
14
|
+
&& capture.state === 'needs_review' && ['capture_timeout', 'capture_expired'].includes(capture.reason);
|
|
13
15
|
const pending = run => Array.isArray(run.trackedChangeCaptures)
|
|
14
|
-
&& run.trackedChangeCaptures.some(capture => capture.state === 'pending');
|
|
16
|
+
&& run.trackedChangeCaptures.some(capture => capture.state === 'pending' || mergedRecovery(capture));
|
|
15
17
|
const terminal = run => ['accepted', 'rejected'].includes(run.trackedChangeStatus)
|
|
16
18
|
|| run.undoStatus === 'applied' || run.forkSnapshot === true;
|
|
17
19
|
function buildPostFiles(run) {
|
|
@@ -78,9 +80,10 @@
|
|
|
78
80
|
const postFiles = buildPostFiles(run);
|
|
79
81
|
for (let i = 0; i < captures.length; i++) {
|
|
80
82
|
const capture = captures[i];
|
|
81
|
-
|
|
83
|
+
const recoverMerged = mergedRecovery(capture);
|
|
84
|
+
if (capture.state !== 'pending' && !recoverMerged) continue;
|
|
82
85
|
const expected = postFiles.find(file => file.path === capture.path);
|
|
83
|
-
if (newer || !expected || now() >= capture.expiresAt || run.status === 'cancelled') {
|
|
86
|
+
if (newer || !expected || (!recoverMerged && now() >= capture.expiresAt) || run.status === 'cancelled') {
|
|
84
87
|
capture.state = 'needs_review';
|
|
85
88
|
capture.reason = newer ? 'capture_superseded' : !expected ? 'capture_baseline_missing'
|
|
86
89
|
: run.status === 'cancelled' ? 'capture_cancelled' : 'capture_expired';
|
|
@@ -129,6 +132,7 @@
|
|
|
129
132
|
if (changed) {
|
|
130
133
|
run.trackedChangeCaptures = captures;
|
|
131
134
|
await deps.persist();
|
|
135
|
+
deps.refresh?.(run);
|
|
132
136
|
if (!pending(run)) deps.notify?.(run, 'needs_review', {
|
|
133
137
|
reasons: captures.filter(capture => capture.state !== 'observed').map(capture => capture.reason)
|
|
134
138
|
});
|
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
let lastUserActivityAt = Date.now();
|
|
6
6
|
let stableSavedSince = 0;
|
|
7
7
|
let applying = false;
|
|
8
|
+
let saveIdentity;
|
|
8
9
|
const documentRef = options.document || root.document;
|
|
9
10
|
const noteActivity = event => {
|
|
10
|
-
if (event?.target?.closest?.('#codex-overleaf-panel')) return;
|
|
11
|
+
if (!options.includePanelActivity && event?.target?.closest?.('#codex-overleaf-panel')) return;
|
|
11
12
|
lastUserActivityAt = Date.now();
|
|
12
13
|
stableSavedSince = 0;
|
|
13
14
|
};
|
|
@@ -42,6 +43,7 @@
|
|
|
42
43
|
saveResult = { ok: false, state: 'unavailable' };
|
|
43
44
|
}
|
|
44
45
|
const saved = saveResult?.ok === true && ['verified_saved', 'verified_quiet'].includes(saveResult?.state);
|
|
46
|
+
if (saveResult?.identity !== saveIdentity) { stableSavedSince = 0; saveIdentity = saveResult?.identity; }
|
|
45
47
|
if (saved) {
|
|
46
48
|
stableSavedSince = stableSavedSince || Date.now();
|
|
47
49
|
} else {
|
|
@@ -62,6 +64,7 @@
|
|
|
62
64
|
|
|
63
65
|
return {
|
|
64
66
|
buildIdleProbe,
|
|
67
|
+
noteActivity,
|
|
65
68
|
handleMessage,
|
|
66
69
|
isApplying: () => applying
|
|
67
70
|
};
|