agent-nuvira 3.5.5 → 3.5.7

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 (229) hide show
  1. package/.agents/skills/index.json +16 -0
  2. package/.agents/skills/motion/SKILL.md +27 -0
  3. package/README.md +122 -1
  4. package/dist/cli/chat.d.ts +76 -17
  5. package/dist/cli/chat.d.ts.map +1 -1
  6. package/dist/cli/chat.js +330 -137
  7. package/dist/cli/chat.js.map +1 -1
  8. package/dist/cli/config.d.ts.map +1 -1
  9. package/dist/cli/config.js +17 -3
  10. package/dist/cli/config.js.map +1 -1
  11. package/dist/cli/doctor.d.ts +31 -2
  12. package/dist/cli/doctor.d.ts.map +1 -1
  13. package/dist/cli/doctor.js +143 -7
  14. package/dist/cli/doctor.js.map +1 -1
  15. package/dist/cli/execute.d.ts.map +1 -1
  16. package/dist/cli/execute.js +63 -22
  17. package/dist/cli/execute.js.map +1 -1
  18. package/dist/cli/failover-runner.js +4 -4
  19. package/dist/cli/failover-runner.js.map +1 -1
  20. package/dist/cli/gateway.js +13 -13
  21. package/dist/cli/gateway.js.map +1 -1
  22. package/dist/cli/loop-executor.d.ts +22 -0
  23. package/dist/cli/loop-executor.d.ts.map +1 -1
  24. package/dist/cli/loop-executor.js +60 -13
  25. package/dist/cli/loop-executor.js.map +1 -1
  26. package/dist/cli/parity.d.ts +12 -0
  27. package/dist/cli/parity.d.ts.map +1 -1
  28. package/dist/cli/parity.js +46 -1
  29. package/dist/cli/parity.js.map +1 -1
  30. package/dist/cli/stats.d.ts +62 -4
  31. package/dist/cli/stats.d.ts.map +1 -1
  32. package/dist/cli/stats.js +282 -5
  33. package/dist/cli/stats.js.map +1 -1
  34. package/dist/cli/tool-install-prompt.d.ts +2 -7
  35. package/dist/cli/tool-install-prompt.d.ts.map +1 -1
  36. package/dist/cli/tool-install-prompt.js +11 -28
  37. package/dist/cli/tool-install-prompt.js.map +1 -1
  38. package/dist/cli/ui/index.d.ts +2 -2
  39. package/dist/cli/ui/index.d.ts.map +1 -1
  40. package/dist/cli/ui/index.js +1 -1
  41. package/dist/cli/ui/index.js.map +1 -1
  42. package/dist/cli/ui/presenter.d.ts +43 -0
  43. package/dist/cli/ui/presenter.d.ts.map +1 -1
  44. package/dist/cli/ui/presenter.js +88 -1
  45. package/dist/cli/ui/presenter.js.map +1 -1
  46. package/dist/config/manager.d.ts +29 -1
  47. package/dist/config/manager.d.ts.map +1 -1
  48. package/dist/config/manager.js +178 -143
  49. package/dist/config/manager.js.map +1 -1
  50. package/dist/config/paths.d.ts +48 -1
  51. package/dist/config/paths.d.ts.map +1 -1
  52. package/dist/config/paths.js +59 -9
  53. package/dist/config/paths.js.map +1 -1
  54. package/dist/config/scratch-workspace.d.ts +134 -0
  55. package/dist/config/scratch-workspace.d.ts.map +1 -0
  56. package/dist/config/scratch-workspace.js +213 -0
  57. package/dist/config/scratch-workspace.js.map +1 -0
  58. package/dist/config/service-catalog.js +1 -1
  59. package/dist/config/service-catalog.js.map +1 -1
  60. package/dist/config/service-probe.js +1 -1
  61. package/dist/config/service-probe.js.map +1 -1
  62. package/dist/config/types.d.ts +22 -0
  63. package/dist/config/types.d.ts.map +1 -1
  64. package/dist/gateway/adapters.d.ts +24 -0
  65. package/dist/gateway/adapters.d.ts.map +1 -1
  66. package/dist/gateway/adapters.js +20 -8
  67. package/dist/gateway/adapters.js.map +1 -1
  68. package/dist/gateway/oversized-reply.d.ts +39 -0
  69. package/dist/gateway/oversized-reply.d.ts.map +1 -0
  70. package/dist/gateway/oversized-reply.js +54 -0
  71. package/dist/gateway/oversized-reply.js.map +1 -0
  72. package/dist/gateway/registry.d.ts +0 -10
  73. package/dist/gateway/registry.d.ts.map +1 -1
  74. package/dist/gateway/registry.js +149 -5
  75. package/dist/gateway/registry.js.map +1 -1
  76. package/dist/learning/auto-router.d.ts +30 -4
  77. package/dist/learning/auto-router.d.ts.map +1 -1
  78. package/dist/learning/auto-router.js +54 -38
  79. package/dist/learning/auto-router.js.map +1 -1
  80. package/dist/learning/cost-classification.d.ts +188 -0
  81. package/dist/learning/cost-classification.d.ts.map +1 -0
  82. package/dist/learning/cost-classification.js +294 -0
  83. package/dist/learning/cost-classification.js.map +1 -0
  84. package/dist/learning/cost-ledger-maintenance.d.ts +122 -0
  85. package/dist/learning/cost-ledger-maintenance.d.ts.map +1 -0
  86. package/dist/learning/cost-ledger-maintenance.js +289 -0
  87. package/dist/learning/cost-ledger-maintenance.js.map +1 -0
  88. package/dist/learning/cost-reconcile.d.ts +160 -0
  89. package/dist/learning/cost-reconcile.d.ts.map +1 -0
  90. package/dist/learning/cost-reconcile.js +238 -0
  91. package/dist/learning/cost-reconcile.js.map +1 -0
  92. package/dist/learning/cost-tracker.d.ts +134 -13
  93. package/dist/learning/cost-tracker.d.ts.map +1 -1
  94. package/dist/learning/cost-tracker.js +190 -68
  95. package/dist/learning/cost-tracker.js.map +1 -1
  96. package/dist/learning/model-pricing.d.ts +240 -0
  97. package/dist/learning/model-pricing.d.ts.map +1 -0
  98. package/dist/learning/model-pricing.js +309 -0
  99. package/dist/learning/model-pricing.js.map +1 -0
  100. package/dist/learning/model-selection.d.ts +15 -0
  101. package/dist/learning/model-selection.d.ts.map +1 -1
  102. package/dist/learning/model-selection.js +22 -2
  103. package/dist/learning/model-selection.js.map +1 -1
  104. package/dist/learning/model-warmup.d.ts.map +1 -1
  105. package/dist/learning/model-warmup.js +4 -1
  106. package/dist/learning/model-warmup.js.map +1 -1
  107. package/dist/learning/quota-ledger.d.ts +24 -0
  108. package/dist/learning/quota-ledger.d.ts.map +1 -1
  109. package/dist/learning/quota-ledger.js +40 -0
  110. package/dist/learning/quota-ledger.js.map +1 -1
  111. package/dist/learning/runtime-dependencies.d.ts +183 -0
  112. package/dist/learning/runtime-dependencies.d.ts.map +1 -0
  113. package/dist/learning/runtime-dependencies.js +349 -0
  114. package/dist/learning/runtime-dependencies.js.map +1 -0
  115. package/dist/learning/session-store.d.ts +1 -5
  116. package/dist/learning/session-store.d.ts.map +1 -1
  117. package/dist/learning/session-store.js +10 -1
  118. package/dist/learning/session-store.js.map +1 -1
  119. package/dist/learning/skill-store.d.ts.map +1 -1
  120. package/dist/learning/skill-store.js +6 -5
  121. package/dist/learning/skill-store.js.map +1 -1
  122. package/dist/learning/step-checkpoint.d.ts +32 -3
  123. package/dist/learning/step-checkpoint.d.ts.map +1 -1
  124. package/dist/learning/step-checkpoint.js +33 -4
  125. package/dist/learning/step-checkpoint.js.map +1 -1
  126. package/dist/mcp/settings.d.ts +15 -3
  127. package/dist/mcp/settings.d.ts.map +1 -1
  128. package/dist/mcp/settings.js +30 -15
  129. package/dist/mcp/settings.js.map +1 -1
  130. package/dist/parity/drivers.d.ts.map +1 -1
  131. package/dist/parity/drivers.js +31 -5
  132. package/dist/parity/drivers.js.map +1 -1
  133. package/dist/skills/bundled-skills-phase3.d.ts +14 -0
  134. package/dist/skills/bundled-skills-phase3.d.ts.map +1 -1
  135. package/dist/skills/bundled-skills-phase3.js +50 -0
  136. package/dist/skills/bundled-skills-phase3.js.map +1 -1
  137. package/dist/tools/child-agent-runtime.d.ts.map +1 -1
  138. package/dist/tools/child-agent-runtime.js +13 -7
  139. package/dist/tools/child-agent-runtime.js.map +1 -1
  140. package/dist/tools/followup-utils.d.ts +36 -0
  141. package/dist/tools/followup-utils.d.ts.map +1 -1
  142. package/dist/tools/followup-utils.js +66 -0
  143. package/dist/tools/followup-utils.js.map +1 -1
  144. package/dist/tools/modality/browser.js +2 -2
  145. package/dist/tools/modality/browser.js.map +1 -1
  146. package/dist/tools/modality/image-gen.d.ts +1 -1
  147. package/dist/tools/modality/image-gen.js +1 -1
  148. package/dist/tools/modality/image-providers.js +1 -1
  149. package/dist/tools/modality/image-providers.js.map +1 -1
  150. package/dist/tools/modality/motion-presets.d.ts +62 -0
  151. package/dist/tools/modality/motion-presets.d.ts.map +1 -0
  152. package/dist/tools/modality/motion-presets.js +399 -0
  153. package/dist/tools/modality/motion-presets.js.map +1 -0
  154. package/dist/tools/modality/motion-tool.d.ts +62 -0
  155. package/dist/tools/modality/motion-tool.d.ts.map +1 -0
  156. package/dist/tools/modality/motion-tool.js +220 -0
  157. package/dist/tools/modality/motion-tool.js.map +1 -0
  158. package/dist/tools/modality/motion.d.ts +298 -0
  159. package/dist/tools/modality/motion.d.ts.map +1 -0
  160. package/dist/tools/modality/motion.js +514 -0
  161. package/dist/tools/modality/motion.js.map +1 -0
  162. package/dist/tools/modality/vision.d.ts +1 -1
  163. package/dist/tools/modality/vision.js +1 -1
  164. package/dist/tools/modality/voice.js +2 -2
  165. package/dist/tools/modality/voice.js.map +1 -1
  166. package/dist/tools/neutts-synth.d.ts +3 -3
  167. package/dist/tools/neutts-synth.js +3 -3
  168. package/dist/tools/neutts-synth.js.map +1 -1
  169. package/dist/tools/process-liveness.d.ts +50 -0
  170. package/dist/tools/process-liveness.d.ts.map +1 -1
  171. package/dist/tools/process-liveness.js +82 -9
  172. package/dist/tools/process-liveness.js.map +1 -1
  173. package/dist/tools/registry.d.ts +1 -1
  174. package/dist/tools/registry.d.ts.map +1 -1
  175. package/dist/tools/registry.js +102 -4
  176. package/dist/tools/registry.js.map +1 -1
  177. package/dist/tools/run-terminal.d.ts.map +1 -1
  178. package/dist/tools/run-terminal.js +18 -1
  179. package/dist/tools/run-terminal.js.map +1 -1
  180. package/dist/tools/tool-loop.d.ts.map +1 -1
  181. package/dist/tools/tool-loop.js +71 -19
  182. package/dist/tools/tool-loop.js.map +1 -1
  183. package/dist/tools/toolsets.js +2 -2
  184. package/dist/tools/toolsets.js.map +1 -1
  185. package/dist/tools/web-research.d.ts +1 -1
  186. package/dist/tools/web-research.js +3 -3
  187. package/dist/tools/web-research.js.map +1 -1
  188. package/dist/utils/workspace-need.d.ts +84 -0
  189. package/dist/utils/workspace-need.d.ts.map +1 -0
  190. package/dist/utils/workspace-need.js +227 -0
  191. package/dist/utils/workspace-need.js.map +1 -0
  192. package/dist/web-dashboard/chat-console.d.ts +78 -0
  193. package/dist/web-dashboard/chat-console.d.ts.map +1 -1
  194. package/dist/web-dashboard/chat-console.js +122 -12
  195. package/dist/web-dashboard/chat-console.js.map +1 -1
  196. package/dist/web-dashboard/hub-data.d.ts +9 -1
  197. package/dist/web-dashboard/hub-data.d.ts.map +1 -1
  198. package/dist/web-dashboard/hub-data.js +2 -0
  199. package/dist/web-dashboard/hub-data.js.map +1 -1
  200. package/dist/web-dashboard/project-context.d.ts +1 -1
  201. package/dist/web-dashboard/project-context.d.ts.map +1 -1
  202. package/dist/web-dashboard/project-context.js +7 -1
  203. package/dist/web-dashboard/project-context.js.map +1 -1
  204. package/dist/web-dashboard/server.d.ts +33 -0
  205. package/dist/web-dashboard/server.d.ts.map +1 -1
  206. package/dist/web-dashboard/server.js +326 -23
  207. package/dist/web-dashboard/server.js.map +1 -1
  208. package/dist/web-dashboard/src/types.d.ts +109 -0
  209. package/dist/web-dashboard/src/types.d.ts.map +1 -1
  210. package/dist/web-dashboard/task-runner.d.ts +17 -1
  211. package/dist/web-dashboard/task-runner.d.ts.map +1 -1
  212. package/dist/web-dashboard/task-runner.js +40 -4
  213. package/dist/web-dashboard/task-runner.js.map +1 -1
  214. package/dist/web-dashboard/workspace-guard.d.ts +20 -21
  215. package/dist/web-dashboard/workspace-guard.d.ts.map +1 -1
  216. package/dist/web-dashboard/workspace-guard.js +20 -153
  217. package/dist/web-dashboard/workspace-guard.js.map +1 -1
  218. package/dist/web-dashboard/workspace-resolution.d.ts +23 -5
  219. package/dist/web-dashboard/workspace-resolution.d.ts.map +1 -1
  220. package/dist/web-dashboard/workspace-resolution.js +22 -4
  221. package/dist/web-dashboard/workspace-resolution.js.map +1 -1
  222. package/package.json +1 -1
  223. package/src/web-dashboard/public/assets/index-CzRU84ET.css +1 -0
  224. package/src/web-dashboard/public/assets/index-V0rIqVbg.js +236 -0
  225. package/src/web-dashboard/public/assets/index-V0rIqVbg.js.map +1 -0
  226. package/src/web-dashboard/public/index.html +2 -2
  227. package/src/web-dashboard/public/assets/index-DycGBWwy.js +0 -236
  228. package/src/web-dashboard/public/assets/index-DycGBWwy.js.map +0 -1
  229. package/src/web-dashboard/public/assets/index-aO3aG7ex.css +0 -1
