@slkiser/opencode-quota 1.4.3 → 2.0.0

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.
Files changed (75) hide show
  1. package/README.md +68 -52
  2. package/dist/lib/api-key-resolver.d.ts.map +1 -1
  3. package/dist/lib/api-key-resolver.js +8 -4
  4. package/dist/lib/api-key-resolver.js.map +1 -1
  5. package/dist/lib/config.d.ts.map +1 -1
  6. package/dist/lib/config.js +3 -3
  7. package/dist/lib/config.js.map +1 -1
  8. package/dist/lib/entries.d.ts +21 -3
  9. package/dist/lib/entries.d.ts.map +1 -1
  10. package/dist/lib/entries.js +6 -1
  11. package/dist/lib/entries.js.map +1 -1
  12. package/dist/lib/firmware.d.ts +2 -17
  13. package/dist/lib/firmware.d.ts.map +1 -1
  14. package/dist/lib/firmware.js +12 -80
  15. package/dist/lib/firmware.js.map +1 -1
  16. package/dist/lib/format-utils.d.ts +1 -0
  17. package/dist/lib/format-utils.d.ts.map +1 -1
  18. package/dist/lib/format-utils.js +5 -0
  19. package/dist/lib/format-utils.js.map +1 -1
  20. package/dist/lib/format.d.ts.map +1 -1
  21. package/dist/lib/format.js +34 -2
  22. package/dist/lib/format.js.map +1 -1
  23. package/dist/lib/google-token-cache.d.ts.map +1 -1
  24. package/dist/lib/google-token-cache.js +4 -6
  25. package/dist/lib/google-token-cache.js.map +1 -1
  26. package/dist/lib/google.d.ts.map +1 -1
  27. package/dist/lib/google.js +6 -15
  28. package/dist/lib/google.js.map +1 -1
  29. package/dist/lib/modelsdev-pricing.d.ts +6 -0
  30. package/dist/lib/modelsdev-pricing.d.ts.map +1 -1
  31. package/dist/lib/modelsdev-pricing.js +35 -0
  32. package/dist/lib/modelsdev-pricing.js.map +1 -1
  33. package/dist/lib/opencode-auth.d.ts +1 -1
  34. package/dist/lib/opencode-auth.d.ts.map +1 -1
  35. package/dist/lib/opencode-auth.js +8 -17
  36. package/dist/lib/opencode-auth.js.map +1 -1
  37. package/dist/lib/opencode-runtime-paths.d.ts +23 -0
  38. package/dist/lib/opencode-runtime-paths.d.ts.map +1 -0
  39. package/dist/lib/opencode-runtime-paths.js +87 -0
  40. package/dist/lib/opencode-runtime-paths.js.map +1 -0
  41. package/dist/lib/opencode-sqlite.d.ts +7 -0
  42. package/dist/lib/opencode-sqlite.d.ts.map +1 -0
  43. package/dist/lib/opencode-sqlite.js +44 -0
  44. package/dist/lib/opencode-sqlite.js.map +1 -0
  45. package/dist/lib/opencode-storage.d.ts +15 -15
  46. package/dist/lib/opencode-storage.d.ts.map +1 -1
  47. package/dist/lib/opencode-storage.js +192 -132
  48. package/dist/lib/opencode-storage.js.map +1 -1
  49. package/dist/lib/path-pick.d.ts +2 -0
  50. package/dist/lib/path-pick.d.ts.map +1 -0
  51. package/dist/lib/path-pick.js +15 -0
  52. package/dist/lib/path-pick.js.map +1 -0
  53. package/dist/lib/quota-command-format.d.ts.map +1 -1
  54. package/dist/lib/quota-command-format.js +6 -1
  55. package/dist/lib/quota-command-format.js.map +1 -1
  56. package/dist/lib/quota-stats-format.d.ts.map +1 -1
  57. package/dist/lib/quota-stats-format.js +77 -22
  58. package/dist/lib/quota-stats-format.js.map +1 -1
  59. package/dist/lib/quota-stats.d.ts +14 -0
  60. package/dist/lib/quota-stats.d.ts.map +1 -1
  61. package/dist/lib/quota-stats.js +80 -1
  62. package/dist/lib/quota-stats.js.map +1 -1
  63. package/dist/lib/quota-status.d.ts.map +1 -1
  64. package/dist/lib/quota-status.js +159 -14
  65. package/dist/lib/quota-status.js.map +1 -1
  66. package/dist/lib/toast-format-grouped.d.ts.map +1 -1
  67. package/dist/lib/toast-format-grouped.js +31 -1
  68. package/dist/lib/toast-format-grouped.js.map +1 -1
  69. package/dist/plugin.d.ts.map +1 -1
  70. package/dist/plugin.js +0 -84
  71. package/dist/plugin.js.map +1 -1
  72. package/dist/providers/firmware.d.ts.map +1 -1
  73. package/dist/providers/firmware.js +10 -40
  74. package/dist/providers/firmware.js.map +1 -1
  75. package/package.json +4 -3
