ftown-bridge 0.20.4 → 0.20.5

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.
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Incremental left folds over append-only JSONL files.
3
+ *
4
+ * A fold's state is cached per (kind, path) together with the byte offset it has consumed, so a repeat call
5
+ * reads only what was appended since. The cache entry is trusted only while the file keeps the same
6
+ * dev/ino, is not shorter than the offset, and the last ANCHOR_BYTES before the offset are unchanged; any
7
+ * other change (truncate, rename-replace, in-place rewrite) refolds from scratch. Only complete lines advance
8
+ * the offset, except a final unterminated segment that already parses as JSON. File reads go through a FIFO
9
+ * limiter so many transcripts never hit the event loop at once.
10
+ */
11
+ /** A synchronous left fold over the parsed values of a JSONL file. */
12
+ export interface JsonlFold<S> {
13
+ /** Stable id of the fold semantics; part of the cache key. Change it when init/step semantics change. */
14
+ readonly kind: string;
15
+ /** A fresh, empty state. */
16
+ init(): S;
17
+ /** Applies one parsed line. Synchronous; must not throw; must not keep `value` (copy what it needs). */
18
+ step(state: S, value: unknown): void;
19
+ }
20
+ export interface JsonlFoldCacheOptions {
21
+ /** Max files read at once across all folds of this cache. Integer >= 1. Default 2. */
22
+ concurrency?: number;
23
+ /** Max cached (kind, path) entries; least recently used are evicted. Default 512. */
24
+ maxEntries?: number;
25
+ /** Bytes per read call. Default 65_536. Tests may use tiny values. */
26
+ chunkBytes?: number;
27
+ }
28
+ export interface JsonlFoldCacheStats {
29
+ /** Entries currently cached. */
30
+ entries: number;
31
+ /** Total bytes returned by file reads since construction, anchor bytes included. */
32
+ bytesRead: number;
33
+ /** Highest number of simultaneous file reads observed since construction. */
34
+ peakActiveReads: number;
35
+ }
36
+ export declare const ANCHOR_BYTES = 64;
37
+ export declare class JsonlFoldCache {
38
+ private readonly concurrency;
39
+ private readonly maxEntries;
40
+ private readonly chunkBytes;
41
+ private readonly entries;
42
+ private readonly chains;
43
+ private readonly waiters;
44
+ private active;
45
+ private bytesRead;
46
+ private peakActiveReads;
47
+ constructor(options?: JsonlFoldCacheOptions);
48
+ fold<S, R>(filePath: string, fold: JsonlFold<S>, timeoutMs: number, finish: (state: Readonly<S>) => R): Promise<R | null>;
49
+ stats(): JsonlFoldCacheStats;
50
+ clear(): void;
51
+ private run;
52
+ private acquire;
53
+ private take;
54
+ private release;
55
+ private readAt;
56
+ /** Brings the cached state for `key` up to date; the state on success, null (entry dropped) on failure. */
57
+ private read;
58
+ }
59
+ export declare const defaultJsonlFoldCache: JsonlFoldCache;
@@ -0,0 +1,213 @@
1
+ import { open } from 'node:fs/promises';
2
+ export const ANCHOR_BYTES = 64;
3
+ const DEFAULT_CONCURRENCY = 2;
4
+ const DEFAULT_MAX_ENTRIES = 512;
5
+ const DEFAULT_CHUNK_BYTES = 65_536;
6
+ const LF = 0x0a;
7
+ const CR = 0x0d;
8
+ function positiveInt(value, fallback) {
9
+ return typeof value === 'number' && Number.isInteger(value) && value >= 1 ? value : fallback;
10
+ }
11
+ function lastBytes(buf, n) {
12
+ // Owned copy: a view would pin the whole chunk it came from.
13
+ return Buffer.from(buf.subarray(Math.max(0, buf.length - n)));
14
+ }
15
+ /** Parses one raw line (CR already allowed at the end); undefined when blank or not JSON. */
16
+ function parseLine(raw) {
17
+ const end = raw.length > 0 && raw[raw.length - 1] === CR ? raw.length - 1 : raw.length;
18
+ if (end === 0)
19
+ return undefined;
20
+ try {
21
+ return { value: JSON.parse(raw.toString('utf8', 0, end)) };
22
+ }
23
+ catch {
24
+ return undefined;
25
+ }
26
+ }
27
+ export class JsonlFoldCache {
28
+ concurrency;
29
+ maxEntries;
30
+ chunkBytes;
31
+ entries = new Map();
32
+ chains = new Map();
33
+ waiters = [];
34
+ active = 0;
35
+ bytesRead = 0;
36
+ peakActiveReads = 0;
37
+ constructor(options = {}) {
38
+ this.concurrency = positiveInt(options.concurrency, DEFAULT_CONCURRENCY);
39
+ this.maxEntries = positiveInt(options.maxEntries, DEFAULT_MAX_ENTRIES);
40
+ this.chunkBytes = positiveInt(options.chunkBytes, DEFAULT_CHUNK_BYTES);
41
+ }
42
+ fold(filePath, fold, timeoutMs, finish) {
43
+ const key = `${fold.kind}\0${filePath}`;
44
+ const prev = this.chains.get(key) ?? Promise.resolve();
45
+ const run = prev.then(() => this.run(key, filePath, fold, timeoutMs, finish));
46
+ const tail = run.then(() => undefined, () => undefined);
47
+ this.chains.set(key, tail);
48
+ void tail.then(() => {
49
+ if (this.chains.get(key) === tail)
50
+ this.chains.delete(key);
51
+ });
52
+ return run;
53
+ }
54
+ stats() {
55
+ return {
56
+ entries: this.entries.size,
57
+ bytesRead: this.bytesRead,
58
+ peakActiveReads: this.peakActiveReads,
59
+ };
60
+ }
61
+ clear() {
62
+ this.entries.clear();
63
+ }
64
+ async run(key, filePath, fold, timeoutMs, finish) {
65
+ await this.acquire();
66
+ let state;
67
+ try {
68
+ state = await this.read(key, filePath, fold, Date.now() + timeoutMs);
69
+ }
70
+ finally {
71
+ this.release();
72
+ }
73
+ if (state === null)
74
+ return null;
75
+ return finish(state);
76
+ }
77
+ acquire() {
78
+ if (this.active < this.concurrency) {
79
+ this.take();
80
+ return Promise.resolve();
81
+ }
82
+ return new Promise((resolve) => {
83
+ this.waiters.push(() => {
84
+ this.take();
85
+ resolve();
86
+ });
87
+ });
88
+ }
89
+ take() {
90
+ this.active += 1;
91
+ if (this.active > this.peakActiveReads)
92
+ this.peakActiveReads = this.active;
93
+ }
94
+ release() {
95
+ this.active -= 1;
96
+ this.waiters.shift()?.();
97
+ }
98
+ async readAt(fh, position, length) {
99
+ const buf = Buffer.alloc(length);
100
+ let got = 0;
101
+ while (got < length) {
102
+ const { bytesRead } = await fh.read(buf, got, length - got, position + got);
103
+ if (bytesRead === 0)
104
+ break;
105
+ got += bytesRead;
106
+ this.bytesRead += bytesRead;
107
+ }
108
+ return got === length ? buf : buf.subarray(0, got);
109
+ }
110
+ /** Brings the cached state for `key` up to date; the state on success, null (entry dropped) on failure. */
111
+ async read(key, filePath, fold, deadline) {
112
+ let fh;
113
+ try {
114
+ fh = await open(filePath, 'r');
115
+ const st = await fh.stat();
116
+ if (!st.isFile()) {
117
+ this.entries.delete(key);
118
+ return null;
119
+ }
120
+ let entry = this.entries.get(key);
121
+ if (entry) {
122
+ let reusable = entry.dev === st.dev && entry.ino === st.ino && st.size >= entry.offset;
123
+ if (reusable && entry.anchor.length > 0) {
124
+ const current = await this.readAt(fh, entry.offset - entry.anchor.length, entry.anchor.length);
125
+ reusable = current.equals(entry.anchor);
126
+ }
127
+ if (!reusable)
128
+ entry = undefined;
129
+ }
130
+ const state = entry ? entry.state : fold.init();
131
+ let offset = entry ? entry.offset : 0;
132
+ // The last committed boundary is `chunk[0..k)` preceded by `hist`; the anchor is derived from it at the end.
133
+ let hist = entry ? entry.anchor : Buffer.alloc(0);
134
+ let commitChunk = Buffer.alloc(0);
135
+ let commitK = 0;
136
+ let commitHist = hist;
137
+ const pending = [];
138
+ let pos = offset;
139
+ let stopped = false;
140
+ let tailCommitted = false;
141
+ while (!stopped && pos < st.size) {
142
+ const chunk = await this.readAt(fh, pos, Math.min(this.chunkBytes, st.size - pos));
143
+ if (chunk.length === 0)
144
+ break;
145
+ const chunkPos = pos;
146
+ pos += chunk.length;
147
+ let start = 0;
148
+ for (;;) {
149
+ const nl = chunk.indexOf(LF, start);
150
+ if (nl === -1)
151
+ break;
152
+ if (Date.now() > deadline) {
153
+ stopped = true;
154
+ break;
155
+ }
156
+ pending.push(chunk.subarray(start, nl));
157
+ const parsed = parseLine(pending.length === 1 ? pending[0] : Buffer.concat(pending));
158
+ pending.length = 0;
159
+ if (parsed)
160
+ fold.step(state, parsed.value);
161
+ start = nl + 1;
162
+ offset = chunkPos + start;
163
+ commitChunk = chunk;
164
+ commitK = start;
165
+ commitHist = hist;
166
+ }
167
+ if (stopped)
168
+ break;
169
+ if (start < chunk.length)
170
+ pending.push(chunk.subarray(start));
171
+ hist = lastBytes(Buffer.concat([hist, lastBytes(chunk, ANCHOR_BYTES)]), ANCHOR_BYTES);
172
+ }
173
+ if (!stopped && pending.length > 0 && pos === st.size && Date.now() <= deadline) {
174
+ const parsed = parseLine(Buffer.concat(pending));
175
+ // A scalar could still grow ("12" -> "123"); an object or array cannot be a strict prefix of a longer line.
176
+ if (parsed && typeof parsed.value === 'object' && parsed.value !== null) {
177
+ fold.step(state, parsed.value);
178
+ offset = st.size;
179
+ // Everything read is consumed, so `hist` (tail of all consumed bytes) is the anchor.
180
+ tailCommitted = true;
181
+ }
182
+ }
183
+ const anchor = tailCommitted
184
+ ? hist
185
+ : lastBytes(Buffer.concat([commitHist, commitChunk.subarray(0, commitK)]), ANCHOR_BYTES);
186
+ this.entries.delete(key);
187
+ this.entries.set(key, {
188
+ dev: st.dev,
189
+ ino: st.ino,
190
+ offset,
191
+ anchor,
192
+ state,
193
+ });
194
+ while (this.entries.size > this.maxEntries) {
195
+ const oldest = this.entries.keys().next();
196
+ if (oldest.done)
197
+ break;
198
+ this.entries.delete(oldest.value);
199
+ }
200
+ return state;
201
+ }
202
+ catch {
203
+ this.entries.delete(key);
204
+ return null;
205
+ }
206
+ finally {
207
+ if (fh)
208
+ await fh.close().catch(() => undefined);
209
+ }
210
+ }
211
+ }
212
+ export const defaultJsonlFoldCache = new JsonlFoldCache();
213
+ //# sourceMappingURL=jsonl-fold-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonl-fold-cache.js","sourceRoot":"","sources":["../src/jsonl-fold-cache.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { DirectMessage } from '../../direct-transport/contract.js';
2
2
  import type { InboundTransportContext } from '../protocol.js';
