instar 1.3.780 → 1.3.782

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 (49) hide show
  1. package/dashboard/index.html +161 -0
  2. package/dist/core/IntelligenceRouter.d.ts +9 -14
  3. package/dist/core/IntelligenceRouter.d.ts.map +1 -1
  4. package/dist/core/IntelligenceRouter.js +117 -56
  5. package/dist/core/IntelligenceRouter.js.map +1 -1
  6. package/dist/core/PostUpdateMigrator.d.ts +21 -0
  7. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  8. package/dist/core/PostUpdateMigrator.js +59 -0
  9. package/dist/core/PostUpdateMigrator.js.map +1 -1
  10. package/dist/core/routingPriceAuthority.d.ts +0 -0
  11. package/dist/core/routingPriceAuthority.d.ts.map +1 -0
  12. package/dist/core/routingPriceAuthority.js +0 -0
  13. package/dist/core/routingPriceAuthority.js.map +1 -0
  14. package/dist/core/routingSpendView.d.ts +172 -0
  15. package/dist/core/routingSpendView.d.ts.map +1 -0
  16. package/dist/core/routingSpendView.js +215 -0
  17. package/dist/core/routingSpendView.js.map +1 -0
  18. package/dist/core/types.d.ts +25 -0
  19. package/dist/core/types.d.ts.map +1 -1
  20. package/dist/core/types.js.map +1 -1
  21. package/dist/monitoring/FeatureMetricsLedger.d.ts +74 -2
  22. package/dist/monitoring/FeatureMetricsLedger.d.ts.map +1 -1
  23. package/dist/monitoring/FeatureMetricsLedger.js +233 -8
  24. package/dist/monitoring/FeatureMetricsLedger.js.map +1 -1
  25. package/dist/scaffold/templates.d.ts.map +1 -1
  26. package/dist/scaffold/templates.js +2 -1
  27. package/dist/scaffold/templates.js.map +1 -1
  28. package/dist/server/AgentServer.d.ts +1 -0
  29. package/dist/server/AgentServer.d.ts.map +1 -1
  30. package/dist/server/AgentServer.js +35 -2
  31. package/dist/server/AgentServer.js.map +1 -1
  32. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  33. package/dist/server/CapabilityIndex.js +12 -0
  34. package/dist/server/CapabilityIndex.js.map +1 -1
  35. package/dist/server/routes.d.ts +3 -0
  36. package/dist/server/routes.d.ts.map +1 -1
  37. package/dist/server/routes.js +46 -0
  38. package/dist/server/routes.js.map +1 -1
  39. package/package.json +1 -1
  40. package/scripts/routing-price-refresh.mjs +216 -0
  41. package/scripts/routing-prices.manifest.json +64 -0
  42. package/src/data/builtin-manifest.json +64 -64
  43. package/src/scaffold/templates/jobs/instar/routing-price-refresh.md +30 -0
  44. package/src/scaffold/templates.ts +2 -1
  45. package/upgrades/1.3.781.md +25 -0
  46. package/upgrades/1.3.782.md +60 -0
  47. package/upgrades/nature-routing-a2.2-enforcing.eli16.md +50 -0
  48. package/upgrades/side-effects/nature-routing-a2.2-enforcing.md +142 -0
  49. package/upgrades/side-effects/routing-spend-increment-a.md +84 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routingPriceAuthority.d.ts","sourceRoot":"","sources":["../../src/core/routingPriceAuthority.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routingPriceAuthority.js","sourceRoot":"","sources":["../../src/core/routingPriceAuthority.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * routingSpendView.ts — Surface 1 (read-only spend/caps VIEW) of the Routing Control
