codex-overleaf-link 2.4.1 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +272 -314
- package/README.zh-CN.md +287 -329
- package/extension/bootstrap/background.js +47 -10
- package/extension/bootstrap/manifest.template.json +9 -4
- package/extension/bootstrap/popup.html +10 -16
- package/extension/bootstrap/update.js +25 -2
- package/extension/runtime-manifest.json +3 -1
- package/extension/src/background.js +28 -3
- package/extension/src/backgroundSharedSessions.js +380 -0
- package/extension/src/backgroundUpdateCoordinator.js +442 -379
- package/extension/src/content/activeTurnControl.js +8 -0
- package/extension/src/content/assetTransferBroker.js +186 -12
- package/extension/src/content/changeHistoryView.js +175 -0
- package/extension/src/content/composerAttachments.js +24 -22
- package/extension/src/content/composerPanel.js +23 -8
- package/extension/src/content/contentRuntime.js +507 -507
- package/extension/src/content/diagnosticsController.js +1 -2
- package/extension/src/content/diagnosticsExport.js +222 -0
- package/extension/src/content/diagnosticsPanel.js +48 -19
- package/extension/src/content/diffReviewPanel.js +8 -5
- package/extension/src/content/generated/content.bundle.js +8330 -1349
- package/extension/src/content/generated/content.bundle.meta.json +22 -3
- package/extension/src/content/legacyGlobalRegistry.js +19 -1
- package/extension/src/content/localSkillsPanel.js +42 -7
- package/extension/src/content/markdownDomRenderer.js +9 -4
- package/extension/src/content/modelPicker.js +1 -1
- package/extension/src/content/pageBridgeClient.js +18 -3
- package/extension/src/content/panelMaintenance.js +48 -121
- package/extension/src/content/panelRenderer.js +4 -0
- package/extension/src/content/pendingInputView.js +109 -76
- package/extension/src/content/providerSettingsCoordinator.js +17 -6
- package/extension/src/content/providerSettingsDialog.js +661 -108
- package/extension/src/content/recentProjects.js +10 -1
- package/extension/src/content/runActivitySummary.js +631 -0
- package/extension/src/content/runController.js +3 -1
- package/extension/src/content/runFailureNotice.js +14 -1
- package/extension/src/content/runGuidanceController.js +4 -3
- package/extension/src/content/runPresence.js +306 -0
- package/extension/src/content/runQueueScheduler.js +2 -1
- package/extension/src/content/runResultActions.js +123 -3
- package/extension/src/content/runTimelineView.js +186 -154
- package/extension/src/content/selectionContextView.js +300 -0
- package/extension/src/content/sessionPersistence.js +6 -1
- package/extension/src/content/settingsPanel.js +77 -52
- package/extension/src/content/settingsWorkbench.js +374 -0
- package/extension/src/content/sharedSessionViewSync.js +72 -0
- package/extension/src/content/subagentActivityView.js +195 -0
- package/extension/src/content/trackedChangeCaptureController.js +7 -3
- package/extension/src/content/updateNotice.js +121 -50
- package/extension/src/content/writebackController.js +257 -0
- package/extension/src/content/writebackOrchestrator.js +146 -141
- package/extension/src/content/writebackPlan.js +231 -0
- package/extension/src/content/writebackRecovery.js +122 -0
- package/extension/src/content/writingStyleSettings.js +576 -0
- package/extension/src/content/writtenChangesView.js +152 -0
- package/extension/src/page/binaryAssetUploader.js +97 -19
- package/extension/src/page/overleafProjectSnapshot.js +1 -0
- package/extension/src/page/referenceProjects.js +148 -0
- package/extension/src/page/saveState.js +14 -2
- package/extension/src/page/snapshotRouter.js +44 -13
- package/extension/src/page/textCoordinates.js +102 -0
- package/extension/src/page/textFileCreator.js +350 -59
- package/extension/src/page/trackedChangeCapture.js +42 -56
- package/extension/src/page/trackedChangeOwnership.js +198 -0
- package/extension/src/page/trackedChangeReplay.js +164 -0
- package/extension/src/page/trackedChangesLifecycle.js +135 -149
- package/extension/src/page/treeOperations.js +26 -2
- package/extension/src/page/writebackReceiptJournal.js +112 -0
- package/extension/src/page/writebackRouter.js +175 -135
- package/extension/src/pageBridge.js +56 -101
- package/extension/src/popup.js +203 -59
- package/extension/src/shared/agentTranscript.js +18 -4
- package/extension/src/shared/auditRecords.js +71 -0
- package/extension/src/shared/changeHistoryModel.js +94 -0
- package/extension/src/shared/compatibility.js +1 -1
- package/extension/src/shared/compileAdapter.js +42 -0
- package/extension/src/shared/failureReasons.js +20 -0
- package/extension/src/shared/globalPreferences.js +1 -1
- package/extension/src/shared/i18n.js +93 -25
- package/extension/src/shared/managedUpdateProjection.js +6 -3
- package/extension/src/shared/pageRpcContract.js +7 -1
- package/extension/src/shared/providerProfiles.js +109 -0
- package/extension/src/shared/runActivityModel.js +361 -0
- package/extension/src/shared/runExecutionSnapshot.js +8 -2
- package/extension/src/shared/runExecutionSnapshotCodec.js +16 -4
- package/extension/src/shared/scopedPersistenceBrowserAdapter.js +6 -3
- package/extension/src/shared/selectionContext.js +28 -0
- package/extension/src/shared/sessionState.js +97 -6
- package/extension/src/shared/sharedSessionBridge.js +288 -0
- package/extension/src/shared/storageDb.js +22 -55
- package/extension/src/shared/storageMigration.js +3 -0
- package/extension/src/shared/storageRunActions.js +10 -4
- package/extension/src/shared/storageValuePruning.js +40 -0
- package/extension/src/shared/subagentActivityModel.js +174 -0
- package/extension/src/shared/undoOperations.js +87 -0
- package/extension/src/shared/updateConsent.js +37 -8
- package/extension/src/shared/writebackIntent.js +62 -0
- package/extension/src/shared/writebackSettlement.js +29 -10
- package/extension/src/shared/writingStyle.js +33 -0
- package/extension/styles/panel.css +1972 -384
- package/extension/styles/popup.css +110 -0
- package/native-host/src/anthropicBridgeRequest.js +2 -1
- package/native-host/src/codexModelRecovery.js +107 -0
- package/native-host/src/codexPromptAssembly.js +2 -0
- package/native-host/src/codexProviderLaunch.js +3 -3
- package/native-host/src/codexRuntimeIdentity.js +1 -0
- package/native-host/src/codexSessionRunner.js +106 -140
- package/native-host/src/codexSessionTiming.js +3 -0
- package/native-host/src/managedInstall.js +5 -4
- package/native-host/src/nativeEnvironment.js +70 -0
- package/native-host/src/nativeQuotas.js +15 -8
- package/native-host/src/overleafWorkspaceRules.js +16 -0
- package/native-host/src/processStopBarrier.js +80 -0
- package/native-host/src/providerModelCatalog.js +4 -3
- package/native-host/src/providerProfile.js +13 -1
- package/native-host/src/providerReasoning.js +9 -5
- package/native-host/src/providerStore.js +4 -0
- package/native-host/src/releaseTransport.js +14 -5
- package/native-host/src/selectionScope.js +58 -0
- package/native-host/src/skills/parallel-subagents/SKILL.md +31 -3
- package/native-host/src/skills/writing-style-builder/SKILL.md +146 -0
- package/native-host/src/subagentBroker.js +102 -98
- package/native-host/src/subagentTelemetry.js +316 -0
- package/native-host/src/subagentWorkspace.js +103 -0
- package/native-host/src/subagentWorkspacePath.js +31 -0
- package/native-host/src/taskRunnerRuntime.js +55 -5
- package/native-host/src/turnAttachments.js +113 -0
- package/native-host/src/updateManager.js +122 -12
- package/native-host/src/updateNetworkControl.js +75 -0
- package/native-host/src/updateTrust.js +21 -2
- package/native-host/src/vendor/pdfjs/LICENSE +177 -0
- package/native-host/src/vendor/pdfjs/SOURCE.txt +3 -0
- package/native-host/src/vendor/pdfjs/cmaps/78-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/78-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/78-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/78-RKSJ-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/78-RKSJ-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/78-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/78ms-RKSJ-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/78ms-RKSJ-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/83pv-RKSJ-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/90ms-RKSJ-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/90ms-RKSJ-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/90msp-RKSJ-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/90msp-RKSJ-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/90pv-RKSJ-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/90pv-RKSJ-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Add-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Add-RKSJ-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Add-RKSJ-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Add-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-0.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-1.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-2.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-3.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-4.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-5.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-6.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-0.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-1.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-2.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-3.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-4.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-5.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-0.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-1.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-2.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-3.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-4.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-5.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-6.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-0.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-1.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-2.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/B5-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/B5pc-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/B5pc-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/CNS-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/CNS-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/CNS1-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/CNS1-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/CNS2-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/CNS2-V.bcmap +3 -0
- package/native-host/src/vendor/pdfjs/cmaps/ETHK-B5-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/ETHK-B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/ETen-B5-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/ETen-B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/ETenms-B5-H.bcmap +3 -0
- package/native-host/src/vendor/pdfjs/cmaps/ETenms-B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Ext-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Ext-RKSJ-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Ext-RKSJ-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Ext-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GB-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GB-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GB-H.bcmap +4 -0
- package/native-host/src/vendor/pdfjs/cmaps/GB-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBK-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBK-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBK2K-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBK2K-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBKp-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBKp-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBT-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBT-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBT-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBT-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBTpc-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBTpc-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBpc-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/GBpc-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKdla-B5-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKdla-B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKdlb-B5-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKdlb-B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKgccs-B5-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKgccs-B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKm314-B5-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKm314-B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKm471-B5-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKm471-B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKscs-B5-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/HKscs-B5-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Hankaku.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Hiragana.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSC-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSC-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSC-Johab-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSC-Johab-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSCms-UHC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSCpc-EUC-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/KSCpc-EUC-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Katakana.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/LICENSE +36 -0
- package/native-host/src/vendor/pdfjs/cmaps/NWP-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/NWP-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/RKSJ-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/RKSJ-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/Roman.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UCS2-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UCS2-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF16-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF16-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF32-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF32-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF8-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniCNS-UTF8-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniGB-UCS2-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniGB-UCS2-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF16-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF16-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF32-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF32-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF8-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniGB-UTF8-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UCS2-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF16-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF16-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF32-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF32-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF8-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS-UTF8-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniKS-UCS2-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniKS-UCS2-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF16-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF16-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF32-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF32-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF8-H.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/UniKS-UTF8-V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/V.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/cmaps/WP-Symbol.bcmap +0 -0
- package/native-host/src/vendor/pdfjs/pdf.mjs +26740 -0
- package/native-host/src/vendor/pdfjs/pdf.worker.mjs +62201 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitDingbats.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixed.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixedBold.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitFixedItalic.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerif.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerifBold.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSerifItalic.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/FoxitSymbol.pfb +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/LICENSE_FOXIT +27 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/LICENSE_LIBERATION +102 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-Bold.ttf +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-Italic.ttf +0 -0
- package/native-host/src/vendor/pdfjs/standard_fonts/LiberationSans-Regular.ttf +0 -0
- package/native-host/src/writingStyleEvidence.js +102 -0
- package/native-host/src/writingStylePdfWorker.js +35 -0
- package/native-host/src/writingStyleProfile.js +165 -0
- package/native-host/src/writingStyleRuntime.js +447 -0
- package/package.json +1 -1
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
color-scheme: dark;
|
|
3
|
+
--popup-bg: light-dark(#ffffff, #1b201d);
|
|
4
|
+
--popup-text: light-dark(#28312b, #e5eae6);
|
|
5
|
+
--popup-muted: light-dark(#717b74, #a3aea6);
|
|
6
|
+
--popup-border: light-dark(#e8ece9, #333c36);
|
|
7
|
+
--popup-surface: light-dark(#f6f8f6, #242c27);
|
|
8
|
+
--popup-green: light-dark(#35734a, #9ccdab);
|
|
9
|
+
--popup-on-green: light-dark(#ffffff, #182b1f);
|
|
10
|
+
--popup-danger: light-dark(#aa443d, #df928c);
|
|
11
|
+
--popup-warn: light-dark(#99702a, #d6b671);
|
|
12
|
+
}
|
|
13
|
+
:root[data-popup-theme="light"] { color-scheme: light; }
|
|
14
|
+
:root[data-popup-theme="auto"] { color-scheme: light dark; }
|
|
15
|
+
/* Give Chrome an intrinsic popup width; viewport-relative caps can shrink it
|
|
16
|
+
back to the initial narrow viewport during popup sizing. */
|
|
17
|
+
html.popup-minimal-root {
|
|
18
|
+
box-sizing: border-box;
|
|
19
|
+
width: 340px;
|
|
20
|
+
min-width: 340px;
|
|
21
|
+
margin: 0;
|
|
22
|
+
overflow-x: hidden;
|
|
23
|
+
overflow-y: auto;
|
|
24
|
+
background: var(--popup-bg);
|
|
25
|
+
}
|
|
26
|
+
.popup-minimal * { box-sizing: border-box; }
|
|
27
|
+
body.popup-minimal {
|
|
28
|
+
width: 340px;
|
|
29
|
+
min-width: 340px;
|
|
30
|
+
max-width: none;
|
|
31
|
+
min-height: 0;
|
|
32
|
+
margin: 0;
|
|
33
|
+
padding: 0;
|
|
34
|
+
color: var(--popup-text);
|
|
35
|
+
background: var(--popup-bg);
|
|
36
|
+
font: 13px/1.5 "Avenir Next", "Segoe UI", sans-serif;
|
|
37
|
+
animation: none;
|
|
38
|
+
}
|
|
39
|
+
.popup-minimal #popup-shell { display: block; width: 100%; min-width: 0; }
|
|
40
|
+
.popup-minimal .popup-header { display: flex; align-items: center; gap: 12px; padding: 17px 18px 16px; }
|
|
41
|
+
.popup-minimal .popup-icon { display: block; width: 32px; height: 32px; object-fit: contain; flex: 0 0 auto; }
|
|
42
|
+
.popup-minimal .popup-brand { flex: 1; min-width: 0; }
|
|
43
|
+
.popup-minimal .popup-brand h1 { margin: 0; font-size: 14px; font-weight: 500; letter-spacing: -.02em; line-height: 1.45; white-space: nowrap; overflow-wrap: normal; }
|
|
44
|
+
.popup-minimal .connection-toggle {
|
|
45
|
+
appearance: none;
|
|
46
|
+
display: inline-flex;
|
|
47
|
+
align-items: center;
|
|
48
|
+
gap: 5px;
|
|
49
|
+
width: auto;
|
|
50
|
+
min-height: 24px;
|
|
51
|
+
margin: 1px 0 -2px -4px;
|
|
52
|
+
padding: 2px 4px;
|
|
53
|
+
border: 1px solid transparent;
|
|
54
|
+
border-radius: 5px;
|
|
55
|
+
box-shadow: none;
|
|
56
|
+
background: transparent;
|
|
57
|
+
color: var(--popup-muted);
|
|
58
|
+
font: inherit;
|
|
59
|
+
font-size: 11px;
|
|
60
|
+
font-weight: 400;
|
|
61
|
+
line-height: 1.45;
|
|
62
|
+
white-space: nowrap;
|
|
63
|
+
cursor: pointer;
|
|
64
|
+
}
|
|
65
|
+
.popup-minimal .connection-toggle:hover { border-color: var(--popup-border); background: var(--popup-surface); color: var(--popup-text); transform: none; }
|
|
66
|
+
.popup-minimal .connection-chevron { width: 5px; height: 5px; flex: 0 0 auto; margin: -2px 2px 0; border: solid currentColor; border-width: 0 1px 1px 0; transform: rotate(45deg); }
|
|
67
|
+
.popup-minimal .connection-toggle[aria-expanded="true"] .connection-chevron { margin-top: 2px; transform: rotate(225deg); }
|
|
68
|
+
.popup-minimal .status-icon { display: block; width: 5px; height: 5px; min-width: 5px; min-height: 5px; flex: 0 0 auto; border-radius: 50%; background: var(--popup-muted); font-size: 0; box-shadow: none; }
|
|
69
|
+
.popup-minimal .status-icon.compatible { background: var(--popup-green); }
|
|
70
|
+
.popup-minimal .status-icon.update-available { background: var(--popup-warn); }
|
|
71
|
+
.popup-minimal .status-icon.incompatible { background: var(--popup-danger); }
|
|
72
|
+
.popup-minimal .connection-details { padding: 12px 18px; border-top: 1px solid var(--popup-border); background: var(--popup-surface); }
|
|
73
|
+
.popup-minimal #version-pair { display: grid; gap: 8px; margin: 0; font-size: 11px; line-height: 1.45; }
|
|
74
|
+
.popup-minimal #version-pair > div { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
|
|
75
|
+
.popup-minimal #version-pair dt { color: var(--popup-muted); }
|
|
76
|
+
.popup-minimal #version-pair dd { margin: 0; color: var(--popup-text); font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
77
|
+
.popup-minimal .launcher-setting { display: grid; grid-template-columns: minmax(0, 1fr) 31px; align-items: center; gap: 16px; padding: 15px 18px 17px; border-top: 1px solid var(--popup-border); cursor: pointer; }
|
|
78
|
+
.popup-minimal .launcher-copy { min-width: 0; }
|
|
79
|
+
.popup-minimal .launcher-copy strong { display: block; font-size: 12px; font-weight: 500; line-height: 1.5; }
|
|
80
|
+
.popup-minimal .launcher-copy small { display: block; margin-top: 3px; color: var(--popup-muted); font-size: 11px; line-height: 1.5; }
|
|
81
|
+
.popup-minimal .launcher-toggle {
|
|
82
|
+
appearance: none;
|
|
83
|
+
-webkit-appearance: none;
|
|
84
|
+
position: relative;
|
|
85
|
+
width: 31px;
|
|
86
|
+
height: 19px;
|
|
87
|
+
margin: 0;
|
|
88
|
+
padding: 0;
|
|
89
|
+
flex: 0 0 auto;
|
|
90
|
+
border: 1px solid var(--popup-border);
|
|
91
|
+
border-radius: 20px;
|
|
92
|
+
background: var(--popup-surface);
|
|
93
|
+
cursor: pointer;
|
|
94
|
+
}
|
|
95
|
+
.popup-minimal .launcher-toggle::after { content: ""; position: absolute; top: 2px; left: 2px; width: 13px; height: 13px; border-radius: 50%; background: var(--popup-muted); transition: transform 130ms ease; }
|
|
96
|
+
.popup-minimal .launcher-toggle:checked { border-color: var(--popup-green); background: var(--popup-green); }
|
|
97
|
+
.popup-minimal .launcher-toggle:checked::after { background: var(--popup-on-green); transform: translateX(12px); }
|
|
98
|
+
.popup-minimal .launcher-toggle:disabled { cursor: default; opacity: .5; }
|
|
99
|
+
.popup-minimal .popup-note { margin: 0; padding: 11px 18px; border-top: 1px solid var(--popup-border); color: var(--popup-muted); font-size: 11px; line-height: 1.6; overflow-wrap: anywhere; }
|
|
100
|
+
.popup-minimal .popup-note[role="alert"] { color: var(--popup-danger); }
|
|
101
|
+
.popup-minimal .install { margin: 0; padding: 14px 18px 16px; border: 0; border-top: 1px solid var(--popup-border); border-radius: 0; background: var(--popup-surface); }
|
|
102
|
+
.popup-minimal .install > strong { font-size: 12px; font-weight: 500; }
|
|
103
|
+
.popup-minimal .install p { margin: 6px 0 0; color: var(--popup-muted); font-size: 11px; line-height: 1.6; }
|
|
104
|
+
.popup-minimal .install code { display: block; margin: 10px 0; padding: 9px; max-height: 120px; overflow: auto; border: 1px solid var(--popup-border); border-radius: 6px; color: var(--popup-text); background: var(--popup-bg); white-space: pre-wrap; overflow-wrap: anywhere; font: 11px/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
|
105
|
+
.popup-minimal .copy-command { appearance: none; width: auto; min-height: 29px; margin: 0; padding: 5px 8px; border: 1px solid var(--popup-border); border-radius: 6px; background: var(--popup-bg); color: var(--popup-text); font: inherit; font-size: 11px; font-weight: 500; cursor: pointer; }
|
|
106
|
+
.popup-minimal .copy-command:hover { background: var(--popup-surface); border-color: var(--popup-muted); transform: none; }
|
|
107
|
+
.popup-minimal .copy-command:disabled { opacity: .55; cursor: default; }
|
|
108
|
+
.popup-minimal button:focus-visible, .popup-minimal input:focus-visible { outline: 2px solid var(--popup-green); outline-offset: 3px; }
|
|
109
|
+
.popup-minimal [hidden] { display: none !important; }
|
|
110
|
+
@media (prefers-reduced-motion: reduce) { .popup-minimal .launcher-toggle::after { transition: none; } }
|
|
@@ -175,7 +175,8 @@ function convertToolChoice(value, context, launch) {
|
|
|
175
175
|
}
|
|
176
176
|
|
|
177
177
|
function applyAnthropicThinking(body, requestBody, launch, maxTokens) {
|
|
178
|
-
|
|
178
|
+
// The captured panel choice wins over a model-generated request default.
|
|
179
|
+
const effort = text(launch.reasoningEffort || requestBody?.reasoning?.effort).toLowerCase();
|
|
179
180
|
if (!effort || ['none', 'off', 'disabled'].includes(effort) || launch.anthropicThinkingMode === 'none') {
|
|
180
181
|
return false;
|
|
181
182
|
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { refreshCodexRuntimeEnv } = require('./nativeEnvironment');
|
|
4
|
+
const { getCodexRuntimeIdentityFromEnv, compareCodexVersions, buildCodexRuntimeEvent } = require('./codexRuntimeIdentity');
|
|
5
|
+
const { logDebug } = require('./debugLog');
|
|
6
|
+
|
|
7
|
+
const UPGRADE_CODE = 'codex_model_requires_newer_cli';
|
|
8
|
+
const STOP_CODES = new Set(['codex_cancelled', 'codex_process_stop_unconfirmed', 'thread_resume_failed']);
|
|
9
|
+
|
|
10
|
+
function rejectedModel(error, expectedModel) {
|
|
11
|
+
if (!error || STOP_CODES.has(error.code)) return '';
|
|
12
|
+
let current = error, inheritedStatus = 0;
|
|
13
|
+
for (let depth = 0; depth < 4 && current && typeof current === 'object'; depth++) {
|
|
14
|
+
const detail = current.error && typeof current.error === 'object' ? current.error : current;
|
|
15
|
+
const status = Number(current.status || current.statusCode || inheritedStatus);
|
|
16
|
+
const type = detail.type || detail.code;
|
|
17
|
+
const message = String(detail.message || current.message || '');
|
|
18
|
+
const match = /^The ['"]([^'"]+)['"] model requires a newer version of Codex\b/i.exec(message.trim());
|
|
19
|
+
if (status === 400 && type === 'invalid_request_error' && match) {
|
|
20
|
+
return !expectedModel || match[1] === expectedModel ? match[1] : '';
|
|
21
|
+
}
|
|
22
|
+
inheritedStatus = status;
|
|
23
|
+
if (message.length <= 12000 && message.trim().startsWith('{')) {
|
|
24
|
+
try { current = JSON.parse(message); continue; } catch (_) {}
|
|
25
|
+
}
|
|
26
|
+
if (detail !== current) current = detail;
|
|
27
|
+
else break;
|
|
28
|
+
}
|
|
29
|
+
return '';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function formatModelUpgradeError(error, env, options = {}) {
|
|
33
|
+
if (error?.code === UPGRADE_CODE) return error;
|
|
34
|
+
const model = rejectedModel(error, options.model);
|
|
35
|
+
if (!model) return null;
|
|
36
|
+
const identity = getCodexRuntimeIdentityFromEnv(env);
|
|
37
|
+
const selected = identity.selected || {};
|
|
38
|
+
const version = selected.version || env.CODEX_OVERLEAF_CODEX_VERSION || 'unknown';
|
|
39
|
+
const pinned = identity.selectedBy === 'explicit-path' || identity.selectedBy === 'legacy-path';
|
|
40
|
+
const chinese = /^zh\b/i.test(String(options.locale || ''));
|
|
41
|
+
const message = chinese
|
|
42
|
+
? '模型 ' + model + ' 要求更新的 Codex 运行时。本次使用 CLI ' + version + '。'
|
|
43
|
+
+ (pinned ? '当前 CLI 路径已手动固定,请更新该安装或调整固定路径后重试。'
|
|
44
|
+
: options.retried ? '切换本机较新版本后仍被拒绝,请更新 Codex 后重试。'
|
|
45
|
+
: '未找到可自动切换的更新版本,请更新 Codex 后重试。')
|
|
46
|
+
: 'Model ' + model + ' requires a newer Codex runtime. This task used CLI ' + version + '. '
|
|
47
|
+
+ (pinned ? 'The CLI path is pinned. Update that installation or change the configured path, then retry.'
|
|
48
|
+
: options.retried ? 'The newer local CLI was also rejected. Update Codex and retry.'
|
|
49
|
+
: 'No newer local CLI was available for automatic recovery. Update Codex and retry.');
|
|
50
|
+
return Object.assign(new Error(message), {
|
|
51
|
+
code: UPGRADE_CODE,
|
|
52
|
+
details: {
|
|
53
|
+
model, codexVersion: version, codexSource: selected.source || '',
|
|
54
|
+
codexPath: selected.displayPath || selected.path || '',
|
|
55
|
+
pinned, recoveryAttempted: options.retried === true
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// This runner is used only for the isolated, read-only style-generation job.
|
|
61
|
+
// Its model/provider/input remain unchanged; the one retry changes only CLI env.
|
|
62
|
+
function createRecoveringStyleRunner(options) {
|
|
63
|
+
let currentEnv = options.env;
|
|
64
|
+
let retried = false;
|
|
65
|
+
return async function run(input) {
|
|
66
|
+
if (input.signal?.aborted) throw input.signal.reason || Object.assign(new Error('Cancelled'), { code: 'codex_cancelled' });
|
|
67
|
+
try {
|
|
68
|
+
return await options.execute({ ...input, env: currentEnv });
|
|
69
|
+
} catch (error) {
|
|
70
|
+
if (input.signal?.aborted || !rejectedModel(error, input.model)) throw error;
|
|
71
|
+
const previous = getCodexRuntimeIdentityFromEnv(currentEnv);
|
|
72
|
+
let refreshed = currentEnv;
|
|
73
|
+
try { refreshed = refreshCodexRuntimeEnv(currentEnv, { force: true }); }
|
|
74
|
+
catch (_) { /* Keep the original failure if discovery itself is unavailable. */ }
|
|
75
|
+
const next = getCodexRuntimeIdentityFromEnv(refreshed);
|
|
76
|
+
const newer = next.selected?.path && compareCodexVersions(
|
|
77
|
+
next.selected.version, previous.selected?.version || ''
|
|
78
|
+
) > 0;
|
|
79
|
+
if (!retried && newer) {
|
|
80
|
+
retried = true;
|
|
81
|
+
currentEnv = refreshed;
|
|
82
|
+
if (input.signal?.aborted) throw input.signal.reason || Object.assign(new Error('Cancelled'), { code: 'codex_cancelled' });
|
|
83
|
+
logDebug('codex.runtime.model_retry_started', {
|
|
84
|
+
model: input.model, previousVersion: previous.selected?.version || '',
|
|
85
|
+
selectedVersion: next.selected.version, source: next.selected.source
|
|
86
|
+
});
|
|
87
|
+
const runtimeEvent = buildCodexRuntimeEvent(currentEnv);
|
|
88
|
+
if (runtimeEvent && typeof options.emit === 'function') options.emit(runtimeEvent);
|
|
89
|
+
try {
|
|
90
|
+
const result = await options.execute({ ...input, env: currentEnv });
|
|
91
|
+
logDebug('codex.runtime.model_retry_completed', { model: input.model, selectedVersion: next.selected.version });
|
|
92
|
+
return result;
|
|
93
|
+
} catch (retryError) {
|
|
94
|
+
if (input.signal?.aborted) throw retryError;
|
|
95
|
+
throw formatModelUpgradeError(retryError, currentEnv, {
|
|
96
|
+
model: input.model, locale: options.locale, retried: true
|
|
97
|
+
}) || retryError;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
throw formatModelUpgradeError(error, currentEnv, {
|
|
101
|
+
model: input.model, locale: options.locale, retried
|
|
102
|
+
}) || error;
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
module.exports = { createRecoveringStyleRunner, formatModelUpgradeError };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const { truncateText } = require('./debugLog');
|
|
4
|
+
const { formatOverleafWorkspaceRules } = require('./overleafWorkspaceRules');
|
|
4
5
|
|
|
5
6
|
const PROJECT_CUSTOM_INSTRUCTIONS_MAX_CHARS = 12000;
|
|
6
7
|
const NATIVE_MESSAGE_PROMPT_MAX_CHARS = 1024 * 1024;
|
|
@@ -32,6 +33,7 @@ function buildCodexTurnPrompt(options = {}) {
|
|
|
32
33
|
`- Project: ${context.projectKey || context.projectId || 'unknown'}`,
|
|
33
34
|
'- The local workspace was synced from Overleaf immediately before this turn.',
|
|
34
35
|
'- If the recent session history conflicts with the files in the workspace, trust the files.',
|
|
36
|
+
...(isSkillInstallerInvocation(context.skillInvocation) ? [] : ['', formatOverleafWorkspaceRules()]),
|
|
35
37
|
'',
|
|
36
38
|
'Project location citation rules:',
|
|
37
39
|
formatProjectLocationCitationRules(),
|
|
@@ -26,8 +26,8 @@ function createProviderLaunch({ profile, secret = '', modelId, wireApi, reasonin
|
|
|
26
26
|
wireApi,
|
|
27
27
|
upstreamResponseMode: resolvedResponseMode === 'buffered' ? 'buffered' : 'streaming',
|
|
28
28
|
requestTimeoutMs: profile.requestTimeoutMs,
|
|
29
|
-
reasoningAdapter: profile.reasoningAdapter || 'auto',
|
|
30
|
-
reasoningCapability: profile.reasoningCapability || 'auto',
|
|
29
|
+
reasoningAdapter: model.reasoningAdapter || profile.reasoningAdapter || 'auto',
|
|
30
|
+
reasoningCapability: model.reasoningCapability || profile.reasoningCapability || 'auto',
|
|
31
31
|
reasoningEffort,
|
|
32
32
|
reasoningEfforts: model.reasoningEfforts?.length
|
|
33
33
|
? model.reasoningEfforts.slice()
|
|
@@ -50,7 +50,7 @@ function createProviderLaunch({ profile, secret = '', modelId, wireApi, reasonin
|
|
|
50
50
|
anthropicThinkingMode: profile.anthropicThinkingMode || 'budget',
|
|
51
51
|
anthropicPromptCaching: profile.anthropicPromptCaching === true,
|
|
52
52
|
impersonateClaudeCode: profile.impersonateClaudeCode === true,
|
|
53
|
-
maxOutputTokens: profile.maxOutputTokens || 65536,
|
|
53
|
+
maxOutputTokens: model.maxOutputTokens || profile.maxOutputTokens || 65536,
|
|
54
54
|
apiKey: secret
|
|
55
55
|
});
|
|
56
56
|
}
|