3
3
  import { BridgeSecurityService } from './security.js';
4
- /** Serial crypto at the peer boundary; application frames never escape as plaintext. */
4
+ /** Serial crypto per direction at the peer boundary; application frames never escape as plaintext. */
5
5
  export declare class EncryptedPeerChannel {
6
6
  private readonly security;
7
7
  private readonly route;
@@ -1,6 +1,6 @@
1
1
  import { parseSecureEnvelope } from '../crypto.js';
2
2
  import { applicationJson } from './security.js';
3
- /** Serial crypto at the peer boundary; application frames never escape as plaintext. */
3
+ /** Serial crypto per direction at the peer boundary; application frames never escape as plaintext. */
4
4
  export class EncryptedPeerChannel {
5
5
  security;
6
6
  route;
@@ -47,7 +47,6 @@ export class EncryptedPeerChannel {
47
47
  await this.security.revalidate(verified.principal);
48
48
  this.deliver(verified.application.data);
49
49
  await this.security.complete(verified, 'succeeded');
50
- await this.outbound;
51
50
  }).catch(() => { this.teardown(); });
52
51
  return this.inbound;
53
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"direct.js","sourceRoot":"","sources":["../../../src/security/bridge/direct.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"direct.js","sourceRoot":"","sources":["../../../src/security/bridge/direct.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import type { z } from 'zod';
2
- /** One process owns each instance directory. Never publish in-memory state before durable replacement. */
2
+ /** Writers replace the file atomically; reads are served from an identity-validated cache. Never publish in-memory state before durable replacement. */
3
3
  export declare class AtomicSnapshot<T> {
4
4
  private readonly file;
5
5
  private readonly schema;
6
6
  private readonly initial;
7
7
  private tail;
8
+ private cache;
8
9
  constructor(file: string, schema: z.ZodType<T>, initial: () => NoInfer<T>);
9
10
  private load;
10
11
  private save;
@@ -1,27 +1,49 @@
1
+ import { statSync } from 'node:fs';
1
2
  import { mkdir, open, rename, rm } from 'node:fs/promises';
2
3
  import { dirname } from 'node:path';
3
4
  import { randomUUID } from 'node:crypto';
4
5
  import { BridgeSecurityError } from './errors.js';
5
- /** One process owns each instance directory. Never publish in-memory state before durable replacement. */
6
+ const RACY_WINDOW_MS = 50;
7
+ const identityOf = (s) => `${s.dev}:${s.ino}:${s.size}:${s.mtimeNs}:${s.ctimeNs}`;
8
+ /** Writers replace the file atomically; reads are served from an identity-validated cache. Never publish in-memory state before durable replacement. */
6
9
  export class AtomicSnapshot {
7
10
  file;
8
11
  schema;
9
12
  initial;
10
13
  tail = Promise.resolve();
14
+ cache = null;
11
15
  constructor(file, schema, initial) {
12
16
  this.file = file;
13
17
  this.schema = schema;
14
18
  this.initial = initial;
15
19
  }
16
20
  async load() {
21
+ let stat;
22
+ try {
23
+ stat = statSync(this.file, { bigint: true });
24
+ }
25
+ catch (error) {
26
+ if (error.code === 'ENOENT') {
27
+ this.cache = null;
28
+ return this.initial();
29
+ }
30
+ throw new BridgeSecurityError('storage_unavailable');
31
+ }
32
+ if (this.cache?.identity === identityOf(stat))
33
+ return structuredClone(this.cache.value);
17
34
  let handle;
18
35
  try {
19
36
  handle = await open(this.file, 'r');
20
- if ((await handle.stat()).size > 64 * 1024 * 1024)
37
+ const fstat = await handle.stat({ bigint: true });
38
+ if (Number(fstat.size) > 64 * 1024 * 1024)
21
39
  throw new Error('Oversize snapshot');
22
- return this.schema.parse(JSON.parse(await handle.readFile('utf8')));
40
+ const value = this.schema.parse(JSON.parse(await handle.readFile('utf8')));
41
+ const newest = Math.max(Number(fstat.mtimeMs), Number(fstat.ctimeMs));
42
+ this.cache = Date.now() - newest >= RACY_WINDOW_MS ? { identity: identityOf(fstat), value } : null;
43
+ return structuredClone(value);
23
44
  }
24
45
  catch (error) {
46
+ this.cache = null;
25
47
  if (error.code === 'ENOENT')
26
48
  return this.initial();
27
49
  throw new BridgeSecurityError('storage_unavailable');
@@ -31,6 +53,7 @@ export class AtomicSnapshot {
31
53
  }
32
54
  }
33
55
  async save(value) {
56
+ this.cache = null;
34
57
  const directory = dirname(this.file);
35
58
  const temporary = `${this.file}.${randomUUID()}.tmp`;
36
59
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../src/security/bridge/snapshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../src/security/bridge/snapshot.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type JsonlFoldCache } from './jsonl-fold-cache.js';
1
2
  import type { Session, SessionUsage } from './types.js';
2
3
  /**
3
4
  * Per-session token usage extraction from harness-native session files.
@@ -38,6 +39,8 @@ export interface UsageCollectorOptions {
38
39
  museSessionsDir?: string;
39
40
  /** Cap on wall-clock read time per collection. Default 15s. */
40
41
  timeoutMs?: number;
42
+ /** Incremental read cache. Default: defaultJsonlFoldCache (shared process-wide). Tests inject a fresh one. */
43
+ foldCache?: JsonlFoldCache;
41
44
  }
42
45
  /**
43
46
  * Claude Code project-directory slug: every non-alphanumeric character of the
@@ -3,7 +3,39 @@ import { readFile, readdir, realpath, stat } from 'node:fs/promises';
3
3
  import { createInterface } from 'node:readline';
4
4
  import { homedir } from 'node:os';
5
5
  import { join, resolve, sep } from 'node:path';
6
+ import { defaultJsonlFoldCache } from './jsonl-fold-cache.js';
6
7
  const DEFAULT_TIMEOUT_MS = 15_000;
8
+ function newModelSums() {
9
+ return { byModel: new Map(), counted: 0 };
10
+ }
11
+ function modelAcc(state, model) {
12
+ let acc = state.byModel.get(model);
13
+ if (!acc) {
14
+ acc = { model, inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0 };
15
+ state.byModel.set(model, acc);
16
+ }
17
+ return acc;
18
+ }
19
+ /** Builds the SessionUsage for per-model sums; copies, so the result never aliases fold state. */
20
+ function usageFromModels(byModel, harness) {
21
+ const perModel = [...byModel.values()].map((m) => ({ ...m }));
22
+ const sum = (pick) => perModel.reduce((acc, m) => acc + pick(m), 0);
23
+ const inputTokens = sum((m) => m.inputTokens);
24
+ const outputTokens = sum((m) => m.outputTokens);
25
+ const cacheReadTokens = sum((m) => m.cacheReadTokens);
26
+ const cacheWriteTokens = sum((m) => m.cacheWriteTokens);
27
+ return {
28
+ inputTokens,
29
+ outputTokens,
30
+ cacheReadTokens,
31
+ cacheWriteTokens,
32
+ totalTokens: inputTokens + outputTokens + cacheReadTokens + cacheWriteTokens,
33
+ models: perModel.map((m) => m.model),
34
+ perModel,
35
+ harness,
36
+ collectedAt: new Date().toISOString(),
37
+ };
38
+ }
7
39
  /**
8
40
  * Claude Code project-directory slug: every non-alphanumeric character of the
9
41
  * working directory becomes '-'. Verified against real transcript dirs on this
@@ -93,48 +125,29 @@ async function collectPiUsage(workingDir, sessionCreatedAt, options, nativeSessi
93
125
  const filePath = await containedPiSessionFile(baseDir, candidatePath);
94
126
  if (!filePath)
95
127
  return null;
96
- let counted = 0;
97
- const byModel = new Map();
98
- for await (const raw of jsonlLines(filePath, deadline)) {
128
+ const usage = await (options.foldCache ?? defaultJsonlFoldCache).fold(filePath, piUsageFold, options.timeoutMs ?? DEFAULT_TIMEOUT_MS, (state) => (state.counted === 0 ? null : usageFromModels(state.byModel, 'pi')));
129
+ return usage ?? null;
130
+ }
131
+ const piUsageFold = {
132
+ kind: 'pi-usage-v1',
133
+ init: newModelSums,
134
+ step(state, raw) {
99
135
  const entry = raw;
100
136
  const message = entry?.type === 'message' ? entry.message : undefined;
101
137
  const usage = message?.role === 'assistant' ? message.usage : undefined;
102
138
  if (!message || !usage || typeof message.model !== 'string' || !message.model)
103
- continue;
139
+ return;
104
140
  const model = typeof message.provider === 'string' && message.provider
105
141
  ? `${message.provider}/${message.model}`
106
142
  : message.model;
107
- let acc = byModel.get(model);
108
- if (!acc) {
109
- acc = { model, inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0 };
110
- byModel.set(model, acc);
111
- }
143
+ const acc = modelAcc(state, model);
112
144
  acc.inputTokens += safeTokenCount(usage.input);
113
145
  acc.outputTokens += safeTokenCount(usage.output);
114
146
  acc.cacheReadTokens += safeTokenCount(usage.cacheRead);
115
147
  acc.cacheWriteTokens += safeTokenCount(usage.cacheWrite);
116
- counted += 1;
117
- }
118
- if (counted === 0)
119
- return null;
120
- const perModel = [...byModel.values()];
121
- const sum = (pick) => perModel.reduce((total, model) => total + pick(model), 0);
122
- const inputTokens = sum((model) => model.inputTokens);
123
- const outputTokens = sum((model) => model.outputTokens);
124
- const cacheReadTokens = sum((model) => model.cacheReadTokens);
125
- const cacheWriteTokens = sum((model) => model.cacheWriteTokens);
126
- return {
127
- inputTokens,
128
- outputTokens,
129
- cacheReadTokens,
130
- cacheWriteTokens,
131
- totalTokens: inputTokens + outputTokens + cacheReadTokens + cacheWriteTokens,
132
- models: perModel.map((model) => model.model),
133
- perModel,
134
- harness: 'pi',
135
- collectedAt: new Date().toISOString(),
136
- };
137
- }
148
+ state.counted += 1;
149
+ },
150
+ };
138
151
  function safeTokenCount(value) {
139
152
  return typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : 0;
140
153
  }
@@ -183,64 +196,39 @@ async function collectClaudeUsage(claudeSessionId, workingDir, options) {
183
196
  return null;
184
197
  const baseDir = options.claudeProjectsDir ?? join(homedir(), '.claude', 'projects');
185
198
  const filePath = join(baseDir, claudeProjectSlug(workingDir), `${claudeSessionId}.jsonl`);
186
- const deadline = Date.now() + (options.timeoutMs ?? DEFAULT_TIMEOUT_MS);
187
- let counted = 0;
188
- // Keyed by model id; Map preserves first-appearance order.
189
- const byModel = new Map();
190
- // An assistant message spans MULTIPLE jsonl lines (one per content block),
191
- // each repeating the same message.id and identical usage — count each
192
- // message id exactly once or sums double/triple.
193
- const seenMessageIds = new Set();
194
- for await (const raw of jsonlLines(filePath, deadline)) {
199
+ const usage = await (options.foldCache ?? defaultJsonlFoldCache).fold(filePath, claudeUsageFold, options.timeoutMs ?? DEFAULT_TIMEOUT_MS, (state) => (state.counted === 0 ? null : usageFromModels(state.byModel, 'claude')));
200
+ return usage ?? null;
201
+ }
202
+ const claudeUsageFold = {
203
+ kind: 'claude-usage-v1',
204
+ init: () => ({ ...newModelSums(), seenMessageIds: new Set() }),
205
+ step(state, raw) {
195
206
  const entry = raw;
196
207
  if (entry?.type !== 'assistant')
197
- continue;
208
+ return;
198
209
  const message = entry.message;
199
210
  const usage = message?.usage;
200
211
  if (!message || !usage)
201
- continue;
212
+ return;
202
213
  const model = message.model ?? '';
203
214
  // '<synthetic>' rows are harness-injected placeholders with zero usage.
204
215
  if (!model || model === '<synthetic>')
205
- continue;
216
+ return;
206
217
  const id = message.id;
207
218
  if (id) {
208
- if (seenMessageIds.has(id))
209
- continue;
210
- seenMessageIds.add(id);
219
+ if (state.seenMessageIds.has(id))
220
+ return;
221
+ state.seenMessageIds.add(id);
211
222
  }
212
223
  // Models can vary mid-session — attribute tokens per message's model.
213
- let acc = byModel.get(model);
214
- if (!acc) {
215
- acc = { model, inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0 };
216
- byModel.set(model, acc);
217
- }
224
+ const acc = modelAcc(state, model);
218
225
  acc.inputTokens += usage.input_tokens ?? 0;
219
226
  acc.outputTokens += usage.output_tokens ?? 0;
220
227
  acc.cacheReadTokens += usage.cache_read_input_tokens ?? 0;
221
228
  acc.cacheWriteTokens += usage.cache_creation_input_tokens ?? 0;
222
- counted += 1;
223
- }
224
- if (counted === 0)
225
- return null;
226
- const perModel = [...byModel.values()];
227
- const sum = (pick) => perModel.reduce((acc, m) => acc + pick(m), 0);
228
- const inputTokens = sum((m) => m.inputTokens);
229
- const outputTokens = sum((m) => m.outputTokens);
230
- const cacheReadTokens = sum((m) => m.cacheReadTokens);
231
- const cacheWriteTokens = sum((m) => m.cacheWriteTokens);
232
- return {
233
- inputTokens,
234
- outputTokens,
235
- cacheReadTokens,
236
- cacheWriteTokens,
237
- totalTokens: inputTokens + outputTokens + cacheReadTokens + cacheWriteTokens,
238
- models: perModel.map((m) => m.model),
239
- perModel,
240
- harness: 'claude',
241
- collectedAt: new Date().toISOString(),
242
- };
243
- }
229
+ state.counted += 1;
230
+ },
231
+ };
244
232
  /** Resolve ~/.codex/sessions/<yyyy>/<mm>/<dd>/rollout-*-<id>.jsonl (date-partitioned). */
245
233
  async function findCodexRollout(baseDir, codexSessionId) {
246
234
  const suffix = `-${codexSessionId}.jsonl`;
@@ -282,41 +270,16 @@ async function collectCodexUsage(codexSessionId, options) {
282
270
  const filePath = await findCodexRollout(baseDir, codexSessionId);
283
271
  if (!filePath)
284
272
  return null;
285
- const deadline = Date.now() + (options.timeoutMs ?? DEFAULT_TIMEOUT_MS);
286
- const models = [];
287
- let lastTotals = null;
288
- for await (const raw of jsonlLines(filePath, deadline)) {
289
- const entry = raw;
290
- const payload = entry?.payload;
291
- if (!payload)
292
- continue;
293
- if (entry.type === 'turn_context' && payload.model) {
294
- if (!models.includes(payload.model))
295
- models.push(payload.model);
296
- continue;
297
- }
298
- // token_count events carry cumulative totals — the LAST one wins. Some
299
- // token_count events have info: null (rate-limit-only updates); skip them.
300
- if (payload.type === 'token_count') {
301
- const totals = payload.info?.total_token_usage;
302
- if (totals) {
303
- lastTotals = {
304
- input: totals.input_tokens ?? 0,
305
- cached: totals.cached_input_tokens ?? 0,
306
- output: totals.output_tokens ?? 0,
307
- };
308
- }
309
- }
310
- }
311
- if (!lastTotals)
273
+ const totals = await (options.foldCache ?? defaultJsonlFoldCache).fold(filePath, codexUsageFold, options.timeoutMs ?? DEFAULT_TIMEOUT_MS, (state) => (state.lastTotals ? { models: [...state.models], ...state.lastTotals } : null));
274
+ if (!totals)
312
275
  return null;
313
276
  // Codex counts cached tokens INSIDE input_tokens (input 11276 / cached 9088 /
314
277
  // total 11305 = 11276 + 29 in real rollouts) — split them so totalTokens
315
278
  // (sum of the four) matches codex's own total_tokens. output_tokens already
316
279
  // includes reasoning tokens. Codex reports no cache writes.
317
- const cacheReadTokens = Math.min(lastTotals.cached, lastTotals.input);
318
- const inputTokens = lastTotals.input - cacheReadTokens;
319
- const outputTokens = lastTotals.output;
280
+ const cacheReadTokens = Math.min(totals.cached, totals.input);
281
+ const inputTokens = totals.input - cacheReadTokens;
282
+ const outputTokens = totals.output;
320
283
  const cacheWriteTokens = 0;
321
284
  // Codex rollouts carry only cumulative totals — there is no per-model
322
285
  // attribution, so perModel is deliberately absent (models lists what ran).
@@ -326,11 +289,38 @@ async function collectCodexUsage(codexSessionId, options) {
326
289
  cacheReadTokens,
327
290
  cacheWriteTokens,
328
291
  totalTokens: inputTokens + outputTokens + cacheReadTokens + cacheWriteTokens,
329
- models,
292
+ models: totals.models,
330
293
  harness: 'codex',
331
294
  collectedAt: new Date().toISOString(),
332
295
  };
333
296
  }
297
+ const codexUsageFold = {
298
+ kind: 'codex-usage-v1',
299
+ init: () => ({ models: [], lastTotals: null }),
300
+ step(state, raw) {
301
+ const entry = raw;
302
+ const payload = entry?.payload;
303
+ if (!payload)
304
+ return;
305
+ if (entry.type === 'turn_context' && payload.model) {
306
+ if (!state.models.includes(payload.model))
307
+ state.models.push(payload.model);
308
+ return;
309
+ }
310
+ // token_count events carry cumulative totals — the LAST one wins. Some
311
+ // token_count events have info: null (rate-limit-only updates); skip them.
312
+ if (payload.type === 'token_count') {
313
+ const totals = payload.info?.total_token_usage;
314
+ if (totals) {
315
+ state.lastTotals = {
316
+ input: totals.input_tokens ?? 0,
317
+ cached: totals.cached_input_tokens ?? 0,
318
+ output: totals.output_tokens ?? 0,
319
+ };
320
+ }
321
+ }
322
+ },
323
+ };
334
324
  /**
335
325
  * Resolve the kimi-code session dir that this ftown session spawned.
336
326
  *
@@ -393,54 +383,57 @@ async function collectKimiCodeUsage(workingDir, sessionCreatedAt, options) {
393
383
  catch {
394
384
  return null;
395
385
  }
386
+ const cache = options.foldCache ?? defaultJsonlFoldCache;
396
387
  let counted = 0;
397
388
  // Keyed by model id; Map preserves first-appearance order across agents.
398
389
  const byModel = new Map();
399
390
  for (const agent of agentNames) {
400
391
  const wirePath = join(agentsDir, agent, 'wire.jsonl');
401
- for await (const raw of jsonlLines(wirePath, deadline)) {
402
- const entry = raw;
403
- if (entry?.type !== 'usage.record')
404
- continue;
405
- const usage = entry.usage;
406
- if (!usage)
407
- continue;
408
- const model = entry.model ?? '';
409
- if (!model)
410
- continue;
411
- let acc = byModel.get(model);
392
+ const sums = await cache.fold(wirePath, kimiUsageFold, options.timeoutMs ?? DEFAULT_TIMEOUT_MS, (state) => ({
393
+ byModel: new Map([...state.byModel].map(([k, m]) => [k, { ...m }])),
394
+ counted: state.counted,
395
+ }));
396
+ if (!sums)
397
+ continue;
398
+ counted += sums.counted;
399
+ for (const m of sums.byModel.values()) {
400
+ const acc = byModel.get(m.model);
412
401
  if (!acc) {
413
- acc = { model, inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0 };
414
- byModel.set(model, acc);
402
+ byModel.set(m.model, m);
403
+ continue;
415
404
  }
416
- // Per-turn incremental records — SUM across all of them.
417
- acc.inputTokens += usage.inputOther ?? 0;
418
- acc.outputTokens += usage.output ?? 0;
419
- acc.cacheReadTokens += usage.inputCacheRead ?? 0;
420
- acc.cacheWriteTokens += usage.inputCacheCreation ?? 0;
421
- counted += 1;
405
+ acc.inputTokens += m.inputTokens;
406
+ acc.outputTokens += m.outputTokens;
407
+ acc.cacheReadTokens += m.cacheReadTokens;
408
+ acc.cacheWriteTokens += m.cacheWriteTokens;
422
409
  }
423
410
  }
424
411
  if (counted === 0)
425
412
  return null;
426
- const perModel = [...byModel.values()];
427
- const sum = (pick) => perModel.reduce((acc, m) => acc + pick(m), 0);
428
- const inputTokens = sum((m) => m.inputTokens);
429
- const outputTokens = sum((m) => m.outputTokens);
430
- const cacheReadTokens = sum((m) => m.cacheReadTokens);
431
- const cacheWriteTokens = sum((m) => m.cacheWriteTokens);
432
- return {
433
- inputTokens,
434
- outputTokens,
435
- cacheReadTokens,
436
- cacheWriteTokens,
437
- totalTokens: inputTokens + outputTokens + cacheReadTokens + cacheWriteTokens,
438
- models: perModel.map((m) => m.model),
439
- perModel,
440
- harness: 'kimi-code',
441
- collectedAt: new Date().toISOString(),
442
- };
413
+ return usageFromModels(byModel, 'kimi-code');
443
414
  }
415
+ const kimiUsageFold = {
416
+ kind: 'kimi-usage-v1',
417
+ init: newModelSums,
418
+ step(state, raw) {
419
+ const entry = raw;
420
+ if (entry?.type !== 'usage.record')
421
+ return;
422
+ const usage = entry.usage;
423
+ if (!usage)
424
+ return;
425
+ const model = entry.model ?? '';
426
+ if (!model)
427
+ return;
428
+ const acc = modelAcc(state, model);
429
+ // Per-turn incremental records — SUM across all of them.
430
+ acc.inputTokens += usage.inputOther ?? 0;
431
+ acc.outputTokens += usage.output ?? 0;
432
+ acc.cacheReadTokens += usage.inputCacheRead ?? 0;
433
+ acc.cacheWriteTokens += usage.inputCacheCreation ?? 0;
434
+ state.counted += 1;
435
+ },
436
+ };
444
437
  /**
445
438
  * Resolve the muse session.jsonl that this ftown session spawned.
446
439
  *
@@ -578,8 +571,7 @@ async function collectMuseUsageById(museSessionId, options) {
578
571
  const filePath = await findMuseSessionFileById(baseDir, museSessionId);
579
572
  if (!filePath)
580
573
  return null;
581
- const deadline = Date.now() + (options.timeoutMs ?? DEFAULT_TIMEOUT_MS);
582
- return sumMuseSessionFile(filePath, deadline);
574
+ return sumMuseSessionFile(filePath, options);
583
575
  }
584
576
  async function collectMuseUsage(workingDir, sessionCreatedAt, options) {
585
577
  const baseDir = options.museSessionsDir
@@ -588,28 +580,27 @@ async function collectMuseUsage(workingDir, sessionCreatedAt, options) {
588
580
  const filePath = await resolveMuseSessionFile(baseDir, workingDir, sessionCreatedAt, deadline);
589
581
  if (!filePath)
590
582
  return null;
591
- return sumMuseSessionFile(filePath, deadline);
583
+ return sumMuseSessionFile(filePath, options);
592
584
  }
593
- async function sumMuseSessionFile(filePath, deadline) {
594
- let counted = 0;
595
- // Keyed by model id; Map preserves first-appearance order.
596
- const byModel = new Map();
597
- for await (const raw of jsonlLines(filePath, deadline)) {
585
+ async function sumMuseSessionFile(filePath, options) {
586
+ const usage = await (options.foldCache ?? defaultJsonlFoldCache).fold(filePath, museUsageFold, options.timeoutMs ?? DEFAULT_TIMEOUT_MS, (state) => (state.counted === 0 ? null : usageFromModels(state.byModel, 'muse')));
587
+ return usage ?? null;
588
+ }
589
+ const museUsageFold = {
590
+ kind: 'muse-usage-v1',
591
+ init: newModelSums,
592
+ step(state, raw) {
598
593
  const entry = raw;
599
594
  if (entry?.payload_type !== 'runtime.session')
600
- continue;
595
+ return;
601
596
  const event = entry.payload?.kind === 'run' ? entry.payload.event : undefined;
602
597
  if (event?.kind !== 'model_completed')
603
- continue;
598
+ return;
604
599
  const usage = event.usage;
605
600
  const model = event.model ?? '';
606
601
  if (!usage || !model)
607
- continue;
608
- let acc = byModel.get(model);
609
- if (!acc) {
610
- acc = { model, inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0 };
611
- byModel.set(model, acc);
612
- }
602
+ return;
603
+ const acc = modelAcc(state, model);
613
604
  // Per-call records — SUM across all of them. Verified against real logs:
614
605
  // input_tokens INCLUDES cached tokens (cached(n) ≈ input(n-1)), so split
615
606
  // them codex-style; cached_tokens duplicates cache_read_tokens (ignored);
@@ -620,26 +611,7 @@ async function sumMuseSessionFile(filePath, deadline) {
620
611
  acc.outputTokens += safeTokenCount(usage.output_tokens);
621
612
  acc.cacheReadTokens += cacheRead;
622
613
  acc.cacheWriteTokens += safeTokenCount(usage.cache_write_tokens);
623
- counted += 1;
624
- }
625
- if (counted === 0)
626
- return null;
627
- const perModel = [...byModel.values()];
628
- const sum = (pick) => perModel.reduce((acc, m) => acc + pick(m), 0);
629
- const inputTokens = sum((m) => m.inputTokens);
630
- const outputTokens = sum((m) => m.outputTokens);
631
- const cacheReadTokens = sum((m) => m.cacheReadTokens);
632
- const cacheWriteTokens = sum((m) => m.cacheWriteTokens);
633
- return {
634
- inputTokens,
635
- outputTokens,
636
- cacheReadTokens,
637
- cacheWriteTokens,
638
- totalTokens: inputTokens + outputTokens + cacheReadTokens + cacheWriteTokens,
639
- models: perModel.map((m) => m.model),
640
- perModel,
641
- harness: 'muse',
642
- collectedAt: new Date().toISOString(),
643
- };
644
- }
614
+ state.counted += 1;
615
+ },
616
+ };
645
617
  //# sourceMappingURL=usage-collector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"usage-collector.js","sourceRoot":"","sources":["../src/usage-collector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage-collector.js","sourceRoot":"","sources":["../src/usage-collector.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ftown-bridge",
3
- "version": "0.20.4",
3
+ "version": "0.20.5",
4
4
  "description": "CLI bridge for ftown — generic PTY-over-Centrifugo relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -80,5 +80,5 @@
80
80
  "overrides": {
81
81
  "qs": "6.16.1"
82
82
  },
83
- "gitHead": "06b8cf53df12a1f5dcc4f0fd67d575faeb3abb6e"
83
+ "gitHead": "a7eed66bbaeb1c16cfb45b92c8846847435c93ba"
84
84
  }