codex-overleaf-link 2.3.5 → 2.4.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 +63 -31
- package/README.zh-CN.md +543 -0
- package/extension/bootstrap/manifest.template.json +1 -1
- package/extension/src/background.js +7 -0
- package/extension/src/backgroundUpdateCoordinator.js +88 -4
- package/extension/src/content/activeTurnControl.js +1 -0
- package/extension/src/content/assetTransferBroker.js +2 -0
- package/extension/src/content/contentRuntime.js +77 -57
- package/extension/src/content/contextTray.js +4 -0
- package/extension/src/content/diagnosticsController.js +17 -3
- package/extension/src/content/diagnosticsPanel.js +129 -5
- package/extension/src/content/generated/content.bundle.js +1422 -348
- package/extension/src/content/generated/content.bundle.meta.json +7 -3
- package/extension/src/content/legacyGlobalRegistry.js +3 -0
- package/extension/src/content/modelPicker.js +21 -9
- package/extension/src/content/modelPickerSupport.js +38 -1
- package/extension/src/content/nativeCompatibilityController.js +4 -1
- package/extension/src/content/otWarmMirror.js +126 -92
- package/extension/src/content/otWarmMirrorController.js +122 -1
- package/extension/src/content/pageBridgeClient.js +2 -0
- package/extension/src/content/panelMaintenance.js +26 -15
- package/extension/src/content/providerSettingsCoordinator.js +1 -0
- package/extension/src/content/runFailureNotice.js +104 -0
- package/extension/src/content/runResultActions.js +16 -1
- package/extension/src/content/runScrollLayout.js +124 -0
- package/extension/src/content/runTimelineView.js +37 -11
- package/extension/src/content/sessionForkController.js +20 -11
- package/extension/src/content/settingsPanel.js +28 -11
- package/extension/src/content/trackedChangeCaptureController.js +153 -0
- package/extension/src/content/updateNotice.js +24 -4
- package/extension/src/content/writebackOrchestrator.js +31 -0
- package/extension/src/page/binaryAssetUploader.js +101 -29
- package/extension/src/page/overleafRealtimeObserver.js +120 -25
- package/extension/src/page/textFileCreator.js +493 -0
- package/extension/src/page/trackedChangeCapture.js +342 -0
- package/extension/src/page/trackedChangesLifecycle.js +145 -149
- package/extension/src/page/treeOperations.js +30 -2
- package/extension/src/page/writebackRouter.js +94 -48
- package/extension/src/pageBridge.js +62 -25
- package/extension/src/shared/compatibility.js +1 -1
- package/extension/src/shared/i18n.js +77 -37
- package/extension/src/shared/managedUpdateProjection.js +1 -1
- package/extension/src/shared/otText.js +0 -1
- package/extension/src/shared/pageRpcContract.js +2 -1
- package/extension/src/shared/sessionState.js +23 -23
- package/extension/src/shared/sessionTitle.js +120 -0
- package/extension/src/shared/storageDb.js +10 -12
- package/extension/src/shared/storageRunActions.js +29 -1
- package/extension/src/shared/updateRuntimeIdentity.js +32 -0
- package/extension/src/shared/writebackSettlement.js +19 -5
- package/extension/styles/panel.css +128 -24
- package/native-host/src/mirrorWorkspace.js +20 -1
- package/native-host/src/releaseProxy.js +177 -0
- package/native-host/src/releaseTransport.js +154 -0
- package/native-host/src/taskRunnerRuntime.js +25 -0
- package/native-host/src/updateManager.js +40 -39
- package/package.json +5 -1
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"entry": "extension/entries/content-entry.mjs",
|
|
4
4
|
"output": "extension/src/content/generated/content.bundle.js",
|
|
5
|
-
"sourceDigest": "
|
|
6
|
-
"outputDigest": "
|
|
7
|
-
"byteLength":
|
|
5
|
+
"sourceDigest": "f146d7e07b67706193fa5fcff26d7c9719826ac745aec9b745dd95c52413d27c",
|
|
6
|
+
"outputDigest": "11993fd0746a026b1e74399060e70559eb569fca492fcdec36c2fb69a78d6b80",
|
|
7
|
+
"byteLength": 2404976,
|
|
8
8
|
"inputs": [
|
|
9
9
|
"extension/entries/content-entry.mjs",
|
|
10
10
|
"extension/src/content/activeTurnControl.js",
|
|
@@ -44,10 +44,12 @@
|
|
|
44
44
|
"extension/src/content/recentProjects.js",
|
|
45
45
|
"extension/src/content/reviewHunks.js",
|
|
46
46
|
"extension/src/content/runController.js",
|
|
47
|
+
"extension/src/content/runFailureNotice.js",
|
|
47
48
|
"extension/src/content/runGuidanceController.js",
|
|
48
49
|
"extension/src/content/runGuidanceView.js",
|
|
49
50
|
"extension/src/content/runQueueScheduler.js",
|
|
50
51
|
"extension/src/content/runResultActions.js",
|
|
52
|
+
"extension/src/content/runScrollLayout.js",
|
|
51
53
|
"extension/src/content/runSettlementPersistence.js",
|
|
52
54
|
"extension/src/content/runTimelineView.js",
|
|
53
55
|
"extension/src/content/scopedPersistenceCoordinator.js",
|
|
@@ -60,6 +62,7 @@
|
|
|
60
62
|
"extension/src/content/sessionPersistence.js",
|
|
61
63
|
"extension/src/content/settingsPanel.js",
|
|
62
64
|
"extension/src/content/themeController.js",
|
|
65
|
+
"extension/src/content/trackedChangeCaptureController.js",
|
|
63
66
|
"extension/src/content/updateIdle.js",
|
|
64
67
|
"extension/src/content/updateNotice.js",
|
|
65
68
|
"extension/src/content/writebackController.js",
|
|
@@ -90,6 +93,7 @@
|
|
|
90
93
|
"extension/src/shared/scopedPersistenceTransaction.js",
|
|
91
94
|
"extension/src/shared/sensitiveScan.js",
|
|
92
95
|
"extension/src/shared/sessionState.js",
|
|
96
|
+
"extension/src/shared/sessionTitle.js",
|
|
93
97
|
"extension/src/shared/settlementFacts.js",
|
|
94
98
|
"extension/src/shared/staleGuard.js",
|
|
95
99
|
"extension/src/shared/storageDb.js",
|
|
@@ -57,6 +57,8 @@
|
|
|
57
57
|
'RunInputQueue',
|
|
58
58
|
'RunQueueScheduler',
|
|
59
59
|
'RunResultActions',
|
|
60
|
+
'RunScrollLayout',
|
|
61
|
+
'RunFailureNotice',
|
|
60
62
|
'RunSettlementPersistence',
|
|
61
63
|
'RunTimelineView',
|
|
62
64
|
'ScopedPersistenceCoordinator',
|
|
@@ -73,6 +75,7 @@
|
|
|
73
75
|
'StorageMigration',
|
|
74
76
|
'Summary',
|
|
75
77
|
'Theme',
|
|
78
|
+
'TrackedChangeCaptureController',
|
|
76
79
|
'UndoOperations',
|
|
77
80
|
'UpdateIdle',
|
|
78
81
|
'UpdateNotice',
|
|
@@ -134,7 +134,8 @@
|
|
|
134
134
|
return { stale: false, error: response?.error || { code: 'provider_models_unavailable' } };
|
|
135
135
|
}
|
|
136
136
|
const sourceModels = hasDiscoveredModels ? response.result.models : fallbackModels;
|
|
137
|
-
const
|
|
137
|
+
const preserveBuiltin = (selection?.providerId || 'builtin') === 'builtin' && (getState()?.providerId || 'builtin') === 'builtin';
|
|
138
|
+
const retainedSelectedModel = retainSelectedModel(sourceModels, currentSelectedModel, { preserveUnavailable: preserveBuiltin });
|
|
138
139
|
const normalized = modelCatalog.normalizeDiscoveredModels({ models: sourceModels, selectedModel: retainedSelectedModel });
|
|
139
140
|
if (normalized.usedFallback && response.result?.providerId && response.result.providerId !== 'builtin') {
|
|
140
141
|
applyUnavailableModelOptions({ code: 'provider_model_catalog_invalid', message: 'The active provider returned no usable models.' });
|
|
@@ -143,9 +144,12 @@
|
|
|
143
144
|
error: { code: 'provider_model_catalog_invalid', message: 'The active provider returned no usable models.' }
|
|
144
145
|
};
|
|
145
146
|
}
|
|
146
|
-
|
|
147
|
+
const renderedModels = preserveBuiltin
|
|
148
|
+
? Support.preserveSelectedCapabilities(normalized.models, retainedSelectedModel, getState(), !hasDiscoveredModels || response.result?.source === 'fallback')
|
|
149
|
+
: normalized.models;
|
|
150
|
+
renderModelOptions(renderedModels, retainedSelectedModel, { allowUnknownSelected: false });
|
|
147
151
|
modelDiscovery = {
|
|
148
|
-
status: hasDiscoveredModels && !normalized.usedFallback ? 'discovered' : 'fallback',
|
|
152
|
+
status: hasDiscoveredModels && !normalized.usedFallback && response.result?.source !== 'fallback' ? 'discovered' : 'fallback',
|
|
149
153
|
source: hasDiscoveredModels ? response.result?.source || 'unknown' : 'fallback',
|
|
150
154
|
fetchedAt: hasDiscoveredModels ? response.result?.fetchedAt || '' : '',
|
|
151
155
|
errorCode: hasDiscoveredModels ? '' : response?.error?.code || '',
|
|
@@ -172,15 +176,16 @@
|
|
|
172
176
|
}
|
|
173
177
|
|
|
174
178
|
function applyUnavailableModelOptions(error) {
|
|
179
|
+
const selectedModel = resolveSelectedModel();
|
|
175
180
|
const modelSelect = getPanel()?.querySelector('[data-model]');
|
|
176
181
|
if (modelSelect) {
|
|
177
182
|
modelSelect.textContent = '';
|
|
178
183
|
const option = document.createElement('option');
|
|
179
|
-
option.value =
|
|
184
|
+
option.value = selectedModel;
|
|
180
185
|
option.textContent = tx('Models unavailable', '模型不可用');
|
|
181
186
|
option.disabled = true;
|
|
182
187
|
modelSelect.append(option);
|
|
183
|
-
modelSelect.value =
|
|
188
|
+
modelSelect.value = selectedModel;
|
|
184
189
|
modelSelect.disabled = true;
|
|
185
190
|
}
|
|
186
191
|
modelDiscovery = {
|
|
@@ -190,8 +195,15 @@
|
|
|
190
195
|
errorCode: error?.code || '',
|
|
191
196
|
errorMessage: error?.message || (error ? String(error) : '')
|
|
192
197
|
};
|
|
193
|
-
|
|
194
|
-
|
|
198
|
+
const pendingModels = Support.preserveSelectedCapabilities(
|
|
199
|
+
[{ id: selectedModel, unverified: true }], selectedModel, getState(), true
|
|
200
|
+
);
|
|
201
|
+
renderReasoningOptions(pendingModels);
|
|
202
|
+
renderSpeedOptions(pendingModels);
|
|
203
|
+
for (const selector of ['[data-reasoning]', '[data-speed]']) {
|
|
204
|
+
const input = getPanel()?.querySelector(selector);
|
|
205
|
+
if (input) input.disabled = true;
|
|
206
|
+
}
|
|
195
207
|
renderModelConfigChoices();
|
|
196
208
|
updateModelDisplay();
|
|
197
209
|
}
|
|
@@ -200,9 +212,9 @@
|
|
|
200
212
|
const modelCatalog = getModelCatalog();
|
|
201
213
|
const fallbackModels = modelCatalog.FALLBACK_MODELS;
|
|
202
214
|
const sourceModels = fallbackModels;
|
|
203
|
-
const retainedSelectedModel = retainSelectedModel(sourceModels, selectedModel);
|
|
215
|
+
const retainedSelectedModel = retainSelectedModel(sourceModels, selectedModel, { preserveUnavailable: (getState()?.providerId || 'builtin') === 'builtin' });
|
|
204
216
|
const normalized = modelCatalog.normalizeDiscoveredModels({ models: sourceModels, selectedModel: retainedSelectedModel });
|
|
205
|
-
renderModelOptions(normalized.models, retainedSelectedModel);
|
|
217
|
+
renderModelOptions(Support.preserveSelectedCapabilities(normalized.models, retainedSelectedModel, getState(), true), retainedSelectedModel);
|
|
206
218
|
modelDiscovery = {
|
|
207
219
|
status: 'fallback',
|
|
208
220
|
source: 'fallback',
|
|
@@ -29,14 +29,49 @@
|
|
|
29
29
|
return String(label || '').replace(/^gpt[-\s]*/i, '');
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
function retainSelectedModel(models, selectedModel) {
|
|
32
|
+
function retainSelectedModel(models, selectedModel, options = {}) {
|
|
33
33
|
const selectedId = normalizeModelOptionId(selectedModel);
|
|
34
34
|
if (!selectedId) return '';
|
|
35
|
+
if (options.preserveUnavailable === true) return selectedId;
|
|
35
36
|
return (Array.isArray(models) ? models : []).some(model => (
|
|
36
37
|
normalizeModelOptionId(typeof model === 'string' ? model : model?.id) === selectedId
|
|
37
38
|
)) ? selectedId : '';
|
|
38
39
|
}
|
|
39
40
|
|
|
41
|
+
// A fallback or missing catalog entry cannot revoke an explicit selection.
|
|
42
|
+
// Keep its saved controls provisional until real capability data arrives.
|
|
43
|
+
function preserveSelectedCapabilities(models, selectedModel, preferences = {}, provisional = false) {
|
|
44
|
+
const selectedId = normalizeModelOptionId(selectedModel);
|
|
45
|
+
const saved = preferences || {};
|
|
46
|
+
return (Array.isArray(models) ? models : []).map(model => {
|
|
47
|
+
if (model.id !== selectedId || (!provisional && !model.unverified)) return model;
|
|
48
|
+
const reasoningEfforts = normalizeReasoningEffortsForSelect([
|
|
49
|
+
...(model.reasoningEfforts || []), saved.reasoningEffort
|
|
50
|
+
]);
|
|
51
|
+
const speedTiers = normalizeSpeedTiersForSelect(model.speedTiers);
|
|
52
|
+
const speed = ['standard', 'fast'].includes(saved.speedTier) ? saved.speedTier : '';
|
|
53
|
+
if (speed && !speedTiers.includes(speed)) speedTiers.push(speed);
|
|
54
|
+
return {
|
|
55
|
+
...model, unverified: true, reasoningEfforts, speedTiers,
|
|
56
|
+
defaultReasoningEffort: reasoningEfforts.includes(saved.reasoningEffort)
|
|
57
|
+
? saved.reasoningEffort : model.defaultReasoningEffort,
|
|
58
|
+
defaultSpeedTier: speed || model.defaultSpeedTier || 'standard'
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function getRenderedModelEntries(panel) {
|
|
64
|
+
return Array.from(panel?.querySelector('[data-model]')?.options || []).map(option => ({
|
|
65
|
+
id: option.value,
|
|
66
|
+
label: option.textContent,
|
|
67
|
+
reasoningEfforts: (option.dataset.reasoningEfforts || '').split(',').filter(Boolean),
|
|
68
|
+
defaultReasoningEffort: option.dataset.defaultReasoningEffort || '',
|
|
69
|
+
reasoningPresentation: option.dataset.reasoningPresentation || '',
|
|
70
|
+
speedTiers: (option.dataset.speedTiers || 'standard').split(',').filter(Boolean),
|
|
71
|
+
defaultSpeedTier: option.dataset.defaultSpeedTier || 'standard'
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
|
|
40
75
|
function shouldUseBuiltInFallback(response) {
|
|
41
76
|
const providerId = normalizeModelOptionId(response?.result?.providerId);
|
|
42
77
|
return response?.ok === true && (!providerId || providerId === 'builtin');
|
|
@@ -114,6 +149,8 @@
|
|
|
114
149
|
normalizeReasoningEffortsForSelect,
|
|
115
150
|
normalizeSpeedTiersForSelect,
|
|
116
151
|
retainSelectedModel,
|
|
152
|
+
preserveSelectedCapabilities,
|
|
153
|
+
getRenderedModelEntries,
|
|
117
154
|
shouldUseBuiltInFallback
|
|
118
155
|
};
|
|
119
156
|
return api;
|
|
@@ -23,7 +23,10 @@
|
|
|
23
23
|
async function dispatch(payload, channelMethod) {
|
|
24
24
|
const compatibilityGate = await ensureForMethod(payload?.method);
|
|
25
25
|
if (!compatibilityGate.ok) return compatibilityGate.response;
|
|
26
|
-
|
|
26
|
+
// Post-Undo cache bookkeeping must survive the ended run's cancellation.
|
|
27
|
+
if (gatedMethods.has(payload?.method) && payload.method !== 'mirror.invalidate') {
|
|
28
|
+
options.throwIfCancellationRequested?.();
|
|
29
|
+
}
|
|
27
30
|
return nativeChannel[channelMethod](
|
|
28
31
|
attachEvidence(payload, compatibilityGate.compatibility)
|
|
29
32
|
);
|