openlimiter 0.1.0 → 0.4.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/dist/cli.d.ts +11 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +237 -42
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +112 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +253 -8
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/ingest.d.ts +24 -1
- package/dist/ingest.d.ts.map +1 -1
- package/dist/ingest.js +34 -0
- package/dist/ingest.js.map +1 -1
- package/dist/render.d.ts +138 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +357 -0
- package/dist/render.js.map +1 -0
- package/dist/serve.d.ts +36 -3
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +220 -128
- package/dist/serve.js.map +1 -1
- package/dist/statusline.d.ts +91 -0
- package/dist/statusline.d.ts.map +1 -0
- package/dist/statusline.js +328 -0
- package/dist/statusline.js.map +1 -0
- package/package.json +4 -4
package/dist/cli.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ProviderFailure, type Snapshot } from "@openlimiter/core";
|
|
1
2
|
import { type CredentialStore } from "./credentials.js";
|
|
2
3
|
import { type QuotaServerHandle } from "./serve.js";
|
|
3
4
|
export interface CliDependencies {
|
|
@@ -18,9 +19,11 @@ export interface CliDependencies {
|
|
|
18
19
|
/**
|
|
19
20
|
* Whether output may carry terminal colour.
|
|
20
21
|
*
|
|
21
|
-
* The QR symbol the serve command prints has to
|
|
22
|
-
* white, because a dark themed terminal would
|
|
23
|
-
* camera would read it.
|
|
22
|
+
* Two surfaces depend on it. The QR symbol the serve command prints has to
|
|
23
|
+
* state its own black and white, because a dark themed terminal would
|
|
24
|
+
* otherwise invert it and no camera would read it. The meter bars and the
|
|
25
|
+
* failure lines use it to choose between escape codes and plain ASCII, so a
|
|
26
|
+
* capture redirected into a file carries no control characters at all.
|
|
24
27
|
*/
|
|
25
28
|
colorOutput: boolean;
|
|
26
29
|
/**
|
|
@@ -41,5 +44,10 @@ export declare const EXIT_OK = 0;
|
|
|
41
44
|
export declare const EXIT_FAILURE = 1;
|
|
42
45
|
export declare const EXIT_USAGE = 2;
|
|
43
46
|
export declare const EXIT_NO_DATA = 3;
|
|
47
|
+
export interface RefreshResult {
|
|
48
|
+
snapshots: Snapshot[];
|
|
49
|
+
/** Only genuine failures. A connector offered nothing is not one. */
|
|
50
|
+
failures: readonly ProviderFailure[];
|
|
51
|
+
}
|
|
44
52
|
export declare function runCli(argumentsList: readonly string[], overrides?: Partial<CliDependencies>): Promise<CliResult>;
|
|
45
53
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAcL,KAAK,eAAe,EAEpB,KAAK,QAAQ,EACd,MAAM,mBAAmB,CAAC;AA4C3B,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AAYpB,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,eAAe,CAAC;IACjC,eAAe,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5C;;;;;;OAMG;IACH,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAChD;;;;;;;;OAQG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qEAAqE;AACrE,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,eAAO,MAAM,YAAY,IAAI,CAAC;AA6C9B,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,qEAAqE;IACrE,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;CACtC;AA8iBD,wBAAsB,MAAM,CAC1B,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,SAAS,GAAE,OAAO,CAAC,eAAe,CAAM,GACvC,OAAO,CAAC,SAAS,CAAC,CAiDpB"}
|
package/dist/cli.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { PROVIDER_CODES, buildAdvice, canonicalJson,
|
|
1
|
+
import { PROVIDER_CODES, buildAdvice, canonicalJson, dedupeFailures, failureFromConnectorReason, freshness, mergeSnapshots, normalizeMeters, normalizeMetersReport, readSnapshotCache } from "@openlimiter/core";
|
|
2
2
|
import { antigravityFixture, claudeFixture, codexFixture, connectors, manualFixture, opencodeFixture, openrouterFixture, parseAntigravityPayload, parseClaudePayload, parseCodexPayload, parseManualPayload, parseOpencodePayload, parseOpenrouterPayload } from "@openlimiter/connectors";
|
|
3
3
|
import { agentContextFromCache, renderClaudeStatusline } from "@openlimiter/adapters";
|
|
4
|
-
import { initialize } from "./config.js";
|
|
5
|
-
import { environmentWithLocalMarkers, parseJsonText, persistSnapshots, readManualDocument } from "./ingest.js";
|
|
4
|
+
import { STATUSLINE_KEYS, defaultConfig, initialize, isStatuslineKey, readConfig, readStatuslineConfig, setStatuslineValue, statuslineValueText, writeConfig } from "./config.js";
|
|
5
|
+
import { INGEST_PROVENANCE, MANUAL_PROVENANCE, STATUSLINE_PROVENANCE, environmentWithLocalMarkers, STDIN_BYTE_LIMIT, parseJsonText, persistSnapshots, readManualDocument, withProvenance } from "./ingest.js";
|
|
6
6
|
import { UnavailableCredentialStore } from "./credentials.js";
|
|
7
7
|
import { DEFAULT_SERVE_PORT, serveBanner, startQuotaServer } from "./serve.js";
|
|
8
|
+
import { failureLine, failureLines, renderTable, supportsColor } from "./render.js";
|
|
9
|
+
import { renderStatuslineLayout, statuslineColor } from "./statusline.js";
|
|
8
10
|
/** Exit codes. Enumerated so a script can tell these cases apart. */
|
|
9
11
|
export const EXIT_OK = 0;
|
|
10
12
|
export const EXIT_FAILURE = 1;
|
|
@@ -18,7 +20,7 @@ function defaults() {
|
|
|
18
20
|
now: () => new Date().toISOString(),
|
|
19
21
|
payloads: {},
|
|
20
22
|
readStandardInput: async () => null,
|
|
21
|
-
colorOutput: process.stdout.isTTY === true
|
|
23
|
+
colorOutput: supportsColor(process.env, process.stdout.isTTY === true)
|
|
22
24
|
};
|
|
23
25
|
}
|
|
24
26
|
function succeed(stdout) {
|
|
@@ -27,20 +29,11 @@ function succeed(stdout) {
|
|
|
27
29
|
function fail(exitCode, message, stdout = "") {
|
|
28
30
|
return { exitCode, stdout, stderr: message };
|
|
29
31
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
lines.push([
|
|
36
|
-
snapshot.provider,
|
|
37
|
-
snapshot.meter,
|
|
38
|
-
floorFixed(snapshot.value, 2) + snapshot.unit,
|
|
39
|
-
freshness(snapshot.observedAt, snapshot.expiresAt, now),
|
|
40
|
-
snapshot.resetAt ?? "NONE"
|
|
41
|
-
].join(" "));
|
|
42
|
-
}
|
|
43
|
-
return lines.join("\n");
|
|
32
|
+
/** Fold red failure lines onto the end of a block of output. */
|
|
33
|
+
function withFailures(body, failures, color) {
|
|
34
|
+
if (failures.length === 0)
|
|
35
|
+
return body;
|
|
36
|
+
return [body, ...failureLines(dedupeFailures(failures), color)].join("\n");
|
|
44
37
|
}
|
|
45
38
|
async function cachedSnapshots(directory) {
|
|
46
39
|
const cached = await readSnapshotCache(directory);
|
|
@@ -56,26 +49,55 @@ function flagValue(argumentsList, flag) {
|
|
|
56
49
|
* Payloads stay caller supplied. The one local source this command reads on its
|
|
57
50
|
* own is the manual document in the state directory, which is the documented
|
|
58
51
|
* way to feed a provider that has no interface at all.
|
|
52
|
+
*
|
|
53
|
+
* A connector that was handed nothing is not a failure and is never reported as
|
|
54
|
+
* one: nothing was offered, so nothing could fail. A connector that was handed
|
|
55
|
+
* something and refused it is a failure, and so is a meter that a connector
|
|
56
|
+
* recognised and the normalizer then threw out. Those two are the only things
|
|
57
|
+
* the human surfaces ever claim went wrong, because they are the only two this
|
|
58
|
+
* code can actually tell apart.
|
|
59
59
|
*/
|
|
60
60
|
async function refresh(dependencies, now) {
|
|
61
61
|
const supplied = dependencies.payloads["manual"];
|
|
62
62
|
const manual = supplied === undefined
|
|
63
63
|
? await readManualDocument(dependencies.stateDirectory)
|
|
64
64
|
: supplied;
|
|
65
|
+
/*
|
|
66
|
+
* The manual connector is the only one this command reads from disk on its
|
|
67
|
+
* own, so it is the only one whose provenance is the document. Everything
|
|
68
|
+
* else here was handed in by a caller, which is an import by any other name.
|
|
69
|
+
*/
|
|
70
|
+
const manualFromDisk = supplied === undefined;
|
|
65
71
|
const environment = await environmentWithLocalMarkers(dependencies.environment, dependencies.stateDirectory);
|
|
66
72
|
const raw = [];
|
|
73
|
+
const failures = [];
|
|
67
74
|
for (const connector of connectors) {
|
|
68
75
|
const payload = connector.id === "manual"
|
|
69
76
|
? manual
|
|
70
77
|
: dependencies.payloads[connector.id];
|
|
71
78
|
const result = await connector.read({ payload, now, environment });
|
|
72
|
-
if (result.ok)
|
|
73
|
-
|
|
79
|
+
if (result.ok) {
|
|
80
|
+
const provenance = connector.id === "manual" && manualFromDisk
|
|
81
|
+
? MANUAL_PROVENANCE
|
|
82
|
+
: INGEST_PROVENANCE;
|
|
83
|
+
raw.push(...withProvenance(result.meters, provenance));
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
if (payload === undefined)
|
|
87
|
+
continue;
|
|
88
|
+
failures.push({
|
|
89
|
+
provider: connector.id.toUpperCase(),
|
|
90
|
+
category: failureFromConnectorReason(result.reason)
|
|
91
|
+
});
|
|
74
92
|
}
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
93
|
+
const report = normalizeMetersReport(raw);
|
|
94
|
+
for (const provider of report.rejected) {
|
|
95
|
+
failures.push({ provider, category: "VALIDATION_REJECTED" });
|
|
96
|
+
}
|
|
97
|
+
if (report.snapshots.length === 0)
|
|
98
|
+
return { snapshots: [], failures };
|
|
99
|
+
const persisted = await persistSnapshots(report.snapshots, dependencies.stateDirectory);
|
|
100
|
+
return { snapshots: persisted.merged, failures };
|
|
79
101
|
}
|
|
80
102
|
function demoSnapshots(now) {
|
|
81
103
|
const raw = [
|
|
@@ -86,7 +108,7 @@ function demoSnapshots(now) {
|
|
|
86
108
|
...(parseOpencodePayload(opencodeFixture(now), now) ?? []),
|
|
87
109
|
...(parseManualPayload(manualFixture(now), now) ?? [])
|
|
88
110
|
];
|
|
89
|
-
return normalizeMeters(raw);
|
|
111
|
+
return normalizeMeters(withProvenance(raw, INGEST_PROVENANCE));
|
|
90
112
|
}
|
|
91
113
|
function doctorRows(snapshots, environment, now) {
|
|
92
114
|
const lines = ["CONNECTOR DETECTED FRESHNESS DRIFT"];
|
|
@@ -115,11 +137,14 @@ const help = [
|
|
|
115
137
|
"openlimiter statusline",
|
|
116
138
|
"openlimiter hook [--dry-run]",
|
|
117
139
|
"openlimiter ingest [--provider <id>] [--payload <json>]",
|
|
140
|
+
"openlimiter config get statusline[.<key>]",
|
|
141
|
+
"openlimiter config set statusline.<key> <value>",
|
|
118
142
|
"openlimiter doctor",
|
|
119
143
|
"openlimiter demo",
|
|
120
144
|
"openlimiter export",
|
|
121
145
|
"openlimiter serve [--port <n>] [--host <address>] [--no-qr]",
|
|
122
146
|
"",
|
|
147
|
+
"statusline keys: " + STATUSLINE_KEYS.join(", ") + ".",
|
|
123
148
|
"statusline and ingest read JSON from standard input when it is piped in.",
|
|
124
149
|
"serve publishes read only quota on your local network, behind a token that",
|
|
125
150
|
"changes on every start. It is for a trusted network, not the internet.",
|
|
@@ -141,7 +166,9 @@ async function ingestStandardInput(dependencies, now) {
|
|
|
141
166
|
const meters = parseClaudePayload(document.value, now);
|
|
142
167
|
if (meters === null)
|
|
143
168
|
return null;
|
|
144
|
-
|
|
169
|
+
/* Claude Code wrote this to our standard input in this session. It is the
|
|
170
|
+
one live reading the product currently has, and it says so. */
|
|
171
|
+
const incoming = normalizeMeters(withProvenance(meters, STATUSLINE_PROVENANCE));
|
|
145
172
|
if (incoming.length === 0)
|
|
146
173
|
return null;
|
|
147
174
|
try {
|
|
@@ -171,9 +198,10 @@ async function initCommand(dependencies) {
|
|
|
171
198
|
}
|
|
172
199
|
}
|
|
173
200
|
async function snapshotCommand(dependencies, argumentsList, now) {
|
|
201
|
+
let failures = [];
|
|
174
202
|
if (argumentsList.includes("--refresh")) {
|
|
175
203
|
try {
|
|
176
|
-
await refresh(dependencies, now);
|
|
204
|
+
failures = (await refresh(dependencies, now)).failures;
|
|
177
205
|
}
|
|
178
206
|
catch {
|
|
179
207
|
return fail(EXIT_FAILURE, "openlimiter snapshot: the cache could not be written.");
|
|
@@ -184,7 +212,7 @@ async function snapshotCommand(dependencies, argumentsList, now) {
|
|
|
184
212
|
return fail(EXIT_FAILURE, "openlimiter snapshot: quota state could not be read.");
|
|
185
213
|
}
|
|
186
214
|
const snapshots = cached.ok ? cached.snapshots : [];
|
|
187
|
-
const stdout = renderTable(snapshots, now);
|
|
215
|
+
const stdout = withFailures(renderTable(snapshots, now, dependencies.colorOutput), failures, dependencies.colorOutput);
|
|
188
216
|
return snapshots.length === 0
|
|
189
217
|
? fail(EXIT_NO_DATA, "openlimiter snapshot: no bounded quota data is available.", stdout)
|
|
190
218
|
: succeed(stdout);
|
|
@@ -200,14 +228,39 @@ async function exportCommand(dependencies) {
|
|
|
200
228
|
? fail(EXIT_NO_DATA, "openlimiter export: no bounded quota data is available.", stdout)
|
|
201
229
|
: succeed(stdout);
|
|
202
230
|
}
|
|
231
|
+
/** The label a cache level failure is printed against, in place of a provider. */
|
|
232
|
+
const CACHE_SUBJECT = "CACHE";
|
|
233
|
+
/**
|
|
234
|
+
* What doctor can honestly say went wrong.
|
|
235
|
+
*
|
|
236
|
+
* The cache is the only thing this command reads, so it is the only thing it
|
|
237
|
+
* reports on, and it reports against the cache rather than against a provider
|
|
238
|
+
* because it cannot know which provider a corrupt file was going to name. A
|
|
239
|
+
* cache that would not parse is unreadable, a cache that parsed with rows
|
|
240
|
+
* thrown out is a validation rejection, and a cache that is simply not there
|
|
241
|
+
* yet is neither: it is a tool that has not been given anything.
|
|
242
|
+
*/
|
|
243
|
+
function cacheFailureCategory(cached) {
|
|
244
|
+
if (!cached.ok) {
|
|
245
|
+
return cached.reason === "missing" ? null : "PAYLOAD_UNREADABLE";
|
|
246
|
+
}
|
|
247
|
+
return cached.dropped === 0 ? null : "VALIDATION_REJECTED";
|
|
248
|
+
}
|
|
203
249
|
async function doctorCommand(dependencies, now) {
|
|
204
250
|
const environment = await environmentWithLocalMarkers(dependencies.environment, dependencies.stateDirectory);
|
|
205
251
|
const cached = await readSnapshotCache(dependencies.stateDirectory);
|
|
206
252
|
const snapshots = cached.ok ? cached.snapshots : [];
|
|
207
253
|
const status = cached.ok ? "ok" : cached.reason;
|
|
208
254
|
const dropped = cached.ok ? cached.dropped : 0;
|
|
209
|
-
const
|
|
210
|
-
|
|
255
|
+
const lines = [
|
|
256
|
+
doctorRows(snapshots, environment, now),
|
|
257
|
+
"CACHE " + status + " DROPPED " + String(dropped)
|
|
258
|
+
];
|
|
259
|
+
const category = cacheFailureCategory(cached);
|
|
260
|
+
if (category !== null) {
|
|
261
|
+
lines.push(failureLine(CACHE_SUBJECT, category, dependencies.colorOutput));
|
|
262
|
+
}
|
|
263
|
+
const stdout = lines.join("\n");
|
|
211
264
|
if (!cached.ok && cached.reason !== "missing") {
|
|
212
265
|
return fail(EXIT_FAILURE, "openlimiter doctor: quota state could not be read.", stdout);
|
|
213
266
|
}
|
|
@@ -231,14 +284,24 @@ async function ingestCommand(dependencies, argumentsList, now) {
|
|
|
231
284
|
return fail(EXIT_USAGE, "openlimiter ingest: the payload flag needs a value.");
|
|
232
285
|
}
|
|
233
286
|
const text = inline ?? await dependencies.readStandardInput();
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
return text === null || text.trim() === ""
|
|
237
|
-
? fail(EXIT_USAGE, "openlimiter ingest: no input was supplied on standard input.")
|
|
238
|
-
: fail(EXIT_FAILURE, "openlimiter ingest: input is not valid JSON.");
|
|
287
|
+
if (text === null || text.trim() === "") {
|
|
288
|
+
return fail(EXIT_USAGE, "openlimiter ingest: no input was supplied on standard input.");
|
|
239
289
|
}
|
|
290
|
+
/*
|
|
291
|
+
* The connector says what its payload IS, and this boundary obeys it.
|
|
292
|
+
*
|
|
293
|
+
* Assuming JSON here made the OpenCode reader unreachable from this command
|
|
294
|
+
* entirely: its payload is a logged in HTML page, so every real capture died
|
|
295
|
+
* at JSON.parse with "input is not valid JSON" and no page could ever be
|
|
296
|
+
* ingested. A text connector is handed the raw text, bounded exactly as the
|
|
297
|
+
* JSON path is bounded, and nothing is parsed on its behalf.
|
|
298
|
+
*/
|
|
240
299
|
let meters;
|
|
241
300
|
if (provider === undefined) {
|
|
301
|
+
const document = parseJsonText(text);
|
|
302
|
+
if (!document.ok) {
|
|
303
|
+
return fail(EXIT_FAILURE, "openlimiter ingest: input is not valid JSON.");
|
|
304
|
+
}
|
|
242
305
|
meters = parseManualPayload(document.value, now);
|
|
243
306
|
}
|
|
244
307
|
else {
|
|
@@ -246,14 +309,35 @@ async function ingestCommand(dependencies, argumentsList, now) {
|
|
|
246
309
|
if (connector === undefined) {
|
|
247
310
|
return fail(EXIT_USAGE, "openlimiter ingest: unknown provider.");
|
|
248
311
|
}
|
|
312
|
+
let payload;
|
|
313
|
+
if (connector.encoding === "text") {
|
|
314
|
+
if (text.length > STDIN_BYTE_LIMIT) {
|
|
315
|
+
return fail(EXIT_FAILURE, "openlimiter ingest: input is larger than accepted.");
|
|
316
|
+
}
|
|
317
|
+
payload = text;
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
const document = parseJsonText(text);
|
|
321
|
+
if (!document.ok) {
|
|
322
|
+
return fail(EXIT_FAILURE, "openlimiter ingest: input is not valid JSON.");
|
|
323
|
+
}
|
|
324
|
+
payload = document.value;
|
|
325
|
+
}
|
|
249
326
|
const result = await connector.read({
|
|
250
|
-
payload
|
|
327
|
+
payload,
|
|
251
328
|
now,
|
|
252
329
|
environment: dependencies.environment
|
|
253
330
|
});
|
|
254
331
|
meters = result.ok ? result.meters : null;
|
|
255
332
|
}
|
|
256
|
-
|
|
333
|
+
/*
|
|
334
|
+
* However this document reached the command, a person handed it over. It is
|
|
335
|
+
* an import, not a live reading, whichever connector parsed it, and a card
|
|
336
|
+
* that showed it as live would be the exact claim this wave exists to stop.
|
|
337
|
+
*/
|
|
338
|
+
const incoming = meters === null
|
|
339
|
+
? []
|
|
340
|
+
: normalizeMeters(withProvenance(meters, INGEST_PROVENANCE));
|
|
257
341
|
if (incoming.length === 0) {
|
|
258
342
|
return fail(EXIT_FAILURE, "openlimiter ingest: no bounded meter survived validation.");
|
|
259
343
|
}
|
|
@@ -266,6 +350,115 @@ async function ingestCommand(dependencies, argumentsList, now) {
|
|
|
266
350
|
return fail(EXIT_FAILURE, "openlimiter ingest: the cache could not be written.");
|
|
267
351
|
}
|
|
268
352
|
}
|
|
353
|
+
/**
|
|
354
|
+
* Draw the statusline.
|
|
355
|
+
*
|
|
356
|
+
* Standard input first, so a Claude Code session payload is ingested and drawn
|
|
357
|
+
* in the same call, then the cache. The layout comes from the configuration
|
|
358
|
+
* file and the fallback is the layout's own default, so a machine with no
|
|
359
|
+
* configuration still gets bars.
|
|
360
|
+
*
|
|
361
|
+
* `bars false` hands the whole job back to the adapter that produced the 0.1.0
|
|
362
|
+
* line. That path is byte for byte what it always was, which is the point of
|
|
363
|
+
* keeping it: it is the escape hatch for anything already parsing this output.
|
|
364
|
+
*/
|
|
365
|
+
async function statuslineCommand(dependencies, now) {
|
|
366
|
+
const ingested = await ingestStandardInput(dependencies, now);
|
|
367
|
+
const snapshots = ingested ?? await cachedSnapshots(dependencies.stateDirectory);
|
|
368
|
+
const advice = buildAdvice(snapshots, now, PROVIDER_CODES);
|
|
369
|
+
const config = await readStatuslineConfig(dependencies.stateDirectory);
|
|
370
|
+
if (!config.bars)
|
|
371
|
+
return succeed(renderClaudeStatusline(advice));
|
|
372
|
+
return succeed(renderStatuslineLayout({
|
|
373
|
+
advice,
|
|
374
|
+
snapshots,
|
|
375
|
+
now,
|
|
376
|
+
config,
|
|
377
|
+
color: statuslineColor(config.color, dependencies.environment, dependencies.colorOutput)
|
|
378
|
+
}));
|
|
379
|
+
}
|
|
380
|
+
/* --------------------------------------------------------------- config */
|
|
381
|
+
/** The one section this command reads and writes. */
|
|
382
|
+
const CONFIG_SECTION = "statusline";
|
|
383
|
+
const configUsage = [
|
|
384
|
+
"openlimiter config: use one of",
|
|
385
|
+
" openlimiter config get statusline[.<key>]",
|
|
386
|
+
" openlimiter config set statusline.<key> <value>",
|
|
387
|
+
"Keys: " + STATUSLINE_KEYS.join(", ") + "."
|
|
388
|
+
].join("\n");
|
|
389
|
+
/**
|
|
390
|
+
* Split `statusline.width` into its section and its key.
|
|
391
|
+
*
|
|
392
|
+
* A bare section name is a request for every key in it. Anything that is not
|
|
393
|
+
* the statusline section is refused rather than guessed at, because the config
|
|
394
|
+
* file also records connector detection and that is written by init, not by
|
|
395
|
+
* hand.
|
|
396
|
+
*/
|
|
397
|
+
function parseConfigPath(target) {
|
|
398
|
+
if (target === undefined || target === "")
|
|
399
|
+
return null;
|
|
400
|
+
const separator = target.indexOf(".");
|
|
401
|
+
if (separator < 0)
|
|
402
|
+
return { section: target, key: null };
|
|
403
|
+
return {
|
|
404
|
+
section: target.slice(0, separator),
|
|
405
|
+
key: target.slice(separator + 1)
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
function configGet(keys, statusline) {
|
|
409
|
+
return keys
|
|
410
|
+
.map((key) => CONFIG_SECTION + "." + key + "=" + statuslineValueText(statusline, key))
|
|
411
|
+
.join("\n");
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Read or change the statusline layout.
|
|
415
|
+
*
|
|
416
|
+
* The configuration file is the only thing this command touches, one key at a
|
|
417
|
+
* time, and every value is validated before it is written. A rejected value
|
|
418
|
+
* exits 2 and names what it would have accepted; nothing partial is ever
|
|
419
|
+
* written, because the write replaces the whole document atomically.
|
|
420
|
+
*/
|
|
421
|
+
async function configCommand(dependencies, argumentsList) {
|
|
422
|
+
const action = argumentsList[1];
|
|
423
|
+
if (action !== "get" && action !== "set") {
|
|
424
|
+
return fail(EXIT_USAGE, configUsage);
|
|
425
|
+
}
|
|
426
|
+
const target = parseConfigPath(argumentsList[2]);
|
|
427
|
+
if (target === null || target.section !== CONFIG_SECTION) {
|
|
428
|
+
return fail(EXIT_USAGE, "openlimiter config: only the statusline section can be read or written.");
|
|
429
|
+
}
|
|
430
|
+
if (target.key !== null && !isStatuslineKey(target.key)) {
|
|
431
|
+
return fail(EXIT_USAGE, "openlimiter config: unknown statusline key. Known keys: " +
|
|
432
|
+
STATUSLINE_KEYS.join(", ") + ".");
|
|
433
|
+
}
|
|
434
|
+
const stored = await readConfig(dependencies.stateDirectory);
|
|
435
|
+
if (!stored.ok && stored.reason !== "missing") {
|
|
436
|
+
return fail(EXIT_FAILURE, "openlimiter config: configuration could not be read.");
|
|
437
|
+
}
|
|
438
|
+
const config = stored.ok
|
|
439
|
+
? stored.config
|
|
440
|
+
: defaultConfig(dependencies.environment);
|
|
441
|
+
if (action === "get") {
|
|
442
|
+
return succeed(configGet(target.key === null ? STATUSLINE_KEYS : [target.key], config.statusline));
|
|
443
|
+
}
|
|
444
|
+
if (target.key === null) {
|
|
445
|
+
return fail(EXIT_USAGE, "openlimiter config: set needs a key, as in statusline.width.");
|
|
446
|
+
}
|
|
447
|
+
const value = argumentsList[3];
|
|
448
|
+
if (value === undefined) {
|
|
449
|
+
return fail(EXIT_USAGE, "openlimiter config: set needs a value.");
|
|
450
|
+
}
|
|
451
|
+
const update = setStatuslineValue(config.statusline, target.key, value);
|
|
452
|
+
if (!update.ok)
|
|
453
|
+
return fail(EXIT_USAGE, "openlimiter config: " + update.message);
|
|
454
|
+
try {
|
|
455
|
+
await writeConfig({ ...config, statusline: update.statusline }, dependencies.stateDirectory);
|
|
456
|
+
}
|
|
457
|
+
catch {
|
|
458
|
+
return fail(EXIT_FAILURE, "openlimiter config: configuration could not be written.");
|
|
459
|
+
}
|
|
460
|
+
return succeed(configGet([target.key], update.statusline));
|
|
461
|
+
}
|
|
269
462
|
/**
|
|
270
463
|
* Publish the cached quota on the local network, read only.
|
|
271
464
|
*
|
|
@@ -315,17 +508,19 @@ export async function runCli(argumentsList, overrides = {}) {
|
|
|
315
508
|
return await snapshotCommand(dependencies, argumentsList, now);
|
|
316
509
|
}
|
|
317
510
|
if (command === "statusline") {
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
511
|
+
return await statuslineCommand(dependencies, now);
|
|
512
|
+
}
|
|
513
|
+
if (command === "config") {
|
|
514
|
+
return await configCommand(dependencies, argumentsList);
|
|
321
515
|
}
|
|
322
516
|
if (command === "hook") {
|
|
323
517
|
return succeed(await agentContextFromCache(dependencies.stateDirectory, now, PROVIDER_CODES));
|
|
324
518
|
}
|
|
325
519
|
if (command === "doctor")
|
|
326
520
|
return await doctorCommand(dependencies, now);
|
|
327
|
-
if (command === "demo")
|
|
328
|
-
return succeed(renderTable(demoSnapshots(now), now));
|
|
521
|
+
if (command === "demo") {
|
|
522
|
+
return succeed(renderTable(demoSnapshots(now), now, dependencies.colorOutput));
|
|
523
|
+
}
|
|
329
524
|
if (command === "export")
|
|
330
525
|
return await exportCommand(dependencies);
|
|
331
526
|
if (command === "ingest") {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,16 +1,123 @@
|
|
|
1
1
|
import type { CredentialStore } from "./credentials.js";
|
|
2
2
|
export declare const CONFIG_FILE_NAME = "openlimiter-config.json";
|
|
3
|
+
/** Whether a provider with several meters shows one cell or all of them. */
|
|
4
|
+
export type StatuslineMeters = "worst" | "all";
|
|
5
|
+
/**
|
|
6
|
+
* When the statusline may paint.
|
|
7
|
+
*
|
|
8
|
+
* `auto` follows the terminal, which is what every other command does. It is
|
|
9
|
+
* the honest default and it is also the reason the other two exist: a
|
|
10
|
+
* statusline host captures the command's output rather than handing it a
|
|
11
|
+
* terminal, so `auto` resolves to no colour in exactly the place a person most
|
|
12
|
+
* wants colour. `always` is how you say the host understands escape codes.
|
|
13
|
+
* `never` is how you say it does not, whatever the terminal claims.
|
|
14
|
+
*/
|
|
15
|
+
export type StatuslineColor = "auto" | "always" | "never";
|
|
16
|
+
export interface StatuslineConfig {
|
|
17
|
+
/**
|
|
18
|
+
* Provider ids, in the order they should appear.
|
|
19
|
+
*
|
|
20
|
+
* Empty means the built in order: subscription plans first, then the credit
|
|
21
|
+
* and API meters. A partial list is honoured as far as it goes and every
|
|
22
|
+
* provider it leaves out follows the built in order behind it.
|
|
23
|
+
*/
|
|
24
|
+
readonly order: readonly string[];
|
|
25
|
+
readonly meters: StatuslineMeters;
|
|
26
|
+
/** The column budget one row may spend before the line stacks. */
|
|
27
|
+
readonly width: number;
|
|
28
|
+
readonly rows: 1 | 2;
|
|
29
|
+
/** False restores the single plain line released in 0.1.0. */
|
|
30
|
+
readonly bars: boolean;
|
|
31
|
+
readonly color: StatuslineColor;
|
|
32
|
+
}
|
|
33
|
+
export declare const STATUSLINE_KEYS: readonly ["order", "meters", "width", "rows", "bars", "color"];
|
|
34
|
+
export type StatuslineKey = (typeof STATUSLINE_KEYS)[number];
|
|
35
|
+
/**
|
|
36
|
+
* The narrowest and widest budget a row may be given.
|
|
37
|
+
*
|
|
38
|
+
* Below forty columns not one cell and its header fit, so the setting would
|
|
39
|
+
* only ever produce an empty row. Above four hundred the budget stops
|
|
40
|
+
* describing any real terminal and starts being a way to ask for an unbounded
|
|
41
|
+
* line, which this tool does not print.
|
|
42
|
+
*/
|
|
43
|
+
export declare const MIN_STATUSLINE_WIDTH = 40;
|
|
44
|
+
export declare const MAX_STATUSLINE_WIDTH = 400;
|
|
45
|
+
export declare const DEFAULT_STATUSLINE: StatuslineConfig;
|
|
46
|
+
/**
|
|
47
|
+
* Read a stored statusline section, key by key, keeping what is usable.
|
|
48
|
+
*
|
|
49
|
+
* A key this does not understand falls back to its default rather than
|
|
50
|
+
* rejecting the file. The statusline is drawn inside somebody else's tool and
|
|
51
|
+
* a hand edited typo in one field is not a reason to stop drawing the other
|
|
52
|
+
* five. Everything written through `openlimiter config set` is validated
|
|
53
|
+
* before it lands, so this path only ever repairs a file edited by hand.
|
|
54
|
+
*/
|
|
55
|
+
export declare function normalizeStatusline(value: unknown): StatuslineConfig;
|
|
56
|
+
/** One stored key, rendered the way `config get` prints it. */
|
|
57
|
+
export declare function statuslineValueText(statusline: StatuslineConfig, key: StatuslineKey): string;
|
|
58
|
+
export declare function isStatuslineKey(key: string): key is StatuslineKey;
|
|
59
|
+
export type StatuslineUpdate = {
|
|
60
|
+
ok: true;
|
|
61
|
+
statusline: StatuslineConfig;
|
|
62
|
+
} | {
|
|
63
|
+
ok: false;
|
|
64
|
+
message: string;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Apply one key from the command line, or say why it cannot be applied.
|
|
68
|
+
*
|
|
69
|
+
* Every rejection names the key and lists what it would have accepted, because
|
|
70
|
+
* a configuration error a person cannot fix from the message is a second
|
|
71
|
+
* problem on top of the first. No value is ever coerced into something near
|
|
72
|
+
* enough: a width of `wide` is refused rather than read as the default.
|
|
73
|
+
*/
|
|
74
|
+
export declare function setStatuslineValue(statusline: StatuslineConfig, key: string, value: string): StatuslineUpdate;
|
|
75
|
+
export interface ConfigConnector {
|
|
76
|
+
id: string;
|
|
77
|
+
enabled: true;
|
|
78
|
+
detected: boolean;
|
|
79
|
+
}
|
|
3
80
|
export interface OpenLimiterConfig {
|
|
4
81
|
version: 1;
|
|
5
|
-
connectors: readonly
|
|
6
|
-
|
|
7
|
-
enabled: true;
|
|
8
|
-
detected: boolean;
|
|
9
|
-
}[];
|
|
82
|
+
connectors: readonly ConfigConnector[];
|
|
83
|
+
statusline: StatuslineConfig;
|
|
10
84
|
}
|
|
11
85
|
export declare function writeConfig(config: OpenLimiterConfig, directory?: string): Promise<void>;
|
|
86
|
+
export type ConfigReadResult = {
|
|
87
|
+
ok: true;
|
|
88
|
+
config: OpenLimiterConfig;
|
|
89
|
+
} | {
|
|
90
|
+
ok: false;
|
|
91
|
+
reason: "missing" | "corrupt" | "unsafe";
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Read the configuration file.
|
|
95
|
+
*
|
|
96
|
+
* The document is validated the same way the cache is: an unreadable or
|
|
97
|
+
* unsafe file is reported rather than replaced, and a readable file with a
|
|
98
|
+
* field this version does not recognise keeps the fields it does. A file that
|
|
99
|
+
* is simply not there yet is `missing`, which is not a failure.
|
|
100
|
+
*/
|
|
101
|
+
export declare function readConfig(directory?: string): Promise<ConfigReadResult>;
|
|
102
|
+
/**
|
|
103
|
+
* The statusline section, or the defaults, and never an exception.
|
|
104
|
+
*
|
|
105
|
+
* The statusline command runs inside another tool's status row on every
|
|
106
|
+
* redraw. It reads its own configuration the way it reads everything else:
|
|
107
|
+
* if the answer is not there, the answer is the default, and the line is still
|
|
108
|
+
* drawn.
|
|
109
|
+
*/
|
|
110
|
+
export declare function readStatuslineConfig(directory?: string): Promise<StatuslineConfig>;
|
|
12
111
|
export declare function initialize(environment: Readonly<Record<string, string | undefined>>, credentialStore: CredentialStore, promptForSecret: () => Promise<string>, directory?: string): Promise<{
|
|
13
112
|
config: OpenLimiterConfig;
|
|
14
113
|
credentialStored: boolean;
|
|
15
114
|
}>;
|
|
115
|
+
/**
|
|
116
|
+
* The configuration a `config set` writes into when there is no file yet.
|
|
117
|
+
*
|
|
118
|
+
* Connector detection is redone rather than left blank, so a first `config
|
|
119
|
+
* set` produces the same file `init` would have produced with the chosen key
|
|
120
|
+
* changed, instead of a file that claims no connector exists.
|
|
121
|
+
*/
|
|
122
|
+
export declare function defaultConfig(environment: Readonly<Record<string, string | undefined>>): OpenLimiterConfig;
|
|
16
123
|
//# sourceMappingURL=config.d.ts.map
|