devrage 0.5.5 → 0.5.7

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,430 @@
1
+ import { existsSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { isAbsolute, join, resolve } from "node:path";
4
+ import { openReadonlySqliteDatabase } from "./sqlite";
5
+ export function t3codeAdapter() {
6
+ return {
7
+ name: "t3code",
8
+ async *messages(options) {
9
+ for (const location of discoverT3Databases()) {
10
+ const db = await openT3Db(location.path);
11
+ if (!db) {
12
+ continue;
13
+ }
14
+ try {
15
+ yield* queryUserMessages(db, location, options);
16
+ }
17
+ finally {
18
+ db.close();
19
+ }
20
+ }
21
+ },
22
+ async *usage(options) {
23
+ const seen = new Set();
24
+ for (const location of discoverT3Databases()) {
25
+ const db = await openT3Db(location.path);
26
+ if (!db) {
27
+ continue;
28
+ }
29
+ try {
30
+ yield* queryUsageRecords(db, location, seen, options);
31
+ }
32
+ finally {
33
+ db.close();
34
+ }
35
+ }
36
+ },
37
+ };
38
+ }
39
+ function discoverT3Databases() {
40
+ const locations = [];
41
+ const seen = new Set();
42
+ const stateDir = stringValue(process.env["T3CODE_STATE_DIR"]);
43
+ if (stateDir) {
44
+ addLocation(locations, seen, join(resolveHomePath(stateDir), "state.sqlite"), "state");
45
+ }
46
+ for (const baseDir of uniqueStrings([
47
+ stringValue(process.env["T3CODE_HOME"]),
48
+ join(homedir(), ".t3"),
49
+ ])) {
50
+ addLocation(locations, seen, join(resolveHomePath(baseDir), "userdata", "state.sqlite"), "userdata");
51
+ addLocation(locations, seen, join(resolveHomePath(baseDir), "dev", "state.sqlite"), "dev");
52
+ }
53
+ return locations;
54
+ }
55
+ function addLocation(locations, seen, dbPath, scope) {
56
+ if (seen.has(dbPath) || !existsSync(dbPath)) {
57
+ return;
58
+ }
59
+ seen.add(dbPath);
60
+ locations.push({ path: dbPath, scope });
61
+ }
62
+ function resolveHomePath(value) {
63
+ if (value === "~") {
64
+ return homedir();
65
+ }
66
+ if (value.startsWith("~/") || value.startsWith("~\\")) {
67
+ return join(homedir(), value.slice(2));
68
+ }
69
+ return isAbsolute(value) ? value : resolve(value);
70
+ }
71
+ async function openT3Db(dbPath) {
72
+ return openReadonlySqliteDatabase(dbPath);
73
+ }
74
+ function* queryUserMessages(db, location, options) {
75
+ if (!hasColumns(db, "projection_thread_messages", ["thread_id", "role", "text", "created_at"])) {
76
+ return;
77
+ }
78
+ const orderColumn = hasColumns(db, "projection_thread_messages", ["message_id"])
79
+ ? "message_id"
80
+ : "created_at";
81
+ let query = `
82
+ SELECT thread_id, created_at, text
83
+ FROM projection_thread_messages
84
+ WHERE role = 'user'
85
+ `;
86
+ const params = [];
87
+ if (options?.since) {
88
+ query += ` AND created_at >= ?`;
89
+ params.push(options.since.toISOString());
90
+ }
91
+ query += ` ORDER BY created_at ASC, ${orderColumn} ASC`;
92
+ let rows;
93
+ try {
94
+ rows = db.prepare(query).all(...params);
95
+ }
96
+ catch {
97
+ return;
98
+ }
99
+ for (const row of rows) {
100
+ const text = stringValue(row.text);
101
+ if (!text) {
102
+ continue;
103
+ }
104
+ yield {
105
+ text,
106
+ timestamp: stringValue(row.created_at),
107
+ session: stringValue(row.thread_id),
108
+ project: location.scope,
109
+ };
110
+ }
111
+ }
112
+ function* queryUsageRecords(db, location, seen, options) {
113
+ if (!hasColumns(db, "orchestration_events", [
114
+ "event_id",
115
+ "stream_id",
116
+ "event_type",
117
+ "occurred_at",
118
+ "payload_json",
119
+ ])) {
120
+ return;
121
+ }
122
+ const threadInfo = readThreadInfo(db);
123
+ const orderColumn = hasColumns(db, "orchestration_events", ["sequence"])
124
+ ? "sequence"
125
+ : "event_id";
126
+ let query = `
127
+ SELECT event_id, stream_id, occurred_at, payload_json
128
+ FROM orchestration_events
129
+ WHERE event_type = 'thread.activity-appended'
130
+ `;
131
+ const params = [];
132
+ if (options?.since) {
133
+ query += ` AND occurred_at >= ?`;
134
+ params.push(options.since.toISOString());
135
+ }
136
+ query += ` ORDER BY occurred_at ASC, ${orderColumn} ASC`;
137
+ let rows;
138
+ try {
139
+ rows = db.prepare(query).all(...params);
140
+ }
141
+ catch {
142
+ return;
143
+ }
144
+ for (const row of rows) {
145
+ const payload = asRecord(parseJson(row.payload_json));
146
+ const activity = asRecord(payload?.["activity"]);
147
+ if (activity?.["kind"] !== "context-window.updated") {
148
+ continue;
149
+ }
150
+ const usage = parseUsageSnapshot(activity["payload"]);
151
+ if (!usage || !hasBillableUsage(usage)) {
152
+ continue;
153
+ }
154
+ const threadId = stringValue(payload?.["threadId"]) ?? stringValue(row.stream_id);
155
+ const timestamp = stringValue(activity["createdAt"]) ?? stringValue(row.occurred_at);
156
+ const turnId = stringValue(activity["turnId"]);
157
+ const info = threadId ? threadInfo.get(threadId) : undefined;
158
+ const provider = normalizeT3Provider(info?.provider, info?.model);
159
+ const dedupeKey = t3UsageDedupeKey({
160
+ scope: location.scope,
161
+ threadId,
162
+ turnId,
163
+ provider,
164
+ model: info?.model,
165
+ usage,
166
+ });
167
+ if (seen.has(dedupeKey)) {
168
+ continue;
169
+ }
170
+ seen.add(dedupeKey);
171
+ yield {
172
+ agent: "t3code",
173
+ provider,
174
+ model: info?.model,
175
+ timestamp,
176
+ session: threadId,
177
+ inputTokens: usage.inputTokens,
178
+ outputTokens: usage.outputTokens,
179
+ reasoningTokens: usage.reasoningTokens,
180
+ cacheReadTokens: usage.cacheReadTokens,
181
+ cacheWriteTokens: usage.cacheWriteTokens,
182
+ };
183
+ }
184
+ }
185
+ function normalizeT3Provider(provider, model) {
186
+ const normalized = provider?.trim().toLowerCase();
187
+ const key = normalized?.replace(/[^a-z0-9]/g, "");
188
+ switch (key) {
189
+ case "codex":
190
+ return "openai";
191
+ case "claudeagent":
192
+ case "claudecode":
193
+ return "anthropic";
194
+ case "cursor":
195
+ case "opencode":
196
+ return undefined;
197
+ default:
198
+ if (key?.includes("codex")) {
199
+ return "openai";
200
+ }
201
+ if (key?.includes("claude")) {
202
+ return "anthropic";
203
+ }
204
+ if (normalized === "openai" || normalized === "anthropic") {
205
+ return normalized;
206
+ }
207
+ return providerFromModel(model);
208
+ }
209
+ }
210
+ function providerFromModel(model) {
211
+ const slash = model?.indexOf("/") ?? -1;
212
+ if (!model || slash <= 0) {
213
+ return undefined;
214
+ }
215
+ return model.slice(0, slash);
216
+ }
217
+ function readThreadInfo(db) {
218
+ const info = new Map();
219
+ readProjectionThreadModels(db, info);
220
+ readProjectionThreadProviders(db, info);
221
+ return info;
222
+ }
223
+ function readProjectionThreadModels(db, info) {
224
+ if (!tableExists(db, "projection_threads")) {
225
+ return;
226
+ }
227
+ const columns = tableColumns(db, "projection_threads");
228
+ if (!columns.has("thread_id")) {
229
+ return;
230
+ }
231
+ try {
232
+ if (columns.has("model_selection_json")) {
233
+ const rows = db
234
+ .prepare("SELECT thread_id, model_selection_json FROM projection_threads")
235
+ .all();
236
+ for (const row of rows) {
237
+ const threadId = stringValue(row.thread_id);
238
+ const modelSelection = asRecord(parseJson(row.model_selection_json));
239
+ if (!threadId || !modelSelection) {
240
+ continue;
241
+ }
242
+ const entry = info.get(threadId) ?? {};
243
+ entry.model = stringValue(modelSelection["model"]) ?? entry.model;
244
+ entry.provider =
245
+ stringValue(modelSelection["provider"]) ??
246
+ stringValue(modelSelection["instanceId"]) ??
247
+ entry.provider;
248
+ info.set(threadId, entry);
249
+ }
250
+ return;
251
+ }
252
+ if (columns.has("model")) {
253
+ const rows = db
254
+ .prepare("SELECT thread_id, model FROM projection_threads")
255
+ .all();
256
+ for (const row of rows) {
257
+ const threadId = stringValue(row.thread_id);
258
+ const model = stringValue(row.model);
259
+ if (threadId && model) {
260
+ info.set(threadId, { ...info.get(threadId), model });
261
+ }
262
+ }
263
+ }
264
+ }
265
+ catch {
266
+ return;
267
+ }
268
+ }
269
+ function readProjectionThreadProviders(db, info) {
270
+ if (!hasColumns(db, "projection_thread_sessions", ["thread_id", "provider_name"])) {
271
+ return;
272
+ }
273
+ try {
274
+ const rows = db
275
+ .prepare("SELECT thread_id, provider_name FROM projection_thread_sessions")
276
+ .all();
277
+ for (const row of rows) {
278
+ const threadId = stringValue(row.thread_id);
279
+ const provider = stringValue(row.provider_name);
280
+ if (!threadId || !provider) {
281
+ continue;
282
+ }
283
+ info.set(threadId, { ...info.get(threadId), provider });
284
+ }
285
+ }
286
+ catch {
287
+ return;
288
+ }
289
+ }
290
+ function parseUsageSnapshot(value) {
291
+ const usage = asRecord(value);
292
+ if (!usage) {
293
+ return null;
294
+ }
295
+ const lastInputTokens = tokenValue(usage["lastInputTokens"] ?? usage["last_input_tokens"]);
296
+ const lastCachedInputTokens = tokenValue(usage["lastCachedInputTokens"] ?? usage["last_cached_input_tokens"]);
297
+ const lastOutputTokens = tokenValue(usage["lastOutputTokens"] ?? usage["last_output_tokens"]);
298
+ const lastReasoningOutputTokens = tokenValue(usage["lastReasoningOutputTokens"] ?? usage["last_reasoning_output_tokens"]);
299
+ const hasLastDetails = [
300
+ lastInputTokens,
301
+ lastCachedInputTokens,
302
+ lastOutputTokens,
303
+ lastReasoningOutputTokens,
304
+ ].some((token) => token !== undefined);
305
+ if (hasLastDetails) {
306
+ return splitTokenUsage({
307
+ inputTokens: lastInputTokens ?? 0,
308
+ cachedInputTokens: lastCachedInputTokens ?? 0,
309
+ outputTokens: lastOutputTokens ?? 0,
310
+ reasoningOutputTokens: lastReasoningOutputTokens ?? 0,
311
+ });
312
+ }
313
+ const inputTokens = tokenValue(usage["inputTokens"] ?? usage["input_tokens"]);
314
+ const cachedInputTokens = tokenValue(usage["cachedInputTokens"] ?? usage["cached_input_tokens"]);
315
+ const outputTokens = tokenValue(usage["outputTokens"] ?? usage["output_tokens"]);
316
+ const reasoningOutputTokens = tokenValue(usage["reasoningOutputTokens"] ?? usage["reasoning_output_tokens"]);
317
+ const hasSnapshotDetails = [
318
+ inputTokens,
319
+ cachedInputTokens,
320
+ outputTokens,
321
+ reasoningOutputTokens,
322
+ ].some((token) => token !== undefined);
323
+ if (!hasSnapshotDetails) {
324
+ return null;
325
+ }
326
+ return splitTokenUsage({
327
+ inputTokens: inputTokens ?? 0,
328
+ cachedInputTokens: cachedInputTokens ?? 0,
329
+ outputTokens: outputTokens ?? 0,
330
+ reasoningOutputTokens: reasoningOutputTokens ?? 0,
331
+ });
332
+ }
333
+ function splitTokenUsage(input) {
334
+ const reasoningTokens = Math.min(input.reasoningOutputTokens, input.outputTokens);
335
+ return {
336
+ inputTokens: Math.max(input.inputTokens - input.cachedInputTokens, 0),
337
+ outputTokens: Math.max(input.outputTokens - reasoningTokens, 0),
338
+ reasoningTokens,
339
+ cacheReadTokens: input.cachedInputTokens,
340
+ cacheWriteTokens: 0,
341
+ };
342
+ }
343
+ function hasBillableUsage(usage) {
344
+ return (usage.inputTokens +
345
+ usage.outputTokens +
346
+ usage.reasoningTokens +
347
+ usage.cacheReadTokens +
348
+ usage.cacheWriteTokens >
349
+ 0);
350
+ }
351
+ function t3UsageDedupeKey(input) {
352
+ return JSON.stringify([
353
+ input.scope,
354
+ input.threadId ?? "",
355
+ input.turnId ?? "",
356
+ input.provider ?? "",
357
+ input.model ?? "",
358
+ input.usage.inputTokens,
359
+ input.usage.outputTokens,
360
+ input.usage.reasoningTokens,
361
+ input.usage.cacheReadTokens,
362
+ input.usage.cacheWriteTokens,
363
+ ]);
364
+ }
365
+ function hasColumns(db, table, requiredColumns) {
366
+ const columns = tableColumns(db, table);
367
+ return requiredColumns.every((column) => columns.has(column));
368
+ }
369
+ function tableExists(db, table) {
370
+ try {
371
+ const row = db
372
+ .prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ? LIMIT 1")
373
+ .get(table);
374
+ return Boolean(row);
375
+ }
376
+ catch {
377
+ return false;
378
+ }
379
+ }
380
+ function tableColumns(db, table) {
381
+ if (!tableExists(db, table)) {
382
+ return new Set();
383
+ }
384
+ try {
385
+ const rows = db.prepare(`PRAGMA table_info("${table}")`).all();
386
+ return new Set(rows.flatMap((row) => stringValue(row.name) ?? []));
387
+ }
388
+ catch {
389
+ return new Set();
390
+ }
391
+ }
392
+ function parseJson(value) {
393
+ if (typeof value !== "string") {
394
+ return null;
395
+ }
396
+ try {
397
+ return JSON.parse(value);
398
+ }
399
+ catch {
400
+ return null;
401
+ }
402
+ }
403
+ function tokenValue(value) {
404
+ if (typeof value !== "number" || !Number.isFinite(value)) {
405
+ return undefined;
406
+ }
407
+ return Math.max(Math.round(value), 0);
408
+ }
409
+ function uniqueStrings(values) {
410
+ const seen = new Set();
411
+ const unique = [];
412
+ for (const value of values) {
413
+ if (!value || seen.has(value)) {
414
+ continue;
415
+ }
416
+ seen.add(value);
417
+ unique.push(value);
418
+ }
419
+ return unique;
420
+ }
421
+ function stringValue(value) {
422
+ return typeof value === "string" && value.trim() ? value : undefined;
423
+ }
424
+ function asRecord(value) {
425
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
426
+ return null;
427
+ }
428
+ return value;
429
+ }
430
+ //# sourceMappingURL=t3code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"t3code.js","sourceRoot":"","sources":["../../../src/adapters/t3code.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"zed.d.ts","sourceRoot":"","sources":["../../../src/adapters/zed.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAA2B,MAAM,SAAS,CAAC;AAmChE,wBAAgB,UAAU,IAAI,OAAO,CAapC"}
1
+ {"version":3,"file":"zed.d.ts","sourceRoot":"","sources":["../../../src/adapters/zed.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAA2B,MAAM,SAAS,CAAC;AAoChE,wBAAgB,UAAU,IAAI,OAAO,CAapC"}
@@ -2,6 +2,7 @@ import { readdir, readFile } from "node:fs/promises";
2
2
  import { existsSync } from "node:fs";
3
3
  import { homedir } from "node:os";
4
4
  import { join } from "node:path";
5
+ import { openReadonlySqliteDatabase } from "./sqlite";
5
6
  /**
6
7
  * Zed stores AI conversations in two places:
7
8
  *
@@ -15,8 +16,8 @@ import { join } from "node:path";
15
16
  * or ~/Library/Application Support/Zed/db (macOS)
16
17
  * We'd need to query this, but the schema isn't well documented.
17
18
  *
18
- * We support the text thread JSON files for now, and the SQLite agent
19
- * threads when better-sqlite3 is available.
19
+ * We support the text thread JSON files for now, and SQLite agent threads
20
+ * when a local SQLite reader is available.
20
21
  */
21
22
  function getZedPaths() {
22
23
  if (process.platform === "darwin") {
@@ -102,24 +103,11 @@ async function* parseAgentThreads(dbDir, _options) {
102
103
  if (dbFiles.length === 0) {
103
104
  return;
104
105
  }
105
- let Database;
106
- try {
107
- const mod = await import("better-sqlite3");
108
- Database = mod.default ?? mod;
109
- }
110
- catch {
111
- return; // better-sqlite3 not available
112
- }
113
106
  for (const dbFile of dbFiles) {
114
107
  const dbPath = join(dbDir, dbFile);
115
- let db;
116
- try {
117
- db = new Database(dbPath, {
118
- readonly: true,
119
- });
120
- }
121
- catch {
122
- continue; // Can't open this DB
108
+ const db = await openReadonlySqliteDatabase(dbPath);
109
+ if (!db) {
110
+ continue;
123
111
  }
124
112
  try {
125
113
  // Check if this DB has a threads/messages table
@@ -128,14 +116,12 @@ async function* parseAgentThreads(dbDir, _options) {
128
116
  // Look for message-like tables (Zed's schema may vary by version)
129
117
  const msgTable = tableNames.find((t) => t === "messages" || t === "thread_messages" || t.includes("message"));
130
118
  if (!msgTable) {
131
- db.close();
132
119
  continue;
133
120
  }
134
121
  const columns = db.prepare(`PRAGMA table_info("${msgTable}")`).all();
135
122
  const colNames = columns.map((c) => c.name);
136
123
  const hasRole = colNames.includes("role");
137
124
  if (!hasRole) {
138
- db.close();
139
125
  continue;
140
126
  }
141
127
  const contentCol = colNames.includes("content")
@@ -1 +1 @@
1
- {"version":3,"file":"zed.js","sourceRoot":"","sources":["../../../src/adapters/zed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zed.js","sourceRoot":"","sources":["../../../src/adapters/zed.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "devrage",
3
- "version": "0.5.5",
3
+ "version": "0.5.7",
4
4
  "description": "Count how many times you swear at your coding agents",
5
5
  "type": "module",
6
6
  "bin": {
7
- "devrage": "./dist/cli.js"
7
+ "devrage": "dist/cli.js"
8
8
  },
9
9
  "exports": {
10
10
  ".": {