instar 1.3.780 → 1.3.781
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/dashboard/index.html +161 -0
- package/dist/core/PostUpdateMigrator.d.ts +21 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +59 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/routingPriceAuthority.d.ts +0 -0
- package/dist/core/routingPriceAuthority.d.ts.map +1 -0
- package/dist/core/routingPriceAuthority.js +0 -0
- package/dist/core/routingPriceAuthority.js.map +1 -0
- package/dist/core/routingSpendView.d.ts +172 -0
- package/dist/core/routingSpendView.d.ts.map +1 -0
- package/dist/core/routingSpendView.js +215 -0
- package/dist/core/routingSpendView.js.map +1 -0
- package/dist/core/types.d.ts +25 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/monitoring/FeatureMetricsLedger.d.ts +74 -2
- package/dist/monitoring/FeatureMetricsLedger.d.ts.map +1 -1
- package/dist/monitoring/FeatureMetricsLedger.js +233 -8
- package/dist/monitoring/FeatureMetricsLedger.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +2 -1
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/server/AgentServer.d.ts +1 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +35 -2
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/CapabilityIndex.d.ts.map +1 -1
- package/dist/server/CapabilityIndex.js +12 -0
- package/dist/server/CapabilityIndex.js.map +1 -1
- package/dist/server/routes.d.ts +3 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +46 -0
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/scripts/routing-price-refresh.mjs +216 -0
- package/scripts/routing-prices.manifest.json +64 -0
- package/src/data/builtin-manifest.json +64 -64
- package/src/scaffold/templates/jobs/instar/routing-price-refresh.md +30 -0
- package/src/scaffold/templates.ts +2 -1
- package/upgrades/1.3.781.md +25 -0
- package/upgrades/side-effects/routing-spend-increment-a.md +84 -0
|
@@ -84,6 +84,7 @@ import { DeliveryFailureSentinel } from '../monitoring/delivery-failure-sentinel
|
|
|
84
84
|
import os from 'node:os';
|
|
85
85
|
import { TokenLedger } from '../monitoring/TokenLedger.js';
|
|
86
86
|
import { FeatureMetricsLedger } from '../monitoring/FeatureMetricsLedger.js';
|
|
87
|
+
import { RoutingPriceAuthority } from '../core/routingPriceAuthority.js';
|
|
87
88
|
import { A2ADeliveryTracker } from '../threadline/A2ADeliveryTracker.js';
|
|
88
89
|
import { setFeatureMetricsRecorder } from '../core/CircuitBreakingIntelligenceProvider.js';
|
|
89
90
|
import { TokenLedgerPoller } from '../monitoring/TokenLedgerPoller.js';
|
|
@@ -168,6 +169,7 @@ export class AgentServer {
|
|
|
168
169
|
toneGate = null;
|
|
169
170
|
tokenLedger = null;
|
|
170
171
|
featureMetricsLedger = null;
|
|
172
|
+
routingPriceAuthority = null;
|
|
171
173
|
featureMetricsPruneTimer = null;
|
|
172
174
|
a2aDeliveryTracker = null;
|
|
173
175
|
tokenLedgerPoller = null;
|
|
@@ -595,25 +597,55 @@ export class AgentServer {
|
|
|
595
597
|
try {
|
|
596
598
|
const serverDataDir = path.join(options.config.stateDir, 'server-data');
|
|
597
599
|
fs.mkdirSync(serverDataDir, { recursive: true });
|
|
600
|
+
// routing-control-room-spend Increment A: the daily spend rollup is maintained
|
|
601
|
+
// only where the read-only spend view is live (dev agents; dark on the fleet).
|
|
602
|
+
// The `door` column + batched prune are always active (additive/safe); this flag
|
|
603
|
+
// bounds fleet blast radius to just the (tiny) daily-aggregate writes.
|
|
604
|
+
const routingSpendCfg = options.config.routingSpend;
|
|
605
|
+
const routingSpendOn = resolveDevAgentGate(routingSpendCfg?.enabled, options.config);
|
|
598
606
|
this.featureMetricsLedger = new FeatureMetricsLedger({
|
|
599
607
|
dbPath: path.join(serverDataDir, 'feature-metrics.db'),
|
|
608
|
+
maintainSpendRollup: routingSpendOn,
|
|
600
609
|
});
|
|
601
610
|
// Phase 1b: wire the funnel → ledger. One injection point covers every
|
|
602
611
|
// wrapped provider (current and future). Null-safe; no-op if it failed above.
|
|
603
612
|
setFeatureMetricsRecorder(this.featureMetricsLedger);
|
|
613
|
+
// The reporting price authority (Layer 1) — reviewed manifest + machine-local
|
|
614
|
+
// observed/overlay/credits. Read-only; constructed only when the view is live.
|
|
615
|
+
if (routingSpendOn) {
|
|
616
|
+
try {
|
|
617
|
+
this.routingPriceAuthority = new RoutingPriceAuthority({
|
|
618
|
+
projectDir: options.config.projectDir,
|
|
619
|
+
stateDir: options.config.stateDir,
|
|
620
|
+
});
|
|
621
|
+
}
|
|
622
|
+
catch (err) {
|
|
623
|
+
console.warn('[instar] routing-price-authority init failed (non-fatal):', err);
|
|
624
|
+
this.routingPriceAuthority = null;
|
|
625
|
+
}
|
|
626
|
+
}
|
|
604
627
|
// Observable Intelligence × Responsible Resource: the audit trail is kept
|
|
605
628
|
// long enough to see behaviour/performance trends, then aged out — never
|
|
606
629
|
// hoarded forever. Default 30d; tune via monitoring.featureMetrics.retentionDays
|
|
607
630
|
// (0/negative disables pruning). Prune once at boot + every 6h thereafter.
|
|
608
631
|
const fmCfg = options.config.monitoring?.featureMetrics;
|
|
609
632
|
const retentionDays = fmCfg?.retentionDays ?? 30;
|
|
610
|
-
|
|
633
|
+
// The daily spend rollup has its OWN (longer) horizon, decoupled from the 30d raw
|
|
634
|
+
// rows (routing-control-room-spend scal-F3) — default 400 days.
|
|
635
|
+
const rollupRetentionDays = routingSpendCfg?.tokenRollupRetentionDays ?? 400;
|
|
636
|
+
if (retentionDays > 0 || routingSpendOn) {
|
|
611
637
|
const retentionMs = retentionDays * 24 * 60 * 60 * 1000;
|
|
612
638
|
const prune = () => {
|
|
613
639
|
try {
|
|
614
|
-
|
|
640
|
+
if (retentionDays > 0)
|
|
641
|
+
this.featureMetricsLedger?.pruneOlderThan(Date.now() - retentionMs);
|
|
615
642
|
}
|
|
616
643
|
catch { /* @silent-fallback-ok: retention prune is best-effort housekeeping — a failed prune just leaves old rows for the next tick */ }
|
|
644
|
+
try {
|
|
645
|
+
if (routingSpendOn && rollupRetentionDays > 0)
|
|
646
|
+
this.featureMetricsLedger?.pruneSpendRollup(rollupRetentionDays);
|
|
647
|
+
}
|
|
648
|
+
catch { /* @silent-fallback-ok: rollup prune is best-effort housekeeping */ }
|
|
617
649
|
};
|
|
618
650
|
prune();
|
|
619
651
|
this.featureMetricsPruneTimer = setInterval(prune, 6 * 60 * 60 * 1000);
|
|
@@ -1926,6 +1958,7 @@ export class AgentServer {
|
|
|
1926
1958
|
machineHeartbeat: options.machineHeartbeat ?? null,
|
|
1927
1959
|
tokenLedger: this.tokenLedger,
|
|
1928
1960
|
featureMetricsLedger: this.featureMetricsLedger,
|
|
1961
|
+
routingPriceAuthority: this.routingPriceAuthority,
|
|
1929
1962
|
resourceLedger: this.resourceLedger,
|
|
1930
1963
|
processFootprintMonitor: this.processFootprintMonitor,
|
|
1931
1964
|
approvalLedger: this.approvalLedger,
|