package/dist/cli/stats.js CHANGED
@@ -2,16 +2,38 @@
2
2
  * Stats command — View usage statistics and cost tracking.
3
3
  *
4
4
  * Usage:
5
- * nuvira stats — Show all stats summary
6
- * nuvira stats cost — Show cost tracking details
7
- * nuvira stats cost --clear — Reset cost tracking data
8
- * nuvira stats history — Show conversation history stats
5
+ * nuvira stats — Show all stats summary
6
+ * nuvira stats cost — Show cost tracking details
7
+ * nuvira stats cost --clear — Reset cost tracking data
8
+ * nuvira stats cost reconcile ... — compare the ledger to a provider invoice
9
+ * nuvira stats cost reprice — re-price legacy rows (dry run; --apply writes)
10
+ * nuvira stats history — Show conversation history stats
11
+ *
12
+ * ─── WHY reconcile / reprice EXIST (read before editing their defaults) ─────
13
+ *
14
+ * `stats cost` prints what the ledger can EVIDENCE, and the ledger cannot see a
15
+ * provider's invoice. That is not a defect to paper over with a nicer estimate:
16
+ * the fix is to let the operator supply the one number that is actual — the
17
+ * provider's own charge for a stated window — and to say honestly how far the
18
+ * ledger is from it, and what the gap consists of. `reconcile` is therefore the
19
+ * only command in this file that reports a figure no local computation could
20
+ * produce, and it never adjusts the ledger to agree.
21
+ *
22
+ * `reprice` is the explicit, dry-run-default repair of the rows already on disk
23
+ * (legacy prices from the retired hardcoded table, test-origin rows). Both are
24
+ * documented in `learning/cost-reconcile.ts` and `learning/cost-ledger-maintenance.ts`.
9
25
  */
