chrome-devtools-mcp-for-extension 0.19.1 → 0.19.3

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.
@@ -171,38 +171,37 @@ export const askGeminiWeb = defineTool({
171
171
  const project = projectName || path.basename(process.cwd()) || 'unknown-project';
172
172
  const page = context.getSelectedPage();
173
173
  try {
174
- response.appendResponseLine('Geminiに接続中...');
175
- await navigateWithRetry(page, GEMINI_CONFIG.DEFAULT_URL, { waitUntil: 'networkidle2' });
176
- const needsLogin = await isLoginRequired(page);
177
- if (needsLogin) {
178
- response.appendResponseLine('\n❌ Geminiへのログインが必要です');
179
- response.appendResponseLine('ブラウザでログインしてください。');
180
- return;
181
- }
182
- response.appendResponseLine('✅ ログイン確認完了');
183
174
  let isNewChat = false;
184
175
  let sessionChatId;
176
+ let targetUrl;
177
+ // Determine target URL first (avoid unnecessary navigation)
185
178
  if (!createNewChat) {
186
179
  const sessions = await loadChatSessions();
187
180
  const projectSessions = sessions[project] || [];
188
181
  if (projectSessions.length > 0) {
189
182
  const sortedSessions = [...projectSessions].sort((a, b) => new Date(b.lastUsed).getTime() - new Date(a.lastUsed).getTime());
190
183
  const latestSession = sortedSessions[0];
191
- response.appendResponseLine(`既存のチャットを使用: ${latestSession.url}`);
192
- await navigateWithRetry(page, latestSession.url, { waitUntil: 'networkidle2' });
184
+ targetUrl = latestSession.url;
193
185
  sessionChatId = latestSession.chatId;
194
- await new Promise((resolve) => setTimeout(resolve, 1000));
186
+ response.appendResponseLine(`既存チャット: ${latestSession.chatId}`);
195
187
  }
196
188
  else {
197
189
  isNewChat = true;
190
+ targetUrl = GEMINI_CONFIG.BASE_URL + 'app';
198
191
  }
199
192
  }
200
193
  else {
201
194
  isNewChat = true;
195
+ targetUrl = GEMINI_CONFIG.BASE_URL + 'app';
202
196
  }
203
- if (isNewChat) {
204
- response.appendResponseLine('新規チャットを作成中...');
205
- await navigateWithRetry(page, GEMINI_CONFIG.BASE_URL + 'app', { waitUntil: 'networkidle2' });
197
+ // Navigate directly to target URL (skip intermediate navigation)
198
+ response.appendResponseLine('Geminiに接続中...');
199
+ await navigateWithRetry(page, targetUrl, { waitUntil: 'networkidle2' });
200
+ // Check login only once after navigation
201
+ const needsLogin = await isLoginRequired(page);
202
+ if (needsLogin) {
203
+ response.appendResponseLine('❌ ログインが必要です');
204
+ return;
206
205
  }
207
206
  response.appendResponseLine('質問を送信中...');
208
207
  // Input text using the textbox element
@@ -270,8 +269,8 @@ export const askGeminiWeb = defineTool({
270
269
  // - Generating: "回答を停止" button appears, "Gemini が入力中です" text
271
270
  // - Complete: "Gemini が回答しました" text appears
272
271
  // First, wait for Gemini to start generating (Stop button/icon to appear)
273
- // This can take 2-5 seconds after sending
274
- const maxWaitForStart = 15000; // 15 seconds max to start generating
272
+ // This typically takes 1-3 seconds after sending
273
+ const maxWaitForStart = 5000; // 5 seconds max to start generating
275
274
  const startWaitTime = Date.now();
276
275
  let generationStarted = false;
277
276
  while (Date.now() - startWaitTime < maxWaitForStart) {
@@ -313,10 +312,9 @@ export const askGeminiWeb = defineTool({
313
312
  response.appendResponseLine('⚠️ 生成開始を検出できませんでした(続行します)');
314
313
  }
315
314
  const startTime = Date.now();
316
- let stableCount = 0;
317
315
  let lastResponseText = '';
318
316
  while (true) {
319
- await new Promise((resolve) => setTimeout(resolve, 1500));
317
+ await new Promise((resolve) => setTimeout(resolve, 1000));
320
318
  const status = await page.evaluate(() => {
321
319
  // Check for stop icon (Gemini's thinking/generating indicator)
322
320
  // The stop icon is in a div.stop-icon with mat-icon[fonticon="stop"]
@@ -384,15 +382,9 @@ export const askGeminiWeb = defineTool({
384
382
  if (status.isComplete && !status.isGenerating) {
385
383
  break;
386
384
  }
387
- // If not generating and response text is stable for 2 iterations, we're done
385
+ // If not generating and response text is stable, we're done
388
386
  if (!status.isGenerating && status.responseContent === lastResponseText && status.responseContent.length > 0) {
389
- stableCount++;
390
- if (stableCount >= 2) {
391
- break;
392
- }
393
- }
394
- else {
395
- stableCount = 0;
387
+ break; // No need to wait for multiple stable iterations
396
388
  }
397
389
  lastResponseText = status.responseContent;
398
390
  if (Date.now() - startTime > 180000) { // 3 mins timeout
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chrome-devtools-mcp-for-extension",
3
- "version": "0.19.1",
3
+ "version": "0.19.3",
4
4
  "description": "MCP server for Chrome extension development with Web Store automation. Fork of chrome-devtools-mcp with extension-specific tools.",
5
5
  "type": "module",
6
6
  "bin": "./scripts/cli.mjs",