@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.
- package/README.md +22 -16
- package/dist/lib/entries.d.ts +21 -3
- package/dist/lib/entries.d.ts.map +1 -1
- package/dist/lib/entries.js +6 -1
- package/dist/lib/entries.js.map +1 -1
- package/dist/lib/firmware.d.ts +2 -17
- package/dist/lib/firmware.d.ts.map +1 -1
- package/dist/lib/firmware.js +12 -80
- package/dist/lib/firmware.js.map +1 -1
- package/dist/lib/format-utils.d.ts +1 -0
- package/dist/lib/format-utils.d.ts.map +1 -1
- package/dist/lib/format-utils.js +5 -0
- package/dist/lib/format-utils.js.map +1 -1
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +34 -2
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/modelsdev-pricing.d.ts +6 -0
- package/dist/lib/modelsdev-pricing.d.ts.map +1 -1
- package/dist/lib/modelsdev-pricing.js +35 -0
- package/dist/lib/modelsdev-pricing.js.map +1 -1
- package/dist/lib/opencode-sqlite.d.ts +7 -0
- package/dist/lib/opencode-sqlite.d.ts.map +1 -0
- package/dist/lib/opencode-sqlite.js +44 -0
- package/dist/lib/opencode-sqlite.js.map +1 -0
- package/dist/lib/opencode-storage.d.ts +14 -18
- package/dist/lib/opencode-storage.d.ts.map +1 -1
- package/dist/lib/opencode-storage.js +183 -134
- package/dist/lib/opencode-storage.js.map +1 -1
- package/dist/lib/quota-command-format.d.ts.map +1 -1
- package/dist/lib/quota-command-format.js +6 -1
- package/dist/lib/quota-command-format.js.map +1 -1
- package/dist/lib/quota-stats-format.d.ts.map +1 -1
- package/dist/lib/quota-stats-format.js +77 -22
- package/dist/lib/quota-stats-format.js.map +1 -1
- package/dist/lib/quota-stats.d.ts +14 -0
- package/dist/lib/quota-stats.d.ts.map +1 -1
- package/dist/lib/quota-stats.js +80 -1
- package/dist/lib/quota-stats.js.map +1 -1
- package/dist/lib/quota-status.d.ts.map +1 -1
- package/dist/lib/quota-status.js +151 -28
- package/dist/lib/quota-status.js.map +1 -1
- package/dist/lib/toast-format-grouped.d.ts.map +1 -1
- package/dist/lib/toast-format-grouped.js +31 -1
- package/dist/lib/toast-format-grouped.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +0 -84
- package/dist/plugin.js.map +1 -1
- package/dist/providers/firmware.d.ts.map +1 -1
- package/dist/providers/firmware.js +10 -40
- package/dist/providers/firmware.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Error thrown when a session
|
|
2
|
+
* Error thrown when a session is not found.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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
|
|
49
|
-
export declare function
|
|
50
|
-
export declare function
|
|
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
|
|
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
|
|
7
|
+
* Error thrown when a session is not found.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
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
|
|
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
|
|
31
|
-
return getOpenCodeDataDirCandidates().map((d) => join(d, "
|
|
32
|
+
export function getOpenCodeDbPathCandidates() {
|
|
33
|
+
return getOpenCodeDataDirCandidates().map((d) => join(d, "opencode.db"));
|
|
32
34
|
}
|
|
33
|
-
export function
|
|
34
|
-
return pickFirstExistingPath(
|
|
35
|
+
export function getOpenCodeDbPath() {
|
|
36
|
+
return pickFirstExistingPath(getOpenCodeDbPathCandidates());
|
|
35
37
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
+
function safeJsonParse(raw) {
|
|
39
|
+
try {
|
|
40
|
+
return JSON.parse(raw);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
38
45
|
}
|
|
39
|
-
|
|
40
|
-
return
|
|
46
|
+
function normalizeNumber(n) {
|
|
47
|
+
return typeof n === "number" && Number.isFinite(n) ? n : undefined;
|
|
41
48
|
}
|
|
42
|
-
|
|
43
|
-
return
|
|
49
|
+
function normalizeString(s) {
|
|
50
|
+
return typeof s === "string" ? s : undefined;
|
|
44
51
|
}
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
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
|
|
51
|
-
return
|
|
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
|
|
121
|
+
return false;
|
|
55
122
|
}
|
|
56
123
|
}
|
|
57
|
-
export async function
|
|
58
|
-
const
|
|
59
|
-
if (!
|
|
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
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
.
|
|
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
|
-
|
|
69
|
-
|
|
158
|
+
finally {
|
|
159
|
+
conn.close();
|
|
70
160
|
}
|
|
71
161
|
}
|
|
72
162
|
export async function iterAssistantMessages(params) {
|
|
73
|
-
const
|
|
74
|
-
if (!
|
|
163
|
+
const db = openDbOrNull();
|
|
164
|
+
if (!db)
|
|
75
165
|
return [];
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
121
|
-
|
|
122
|
-
|
|
190
|
+
validateSessionIdOrThrow(sessionID);
|
|
191
|
+
const db = openDbOrNull();
|
|
192
|
+
if (!db) {
|
|
193
|
+
throw new SessionNotFoundError(sessionID, getOpenCodeDbPath());
|
|
123
194
|
}
|
|
124
|
-
const
|
|
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
|
-
|
|
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
|
|
221
|
+
const db = openDbOrNull();
|
|
160
222
|
const idx = {};
|
|
161
|
-
if (!
|
|
223
|
+
if (!db)
|
|
162
224
|
return idx;
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
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":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"opencode-storage.js","sourceRoot":"","sources":["../../src/lib/opencode-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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,
|
|
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"}
|