3
+ * Room (docs/specs/routing-control-room-spend-alerts.md, Increment A).
4
+ *
5
+ * A pure composition (mirroring `natureRoutingMap.ts`): it turns the IMMUTABLE token
6
+ * rollup (FeatureMetricsLedger Layer 2) into a priced REPORTING view by joining the
7
+ * price authority (Layer 1) ON READ, and lists every metered key with its caps and
8
+ * honest not-live-yet / $0 state. It performs ZERO writes, gates NO money, and books
9
+ * NOTHING — the authoritative money ledger + O(1) gate are Increment B (NOT built
10
+ * here). Corrections flow DOWN the reporting side (a price fix recomputes the view);
11
+ * nothing flows up into token truth.
12
+ *
13
+ * Honesty rules this composer enforces (spec):
14
+ * - Subscription/CLI doors: `$0 (subscription — not per-token billed)` — never misread
15
+ * as "barely spending" (FD-7).
16
+ * - A metered (door,model) we cannot price: LOUD `unpricedTokens`, never a fabricated $0.
17
+ * - Before go-live: metered doors are skipped, metered spend is $0, stated plainly.
18
+ */
19
+ import type { RoutingPriceAuthority, PriceBasis, DoorClass } from './routingPriceAuthority.js';
20
+ import type { SpendTokenBucket } from '../monitoring/FeatureMetricsLedger.js';
21
+ export type SpendGrain = 'hour' | 'day' | 'month' | 'total';
22
+ /**
23
+ * How a row's dollar figure was derived (Layer 1c read contract). In Increment A there
24
+ * is no metered dispatch, so no provider-reported cost is captured yet — every costed
25
+ * row is `internal-derived` (token×as-of-price), subscription rows are `subscription-zero`,
26
+ * and an unpriceable metered row is `unpriced`. `provider-reported` /
27
+ * `internal-derived-provider-tokens` only appear once the metered capture seam feeds the
28
+ * (empty-in-A) provider-cost store.
29
+ */
30
+ export type CostBasis = 'provider-reported' | 'internal-derived' | 'internal-derived-provider-tokens' | 'subscription-zero' | 'unpriced';
31
+ /** One priced reporting row (per door×model over the window). */
32
+ export interface SpendSummaryRow {
33
+ door: string;
34
+ modelId: string;
35
+ doorClass: DoorClass;
36
+ tokensIn: number;
37
+ tokensOut: number;
38
+ tokensCached: number;
39
+ /** Recomputed at the AS-OF price for each bucket, summed (net of subsidy per row). */
40
+ grossUsd: number;
41
+ subsidyUsd: number;
42
+ /** Credits are a per-key lump sum applied at the TOTALS level, never per-model — always 0 here. */
43
+ creditUsd: number;
44
+ netUsd: number;
45
+ /** The cap-enforced (committed-at-time-of-use) figure — 0 until Increment B's money ledger exists. */
46
+ committedUsd: number;
47
+ priceBasis: PriceBasis;
48
+ /** How the dollar figure was derived (Layer 1c). Always internal-derived / subscription / unpriced in Increment A. */
49
+ costBasis: CostBasis;
50
+ /** Provider-reported cost when captured; null until the metered capture seam has data (Increment A: always null). */
51
+ providerReportedUsd: number | null;
52
+ /** Signed internal-vs-provider drift %, once the reconciliation sweep has run; null in Increment A. */
53
+ providerDriftPct: number | null;
54
+ priceStale: boolean;
55
+ /** A metered door that does not route yet in Increment A. */
56
+ notLiveYet: boolean;
57
+ unpricedTokensIn: number;
58
+ unpricedTokensOut: number;
59
+ }
60
+ export interface SpendSummaryTotals {
61
+ tokensIn: number;
62
+ tokensOut: number;
63
+ tokensCached: number;
64
+ grossUsd: number;
65
+ subsidyUsd: number;
66
+ creditUsd: number;
67
+ netUsd: number;
68
+ committedUsd: number;
69
+ unpricedTokensIn: number;
70
+ unpricedTokensOut: number;
71
+ }
72
+ export interface SpendSummary {
73
+ grain: SpendGrain;
74
+ rows: SpendSummaryRow[];
75
+ totals: SpendSummaryTotals;
76
+ /** Which machine's operator overlay/credits produced the adjustments (pool-merge label). */
77
+ adjustmentsSource: string | null;
78
+ horizonNote: string;
79
+ /** No paid door is live yet in Increment A. */
80
+ meteredLiveYet: boolean;
81
+ /**
82
+ * The analytical view is best-effort observability — it never masquerades as the
83
+ * authoritative money number (the caps surface's committed figure is what a cap
84
+ * enforces). Two spend numbers, both labelled (A-M10/X-C2).
85
+ */
86
+ reportingBasis: {
87
+ source: string;
88
+ lastReconcileAt: string | null;
89
+ rollupMaintained: boolean;
90
+ note: string;
91
+ };
92
+ /** Layer 1c honesty: whether any provider-reported cost has been captured yet (false in Increment A). */
93
+ providerGroundingNote: string;
94
+ note: string;
95
+ }
96
+ /** One metered key's caps + live/committed state (all committed $0 in Increment A). */
97
+ export interface SpendCapRow {
98
+ keyRef: string;
99
+ provider: string;
100
+ door: string;
101
+ lifetimeCapUsd: number;
102
+ dailyCapUsd: number;
103
+ frozen: boolean;
104
+ committedLifetimeUsd: number;
105
+ committedDayUsd: number;
106
+ pctLifetime: number;
107
+ pctDaily: number;
108
+ /** Increment A: every metered door is not-live. */
109
+ goLiveState: 'not-live' | 'live' | 'disarmed';
110
+ meteredLeaseHolder: string | null;
111
+ /** Reporting-vs-ledger reconciliation — trivially ok before there is a ledger. */
112
+ coverageOk: boolean;
113
+ }
114
+ export interface SpendCapsView {
115
+ keys: SpendCapRow[];
116
+ /** No paid door is live yet in Increment A. */
117
+ meteredLiveYet: boolean;
118
+ /** Paid routing is single-machine until Increment D (availability honesty, C3-2). */
119
+ singleMachineNote: string;
120
+ note: string;
121
+ }
122
+ /**
123
+ * Default published caps per metered vault key (DISPLAY-ONLY, Increment A). The
124
+ * PIN-only authoritative caps store (`state/routing-spend-caps.json`) is Increment B;
125
+ * until it exists these seed the read-only caps view. Key NAMES only — never a secret.
126
+ */
127
+ export declare const DEFAULT_METERED_CAPS: Readonly<Record<string, {
128
+ provider: string;
129
+ lifetimeCapUsd: number;
130
+ dailyCapUsd: number;
131
+ }>>;
132
+ /** The metered (keyRef → door) pairs actually named by the shipped routing chains. */
133
+ export declare function meteredKeysFromChains(): Array<{
134
+ keyRef: string;
135
+ door: string;
136
+ }>;
137
+ export interface BuildSpendSummaryOptions {
138
+ buckets: SpendTokenBucket[];
139
+ prices: RoutingPriceAuthority;
140
+ grain: SpendGrain;
141
+ now: number;
142
+ /** For pricing the token buckets AS-OF each bucket's start time. */
143
+ rollupMaintained: boolean;
144
+ lastReconcileAt: number | null;
145
+ tokenRollupRetentionDays: number;
146
+ /** Machine whose overlay/credits produced the adjustments (pool-merge label). */
147
+ adjustmentsSource?: string | null;
148
+ }
149
+ /**
150
+ * Compose the priced spend summary. Buckets are priced AS-OF each bucket's start
151
+ * (so a price change reflows exactly under day-alignment), then aggregated to
152
+ * per-door×model rows. Pure — reads the price authority, writes nothing.
153
+ */
154
+ export declare function buildRoutingSpendSummary(opts: BuildSpendSummaryOptions): SpendSummary;
155
+ export interface BuildSpendCapsOptions {
156
+ /** Optional PIN-store caps override (Increment B). Absent in A → published defaults. */
157
+ capsOverride?: Record<string, {
158
+ provider?: string;
159
+ lifetimeCapUsd?: number;
160
+ dailyCapUsd?: number;
161
+ frozen?: boolean;
162
+ goLiveState?: SpendCapRow['goLiveState'];
163
+ meteredLeaseHolder?: string | null;
164
+ }>;
165
+ }
166
+ /**
167
+ * Compose the caps view: every metered key named by the routing chains, its caps, and
168
+ * honest not-live / $0-committed state. Increment A has no money ledger, so committed
169
+ * is $0 and every door is not-live. Pure.
170
+ */
171
+ export declare function buildRoutingSpendCaps(opts?: BuildSpendCapsOptions): SpendCapsView;
172
+ //# sourceMappingURL=routingSpendView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routingSpendView.d.ts","sourceRoot":"","sources":["../../src/core/routingSpendView.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,215 @@
1
+ /**
2
+ * routingSpendView.ts — Surface 1 (read-only spend/caps VIEW) of the Routing Control
3
+ * Room (docs/specs/routing-control-room-spend-alerts.md, Increment A).
4
+ *
5
+ * A pure composition (mirroring `natureRoutingMap.ts`): it turns the IMMUTABLE token
6
+ * rollup (FeatureMetricsLedger Layer 2) into a priced REPORTING view by joining the
7
+ * price authority (Layer 1) ON READ, and lists every metered key with its caps and
8
+ * honest not-live-yet / $0 state. It performs ZERO writes, gates NO money, and books
9
+ * NOTHING — the authoritative money ledger + O(1) gate are Increment B (NOT built
10
+ * here). Corrections flow DOWN the reporting side (a price fix recomputes the view);
11
+ * nothing flows up into token truth.
12
+ *
13
+ * Honesty rules this composer enforces (spec):
14
+ * - Subscription/CLI doors: `$0 (subscription — not per-token billed)` — never misread
15
+ * as "barely spending" (FD-7).
16
+ * - A metered (door,model) we cannot price: LOUD `unpricedTokens`, never a fabricated $0.
17
+ * - Before go-live: metered doors are skipped, metered spend is $0, stated plainly.
18
+ */
19
+ import { NATURE_ROUTING_DEFAULT_CHAINS, METERED_ROUTING_DOORS, } from '../data/llmBenchCoverage.js';
20
+ /**
21
+ * Default published caps per metered vault key (DISPLAY-ONLY, Increment A). The
22
+ * PIN-only authoritative caps store (`state/routing-spend-caps.json`) is Increment B;
23
+ * until it exists these seed the read-only caps view. Key NAMES only — never a secret.
24
+ */
25
+ export const DEFAULT_METERED_CAPS = {
26
+ metered_gemini_bench: { provider: 'google', lifetimeCapUsd: 40, dailyCapUsd: 15 },
27
+ metered_openrouter_bench: { provider: 'openrouter', lifetimeCapUsd: 60, dailyCapUsd: 25 },
28
+ metered_groq_bench: { provider: 'groq', lifetimeCapUsd: 30, dailyCapUsd: 10 },
29
+ };
30
+ /** The metered (keyRef → door) pairs actually named by the shipped routing chains. */
31
+ export function meteredKeysFromChains() {
32
+ const seen = new Map();
33
+ for (const positions of Object.values(NATURE_ROUTING_DEFAULT_CHAINS)) {
34
+ for (const pos of positions) {
35
+ if (pos.keyRef && METERED_ROUTING_DOORS.has(pos.door)) {
36
+ if (!seen.has(pos.keyRef))
37
+ seen.set(pos.keyRef, pos.door);
38
+ }
39
+ }
40
+ }
41
+ return Array.from(seen, ([keyRef, door]) => ({ keyRef, door }));
42
+ }
43
+ function round6(n) {
44
+ return Math.round(n * 1e6) / 1e6;
45
+ }
46
+ /**
47
+ * Map a price basis to a Layer-1c cost basis. Increment A never has provider-reported
48
+ * cost (no metered dispatch → the provider-cost store is empty), so a priced metered row
49
+ * is `internal-derived`, a subscription/CLI row `subscription-zero`, and an unpriceable
50
+ * metered row `unpriced`.
51
+ */
52
+ function costBasisFor(priceBasis) {
53
+ if (priceBasis === 'subscription-zero')
54
+ return 'subscription-zero';
55
+ if (priceBasis === 'no-matching-point')
56
+ return 'unpriced';
57
+ return 'internal-derived';
58
+ }
59
+ /** Re-bucket daily buckets into month buckets ('YYYY-MM'); total collapses to one. */
60
+ function regrain(buckets, grain) {
61
+ if (grain === 'day' || grain === 'hour')
62
+ return buckets;
63
+ const acc = new Map();
64
+ for (const b of buckets) {
65
+ const bucket = grain === 'month' ? b.bucket.slice(0, 7) : 'total';
66
+ const key = `${bucket}|${b.door}|${b.modelId}`;
67
+ const cur = acc.get(key);
68
+ if (cur) {
69
+ cur.tokensIn += b.tokensIn;
70
+ cur.tokensOut += b.tokensOut;
71
+ cur.tokensCached += b.tokensCached;
72
+ }
73
+ else {
74
+ acc.set(key, { ...b, bucket });
75
+ }
76
+ }
77
+ return Array.from(acc.values());
78
+ }
79
+ /**
80
+ * Compose the priced spend summary. Buckets are priced AS-OF each bucket's start
81
+ * (so a price change reflows exactly under day-alignment), then aggregated to
82
+ * per-door×model rows. Pure — reads the price authority, writes nothing.
83
+ */
84
+ export function buildRoutingSpendSummary(opts) {
85
+ const graded = regrain(opts.buckets, opts.grain);
86
+ const rowAcc = new Map();
87
+ for (const b of graded) {
88
+ // For total-grain the as-of is "now" (a single collapsed bucket has no meaningful
89
+ // per-day price regime); every other grain prices at its own bucket start.
90
+ const asOfMs = opts.grain === 'total' ? opts.now : b.bucketStartMs;
91
+ const res = opts.prices.resolve(b.door, b.modelId, asOfMs);
92
+ const cost = opts.prices.reportingCost(res, b.tokensIn, b.tokensOut, b.tokensCached);
93
+ const key = `${b.door}|${b.modelId}`;
94
+ const row = rowAcc.get(key) ??
95
+ {
96
+ door: b.door,
97
+ modelId: b.modelId,
98
+ doorClass: res.doorClass,
99
+ tokensIn: 0,
100
+ tokensOut: 0,
101
+ tokensCached: 0,
102
+ grossUsd: 0,
103
+ subsidyUsd: 0,
104
+ creditUsd: 0,
105
+ netUsd: 0,
106
+ committedUsd: 0,
107
+ priceBasis: res.priceBasis,
108
+ costBasis: costBasisFor(res.priceBasis),
109
+ providerReportedUsd: null,
110
+ providerDriftPct: null,
111
+ priceStale: res.priceStale,
112
+ notLiveYet: METERED_ROUTING_DOORS.has(b.door),
113
+ unpricedTokensIn: 0,
114
+ unpricedTokensOut: 0,
115
+ };
116
+ row.tokensIn += b.tokensIn;
117
+ row.tokensOut += b.tokensOut;
118
+ row.tokensCached += b.tokensCached;
119
+ row.grossUsd += cost.grossUsd;
120
+ row.subsidyUsd += cost.subsidyUsd;
121
+ row.unpricedTokensIn += cost.unpricedTokensIn;
122
+ row.unpricedTokensOut += cost.unpricedTokensOut;
123
+ // The row's basis reflects its latest bucket (buckets arrive day-ASC).
124
+ row.priceBasis = res.priceBasis;
125
+ row.costBasis = costBasisFor(res.priceBasis);
126
+ row.priceStale = res.priceStale;
127
+ rowAcc.set(key, row);
128
+ }
129
+ const rows = Array.from(rowAcc.values()).map((r) => {
130
+ r.grossUsd = round6(r.grossUsd);
131
+ r.subsidyUsd = round6(r.subsidyUsd);
132
+ r.netUsd = round6(Math.max(0, r.grossUsd - r.subsidyUsd));
133
+ return r;
134
+ });
135
+ rows.sort((a, b) => b.grossUsd - a.grossUsd || b.tokensIn + b.tokensOut - (a.tokensIn + a.tokensOut));
136
+ // Credits are lump-sum per keyRef — applied at the TOTALS level (never per-model).
137
+ let creditTotal = 0;
138
+ for (const { keyRef } of meteredKeysFromChains()) {
139
+ creditTotal += opts.prices.activeCreditUsd(keyRef, opts.now);
140
+ }
141
+ const totals = rows.reduce((acc, r) => {
142
+ acc.tokensIn += r.tokensIn;
143
+ acc.tokensOut += r.tokensOut;
144
+ acc.tokensCached += r.tokensCached;
145
+ acc.grossUsd += r.grossUsd;
146
+ acc.subsidyUsd += r.subsidyUsd;
147
+ acc.unpricedTokensIn += r.unpricedTokensIn;
148
+ acc.unpricedTokensOut += r.unpricedTokensOut;
149
+ return acc;
150
+ }, { tokensIn: 0, tokensOut: 0, tokensCached: 0, grossUsd: 0, subsidyUsd: 0, creditUsd: 0, netUsd: 0, committedUsd: 0, unpricedTokensIn: 0, unpricedTokensOut: 0 });
151
+ totals.grossUsd = round6(totals.grossUsd);
152
+ totals.subsidyUsd = round6(totals.subsidyUsd);
153
+ totals.creditUsd = round6(creditTotal);
154
+ totals.netUsd = round6(Math.max(0, totals.grossUsd - totals.subsidyUsd - totals.creditUsd));
155
+ const horizonNote = opts.grain === 'hour'
156
+ ? 'Hourly detail is computed on read from raw rows within the short raw-retention window; hourly beyond that horizon is not offered.'
157
+ : `Total is within the ${opts.tokenRollupRetentionDays}-day rollup horizon (daily/monthly/total survive; hourly does not).`;
158
+ return {
159
+ grain: opts.grain,
160
+ rows,
161
+ totals,
162
+ adjustmentsSource: opts.adjustmentsSource ?? null,
163
+ horizonNote,
164
+ meteredLiveYet: false,
165
+ reportingBasis: {
166
+ source: 'feature_metrics (best-effort token observability)',
167
+ lastReconcileAt: opts.lastReconcileAt ? new Date(opts.lastReconcileAt).toISOString() : null,
168
+ rollupMaintained: opts.rollupMaintained,
169
+ note: 'REPORTING net (recomputed at current price, net of credits) — best-effort and recomputable. ' +
170
+ 'The caps surface’s committed figure is the number a cap enforces (Increment B).',
171
+ },
172
+ providerGroundingNote: 'No provider-reported cost captured yet (Layer 1c): metered dispatch is not wired, so every dollar figure ' +
173
+ 'is internal-derived from token counts × the reviewed price. Provider-grounded cost (costBasis: provider-reported) ' +
174
+ 'begins once the metered capture seam has data.',
175
+ note: 'Read-only spend VIEW (Increment A): immutable token rollup priced on read. No paid door is live yet — ' +
176
+ 'metered spend is $0. Subscription/CLI doors are $0 (not per-token billed). Money caps + gate are Increment B.',
177
+ };
178
+ }
179
+ /**
180
+ * Compose the caps view: every metered key named by the routing chains, its caps, and
181
+ * honest not-live / $0-committed state. Increment A has no money ledger, so committed
182
+ * is $0 and every door is not-live. Pure.
183
+ */
184
+ export function buildRoutingSpendCaps(opts = {}) {
185
+ const keys = meteredKeysFromChains().map(({ keyRef, door }) => {
186
+ const def = DEFAULT_METERED_CAPS[keyRef];
187
+ const ov = opts.capsOverride?.[keyRef];
188
+ const lifetimeCapUsd = ov?.lifetimeCapUsd ?? def?.lifetimeCapUsd ?? 0;
189
+ const dailyCapUsd = ov?.dailyCapUsd ?? def?.dailyCapUsd ?? 0;
190
+ return {
191
+ keyRef,
192
+ provider: ov?.provider ?? def?.provider ?? 'unknown',
193
+ door,
194
+ lifetimeCapUsd,
195
+ dailyCapUsd,
196
+ frozen: ov?.frozen ?? false,
197
+ committedLifetimeUsd: 0,
198
+ committedDayUsd: 0,
199
+ pctLifetime: 0,
200
+ pctDaily: 0,
201
+ goLiveState: ov?.goLiveState ?? 'not-live',
202
+ meteredLeaseHolder: ov?.meteredLeaseHolder ?? null,
203
+ coverageOk: true,
204
+ };
205
+ });
206
+ return {
207
+ keys,
208
+ meteredLiveYet: false,
209
+ singleMachineNote: 'Paid routing is single-machine until Increment D — arming + the money gate ship in Increment B; ' +
210
+ 'a single PIN-designated metered-lease machine holds the cap.',
211
+ note: 'Read-only caps VIEW (Increment A): every metered key with its published caps. No paid door is live yet, ' +
212
+ 'so committed spend is $0 everywhere. Cap ADJUST + go-live (PIN-gated) are Increment B.',
213
+ };
214
+ }
215
+ //# sourceMappingURL=routingSpendView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routingSpendView.js","sourceRoot":"","sources":["../../src/core/routingSpendView.ts"],"names":[],"mappings":"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"}
@@ -3087,6 +3087,31 @@ export interface InstarConfig {
3087
3087
  budgetCapUsd?: number;
3088
3088
  };
