@dreb/coding-agent 2.67.0 → 2.68.1

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 (40) hide show
  1. package/README.md +1 -1
  2. package/dist/core/agent-session.d.ts +1 -0
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js.map +1 -1
  5. package/dist/core/daily-cost-tracker.d.ts +58 -7
  6. package/dist/core/daily-cost-tracker.d.ts.map +1 -1
  7. package/dist/core/daily-cost-tracker.js +146 -88
  8. package/dist/core/daily-cost-tracker.js.map +1 -1
  9. package/dist/core/footer-data-provider.d.ts +11 -3
  10. package/dist/core/footer-data-provider.d.ts.map +1 -1
  11. package/dist/core/footer-data-provider.js +19 -3
  12. package/dist/core/footer-data-provider.js.map +1 -1
  13. package/dist/core/session-manager.d.ts +14 -0
  14. package/dist/core/session-manager.d.ts.map +1 -1
  15. package/dist/core/session-manager.js +182 -88
  16. package/dist/core/session-manager.js.map +1 -1
  17. package/dist/core/subagent-session-cost-tracker.d.ts +22 -0
  18. package/dist/core/subagent-session-cost-tracker.d.ts.map +1 -0
  19. package/dist/core/subagent-session-cost-tracker.js +94 -0
  20. package/dist/core/subagent-session-cost-tracker.js.map +1 -0
  21. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  22. package/dist/modes/interactive/components/footer.js +8 -2
  23. package/dist/modes/interactive/components/footer.js.map +1 -1
  24. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  25. package/dist/modes/interactive/interactive-mode.js +7 -2
  26. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  27. package/dist/modes/rpc/rpc-client.d.ts +7 -2
  28. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  29. package/dist/modes/rpc/rpc-client.js +3 -2
  30. package/dist/modes/rpc/rpc-client.js.map +1 -1
  31. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  32. package/dist/modes/rpc/rpc-mode.js +29 -6
  33. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  34. package/dist/modes/rpc/rpc-types.d.ts +2 -0
  35. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  36. package/dist/modes/rpc/rpc-types.js.map +1 -1
  37. package/docs/dashboard.md +21 -15
  38. package/docs/rpc.md +8 -2
  39. package/docs/settings.md +1 -1
  40. package/package.json +1 -1
@@ -15,13 +15,14 @@ import { basename } from "node:path";
15
15
  import { isValidThinkingLevel, VALID_THINKING_LEVELS } from "../../cli/args.js";
16
16
  import { VERSION } from "../../config.js";
17
17
  import { canonicalizeTrustedRoots, matchContextTrust, validateTrustedContextFolder, validateTrustedContextFolders, } from "../../core/context-trust.js";
18
- import { DailyCostTracker } from "../../core/daily-cost-tracker.js";
18
+ import { DailyCostTracker, dailyCostSourcesForSession, } from "../../core/daily-cost-tracker.js";
19
19
  import { acquireDreamLock, buildDreamPrompt, cleanupDreamTmpDirs, parseDreamCommand, performDreamBackup, pruneOldBackups, resolveDreamContext, validateArchivePath, validateMemoryLinks, } from "../../core/dream.js";
20
20
  import { getGitBranch } from "../../core/git-branch.js";
21
21
  import { parseModelPattern, resolveModelScopePatterns } from "../../core/model-resolver.js";
22
22
  import { takeOverStdout, writeRawStdout } from "../../core/output-guard.js";
23
23
  import { SessionManager } from "../../core/session-manager.js";
24
24
  import { BUILTIN_SLASH_COMMANDS, parseBuiltinSlashCommand } from "../../core/slash-commands.js";
25
+ import { SubagentSessionCostTracker } from "../../core/subagent-session-cost-tracker.js";
25
26
  import { TabTitleGenerator } from "../../core/tab-title.js";
26
27
  import { validateThinkingLevelForModel } from "../../core/thinking.js";
27
28
  import { resolveToCwd } from "../../core/tools/path-utils.js";
