@slkiser/opencode-quota 1.4.4 → 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 (51) hide show
  1. package/README.md +22 -16
  2. package/dist/lib/entries.d.ts +21 -3
  3. package/dist/lib/entries.d.ts.map +1 -1
  4. package/dist/lib/entries.js +6 -1
  5. package/dist/lib/entries.js.map +1 -1
  6. package/dist/lib/firmware.d.ts +2 -17
  7. package/dist/lib/firmware.d.ts.map +1 -1
  8. package/dist/lib/firmware.js +12 -80
  9. package/dist/lib/firmware.js.map +1 -1
  10. package/dist/lib/format-utils.d.ts +1 -0
  11. package/dist/lib/format-utils.d.ts.map +1 -1
  12. package/dist/lib/format-utils.js +5 -0
  13. package/dist/lib/format-utils.js.map +1 -1
  14. package/dist/lib/format.d.ts.map +1 -1
  15. package/dist/lib/format.js +34 -2
  16. package/dist/lib/format.js.map +1 -1
  17. package/dist/lib/modelsdev-pricing.d.ts +6 -0
  18. package/dist/lib/modelsdev-pricing.d.ts.map +1 -1
  19. package/dist/lib/modelsdev-pricing.js +35 -0
  20. package/dist/lib/modelsdev-pricing.js.map +1 -1
  21. package/dist/lib/opencode-sqlite.d.ts +7 -0
  22. package/dist/lib/opencode-sqlite.d.ts.map +1 -0
  23. package/dist/lib/opencode-sqlite.js +44 -0
  24. package/dist/lib/opencode-sqlite.js.map +1 -0
  25. package/dist/lib/opencode-storage.d.ts +14 -18
  26. package/dist/lib/opencode-storage.d.ts.map +1 -1
  27. package/dist/lib/opencode-storage.js +183 -134
  28. package/dist/lib/opencode-storage.js.map +1 -1
  29. package/dist/lib/quota-command-format.d.ts.map +1 -1
  30. package/dist/lib/quota-command-format.js +6 -1
  31. package/dist/lib/quota-command-format.js.map +1 -1
  32. package/dist/lib/quota-stats-format.d.ts.map +1 -1
  33. package/dist/lib/quota-stats-format.js +77 -22
  34. package/dist/lib/quota-stats-format.js.map +1 -1
  35. package/dist/lib/quota-stats.d.ts +14 -0
  36. package/dist/lib/quota-stats.d.ts.map +1 -1
  37. package/dist/lib/quota-stats.js +80 -1
  38. package/dist/lib/quota-stats.js.map +1 -1
  39. package/dist/lib/quota-status.d.ts.map +1 -1
  40. package/dist/lib/quota-status.js +151 -28
  41. package/dist/lib/quota-status.js.map +1 -1
  42. package/dist/lib/toast-format-grouped.d.ts.map +1 -1
  43. package/dist/lib/toast-format-grouped.js +31 -1
  44. package/dist/lib/toast-format-grouped.js.map +1 -1
  45. package/dist/plugin.d.ts.map +1 -1
  46. package/dist/plugin.js +0 -84
  47. package/dist/plugin.js.map +1 -1
  48. package/dist/providers/firmware.d.ts.map +1 -1
  49. package/dist/providers/firmware.js +10 -40
  50. package/dist/providers/firmware.js.map +1 -1
  51. package/package.json +1 -1
@@ -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,29 +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
+ };
46
54
  export declare function getOpenCodeDataDirCandidates(): string[];
47
55
  export declare function getOpenCodeDataDir(): string;
48
- export declare function getOpenCodeStorageDirCandidates(): string[];
49
- export declare function getOpenCodeStorageDir(): string;
50
- export declare function getOpenCodeMessageDirCandidates(): string[];
51
- export declare function getOpenCodeMessageDir(): string;
52
- export declare function getOpenCodeSessionDirCandidates(): string[];
53
- export declare function getOpenCodeSessionDir(): string;
54
- 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>;
55
59
  export declare function iterAssistantMessages(params: {
56
60
  sinceMs?: number;
57
61
  untilMs?: number;
58
62
  }): Promise<OpenCodeMessage[]>;
59
63
  /**
60
64
  * Read assistant messages for a specific session only.
61
- *
62
- * This is more efficient than iterAssistantMessages when you only need
63
- * messages from a single session, as it only reads that session's directory.
64
- *
65
- * @param params.sessionID - Session ID (must start with "ses_")
66
- * @param params.sinceMs - Optional: only messages created after this timestamp
67
- * @param params.untilMs - Optional: only messages created before this timestamp
68
- * @throws SessionNotFoundError if the session directory doesn't exist
69
65
  */
