vg-coder-cli 2.0.52 → 2.0.53
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/package.json
CHANGED
package/src/server/task-queue.js
CHANGED
|
@@ -415,7 +415,10 @@ class TaskQueue {
|
|
|
415
415
|
return;
|
|
416
416
|
}
|
|
417
417
|
task.status = 'done';
|
|
418
|
-
task.result = {
|
|
418
|
+
task.result = {
|
|
419
|
+
chatId: payload?.chatId || null,
|
|
420
|
+
actualModel: payload?.actualModel || null,
|
|
421
|
+
};
|
|
419
422
|
task.timing.finishedAt = Date.now();
|
|
420
423
|
task.timing.durationMs = task.timing.finishedAt - (task.timing.startedAt || task.timing.createdAt);
|
|
421
424
|
await store.writeResult(task.workingDir, task.id, payload?.markdown || '');
|
|
@@ -198,6 +198,39 @@ function throwIfRateLimited(stage = '') {
|
|
|
198
198
|
}
|
|
199
199
|
}
|
|
200
200
|
|
|
201
|
+
// Đọc model ID thật từ AI Studio sidebar — bắt được redirect AI Studio làm khi
|
|
202
|
+
// account thiếu access tới preview model (vd request gemini-3-pro-preview, run
|
|
203
|
+
// thật trên gemini-3-flash-preview). URL param không reliable vì AI Studio
|
|
204
|
+
// không update URL khi fallback. Sidebar `<ms-model-selector>` mới là source-
|
|
205
|
+
// of-truth.
|
|
206
|
+
//
|
|
207
|
+
// Strategy: thử đọc DOM sẵn trước (zero side-effect). Nếu panel chưa render —
|
|
208
|
+
// click toggle "Run settings" để mở, đọc, rồi click lại để khôi phục state ban
|
|
209
|
+
// đầu. Không throw — fail thì return null, caller chấp nhận `actualModel: null`.
|
|
210
|
+
async function readActualModel() {
|
|
211
|
+
try {
|
|
212
|
+
// Fast path: panel đã mở (worker tab đã chạy task → AI Studio thường giữ panel open)
|
|
213
|
+
let selector = document.querySelector('ms-model-selector');
|
|
214
|
+
if (selector) {
|
|
215
|
+
const name = selector.querySelector('[data-test-id="model-name"]')?.innerText?.trim();
|
|
216
|
+
if (name) return name;
|
|
217
|
+
}
|
|
218
|
+
// Slow path: toggle panel mở. Lưu state để restore sau khi đọc xong.
|
|
219
|
+
const toggle = document.querySelector('[aria-label="Toggle run settings panel"]');
|
|
220
|
+
if (!toggle) return null;
|
|
221
|
+
toggle.click();
|
|
222
|
+
await new Promise(r => setTimeout(r, 800));
|
|
223
|
+
selector = document.querySelector('ms-model-selector');
|
|
224
|
+
const name = selector?.querySelector('[data-test-id="model-name"]')?.innerText?.trim() || null;
|
|
225
|
+
// Đóng panel lại để không thay đổi UX (panel mở/đóng visible qua noVNC).
|
|
226
|
+
toggle.click();
|
|
227
|
+
return name;
|
|
228
|
+
} catch (err) {
|
|
229
|
+
console.warn('[TaskWorker] readActualModel failed:', err?.message);
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
201
234
|
async function handleTaskExecute(payload) {
|
|
202
235
|
const { taskId, prompt, files = [] } = payload || {};
|
|
203
236
|
if (!taskId) return;
|
|
@@ -251,6 +284,7 @@ async function handleTaskExecute(payload) {
|
|
|
251
284
|
|
|
252
285
|
const markdown = await window.AIChat.copyLastTurnAsMarkdown();
|
|
253
286
|
const chatId = window.AIChat.getChatIdFromUrl?.() || null;
|
|
287
|
+
const actualModel = await readActualModel();
|
|
254
288
|
|
|
255
289
|
if (cancelFlags.has(taskId)) {
|
|
256
290
|
cancelFlags.delete(taskId);
|
|
@@ -258,8 +292,8 @@ async function handleTaskExecute(payload) {
|
|
|
258
292
|
return;
|
|
259
293
|
}
|
|
260
294
|
|
|
261
|
-
socket.emit('task:complete', { taskId, markdown, chatId });
|
|
262
|
-
console.log(`[TaskWorker] Completed ${taskId}`);
|
|
295
|
+
socket.emit('task:complete', { taskId, markdown, chatId, actualModel });
|
|
296
|
+
console.log(`[TaskWorker] Completed ${taskId} (model=${actualModel || 'unknown'})`);
|
|
263
297
|
} catch (err) {
|
|
264
298
|
console.error(`[TaskWorker] Failed ${taskId}:`, err);
|
|
265
299
|
socket.emit('task:failed', {
|