@@ -1,8 +1,10 @@
1
1
  /**
2
- * Error thrown when a session directory is not found.
2
+ * Error thrown when a session is not found.
3
3
  *
4
- * This is thrown by iterAssistantMessagesForSession when the session
5
- * directory doesn't exist. Callers should catch this to handle gracefully.
4
+ * With OpenCode >=1.2, sessions/messages live in SQLite (`opencode.db`).
5
+ * This is thrown by iterAssistantMessagesForSession when the database is
6
+ * missing/unreadable, the session id is invalid, or the session row does
7
+ * not exist.
6
8
  */
7
9
  export declare class SessionNotFoundError extends Error {
8
10
  readonly sessionID: string;
@@ -43,25 +45,23 @@ export interface OpenCodeSessionInfo {
43
45
  updated?: number;
44
46
  };
45
47
  }
48
+ export type OpenCodeDbStats = {
49
+ dbPath: string;
50
+ sessionCount: number;
51
+ messageCount: number;
52
+ assistantMessageCount: number;
53
+ };
54
+ export declare function getOpenCodeDataDirCandidates(): string[];
46
55
  export declare function getOpenCodeDataDir(): string;
47
- export declare function getOpenCodeStorageDir(): string;
48
- export declare function getOpenCodeMessageDir(): string;
49
- export declare function getOpenCodeSessionDir(): string;
50
- export declare function listSessionIDsFromMessageStorage(): Promise<string[]>;
56
+ export declare function getOpenCodeDbPathCandidates(): string[];
57
+ export declare function getOpenCodeDbPath(): string;
58
+ export declare function getOpenCodeDbStats(): Promise<OpenCodeDbStats>;
51
59
  export declare function iterAssistantMessages(params: {
52
60
  sinceMs?: number;
53
61
  untilMs?: number;
54
62
  }): Promise<OpenCodeMessage[]>;
55
63
  /**
56
64
  * Read assistant messages for a specific session only.
57
- *
58
- * This is more efficient than iterAssistantMessages when you only need
59
- * messages from a single session, as it only reads that session's directory.
60
- *
61
- * @param params.sessionID - Session ID (must start with "ses_")
62
- * @param params.sinceMs - Optional: only messages created after this timestamp
63
- * @param params.untilMs - Optional: only messages created before this timestamp
64
- * @throws SessionNotFoundError if the session directory doesn't exist
65
65
  */
