yiyan-browser-agent 1.6.7 → 1.6.9

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/browser.js +26 -31
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yiyan-browser-agent",
3
- "version": "1.6.7",
3
+ "version": "1.6.9",
4
4
  "description": "AI coding agent powered by Yiyan (文心一言) via browser automation — no API key needed",
5
5
  "main": "src/index.js",
6
6
  "bin": {
package/src/browser.js CHANGED
@@ -297,43 +297,33 @@ class YiyanBrowser {
297
297
  if (!appeared) logger.warn('Response may have been delayed — continuing to wait...');
298
298
 
299
299
  // Phase 2: wait for completion
300
- // 主要:dialogCardBottom 出现
301
- // 备用:内容稳定 + _isGenerating() 确认
302
- let lastText = '';
303
- let stableStart = null;
304
- let stableCount = 0;
305
- let dotCount = 0;
300
+ // 条件: dialogCardBottom 出现 + 连续两次内容稳定
301
+ let lastText = '';
302
+ let stableCount = 0;
303
+ let lastCheckTime = Date.now();
304
+ let dotCount = 0;
305
+ let hasCompletionMarker = false;
306
306
 
307
307
  while (Date.now() - start < timeout) {
308
308
  const text = await this._extractLastMessage();
309
309
 
310
- // ── 稳定性检测(备用退出路径)──
311
- if (text !== lastText) {
312
- lastText = text;
313
- stableStart = null;
314
- stableCount = 0;
315
- } else if (text.length > 50) { // 内容足够长才进入稳定检测
316
- if (!stableStart) stableStart = Date.now();
317
- else if (Date.now() - stableStart >= stableDelay) {
310
+ // ── 稳定性检测:内容不变则计数 ──
311
+ if (text === lastText && text.length > 50) {
312
+ // 内容没变化,检查是否达到稳定时间
313
+ if (Date.now() - lastCheckTime >= stableDelay) {
318
314
  stableCount++;
319
-
320
- // 连续稳定检测 + _isGenerating 确认
321
- if (stableCount >= 2) {
322
- if (!await this._isGenerating()) {
323
- logger.clearLine();
324
- logger.dim('Stable completion detected');
325
- break;
326
- }
327
- stableCount = 0;
328
- stableStart = null;
329
- } else {
330
- stableStart = null;
331
- }
315
+ lastCheckTime = Date.now();
316
+ logger.dim(`Stable count: ${stableCount}/2 (${text.length} chars)`);
332
317
  }
318
+ } else {
319
+ // 内容变化,重置
320
+ lastText = text;
321
+ stableCount = 0;
322
+ lastCheckTime = Date.now();
333
323
  }
334
324
 
335
- // ── 完成标记检测(主要退出路径)──
336
- const hasCompletion = await this.page.evaluate(() => {
325
+ // ── 完成标记检测 ──
326
+ const detected = await this.page.evaluate(() => {
337
327
  const selectors = [
338
328
  '.dialogCardBottom__qoXjps3z',
339
329
  '[class*="dialogCardBottom"]',
@@ -350,10 +340,15 @@ class YiyanBrowser {
350
340
  return false;
351
341
  });
352
342
 
353
- if (hasCompletion) {
343
+ if (detected) {
344
+ hasCompletionMarker = true;
345
+ }
346
+
347
+ // ── 完成判断:标记出现 + 连续两次稳定 ──
348
+ if (hasCompletionMarker && stableCount >= 2) {
354
349
  await this.page.waitForTimeout(500);
355
350
  logger.clearLine();
356
- logger.dim('Completion marker detected');
351
+ logger.success('Response complete (marker + 2 stable checks)');
357
352
  break;
358
353
  }
359
354