@opencode-trace/plugin 0.0.3 → 0.0.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.
@@ -1,16 +1,38 @@
1
- import { StateManager } from "@opencode-trace/core/state";
1
+ import { ConfigManager } from "@opencode-trace/core/state";
2
+ export interface TracerConfig {
3
+ globalDir?: string;
4
+ localDir: string;
5
+ }
6
+ export type TraceScope = "global" | "local" | "session";
7
+ export type StorageLocation = "global" | "local";
8
+ export interface ScopeStatus {
9
+ globalEnabled: boolean;
10
+ localEnabled: boolean;
11
+ sessionEnabled: boolean | null;
12
+ effectiveEnabled: boolean;
13
+ storageLocation: StorageLocation;
14
+ globalDir: string;
15
+ localDir: string;
16
+ }
2
17
  export declare class TracePlugin {
3
18
  private origFetch;
4
19
  private ids;
5
20
  private writeQueue;
6
- private stateQueue;
7
- private stateManager;
8
21
  private interceptorInstalled;
9
- private traceDir;
10
- constructor(traceDir: string);
11
- tracedFetch(input: Parameters<typeof globalThis.fetch>[0], init?: Parameters<typeof globalThis.fetch>[1]): Promise<Response>;
22
+ private globalDir;
23
+ private localDir;
24
+ private globalConfigManager;
25
+ private localConfigManager;
26
+ constructor(config: TracerConfig);
27
+ initStateManager(): Promise<void>;
28
+ getStateManager(): ConfigManager | null;
29
+ getGlobalConfigManager(): ConfigManager | null;
30
+ getLocalConfigManager(): ConfigManager | null;
31
+ resolveTraceDir(sessionId?: string): string;
32
+ shouldRecord(sessionId?: string): boolean;
33
+ getScopeStatus(sessionId?: string): ScopeStatus;
34
+ tracedFetch(input: Parameters<typeof globalThis.fetch>[0], init?: Parameters<typeof globalThis.fetch>[1], origFetch?: typeof globalThis.fetch): Promise<Response>;
12
35
  private getSessionId;
13
- private shouldRecord;
14
36
  private parseBody;
15
37
  private headersToObject;
16
38
  private classifyPurpose;
@@ -18,12 +40,14 @@ export declare class TracePlugin {
18
40
  private captureRequestMeta;
19
41
  private wrapStreamResponse;
20
42
  private recordResponse;
43
+ private buildTimelineEntry;
21
44
  private sanitizeStackTrace;
22
45
  private createTraceRecord;
46
+ private writeParsedCacheAsync;
47
+ flush(): Promise<void>;
48
+ wrap(fetch: typeof globalThis.fetch): typeof fetch;
23
49
  getInterceptor(): typeof fetch;
24
50
  installInterceptor(): void;
25
51
  uninstallInterceptor(): void;
26
- initStateManager(): Promise<void>;
27
- getStateManager(): StateManager | null;
28
52
  }
29
53
  //# sourceMappingURL=plugin-instance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-instance.d.ts","sourceRoot":"","sources":["../src/plugin-instance.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAQ1D,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,GAAG,CAAkC;IAC7C,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,oBAAoB,CAAkB;IAC9C,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAOtB,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IA+BlI,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,YAAY;YAQN,kBAAkB;IAqChC,OAAO,CAAC,kBAAkB;YAyBZ,cAAc;IAiC5B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,iBAAiB;IAuBzB,cAAc,IAAI,OAAO,KAAK;IAI9B,kBAAkB,IAAI,IAAI;IAO1B,oBAAoB,IAAI,IAAI;IAMtB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAOvC,eAAe,IAAI,YAAY,GAAG,IAAI;CAGvC"}
1
+ {"version":3,"file":"plugin-instance.d.ts","sourceRoot":"","sources":["../src/plugin-instance.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAM3D,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AACxD,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,eAAe,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,GAAG,CAAkC;IAC7C,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,oBAAoB,CAAkB;IAC9C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,mBAAmB,CAA8B;IACzD,OAAO,CAAC,kBAAkB,CAA8B;gBAE5C,MAAM,EAAE,YAAY;IAU1B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQvC,eAAe,IAAI,aAAa,GAAG,IAAI;IAIvC,sBAAsB,IAAI,aAAa,GAAG,IAAI;IAI9C,qBAAqB,IAAI,aAAa,GAAG,IAAI;IAI7C,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IAe3C,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO;IAgBzC,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW;IA6BzC,WAAW,CACf,KAAK,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAC7C,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAC7C,SAAS,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,GAClC,OAAO,CAAC,QAAQ,CAAC;IAuEpB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,YAAY;YAWN,kBAAkB;YAmElB,kBAAkB;YAgElB,cAAc;IAsF5B,OAAO,CAAC,kBAAkB;IAqD1B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,qBAAqB;IAcvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,IAAI,CAAC,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,GAAG,OAAO,KAAK;IAKlD,cAAc,IAAI,OAAO,KAAK;IAK9B,kBAAkB,IAAI,IAAI;IAO1B,oBAAoB,IAAI,IAAI;CAK7B"}
@@ -1,60 +1,131 @@
1
1
  import { AsyncWriteQueue } from "./write-queue.js";
2
- import { AsyncStateQueue } from "./state-queue.js";
3
- import { StateManager } from "@opencode-trace/core/state";
4
2
  import { redactHeaders } from "./redact.js";
5
- import { sanitizePath } from "@opencode-trace/core";
3
+ import { sanitizePath, parse, logger } from "@opencode-trace/core";
4
+ import { ConfigManager } from "@opencode-trace/core/state";
6
5
  import { homedir } from "node:os";
7
- import { logger } from "@opencode-trace/core";
6
+ import { join } from "node:path";
7
+ import { promises as fs } from "node:fs";
8
8
  export class TracePlugin {
9
9
  origFetch;
10
10
  ids = new Map();
11
11
  writeQueue;
12
- stateQueue;
13
- stateManager = null;
14
12
  interceptorInstalled = false;
15
- traceDir;
16
- constructor(traceDir) {
17
- this.traceDir = traceDir;
18
- this.origFetch = globalThis.fetch; // Will be updated in installInterceptor
19
- this.writeQueue = new AsyncWriteQueue(traceDir);
20
- this.stateQueue = new AsyncStateQueue();
21
- }
22
- async tracedFetch(input, init) {
13
+ globalDir;
14
+ localDir;
15
+ globalConfigManager = null;
16
+ localConfigManager = null;
17
+ constructor(config) {
18
+ if (!config.localDir) {
19
+ throw new TypeError("TracerConfig.localDir is required");
20
+ }
21
+ this.globalDir = config.globalDir ?? join(homedir(), ".opencode-trace");
22
+ this.localDir = config.localDir;
23
+ this.origFetch = globalThis.fetch;
24
+ this.writeQueue = new AsyncWriteQueue(this.globalDir);
25
+ }
26
+ async initStateManager() {
27
+ this.globalConfigManager = new ConfigManager(this.globalDir);
28
+ await this.globalConfigManager.init();
29
+ this.localConfigManager = new ConfigManager(this.localDir);
30
+ await this.localConfigManager.init();
31
+ }
32
+ getStateManager() {
33
+ return this.globalConfigManager;
34
+ }
35
+ getGlobalConfigManager() {
36
+ return this.globalConfigManager;
37
+ }
38
+ getLocalConfigManager() {
39
+ return this.localConfigManager;
40
+ }
41
+ resolveTraceDir(sessionId) {
42
+ if (sessionId && this.globalConfigManager) {
43
+ const sessionPref = this.globalConfigManager.getSessionStoragePreference(sessionId);
44
+ if (sessionPref === "local")
45
+ return this.localDir;
46
+ if (sessionPref === "global")
47
+ return this.globalDir;
48
+ }
49
+ if (this.globalConfigManager) {
50
+ const globalPref = this.globalConfigManager.getStoragePreference();
51
+ if (globalPref === "local")
52
+ return this.localDir;
53
+ }
54
+ return this.globalDir;
55
+ }
56
+ shouldRecord(sessionId) {
57
+ if (!this.globalConfigManager)
58
+ return true;
59
+ const globalEnabled = this.globalConfigManager.getGlobalState("global_trace_enabled") === "true";
60
+ if (globalEnabled)
61
+ return true;
62
+ if (this.localConfigManager) {
63
+ const localEnabled = this.localConfigManager.getGlobalState("global_trace_enabled") === "true";
64
+ if (localEnabled)
65
+ return true;
66
+ }
67
+ if (!sessionId)
68
+ return false;
69
+ return this.globalConfigManager.getSessionEnabled(sessionId);
70
+ }
71
+ getScopeStatus(sessionId) {
72
+ const globalEnabled = this.globalConfigManager
73
+ ? this.globalConfigManager.getGlobalState("global_trace_enabled") === "true"
74
+ : false;
75
+ const localEnabled = this.localConfigManager
76
+ ? this.localConfigManager.getGlobalState("global_trace_enabled") === "true"
77
+ : false;
78
+ const sessionEnabled = sessionId && this.globalConfigManager
79
+ ? this.globalConfigManager.getSessionEnabled(sessionId)
80
+ : null;
81
+ const effectiveEnabled = this.shouldRecord(sessionId);
82
+ const traceDir = this.resolveTraceDir(sessionId);
83
+ const storageLocation = traceDir === this.localDir ? "local" : "global";
84
+ return {
85
+ globalEnabled,
86
+ localEnabled,
87
+ sessionEnabled,
88
+ effectiveEnabled,
89
+ storageLocation,
90
+ globalDir: this.globalDir,
91
+ localDir: this.localDir,
92
+ };
93
+ }
94
+ async tracedFetch(input, init, origFetch) {
95
+ const delegate = origFetch ?? this.origFetch;
23
96
  const req = this.parseRequest(input, init);
24
97
  if (!req)
25
- return this.origFetch(input, init);
98
+ return delegate(input, init);
26
99
  const meta = await this.captureRequestMeta(req);
27
100
  if (!meta)
28
- return this.origFetch(req);
101
+ return delegate(req);
29
102
  let res;
30
103
  try {
31
- res = await this.origFetch(req);
104
+ res = await delegate(req);
32
105
  }
33
106
  catch (err) {
34
107
  const error = err instanceof Error
35
108
  ? { message: err.message, stack: this.sanitizeStackTrace(err.stack) }
36
109
  : { message: String(err) };
37
110
  const record = this.createTraceRecord(meta.seq, meta.purpose, meta.requestAt, meta.traceReq, null, error, { requestSentAt: meta.requestSentAt });
38
- this.writeQueue.enqueue(meta.session, meta.seq, record);
39
- this.stateQueue.enqueue(meta.session, meta.seq, record);
111
+ const timelineEntry = this.buildTimelineEntry(meta.session, meta.seq, meta.purpose, meta.requestAt, meta.traceReq, null, error);
112
+ this.writeQueue.enqueue(meta.session, meta.seq, record, timelineEntry, meta.traceDir);
113
+ this.writeParsedCacheAsync(meta.session, meta.seq, record, meta.traceDir);
40
114
  throw err;
41
115
  }
42
116
  let latencyMeta;
43
117
  if (meta.isStream && res.body) {
44
- res = this.wrapStreamResponse(res, meta.requestSentAt);
118
+ res = await this.wrapStreamResponse(res, meta.requestSentAt, meta.session, meta.seq, meta.traceDir);
45
119
  latencyMeta = res.__latencyMeta;
46
120
  }
47
- void this.recordResponse(meta.session, meta.seq, meta.purpose, meta.requestAt, meta.traceReq, res, latencyMeta);
121
+ void this.recordResponse(meta.session, meta.seq, meta.purpose, meta.requestAt, meta.traceReq, res, latencyMeta, meta.traceDir);
48
122
  return res;
49
123
  }
50
124
  getSessionId(req) {
51
- return req.headers.get("x-opencode-session") ?? req.headers.get("x-session-affinity") ?? req.headers.get("session_id") ?? undefined;
52
- }
53
- shouldRecord(sessionId) {
54
- if (!this.stateManager)
55
- return true;
56
- this.stateManager.reload();
57
- return this.stateManager.isTraceEnabled(sessionId);
125
+ return (req.headers.get("x-opencode-session") ??
126
+ req.headers.get("x-session-affinity") ??
127
+ req.headers.get("session_id") ??
128
+ undefined);
58
129
  }
59
130
  parseBody(text) {
60
131
  try {
@@ -66,11 +137,17 @@ export class TracePlugin {
66
137
  }
67
138
  headersToObject(headers) {
68
139
  const obj = {};
69
- headers.forEach((value, key) => { obj[key] = value; });
140
+ headers.forEach((value, key) => {
141
+ obj[key] = value;
142
+ });
70
143
  return obj;
71
144
  }
72
145
  classifyPurpose(raw) {
73
- if (typeof raw === "object" && raw !== null && !Array.isArray(raw) && Array.isArray(raw.tools) && raw.tools.length > 0)
146
+ if (typeof raw === "object" &&
147
+ raw !== null &&
148
+ !Array.isArray(raw) &&
149
+ Array.isArray(raw.tools) &&
150
+ raw.tools.length > 0)
74
151
  return "";
75
152
  return "[meta]";
76
153
  }
@@ -88,12 +165,19 @@ export class TracePlugin {
88
165
  return null;
89
166
  if (!this.shouldRecord(session))
90
167
  return null;
168
+ const traceDir = this.resolveTraceDir(session);
91
169
  const seq = (this.ids.get(session) ?? 0) + 1;
92
170
  this.ids.set(session, seq);
93
171
  const requestSentAt = performance.now();
94
172
  const requestAt = new Date().toISOString();
95
- const reqBodyText = await req.clone().text().catch((err) => {
96
- logger.error("Failed to clone request body", { url: req.url, error: String(err) });
173
+ const reqBodyText = await req
174
+ .clone()
175
+ .text()
176
+ .catch((err) => {
177
+ logger.error("Failed to clone request body", {
178
+ url: req.url,
179
+ error: String(err),
180
+ });
97
181
  return "";
98
182
  });
99
183
  const reqBody = this.parseBody(reqBodyText);
@@ -111,19 +195,60 @@ export class TracePlugin {
111
195
  headers: redactHeaders(this.headersToObject(req.headers)),
112
196
  body: reqBody,
113
197
  };
114
- return { session, seq, requestSentAt, requestAt, reqBody, isStream, purpose, traceReq };
198
+ return {
199
+ session,
200
+ seq,
201
+ requestSentAt,
202
+ requestAt,
203
+ reqBody,
204
+ isStream,
205
+ purpose,
206
+ traceReq,
207
+ traceDir,
208
+ };
115
209
  }
116
- wrapStreamResponse(res, requestSentAt) {
210
+ async wrapStreamResponse(res, requestSentAt, session, seq, traceDir) {
117
211
  const latencyMeta = { requestSentAt, firstTokenAt: null, lastTokenAt: null };
212
+ const sessionDir = join(traceDir, session);
213
+ const sseTmpPath = join(sessionDir, `${seq}.sse.tmp`);
214
+ const sseFinalPath = join(sessionDir, `${seq}.sse`);
215
+ await fs.mkdir(sessionDir, { recursive: true });
216
+ const fileHandle = await fs.open(sseTmpPath, "w");
217
+ let bytesWritten = 0;
118
218
  const transform = new TransformStream({
119
- transform(chunk, controller) {
219
+ async transform(chunk, controller) {
120
220
  if (latencyMeta.firstTokenAt === null) {
121
221
  latencyMeta.firstTokenAt = performance.now();
122
222
  }
223
+ try {
224
+ await fileHandle.write(chunk);
225
+ bytesWritten += chunk.byteLength;
226
+ }
227
+ catch (err) {
228
+ logger.error("Failed to write SSE chunk", {
229
+ seq,
230
+ error: String(err),
231
+ });
232
+ }
123
233
  controller.enqueue(chunk);
124
234
  },
125
- flush() {
235
+ async flush() {
126
236
  latencyMeta.lastTokenAt = performance.now();
237
+ try {
238
+ await fileHandle.close();
239
+ if (bytesWritten > 0) {
240
+ await fs.rename(sseTmpPath, sseFinalPath);
241
+ }
242
+ else {
243
+ await fs.unlink(sseTmpPath).catch(() => { });
244
+ }
245
+ }
246
+ catch (err) {
247
+ logger.error("Failed to finalize SSE file", {
248
+ seq,
249
+ error: String(err),
250
+ });
251
+ }
127
252
  },
128
253
  });
129
254
  const wrappedBody = res.body.pipeThrough(transform);
@@ -135,7 +260,8 @@ export class TracePlugin {
135
260
  wrappedRes.__latencyMeta = latencyMeta;
136
261
  return wrappedRes;
137
262
  }
138
- async recordResponse(session, seq, purpose, requestAt, traceReq, res, latencyMeta) {
263
+ async recordResponse(session, seq, purpose, requestAt, traceReq, res, latencyMeta, traceDir) {
264
+ const dir = traceDir ?? this.globalDir;
139
265
  try {
140
266
  const resBodyText = await res.clone().text();
141
267
  const resBody = this.parseBody(resBodyText);
@@ -145,36 +271,88 @@ export class TracePlugin {
145
271
  headers: redactHeaders(this.headersToObject(res.headers)),
146
272
  body: resBody,
147
273
  };
148
- const normalizedLatency = latencyMeta ? {
149
- requestSentAt: latencyMeta.requestSentAt,
150
- firstTokenAt: latencyMeta.firstTokenAt ?? undefined,
151
- lastTokenAt: latencyMeta.lastTokenAt ?? undefined,
152
- } : undefined;
274
+ const normalizedLatency = latencyMeta
275
+ ? {
276
+ requestSentAt: latencyMeta.requestSentAt,
277
+ firstTokenAt: latencyMeta.firstTokenAt ?? undefined,
278
+ lastTokenAt: latencyMeta.lastTokenAt ?? undefined,
279
+ }
280
+ : undefined;
153
281
  const record = this.createTraceRecord(seq, purpose, requestAt, traceReq, traceRes, null, normalizedLatency);
154
- this.writeQueue.enqueue(session, seq, record);
155
- this.stateQueue.enqueue(session, seq, record);
282
+ const timelineEntry = this.buildTimelineEntry(session, seq, purpose, requestAt, traceReq, traceRes, null);
283
+ this.writeQueue.enqueue(session, seq, record, timelineEntry, dir);
284
+ this.writeParsedCacheAsync(session, seq, record, dir);
156
285
  }
157
286
  catch (err) {
158
287
  const error = err instanceof Error
159
288
  ? { message: err.message, stack: this.sanitizeStackTrace(err.stack) }
160
289
  : { message: String(err) };
161
- const normalizedLatency = latencyMeta ? {
162
- requestSentAt: latencyMeta.requestSentAt,
163
- firstTokenAt: latencyMeta.firstTokenAt ?? undefined,
164
- lastTokenAt: latencyMeta.lastTokenAt ?? undefined,
165
- } : undefined;
290
+ const normalizedLatency = latencyMeta
291
+ ? {
292
+ requestSentAt: latencyMeta.requestSentAt,
293
+ firstTokenAt: latencyMeta.firstTokenAt ?? undefined,
294
+ lastTokenAt: latencyMeta.lastTokenAt ?? undefined,
295
+ }
296
+ : undefined;
166
297
  const record = this.createTraceRecord(seq, purpose, requestAt, traceReq, null, error, normalizedLatency);
167
- this.writeQueue.enqueue(session, seq, record);
168
- this.stateQueue.enqueue(session, seq, record);
298
+ const timelineEntry = this.buildTimelineEntry(session, seq, purpose, requestAt, traceReq, null, error);
299
+ this.writeQueue.enqueue(session, seq, record, timelineEntry, dir);
300
+ this.writeParsedCacheAsync(session, seq, record, dir);
301
+ }
302
+ }
303
+ buildTimelineEntry(_session, seq, purpose, requestAt, traceReq, traceRes, error) {
304
+ const responseAt = new Date().toISOString();
305
+ const requestTime = new Date(requestAt).getTime();
306
+ const responseTime = new Date(responseAt).getTime();
307
+ const totalDurationMs = responseTime - requestTime;
308
+ let provider = null;
309
+ let model = null;
310
+ let inputTokens = null;
311
+ let outputTokens = null;
312
+ if (traceRes?.body && typeof traceRes.body === "object" && traceRes.body !== null) {
313
+ const body = traceRes.body;
314
+ if (typeof body.model === "string")
315
+ model = body.model;
316
+ if (body.usage && typeof body.usage === "object") {
317
+ const usage = body.usage;
318
+ if (typeof usage.input_tokens === "number")
319
+ inputTokens = usage.input_tokens;
320
+ if (typeof usage.output_tokens === "number")
321
+ outputTokens = usage.output_tokens;
322
+ if (typeof usage.prompt_tokens === "number")
323
+ inputTokens = usage.prompt_tokens;
324
+ if (typeof usage.completion_tokens === "number")
325
+ outputTokens = usage.completion_tokens;
326
+ }
327
+ }
328
+ if (traceReq.url.includes("openai.com") || traceReq.url.includes("api.openai")) {
329
+ provider = "openai";
330
+ }
331
+ else if (traceReq.url.includes("anthropic.com") || traceReq.url.includes("api.anthropic")) {
332
+ provider = "anthropic";
169
333
  }
334
+ return {
335
+ seq,
336
+ url: traceReq.url,
337
+ method: traceReq.method,
338
+ purpose,
339
+ requestAt,
340
+ responseAt: error ? null : responseAt,
341
+ status: error ? 0 : (traceRes?.status ?? 0),
342
+ provider,
343
+ model,
344
+ inputTokens,
345
+ outputTokens,
346
+ totalDurationMs,
347
+ };
170
348
  }
171
349
  sanitizeStackTrace(stack) {
172
350
  if (!stack)
173
351
  return undefined;
174
352
  const userHome = homedir();
175
353
  return sanitizePath(stack, userHome)
176
- .replace(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g, '[IP]')
177
- .replace(/:\d{4,5}(?=[\/\\\s]|$)/g, ':[PORT]');
354
+ .replace(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g, "[IP]")
355
+ .replace(/:\d{4,5}(?=[\/\\\s]|$)/g, ":[PORT]");
178
356
  }
179
357
  createTraceRecord(seq, purpose, requestAt, traceReq, traceRes, error, latency) {
180
358
  return {
@@ -190,14 +368,36 @@ export class TracePlugin {
190
368
  lastTokenAt: latency?.lastTokenAt ?? undefined,
191
369
  };
192
370
  }
371
+ writeParsedCacheAsync(session, seq, record, traceDir) {
372
+ setImmediate(() => {
373
+ try {
374
+ const parsed = parse.detectAndParse(record);
375
+ this.writeQueue.writeParsedCache(session, seq, {
376
+ ...parsed,
377
+ _pcv: parse.PARSED_CACHE_VERSION,
378
+ }, traceDir);
379
+ }
380
+ catch {
381
+ // fail silently — parsed cache is optional
382
+ }
383
+ });
384
+ }
385
+ async flush() {
386
+ await this.writeQueue.flush();
387
+ }
388
+ wrap(fetch) {
389
+ const capturedOrig = fetch;
390
+ return async (input, init) => this.tracedFetch(input, init, capturedOrig);
391
+ }
193
392
  getInterceptor() {
194
- return this.tracedFetch.bind(this);
393
+ const capturedOrig = this.origFetch;
394
+ return async (input, init) => this.tracedFetch(input, init, capturedOrig);
195
395
  }
196
396
  installInterceptor() {
197
397
  if (this.interceptorInstalled)
198
398
  return;
199
- this.origFetch = globalThis.fetch; // Capture current fetch at installation time
200
- globalThis.fetch = this.getInterceptor();
399
+ this.origFetch = globalThis.fetch;
400
+ globalThis.fetch = async (input, init) => this.tracedFetch(input, init, this.origFetch);
201
401
  this.interceptorInstalled = true;
202
402
  }
203
403
  uninstallInterceptor() {
@@ -206,14 +406,5 @@ export class TracePlugin {
206
406
  globalThis.fetch = this.origFetch;
207
407
  this.interceptorInstalled = false;
208
408
  }
209
- async initStateManager() {
210
- this.stateManager = new StateManager(this.traceDir);
211
- await this.stateManager.init();
212
- this.stateManager.sync();
213
- this.stateQueue.setStateManager(this.stateManager);
214
- }
215
- getStateManager() {
216
- return this.stateManager;
217
- }
218
409
  }
219
410
  //# sourceMappingURL=plugin-instance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-instance.js","sourceRoot":"","sources":["../src/plugin-instance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-instance.js","sourceRoot":"","sources":["../src/plugin-instance.ts"],"names":[],"mappings":"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"}