agent-nuvira 1.45.2 → 1.45.4

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.
@@ -34,6 +34,11 @@ function memoryDir() {
34
34
  function ledgerPath() {
35
35
  return join(memoryDir(), 'quota-ledger.json');
36
36
  }
37
+ function eventsPath() {
38
+ return join(memoryDir(), 'quota-events.jsonl');
39
+ }
40
+ /** Cap on persisted timeline events — trim oldest beyond this. */
41
+ const MAX_EVENTS = 200;
37
42
  function emptyState() {
38
43
  return { version: CURRENT_VERSION, entries: {} };
39
44
  }
@@ -47,6 +52,8 @@ function entryKey(provider, model) {
47
52
  */
48
53
  export class QuotaLedger {
49
54
  state;
55
+ /** In-memory dedupe of emitted window-reset events (prevents read-path dupes). */
56
+ emittedResets = new Set();
50
57
  constructor() {
51
58
  this.state = this.load();
52
59
  }
@@ -99,13 +106,34 @@ export class QuotaLedger {
99
106
  * RE-ENABLE: a provider parked for exhaustion un-parks the moment its
100
107
  * reset window rolls. Explicit cooldowns (cooldownUntil) survive rotation
101
108
  * so a manual park isn't wiped by an unrelated window roll.
109
+ *
110
+ * Records a `re-enabled` timeline event ONCE per real window roll (a window
111
+ * that actually carried usage) — deduped by windowStart so the many read
112
+ * paths that call rotateWindow (getStatus, getCostSummary, router feed)
113
+ * can't emit the same reset twice. The rotation is PERSISTED (save()) so a
114
+ * fresh process re-reading the ledger sees the advanced windowStart instead
115
+ * of re-rotating and re-emitting a duplicate 're-enabled' event.
102
116
  */
103
117
  rotateWindow(entry) {
104
118
  const now = Date.now();
105
119
  if (now - entry.windowStart >= entry.windowLengthMs) {
120
+ const hadUsage = entry.tokensConsumed > 0 || entry.requests > 0;
121
+ const dedupeKey = `${entryKey(entry.provider, entry.model)}|${entry.windowStart}`;
106
122
  entry.tokensConsumed = 0;
107
123
  entry.requests = 0;
108
124
  entry.windowStart = now;
125
+ let changed = false;
126
+ if (hadUsage && !this.emittedResets.has(dedupeKey)) {
127
+ this.emittedResets.add(dedupeKey);
128
+ this.recordEvent('re-enabled', entry.provider, 'window reset');
129
+ changed = true;
130
+ }
131
+ // Persist the advanced windowStart so OTHER processes (dashboard server,
132
+ // CLI, chat) see the rotated state and don't each emit their own
133
+ // 're-enabled' duplicate. Rotations are rare (once per window per entry),
134
+ // so the extra save is negligible.
135
+ if (changed)
136
+ this.save();
109
137
  }
110
138
  }
111
139
  /**
@@ -137,8 +165,9 @@ export class QuotaLedger {
137
165
  * Explicitly park a provider until a given epoch ms (used by chat failover
138
166
  * and quota-killed providers so the exclusion survives across sessions).
139
167
  * Parked providers are excluded from Auto routing until `until`.
168
+ * Records a `parked` timeline event (best-effort).
140
169
  */
141
- parkProvider(provider, until) {
170
+ parkProvider(provider, until, reason) {
142
171
  try {
143
172
  const now = Date.now();
144
173
  // Park every model entry for the provider (plus a provider-level entry
@@ -155,6 +184,8 @@ export class QuotaLedger {
155
184
  entry.cooldownUntil = until;
156
185
  }
157
186
  this.save();
187
+ if (until > now)
188
+ this.recordEvent('parked', provider, reason || 'cooldown');
158
189
  }
159
190
  catch {
160
191
  // Best-effort.
@@ -169,6 +200,69 @@ export class QuotaLedger {
169
200
  }
170
201
  }
171
202
  this.save();
203
+ this.recordEvent('released', provider, 'manual');
204
+ }
205
+ catch {
206
+ // Best-effort.
207
+ }
208
+ }
209
+ /**
210
+ * Append an event to the quota failover timeline (quota-events.jsonl,
211
+ * capped at MAX_EVENTS). Best-effort: a failed write must never break
212
+ * routing. Also exposed so callers (chat failover) can record `failover`
213
+ * events directly.
214
+ */
215
+ recordEvent(type, provider, reason) {
216
+ try {
217
+ const event = { type, provider, timestamp: Date.now() };
218
+ if (reason)
219
+ event.reason = reason;
220
+ if (!existsSync(memoryDir()))
221
+ mkdirSync(memoryDir(), { recursive: true });
222
+ const path = eventsPath();
223
+ const existing = existsSync(path) ? readFileSync(path, 'utf-8') : '';
224
+ const lines = existing.split('\n').filter((l) => l.trim().length > 0);
225
+ lines.push(JSON.stringify(event));
226
+ // Cap: keep the newest MAX_EVENTS lines.
227
+ const trimmed = lines.slice(-MAX_EVENTS);
228
+ writeFileSync(path, trimmed.join('\n') + '\n', 'utf-8');
229
+ }
230
+ catch {
231
+ // Best-effort — the timeline must never break routing.
232
+ }
233
+ }
234
+ /**
235
+ * Read the failover timeline, newest first (dashboard / CLI / tests).
236
+ * Corrupt lines are skipped; best-effort.
237
+ */
238
+ listEvents(limit = 50) {
239
+ try {
240
+ const path = eventsPath();
241
+ if (!existsSync(path))
242
+ return [];
243
+ const lines = readFileSync(path, 'utf-8').split('\n').filter((l) => l.trim().length > 0);
244
+ const events = [];
245
+ for (const line of lines.slice(-limit).reverse()) {
246
+ try {
247
+ const e = JSON.parse(line);
248
+ if (e && typeof e === 'object' && e.type && e.provider)
249
+ events.push(e);
250
+ }
251
+ catch {
252
+ // Skip corrupt lines.
253
+ }
254
+ }
255
+ return events;
256
+ }
257
+ catch {
258
+ return [];
259
+ }
260
+ }
261
+ /** Clear the persisted timeline (used by `buff model quota reset`). */
262
+ clearEvents() {
263
+ try {
264
+ writeFileSync(eventsPath(), '', 'utf-8');
265
+ this.emittedResets.clear();
172
266
  }
173
267
  catch {
174
268
  // Best-effort.
@@ -350,6 +444,7 @@ export class QuotaLedger {
350
444
  reset() {
351
445
  this.state = emptyState();
352
446
  this.save();
447
+ this.clearEvents();
353
448
  }
354
449
  /** Remove all entries for one provider. */
355
450
  resetProvider(provider) {
@@ -1 +1 @@
1
- {"version":3,"file":"quota-ledger.js","sourceRoot":"","sources":["../../src/learning/quota-ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quota-ledger.js","sourceRoot":"","sources":["../../src/learning/quota-ledger.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web-dashboard/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAmC,MAAM,WAAW,CAAC;AAkD1E;;;GAGG;AACH,UAAU,OAAO;IACf,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC;IACzD,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB,GAAG,IAAI,CAcP;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAU3G;AAED,gDAAgD;AAChD,wBAAgB,QAAQ,IAAI,IAAI,CAK/B;AAgBD,uEAAuE;AACvE,wBAAgB,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsCrD;AAsqCD,wBAAgB,qBAAqB,IAAI;IAAE,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAyC/G;AAoXD,eAAO,MAAM,kBAAkB;;;CAAiB,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web-dashboard/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAmC,MAAM,WAAW,CAAC;AAgH1E;;;GAGG;AACH,UAAU,OAAO;IACf,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC;IACzD,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB,GAAG,IAAI,CAcP;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAU3G;AAED,gDAAgD;AAChD,wBAAgB,QAAQ,IAAI,IAAI,CAK/B;AAgBD,uEAAuE;AACvE,wBAAgB,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsCrD;AAgtCD,wBAAgB,qBAAqB,IAAI;IAAE,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAyC/G;AAoXD,eAAO,MAAM,kBAAkB;;;CAAiB,CAAC"}
@@ -10,8 +10,8 @@
10
10
  * Opens at: http://localhost:3030
11
11
  */
12
12
  import { createServer } from 'node:http';
13
- import { createReadStream, readFileSync, existsSync, statSync } from 'node:fs';
14
- import { join, extname, dirname } from 'node:path';
13
+ import { createReadStream, readFileSync, existsSync, statSync, watch, mkdirSync } from 'node:fs';
14
+ import { join, extname, dirname, basename } from 'node:path';
15
15
  import { fileURLToPath } from 'node:url';
16
16
  import { homedir } from 'node:os';
17
17
  import { loadEnv } from '../utils/env.js';
@@ -42,6 +42,77 @@ const MIME_TYPES = {
42
42
  };
43
43
  let sseClients = [];
44
44
  let nextClientId = 1;
45
+ // ─── Quota File Watcher (real-time Failover Timeline) ───────────────────────
46
+ /**
47
+ * Watch the memory dir for quota ledger/timeline writes and push a `quota`
48
+ * SSE event to connected dashboards IMMEDIATELY — so the Failover Timeline
49
+ * updates in real time instead of waiting for the next 10s `refresh` tick.
50
+ *
51
+ * The ledger and chat run in OTHER processes (CLI / extension) writing to
52
+ * quota-events.jsonl / quota-ledger.json on disk; a directory fs.watch catches
53
+ * those writes. Debounced because fs.watch may fire multiple events per write.
54
+ * Armed while at least one SSE client is connected, disarmed when the last one
55
+ * disconnects (no dangling watcher when nobody is viewing).
56
+ */
57
+ let quotaWatcher = null;
58
+ let quotaWatchTimer = null;
59
+ function broadcastQuotaEvent() {
60
+ const payload = `event: quota\ndata: ${JSON.stringify({
61
+ quota: readQuotaData(),
62
+ serverTime: Date.now(),
63
+ })}\n\n`;
64
+ for (const client of sseClients) {
65
+ try {
66
+ client.res.write(payload);
67
+ }
68
+ catch { /* client disconnected */ }
69
+ }
70
+ }
71
+ function armQuotaWatcher() {
72
+ if (quotaWatcher)
73
+ return;
74
+ try {
75
+ // The memory dir may not exist yet (dashboard started before any ledger /
76
+ // CLI write) — create it first so watch() doesn't throw ENOENT and silently
77
+ // disable real-time pushes for the whole session.
78
+ if (!existsSync(MEMORY_DIR))
79
+ mkdirSync(MEMORY_DIR, { recursive: true });
80
+ // Watch the DIRECTORY so we catch file creation too (quota-events.jsonl
81
+ // may not exist until the first failover).
82
+ quotaWatcher = watch(MEMORY_DIR, (_eventType, filename) => {
83
+ // Some platforms report a null filename on directory watches — treat
84
+ // that as a trigger too (worst case: a harmless extra quota push, since
85
+ // broadcastQuotaEvent re-reads fresh data). macOS FSEvents can also
86
+ // report FULL PATHS, so normalize with basename() before comparing.
87
+ const name = basename(String(filename || ''));
88
+ if (name && name !== 'quota-events.jsonl' && name !== 'quota-ledger.json')
89
+ return;
90
+ if (quotaWatchTimer)
91
+ clearTimeout(quotaWatchTimer);
92
+ quotaWatchTimer = setTimeout(() => {
93
+ quotaWatchTimer = null;
94
+ broadcastQuotaEvent();
95
+ }, 150);
96
+ });
97
+ }
98
+ catch {
99
+ // Best-effort — a failed watcher must never break the dashboard.
100
+ quotaWatcher = null;
101
+ }
102
+ }
103
+ function disarmQuotaWatcher() {
104
+ if (quotaWatchTimer) {
105
+ clearTimeout(quotaWatchTimer);
106
+ quotaWatchTimer = null;
107
+ }
108
+ if (quotaWatcher) {
109
+ try {
110
+ quotaWatcher.close();
111
+ }
112
+ catch { /* ignore */ }
113
+ quotaWatcher = null;
114
+ }
115
+ }
45
116
  let activePipeline = null; // goal/description of current pipeline
46
117
  let activeNodes = [];
47
118
  let activeEdges = [];
@@ -692,7 +763,10 @@ const AVG_PAID_RATE_PER_1K = 0.0005;
692
763
  function readQuotaData() {
693
764
  const data = readJSON(join(MEMORY_DIR, 'quota-ledger.json'));
694
765
  if (!data?.entries) {
695
- return { enabled: false, entries: [], updatedAt: Date.now() };
766
+ // Failover timeline can exist even when the ledger has no usage entries
767
+ // (chat records failover events on auth/rate-limit failures without a
768
+ // prior successful call) — always include events.
769
+ return { enabled: false, entries: [], events: readQuotaEvents(), updatedAt: Date.now() };
696
770
  }
697
771
  const now = Date.now();
698
772
  const entries = Object.values(data.entries)
@@ -732,6 +806,9 @@ function readQuotaData() {
732
806
  }
733
807
  }
734
808
  const estimatedSavedUsd = Math.round((freeTokens / 1000) * AVG_PAID_RATE_PER_1K * 100000) / 100000;
809
+ // Failover timeline (assessment #7): events appended by the ledger's
810
+ // park/release/window-roll paths + chat's mid-session failover bookkeeping.
811
+ const events = readQuotaEvents();
735
812
  return {
736
813
  enabled: entries.length > 0,
737
814
  entries,
@@ -740,9 +817,42 @@ function readQuotaData() {
740
817
  paidTokens,
741
818
  paidRequests,
742
819
  estimatedSavedUsd,
820
+ events,
743
821
  updatedAt: now,
744
822
  };
745
823
  }
824
+ /**
825
+ * Read the quota failover timeline (quota-events.jsonl) — parked / re-enabled /
826
+ * released / failover events, newest first. Backs the dashboard's Failover
827
+ * Timeline card in the Quota section.
828
+ */
829
+ function readQuotaEvents() {
830
+ try {
831
+ const path = join(MEMORY_DIR, 'quota-events.jsonl');
832
+ if (!existsSync(path))
833
+ return [];
834
+ const raw = readFileSync(path, 'utf-8');
835
+ const events = [];
836
+ for (const line of raw.split('\n').reverse()) {
837
+ if (!line.trim())
838
+ continue;
839
+ try {
840
+ const e = JSON.parse(line);
841
+ if (e && typeof e === 'object' && e.type && e.provider)
842
+ events.push(e);
843
+ }
844
+ catch {
845
+ // Skip corrupt lines.
846
+ }
847
+ if (events.length >= 50)
848
+ break;
849
+ }
850
+ return events;
851
+ }
852
+ catch {
853
+ return [];
854
+ }
855
+ }
746
856
  function readRoutingInsights() {
747
857
  // 1. Per-provider benchmark quality from benchmarks.json
748
858
  const benchData = readJSON(join(MEMORY_DIR, 'benchmarks.json'));
@@ -1051,6 +1161,12 @@ function handleRequest(req, res) {
1051
1161
  const clientId = nextClientId++;
1052
1162
  const client = { id: clientId, res };
1053
1163
  sseClients.push(client);
1164
+ // Real-time quota pushes only matter while someone is viewing — arm the
1165
+ // file watcher (idempotent) and disarm when the last client disconnects.
1166
+ // NOTE: arm unconditionally — the length===1 guard raced with a previous
1167
+ // client's async close (arm skipped when the stale client was still listed,
1168
+ // then disarm skipped too, leaving the watcher never armed).
1169
+ armQuotaWatcher();
1054
1170
  const heartbeat = setInterval(() => {
1055
1171
  try {
1056
1172
  res.write(': heartbeat\n\n');
@@ -1082,6 +1198,8 @@ function handleRequest(req, res) {
1082
1198
  clearInterval(heartbeat);
1083
1199
  clearInterval(refreshInterval);
1084
1200
  sseClients = sseClients.filter((c) => c.id !== clientId);
1201
+ if (sseClients.length === 0)
1202
+ disarmQuotaWatcher();
1085
1203
  });
1086
1204
  return;
1087
1205
  }