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.
- package/.agents/skills/index.json +16 -0
- package/.agents/skills/motion/SKILL.md +27 -0
- package/README.md +122 -1
- package/dist/cli/chat.d.ts +76 -17
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +330 -137
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +17 -3
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/doctor.d.ts +31 -2
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +143 -7
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/execute.d.ts.map +1 -1
- package/dist/cli/execute.js +63 -22
- package/dist/cli/execute.js.map +1 -1
- package/dist/cli/failover-runner.js +4 -4
- package/dist/cli/failover-runner.js.map +1 -1
- package/dist/cli/gateway.js +13 -13
- package/dist/cli/gateway.js.map +1 -1
- package/dist/cli/loop-executor.d.ts +22 -0
- package/dist/cli/loop-executor.d.ts.map +1 -1
- package/dist/cli/loop-executor.js +60 -13
- package/dist/cli/loop-executor.js.map +1 -1
- package/dist/cli/parity.d.ts +12 -0
- package/dist/cli/parity.d.ts.map +1 -1
- package/dist/cli/parity.js +46 -1
- package/dist/cli/parity.js.map +1 -1
- package/dist/cli/stats.d.ts +62 -4
- package/dist/cli/stats.d.ts.map +1 -1
- package/dist/cli/stats.js +282 -5
- package/dist/cli/stats.js.map +1 -1
- package/dist/cli/tool-install-prompt.d.ts +2 -7
- package/dist/cli/tool-install-prompt.d.ts.map +1 -1
- package/dist/cli/tool-install-prompt.js +11 -28
- package/dist/cli/tool-install-prompt.js.map +1 -1
- package/dist/cli/ui/index.d.ts +2 -2
- package/dist/cli/ui/index.d.ts.map +1 -1
- package/dist/cli/ui/index.js +1 -1
- package/dist/cli/ui/index.js.map +1 -1
- package/dist/cli/ui/presenter.d.ts +43 -0
- package/dist/cli/ui/presenter.d.ts.map +1 -1
- package/dist/cli/ui/presenter.js +88 -1
- package/dist/cli/ui/presenter.js.map +1 -1
- package/dist/config/manager.d.ts +29 -1
- package/dist/config/manager.d.ts.map +1 -1
- package/dist/config/manager.js +178 -143
- package/dist/config/manager.js.map +1 -1
- package/dist/config/paths.d.ts +48 -1
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +59 -9
- package/dist/config/paths.js.map +1 -1
- package/dist/config/scratch-workspace.d.ts +134 -0
- package/dist/config/scratch-workspace.d.ts.map +1 -0
- package/dist/config/scratch-workspace.js +213 -0
- package/dist/config/scratch-workspace.js.map +1 -0
- package/dist/config/service-catalog.js +1 -1
- package/dist/config/service-catalog.js.map +1 -1
- package/dist/config/service-probe.js +1 -1
- package/dist/config/service-probe.js.map +1 -1
- package/dist/config/types.d.ts +22 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/gateway/adapters.d.ts +24 -0
- package/dist/gateway/adapters.d.ts.map +1 -1
- package/dist/gateway/adapters.js +20 -8
- package/dist/gateway/adapters.js.map +1 -1
- package/dist/gateway/oversized-reply.d.ts +39 -0
- package/dist/gateway/oversized-reply.d.ts.map +1 -0
- package/dist/gateway/oversized-reply.js +54 -0
- package/dist/gateway/oversized-reply.js.map +1 -0
- package/dist/gateway/registry.d.ts +0 -10
- package/dist/gateway/registry.d.ts.map +1 -1
- package/dist/gateway/registry.js +149 -5
- package/dist/gateway/registry.js.map +1 -1
- package/dist/learning/auto-router.d.ts +30 -4
- package/dist/learning/auto-router.d.ts.map +1 -1
- package/dist/learning/auto-router.js +54 -38
- package/dist/learning/auto-router.js.map +1 -1
- package/dist/learning/cost-classification.d.ts +188 -0
- package/dist/learning/cost-classification.d.ts.map +1 -0
- package/dist/learning/cost-classification.js +294 -0
- package/dist/learning/cost-classification.js.map +1 -0
- package/dist/learning/cost-ledger-maintenance.d.ts +122 -0
- package/dist/learning/cost-ledger-maintenance.d.ts.map +1 -0
- package/dist/learning/cost-ledger-maintenance.js +289 -0
- package/dist/learning/cost-ledger-maintenance.js.map +1 -0
- package/dist/learning/cost-reconcile.d.ts +160 -0
- package/dist/learning/cost-reconcile.d.ts.map +1 -0
- package/dist/learning/cost-reconcile.js +238 -0
- package/dist/learning/cost-reconcile.js.map +1 -0
- package/dist/learning/cost-tracker.d.ts +134 -13
- package/dist/learning/cost-tracker.d.ts.map +1 -1
- package/dist/learning/cost-tracker.js +190 -68
- package/dist/learning/cost-tracker.js.map +1 -1
- package/dist/learning/model-pricing.d.ts +240 -0
- package/dist/learning/model-pricing.d.ts.map +1 -0
- package/dist/learning/model-pricing.js +309 -0
- package/dist/learning/model-pricing.js.map +1 -0
- package/dist/learning/model-selection.d.ts +15 -0
- package/dist/learning/model-selection.d.ts.map +1 -1
- package/dist/learning/model-selection.js +22 -2
- package/dist/learning/model-selection.js.map +1 -1
- package/dist/learning/model-warmup.d.ts.map +1 -1
- package/dist/learning/model-warmup.js +4 -1
- package/dist/learning/model-warmup.js.map +1 -1
- package/dist/learning/quota-ledger.d.ts +24 -0
- package/dist/learning/quota-ledger.d.ts.map +1 -1
- package/dist/learning/quota-ledger.js +40 -0
- package/dist/learning/quota-ledger.js.map +1 -1
- package/dist/learning/runtime-dependencies.d.ts +183 -0
- package/dist/learning/runtime-dependencies.d.ts.map +1 -0
- package/dist/learning/runtime-dependencies.js +349 -0
- package/dist/learning/runtime-dependencies.js.map +1 -0
- package/dist/learning/session-store.d.ts +1 -5
- package/dist/learning/session-store.d.ts.map +1 -1
- package/dist/learning/session-store.js +10 -1
- package/dist/learning/session-store.js.map +1 -1
- package/dist/learning/skill-store.d.ts.map +1 -1
- package/dist/learning/skill-store.js +6 -5
- package/dist/learning/skill-store.js.map +1 -1
- package/dist/learning/step-checkpoint.d.ts +32 -3
- package/dist/learning/step-checkpoint.d.ts.map +1 -1
- package/dist/learning/step-checkpoint.js +33 -4
- package/dist/learning/step-checkpoint.js.map +1 -1
- package/dist/mcp/settings.d.ts +15 -3
- package/dist/mcp/settings.d.ts.map +1 -1
- package/dist/mcp/settings.js +30 -15
- package/dist/mcp/settings.js.map +1 -1
- package/dist/parity/drivers.d.ts.map +1 -1
- package/dist/parity/drivers.js +31 -5
- package/dist/parity/drivers.js.map +1 -1
- package/dist/skills/bundled-skills-phase3.d.ts +14 -0
- package/dist/skills/bundled-skills-phase3.d.ts.map +1 -1
- package/dist/skills/bundled-skills-phase3.js +50 -0
- package/dist/skills/bundled-skills-phase3.js.map +1 -1
- package/dist/tools/child-agent-runtime.d.ts.map +1 -1
- package/dist/tools/child-agent-runtime.js +13 -7
- package/dist/tools/child-agent-runtime.js.map +1 -1
- package/dist/tools/followup-utils.d.ts +36 -0
- package/dist/tools/followup-utils.d.ts.map +1 -1
- package/dist/tools/followup-utils.js +66 -0
- package/dist/tools/followup-utils.js.map +1 -1
- package/dist/tools/modality/browser.js +2 -2
- package/dist/tools/modality/browser.js.map +1 -1
- package/dist/tools/modality/image-gen.d.ts +1 -1
- package/dist/tools/modality/image-gen.js +1 -1
- package/dist/tools/modality/image-providers.js +1 -1
- package/dist/tools/modality/image-providers.js.map +1 -1
- package/dist/tools/modality/motion-presets.d.ts +62 -0
- package/dist/tools/modality/motion-presets.d.ts.map +1 -0
- package/dist/tools/modality/motion-presets.js +399 -0
- package/dist/tools/modality/motion-presets.js.map +1 -0
- package/dist/tools/modality/motion-tool.d.ts +62 -0
- package/dist/tools/modality/motion-tool.d.ts.map +1 -0
- package/dist/tools/modality/motion-tool.js +220 -0
- package/dist/tools/modality/motion-tool.js.map +1 -0
- package/dist/tools/modality/motion.d.ts +298 -0
- package/dist/tools/modality/motion.d.ts.map +1 -0
- package/dist/tools/modality/motion.js +514 -0
- package/dist/tools/modality/motion.js.map +1 -0
- package/dist/tools/modality/vision.d.ts +1 -1
- package/dist/tools/modality/vision.js +1 -1
- package/dist/tools/modality/voice.js +2 -2
- package/dist/tools/modality/voice.js.map +1 -1
- package/dist/tools/neutts-synth.d.ts +3 -3
- package/dist/tools/neutts-synth.js +3 -3
- package/dist/tools/neutts-synth.js.map +1 -1
- package/dist/tools/process-liveness.d.ts +50 -0
- package/dist/tools/process-liveness.d.ts.map +1 -1
- package/dist/tools/process-liveness.js +82 -9
- package/dist/tools/process-liveness.js.map +1 -1
- package/dist/tools/registry.d.ts +1 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +102 -4
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/run-terminal.d.ts.map +1 -1
- package/dist/tools/run-terminal.js +18 -1
- package/dist/tools/run-terminal.js.map +1 -1
- package/dist/tools/tool-loop.d.ts.map +1 -1
- package/dist/tools/tool-loop.js +71 -19
- package/dist/tools/tool-loop.js.map +1 -1
- package/dist/tools/toolsets.js +2 -2
- package/dist/tools/toolsets.js.map +1 -1
- package/dist/tools/web-research.d.ts +1 -1
- package/dist/tools/web-research.js +3 -3
- package/dist/tools/web-research.js.map +1 -1
- package/dist/utils/workspace-need.d.ts +84 -0
- package/dist/utils/workspace-need.d.ts.map +1 -0
- package/dist/utils/workspace-need.js +227 -0
- package/dist/utils/workspace-need.js.map +1 -0
- package/dist/web-dashboard/chat-console.d.ts +78 -0
- package/dist/web-dashboard/chat-console.d.ts.map +1 -1
- package/dist/web-dashboard/chat-console.js +122 -12
- package/dist/web-dashboard/chat-console.js.map +1 -1
- package/dist/web-dashboard/hub-data.d.ts +9 -1
- package/dist/web-dashboard/hub-data.d.ts.map +1 -1
- package/dist/web-dashboard/hub-data.js +2 -0
- package/dist/web-dashboard/hub-data.js.map +1 -1
- package/dist/web-dashboard/project-context.d.ts +1 -1
- package/dist/web-dashboard/project-context.d.ts.map +1 -1
- package/dist/web-dashboard/project-context.js +7 -1
- package/dist/web-dashboard/project-context.js.map +1 -1
- package/dist/web-dashboard/server.d.ts +33 -0
- package/dist/web-dashboard/server.d.ts.map +1 -1
- package/dist/web-dashboard/server.js +326 -23
- package/dist/web-dashboard/server.js.map +1 -1
- package/dist/web-dashboard/src/types.d.ts +109 -0
- package/dist/web-dashboard/src/types.d.ts.map +1 -1
- package/dist/web-dashboard/task-runner.d.ts +17 -1
- package/dist/web-dashboard/task-runner.d.ts.map +1 -1
- package/dist/web-dashboard/task-runner.js +40 -4
- package/dist/web-dashboard/task-runner.js.map +1 -1
- package/dist/web-dashboard/workspace-guard.d.ts +20 -21
- package/dist/web-dashboard/workspace-guard.d.ts.map +1 -1
- package/dist/web-dashboard/workspace-guard.js +20 -153
- package/dist/web-dashboard/workspace-guard.js.map +1 -1
- package/dist/web-dashboard/workspace-resolution.d.ts +23 -5
- package/dist/web-dashboard/workspace-resolution.d.ts.map +1 -1
- package/dist/web-dashboard/workspace-resolution.js +22 -4
- package/dist/web-dashboard/workspace-resolution.js.map +1 -1
- package/package.json +1 -1
- package/src/web-dashboard/public/assets/index-CzRU84ET.css +1 -0
- package/src/web-dashboard/public/assets/index-V0rIqVbg.js +236 -0
- package/src/web-dashboard/public/assets/index-V0rIqVbg.js.map +1 -0
- package/src/web-dashboard/public/index.html +2 -2
- package/src/web-dashboard/public/assets/index-DycGBWwy.js +0 -236
- package/src/web-dashboard/public/assets/index-DycGBWwy.js.map +0 -1
- 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
|
|
6
|
-
* nuvira stats cost
|
|
7
|
-
* nuvira stats cost --clear
|
|
8
|
-
* nuvira 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
|
package/dist/cli/stats.js.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
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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"}
|
package/dist/cli/ui/index.d.ts
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/cli/ui/index.js
CHANGED
|
@@ -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
|
package/dist/cli/ui/index.js.map
CHANGED
|
@@ -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,
|
|
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":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,EAA8B,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAA+C,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAChG,OAAO,EAAgB,KAAK,KAAK,EAAkB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAI9D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAC5B,sDAAsD;IACtD,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAQpE;
|
|
1
|
+
{"version":3,"file":"presenter.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/presenter.ts"],"names":[],"mappings":"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"}
|