66
66
  export declare function iterAssistantMessagesForSession(params: {
67
67
  sessionID: string;
@@ -1 +1 @@
1
- {"version":3,"file":"opencode-storage.d.ts","sourceRoot":"","sources":["../../src/lib/opencode-storage.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;aAE3B,SAAS,EAAE,MAAM;aACjB,WAAW,EAAE,MAAM;gBADnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM;CAKtC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,kBAAkB,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAM3C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAWD,wBAAsB,gCAAgC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAY1E;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CA+B7B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,+BAA+B,CAAC,MAAM,EAAE;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAwC7B;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAoCzF"}
1
+ {"version":3,"file":"opencode-storage.d.ts","sourceRoot":"","sources":["../../src/lib/opencode-storage.ts"],"names":[],"mappings":"AAOA;;;;;;;GAOG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;aAE3B,SAAS,EAAE,MAAM;aACjB,WAAW,EAAE,MAAM;gBADnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM;CAKtC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,kBAAkB,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,wBAAgB,4BAA4B,IAAI,MAAM,EAAE,CAIvD;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,2BAA2B,IAAI,MAAM,EAAE,CAEtD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAuHD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC,CAuCnE;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAoB7B;AAED;;GAEG;AACH,wBAAsB,+BAA+B,CAAC,MAAM,EAAE;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAgC7B;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CA4BzF"}
@@ -1,187 +1,247 @@
1
- import { readdir, readFile } from "fs/promises";
2
- import { homedir } from "os";
3
1
  import { join } from "path";
4
2
  import { existsSync } from "fs";
3
+ import { getOpencodeRuntimeDirCandidates } from "./opencode-runtime-paths.js";
4
+ import { pickFirstExistingPath } from "./path-pick.js";
5
+ import { openOpenCodeSqliteReadOnly } from "./opencode-sqlite.js";
5
6
  /**
6
- * Error thrown when a session directory is not found.
7
+ * Error thrown when a session is not found.
7
8
  *
8
- * This is thrown by iterAssistantMessagesForSession when the session
9
- * directory doesn't exist. Callers should catch this to handle gracefully.
9
+ * With OpenCode >=1.2, sessions/messages live in SQLite (`opencode.db`).
10
+ * This is thrown by iterAssistantMessagesForSession when the database is
11
+ * missing/unreadable, the session id is invalid, or the session row does
12
+ * not exist.
10
13
  */
11
14
  export class SessionNotFoundError extends Error {
12
15
  sessionID;
13
16
  checkedPath;
14
17
  constructor(sessionID, checkedPath) {
15
- super(`Session directory not found: ${sessionID}`);
18
+ super(`Session not found: ${sessionID}`);
16
19
  this.sessionID = sessionID;
17
20
  this.checkedPath = checkedPath;
18
21
  this.name = "SessionNotFoundError";
19
22
  }
20
23
  }
21
- export function getOpenCodeDataDir() {
22
- const home = homedir();
23
- if (process.platform === "win32") {
24
- return process.env.LOCALAPPDATA || join(home, "AppData", "Local");
25
- }
26
- return join(home, ".local", "share");
24
+ export function getOpenCodeDataDirCandidates() {
25
+ // OpenCode stores data under `${Global.Path.data}` which is `join(xdgData, "opencode")`.
26
+ // We return candidate opencode data dirs in priority order.
27
+ return getOpencodeRuntimeDirCandidates().dataDirs;
27
28
  }
28
- export function getOpenCodeStorageDir() {
29
- return join(getOpenCodeDataDir(), "opencode", "storage");
29
+ export function getOpenCodeDataDir() {
30
+ return pickFirstExistingPath(getOpenCodeDataDirCandidates());
30
31
  }
31
- export function getOpenCodeMessageDir() {
32
- return join(getOpenCodeStorageDir(), "message");
32
+ export function getOpenCodeDbPathCandidates() {
33
+ return getOpenCodeDataDirCandidates().map((d) => join(d, "opencode.db"));
33
34
  }
34
- export function getOpenCodeSessionDir() {
35
- return join(getOpenCodeStorageDir(), "session");
35
+ export function getOpenCodeDbPath() {
36
+ return pickFirstExistingPath(getOpenCodeDbPathCandidates());
36
37
  }
37
- async function safeReadJson(path) {
38
+ function safeJsonParse(raw) {
38
39
  try {
39
- const raw = await readFile(path, "utf-8");
40
40
  return JSON.parse(raw);
41
41
  }
42
42
  catch {
43
43
  return null;
44
44
  }
45
45
  }
46
- export async function listSessionIDsFromMessageStorage() {
47
- const base = getOpenCodeMessageDir();
48
- if (!existsSync(base))
49
- return [];
46
+ function normalizeNumber(n) {
47
+ return typeof n === "number" && Number.isFinite(n) ? n : undefined;
48
+ }
49
+ function normalizeString(s) {
50
+ return typeof s === "string" ? s : undefined;
51
+ }
52
+ function mapRowToOpenCodeMessage(row) {
53
+ if (!row || typeof row !== "object")
54
+ return null;
55
+ if (typeof row.id !== "string" || typeof row.session_id !== "string")
56
+ return null;
57
+ if (typeof row.time_created !== "number")
58
+ return null;
59
+ const payload = safeJsonParse(row.data);
60
+ if (!payload || typeof payload !== "object")
61
+ return null;
62
+ const role = normalizeString(payload.role) ?? "unknown";
63
+ return {
64
+ id: row.id,
65
+ sessionID: row.session_id,
66
+ role,
67
+ providerID: normalizeString(payload.providerID),
68
+ modelID: normalizeString(payload.modelID),
69
+ tokens: payload.tokens,
70
+ cost: normalizeNumber(payload.cost),
71
+ time: {
72
+ created: row.time_created,
73
+ completed: normalizeNumber(payload.time?.completed),
74
+ },
75
+ agent: normalizeString(payload.agent),
76
+ mode: normalizeString(payload.mode),
77
+ };
78
+ }
79
+ function openDbOrNull() {
80
+ const dbPath = getOpenCodeDbPath();
81
+ if (!dbPath)
82
+ return null;
83
+ if (!existsSync(dbPath))
84
+ return null;
85
+ return {
86
+ dbPath,
87
+ open: () => openOpenCodeSqliteReadOnly(dbPath),
88
+ };
89
+ }
90
+ function validateSessionIdOrThrow(sessionID) {
91
+ if (!sessionID.startsWith("ses_")) {
92
+ throw new SessionNotFoundError(sessionID, "(invalid session ID format)");
93
+ }
94
+ }
95
+ function buildMessageQuery(params) {
96
+ const where = [];
97
+ const args = [];
98
+ if (params.sessionID) {
99
+ where.push(`session_id = ?`);
100
+ args.push(params.sessionID);
101
+ }
102
+ if (typeof params.sinceMs === "number") {
103
+ where.push(`time_created >= ?`);
104
+ args.push(params.sinceMs);
105
+ }
106
+ if (typeof params.untilMs === "number") {
107
+ where.push(`time_created <= ?`);
108
+ args.push(params.untilMs);
109
+ }
110
+ const sql = `SELECT id, session_id, time_created, time_updated, data FROM "message"` +
111
+ (where.length ? ` WHERE ${where.join(" AND ")}` : "") +
112
+ ` ORDER BY time_created ASC, id ASC`;
113
+ return { sql, args };
114
+ }
115
+ async function hasJsonExtract(conn) {
50
116
  try {
51
- const entries = await readdir(base, { withFileTypes: true });
52
- return entries
53
- .filter((e) => e.isDirectory() && e.name.startsWith("ses_"))
54
- .map((e) => e.name)
55
- .sort();
117
+ const row = conn.get("SELECT json_extract('{\"role\":\"assistant\"}', '$.role') as r");
118
+ return row?.r === "assistant";
56
119
  }
57
120
  catch {
58
- return [];
121
+ return false;
59
122
  }
60
123
  }
61
- export async function iterAssistantMessages(params) {
62
- const base = getOpenCodeMessageDir();
63
- if (!existsSync(base))
64
- return [];
65
- const sessionIDs = await listSessionIDsFromMessageStorage();
66
- const out = [];
67
- for (const sessionID of sessionIDs) {
68
- const dir = join(base, sessionID);
69
- let files;
70
- try {
71
- files = (await readdir(dir)).filter((f) => f.endsWith(".json"));
124
+ export async function getOpenCodeDbStats() {
125
+ const db = openDbOrNull();
126
+ if (!db) {
127
+ return {
128
+ dbPath: getOpenCodeDbPath(),
129
+ sessionCount: 0,
130
+ messageCount: 0,
131
+ assistantMessageCount: 0,
132
+ };
133
+ }
134
+ const conn = await db.open();
135
+ try {
136
+ const sessionRow = conn.get(`SELECT count(*) as c FROM "session"`);
137
+ const messageRow = conn.get(`SELECT count(*) as c FROM "message"`);
138
+ let assistantCount = 0;
139
+ if (await hasJsonExtract(conn)) {
140
+ const a = conn.get(`SELECT count(*) as c FROM "message" WHERE json_extract(data, '$.role') = 'assistant'`);
141
+ assistantCount = typeof a?.c === "number" ? a.c : 0;
72
142
  }
73
- catch {
74
- continue;
143
+ else {
144
+ const rows = conn.all(`SELECT data FROM "message"`);
145
+ for (const r of rows) {
146
+ const payload = safeJsonParse(r.data);
147
+ if (payload && payload.role === "assistant")
148
+ assistantCount += 1;
149
+ }
75
150
  }
76
- for (const f of files) {
77
- const p = join(dir, f);
78
- const msg = (await safeReadJson(p));
151
+ return {
152
+ dbPath: db.dbPath,
153
+ sessionCount: typeof sessionRow?.c === "number" ? sessionRow.c : 0,
154
+ messageCount: typeof messageRow?.c === "number" ? messageRow.c : 0,
155
+ assistantMessageCount: assistantCount,
156
+ };
157
+ }
158
+ finally {
159
+ conn.close();
160
+ }
161
+ }
162
+ export async function iterAssistantMessages(params) {
163
+ const db = openDbOrNull();
164
+ if (!db)
165
+ return [];
166
+ const conn = await db.open();
167
+ try {
168
+ const q = buildMessageQuery({ sinceMs: params.sinceMs, untilMs: params.untilMs });
169
+ const rows = conn.all(q.sql, q.args);
170
+ const out = [];
171
+ for (const row of rows) {
172
+ const msg = mapRowToOpenCodeMessage(row);
79
173
  if (!msg)
80
174
  continue;
81
- if (msg.role !== "assistant")
82
- continue;
83
- const created = msg.time?.created;
84
- if (typeof created !== "number")
85
- continue;
86
- if (typeof params.sinceMs === "number" && created < params.sinceMs)
87
- continue;
88
- if (typeof params.untilMs === "number" && created > params.untilMs)
175
+ if (String(msg.role).toLowerCase() !== "assistant")
89
176
  continue;
90
177
  out.push(msg);
91
178
  }
179
+ return out;
180
+ }
181
+ finally {
182
+ conn.close();
92
183
  }
93
- out.sort((a, b) => (a.time?.created ?? 0) - (b.time?.created ?? 0));
94
- return out;
95
184
  }
96
185
  /**
97
186
  * Read assistant messages for a specific session only.
98
- *
99
- * This is more efficient than iterAssistantMessages when you only need
100
- * messages from a single session, as it only reads that session's directory.
101
- *
102
- * @param params.sessionID - Session ID (must start with "ses_")
103
- * @param params.sinceMs - Optional: only messages created after this timestamp
104
- * @param params.untilMs - Optional: only messages created before this timestamp
105
- * @throws SessionNotFoundError if the session directory doesn't exist
106
187
  */
107
188
  export async function iterAssistantMessagesForSession(params) {
108
189
  const { sessionID, sinceMs, untilMs } = params;
109
- // Validate session ID format
110
- if (!sessionID.startsWith("ses_")) {
111
- throw new SessionNotFoundError(sessionID, "(invalid session ID format)");
190
+ validateSessionIdOrThrow(sessionID);
191
+ const db = openDbOrNull();
192
+ if (!db) {
193
+ throw new SessionNotFoundError(sessionID, getOpenCodeDbPath());
112
194
  }
113
- const base = getOpenCodeMessageDir();
114
- const sessionDir = join(base, sessionID);
115
- // Check if session directory exists
116
- if (!existsSync(sessionDir)) {
117
- throw new SessionNotFoundError(sessionID, sessionDir);
118
- }
119
- // Read messages from this session only
120
- let files;
195
+ const conn = await db.open();
121
196
  try {
122
- files = (await readdir(sessionDir)).filter((f) => f.endsWith(".json"));
197
+ const exists = conn.get(`SELECT 1 as ok FROM "session" WHERE id = ? LIMIT 1`, [
198
+ sessionID,
199
+ ]);
200
+ if (!exists) {
201
+ throw new SessionNotFoundError(sessionID, db.dbPath);
202
+ }
203
+ const q = buildMessageQuery({ sessionID, sinceMs, untilMs });
204
+ const rows = conn.all(q.sql, q.args);
205
+ const out = [];
206
+ for (const row of rows) {
207
+ const msg = mapRowToOpenCodeMessage(row);
208
+ if (!msg)
209
+ continue;
210
+ if (String(msg.role).toLowerCase() !== "assistant")
211
+ continue;
212
+ out.push(msg);
213
+ }
214
+ return out;
215
+ }
216
+ finally {
217
+ conn.close();
123
218
  }
124
- catch {
125
- throw new SessionNotFoundError(sessionID, sessionDir);
126
- }
127
- const out = [];
128
- for (const f of files) {
129
- const p = join(sessionDir, f);
130
- const msg = (await safeReadJson(p));
131
- if (!msg)
132
- continue;
133
- if (msg.role !== "assistant")
134
- continue;
135
- const created = msg.time?.created;
136
- if (typeof created !== "number")
137
- continue;
138
- if (typeof sinceMs === "number" && created < sinceMs)
139
- continue;
140
- if (typeof untilMs === "number" && created > untilMs)
141
- continue;
142
- out.push(msg);
143
- }
144
- out.sort((a, b) => (a.time?.created ?? 0) - (b.time?.created ?? 0));
145
- return out;
146
219
  }
147
220
  export async function readAllSessionsIndex() {
148
- const base = getOpenCodeSessionDir();
221
+ const db = openDbOrNull();
149
222
  const idx = {};
150
- if (!existsSync(base))
223
+ if (!db)
151
224
  return idx;
152
- async function visit(dir) {
153
- let entries;
154
- try {
155
- entries = await readdir(dir, { withFileTypes: true });
156
- }
157
- catch {
158
- return;
159
- }
160
- for (const e of entries) {
161
- const p = join(dir, e.name);
162
- if (e.isDirectory()) {
163
- await visit(p);
164
- }
165
- else if (e.isFile() && e.name.startsWith("ses_") && e.name.endsWith(".json")) {
166
- const data = await safeReadJson(p);
167
- if (!data || typeof data !== "object")
168
- continue;
169
- const id = data.id;
170
- if (typeof id !== "string" || !id.startsWith("ses_"))
171
- continue;
172
- idx[id] = {
173
- id,
174
- title: typeof data.title === "string" ? data.title : undefined,
175
- parentID: typeof data.parentID === "string" ? data.parentID : undefined,
176
- time: {
177
- created: typeof data.time?.created === "number" ? data.time.created : undefined,
178
- updated: typeof data.time?.updated === "number" ? data.time.updated : undefined,
179
- },
180
- };
181
- }
225
+ const conn = await db.open();
226
+ try {
227
+ const rows = conn.all(`SELECT id, title, parent_id, time_created, time_updated FROM "session" ORDER BY time_created ASC, id ASC`);
228
+ for (const row of rows) {
229
+ if (!row || typeof row.id !== "string" || !row.id.startsWith("ses_"))
230
+ continue;
231
+ idx[row.id] = {
232
+ id: row.id,
233
+ title: typeof row.title === "string" && row.title.trim() ? row.title : undefined,
234
+ parentID: typeof row.parent_id === "string" ? row.parent_id : undefined,
235
+ time: {
236
+ created: typeof row.time_created === "number" ? row.time_created : undefined,
237
+ updated: typeof row.time_updated === "number" ? row.time_updated : undefined,
238
+ },
239
+ };
182
240
  }
241
+ return idx;
242
+ }
243
+ finally {
244
+ conn.close();
183
245
  }
184
- await visit(base);
185
- return idx;
186
246
  }
187
247
  //# sourceMappingURL=opencode-storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"opencode-storage.js","sourceRoot":"","sources":["../../src/lib/opencode-storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"opencode-storage.js","sourceRoot":"","sources":["../../src/lib/opencode-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function pickFirstExistingPath(candidates: string[]): string;
2
+ //# sourceMappingURL=path-pick.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-pick.d.ts","sourceRoot":"","sources":["../../src/lib/path-pick.ts"],"names":[],"mappings":"AAEA,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAWlE"}
@@ -0,0 +1,15 @@
1
+ import { existsSync } from "fs";
2
+ export function pickFirstExistingPath(candidates) {
3
+ for (const p of candidates) {
4
+ try {
5
+ if (existsSync(p))
6
+ return p;
7
+ }
8
+ catch {
9
+ // ignore
10
+ }
11
+ }
12
+ // Deterministic fallback for diagnostics.
13
+ return candidates[0] ?? "";
14
+ }
15
+ //# sourceMappingURL=path-pick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-pick.js","sourceRoot":"","sources":["../../src/lib/path-pick.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,MAAM,UAAU,qBAAqB,CAAC,UAAoB;IACxD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,IAAI,UAAU,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"quota-command-format.d.ts","sourceRoot":"","sources":["../../src/lib/quota-command-format.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AA4DjE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC,GAAG,MAAM,CAsDT"}
1
+ {"version":3,"file":"quota-command-format.d.ts","sourceRoot":"","sources":["../../src/lib/quota-command-format.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AA4DjE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC,GAAG,MAAM,CA4DT"}
@@ -6,6 +6,7 @@
6
6
  * - Uses one line per limit, grouped under provider headers
7
7
  * - Includes session token summary (input/output per model)
8
8
  */
9
+ import { isValueEntry } from "./entries.js";
9
10
  import { bar, clampInt, padRight } from "./format-utils.js";
10
11
  import { renderSessionTokensLines } from "./session-tokens-format.js";
11
12
  /**
@@ -94,8 +95,12 @@ export function formatQuotaCommand(params) {
94
95
  for (const row of list) {
95
96
  const label = (row.label ?? row.name).trim();
96
97
  const labelCol = padRight(label, leftCol);
97
- const pct = clampInt(row.percentRemaining, 0, 100);
98
98
  const suffix = formatResetsIn(row.resetTimeIso);
99
+ if (isValueEntry(row)) {
100
+ lines.push(` ${labelCol} ${row.value}${suffix}`);
101
+ continue;
102
+ }
103
+ const pct = clampInt(row.percentRemaining, 0, 100);
99
104
  lines.push(` ${labelCol} ${bar(pct, barWidth)} ${pct}% left${suffix}`);
100
105
  }
101
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"quota-command-format.js","sourceRoot":"","sources":["../../src/lib/quota-command-format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quota-command-format.js","sourceRoot":"","sources":["../../src/lib/quota-command-format.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"quota-stats-format.d.ts","sourceRoot":"","sources":["../../src/lib/quota-stats-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,kBAAkB,CAAC;AA+FtE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mGAAmG;IACnG,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,MAAM,CAoLT"}
1
+ {"version":3,"file":"quota-stats-format.d.ts","sourceRoot":"","sources":["../../src/lib/quota-stats-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,kBAAkB,CAAC;AA+FtE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mGAAmG;IACnG,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,MAAM,CAmPT"}