10
26
  import { Command } from 'commander';
11
27
  import { BaseCommand } from './commands.js';
12
- import { getCostTracker } from '../learning/cost-tracker.js';
28
+ import { getCostTracker, resetPricingContextCache, } from '../learning/cost-tracker.js';
29
+ import { asBillingTier, BILLING_TIERS } from '../learning/model-pricing.js';
30
+ import { formatReconciliation, reconcileEntries, recordReconciliation, reconciliationLedgerPath, } from '../learning/cost-reconcile.js';
31
+ import { formatMaintenanceReport, maintainCostLedger } from '../learning/cost-ledger-maintenance.js';
32
+ import { CATALOG_PROVIDER_IDS } from '../inference/provider-catalog.js';
13
33
  import { getChatHistory } from '../context/history.js';
14
34
  import { logger } from '../utils/logger.js';
35
+ /** One day in ms — the unit the CLI's window flags speak in. */
36
+ const DAY_MS = 24 * 60 * 60 * 1000;
15
37
  export class StatsCommand extends BaseCommand {
16
38
  create() {
17
39
  const command = new Command('stats')
@@ -23,6 +45,30 @@ export class StatsCommand extends BaseCommand {
23
45
  .action(async (options) => {
24
46
  await this.showCost(options);
25
47
  });
48
+ // ── cost reconcile ───────────────────────────────────────────────────
49
+ costCmd.addCommand(new Command('reconcile')
50
+ .description("Compare this ledger to a provider's OWN invoice for a window (the only 'actual' figure)")
51
+ .requiredOption('-p, --provider <id>', 'provider id the invoice line belongs to (e.g. deepseek)')
52
+ .requiredOption('-a, --amount <usd>', "the provider's own charge for the window, in USD (e.g. 12.34)")
53
+ .option('--days <n>', `window: the last N days, ending now (default: the current calendar month)`)
54
+ .option('--since <iso|epochMs>', 'window start (overrides --days)')
55
+ .option('--until <iso|epochMs>', 'window end, exclusive (default: now)')
56
+ .option('--note <text>', 'where the figure came from, printed with the result (e.g. "dashboard, Oct 2026")')
57
+ .option('--declare-tier [tier]', 'record the billing fact this invoice EVIDENCES (paid|free|subscription); no value = the tier the invoice proves')
58
+ .option('--json', 'machine-readable JSON report')
59
+ .action(async (options) => {
60
+ await this.reconcileCost(options);
61
+ }));
62
+ // ── cost reprice ─────────────────────────────────────────────────────
63
+ costCmd.addCommand(new Command('reprice')
64
+ .description('Re-price legacy ledger rows with the ONE price source; drop test rows (dry run by default)')
65
+ .option('--apply', 'write the repaired ledger (a .bak is kept beside it)')
66
+ .option('--keep-test-rows', 're-price only: do NOT drop test-origin / fixture-id rows')
67
+ .option('--file <path>', 'a specific cost ledger file (default: the resolved profile ledger)')
68
+ .option('--json', 'machine-readable JSON report')
69
+ .action((options) => {
70
+ this.repriceLedger(options);
71
+ }));
26
72
  command.addCommand(costCmd);
27
73
  // ── history ──────────────────────────────────────────────────────────
28
74
  const historyCmd = new Command('history')
@@ -46,6 +92,221 @@ export class StatsCommand extends BaseCommand {
46
92
  const tracker = getCostTracker();
47
93
  console.log(`\n${tracker.formatSummary()}`);
48
94
  }
95
+ /**
96
+ * `stats cost reconcile` — the provider's own figure vs this ledger.
97
+ *
98
+ * Two rules the defaults encode:
99
+ * 1. A WINDOW IS MANDATORY. Comparing an all-time ledger to a monthly invoice
100
+ * is a meaningless subtraction that would print a delta as if it meant
101
+ * something. The default is the current calendar month, and the window is
102
+ * always printed so a partial (still-running) period can be judged as such.
103
+ * 2. THE PROVIDER IS VALIDATED. An unknown id would otherwise read as "no
104
+ * rows", i.e. a silent zero that looks like "you used nothing" rather than
105
+ * "you typed the wrong id".
106
+ */
107
+ async reconcileCost(options) {
108
+ const claim = this.buildClaim(options);
109
+ if (!claim)
110
+ return;
111
+ const report = reconcileEntries(claim, getCostTracker().getAllEntries());
112
+ // The record is the audit trail: "this was checked against the October
113
+ // invoice, and the gap was $0.03". A later check appends; nothing is erased.
114
+ recordReconciliation(report);
115
+ if (options.json) {
116
+ console.log(JSON.stringify(report, null, 2));
117
+ return;
118
+ }
119
+ console.log(`\n${formatReconciliation(report)}`);
120
+ console.log(` Recorded in ${reconciliationLedgerPath()}\n`);
121
+ if (options.declareTier !== undefined) {
122
+ this.applyTierDeclaration(claim.provider, options.declareTier, report);
123
+ }
124
+ else if (report.tierEvidence) {
125
+ // Evidence was found but recording it is the operator's call: writing a
126
+ // config field on the strength of a run they may not have intended as a
127
+ // declaration would be its own kind of assumption.
128
+ logger.info(` This invoice EVIDENCES billingTier=${report.tierEvidence.tier} for ${claim.provider}. Record it with:\n` +
129
+ ` nuvira stats cost reconcile --provider ${claim.provider} --amount ${claim.invoiceUsd} --declare-tier`);
130
+ }
131
+ }
132
+ /**
133
+ * Turn the CLI flags into an invoice claim, or explain why they cannot be.
134
+ * Returns null after printing the reason — the command exits without a report
135
+ * rather than reconciling against a window we had to guess.
136
+ */
137
+ buildClaim(options) {
138
+ const provider = (options.provider || '').trim();
139
+ const known = new Set([
140
+ ...CATALOG_PROVIDER_IDS,
141
+ ...Object.keys(this.configManager.getAll().providers || {}),
142
+ // Ids that appear in the ledger are real even when they are not in the
143
+ // catalog (a plugin provider, a sidecar gateway) — never reject those.
144
+ ...getCostTracker()
145
+ .getAllEntries()
146
+ .map((e) => e.provider),
147
+ ]);
148
+ if (!known.has(provider)) {
149
+ logger.error(`Unknown provider "${provider}". Known ids: ${[...known].sort().join(', ')}`);
150
+ logger.info(' Use the id the ledger records (the `By Provider` table of `nuvira stats cost`) — reconciling against a typo would report zero usage.');
151
+ return null;
152
+ }
153
+ const invoiceUsd = parseAmount(options.amount);
154
+ if (invoiceUsd === null) {
155
+ logger.error(`Invalid --amount "${options.amount}". Pass the provider's charge in USD, e.g. --amount 12.34 (0 is valid: nothing was charged).`);
156
+ return null;
157
+ }
158
+ const now = Date.now();
159
+ let since;
160
+ let until;
161
+ const parseWhen = (raw, label) => {
162
+ const asNumber = Number(raw);
163
+ if (Number.isFinite(asNumber) && asNumber > 0)
164
+ return asNumber;
165
+ const parsed = Date.parse(raw);
166
+ if (Number.isFinite(parsed))
167
+ return parsed;
168
+ logger.error(`Invalid ${label} "${raw}". Use an ISO date (2026-10-01) or epoch milliseconds.`);
169
+ return null;
170
+ };
171
+ if (options.since !== undefined) {
172
+ if (options.days !== undefined) {
173
+ logger.error('Use either --since or --days, not both — the window must be unambiguous.');
174
+ return null;
175
+ }
176
+ const parsed = parseWhen(options.since, '--since');
177
+ if (parsed === null)
178
+ return null;
179
+ since = parsed;
180
+ }
181
+ else if (options.days !== undefined) {
182
+ const days = Number(options.days);
183
+ if (!Number.isFinite(days) || days <= 0) {
184
+ logger.error(`Invalid --days "${options.days}". Pass a positive number of days.`);
185
+ return null;
186
+ }
187
+ since = now - days * DAY_MS;
188
+ }
189
+ else {
190
+ // The current calendar month, local time — what most providers bill in.
191
+ const start = new Date(now);
192
+ start.setDate(1);
193
+ start.setHours(0, 0, 0, 0);
194
+ since = start.getTime();
195
+ if (since > now) {
196
+ // A clock at the very start of the month: fall back to the last 24h so
197
+ // the window is never empty-by-construction.
198
+ since = now - DAY_MS;
199
+ }
200
+ }
201
+ if (options.until !== undefined) {
202
+ const parsed = parseWhen(options.until, '--until');
203
+ if (parsed === null)
204
+ return null;
205
+ until = parsed;
206
+ }
207
+ else {
208
+ // HALF-OPEN WINDOW, INCLUSIVE-AT-THE-END DEFAULT. A ledger row's timestamp
209
+ // is `Date.now()` at record time and so is this one, in the SAME
210
+ // millisecond resolution — so a default end of exactly `now` drops a row
211
+ // recorded a moment earlier. MEASURED while writing these tests: the row
212
+ // landed ON `until` and the report said "no ledger rows in this window".
213
+ // A boundary the operator did not state has no business excluding
214
+ // anything, so the default end is one millisecond past now. An EXPLICIT
215
+ // `--until` keeps the half-open meaning, so reconciling September and then
216
+ // October cannot count a midnight-boundary row twice.
217
+ until = now + 1;
218
+ }
219
+ if (until <= since) {
220
+ logger.error('The window end must be after its start.');
221
+ return null;
222
+ }
223
+ const startOfMonth = new Date(since);
224
+ if (until > now - 60_000 && startOfMonth.getDate() === 1) {
225
+ logger.info(' Note: the window runs up to now, so if this billing period has not closed the invoice may still be partial.');
226
+ }
227
+ return {
228
+ provider,
229
+ invoiceUsd,
230
+ since,
231
+ until,
232
+ ...(options.note ? { note: options.note } : {}),
233
+ };
234
+ }
235
+ /**
236
+ * Record the billing fact, but ONLY one the invoice does not contradict.
237
+ *
238
+ * This is the whole point of the exercise: `billingTier` moves the headline
239
+ * from "unverified" to "billed", so letting a user declare `free` while holding
240
+ * an invoice that charged $18 would reintroduce exactly the fabricated picture
241
+ * this change removed. A refusal is the useful answer.
242
+ */
243
+ applyTierDeclaration(provider, requested, report) {
244
+ let tier;
245
+ if (requested === true) {
246
+ if (!report.tierEvidence) {
247
+ logger.error('This reconciliation does not prove a billing tier — the CLI will not guess one. Pass it explicitly if you know it: --declare-tier paid|free|subscription');
248
+ return;
249
+ }
250
+ tier = report.tierEvidence.tier;
251
+ }
252
+ else {
253
+ const typed = asBillingTier(String(requested).trim().toLowerCase());
254
+ if (!BILLING_TIERS.includes(String(requested).trim().toLowerCase())) {
255
+ logger.error(`Invalid tier "${String(requested)}". Valid values: ${BILLING_TIERS.join(' | ')}.`);
256
+ return;
257
+ }
258
+ tier = typed;
259
+ }
260
+ // The invoice is evidence against these two claims; refuse rather than write
261
+ // a fact the provider's own bill contradicts.
262
+ if ((tier === 'free' || tier === 'subscription') && report.invoiceUsd > 0) {
263
+ logger.error(`Refusing to declare "${tier}": the invoice you entered charged $${report.invoiceUsd.toFixed(6)} for this window, so this key IS billed per call. Declare \`paid\` (metered), or \`subscription\` only if a flat plan covers these calls and the charge you entered is that plan's fee.`);
264
+ return;
265
+ }
266
+ if (tier === 'paid' && report.invoiceUsd === 0 && report.requests > 0) {
267
+ logger.error(`Refusing to declare "paid": the invoice you entered is $0 across ${report.requests} call(s), so nothing was charged. Declare \`free\`, or re-run with the correct invoice amount.`);
268
+ return;
269
+ }
270
+ this.configManager.save({ providers: { [provider]: { billingTier: tier } } });
271
+ // The classification context caches a config read for the process; drop it so
272
+ // any later read in this process (tests, a wrapper) sees the new fact.
273
+ resetPricingContextCache();
274
+ logger.success(`Recorded providers.${provider}.billingTier = ${tier} — evidenced by the invoice, not assumed.`);
275
+ if (tier === 'paid') {
276
+ logger.info(' List-priced calls for this provider now count as an estimated bill (the invoice remains the actual figure).');
277
+ }
278
+ else {
279
+ logger.info(' Calls for this provider are now $0 billed by evidence; their list price is reported as value, never spend.');
280
+ }
281
+ }
282
+ /**
283
+ * `stats cost reprice` — the explicit repair of the rows already on disk.
284
+ *
285
+ * Dry run by default: the ledger is the user's billing history, and a reprice
286
+ * changes every legacy figure in it. `--apply` writes once, after taking a
287
+ * backup, and the report says exactly what changed either way.
288
+ */
289
+ repriceLedger(options) {
290
+ const report = maintainCostLedger({
291
+ ...(options.file ? { file: options.file } : {}),
292
+ apply: options.apply === true,
293
+ pruneTestRows: options.keepTestRows !== true,
294
+ });
295
+ if (options.json) {
296
+ console.log(JSON.stringify(report, null, 2));
297
+ return;
298
+ }
299
+ console.log(`\n${formatMaintenanceReport(report)}`);
300
+ if (report.applied) {
301
+ logger.success(`Ledger re-priced: ${report.rows.repriced} row(s) repaired, ${report.rows.testOriginRemoved + report.rows.fixtureRemoved} test row(s) removed.`);
302
+ // A reprice rewrites the stored figures; anything cached for classification
303
+ // in this process is now stale by definition.
304
+ resetPricingContextCache();
305
+ }
306
+ else if (report.rows.repriced + report.rows.testOriginRemoved + report.rows.fixtureRemoved > 0) {
307
+ logger.info(' Re-run with --apply to write (a .bak is kept beside the ledger).');
308
+ }
309
+ }
49
310
  showHistoryStats() {
50
311
  const history = getChatHistory();
51
312
  const total = history.count();
@@ -75,4 +336,20 @@ export class StatsCommand extends BaseCommand {
75
336
  }
76
337
  }
77
338
  }
339
+ /**
340
+ * Parse a currency amount the way a user copies it off a dashboard: `$12.34`,
341
+ * `1,234.56`, ` 12.34 `. Returns null when it is not a non-negative finite
342
+ * number — a reconciled figure is money, and "NaN" must never reach a report.
343
+ */
344
+ export function parseAmount(raw) {
345
+ if (raw === undefined)
346
+ return null;
347
+ const cleaned = String(raw).replace(/[$,\s]/g, '');
348
+ if (cleaned === '')
349
+ return null;
350
+ const value = Number(cleaned);
351
+ if (!Number.isFinite(value) || value < 0)
352
+ return null;
353
+ return Math.round(value * 1e6) / 1e6;
354
+ }
78
355
  //# sourceMappingURL=stats.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/cli/stats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/cli/stats.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,8 @@
21
21
  * This module is small and dependency-light so it can be unit tested in
22
22
  * isolation (inquirer mocked), mirroring failover-prompt.ts / weak-model-prompt.ts.
23
23
  */
24
+ import { installNeedsHumanInput } from '../learning/runtime-dependencies.js';
25
+ export { installNeedsHumanInput };
24
26
  /** What the user chose when a required system tool is missing. */
25
27
  export type ToolInstallChoice = 'install' | 'manual' | 'skip';
26
28
  /** Per-platform install commands for a known tool. */
@@ -75,13 +77,6 @@ export declare function resolveInstallCommand(tool: string): string | null;
75
77
  * and forbids the enclosed-system refusal.
76
78
  */
77
79
  export declare function toolTakeoverInstruction(tool: string | string[], installCommand?: string | Array<string | null>): string;
78
- /**
79
- * True when an install command cannot run unattended — it will block on human
80
- * input we must not fabricate (a `sudo`/administrator password, the macOS
81
- * `xcode-select --install` GUI, an explicit `--interactive` installer). Used to
82
- * decide between "install it yourself" and the honest handoff note.
83
- */
84
- export declare function installNeedsHumanInput(installCommand: string): boolean;
85
80
  /**
86
81
  * The single, deterministic handoff note for a prerequisite the agent TRIED to
87
82
  * install but that needs a human step it cannot supply. Names what was tried,
@@ -1 +1 @@
1
- {"version":3,"file":"tool-install-prompt.d.ts","sourceRoot":"","sources":["../../src/cli/tool-install-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AASH,kEAAkE;AAClE,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9D,sDAAsD;AACtD,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAsRD,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AA8BD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAY1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAYrF;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEzF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAInD;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEjE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,cAAc,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAC7C,MAAM,CA0BR;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAOtE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAMR;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GACnC,MAAM,GAAG,IAAI,CAoCf;AAID;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,iBAAiB,CAAC,CAgC5B;AAED,+GAA+G;AAC/G,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CASpE"}
1
+ {"version":3,"file":"tool-install-prompt.d.ts","sourceRoot":"","sources":["../../src/cli/tool-install-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AASH,OAAO,EAAE,sBAAsB,EAAuB,MAAM,qCAAqC,CAAC;AAIlG,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAIlC,kEAAkE;AAClE,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9D,sDAAsD;AACtD,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA8QD,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AA8BD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAY1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAYrF;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEzF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAInD;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEjE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,cAAc,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAC7C,MAAM,CA0BR;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAMR;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GACnC,MAAM,GAAG,IAAI,CA+Bf;AAID;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,iBAAiB,CAAC,CAgC5B;AAED,+GAA+G;AAC/G,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CASpE"}
@@ -25,6 +25,13 @@ import inquirer from 'inquirer';
25
25
  import { existsSync } from 'node:fs';
26
26
  import { join, delimiter } from 'node:path';
27
27
  import { logger } from '../utils/logger.js';
28
+ // The Linux package-manager table and the "needs a human" test live with the
29
+ // runtime-dependency list (`learning/runtime-dependencies.ts`) so a command the
30
+ // DOCTOR recommends and a command this module installs can never disagree.
31
+ import { installNeedsHumanInput, linuxInstallCommand } from '../learning/runtime-dependencies.js';
32
+ // Re-exported: this module was the only home of this predicate, and callers
33
+ // (and its own tests) import it from here.
34
+ export { installNeedsHumanInput };
28
35
  // ─── Per-OS install recipes for common build/system tools ──────────────────
29
36
  /**
30
37
  * Known system tools and their OS-appropriate install commands. Keys are the
@@ -291,13 +298,6 @@ const TOOL_INSTALL_OPTIONS = {
291
298
  // bsdtar ships with Windows 10+ — no recipe
292
299
  },
293
300
  };
294
- /** Linux package-manager prefixes, tried in order of preference. */
295
- const LINUX_PKG_MANAGERS = [
296
- { detect: 'apt-get', prefix: 'sudo apt-get update && sudo apt-get' },
297
- { detect: 'dnf', prefix: 'sudo dnf' },
298
- { detect: 'yum', prefix: 'sudo yum' },
299
- { detect: 'apk', prefix: 'sudo apk add' },
300
- ];
301
301
  /** Whether we have an install recipe for this tool on any OS. */
302
302
  export function isKnownSystemTool(tool) {
303
303
  return tool in TOOL_INSTALL_OPTIONS;
@@ -422,18 +422,6 @@ export function toolTakeoverInstruction(tool, installCommand) {
422
422
  lines.push('Do NOT tell the user to install it themselves and do NOT claim you are unable or not permitted — they', 'already asked you to do this work. TRY the install yourself first. If it genuinely needs interactive', 'input you cannot supply (a sudo/admin password, a GUI installer, an OS license prompt), STOP and hand', 'off ONE clear note in exactly this shape, then wait:', ` 🛠️ I tried to install <tool> because <one-line reason it is needed>, but it needs you to do this one step:`, ` <exact command>`, ` Nothing else in the work is blocked — tell me once it is done and I will continue.`, 'Never silently skip the prerequisite and never pretend the task completed without it.');
423
423
  return lines.join('\n');
424
424
  }
425
- /**
426
- * True when an install command cannot run unattended — it will block on human
427
- * input we must not fabricate (a `sudo`/administrator password, the macOS
428
- * `xcode-select --install` GUI, an explicit `--interactive` installer). Used to
429
- * decide between "install it yourself" and the honest handoff note.
430
- */
431
- export function installNeedsHumanInput(installCommand) {
432
- const c = String(installCommand ?? '');
433
- return (/(?:^|[\s;&|])sudo\b/.test(c) ||
434
- /xcode-select\s+--install/.test(c) ||
435
- /--interactive\b/.test(c));
436
- }
437
425
  /**
438
426
  * The single, deterministic handoff note for a prerequisite the agent TRIED to
439
427
  * install but that needs a human step it cannot supply. Names what was tried,
@@ -470,15 +458,10 @@ export function toolInstallCommand(tool, platform, hasPkgMgr) {
470
458
  if (platform === 'linux') {
471
459
  if (!opts.linux)
472
460
  return null;
473
- for (const pm of LINUX_PKG_MANAGERS) {
474
- if (hasPkgMgr(pm.detect)) {
475
- // opts.linux is "install -y <pkg>" — prefix the detected manager.
476
- return `${pm.prefix} ${opts.linux}`.replace(/\s+/g, ' ');
477
- }
478
- }
479
- // Fall back to apt-get (most common) — the runner's install will surface
480
- // a clear error if sudo/apt is unavailable, and the user gets manual steps.
481
- return `sudo apt-get update && sudo apt-get ${opts.linux}`.replace(/\s+/g, ' ');
461
+ // opts.linux is "install -y <pkg>" — strip the manager prefix and let the
462
+ // shared helper pick the package manager this machine actually has (and
463
+ // fall back to apt-get, whose error the runner surfaces as manual steps).
464
+ return linuxInstallCommand(opts.linux.replace(/^install -y\s*/, ''), hasPkgMgr);
482
465
  }
