codex-overleaf-link 2.5.0 → 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 +38 -26
- package/README.zh-CN.md +39 -27
- package/extension/bootstrap/background.js +52 -9
- package/extension/bootstrap/manifest.template.json +1 -1
- package/extension/bootstrap/popup.html +1 -0
- package/extension/bootstrap/popupFallback.js +55 -0
- package/extension/bootstrap/updateStatus.js +1 -0
- package/extension/src/background.js +206 -53
- package/extension/src/backgroundBootstrapMigration.js +181 -0
- package/extension/src/backgroundSharedSessions.js +74 -14
- package/extension/src/backgroundUpdateCoordinator.js +118 -21
- package/extension/src/backgroundUpdateSafety.js +173 -0
- package/extension/src/content/activeTurnControl.js +8 -2
- package/extension/src/content/applyResultFormatters.js +46 -73
- package/extension/src/content/assetTransferBroker.js +72 -14
- package/extension/src/content/composerAttachments.js +93 -45
- package/extension/src/content/composerPanel.js +18 -0
- package/extension/src/content/contentRuntime.js +661 -676
- package/extension/src/content/diagnosticsController.js +122 -96
- package/extension/src/content/diagnosticsExport.js +19 -5
- package/extension/src/content/diagnosticsPanel.js +30 -0
- package/extension/src/content/directoryCleanupRecovery.js +54 -0
- package/extension/src/content/generated/content.bundle.js +6879 -2786
- package/extension/src/content/generated/content.bundle.meta.json +11 -3
- package/extension/src/content/globalPreferencesController.js +1 -1
- package/extension/src/content/legacyGlobalRegistry.js +6 -0
- package/extension/src/content/localSkillsPanel.js +102 -12
- package/extension/src/content/markdownText.js +5 -6
- package/extension/src/content/modelPicker.js +7 -4
- 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 +15 -2
- package/extension/src/content/panelMaintenance.js +40 -12
- package/extension/src/content/panelRenderer.js +6 -0
- 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 +46 -8
- package/extension/src/content/providerSettingsDialog.js +71 -13
- package/extension/src/content/recentProjects.js +11 -5
- package/extension/src/content/runActivitySummary.js +40 -6
- package/extension/src/content/runCompletionMeta.js +344 -0
- package/extension/src/content/runController.js +37 -14
- package/extension/src/content/runFailureNotice.js +21 -12
- package/extension/src/content/runGuidanceController.js +72 -27
- package/extension/src/content/runGuidanceView.js +59 -10
- package/extension/src/content/runQueueScheduler.js +148 -42
- package/extension/src/content/runRecoveryActions.js +146 -0
- package/extension/src/content/runResultActions.js +8 -125
- package/extension/src/content/runReviewController.js +574 -0
- package/extension/src/content/runScrollLayout.js +21 -2
- package/extension/src/content/runTimelineView.js +146 -153
- package/extension/src/content/scopedPersistencePanelState.js +51 -6
- package/extension/src/content/selectionContextView.js +1 -1
- 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/settingsPanel.js +7 -3
- package/extension/src/content/settingsWorkbench.js +5 -0
- package/extension/src/content/sharedSessionViewSync.js +45 -8
- package/extension/src/content/updateIdle.js +4 -1
- package/extension/src/content/updateNotice.js +60 -8
- package/extension/src/content/updateSafetyReceiver.js +58 -0
- package/extension/src/content/writebackController.js +53 -4
- package/extension/src/content/writebackOrchestrator.js +82 -73
- package/extension/src/content/writingStyleSettings.js +35 -11
- package/extension/src/page/binaryAssetUploader.js +136 -14
- package/extension/src/page/fileMover.js +256 -0
- package/extension/src/page/ownedDirectoryCleanup.js +94 -0
- package/extension/src/page/referenceProjects.js +1 -0
- package/extension/src/page/reviewContext.js +113 -0
- package/extension/src/page/saveState.js +6 -4
- package/extension/src/page/snapshotRouter.js +84 -39
- package/extension/src/page/textFileCreator.js +105 -25
- package/extension/src/page/trackedChangeCapture.js +12 -2
- package/extension/src/page/trackedChangeOwnership.js +19 -1
- package/extension/src/page/trackedChangeReplay.js +41 -21
- package/extension/src/page/trackedChangesLifecycle.js +217 -199
- package/extension/src/page/treeOperations.js +7 -10
- package/extension/src/page/updateSafetyProbe.js +41 -0
- package/extension/src/page/writebackReceiptJournal.js +2 -0
- package/extension/src/page/writebackRouter.js +80 -79
- package/extension/src/pageBridge.js +19 -3
- package/extension/src/popup.js +62 -10
- package/extension/src/shared/agentTranscript.js +23 -0
- package/extension/src/shared/auditRecords.js +2 -0
- package/extension/src/shared/compatibility.js +22 -6
- package/extension/src/shared/compileAdapter.js +79 -57
- package/extension/src/shared/composerAttachmentDraft.js +151 -0
- package/extension/src/shared/directoryCleanupProof.js +43 -0
- package/extension/src/shared/failureReasons.js +309 -3
- package/extension/src/shared/globalPreferences.js +30 -13
- package/extension/src/shared/governanceRules.js +4 -37
- package/extension/src/shared/i18n.js +298 -2
- package/extension/src/shared/managedUpdateProjection.js +2 -2
- package/extension/src/shared/nativeRequestIdentity.js +1 -0
- package/extension/src/shared/pageRpcContract.js +5 -4
- package/extension/src/shared/projectFiles.js +21 -44
- package/extension/src/shared/providerProfiles.js +5 -3
- package/extension/src/shared/runInputQueue.js +48 -5
- package/extension/src/shared/selectionContext.js +12 -3
- package/extension/src/shared/sessionState.js +72 -27
- package/extension/src/shared/settlementFacts.js +10 -2
- package/extension/src/shared/sharedSessionBridge.js +37 -14
- package/extension/src/shared/sharedSessionTransfer.js +140 -0
- package/extension/src/shared/staleGuard.js +118 -13
- package/extension/src/shared/storageDb.js +58 -26
- package/extension/src/shared/storageMigration.js +71 -111
- package/extension/src/shared/storageRunActions.js +209 -26
- package/extension/src/shared/subagentActivityModel.js +1 -1
- package/extension/src/shared/undoOperations.js +136 -13
- package/extension/src/shared/updateConsent.js +6 -4
- package/extension/src/shared/updateRuntimeIdentity.js +1 -1
- package/extension/src/shared/writebackIntent.js +16 -0
- package/extension/src/shared/writebackOperationEvidence.js +4 -15
- package/extension/src/shared/writebackSettlement.js +38 -38
- package/extension/styles/panel.css +19 -5
- package/native-host/src/anthropicBridgeRequest.js +4 -2
- 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/codexPromptAssembly.js +31 -12
- package/native-host/src/codexProviderTest.js +24 -26
- package/native-host/src/codexSessionRunner.js +110 -183
- package/native-host/src/codexSessionTiming.js +18 -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 +110 -35
- 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/nativeHelperLifecycle.js +21 -0
- package/native-host/src/nativeHostRegistration.js +33 -0
- package/native-host/src/nativeRunLifecycle.js +71 -0
- package/native-host/src/processStopBarrier.js +42 -7
- package/native-host/src/projectPathPlatform.js +30 -0
- package/native-host/src/providerHttp.js +80 -0
- package/native-host/src/providerProfile.js +4 -2
- package/native-host/src/providerReasoning.js +2 -7
- package/native-host/src/providerRuntime.js +1 -0
- package/native-host/src/providerStore.js +72 -14
- package/native-host/src/responsesPassthroughBridge.js +266 -52
- package/native-host/src/runtimeInstaller.js +21 -1
- package/native-host/src/selectionScope.js +36 -8
- package/native-host/src/subagentAdmission.js +26 -0
- package/native-host/src/subagentBroker.js +79 -66
- package/native-host/src/subagentTelemetry.js +19 -10
- package/native-host/src/subagentWorkspacePath.js +5 -2
- package/native-host/src/taskRunnerRuntime.js +77 -54
- package/native-host/src/tomlStatements.js +140 -0
- package/native-host/src/updateManager.js +297 -39
- package/native-host/src/writingStyleRuntime.js +57 -29
- package/native-host/src/writingStyleStore.js +73 -0
- package/package.json +1 -1
- package/scripts/install-managed.mjs +1 -0
|
@@ -12,6 +12,121 @@
|
|
|
12
12
|
|
|
13
13
|
const MESSAGES = {
|
|
14
14
|
en: {
|
|
15
|
+
failureReason_base_file_missing_at_start_user: "A file needed for this task was missing during the initial project read.",
|
|
16
|
+
failureReason_base_file_missing_at_start_next: "Refresh project context and rerun.",
|
|
17
|
+
failureReason_target_file_missing_path_user: "The change did not include a target file path.",
|
|
18
|
+
failureReason_target_file_missing_path_next: "Retry after regenerating the change; report a bug if repeated.",
|
|
19
|
+
failureReason_target_file_focus_lost_user: "Target file became active, then focus switched before the write landed.",
|
|
20
|
+
failureReason_target_file_focus_lost_next: "Avoid switching files during writeback and retry.",
|
|
21
|
+
failureReason_jump_target_not_resolved_user: "A line/position link could not map to an editor range.",
|
|
22
|
+
failureReason_jump_target_not_resolved_next: "Open the file manually and inspect the referenced line.",
|
|
23
|
+
failureReason_missing_base_file_user: "A write safety check needed a base file that is missing from the run snapshot.",
|
|
24
|
+
failureReason_missing_base_file_next: "Refresh project context and rerun.",
|
|
25
|
+
failureReason_patch_anchor_ambiguous_user: "The edit anchor matches multiple locations.",
|
|
26
|
+
failureReason_patch_anchor_ambiguous_next: "Narrow the request or select a smaller region.",
|
|
27
|
+
failureReason_delete_confirmation_missing_user: "A destructive delete was not confirmed.",
|
|
28
|
+
failureReason_delete_confirmation_missing_next: "Confirm the delete explicitly if intended.",
|
|
29
|
+
failureReason_binary_write_blocked_user: "Codex tried to write unsupported binary content.",
|
|
30
|
+
failureReason_binary_write_blocked_next: "Upload the file manually or attach a supported text file.",
|
|
31
|
+
failureReason_write_post_read_failed_user: "Codex could not read the file after writing.",
|
|
32
|
+
failureReason_write_post_read_failed_next: "Check Overleaf manually, then refresh and retry.",
|
|
33
|
+
failureReason_file_tree_verification_failed_user: "Create/delete/rename/move did not appear in the file tree as expected.",
|
|
34
|
+
failureReason_file_tree_verification_failed_next: "Inspect the file tree and retry if needed.",
|
|
35
|
+
failureReason_source_zip_unavailable_user: "The project could not be checked before uploading this file.",
|
|
36
|
+
failureReason_source_zip_unavailable_next: "Retry sync; only missing files will be uploaded.",
|
|
37
|
+
failureReason_file_upload_unconfirmed_user: "The file was submitted, but its saved content is not yet confirmed.",
|
|
38
|
+
failureReason_file_upload_unconfirmed_next: "Check the file before retrying; matching content will not be uploaded twice.",
|
|
39
|
+
failureReason_subagent_unfinished_output_user: "A subagent stopped before finishing this file; the main agent must review and adopt it.",
|
|
40
|
+
failureReason_subagent_unfinished_output_next: "Have the main agent complete and adopt the pending file.",
|
|
41
|
+
failureReason_subagent_unauthorized_edit_user: "A file changed outside the subagent ownership boundary and was not synced.",
|
|
42
|
+
failureReason_subagent_unauthorized_edit_next: "Review the ownership violation; it cannot be cleared through output adoption.",
|
|
43
|
+
failureReason_reviewing_enable_failed_user: "Codex could not enable Reviewing when it needed to.",
|
|
44
|
+
failureReason_reviewing_enable_failed_next: "Enable Reviewing manually or retry.",
|
|
45
|
+
failureReason_reviewing_disable_failed_user: "Codex could not switch to Editing / no-trace mode.",
|
|
46
|
+
failureReason_reviewing_disable_failed_next: "Switch to Editing manually, wait briefly, then retry.",
|
|
47
|
+
failureReason_tracked_changes_created_unexpectedly_user: "A replay intended to be untracked created Track Changes.",
|
|
48
|
+
failureReason_tracked_changes_created_unexpectedly_next: "Inspect Overleaf Reviewing and decide whether to accept or reject.",
|
|
49
|
+
failureReason_tracked_change_nodes_not_identified_user: "Codex wrote while Reviewing was enabled but cannot map generated tracked-change nodes.",
|
|
50
|
+
failureReason_tracked_change_nodes_not_identified_next: "Use Overleaf review tools manually; automatic tracked undo is disabled.",
|
|
51
|
+
failureReason_undo_preflight_content_drift_user: "Current content no longer matches this run's written content.",
|
|
52
|
+
failureReason_undo_preflight_content_drift_next: "Review manual edits; Codex did not undo to avoid removing them.",
|
|
53
|
+
failureReason_undo_reviewing_restore_unverified_user: "Undo completed but previous Reviewing state was not verified afterward.",
|
|
54
|
+
failureReason_undo_reviewing_restore_unverified_next: "Check Overleaf Reviewing/Editing mode manually.",
|
|
55
|
+
failureReason_accept_preflight_content_drift_user: "Content drifted from this run's writeback before accept.",
|
|
56
|
+
failureReason_accept_preflight_content_drift_next: "Retry Accept changes after reviewing current content.",
|
|
57
|
+
failureReason_accept_replay_created_tracked_changes_user: "Replay created tracked changes, so accept cannot be proven clean.",
|
|
58
|
+
failureReason_accept_replay_created_tracked_changes_next: "Review remaining tracked changes manually.",
|
|
59
|
+
failureReason_native_protocol_incompatible_user: "Native host version or capabilities do not match the extension.",
|
|
60
|
+
failureReason_native_protocol_incompatible_next: "Update the native host.",
|
|
61
|
+
failureReason_provider_revision_conflict_user: "The active model provider changed after this tab loaded it.",
|
|
62
|
+
failureReason_provider_revision_conflict_next: "Refresh the provider configuration and retry.",
|
|
63
|
+
failureReason_provider_not_found_user: "The active model provider no longer exists.",
|
|
64
|
+
failureReason_provider_not_found_next: "Select Built-in Codex or another provider.",
|
|
65
|
+
failureReason_provider_model_not_configured_user: "The selected model is not configured for the active provider.",
|
|
66
|
+
failureReason_provider_model_not_configured_next: "Add or select a model in Model Providers.",
|
|
67
|
+
failureReason_provider_protocol_unverified_user: "The provider API protocol has not been verified.",
|
|
68
|
+
failureReason_provider_protocol_unverified_next: "Run Test connection, save the provider, and retry.",
|
|
69
|
+
failureReason_provider_auth_rejected_user: "The provider rejected the configured API key.",
|
|
70
|
+
failureReason_provider_auth_rejected_next: "Replace the API key and test the connection.",
|
|
71
|
+
failureReason_provider_model_not_found_user: "The provider could not find the configured model.",
|
|
72
|
+
failureReason_provider_model_not_found_next: "Correct the model ID and test the connection.",
|
|
73
|
+
failureReason_provider_protocol_incompatible_user: "The endpoint is incompatible with the selected API protocol.",
|
|
74
|
+
failureReason_provider_protocol_incompatible_next: "Select another protocol or use Auto detection.",
|
|
75
|
+
failureReason_provider_request_rejected_user: "The provider rejected the protocol probe request.",
|
|
76
|
+
failureReason_provider_request_rejected_next: "Review the model ID, reasoning controls, tool support, and request overrides.",
|
|
77
|
+
failureReason_provider_rate_limited_user: "The provider rate limit was reached.",
|
|
78
|
+
failureReason_provider_rate_limited_next: "Wait for the rate-limit window to recover and retry.",
|
|
79
|
+
failureReason_provider_connection_timeout_user: "The provider connection timed out.",
|
|
80
|
+
failureReason_provider_connection_timeout_next: "Check the endpoint and network, then retry.",
|
|
81
|
+
failureReason_provider_dns_failed_user: "The provider hostname could not be resolved.",
|
|
82
|
+
failureReason_provider_dns_failed_next: "Check the Base URL and DNS, then retry.",
|
|
83
|
+
failureReason_provider_tls_failed_user: "TLS verification failed for the provider endpoint.",
|
|
84
|
+
failureReason_provider_tls_failed_next: "Check the endpoint certificate and Base URL.",
|
|
85
|
+
failureReason_provider_response_invalid_user: "The provider returned an incompatible or invalid response.",
|
|
86
|
+
failureReason_provider_response_invalid_next: "Test the connection and verify protocol compatibility.",
|
|
87
|
+
failureReason_provider_store_unavailable_user: "The Native Host could not access provider configuration storage.",
|
|
88
|
+
failureReason_provider_store_unavailable_next: "Check local permissions and Native Host status.",
|
|
89
|
+
failureReason_provider_store_corrupt_user: "The provider configuration store is corrupt or inconsistent.",
|
|
90
|
+
failureReason_provider_store_corrupt_next: "Repair or rebuild the local provider configuration.",
|
|
91
|
+
failureReason_codex_result_parse_failed_user: "Codex output could not be parsed into operations.",
|
|
92
|
+
failureReason_codex_result_parse_failed_next: "Retry with a simpler request; report if repeated.",
|
|
93
|
+
failureReason_run_state_persist_failed_user: "Current run state could not be saved.",
|
|
94
|
+
failureReason_run_state_persist_failed_next: "Continue carefully; refresh may lose this run's recovery state.",
|
|
95
|
+
failureReason_receipt_persist_failed_user: "Writeback receipt could not be saved.",
|
|
96
|
+
failureReason_receipt_persist_failed_next: "Export/copy Technical Details before refreshing.",
|
|
97
|
+
deleteSessionNativeFailureDetail: "The local bridge did not confirm success.",
|
|
98
|
+
failureReason_missing_tracked_changes_user: "No matching Overleaf tracked-change records were found for this run. Codex did not undo with text patches.",
|
|
99
|
+
failureReason_tracked_change_file_open_failed_user: "Could not open the file to find this run's tracked changes. Check it in the Overleaf review panel.",
|
|
100
|
+
failureReason_tracked_change_reject_control_not_found_user: "Some tracked changes remain, but the matching Reject button was not found. Check them in the Overleaf review panel.",
|
|
101
|
+
failureReason_tracked_change_reject_not_confirmed_user: "Codex clicked Reject, but Overleaf still shows this tracked change. Check it in the Overleaf review panel.",
|
|
102
|
+
failureReason_tracked_change_accept_control_not_found_user: "Some tracked changes remain, but the matching Accept button was not found. Check them in the Overleaf review panel.",
|
|
103
|
+
failureReason_tracked_change_accept_not_confirmed_user: "Codex clicked Accept, but Overleaf still shows this tracked change. Check it in the Overleaf review panel.",
|
|
104
|
+
failureReason_tracked_change_editor_undo_open_failed_user: "Could not open the file for Overleaf native Undo.",
|
|
105
|
+
failureReason_tracked_change_editor_undo_current_mismatch_user: "The current content no longer matches this run's written content. Codex stopped native Undo to preserve later edits.",
|
|
106
|
+
failureReason_editor_undo_control_not_found_user: "Could not find Overleaf's editor Undo button to undo this run.",
|
|
107
|
+
failureReason_editor_undo_no_progress_user: "Codex clicked Overleaf Undo, but the file did not change.",
|
|
108
|
+
failureReason_editor_undo_max_iterations_user: "The file did not return to its pre-run content after repeated native Undo steps. Codex stopped to avoid undoing other edits.",
|
|
109
|
+
failureReason_tracked_change_undo_max_iterations_user: "Tracked changes are still left. Codex stopped to avoid rejecting unrelated edits.",
|
|
110
|
+
failureReason_tracked_change_undo_verify_open_failed_user: "Could not open the file after Undo to verify its content. Reload Overleaf and check it.",
|
|
111
|
+
failureReason_tracked_change_undo_verify_failed_user: "The file did not return to its pre-run content after rejecting tracked changes. Check this run's changes in the Overleaf review panel.",
|
|
112
|
+
failureReason_accept_missing_run_content_user: "The pre-write or post-write content is unavailable. Codex did not replay or accept the tracked changes.",
|
|
113
|
+
failureReason_accept_editor_undo_unavailable_user: "Native Undo and a safe checkpoint rollback are unavailable. Codex did not accept this run.",
|
|
114
|
+
failureReason_accept_editing_not_confirmed_user: "Codex could not confirm Overleaf Editing mode. It stopped replaying this run to avoid creating new tracked changes.",
|
|
115
|
+
failureReason_accept_editing_not_stable_user: "Overleaf Editing mode did not remain stable long enough for an untracked Accept replay. Codex did not replay this write.",
|
|
116
|
+
failureReason_accept_replay_rollback_missing_content_user: "Accept created fresh tracked changes, but rollback could not run because the pre-write or post-write content was unavailable.",
|
|
117
|
+
failureReason_review_scope_unavailable_user: "The native tracked-change scope could not be safely isolated. No review mutation was attempted. Check the changes individually in Overleaf Review.",
|
|
118
|
+
failureReason_native_untracked_undo_pending_changes_user: "This file has unresolved tracked changes. Undo without track changes was stopped to preserve them; no document changes were made.",
|
|
119
|
+
failureReason_native_untracked_undo_pending_changes_next: "Resolve the pending changes in Overleaf Review, then retry Undo. Switching to Editing does not clear existing tracked changes.",
|
|
120
|
+
failureReason_review_request_unverified_user: "The native review request could not be fully verified; some target changes may already be accepted. No text replay was attempted. Check Overleaf Review before retrying.",
|
|
121
|
+
failureReason_review_owner_disconnected_user: "The Undo owner disconnected; no further review writes were started.",
|
|
122
|
+
failureReason_review_deadline_exceeded_user: "The review time budget expired; no further review writes were started.",
|
|
123
|
+
failureReason_review_cancelled_user: "The review was cancelled; no further review writes were started.",
|
|
124
|
+
failureReason_review_project_changed_user: "The original review project is no longer active.",
|
|
125
|
+
failureReason_review_detail_next: "Check the remaining changes and run details in Overleaf before continuing.",
|
|
126
|
+
queuedInputGuideNotReady: "The active Codex turn is not ready for guidance.",
|
|
127
|
+
queuedInputGuideTurnChanged: "The active Codex turn changed before the guidance was delivered.",
|
|
128
|
+
queuedInputGuideEmpty: "Guidance input is empty.",
|
|
129
|
+
queuedInputGuideTooLarge: "Guidance input exceeds the 12000 character limit.",
|
|
15
130
|
resizePanel: 'Drag to resize the Codex panel. Double click to reset.',
|
|
16
131
|
codexActions: 'Codex actions',
|
|
17
132
|
refreshProbe: 'Refresh current file status. This will not sync or modify files.',
|
|
@@ -242,6 +357,14 @@
|
|
|
242
357
|
sensitiveConfirmMessage: 'Codex found possible sensitive content. Raw detected secrets are not shown here. Continue only if this project context may be sent to Codex.',
|
|
243
358
|
sensitiveConfirmRun: 'Run anyway',
|
|
244
359
|
localSkillsTitle: 'Skills',
|
|
360
|
+
skillsManageEntry: 'Manage skills',
|
|
361
|
+
codexLocalSkillsTitle: 'Local Codex skills',
|
|
362
|
+
codexLocalSkillsEmpty: 'No local Codex skills found.',
|
|
363
|
+
codexLocalSkillsSkipped: '{count} local skills could not be loaded.',
|
|
364
|
+
codexLocalSkillsLoadFailed: 'Could not load local Codex skills. Open Skills again to retry.',
|
|
365
|
+
codexLocalSkillsDisabled: 'Local Codex skills are disabled for runs.',
|
|
366
|
+
slashUseLocalSkillSubtitle: 'Local Codex · Use for this turn',
|
|
367
|
+
slashUseOverleafSkillSubtitle: 'Codex Overleaf · Use for this turn',
|
|
245
368
|
codexOverleafSkillsEmpty: 'No Codex Overleaf skills installed.',
|
|
246
369
|
codexOverleafSkillsDisabled: 'Codex Overleaf skills are disabled for runs.',
|
|
247
370
|
loadCodexLocalSkills: 'Load local Codex skills',
|
|
@@ -287,7 +410,7 @@
|
|
|
287
410
|
settingsWorkbenchOpenProject: 'Open a project to configure its settings.',
|
|
288
411
|
settingsWorkbenchClose: 'Close settings',
|
|
289
412
|
settingsWorkbenchEnableSkills: 'Enable Overleaf skills',
|
|
290
|
-
settingsWorkbenchSkillsHelp: 'Turn off
|
|
413
|
+
settingsWorkbenchSkillsHelp: 'Turn off Overleaf skills without changing individual selections.',
|
|
291
414
|
settingsWorkbenchSkillsList: 'Available skills',
|
|
292
415
|
settingsWorkbenchProviderOpenFailed: 'Could not open provider settings.',
|
|
293
416
|
themeLabel: 'Theme',
|
|
@@ -478,6 +601,12 @@
|
|
|
478
601
|
// Each entry follows the §9 catalog copy. {file} / {activeFile} interpolate from the failure record.
|
|
479
602
|
failureReason_partial_write_needs_review_user: 'Some operations wrote to Overleaf; others were skipped.',
|
|
480
603
|
failureReason_partial_write_needs_review_next: 'Review the written files; use "Undo written parts" to roll back if needed.',
|
|
604
|
+
failureReason_file_plan_confirmation_rejected_user: 'The complete file plan was cancelled; no part was applied.',
|
|
605
|
+
failureReason_file_plan_confirmation_rejected_next: 'Review the intended changes and start a new run if you want to apply them.',
|
|
606
|
+
failureReason_file_tree_controls_unavailable_user: 'Codex could not safely perform this file operation with the available Overleaf controls.',
|
|
607
|
+
failureReason_file_tree_controls_unavailable_next: 'Check the file operation in Overleaf before starting a new task.',
|
|
608
|
+
failureReason_delete_confirmation_rejected_user: 'The deletion was cancelled and was not applied. Other allowed changes in this run may still proceed.',
|
|
609
|
+
failureReason_delete_confirmation_rejected_next: 'Review the other changes. If deletion is still intended, request it in a new task.',
|
|
481
610
|
failureReason_codex_run_cancelled_user: 'The local Codex run was cancelled.',
|
|
482
611
|
failureReason_codex_run_cancelled_next: 'Start a new run when you are ready.',
|
|
483
612
|
failureReason_write_operation_failed_user: 'The editor write call for {file} failed.',
|
|
@@ -486,6 +615,13 @@
|
|
|
486
615
|
failureReason_write_timeout_next: 'Refresh Overleaf, then retry.',
|
|
487
616
|
failureReason_undo_operation_failed_user: 'The Overleaf undo or reject operation failed.',
|
|
488
617
|
failureReason_undo_operation_failed_next: 'Use Overleaf undo/review tools manually.',
|
|
618
|
+
failureReason_tracked_change_not_found_user: 'No matching tracked changes were found on the Overleaf page for this run. Codex did not undo with text patches.',
|
|
619
|
+
failureReason_snapshot_undo_current_mismatch_user: 'The current content or document identity does not match this run\'s undo checkpoint. Codex stopped Undo and kept the recovery data.',
|
|
620
|
+
failureReason_snapshot_undo_current_mismatch_next: 'Inspect the file and any later edits before trying Undo again.',
|
|
621
|
+
failureReason_snapshot_undo_open_failed_user: 'Codex could not open the file to restore its saved checkpoint.',
|
|
622
|
+
failureReason_snapshot_undo_open_failed_next: 'Open the file in Overleaf, wait for it to load, then retry Undo.',
|
|
623
|
+
failureReason_snapshot_undo_unavailable_user: 'The saved checkpoint is unavailable for this Undo. Codex kept the remaining recovery data.',
|
|
624
|
+
failureReason_snapshot_undo_unavailable_next: 'Inspect the file and the run details before continuing.',
|
|
489
625
|
failureReason_undo_partial_user: "Some of this run's writes were undone; others were skipped.",
|
|
490
626
|
failureReason_undo_partial_next: 'Review the remaining files and retry undo if it is safe.',
|
|
491
627
|
failureReason_accept_force_editing_failed_user: 'Codex could not enter a stable Editing mode to accept the changes.',
|
|
@@ -498,6 +634,14 @@
|
|
|
498
634
|
failureReason_project_snapshot_unavailable_next: 'Refresh Overleaf, then rerun the task.',
|
|
499
635
|
failureReason_selected_context_unresolved_user: 'Codex could not resolve the requested selection or context.',
|
|
500
636
|
failureReason_selected_context_unresolved_next: 'Select the target again or specify the file/section explicitly.',
|
|
637
|
+
failureReason_selection_scope_violation_user: 'A generated change exceeded the attached selection and was blocked.',
|
|
638
|
+
failureReason_selection_scope_violation_next: 'Select the intended region again and request only changes within it. Valid written parts can be undone.',
|
|
639
|
+
failureReason_governance_blocked_user: 'Project file rules blocked this write. Codex did not write the affected path.',
|
|
640
|
+
failureReason_governance_blocked_next: 'Review the project file rules in Settings > Protection & privacy, then request changes within the allowed paths.',
|
|
641
|
+
failureReason_governance_readonly_user: 'Project file rules marked a path in this operation read-only. Codex did not apply this operation.',
|
|
642
|
+
failureReason_governance_readonly_next: 'Review the read-only paths in Settings > Protection & privacy, then request changes within the allowed paths.',
|
|
643
|
+
failureReason_governance_writable_allowlist_user: 'A path in this operation is outside the configured writable paths. Codex did not apply this operation.',
|
|
644
|
+
failureReason_governance_writable_allowlist_next: 'Review the writable paths in Settings > Protection & privacy, then request changes within those paths.',
|
|
501
645
|
failureReason_target_file_not_found_user: 'Codex could not find {file} in this Overleaf project.',
|
|
502
646
|
failureReason_target_file_not_found_next: 'Check the file name/path in Overleaf and retry.',
|
|
503
647
|
failureReason_target_file_open_failed_user: 'Codex could not open {file} in Overleaf.',
|
|
@@ -532,6 +676,10 @@
|
|
|
532
676
|
failureReason_codex_timeout_next: 'Check whether local Codex is still running. If there is no progress, cancel and retry with smaller @context.',
|
|
533
677
|
failureReason_codex_output_limit_user: 'Local Codex output was too large, so the bridge stopped reading.',
|
|
534
678
|
failureReason_codex_output_limit_next: 'Retry with smaller @context, or open Technical Details to inspect the output limit.',
|
|
679
|
+
failureReason_codex_local_skill_unavailable_user: 'The selected local Codex skill is unavailable or disabled. This run did not start.',
|
|
680
|
+
failureReason_codex_local_skill_unavailable_next: 'Open Skills, select an available enabled skill, and submit again.',
|
|
681
|
+
failureReason_codex_local_skills_failed_user: 'Local Codex skills could not be loaded. This run did not start.',
|
|
682
|
+
failureReason_codex_local_skills_failed_next: 'Open Skills to reload the local catalog, then submit again.',
|
|
535
683
|
failureReason_codex_not_found_user: 'Codex CLI was not found on this machine.',
|
|
536
684
|
failureReason_codex_not_found_next: 'Confirm `codex` works in Terminal, then reinstall the native host or reload the extension.',
|
|
537
685
|
failureReason_storage_quota_exceeded_user: 'Browser storage quota was exceeded.',
|
|
@@ -613,6 +761,121 @@
|
|
|
613
761
|
recentProjects_badge_abandoned_after_navigation: 'Last run stopped after navigation'
|
|
614
762
|
},
|
|
615
763
|
zh: {
|
|
764
|
+
failureReason_base_file_missing_at_start_user: "首次读取项目时,缺少本任务所需的文件。",
|
|
765
|
+
failureReason_base_file_missing_at_start_next: "请刷新项目上下文后重新运行。",
|
|
766
|
+
failureReason_target_file_missing_path_user: "改动中未包含目标文件路径。",
|
|
767
|
+
failureReason_target_file_missing_path_next: "请重新生成改动后重试;若再次发生,请报告此问题。",
|
|
768
|
+
failureReason_target_file_focus_lost_user: "目标文件曾处于活动状态,但写入前焦点切换到了其他文件。",
|
|
769
|
+
failureReason_target_file_focus_lost_next: "写回期间请保持当前文件不变,然后重试。",
|
|
770
|
+
failureReason_jump_target_not_resolved_user: "无法将行号或位置链接对应到编辑器中的文本范围。",
|
|
771
|
+
failureReason_jump_target_not_resolved_next: "请手动打开文件,检查所引用的行。",
|
|
772
|
+
failureReason_missing_base_file_user: "写入安全检查所需的基准文件未包含在本轮快照中。",
|
|
773
|
+
failureReason_missing_base_file_next: "请刷新项目上下文后重新运行。",
|
|
774
|
+
failureReason_patch_anchor_ambiguous_user: "修改位置的定位文本匹配到了多处内容。",
|
|
775
|
+
failureReason_patch_anchor_ambiguous_next: "请缩小请求范围,或选择更小的文本区域。",
|
|
776
|
+
failureReason_delete_confirmation_missing_user: "删除操作尚未得到确认。",
|
|
777
|
+
failureReason_delete_confirmation_missing_next: "如果确实需要删除,请明确确认该操作。",
|
|
778
|
+
failureReason_binary_write_blocked_user: "Codex 尝试写入尚不支持的二进制内容。",
|
|
779
|
+
failureReason_binary_write_blocked_next: "请手动上传文件,或附上受支持的文本文件。",
|
|
780
|
+
failureReason_write_post_read_failed_user: "写入后,Codex 无法读取该文件。",
|
|
781
|
+
failureReason_write_post_read_failed_next: "请先在 Overleaf 检查文件,再刷新并重试。",
|
|
782
|
+
failureReason_file_tree_verification_failed_user: "新建、删除、重命名或移动的结果未按预期出现在文件树中。",
|
|
783
|
+
failureReason_file_tree_verification_failed_next: "请检查文件树,必要时再重试。",
|
|
784
|
+
failureReason_source_zip_unavailable_user: "上传此文件前,无法完成项目检查。",
|
|
785
|
+
failureReason_source_zip_unavailable_next: "请重试同步;仅会上传缺失的文件。",
|
|
786
|
+
failureReason_file_upload_unconfirmed_user: "文件已提交,但尚未确认其保存后的内容。",
|
|
787
|
+
failureReason_file_upload_unconfirmed_next: "重试前请检查文件;内容一致的文件不会重复上传。",
|
|
788
|
+
failureReason_subagent_unfinished_output_user: "子代理在完成此文件前已停止;主代理需要审阅并采纳该文件。",
|
|
789
|
+
failureReason_subagent_unfinished_output_next: "请由主代理完成并采纳待处理文件。",
|
|
790
|
+
failureReason_subagent_unauthorized_edit_user: "文件修改超出了子代理负责的范围,因此未同步。",
|
|
791
|
+
failureReason_subagent_unauthorized_edit_next: "请检查超出负责范围的修改;采纳输出无法解除此限制。",
|
|
792
|
+
failureReason_reviewing_enable_failed_user: "Codex 无法在需要时启用审阅模式。",
|
|
793
|
+
failureReason_reviewing_enable_failed_next: "请手动启用审阅模式,或重试。",
|
|
794
|
+
failureReason_reviewing_disable_failed_user: "Codex 无法切换到不留痕的编辑模式。",
|
|
795
|
+
failureReason_reviewing_disable_failed_next: "请手动切换到编辑模式,稍候再重试。",
|
|
796
|
+
failureReason_tracked_changes_created_unexpectedly_user: "原本应当不留痕的重放产生了留痕改动。",
|
|
797
|
+
failureReason_tracked_changes_created_unexpectedly_next: "请在 Overleaf 审阅面板检查,并决定接受或拒绝。",
|
|
798
|
+
failureReason_tracked_change_nodes_not_identified_user: "Codex 在审阅模式下完成了写入,但无法识别所生成的留痕记录。",
|
|
799
|
+
failureReason_tracked_change_nodes_not_identified_next: "请手动使用 Overleaf 审阅工具;自动留痕撤销当前不可用。",
|
|
800
|
+
failureReason_undo_preflight_content_drift_user: "当前内容已与本轮写入后的内容不一致。",
|
|
801
|
+
failureReason_undo_preflight_content_drift_next: "请检查后续手动编辑;Codex 未执行撤销,以免删除这些编辑。",
|
|
802
|
+
failureReason_undo_reviewing_restore_unverified_user: "撤销已完成,但未能确认原来的审阅状态已恢复。",
|
|
803
|
+
failureReason_undo_reviewing_restore_unverified_next: "请手动检查 Overleaf 的审阅或编辑模式。",
|
|
804
|
+
failureReason_accept_preflight_content_drift_user: "接受改动前,内容已偏离本轮写回的结果。",
|
|
805
|
+
failureReason_accept_preflight_content_drift_next: "请检查当前内容后,再重试接受改动。",
|
|
806
|
+
failureReason_accept_replay_created_tracked_changes_user: "重放产生了留痕改动,无法确认接受操作已无留痕地完成。",
|
|
807
|
+
failureReason_accept_replay_created_tracked_changes_next: "请手动检查剩余的留痕改动。",
|
|
808
|
+
failureReason_native_protocol_incompatible_user: "本地主机的版本或能力与扩展不匹配。",
|
|
809
|
+
failureReason_native_protocol_incompatible_next: "请更新本地主机。",
|
|
810
|
+
failureReason_provider_revision_conflict_user: "本标签页加载配置后,当前模型服务的配置已发生变化。",
|
|
811
|
+
failureReason_provider_revision_conflict_next: "请刷新模型服务配置后重试。",
|
|
812
|
+
failureReason_provider_not_found_user: "当前模型服务已不存在。",
|
|
813
|
+
failureReason_provider_not_found_next: "请选择内置 Codex 或其他模型服务。",
|
|
814
|
+
failureReason_provider_model_not_configured_user: "当前模型服务中未配置所选模型。",
|
|
815
|
+
failureReason_provider_model_not_configured_next: "请在模型服务设置中添加或选择模型。",
|
|
816
|
+
failureReason_provider_protocol_unverified_user: "模型服务的 API 协议尚未验证。",
|
|
817
|
+
failureReason_provider_protocol_unverified_next: "请测试连接并保存模型服务配置,然后重试。",
|
|
818
|
+
failureReason_provider_auth_rejected_user: "模型服务拒绝了所配置的 API 密钥。",
|
|
819
|
+
failureReason_provider_auth_rejected_next: "请更换 API 密钥并测试连接。",
|
|
820
|
+
failureReason_provider_model_not_found_user: "模型服务找不到所配置的模型。",
|
|
821
|
+
failureReason_provider_model_not_found_next: "请修正模型标识并测试连接。",
|
|
822
|
+
failureReason_provider_protocol_incompatible_user: "服务端点与所选 API 协议不兼容。",
|
|
823
|
+
failureReason_provider_protocol_incompatible_next: "请选择其他协议,或使用自动检测。",
|
|
824
|
+
failureReason_provider_request_rejected_user: "模型服务拒绝了协议探测请求。",
|
|
825
|
+
failureReason_provider_request_rejected_next: "请检查模型标识、推理设置、工具支持及自定义请求参数。",
|
|
826
|
+
failureReason_provider_rate_limited_user: "模型服务已达到请求频率限制。",
|
|
827
|
+
failureReason_provider_rate_limited_next: "请等待限流窗口恢复后重试。",
|
|
828
|
+
failureReason_provider_connection_timeout_user: "模型服务连接超时。",
|
|
829
|
+
failureReason_provider_connection_timeout_next: "请检查服务端点和网络,然后重试。",
|
|
830
|
+
failureReason_provider_dns_failed_user: "无法解析模型服务的主机名。",
|
|
831
|
+
failureReason_provider_dns_failed_next: "请检查基础 URL 和 DNS,然后重试。",
|
|
832
|
+
failureReason_provider_tls_failed_user: "模型服务端点的 TLS 验证失败。",
|
|
833
|
+
failureReason_provider_tls_failed_next: "请检查端点证书和基础 URL。",
|
|
834
|
+
failureReason_provider_response_invalid_user: "模型服务返回了不兼容或无效的响应。",
|
|
835
|
+
failureReason_provider_response_invalid_next: "请测试连接并确认协议兼容性。",
|
|
836
|
+
failureReason_provider_store_unavailable_user: "本地主机无法访问模型服务配置存储。",
|
|
837
|
+
failureReason_provider_store_unavailable_next: "请检查本地权限和本地主机状态。",
|
|
838
|
+
failureReason_provider_store_corrupt_user: "模型服务配置存储已损坏或不一致。",
|
|
839
|
+
failureReason_provider_store_corrupt_next: "请修复或重建本地模型服务配置。",
|
|
840
|
+
failureReason_codex_result_parse_failed_user: "无法将 Codex 输出解析为操作。",
|
|
841
|
+
failureReason_codex_result_parse_failed_next: "请使用更简单的请求重试;若再次发生,请报告此问题。",
|
|
842
|
+
failureReason_run_state_persist_failed_user: "无法保存当前运行状态。",
|
|
843
|
+
failureReason_run_state_persist_failed_next: "请谨慎继续;刷新可能导致本轮恢复状态丢失。",
|
|
844
|
+
failureReason_receipt_persist_failed_user: "无法保存写回回执。",
|
|
845
|
+
failureReason_receipt_persist_failed_next: "刷新前请导出或复制技术详情。",
|
|
846
|
+
deleteSessionNativeFailureDetail: "本地桥接程序未确认操作成功。",
|
|
847
|
+
failureReason_missing_tracked_changes_user: "这轮写入没有可识别的 Overleaf 留痕记录;Codex 没有执行文本补丁撤销。",
|
|
848
|
+
failureReason_tracked_change_file_open_failed_user: "无法打开文件来查找这轮写入的留痕记录;请在 Overleaf 审阅面板检查。",
|
|
849
|
+
failureReason_tracked_change_reject_control_not_found_user: "仍有留痕记录未处理,但未找到对应的拒绝按钮;请在 Overleaf 审阅面板检查。",
|
|
850
|
+
failureReason_tracked_change_reject_not_confirmed_user: "Codex 已点击拒绝,但 Overleaf 仍显示该留痕记录;请在审阅面板检查。",
|
|
851
|
+
failureReason_tracked_change_accept_control_not_found_user: "仍有留痕记录未处理,但未找到对应的接受按钮;请在 Overleaf 审阅面板检查。",
|
|
852
|
+
failureReason_tracked_change_accept_not_confirmed_user: "Codex 已点击接受,但 Overleaf 仍显示该留痕记录;请在审阅面板检查。",
|
|
853
|
+
failureReason_tracked_change_editor_undo_open_failed_user: "无法打开文件来执行 Overleaf 原生撤销。",
|
|
854
|
+
failureReason_tracked_change_editor_undo_current_mismatch_user: "当前内容与本轮写入后的内容不一致;Codex 已停止原生撤销,以保留后续编辑。",
|
|
855
|
+
failureReason_editor_undo_control_not_found_user: "未找到 Overleaf 编辑器的撤销按钮,无法撤销本轮改动。",
|
|
856
|
+
failureReason_editor_undo_no_progress_user: "Codex 已点击 Overleaf 撤销,但文件内容没有变化。",
|
|
857
|
+
failureReason_editor_undo_max_iterations_user: "经过多次原生撤销后,文件仍未恢复到本轮写入前的内容;Codex 已停止,以免撤销其他编辑。",
|
|
858
|
+
failureReason_tracked_change_undo_max_iterations_user: "仍有未处理的留痕记录;Codex 已停止,以免误拒绝其他编辑。",
|
|
859
|
+
failureReason_tracked_change_undo_verify_open_failed_user: "撤销后无法打开文件验证内容;请刷新 Overleaf 后检查。",
|
|
860
|
+
failureReason_tracked_change_undo_verify_failed_user: "拒绝留痕后,文件内容仍未恢复到写入前状态;请在 Overleaf 审阅面板检查本轮修改。",
|
|
861
|
+
failureReason_accept_missing_run_content_user: "缺少写入前或写入后的内容;Codex 未重放或接受留痕改动。",
|
|
862
|
+
failureReason_accept_editor_undo_unavailable_user: "原生撤销及安全的检查点回滚均不可用;Codex 未接受本轮改动。",
|
|
863
|
+
failureReason_accept_editing_not_confirmed_user: "无法确认 Overleaf 已进入编辑模式;Codex 已停止重放本轮改动,以免产生新的留痕。",
|
|
864
|
+
failureReason_accept_editing_not_stable_user: "Overleaf 编辑模式未保持稳定,无法无留痕地重放接受的改动;Codex 未重放此次写入。",
|
|
865
|
+
failureReason_accept_replay_rollback_missing_content_user: "接受改动时产生了新的留痕,但缺少写入前或写入后的内容,无法回滚。",
|
|
866
|
+
failureReason_review_scope_unavailable_user: "无法安全确认本轮原生留痕的范围;尚未尝试审阅写入。请在 Overleaf 审阅面板逐项检查。",
|
|
867
|
+
failureReason_native_untracked_undo_pending_changes_user: "此文件仍有未处理的留痕改动。为保留这些改动,本次无留痕撤销已停止,文档未改动。",
|
|
868
|
+
failureReason_native_untracked_undo_pending_changes_next: "请先在 Overleaf 审阅面板处理现有留痕,再重试撤销。切换到编辑模式不会清除已有留痕。",
|
|
869
|
+
failureReason_review_request_unverified_user: "原生审阅请求未能完全核实,部分目标改动可能已接受;未尝试文本重放。请先在 Overleaf 审阅面板检查,再决定是否重试。",
|
|
870
|
+
failureReason_review_owner_disconnected_user: "撤销操作的连接已断开;未再启动后续审阅写入。",
|
|
871
|
+
failureReason_review_deadline_exceeded_user: "审阅操作已超时;未再启动后续审阅写入。",
|
|
872
|
+
failureReason_review_cancelled_user: "审阅操作已取消;未再启动后续审阅写入。",
|
|
873
|
+
failureReason_review_project_changed_user: "原审阅项目已不再处于活动状态。",
|
|
874
|
+
failureReason_review_detail_next: "继续操作前,请在 Overleaf 检查剩余改动及运行详情。",
|
|
875
|
+
queuedInputGuideNotReady: "当前 Codex 轮次尚未准备好接收指导。",
|
|
876
|
+
queuedInputGuideTurnChanged: "指导送达前,当前 Codex 轮次已发生变化。",
|
|
877
|
+
queuedInputGuideEmpty: "指导内容为空。",
|
|
878
|
+
queuedInputGuideTooLarge: "指导内容超过 12000 字符上限。",
|
|
616
879
|
resizePanel: '拖动调整 Codex 面板宽度,双击恢复默认宽度',
|
|
617
880
|
codexActions: 'Codex 操作',
|
|
618
881
|
refreshProbe: '重新检测当前文件状态;不会同步或修改文件',
|
|
@@ -843,6 +1106,14 @@
|
|
|
843
1106
|
sensitiveConfirmMessage: 'Codex 发现了可能的敏感内容。这里不会显示原始密钥或秘密值。只有在确认可以把这些项目上下文发送给 Codex 时才继续。',
|
|
844
1107
|
sensitiveConfirmRun: '仍然运行',
|
|
845
1108
|
localSkillsTitle: '技能',
|
|
1109
|
+
skillsManageEntry: '管理技能',
|
|
1110
|
+
codexLocalSkillsTitle: 'Codex 本地技能',
|
|
1111
|
+
codexLocalSkillsEmpty: '没有找到 Codex 本地技能。',
|
|
1112
|
+
codexLocalSkillsSkipped: '有 {count} 个本地技能未能加载。',
|
|
1113
|
+
codexLocalSkillsLoadFailed: '无法加载 Codex 本地技能,请重新打开技能页重试。',
|
|
1114
|
+
codexLocalSkillsDisabled: '运行时已禁用 Codex 本地技能。',
|
|
1115
|
+
slashUseLocalSkillSubtitle: 'Codex 本地 · 本轮使用',
|
|
1116
|
+
slashUseOverleafSkillSubtitle: 'Codex Overleaf · 本轮使用',
|
|
846
1117
|
codexOverleafSkillsEmpty: '没有安装 Codex Overleaf 专属技能。',
|
|
847
1118
|
codexOverleafSkillsDisabled: '运行时已禁用 Codex Overleaf 专属技能。',
|
|
848
1119
|
loadCodexLocalSkills: '加载 Codex 本地技能',
|
|
@@ -888,7 +1159,7 @@
|
|
|
888
1159
|
settingsWorkbenchOpenProject: '进入项目后可配置项目设置。',
|
|
889
1160
|
settingsWorkbenchClose: '关闭设置',
|
|
890
1161
|
settingsWorkbenchEnableSkills: '启用 Overleaf 技能',
|
|
891
|
-
settingsWorkbenchSkillsHelp: '
|
|
1162
|
+
settingsWorkbenchSkillsHelp: '关闭 Overleaf 技能时,各项选择会保留。',
|
|
892
1163
|
settingsWorkbenchSkillsList: '可用技能',
|
|
893
1164
|
settingsWorkbenchProviderOpenFailed: '无法打开模型服务设置。',
|
|
894
1165
|
themeLabel: '主题',
|
|
@@ -1078,6 +1349,8 @@
|
|
|
1078
1349
|
// FailureReason 高优先级双语文案(设计规格 §15.4)。文案对应 §9 目录的英文 fallback。
|
|
1079
1350
|
failureReason_partial_write_needs_review_user: '部分操作已写入 Overleaf,其余被跳过。',
|
|
1080
1351
|
failureReason_partial_write_needs_review_next: '请检查已写入的文件;如需回滚,使用「撤销已写入部分」。',
|
|
1352
|
+
failureReason_file_plan_confirmation_rejected_user: '整份文件计划已取消,未应用任何部分。',
|
|
1353
|
+
failureReason_file_plan_confirmation_rejected_next: '请先审阅预期改动;需要应用时重新发起一轮任务。',
|
|
1081
1354
|
failureReason_codex_run_cancelled_user: '本地 Codex 任务已取消。',
|
|
1082
1355
|
failureReason_codex_run_cancelled_next: '准备好后可以重新发起一轮任务。',
|
|
1083
1356
|
failureReason_write_operation_failed_user: '对 {file} 的编辑器写入调用失败。',
|
|
@@ -1085,7 +1358,18 @@
|
|
|
1085
1358
|
failureReason_write_timeout_user: 'Overleaf 在超时前没有接受对 {file} 的写入。',
|
|
1086
1359
|
failureReason_write_timeout_next: '刷新 Overleaf 后重试。',
|
|
1087
1360
|
failureReason_undo_operation_failed_user: 'Overleaf 的撤销或拒绝操作失败。',
|
|
1361
|
+
failureReason_file_tree_controls_unavailable_user: 'Codex 无法通过当前可用的 Overleaf 控件安全执行此文件操作。',
|
|
1362
|
+
failureReason_file_tree_controls_unavailable_next: '请先在 Overleaf 中检查文件操作,再开始新任务。',
|
|
1363
|
+
failureReason_delete_confirmation_rejected_user: '删除已取消,未执行该删除;本轮其他获准改动仍可能继续。',
|
|
1364
|
+
failureReason_delete_confirmation_rejected_next: '请检查其他改动;若仍需删除,请在新任务中提出。',
|
|
1088
1365
|
failureReason_undo_operation_failed_next: '请手动使用 Overleaf 的撤销/审阅工具。',
|
|
1366
|
+
failureReason_tracked_change_not_found_user: '没有在 Overleaf 页面里找到这轮写入对应的留痕记录;Codex 没有用文本补丁伪撤销。',
|
|
1367
|
+
failureReason_snapshot_undo_current_mismatch_user: '当前内容或文档身份与本轮撤销检查点不一致;Codex 已停止撤销并保留恢复材料。',
|
|
1368
|
+
failureReason_snapshot_undo_current_mismatch_next: '请先检查文件及后续编辑,再决定是否重试撤销。',
|
|
1369
|
+
failureReason_snapshot_undo_open_failed_user: 'Codex 无法打开文件来恢复已保存的检查点。',
|
|
1370
|
+
failureReason_snapshot_undo_open_failed_next: '请在 Overleaf 中打开文件,等待加载完成后再重试撤销。',
|
|
1371
|
+
failureReason_snapshot_undo_unavailable_user: '本次撤销所需的检查点不可用;Codex 已保留剩余恢复材料。',
|
|
1372
|
+
failureReason_snapshot_undo_unavailable_next: '请先检查文件和本轮运行详情,再继续操作。',
|
|
1089
1373
|
failureReason_undo_partial_user: '本轮的部分写入已撤销,其余被跳过。',
|
|
1090
1374
|
failureReason_undo_partial_next: '检查剩余文件,确认安全后再重试撤销。',
|
|
1091
1375
|
failureReason_accept_force_editing_failed_user: 'Codex 未能进入稳定的 Editing 模式来接受改动。',
|
|
@@ -1098,6 +1382,14 @@
|
|
|
1098
1382
|
failureReason_project_snapshot_unavailable_next: '请刷新 Overleaf,然后重试本轮任务。',
|
|
1099
1383
|
failureReason_selected_context_unresolved_user: 'Codex 没能解析所选的内容或上下文。',
|
|
1100
1384
|
failureReason_selected_context_unresolved_next: '请重新选择目标,或者显式指定文件 / 区段。',
|
|
1385
|
+
failureReason_selection_scope_violation_user: '生成的一项改动超出了已附加的选区,已阻止写回。',
|
|
1386
|
+
failureReason_selection_scope_violation_next: '请重新选择目标范围,仅请求修改该范围。已写入的合法部分可撤销。',
|
|
1387
|
+
failureReason_governance_blocked_user: '项目文件规则阻止了此次写入。Codex 未写入受影响的路径。',
|
|
1388
|
+
failureReason_governance_blocked_next: '请在「设置 > 保护与隐私」中查看项目文件规则,然后请求修改允许写入的路径。',
|
|
1389
|
+
failureReason_governance_readonly_user: '项目文件规则将此操作涉及的路径标记为只读。Codex 未执行此操作。',
|
|
1390
|
+
failureReason_governance_readonly_next: '请在「设置 > 保护与隐私」中查看只读路径规则,然后请求修改允许写入的路径。',
|
|
1391
|
+
failureReason_governance_writable_allowlist_user: '此操作涉及的路径不在配置的可写路径范围内。Codex 未执行此操作。',
|
|
1392
|
+
failureReason_governance_writable_allowlist_next: '请在「设置 > 保护与隐私」中查看可写路径规则,然后请求修改允许范围内的路径。',
|
|
1101
1393
|
failureReason_target_file_not_found_user: 'Codex 在当前 Overleaf 项目中没有找到 {file}。',
|
|
1102
1394
|
failureReason_target_file_not_found_next: '请在 Overleaf 中核对文件名和路径后重试。',
|
|
1103
1395
|
failureReason_target_file_open_failed_user: 'Codex 没能在 Overleaf 中打开 {file}。',
|
|
@@ -1132,6 +1424,10 @@
|
|
|
1132
1424
|
failureReason_codex_timeout_next: '请检查本机 Codex 是否仍在运行;如果没有进展,可以中断后缩小 @context 再重试。',
|
|
1133
1425
|
failureReason_codex_output_limit_user: '本地 Codex 输出过长,桥接器停止读取。',
|
|
1134
1426
|
failureReason_codex_output_limit_next: '请缩小 @context 后重试,或在技术详情中查看输出限制。',
|
|
1427
|
+
failureReason_codex_local_skill_unavailable_user: '所选 Codex 本地技能不可用或已关闭,本轮没有启动。',
|
|
1428
|
+
failureReason_codex_local_skill_unavailable_next: '请打开技能页,选择可用且已启用的技能后重新提交。',
|
|
1429
|
+
failureReason_codex_local_skills_failed_user: 'Codex 本地技能未能加载,本轮没有启动。',
|
|
1430
|
+
failureReason_codex_local_skills_failed_next: '请打开技能页重新加载本地目录,然后重新提交。',
|
|
1135
1431
|
failureReason_codex_not_found_user: '本机没有找到 Codex CLI。',
|
|
1136
1432
|
failureReason_codex_not_found_next: '请确认终端里可以运行 `codex`,然后重新安装 native host 或刷新扩展后重试。',
|
|
1137
1433
|
failureReason_storage_quota_exceeded_user: '浏览器本地存储配额已超出。',
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
waiting: 'waiting_for_idle',
|
|
6
6
|
waiting_for_safe_point: 'waiting_for_idle',
|
|
7
7
|
awaiting_health_check: 'awaiting_health',
|
|
8
|
-
health_checking: 'awaiting_health'
|
|
8
|
+
health_checking: 'awaiting_health',
|
|
9
|
+
bootstrap_pending: 'awaiting_health'
|
|
9
10
|
});
|
|
10
|
-
|
|
11
11
|
const PHASES = Object.freeze([
|
|
12
12
|
'idle',
|
|
13
13
|
'up_to_date',
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
})(typeof window !== 'undefined' ? window : (typeof globalThis !== 'undefined' ? globalThis : this), function () {
|
|
6
6
|
'use strict';
|
|
7
7
|
|
|
8
|
-
var REVISION = '2026-
|
|
8
|
+
var REVISION = '2026-10-05-scope-correction-v42';
|
|
9
9
|
var METHODS = freezeCatalog({
|
|
10
10
|
initializeCapability: entry('bridge.initialize', 'control', 'none', 'default', false, 'none'),
|
|
11
11
|
probe: entry('bridge.probe', 'read', 'none', 'default', false, 'safe'),
|
|
@@ -20,12 +20,13 @@
|
|
|
20
20
|
ensureReviewing: entry('reviewing.enable', 'page_state', 'optional', 'default', true, 'idempotent'),
|
|
21
21
|
ensureEditing: entry('reviewing.disable', 'page_state', 'optional', 'default', true, 'idempotent'),
|
|
22
22
|
applyOperations: entry('document.write', 'document', 'required', 'writeback', true, 'no_retry'),
|
|
23
|
-
|
|
23
|
+
// Receipts settle already-dispatched writes after cancellation; their RPC deadlines still apply.
|
|
24
|
+
getWritebackReceipt: entry('writeback.receipt', 'read', 'required', 'default', false, 'safe'),
|
|
24
25
|
getSelectionContext: entry('editor.selection', 'read', 'required', 'default', true, 'safe'),
|
|
25
|
-
binaryUploadBegin: entry('asset.stage', 'cache', 'required', 'default',
|
|
26
|
+
binaryUploadBegin: entry('asset.stage', 'cache', 'required', 'default', true, 'no_retry'),
|
|
26
27
|
binaryUploadAppend: entry('asset.stage', 'cache', 'none', 'writeback', true, 'no_retry'),
|
|
27
28
|
binaryUploadCommit: entry('asset.write', 'document', 'required', 'writeback', true, 'no_retry'),
|
|
28
|
-
binaryUploadStatus: entry('asset.receipt', 'read', 'required', 'default',
|
|
29
|
+
binaryUploadStatus: entry('asset.receipt', 'read', 'required', 'default', false, 'safe'),
|
|
29
30
|
binaryUploadAbort: entry('asset.stage', 'cache', 'none', 'default', false, 'idempotent'),
|
|
30
31
|
jumpToPosition: entry('editor.navigate', 'navigation', 'required', 'default', false, 'idempotent'),
|
|
31
32
|
reconcileTrackedChangeCapture: entry('tracked_changes.read', 'read', 'required', 'default', false, 'safe'),
|
|
@@ -83,55 +83,31 @@
|
|
|
83
83
|
.replace(/^\/+/, '');
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
+
// Project metadata, ZIP names and operation paths are already literal names.
|
|
87
|
+
// Decoding here would alias e.g. "a%20b.tex" with "a b.tex".
|
|
86
88
|
function normalizeSafeProjectPath(value) {
|
|
87
|
-
if (typeof value !== 'string')
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
const trimmed = value.trim();
|
|
94
|
-
if (!trimmed || trimmed.length > MAX_SAFE_PROJECT_PATH_LENGTH) {
|
|
95
|
-
return '';
|
|
96
|
-
}
|
|
97
|
-
if (trimmed.startsWith('/') || trimmed.includes('\\') || hasWindowsDrivePrefix(trimmed)) {
|
|
98
|
-
return '';
|
|
99
|
-
}
|
|
89
|
+
if (typeof value !== 'string' || !value || value.length > MAX_SAFE_PROJECT_PATH_LENGTH || value.trim() !== value
|
|
90
|
+
|| hasControlCharacter(value) || value.startsWith('/') || value.includes('\\')
|
|
91
|
+
|| hasWindowsDrivePrefix(value)) return '';
|
|
92
|
+
return value.split('/').some(segment => !segment || segment === '.' || segment === '..') ? '' : value;
|
|
93
|
+
}
|
|
100
94
|
|
|
101
|
-
|
|
95
|
+
// Use only at an explicitly URL-encoded input boundary. Return one decoding,
|
|
96
|
+
// while conservatively checking nested encodings for traversal/separators.
|
|
97
|
+
function normalizeUrlEncodedProjectPath(value) {
|
|
98
|
+
if (typeof value !== 'string' || hasEncodedSeparator(value)) return '';
|
|
99
|
+
let decoded;
|
|
100
|
+
try { decoded = decodeURIComponent(value); } catch (_error) { return ''; }
|
|
101
|
+
const result = normalizeSafeProjectPath(decoded);
|
|
102
|
+
if (!result) return '';
|
|
102
103
|
for (let index = 0; index < 3; index += 1) {
|
|
103
|
-
if (hasEncodedSeparator(decoded))
|
|
104
|
-
return '';
|
|
105
|
-
}
|
|
104
|
+
if (hasEncodedSeparator(decoded) || !normalizeSafeProjectPath(decoded)) return '';
|
|
106
105
|
let next;
|
|
107
|
-
try {
|
|
108
|
-
|
|
109
|
-
} catch (_error) {
|
|
110
|
-
return '';
|
|
111
|
-
}
|
|
112
|
-
if (next === decoded) {
|
|
113
|
-
break;
|
|
114
|
-
}
|
|
106
|
+
try { next = decodeURIComponent(decoded); } catch (_error) { break; }
|
|
107
|
+
if (next === decoded) break;
|
|
115
108
|
decoded = next;
|
|
116
109
|
}
|
|
117
|
-
|
|
118
|
-
if (hasControlCharacter(decoded)
|
|
119
|
-
|| decoded.startsWith('/')
|
|
120
|
-
|| decoded.includes('\\')
|
|
121
|
-
|| hasWindowsDrivePrefix(decoded)
|
|
122
|
-
|| decoded.length > MAX_SAFE_PROJECT_PATH_LENGTH) {
|
|
123
|
-
return '';
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
const normalized = decoded.replace(/\/+/g, '/').trim();
|
|
127
|
-
if (!normalized || normalized.length > MAX_SAFE_PROJECT_PATH_LENGTH) {
|
|
128
|
-
return '';
|
|
129
|
-
}
|
|
130
|
-
const segments = normalized.split('/');
|
|
131
|
-
if (segments.some(segment => !segment || segment === '.' || segment === '..')) {
|
|
132
|
-
return '';
|
|
133
|
-
}
|
|
134
|
-
return normalized;
|
|
110
|
+
return hasEncodedSeparator(decoded) || !normalizeSafeProjectPath(decoded) ? '' : result;
|
|
135
111
|
}
|
|
136
112
|
|
|
137
113
|
function assertSafeProjectPath(value, label = 'path') {
|
|
@@ -175,6 +151,7 @@
|
|
|
175
151
|
isUsableProjectFileContent,
|
|
176
152
|
isTextProjectPath,
|
|
177
153
|
normalizePath,
|
|
178
|
-
normalizeSafeProjectPath
|
|
154
|
+
normalizeSafeProjectPath,
|
|
155
|
+
normalizeUrlEncodedProjectPath
|
|
179
156
|
};
|
|
180
157
|
});
|
|
@@ -167,7 +167,8 @@
|
|
|
167
167
|
anthropicThinkingMode: normalizeAnthropicThinkingMode(value.anthropicThinkingMode),
|
|
168
168
|
anthropicPromptCaching: value.anthropicPromptCaching === true,
|
|
169
169
|
impersonateClaudeCode: value.impersonateClaudeCode === true,
|
|
170
|
-
maxOutputTokens: normalizeMaxOutputTokens(value.maxOutputTokens),
|
|
170
|
+
maxOutputTokens: normalizeMaxOutputTokens(value.maxOutputTokens, value.outputBudgetVersion !== 1),
|
|
171
|
+
outputBudgetVersion: 1,
|
|
171
172
|
hasSecret: value.hasSecret === true,
|
|
172
173
|
secretUpdatedAt: normalizeInteger(value.secretUpdatedAt),
|
|
173
174
|
endpointDisclosureHost: normalizeText(value.endpointDisclosureHost),
|
|
@@ -262,6 +263,7 @@
|
|
|
262
263
|
anthropicPromptCaching: false,
|
|
263
264
|
impersonateClaudeCode: false,
|
|
264
265
|
maxOutputTokens: 65536,
|
|
266
|
+
outputBudgetVersion: 1,
|
|
265
267
|
hasSecret: false,
|
|
266
268
|
secretUpdatedAt: 0,
|
|
267
269
|
endpointDisclosureHost: '',
|
|
@@ -380,9 +382,9 @@
|
|
|
380
382
|
return Number.isFinite(number) && number >= 0 ? Math.floor(number) : 0;
|
|
381
383
|
}
|
|
382
384
|
|
|
383
|
-
function normalizeMaxOutputTokens(value) {
|
|
385
|
+
function normalizeMaxOutputTokens(value, legacy = false) {
|
|
384
386
|
const number = normalizeInteger(value);
|
|
385
|
-
if (!number || number === 8192 || number === 32768) return 65536;
|
|
387
|
+
if (!number || (legacy && (number === 8192 || number === 32768))) return 65536;
|
|
386
388
|
return Math.min(65536, Math.max(256, number));
|
|
387
389
|
}
|
|
388
390
|
|