70
66
  export declare function iterAssistantMessagesForSession(params: {
71
67
  sessionID: string;
@@ -1 +1 @@
1
- {"version":3,"file":"opencode-storage.d.ts","sourceRoot":"","sources":["../../src/lib/opencode-storage.ts"],"names":[],"mappings":"AAOA;;;;;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,4BAA4B,IAAI,MAAM,EAAE,CAIvD;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,+BAA+B,IAAI,MAAM,EAAE,CAE1D;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,+BAA+B,IAAI,MAAM,EAAE,CAE1D;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,+BAA+B,IAAI,MAAM,EAAE,CAE1D;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,19 +1,21 @@
1
- import { readdir, readFile } from "fs/promises";
2
1
  import { join } from "path";
3
2
  import { existsSync } from "fs";
4
3
  import { getOpencodeRuntimeDirCandidates } from "./opencode-runtime-paths.js";
5
4
  import { pickFirstExistingPath } from "./path-pick.js";
5
+ import { openOpenCodeSqliteReadOnly } from "./opencode-sqlite.js";
6
6
  /**
7
- * Error thrown when a session directory is not found.
7
+ * Error thrown when a session is not found.
8
8
  *
9
- * This is thrown by iterAssistantMessagesForSession when the session
10
- * 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.
11
13
  */
12
14
  export class SessionNotFoundError extends Error {
13
15
  sessionID;
14
16
  checkedPath;
15
17
  constructor(sessionID, checkedPath) {
16
- super(`Session directory not found: ${sessionID}`);
18
+ super(`Session not found: ${sessionID}`);
17
19
  this.sessionID = sessionID;
18
20
  this.checkedPath = checkedPath;
19
21
  this.name = "SessionNotFoundError";
@@ -27,172 +29,219 @@ export function getOpenCodeDataDirCandidates() {
27
29
  export function getOpenCodeDataDir() {
28
30
  return pickFirstExistingPath(getOpenCodeDataDirCandidates());
29
31
  }
30
- export function getOpenCodeStorageDirCandidates() {
31
- return getOpenCodeDataDirCandidates().map((d) => join(d, "storage"));
32
+ export function getOpenCodeDbPathCandidates() {
33
+ return getOpenCodeDataDirCandidates().map((d) => join(d, "opencode.db"));
32
34
  }
33
- export function getOpenCodeStorageDir() {
34
- return pickFirstExistingPath(getOpenCodeStorageDirCandidates());
35
+ export function getOpenCodeDbPath() {
36
+ return pickFirstExistingPath(getOpenCodeDbPathCandidates());
35
37
  }
36
- export function getOpenCodeMessageDirCandidates() {
37
- return getOpenCodeStorageDirCandidates().map((d) => join(d, "message"));
38
+ function safeJsonParse(raw) {
39
+ try {
40
+ return JSON.parse(raw);
41
+ }
42
+ catch {
43
+ return null;
44
+ }
38
45
  }
39
- export function getOpenCodeMessageDir() {
40
- return pickFirstExistingPath(getOpenCodeMessageDirCandidates());
46
+ function normalizeNumber(n) {
47
+ return typeof n === "number" && Number.isFinite(n) ? n : undefined;
41
48
  }
42
- export function getOpenCodeSessionDirCandidates() {
43
- return getOpenCodeStorageDirCandidates().map((d) => join(d, "session"));
49
+ function normalizeString(s) {
50
+ return typeof s === "string" ? s : undefined;
44
51
  }
45
- export function getOpenCodeSessionDir() {
46
- return pickFirstExistingPath(getOpenCodeSessionDirCandidates());
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
+ };
47
78
  }
48
- async function safeReadJson(path) {
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) {
49
116
  try {
50
- const raw = await readFile(path, "utf-8");
51
- return JSON.parse(raw);
117
+ const row = conn.get("SELECT json_extract('{\"role\":\"assistant\"}', '$.role') as r");
118
+ return row?.r === "assistant";
52
119
  }
53
120
  catch {
54
- return null;
121
+ return false;
55
122
  }
56
123
  }
57
- export async function listSessionIDsFromMessageStorage() {
58
- const base = getOpenCodeMessageDir();
59
- if (!existsSync(base))
60
- return [];
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();
61
135
  try {
62
- const entries = await readdir(base, { withFileTypes: true });
63
- return entries
64
- .filter((e) => e.isDirectory() && e.name.startsWith("ses_"))
65
- .map((e) => e.name)
66
- .sort();
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;
142
+ }
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
+ }
150
+ }
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
+ };
67
157
  }
68
- catch {
69
- return [];
158
+ finally {
159
+ conn.close();
70
160
  }
71
161
  }
72
162
  export async function iterAssistantMessages(params) {
73
- const base = getOpenCodeMessageDir();
74
- if (!existsSync(base))
163
+ const db = openDbOrNull();
164
+ if (!db)
75
165
  return [];
76
- const sessionIDs = await listSessionIDsFromMessageStorage();
77
- const out = [];
78
- for (const sessionID of sessionIDs) {
79
- const dir = join(base, sessionID);
80
- let files;
81
- try {
82
- files = (await readdir(dir)).filter((f) => f.endsWith(".json"));
83
- }
84
- catch {
85
- continue;
86
- }
87
- for (const f of files) {
88
- const p = join(dir, f);
89
- const msg = (await safeReadJson(p));
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);
90
173
  if (!msg)
91
174
  continue;
92
- if (msg.role !== "assistant")
93
- continue;
94
- const created = msg.time?.created;
95
- if (typeof created !== "number")
96
- continue;
97
- if (typeof params.sinceMs === "number" && created < params.sinceMs)
98
- continue;
99
- if (typeof params.untilMs === "number" && created > params.untilMs)
175
+ if (String(msg.role).toLowerCase() !== "assistant")
100
176
  continue;
101
177
  out.push(msg);
102
178
  }
179
+ return out;
180
+ }
181
+ finally {
182
+ conn.close();
103
183
  }
104
- out.sort((a, b) => (a.time?.created ?? 0) - (b.time?.created ?? 0));
105
- return out;
106
184
  }
107
185
  /**
108
186
  * Read assistant messages for a specific session only.
109
- *
110
- * This is more efficient than iterAssistantMessages when you only need
111
- * messages from a single session, as it only reads that session's directory.
112
- *
113
- * @param params.sessionID - Session ID (must start with "ses_")
114
- * @param params.sinceMs - Optional: only messages created after this timestamp
115
- * @param params.untilMs - Optional: only messages created before this timestamp
116
- * @throws SessionNotFoundError if the session directory doesn't exist
117
187
  */
118
188
  export async function iterAssistantMessagesForSession(params) {
119
189
  const { sessionID, sinceMs, untilMs } = params;
120
- // Validate session ID format
121
- if (!sessionID.startsWith("ses_")) {
122
- throw new SessionNotFoundError(sessionID, "(invalid session ID format)");
190
+ validateSessionIdOrThrow(sessionID);
191
+ const db = openDbOrNull();
192
+ if (!db) {
193
+ throw new SessionNotFoundError(sessionID, getOpenCodeDbPath());
123
194
  }
124
- const base = getOpenCodeMessageDir();
125
- const sessionDir = join(base, sessionID);
126
- // Check if session directory exists
127
- if (!existsSync(sessionDir)) {
128
- throw new SessionNotFoundError(sessionID, sessionDir);
129
- }
130
- // Read messages from this session only
131
- let files;
195
+ const conn = await db.open();
132
196
  try {
133
- 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();
134
218
  }
135
- catch {
136
- throw new SessionNotFoundError(sessionID, sessionDir);
137
- }
138
- const out = [];
139
- for (const f of files) {
140
- const p = join(sessionDir, f);
141
- const msg = (await safeReadJson(p));
142
- if (!msg)
143
- continue;
144
- if (msg.role !== "assistant")
145
- continue;
146
- const created = msg.time?.created;
147
- if (typeof created !== "number")
148
- continue;
149
- if (typeof sinceMs === "number" && created < sinceMs)
150
- continue;
151
- if (typeof untilMs === "number" && created > untilMs)
152
- continue;
153
- out.push(msg);
154
- }
155
- out.sort((a, b) => (a.time?.created ?? 0) - (b.time?.created ?? 0));
156
- return out;
157
219
  }
158
220
  export async function readAllSessionsIndex() {
159
- const base = getOpenCodeSessionDir();
221
+ const db = openDbOrNull();
160
222
  const idx = {};
161
- if (!existsSync(base))
223
+ if (!db)
162
224
  return idx;
163
- async function visit(dir) {
164
- let entries;
165
- try {
166
- entries = await readdir(dir, { withFileTypes: true });
167
- }
168
- catch {
169
- return;
170
- }
171
- for (const e of entries) {
172
- const p = join(dir, e.name);
173
- if (e.isDirectory()) {
174
- await visit(p);
175
- }
176
- else if (e.isFile() && e.name.startsWith("ses_") && e.name.endsWith(".json")) {
177
- const data = await safeReadJson(p);
178
- if (!data || typeof data !== "object")
179
- continue;
180
- const id = data.id;
181
- if (typeof id !== "string" || !id.startsWith("ses_"))
182
- continue;
183
- idx[id] = {
184
- id,
185
- title: typeof data.title === "string" ? data.title : undefined,
186
- parentID: typeof data.parentID === "string" ? data.parentID : undefined,
187
- time: {
188
- created: typeof data.time?.created === "number" ? data.time.created : undefined,
189
- updated: typeof data.time?.updated === "number" ? data.time.updated : undefined,
190
- },
191
- };
192
- }
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
+ };
193
240
  }
241
+ return idx;
242
+ }
243
+ finally {
244
+ conn.close();
194
245
  }
195
- await visit(base);
196
- return idx;
197
246
  }
198
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":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAElE;;;;;;;GAOG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAE3B;IACA;IAFlB,YACkB,SAAiB,EACjB,WAAmB;QAEnC,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;QAHzB,cAAS,GAAT,SAAS,CAAQ;QACjB,gBAAW,GAAX,WAAW,CAAQ;QAGnC,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AA+CD,MAAM,UAAU,4BAA4B;IAC1C,yFAAyF;IACzF,4DAA4D;IAC5D,OAAO,+BAA+B,EAAE,CAAC,QAAQ,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,qBAAqB,CAAC,4BAA4B,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,OAAO,4BAA4B,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,qBAAqB,CAAC,2BAA2B,EAAE,CAAC,CAAC;AAC9D,CAAC;AAkBD,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAQ,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,CAAU;IACjC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACrE,CAAC;AAED,SAAS,eAAe,CAAC,CAAU;IACjC,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAe;IAC9C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAClF,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEtD,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEzD,MAAM,IAAI,GAAG,eAAe,CAAE,OAAe,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;IAEjE,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,IAAI;QACJ,UAAU,EAAE,eAAe,CAAE,OAAe,CAAC,UAAU,CAAC;QACxD,OAAO,EAAE,eAAe,CAAE,OAAe,CAAC,OAAO,CAAC;QAClD,MAAM,EAAG,OAAe,CAAC,MAAM;QAC/B,IAAI,EAAE,eAAe,CAAE,OAAe,CAAC,IAAI,CAAC;QAC5C,IAAI,EAAE;YACJ,OAAO,EAAE,GAAG,CAAC,YAAY;YACzB,SAAS,EAAE,eAAe,CAAE,OAAe,CAAC,IAAI,EAAE,SAAS,CAAC;SAC7D;QACD,KAAK,EAAE,eAAe,CAAE,OAAe,CAAC,KAAK,CAAC;QAC9C,IAAI,EAAE,eAAe,CAAE,OAAe,CAAC,IAAI,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IACnC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO;QACL,MAAM;QACN,IAAI,EAAE,GAAG,EAAE,CAAC,0BAA0B,CAAC,MAAM,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,SAAiB;IACjD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,oBAAoB,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,MAI1B;IACC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAc,EAAE,CAAC;IAE3B,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,GAAG,GACP,wEAAwE;QACxE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,oCAAoC,CAAC;IAEvC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAqE;IACjG,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAClB,gEAAgE,CACjE,CAAC;QACF,OAAO,GAAG,EAAE,CAAC,KAAK,WAAW,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO;YACL,MAAM,EAAE,iBAAiB,EAAE;YAC3B,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,qBAAqB,EAAE,CAAC;SACzB,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAgB,qCAAqC,CAAC,CAAC;QAClF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAgB,qCAAqC,CAAC,CAAC;QAElF,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,MAAM,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAChB,sFAAsF,CACvF,CAAC;YACF,cAAc,GAAG,OAAO,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAmB,4BAA4B,CAAC,CAAC;YACtE,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,OAAO,IAAK,OAAe,CAAC,IAAI,KAAK,WAAW;oBAAE,cAAc,IAAI,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAED,OAAO;YACL,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,YAAY,EAAE,OAAO,UAAU,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,YAAY,EAAE,OAAO,UAAU,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,qBAAqB,EAAE,cAAc;SACtC,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAG3C;IACC,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IAEnB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,iBAAiB,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAClF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAa,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAEjD,MAAM,GAAG,GAAsB,EAAE,CAAC;QAClC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,WAAW;gBAAE,SAAS;YAC7D,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,MAIrD;IACC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAC/C,wBAAwB,CAAC,SAAS,CAAC,CAAC;IAEpC,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,MAAM,IAAI,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAiB,oDAAoD,EAAE;YAC5F,SAAS;SACV,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,oBAAoB,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,CAAC,GAAG,iBAAiB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAa,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAEjD,MAAM,GAAG,GAAsB,EAAE,CAAC;QAClC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,WAAW;gBAAE,SAAS;YAC7D,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAwC,EAAE,CAAC;IACpD,IAAI,CAAC,EAAE;QAAE,OAAO,GAAG,CAAC;IAEpB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACnB,0GAA0G,CAC3G,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,SAAS;YAC/E,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG;gBACZ,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;gBAChF,QAAQ,EAAE,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;gBACvE,IAAI,EAAE;oBACJ,OAAO,EAAE,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;oBAC5E,OAAO,EAAE,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;iBAC7E;aACF,CAAC;QACJ,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;AACH,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"}