groove-dev 0.24.4 → 0.24.6

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.
@@ -1562,8 +1562,9 @@ Keep responses concise. Help them think, don't lecture them about the system the
1562
1562
  // Safety net: if planner forgot the QC agent, auto-add one
1563
1563
  if (phase2.length === 0 && phase1.length >= 2) {
1564
1564
  phase2 = [{
1565
+ name: 'qc-agent',
1565
1566
  role: 'fullstack', phase: 2, scope: [],
1566
- prompt: 'QC Senior Dev: All builder agents have completed. Audit their changes for correctness, fix any issues, run tests, build the project, commit all changes, and launch. Output the localhost URL where the app can be accessed.',
1567
+ prompt: 'QC Senior Dev: All builder agents have completed. Audit their changes for correctness, fix any issues, run tests, build the project, commit all changes, and launch the dev server. Output the localhost URL where the app can be accessed.',
1567
1568
  }];
1568
1569
  }
1569
1570
 
@@ -1717,6 +1718,7 @@ Keep responses concise. Help them think, don't lecture them about the system the
1717
1718
  outputTokens: tokenData.outputTokens || 0,
1718
1719
  cacheHitRate: agentCacheTotal > 0 ? Math.round(((tokenData.cacheReadTokens || 0) / agentCacheTotal) * 1000) / 1000 : 0,
1719
1720
  contextUsage: a.contextUsage || 0,
1721
+ rotationThreshold: daemon.adaptive.getThreshold(a.provider, a.role),
1720
1722
  durationMs: a.durationMs || tokenData.totalDurationMs || 0,
1721
1723
  turns: a.turns || tokenData.totalTurns || 0,
1722
1724
  modelDistribution: tokenData.modelDistribution || {},
@@ -1772,6 +1774,8 @@ Keep responses concise. Help them think, don't lecture them about the system the
1772
1774
  journalist: {
1773
1775
  ...journalistStatus,
1774
1776
  lastSummary: lastSynthesis?.summary || '',
1777
+ projectMap: lastSynthesis?.projectMap || '',
1778
+ decisions: lastSynthesis?.decisions || '',
1775
1779
  recentHistory: journalistHistory,
1776
1780
  },
1777
1781
  timeline: timelineData,
@@ -317,6 +317,9 @@ For normal file edits within your scope, proceed without review.
317
317
  model: output.model,
318
318
  estimatedCostUsd: output.estimatedCostUsd,
319
319
  });
320
+ // Feed router cost log for tier tracking
321
+ const tier = this.daemon.classifier.classify(agent.id);
322
+ this.daemon.router.recordUsage(agent.id, output.model || current.model, output.tokensUsed, tier);
320
323
  }
321
324
  }
322
325
  // Record session result data (cost, duration, turns)
@@ -445,8 +448,22 @@ For normal file edits within your scope, proceed without review.
445
448
  role: agent.role,
446
449
  });
447
450
  this.daemon.audit.log('phase2.autoSpawn', { id: agent.id, name: agent.name, role: agent.role });
448
- }).catch(() => {});
449
- } catch { /* skip invalid configs */ }
451
+ }).catch((err) => {
452
+ console.error(`[Groove] Phase 2 spawn failed for ${config.role}: ${err.message}`);
453
+ this.daemon.broadcast({
454
+ type: 'phase2:failed',
455
+ role: config.role,
456
+ error: err.message,
457
+ });
458
+ });
459
+ } catch (err) {
460
+ console.error(`[Groove] Phase 2 config invalid for ${config.role}: ${err.message}`);
461
+ this.daemon.broadcast({
462
+ type: 'phase2:failed',
463
+ role: config.role,
464
+ error: err.message,
465
+ });
466
+ }
450
467
  }
451
468
  }
452
469
  }