3089
3089
  };
3090
+ /**
3091
+ * Routing Control Room — spend/caps VIEW config (docs/specs/routing-control-room-spend-alerts.md).
3092
+ * Increment A ships the READ-ONLY spend/caps view; Increments B (money authority),
3093
+ * C (alerts), D (multi-machine slicing) are separate, dark, and NOT built here.
3094
+ *
3095
+ * MATURATION LADDER (FD-16): `enabled` is OMITTED from the shipped config so it rides
3096
+ * `resolveDevAgentGate` — the read-only view is LIVE on a development agent, DARK on
3097
+ * the fleet. An explicit value always wins (false force-darks; true is the fleet-flip).
3098
+ * Only INERT knobs live here; NO money-authority value (caps, go-live, gate-consumed
3099
+ * price) is ever config — those live in a dedicated PIN-only store (Increment B),
3100
+ * NEVER a Bearer-`PATCH`able config key (S-F2).
3101
+ */
3102
+ routingSpend?: {
3103
+ /** OMITTED in the shipped config so the dev-agent gate decides (LIVE-dev / DARK-fleet). */
3104
+ enabled?: boolean;
3105
+ /** Daily-token-rollup retention (days); default 400. Governs the small spend-history table, NOT the raw 30d rows. */
3106
+ tokenRollupRetentionDays?: number;
3107
+ /** Alert routing (Increment C — inert here). */
3108
+ alerts?: {
3109
+ /** Dedicated "Routing Spend" Telegram topic id (Increment C). */
3110
+ telegramTopicId?: number | null;
3111
+ /** Enabled alert channels (Increment C); e.g. ["telegram"]. */
3112
+ channels?: string[];
3113
+ };
3114
+ };
3090
3115
  /** Session manager config */
3091
3116
  sessions: SessionManagerConfig;
3092
3117
  /**