@@ -1446,6 +1447,9 @@ export async function runRpcMode(session, modelFallbackMessage) {
1446
1447
  let shutdownRequested = false;
1447
1448
  let dailyCostTracker;
1448
1449
  let dailyCostTrackerPrimed = false;
1450
+ let subagentSessionCostTracker;
1451
+ let subagentCostGeneration = 0;
1452
+ let refreshedSubagentCostGeneration = -1;
1449
1453
  // Extension UI context uses the RPC protocol; built by a module-scope
1450
1454
  // factory so the dialog round trip is unit-testable (see createRpcExtensionUIContext).
1451
1455
  const createExtensionUIContext = () => createRpcExtensionUIContext(output, pendingExtensionRequests, () => void session.abort());
@@ -1487,13 +1491,13 @@ export async function runRpcMode(session, modelFallbackMessage) {
1487
1491
  output({ type: "extension_error", extensionPath: err.extensionPath, event: err.event, error: err.error });
1488
1492
  },
1489
1493
  });
1490
- const getDailyCost = async () => {
1491
- dailyCostTracker ??= new DailyCostTracker();
1494
+ const getDailyCostBreakdown = async () => {
1495
+ dailyCostTracker ??= new DailyCostTracker(dailyCostSourcesForSession(session));
1492
1496
  if (!dailyCostTrackerPrimed) {
1493
1497
  await dailyCostTracker.refresh();
1494
1498
  dailyCostTrackerPrimed = true;
1495
1499
  }
1496
- return dailyCostTracker.getDailyCost();
1500
+ return dailyCostTracker.getDailyCostBreakdown();
1497
1501
  };
1498
1502
  const cwd = session.cwd;
1499
1503
  const tabTitleSettings = session.settingsManager.getTabTitleSettings();
@@ -1533,6 +1537,10 @@ export async function runRpcMode(session, modelFallbackMessage) {
1533
1537
  const dashboardEventProjector = session.uiType === "dashboard" ? createDashboardRpcEventProjector() : undefined;
1534
1538
  // Output all agent events as JSON
1535
1539
  session.subscribe((event) => {
1540
+ if (event.type === "background_agent_end") {
1541
+ // Force the next stats request to await a fresh per-session cost scan.
1542
+ subagentCostGeneration++;
1543
+ }
1536
1544
  if (tabTitleGenerator && !session.sessionName) {
1537
1545
  if (event.type === "tool_execution_end") {
1538
1546
  tabTitleGenerator.onToolEnd({
@@ -1650,7 +1658,12 @@ export async function runRpcMode(session, modelFallbackMessage) {
1650
1658
  return success(id, "get_git_branch", { branch: getGitBranch(session.cwd) });
1651
1659
  }
1652
1660
  case "get_daily_cost": {
1653
- return success(id, "get_daily_cost", { cost: await getDailyCost() });
1661
+ const breakdown = await getDailyCostBreakdown();
1662
+ return success(id, "get_daily_cost", {
1663
+ cost: breakdown.total,
1664
+ main: breakdown.main,
1665
+ subagent: breakdown.subagent,
1666
+ });
1654
1667
  }
1655
1668
  // =================================================================
1656
1669
  // Model
@@ -1791,8 +1804,17 @@ export async function runRpcMode(session, modelFallbackMessage) {
1791
1804
  // Session
1792
1805
  // =================================================================
1793
1806
  case "get_session_stats": {
1807
+ subagentSessionCostTracker ??= new SubagentSessionCostTracker();
1808
+ if (refreshedSubagentCostGeneration !== subagentCostGeneration) {
1809
+ const refreshGeneration = subagentCostGeneration;
1810
+ await subagentSessionCostTracker.refresh();
1811
+ refreshedSubagentCostGeneration = refreshGeneration;
1812
+ }
1794
1813
  const stats = session.getSessionStats();
1795
- return success(id, "get_session_stats", stats);
1814
+ return success(id, "get_session_stats", {
1815
+ ...stats,
1816
+ subagentCost: subagentSessionCostTracker.getCost(),
1817
+ });
1796
1818
  }
1797
1819
  case "get_performance_stats": {
1798
1820
  return success(id, "get_performance_stats", getPerformanceStatsData(session));
@@ -1968,6 +1990,7 @@ export async function runRpcMode(session, modelFallbackMessage) {
1968
1990
  await currentRunner.emit({ type: "session_shutdown" });
1969
1991
  }
1970
1992
  dailyCostTracker?.dispose();
1993
+ subagentSessionCostTracker?.dispose();
1971
1994
  detachInput();
1972
1995
  process.stdin.pause();
1973
1996
  process.exit(0);