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
|
@@ -4,14 +4,20 @@
|
|
|
4
4
|
require('./i18n'),
|
|
5
5
|
require('./settlementFacts'),
|
|
6
6
|
require('./runInputQueue'),
|
|
7
|
+
require('./selectionContext'),
|
|
7
8
|
require('./lineReferences'),
|
|
8
9
|
require('./pathRedaction'),
|
|
9
|
-
require('./sessionTitle')
|
|
10
|
+
require('./sessionTitle'),
|
|
11
|
+
require('./runActivityModel'),
|
|
12
|
+
require('./subagentActivityModel'),
|
|
13
|
+
require('./writebackIntent'),
|
|
14
|
+
require('./directoryCleanupProof'),
|
|
15
|
+
require('./undoOperations')
|
|
10
16
|
);
|
|
11
17
|
} else {
|
|
12
18
|
root.CodexOverleafModuleRegistry.define(
|
|
13
19
|
'SessionState',
|
|
14
|
-
['I18n', 'SettlementFacts', 'RunInputQueue', 'LineReferences', 'PathRedaction', 'SessionTitle'],
|
|
20
|
+
['I18n', 'SettlementFacts', 'RunInputQueue', 'SelectionContext', 'LineReferences', 'PathRedaction', 'SessionTitle', 'RunActivityModel', 'SubagentActivityModel', 'WritebackIntent', 'DirectoryCleanupProof', 'UndoOperations'],
|
|
15
21
|
factory
|
|
16
22
|
);
|
|
17
23
|
}
|
|
@@ -19,9 +25,15 @@
|
|
|
19
25
|
i18n,
|
|
20
26
|
SettlementFacts,
|
|
21
27
|
RunInputQueue,
|
|
28
|
+
SelectionContext,
|
|
22
29
|
LineReferences,
|
|
23
30
|
PathRedaction,
|
|
24
|
-
SessionTitle
|
|
31
|
+
SessionTitle,
|
|
32
|
+
RunActivityModel,
|
|
33
|
+
SubagentActivityModel,
|
|
34
|
+
WritebackIntent,
|
|
35
|
+
DirectoryCleanupProof,
|
|
36
|
+
UndoOperations
|
|
25
37
|
) {
|
|
26
38
|
'use strict';
|
|
27
39
|
|
|
@@ -38,6 +50,7 @@
|
|
|
38
50
|
loadCodexLocalSkills: true,
|
|
39
51
|
loadCodexOverleafSkills: true,
|
|
40
52
|
codexOverleafSkillEnabled: {},
|
|
53
|
+
codexLocalSkillEnabled: {},
|
|
41
54
|
theme: 'dark',
|
|
42
55
|
panelWidth: 380,
|
|
43
56
|
task: '',
|
|
@@ -112,7 +125,6 @@
|
|
|
112
125
|
statusTextChars: 400,
|
|
113
126
|
attachmentPreviewChars: 160 * 1024
|
|
114
127
|
};
|
|
115
|
-
const REDACTED_SECRET = '[REDACTED_SECRET]';
|
|
116
128
|
const SECRET_REDACTION_PATTERNS = [
|
|
117
129
|
/-----BEGIN [A-Z0-9 ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z0-9 ]*PRIVATE KEY-----/g,
|
|
118
130
|
/\bBearer\s+[A-Za-z0-9._~+/=-]{12,}/gi,
|
|
@@ -145,6 +157,7 @@
|
|
|
145
157
|
state.loadCodexLocalSkills = state.loadCodexLocalSkills !== false;
|
|
146
158
|
state.loadCodexOverleafSkills = state.loadCodexOverleafSkills !== false;
|
|
147
159
|
state.codexOverleafSkillEnabled = normalizeCodexOverleafSkillEnabled(state.codexOverleafSkillEnabled);
|
|
160
|
+
state.codexLocalSkillEnabled = normalizeCodexLocalSkillEnabled(state.codexLocalSkillEnabled);
|
|
148
161
|
state.theme = ['dark', 'light', 'auto'].includes(state.theme) ? state.theme : 'dark';
|
|
149
162
|
state.panelWidth = normalizePanelWidth(state.panelWidth);
|
|
150
163
|
state.task = typeof state.task === 'string' ? state.task : '';
|
|
@@ -205,6 +218,8 @@
|
|
|
205
218
|
const history = normalizeHistoryEntries(session.history);
|
|
206
219
|
const normalizedRuns = normalizeRuns(session.runs, options);
|
|
207
220
|
const runs = normalizedRuns.length ? normalizedRuns : recoverRunsFromHistory(session, history);
|
|
221
|
+
for (const run of runs) pruneRunRecoveryScope(run, session);
|
|
222
|
+
|
|
208
223
|
const rawTitle = typeof session.title === 'string' ? session.title.trim() : '';
|
|
209
224
|
const derivedTitle = deriveSessionTitle(runs, session.task);
|
|
210
225
|
const titleSource = normalizeTitleSource(session.titleSource, rawTitle, derivedTitle);
|
|
@@ -232,6 +247,7 @@
|
|
|
232
247
|
: fallbackState.speedTier,
|
|
233
248
|
requireReviewing: session.requireReviewing !== false,
|
|
234
249
|
focusFiles: normalizeFocusFiles(session.focusFiles),
|
|
250
|
+
selectionContext: SelectionContext.normalize(session.selectionContext),
|
|
235
251
|
projectReferenceFiles: normalizeProjectReferenceFiles(session.projectReferenceFiles),
|
|
236
252
|
codexThreadId: typeof session.codexThreadId === 'string' ? session.codexThreadId : '',
|
|
237
253
|
forkedFromSessionId: typeof session.forkedFromSessionId === 'string' ? session.forkedFromSessionId : '',
|
|
@@ -319,6 +335,7 @@
|
|
|
319
335
|
state.runs = Array.isArray(active.runs) ? active.runs : [];
|
|
320
336
|
state.task = typeof active.task === 'string' ? active.task : '';
|
|
321
337
|
state.focusFiles = normalizeFocusFiles(active.focusFiles);
|
|
338
|
+
state.selectionContext = SelectionContext.normalize(active.selectionContext);
|
|
322
339
|
state.mode = normalizeMode(active.mode);
|
|
323
340
|
state.requireReviewing = active.requireReviewing !== false;
|
|
324
341
|
|
|
@@ -354,6 +371,7 @@
|
|
|
354
371
|
: DEFAULT_PANEL_STATE.speedTier,
|
|
355
372
|
requireReviewing: overrides.requireReviewing !== false,
|
|
356
373
|
focusFiles: normalizeFocusFiles(overrides.focusFiles),
|
|
374
|
+
selectionContext: SelectionContext.normalize(overrides.selectionContext),
|
|
357
375
|
projectReferenceFiles: normalizeProjectReferenceFiles(overrides.projectReferenceFiles),
|
|
358
376
|
codexThreadId: typeof overrides.codexThreadId === 'string' ? overrides.codexThreadId : '',
|
|
359
377
|
forkedFromSessionId: typeof overrides.forkedFromSessionId === 'string' ? overrides.forkedFromSessionId : '',
|
|
@@ -592,7 +610,64 @@
|
|
|
592
610
|
.slice(-20);
|
|
593
611
|
}
|
|
594
612
|
|
|
613
|
+
function recordedRunFailure(run) {
|
|
614
|
+
const event = [...(Array.isArray(run?.events) ? run.events : [])].reverse()
|
|
615
|
+
.find(item => item && item.kind !== 'technical' && item.subagent !== true);
|
|
616
|
+
if (!event || event.status !== 'failed' || (event.kind && event.kind !== 'activity')
|
|
617
|
+
|| event.streamRole || event.streamKey || event.guidanceId) return null;
|
|
618
|
+
if (!['Codex returned a result, but local post-processing of this run failed.',
|
|
619
|
+
'Codex 已经返回了结果,但本地处理这一轮时出错了。'].includes(event.title)) return null;
|
|
620
|
+
const meta = RunActivityModel.capture(event);
|
|
621
|
+
// Capture encodes even an unscoped local event as [threadId, turnId].
|
|
622
|
+
const scoped = meta?.scope && meta.scope !== JSON.stringify(['', '']);
|
|
623
|
+
if (meta?.kind !== 'notice' || meta.state !== 'failed' || meta.id || scoped || meta.noticeSource) return null;
|
|
624
|
+
const ended = Date.parse(event.timestamp), started = Date.parse(run.startedAt);
|
|
625
|
+
if (!Number.isFinite(ended) || (Number.isFinite(started) && ended < started)) return null;
|
|
626
|
+
return event;
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
// On restore only: a run that already finished (finishedAt plus a terminal
|
|
630
|
+
// report as its last visible event) but was persisted as running by a stale
|
|
631
|
+
// status write. Live retries also carry an old finishedAt, so never in memory.
|
|
632
|
+
function recoverSettledRunningRun(run) {
|
|
633
|
+
if (run?.status !== 'running' || !Number.isFinite(Date.parse(run.finishedAt))) return run;
|
|
634
|
+
const last = [...(Array.isArray(run.events) ? run.events : [])].reverse()
|
|
635
|
+
.find(item => item && item.kind !== 'technical' && item.subagent !== true);
|
|
636
|
+
if (last?.kind !== 'report' || !['completed', 'failed'].includes(last.status)
|
|
637
|
+
|| Date.parse(last.timestamp) > Date.parse(run.finishedAt)) return run;
|
|
638
|
+
return { ...run, status: last.status };
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
function recoverRecordedRunFailure(run, locale = i18n.DEFAULT_LOCALE) {
|
|
642
|
+
if (run?.status !== 'running') return run;
|
|
643
|
+
const event = recordedRunFailure(run);
|
|
644
|
+
if (!event) return run;
|
|
645
|
+
// This acknowledgement is emitted only by the parent's terminal catch.
|
|
646
|
+
// It survives a render failure that prevented the old owner from settling.
|
|
647
|
+
return { ...run, status: 'failed',
|
|
648
|
+
statusText: i18n.t(locale, 'processedFailed', { elapsed: '' }).trim(),
|
|
649
|
+
finishedAt: Number.isFinite(Date.parse(run.finishedAt)) ? run.finishedAt : event.timestamp };
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
function pruneRunRecoveryScope(run, session = {}) {
|
|
653
|
+
const wrongAccount = proof => Object.prototype.hasOwnProperty.call(session, 'accountScopeId')
|
|
654
|
+
&& proof.accountScopeId !== session.accountScopeId;
|
|
655
|
+
const wrongProject = value => Boolean(session.projectId && value !== session.projectId);
|
|
656
|
+
if (run.pendingDirectoryCleanup && (run.pendingDirectoryCleanup.sessionId !== session.id
|
|
657
|
+
|| wrongAccount(run.pendingDirectoryCleanup) || wrongProject(run.pendingDirectoryCleanup.projectId))) delete run.pendingDirectoryCleanup;
|
|
658
|
+
applyTrackedChangeStatus(run, run.trackedChangeStatus);
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
function normalizeRecoveryRetention(value) {
|
|
662
|
+
if (value?.state !== 'omitted') return undefined;
|
|
663
|
+
return { state: 'omitted', reason: ['run-budget', 'session-budget', 'fallback', 'invalid'].includes(value.reason)
|
|
664
|
+
? value.reason : 'invalid', bytes: Number.isSafeInteger(value.bytes) && value.bytes >= 0 ? value.bytes : 0,
|
|
665
|
+
...(value.directoryCleanup === true ? { directoryCleanup: true, ...(value.coreRetained === true ? { coreRetained: true } : {}) } : {}) };
|
|
666
|
+
}
|
|
667
|
+
|
|
595
668
|
function normalizeRun(run, options = {}) {
|
|
669
|
+
if (options.restoreRunningRuns === true || options.recoverSettledRuns === true) run = recoverSettledRunningRun(run);
|
|
670
|
+
run = recoverRecordedRunFailure(run, options.locale);
|
|
596
671
|
const shouldStopRestoredRun = options.restoreRunningRuns === true && run.status === 'running';
|
|
597
672
|
const locale = options.locale || i18n.DEFAULT_LOCALE;
|
|
598
673
|
const events = normalizeRunEvents(run.events);
|
|
@@ -622,19 +697,23 @@
|
|
|
622
697
|
model: typeof run.model === 'string' ? run.model : '',
|
|
623
698
|
reasoningEffort: typeof run.reasoningEffort === 'string' ? run.reasoningEffort : '',
|
|
624
699
|
speedTier: typeof run.speedTier === 'string' ? run.speedTier : '',
|
|
625
|
-
status: shouldStopRestoredRun ? 'interrupted' : normalizeRunStatus(run.status),
|
|
700
|
+
status: shouldStopRestoredRun ? 'interrupted' : normalizeRunStatus(run.status, run),
|
|
626
701
|
statusText: shouldStopRestoredRun ? i18n.t(locale, 'restoredRunStoppedStatus') : sanitizeAssistantVisibleText(run.statusText),
|
|
627
702
|
runProjectId: normalizeProjectPrefKey(run.runProjectId),
|
|
628
703
|
startedAt: typeof run.startedAt === 'string' ? run.startedAt : '',
|
|
629
704
|
finishedAt: shouldStopRestoredRun ? new Date().toISOString() : typeof run.finishedAt === 'string' ? run.finishedAt : '',
|
|
630
705
|
events: events.slice(-MAX_RUN_EVENTS),
|
|
706
|
+
...(run.subagents?.length ? { subagents: SubagentActivityModel.normalize(run.subagents, sanitizeAssistantVisibleText) } : {}),
|
|
631
707
|
attachments: normalizeRunAttachments(run.attachments, STORAGE_DEFAULT_LIMITS),
|
|
632
708
|
appliedOperations: Array.isArray(run.appliedOperations) ? run.appliedOperations : [],
|
|
633
709
|
undoOperations: Array.isArray(run.undoOperations) ? run.undoOperations : [],
|
|
634
710
|
undoBaseFiles: normalizeRunFiles(run.undoBaseFiles),
|
|
635
711
|
undoTrackedChanges: normalizeRunTrackedChanges(run.undoTrackedChanges),
|
|
636
712
|
undoExpectedFiles: normalizeRunFiles(run.undoExpectedFiles),
|
|
713
|
+
...(normalizeRecoveryRetention(run.recoveryRetention) && !run.forkSnapshot
|
|
714
|
+
? { recoveryRetention: normalizeRecoveryRetention(run.recoveryRetention) } : {}),
|
|
637
715
|
undoStatus: sanitizeAssistantVisibleText(run.undoStatus),
|
|
716
|
+
...(run.undoOwnerProtocol === 1 ? { undoOwnerProtocol: 1 } : {}),
|
|
638
717
|
nativeRequestId: sanitizeAssistantVisibleText(run.nativeRequestId),
|
|
639
718
|
codexThreadId: sanitizeAssistantVisibleText(run.codexThreadId), codexTurnId: sanitizeAssistantVisibleText(run.codexTurnId),
|
|
640
719
|
forkSnapshot: run.forkSnapshot === true,
|
|
@@ -659,7 +738,11 @@
|
|
|
659
738
|
if (Array.isArray(run.trackedChangeCaptures) && run.trackedChangeCaptures.length && !run.forkSnapshot) {
|
|
660
739
|
normalized.trackedChangeCaptures = sanitizeAssistantVisibleValue(run.trackedChangeCaptures);
|
|
661
740
|
}
|
|
741
|
+
const directories = DirectoryCleanupProof.normalize(run.pendingDirectoryCleanup);
|
|
742
|
+
if (directories && directories.runId === normalized.id && directories.projectId === normalized.runProjectId
|
|
743
|
+
&& !run.forkSnapshot) normalized.pendingDirectoryCleanup = directories;
|
|
662
744
|
applyTrackedChangeStatus(normalized, run.trackedChangeStatus);
|
|
745
|
+
Object.assign(normalized, pickWritebackRecovery(run));
|
|
663
746
|
|
|
664
747
|
return normalized;
|
|
665
748
|
}
|
|
@@ -670,6 +753,7 @@
|
|
|
670
753
|
// output yields the same result.
|
|
671
754
|
function applyTrackedChangeStatus(run, rawStatus) {
|
|
672
755
|
const hasRefs = run.undoTrackedChanges.length > 0;
|
|
756
|
+
const hasFileUndo = (run.undoOperations || []).some(UndoOperations.isFileUndoOperation);
|
|
673
757
|
const hasRawStatus = rawStatus !== undefined && rawStatus !== null && rawStatus !== '';
|
|
674
758
|
|
|
675
759
|
// Step 1 — value recovery. Keep a stable value; recover any other present
|
|
@@ -686,12 +770,11 @@
|
|
|
686
770
|
}
|
|
687
771
|
|
|
688
772
|
// Step 1 — reload reconciliation. A non-terminal status (`pending`) with no
|
|
689
|
-
// refs
|
|
690
|
-
//
|
|
691
|
-
// the run returns to the legacy-undo world. A terminal status with no refs
|
|
773
|
+
// refs can result from an old record or a storage-budget omission. Drop
|
|
774
|
+
// pending and let actual legacy Undo material decide the action. A terminal status with no refs
|
|
692
775
|
// is kept — step 3 already empties terminal payloads and the label stays
|
|
693
776
|
// meaningful.
|
|
694
|
-
if (!hasRefs && status === 'pending') {
|
|
777
|
+
if (!hasRefs && !hasFileUndo && status === 'pending') {
|
|
695
778
|
status = undefined;
|
|
696
779
|
}
|
|
697
780
|
|
|
@@ -708,7 +791,7 @@
|
|
|
708
791
|
|
|
709
792
|
if (status !== undefined) {
|
|
710
793
|
run.trackedChangeStatus = status;
|
|
711
|
-
}
|
|
794
|
+
} else delete run.trackedChangeStatus;
|
|
712
795
|
}
|
|
713
796
|
|
|
714
797
|
// Welcome-panel + write-guard: the run lifecycle now
|
|
@@ -722,13 +805,20 @@
|
|
|
722
805
|
'running',
|
|
723
806
|
'completed',
|
|
724
807
|
'failed',
|
|
808
|
+
'cancelled',
|
|
725
809
|
'interrupted',
|
|
726
810
|
'background_completed',
|
|
727
811
|
'needs_review_after_navigation',
|
|
728
812
|
'abandoned_after_navigation'
|
|
729
813
|
]);
|
|
730
814
|
|
|
731
|
-
function normalizeRunStatus(status) {
|
|
815
|
+
function normalizeRunStatus(status, run = {}) {
|
|
816
|
+
if (status === 'running' && recordedRunFailure(run)) return 'failed';
|
|
817
|
+
if (status === 'rejected') return 'cancelled';
|
|
818
|
+
// Older normalizers rewrote cancelled runs to pending or completed.
|
|
819
|
+
// Recover only with a terminal timestamp and an explicit plugin event.
|
|
820
|
+
if (['pending', 'completed'].includes(status) && Number.isFinite(Date.parse(run.finishedAt))
|
|
821
|
+
&& Array.isArray(run.events) && run.events.some(RunActivityModel.isRoutineCancellationEvent)) return 'cancelled';
|
|
732
822
|
if (VALID_RUN_STATUS.has(status)) return status;
|
|
733
823
|
// Legacy persisted runs without an explicit status fall back to `completed`
|
|
734
824
|
// (the historical default for the recovery branch); unknown values land on
|
|
@@ -753,6 +843,9 @@
|
|
|
753
843
|
timestamp: typeof event.timestamp === 'string' ? event.timestamp : '',
|
|
754
844
|
kind: typeof event.kind === 'string' ? event.kind : 'activity',
|
|
755
845
|
technicalDetail: sanitizeAssistantVisibleValue(event.technicalDetail),
|
|
846
|
+
activity: RunActivityModel.capture(event, sanitizeAssistantVisibleText),
|
|
847
|
+
streamPhase: RunActivityModel.normalizePhase(event.streamPhase),
|
|
848
|
+
subagent: event.subagent === true ? true : undefined,
|
|
756
849
|
guidanceId: sanitizeAssistantVisibleText(event.guidanceId),
|
|
757
850
|
streamKey: sanitizeAssistantVisibleText(event.streamKey),
|
|
758
851
|
streamRole: sanitizeAssistantVisibleText(event.streamRole)
|
|
@@ -970,6 +1063,17 @@
|
|
|
970
1063
|
return result;
|
|
971
1064
|
}
|
|
972
1065
|
|
|
1066
|
+
function normalizeCodexLocalSkillEnabled(value) {
|
|
1067
|
+
const result = {};
|
|
1068
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) return result;
|
|
1069
|
+
for (const [id, enabled] of Object.entries(value)) {
|
|
1070
|
+
if (/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,79}$/.test(id) && !id.includes('..')
|
|
1071
|
+
&& !['__proto__', 'prototype', 'constructor'].includes(id) && typeof enabled === 'boolean') result[id] = enabled;
|
|
1072
|
+
}
|
|
1073
|
+
if (Object.keys(result).length > 200) throw new Error('Too many skill preferences.');
|
|
1074
|
+
return result;
|
|
1075
|
+
}
|
|
1076
|
+
|
|
973
1077
|
function normalizeProjectPrefKey(value) {
|
|
974
1078
|
const key = typeof value === 'string' ? value.trim() : '';
|
|
975
1079
|
if (!key) {
|
|
@@ -1041,6 +1145,7 @@
|
|
|
1041
1145
|
loadCodexLocalSkills: source.loadCodexLocalSkills !== false,
|
|
1042
1146
|
loadCodexOverleafSkills: source.loadCodexOverleafSkills !== false,
|
|
1043
1147
|
codexOverleafSkillEnabled: normalizeCodexOverleafSkillEnabled(source.codexOverleafSkillEnabled),
|
|
1148
|
+
codexLocalSkillEnabled: normalizeCodexLocalSkillEnabled(source.codexLocalSkillEnabled),
|
|
1044
1149
|
theme: ['dark', 'light', 'auto'].includes(source.theme) ? source.theme : 'dark',
|
|
1045
1150
|
panelWidth: normalizePanelWidth(source.panelWidth),
|
|
1046
1151
|
task: summarizeTextForStorage(active?.task || source.task || '', 'task'),
|
|
@@ -1123,6 +1228,7 @@
|
|
|
1123
1228
|
speedTier: normalizeSpeedTier(session.speedTier || fallbackState.speedTier),
|
|
1124
1229
|
requireReviewing: session.requireReviewing !== false,
|
|
1125
1230
|
focusFiles: normalizeFocusFiles(session.focusFiles),
|
|
1231
|
+
selectionContext: SelectionContext.normalize(session.selectionContext),
|
|
1126
1232
|
projectReferenceFiles: normalizeProjectReferenceFiles(session.projectReferenceFiles),
|
|
1127
1233
|
codexThreadId: typeof session.codexThreadId === 'string' ? session.codexThreadId : '',
|
|
1128
1234
|
forkedFromSessionId: normalizeTextField(session.forkedFromSessionId, 160),
|
|
@@ -1196,6 +1302,7 @@
|
|
|
1196
1302
|
}
|
|
1197
1303
|
|
|
1198
1304
|
function compactRunForStorage(run, limits, keepUndoPayload, settlementFacts = null) {
|
|
1305
|
+
run = recoverRecordedRunFailure(run);
|
|
1199
1306
|
const undoPayload = compactUndoPayload(run, limits, keepUndoPayload);
|
|
1200
1307
|
const compact = {
|
|
1201
1308
|
id: run.id,
|
|
@@ -1204,19 +1311,26 @@
|
|
|
1204
1311
|
model: normalizeTextField(run.model, 80),
|
|
1205
1312
|
reasoningEffort: typeof run.reasoningEffort === 'string' ? run.reasoningEffort : '',
|
|
1206
1313
|
speedTier: typeof run.speedTier === 'string' ? run.speedTier : '',
|
|
1207
|
-
status: normalizeRunStatus(run.status),
|
|
1314
|
+
status: normalizeRunStatus(run.status, run),
|
|
1208
1315
|
statusText: summarizeTextForStorage(run.statusText, 'status text'),
|
|
1209
1316
|
runProjectId: normalizeProjectPrefKey(run.runProjectId),
|
|
1210
1317
|
startedAt: typeof run.startedAt === 'string' ? run.startedAt : '',
|
|
1211
1318
|
finishedAt: typeof run.finishedAt === 'string' ? run.finishedAt : '',
|
|
1212
1319
|
events: compactRunEvents(run.events, limits),
|
|
1320
|
+
...(run.subagents?.length ? { subagents: SubagentActivityModel.normalize(run.subagents, sanitizeAssistantVisibleText) } : {}),
|
|
1213
1321
|
attachments: compactRunAttachmentsForStorage(run.attachments, limits),
|
|
1214
1322
|
appliedOperations: [],
|
|
1215
1323
|
undoOperations: undoPayload.undoOperations,
|
|
1216
1324
|
undoBaseFiles: undoPayload.undoBaseFiles,
|
|
1217
1325
|
undoTrackedChanges: undoPayload.undoTrackedChanges,
|
|
1218
1326
|
undoExpectedFiles: undoPayload.undoExpectedFiles,
|
|
1327
|
+
...(!run.forkSnapshot && (run.pendingDirectoryCleanup || run.recoveryRetention?.directoryCleanup === true || (run.undoStatus !== 'applied' && !['accepted', 'rejected'].includes(run.trackedChangeStatus)))
|
|
1328
|
+
&& (run.pendingDirectoryCleanup || run.recoveryRetention?.state === 'omitted' || ['appliedOperations', 'undoOperations', 'undoTrackedChanges', 'undoExpectedFiles']
|
|
1329
|
+
.some(key => Array.isArray(run[key]) && run[key].length))
|
|
1330
|
+
? { recoveryRetention: normalizeRecoveryRetention(run.recoveryRetention)
|
|
1331
|
+
|| { state: 'omitted', reason: 'fallback', bytes: 0, ...(run.pendingDirectoryCleanup ? { directoryCleanup: true } : {}) } } : {}),
|
|
1219
1332
|
undoStatus: summarizeTextForStorage(run.undoStatus, 'undo status'),
|
|
1333
|
+
...(run.undoOwnerProtocol === 1 ? { undoOwnerProtocol: 1 } : {}),
|
|
1220
1334
|
nativeRequestId: normalizeTextField(run.nativeRequestId, 160),
|
|
1221
1335
|
codexThreadId: normalizeTextField(run.codexThreadId, 160), codexTurnId: normalizeTextField(run.codexTurnId, 160),
|
|
1222
1336
|
forkSnapshot: run.forkSnapshot === true,
|
|
@@ -1224,6 +1338,11 @@
|
|
|
1224
1338
|
nativeEventSeq: Number.isFinite(Number(run.nativeEventSeq)) ? Number(run.nativeEventSeq) : 0,
|
|
1225
1339
|
queueItemId: normalizeTextField(run.queueItemId, 160)
|
|
1226
1340
|
};
|
|
1341
|
+
if (compact.recoveryRetention?.coreRetained === true && run.undoStatus !== 'applied'
|
|
1342
|
+
&& !TERMINAL_TRACKED_CHANGE_STATUS.has(run.trackedChangeStatus)
|
|
1343
|
+
&& ['appliedOperations', 'undoOperations', 'undoTrackedChanges', 'undoExpectedFiles'].some(key => run[key]?.length)) {
|
|
1344
|
+
delete compact.recoveryRetention.coreRetained;
|
|
1345
|
+
}
|
|
1227
1346
|
if (run.executionSnapshot && typeof run.executionSnapshot === 'object') {
|
|
1228
1347
|
compact.executionSnapshot = sanitizeAssistantVisibleValue(run.executionSnapshot);
|
|
1229
1348
|
}
|
|
@@ -1236,6 +1355,7 @@
|
|
|
1236
1355
|
if (run.interruptedDraft) {
|
|
1237
1356
|
compact.interruptedDraft = sanitizeAssistantVisibleValue(run.interruptedDraft);
|
|
1238
1357
|
}
|
|
1358
|
+
Object.assign(compact, pickWritebackRecovery(run));
|
|
1239
1359
|
if (VALID_TRACKED_CHANGE_STATUS.has(run.trackedChangeStatus)) {
|
|
1240
1360
|
compact.trackedChangeStatus = run.trackedChangeStatus;
|
|
1241
1361
|
}
|
|
@@ -1256,6 +1376,8 @@
|
|
|
1256
1376
|
streamKey: typeof event.streamKey === 'string' ? event.streamKey : '',
|
|
1257
1377
|
streamRole: typeof event.streamRole === 'string' ? event.streamRole : ''
|
|
1258
1378
|
};
|
|
1379
|
+
compact.activity = RunActivityModel.capture(event, sanitizeAssistantVisibleText);
|
|
1380
|
+
compact.streamPhase = RunActivityModel.normalizePhase(event.streamPhase);
|
|
1259
1381
|
if (event.subagent === true) {
|
|
1260
1382
|
compact.subagent = true;
|
|
1261
1383
|
}
|
|
@@ -1507,21 +1629,22 @@
|
|
|
1507
1629
|
if (typeof value !== 'string' || !value) {
|
|
1508
1630
|
return '';
|
|
1509
1631
|
}
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1632
|
+
// Conversation text is user/model content, not a credential field. Keep
|
|
1633
|
+
// examples and quoted values intact; local-reference display rules remain.
|
|
1634
|
+
if (!mightContainLocalReferenceText(value)) {
|
|
1635
|
+
return value;
|
|
1513
1636
|
}
|
|
1514
1637
|
if (LineReferences?.sanitizeLocalReferences) {
|
|
1515
1638
|
try {
|
|
1516
|
-
return LineReferences.sanitizeLocalReferences(
|
|
1639
|
+
return LineReferences.sanitizeLocalReferences(value, {
|
|
1517
1640
|
projectFiles: [],
|
|
1518
1641
|
context: 'persist'
|
|
1519
1642
|
});
|
|
1520
1643
|
} catch (_error) {
|
|
1521
|
-
return fallbackSanitizeLocalReferences(
|
|
1644
|
+
return fallbackSanitizeLocalReferences(value);
|
|
1522
1645
|
}
|
|
1523
1646
|
}
|
|
1524
|
-
return fallbackSanitizeLocalReferences(
|
|
1647
|
+
return fallbackSanitizeLocalReferences(value);
|
|
1525
1648
|
}
|
|
1526
1649
|
|
|
1527
1650
|
function mightContainLocalReferenceText(value) {
|
|
@@ -1549,18 +1672,6 @@
|
|
|
1549
1672
|
});
|
|
1550
1673
|
}
|
|
1551
1674
|
|
|
1552
|
-
function redactSecretLikeText(value) {
|
|
1553
|
-
if (typeof value !== 'string') {
|
|
1554
|
-
return '';
|
|
1555
|
-
}
|
|
1556
|
-
let redacted = value;
|
|
1557
|
-
for (const pattern of SECRET_REDACTION_PATTERNS) {
|
|
1558
|
-
pattern.lastIndex = 0;
|
|
1559
|
-
redacted = redacted.replace(pattern, REDACTED_SECRET);
|
|
1560
|
-
}
|
|
1561
|
-
return redacted;
|
|
1562
|
-
}
|
|
1563
|
-
|
|
1564
1675
|
function containsSecretLikeText(value) {
|
|
1565
1676
|
if (typeof value === 'string') {
|
|
1566
1677
|
return SECRET_REDACTION_PATTERNS.some(pattern => {
|
|
@@ -1616,7 +1727,26 @@
|
|
|
1616
1727
|
return new Blob([serialized]).size;
|
|
1617
1728
|
}
|
|
1618
1729
|
|
|
1730
|
+
function pickWritebackRecovery(run = {}) {
|
|
1731
|
+
if (run.forkSnapshot === true || run.undoStatus === 'applied' || run.trackedChangeStatus === 'rejected') return {};
|
|
1732
|
+
const result = {};
|
|
1733
|
+
const retry = WritebackIntent.normalize(run.retryWriteback);
|
|
1734
|
+
if (retry && retry.runId === run.id && retry.projectId === normalizeProjectPrefKey(run.runProjectId)
|
|
1735
|
+
&& retry.operations.every(op => (op.type === 'create' && typeof op.content === 'string')
|
|
1736
|
+
|| (op.type === 'edit' && (op.patches?.length || typeof op.replaceAll === 'string')
|
|
1737
|
+
&& retry.baseFiles.some(file => file.path === op.path))
|
|
1738
|
+
|| (op.type === 'delete' && retry.baseFiles.some(file => file.path === op.path)))
|
|
1739
|
+
&& !containsSecretLikeText(retry)) result.retryWriteback = retry;
|
|
1740
|
+
const check = WritebackIntent.normalizeSaveCheck(run.saveCheck);
|
|
1741
|
+
if (check && check.runId === run.id && check.projectId === normalizeProjectPrefKey(run.runProjectId)) result.saveCheck = check;
|
|
1742
|
+
if (typeof run.saveConfirmedAt === 'string' && Number.isFinite(Date.parse(run.saveConfirmedAt))) result.saveConfirmedAt = run.saveConfirmedAt;
|
|
1743
|
+
return result;
|
|
1744
|
+
}
|
|
1745
|
+
|
|
1619
1746
|
return {
|
|
1747
|
+
normalizeRecoveryRetention,
|
|
1748
|
+
pruneRunRecoveryScope,
|
|
1749
|
+
pickWritebackRecovery,
|
|
1620
1750
|
DEFAULT_PANEL_STATE,
|
|
1621
1751
|
createSession,
|
|
1622
1752
|
deleteSession,
|
|
@@ -1630,7 +1760,13 @@
|
|
|
1630
1760
|
setActiveSession,
|
|
1631
1761
|
updateActiveSession,
|
|
1632
1762
|
normalizeRuns,
|
|
1763
|
+
normalizeRunStatus,
|
|
1764
|
+
recoverRecordedRunFailure,
|
|
1765
|
+
recoverSettledRunningRun,
|
|
1766
|
+
normalizeCodexLocalSkillEnabled,
|
|
1633
1767
|
normalizeProjectReferenceFiles,
|
|
1768
|
+
normalizeComposerAttachmentsForPersistence,
|
|
1769
|
+
normalizeSelectionContext: SelectionContext.normalize,
|
|
1634
1770
|
prepareStateForStorage,
|
|
1635
1771
|
estimateJsonBytes,
|
|
1636
1772
|
computeSafeTaskSummary
|
|
@@ -157,6 +157,9 @@
|
|
|
157
157
|
canAccept,
|
|
158
158
|
canUndo,
|
|
159
159
|
canRetry: Boolean(primaryFailure?.retryable),
|
|
160
|
+
requiresWriteReview: Boolean(facts && (facts.documentEffect === 'possibly-changed'
|
|
161
|
+
|| facts.evidence?.settled === 'needs-review'
|
|
162
|
+
|| facts.failures.some(failure => DefaultFailureReasons.isUnconfirmedWriteFailure?.(failure)))),
|
|
160
163
|
terminalState: failureTerminalState || '',
|
|
161
164
|
actions: { accept: canAccept, undo: canUndo }
|
|
162
165
|
};
|
|
@@ -209,6 +212,10 @@
|
|
|
209
212
|
file: safePath(item.file),
|
|
210
213
|
operationType: text(item.operationType).slice(0, 80),
|
|
211
214
|
changedDocument: item.changedDocument === true,
|
|
215
|
+
...(item.mayHaveMutated === true ? { mayHaveMutated: true } : {}),
|
|
216
|
+
...(item.evidence?.originalCode === 'native_untracked_undo_pending_changes'
|
|
217
|
+
&& item.changedDocument !== true && item.mayHaveMutated !== true && item.evidence.writeStarted !== true
|
|
218
|
+
? { evidence: { originalCode: 'native_untracked_undo_pending_changes' } } : {}),
|
|
212
219
|
terminalState: normalizeTerminalState(item.terminalState)
|
|
213
220
|
}));
|
|
214
221
|
}
|
|
@@ -287,8 +294,9 @@
|
|
|
287
294
|
}
|
|
288
295
|
|
|
289
296
|
function selectPrimaryFailure(failures) {
|
|
290
|
-
|
|
291
|
-
|
|
297
|
+
const select = DefaultFailureReasons?.selectPrimaryWritebackFailure || DefaultFailureReasons?.selectPrimaryFailure;
|
|
298
|
+
return select instanceof Function
|
|
299
|
+
? select(failures)
|
|
292
300
|
: failures[0] || null;
|
|
293
301
|
}
|
|
294
302
|
|