483
466
  if (platform === 'win32') {
484
467
  if (!opts.win32)
@@ -1 +1 @@
1
- {"version":3,"file":"tool-install-prompt.js","sourceRoot":"","sources":["../../src/cli/tool-install-prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-install-prompt.js","sourceRoot":"","sources":["../../src/cli/tool-install-prompt.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,6 @@ export { attachShellCards, diffLineRole, formatDuration, gitDiffCard, shellCard,
16
16
  export type { ShellEndPayload, ToolCallCardInfo } from './cards.js';
17
17
  export { LiveAnswer } from './answer-view.js';
18
18
  export type { LiveAnswerProps } from './answer-view.js';
19
- export { AnswerStream, createCardSink, presentAnswer, presentCard, renderAnswer, shouldUseRichUi, } from './presenter.js';
20
- export type { CardSinkOverrides, PresenterOptions, StreamMeta } from './presenter.js';
19
+ export { AnswerStream, createCardSink, createRunStream, presentAnswer, presentCard, renderAnswer, shouldUseRichUi, THINKING_NOTE, } from './presenter.js';
20
+ export type { CardSinkOverrides, PresenterOptions, RunStream, RunStreamOverrides, StreamMeta, } from './presenter.js';
21
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACnE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9D,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC1F,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEpE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACrF,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,WAAW,EACX,YAAY,EACZ,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACnE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9D,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC1F,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEpE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACrF,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,eAAe,EACf,aAAa,EACb,WAAW,EACX,YAAY,EACZ,eAAe,EACf,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EACT,kBAAkB,EAClB,UAAU,GACX,MAAM,gBAAgB,CAAC"}
@@ -10,5 +10,5 @@ export { parseMarkdown, parseInline, inlineText, blocksToPlainText } from './mar
10
10
  export { renderMarkdown, renderBlocks, renderCard, visibleWidth } from './render.js';
11
11
  export { attachShellCards, diffLineRole, formatDuration, gitDiffCard, shellCard, toolCallCard, } from './cards.js';
12
12
  export { LiveAnswer } from './answer-view.js';
13
- export { AnswerStream, createCardSink, presentAnswer, presentCard, renderAnswer, shouldUseRichUi, } from './presenter.js';
13
+ export { AnswerStream, createCardSink, createRunStream, presentAnswer, presentCard, renderAnswer, shouldUseRichUi, THINKING_NOTE, } from './presenter.js';
14
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGnE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAG1F,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGrF,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,WAAW,EACX,YAAY,EACZ,eAAe,GAChB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGnE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAG1F,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGrF,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,eAAe,EACf,aAAa,EACb,WAAW,EACX,YAAY,EACZ,eAAe,EACf,aAAa,GACd,MAAM,gBAAgB,CAAC"}
@@ -73,6 +73,49 @@ export interface StreamMeta {
73
73
  headerColor?: ThemeRole;
74
74
  note?: string;
75
75
  }
76
+ /** The live seams a RUNNING turn exposes to a view (all optional). */
77
+ export interface RunStreamOverrides extends CardSinkOverrides {
78
+ /** Verbatim model tokens: the answer as it is written. */
79
+ onToken?: (token: string) => void;
80
+ /** The step the run is on — the executor's own progress line. */
81
+ onProgress?: (line: string) => void;
82
+ }
83
+ /**
84
+ * The live EXECUTION view — what the turn is doing, while it does it.
85
+ *
86
+ * Wraps {@link AnswerStream} with the seams a whole turn has (not just the final
87
+ * answer):
88
+ *
89
+ * - `start()` mounts the frame IMMEDIATELY with a `thinking…` note, so the
90
+ * seconds spent waiting for the first token are visible instead of looking
91
+ * like a hang;
92
+ * - `onToken` streams the answer text as it is written (`begin()` on the first
93
+ * token, exactly like the chat surfaces' live preview);
94
+ * - `onToolCall` / `onGitDiff` / the shell bus archive a CARD per completed
95
+ * call, and put the RUNNING call in the note (`⚙ edit_file …`) so the
96
+ * execution half is visible too, not only the prose;
97
+ * - `onProgress` shows the executor's own progress line in the same note slot;
98
+ * - `commit(content)` unmounts the transient frame and prints the FINAL answer
99
+ * once. The live frame is a preview of a stream that may be discarded by the
100
+ * engine (a rejected step, a repair); the authoritative text is what the
101
+ * caller passes here, so it can never be printed twice.
102
+ *
103
+ * Off a real terminal (`pipes`, CI, `--json-events`, `NUVIRA_UI=plain`) this is
104
+ * INERT: no overrides, no frame, and `commit` falls through to `presentAnswer` —
105
+ * the exact bytes those consumers saw before this existed.
106
+ */
107
+ export interface RunStream {
108
+ overrides: RunStreamOverrides;
109
+ /** Mount the live view now, with a note (rich output only). */
110
+ start: (note?: string) => void;
111
+ /** Unmount the live view and print the FINAL answer exactly once. */
112
+ commit: (content: string) => void;
113
+ /** Detach the shell subscription and leave the terminal clean. */
114
+ stop: () => void;
115
+ }
116
+ /** The note shown while the model is working and nothing has arrived yet. */
117
+ export declare const THINKING_NOTE = "thinking\u2026";
118
+ export declare function createRunStream(meta?: StreamMeta, opts?: PresenterOptions): RunStream;
76
119
  /**
77
120
  * Live-streaming answer view.
78
121
  *
@@ -1 +1 @@
1
- {"version":3,"file":"presenter.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/presenter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"presenter.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/presenter.ts"],"names":[],"mappings":"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"}