openlimiter 1.3.5 → 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/dist/activity/event.d.ts +19 -0
- package/dist/activity/event.d.ts.map +1 -0
- package/dist/activity/event.js +169 -0
- package/dist/activity/event.js.map +1 -0
- package/dist/bin.js +5 -3
- package/dist/bin.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +74 -42
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +5 -11
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -1
- package/dist/config.js.map +1 -1
- package/dist/hub-sync.d.ts +1 -1
- package/dist/hub-sync.js +1 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +16 -1
- package/dist/render.js.map +1 -1
- package/dist/session.d.ts +6 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +1 -1
- package/dist/session.js.map +1 -1
- package/dist/smoke.d.ts +1 -1
- package/dist/smoke.d.ts.map +1 -1
- package/dist/statusline-ingest.d.ts +10 -0
- package/dist/statusline-ingest.d.ts.map +1 -0
- package/dist/statusline-ingest.js +28 -0
- package/dist/statusline-ingest.js.map +1 -0
- package/dist/statusline.d.ts +10 -11
- package/dist/statusline.d.ts.map +1 -1
- package/dist/statusline.js +144 -126
- package/dist/statusline.js.map +1 -1
- package/dist/terminal-fallback.d.ts +1 -0
- package/dist/terminal-fallback.d.ts.map +1 -1
- package/dist/terminal-fallback.js +15 -3
- package/dist/terminal-fallback.js.map +1 -1
- package/dist/terminal.d.ts +10 -8
- package/dist/terminal.d.ts.map +1 -1
- package/dist/terminal.js +38 -88
- package/dist/terminal.js.map +1 -1
- package/package.json +4 -4
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/dist/smoke.d.ts
CHANGED
|
@@ -45,7 +45,7 @@ export interface SmokeMeter {
|
|
|
45
45
|
export interface SmokeProvider {
|
|
46
46
|
readonly provider: ProviderCode;
|
|
47
47
|
readonly connector: string;
|
|
48
|
-
readonly maturity: "
|
|
48
|
+
readonly maturity: import("@openlimiter/core").ConnectorMaturity;
|
|
49
49
|
readonly detected: boolean;
|
|
50
50
|
/** Where the reading came from: a payload file, the local cache, or nothing. */
|
|
51
51
|
readonly via: "payload_file" | "snapshot_cache" | "none";
|
package/dist/smoke.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smoke.d.ts","sourceRoot":"","sources":["../src/smoke.ts"],"names":[],"mappings":"AAgCA,OAAO,EAML,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAElB,MAAM,mBAAmB,CAAC;AAE3B,sEAAsE;AACtE,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AAExD,uDAAuD;AACvD,eAAO,MAAM,YAAY,QAEoB,CAAC;AAE9C;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AAEvE,sEAAsE;AACtE,eAAO,MAAM,8BAA8B,6BAA6B,CAAC;AAEzE,mDAAmD;AACnD,eAAO,MAAM,iBAAiB,SAAU,CAAC;AAwBzC,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,MAAM,EACtB,WAAW,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,GACtE,MAAM,CAaR;AAED,qDAAqD;AACrD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"smoke.d.ts","sourceRoot":"","sources":["../src/smoke.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Session details are display only and must never be persisted in quota state. */
|
|
2
|
+
export interface StatuslineSession {
|
|
3
|
+
model?: string;
|
|
4
|
+
effort?: string;
|
|
5
|
+
dir?: string;
|
|
6
|
+
ctx?: number;
|
|
7
|
+
style?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function parseStatuslineSession(payload: unknown): StatuslineSession;
|
|
10
|
+
//# sourceMappingURL=statusline-ingest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statusline-ingest.d.ts","sourceRoot":"","sources":["../src/statusline-ingest.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAcD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB,CAe1E"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
function record(value) {
|
|
2
|
+
return value !== null && typeof value === "object" && !Array.isArray(value)
|
|
3
|
+
? value : {};
|
|
4
|
+
}
|
|
5
|
+
function text(value) {
|
|
6
|
+
if (typeof value !== "string")
|
|
7
|
+
return undefined;
|
|
8
|
+
// Host metadata must not inject terminal controls or additional status rows.
|
|
9
|
+
const clean = value.replace(/[\u0000-\u001f\u007f-\u009f]/g, "").trim();
|
|
10
|
+
return clean || undefined;
|
|
11
|
+
}
|
|
12
|
+
export function parseStatuslineSession(payload) {
|
|
13
|
+
const root = record(payload);
|
|
14
|
+
const model = record(root["model"]);
|
|
15
|
+
const name = text(model["display_name"]) ?? text(model["id"]) ?? text(root["model"]);
|
|
16
|
+
const effort = text(record(root["effort"])["level"]) ?? text(root["effort"]);
|
|
17
|
+
const directory = text(record(root["workspace"])["current_dir"]) ?? text(root["cwd"]);
|
|
18
|
+
const context = record(root["context_window"])["used_percentage"];
|
|
19
|
+
const style = text(record(root["output_style"])["name"]);
|
|
20
|
+
return {
|
|
21
|
+
...(name ? { model: name.replace(/^Claude\s+/i, "").replace(/\s*(\([^()]*\)|\[[^\[\]]*\])\s*$/, "").trim().toLowerCase().replace(/[\s.]+/g, "-") } : {}),
|
|
22
|
+
...(effort ? { effort } : {}),
|
|
23
|
+
...(directory ? { dir: directory.replace(/[\\/]+$/, "").split(/[\\/]/).pop() ?? directory } : {}),
|
|
24
|
+
...(typeof context === "number" && Number.isFinite(context) && context >= 0 ? { ctx: context } : {}),
|
|
25
|
+
...(style && style.toLowerCase() !== "default" ? { style } : {})
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=statusline-ingest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statusline-ingest.js","sourceRoot":"","sources":["../src/statusline-ingest.ts"],"names":[],"mappings":"AASA,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzE,CAAC,CAAC,KAAgC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,IAAI,CAAC,KAAc;IAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,6EAA6E;IAC7E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxE,OAAO,KAAK,IAAI,SAAS,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACtF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACzD,OAAO;QACL,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxJ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjG,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpG,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC;AACJ,CAAC"}
|
package/dist/statusline.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type Advice, type ProviderCode, type Snapshot } from "@openlimiter/core";
|
|
2
2
|
import type { StatuslineColor, StatuslineConfig } from "./config.js";
|
|
3
|
+
import type { StatuslineSession } from "./statusline-ingest.js";
|
|
3
4
|
export declare const DEFAULT_PROVIDER_ORDER: readonly ProviderCode[];
|
|
4
5
|
/**
|
|
5
6
|
* The order the configured ids ask for, completed by the built in order.
|
|
@@ -63,25 +64,21 @@ export declare const BAR_CELL_SEPARATOR = " | ";
|
|
|
63
64
|
export declare const TEN_BLOCK_FULL = "\u2588";
|
|
64
65
|
export declare const TEN_BLOCK_EMPTY = "\u2591";
|
|
65
66
|
export declare function windowCode(snapshot: Snapshot): string;
|
|
66
|
-
export declare function tenBlockBar(value: number): string;
|
|
67
|
+
export declare function tenBlockBar(value: number, unicode?: boolean): string;
|
|
67
68
|
export declare function formatResetTime(resetAt: string | null | undefined, now: string): string;
|
|
68
|
-
export declare function paintBand(text: string, value: number,
|
|
69
|
-
export declare function barStyleCells(snapshots: readonly Snapshot[], now: string, order: readonly ProviderCode[], host: StatuslineHost, show: readonly string[], metersSetting: StatuslineConfig["meters"], color: boolean, wide?: boolean, explicitSelection?: boolean): readonly StatuslineCell[];
|
|
69
|
+
export declare function paintBand(text: string, value: number, _state: "fresh" | "stale", _wide?: boolean): string;
|
|
70
|
+
export declare function barStyleCells(snapshots: readonly Snapshot[], now: string, order: readonly ProviderCode[], host: StatuslineHost, show: readonly string[], metersSetting: StatuslineConfig["meters"], color: boolean, wide?: boolean, explicitSelection?: boolean, visibility?: Readonly<Record<string, boolean>>, unicode?: boolean): readonly StatuslineCell[];
|
|
70
71
|
export interface StatuslineLayoutInput {
|
|
71
72
|
advice: Advice;
|
|
72
73
|
snapshots: readonly Snapshot[];
|
|
73
74
|
now: string;
|
|
74
75
|
config: StatuslineConfig;
|
|
75
76
|
color: boolean;
|
|
76
|
-
/**
|
|
77
|
-
* Whether the host terminal claims a 256 colour palette.
|
|
78
|
-
*
|
|
79
|
-
* Only the orange band at 80 depends on it, and only a test ever states it.
|
|
80
|
-
* Left off, the bar asks the environment, which is the right answer for every
|
|
81
|
-
* caller that is a real terminal or a statusline host standing in for one.
|
|
82
|
-
*/
|
|
77
|
+
/** Legacy caller compatibility; the reference palette is locked. */
|
|
83
78
|
wide?: boolean;
|
|
84
79
|
host?: StatuslineHost;
|
|
80
|
+
session?: StatuslineSession;
|
|
81
|
+
unicode?: boolean;
|
|
85
82
|
}
|
|
86
83
|
/** What the statusline says when it has nothing bounded to say. */
|
|
87
84
|
export declare const STATUSLINE_UNKNOWN = "OpenLimiter UNKNOWN";
|
|
@@ -101,5 +98,7 @@ export declare function renderStatuslineLayout(input: StatuslineLayoutInput): st
|
|
|
101
98
|
* convention a person can set once, for every tool on the machine, and a
|
|
102
99
|
* configuration file inside one tool is not the place to overrule it.
|
|
103
100
|
*/
|
|
104
|
-
export declare function statuslineColor(setting: StatuslineColor, environment: Readonly<Record<string, string | undefined>>, automatic: boolean): boolean;
|
|
101
|
+
export declare function statuslineColor(setting: StatuslineColor, environment: Readonly<Record<string, string | undefined>>, automatic: boolean, host?: StatuslineHost): boolean;
|
|
102
|
+
/** Node writes UTF8 on every OS; fall back only for an explicit encoding limitation. */
|
|
103
|
+
export declare function statuslineUnicode(environment: Readonly<Record<string, string | undefined>>): boolean;
|
|
105
104
|
//# sourceMappingURL=statusline.d.ts.map
|
package/dist/statusline.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,QAAQ,
|
|
1
|
+
{"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"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"}
|
package/dist/statusline.js
CHANGED
|
@@ -1,22 +1,9 @@
|
|
|
1
1
|
import { PROVIDER_CODES, floorFixed, freshness } from "@openlimiter/core";
|
|
2
2
|
import { STATUSLINE_BAR_SEGMENTS, meterBar } from "./render.js";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* person who wanted to see pressure at a glance ended up drawing their own bar
|
|
8
|
-
* around it. This module draws it instead: one compact cell per provider,
|
|
9
|
-
* `NAME bar percent`, with the overall reason code leading the row, and a
|
|
10
|
-
* second row when the first one runs out of columns.
|
|
11
|
-
*
|
|
12
|
-
* The old line is still here. `bars false` returns it byte for byte through the
|
|
13
|
-
* adapter that has always produced it, because a format somebody wrote a script
|
|
14
|
-
* against is a promise, and the way to change a promise is to leave the old one
|
|
15
|
-
* reachable.
|
|
16
|
-
*
|
|
17
|
-
* Nothing in this file decides a number. Percentages, freshness, the reason
|
|
18
|
-
* code and the recommendation all arrive already decided by the engine; this is
|
|
19
|
-
* ordering, measuring and wrapping.
|
|
4
|
+
* Reference terminal layout with host session details and labelled quota bars.
|
|
5
|
+
* The host wraps the bar line. The optional legacy cells style keeps its own
|
|
6
|
+
* width budget and advice header for existing configurations.
|
|
20
7
|
*/
|
|
21
8
|
/**
|
|
22
9
|
* Which half of the row a provider belongs in.
|
|
@@ -39,6 +26,7 @@ const PROVIDER_CLASS = {
|
|
|
39
26
|
OPENCODE: "subscription",
|
|
40
27
|
GROK: "subscription",
|
|
41
28
|
KIMI: "subscription",
|
|
29
|
+
CURSOR: "subscription",
|
|
42
30
|
MANUAL: "subscription",
|
|
43
31
|
OPENROUTER: "api"
|
|
44
32
|
};
|
|
@@ -84,6 +72,36 @@ const SIX_HOURS = 21_600;
|
|
|
84
72
|
const ONE_DAY = 86_400;
|
|
85
73
|
const SEVEN_DAYS = 604_800;
|
|
86
74
|
const THIRTY_ONE_DAYS = 2_678_400;
|
|
75
|
+
const AVAILABILITY_WORDS = {
|
|
76
|
+
missing_credentials: "signed out",
|
|
77
|
+
expired_credentials: "credential expired",
|
|
78
|
+
access_denied: "access denied",
|
|
79
|
+
missing_subscription: "subscription missing",
|
|
80
|
+
unlimited: "unlimited",
|
|
81
|
+
quota_unavailable: "quota unavailable",
|
|
82
|
+
rate_limited: "rate limited",
|
|
83
|
+
network_failure: "network failure",
|
|
84
|
+
schema_drift: "schema changed"
|
|
85
|
+
};
|
|
86
|
+
function isAvailabilitySnapshot(snapshot) {
|
|
87
|
+
return snapshot.availability !== undefined || snapshot.meter.toUpperCase() === "ACQUISITION";
|
|
88
|
+
}
|
|
89
|
+
function availabilityText(snapshot, now) {
|
|
90
|
+
if (snapshot.availability === undefined)
|
|
91
|
+
return "not measured";
|
|
92
|
+
if (snapshot.availability === "rate_limited" && snapshot.retryAt !== undefined) {
|
|
93
|
+
const retryAt = Date.parse(snapshot.retryAt);
|
|
94
|
+
const nowAt = Date.parse(now);
|
|
95
|
+
if (Number.isFinite(retryAt) && Number.isFinite(nowAt) && retryAt > nowAt) {
|
|
96
|
+
return "rate limited until " + new Date(retryAt).toISOString().slice(11, 16);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return AVAILABILITY_WORDS[snapshot.availability];
|
|
100
|
+
}
|
|
101
|
+
function availabilityCell(label, snapshot, now) {
|
|
102
|
+
const text = label + " " + availabilityText(snapshot, now);
|
|
103
|
+
return { plain: text, painted: text, percent: Number.NEGATIVE_INFINITY };
|
|
104
|
+
}
|
|
87
105
|
/**
|
|
88
106
|
* The classes a meter name maps to when its window states no duration.
|
|
89
107
|
*
|
|
@@ -136,16 +154,26 @@ export function meterClass(snapshot) {
|
|
|
136
154
|
export const CELL_GAP = " ";
|
|
137
155
|
function buildCell(label, snapshot, state, color, wide) {
|
|
138
156
|
const percent = floorFixed(snapshot.value, 1) + "%";
|
|
139
|
-
const bar =
|
|
157
|
+
const bar = meterBar(snapshot.value, state, false, STATUSLINE_BAR_SEGMENTS, wide);
|
|
140
158
|
return {
|
|
141
|
-
plain: label + " " + bar
|
|
142
|
-
painted: label + " " +
|
|
159
|
+
plain: label + " " + bar + " " + percent,
|
|
160
|
+
painted: label + " " + (color ? paintBand(bar, snapshot.value, state) + " " + paintBand(percent, snapshot.value, state) : bar + " " + percent),
|
|
143
161
|
percent: snapshot.value
|
|
144
162
|
};
|
|
145
163
|
}
|
|
146
164
|
function readingsFor(snapshots, provider, now) {
|
|
147
|
-
|
|
148
|
-
|
|
165
|
+
const providerRows = snapshots.filter((snapshot) => snapshot.provider === provider);
|
|
166
|
+
const latestAccount = new Map();
|
|
167
|
+
for (const snapshot of providerRows) {
|
|
168
|
+
const observed = Date.parse(snapshot.observedAt);
|
|
169
|
+
if (Number.isFinite(observed) && observed <= Date.parse(now)) {
|
|
170
|
+
latestAccount.set(snapshot.accountId, Math.max(latestAccount.get(snapshot.accountId) ?? 0, observed));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Dormant accounts remain in the cache, but cannot displace an active account.
|
|
174
|
+
const readings = providerRows
|
|
175
|
+
.filter((snapshot) => (snapshot.unit === "PERCENT" || snapshot.provider === "OPENROUTER" && snapshot.unit === "CREDITS" || isAvailabilitySnapshot(snapshot)) &&
|
|
176
|
+
Date.parse(now) - (latestAccount.get(snapshot.accountId) ?? 0) <= ONE_DAY * 1000)
|
|
149
177
|
.map((snapshot) => ({
|
|
150
178
|
snapshot,
|
|
151
179
|
state: freshness(snapshot.observedAt, snapshot.expiresAt, now)
|
|
@@ -158,6 +186,10 @@ function readingsFor(snapshots, provider, now) {
|
|
|
158
186
|
return rank;
|
|
159
187
|
return left.snapshot.meter < right.snapshot.meter ? -1 : 1;
|
|
160
188
|
});
|
|
189
|
+
const measuredAccounts = new Set(readings
|
|
190
|
+
.filter((reading) => !isAvailabilitySnapshot(reading.snapshot))
|
|
191
|
+
.map((reading) => reading.snapshot.accountId));
|
|
192
|
+
return readings.filter((reading) => !isAvailabilitySnapshot(reading.snapshot) || !measuredAccounts.has(reading.snapshot.accountId));
|
|
161
193
|
}
|
|
162
194
|
/**
|
|
163
195
|
* One cell per provider, or one per meter.
|
|
@@ -176,11 +208,15 @@ function readingsFor(snapshots, provider, now) {
|
|
|
176
208
|
export function statuslineCells(snapshots, now, order, meters, color, wide) {
|
|
177
209
|
const cells = [];
|
|
178
210
|
for (const provider of order) {
|
|
179
|
-
const readings = readingsFor(snapshots, provider, now);
|
|
211
|
+
const readings = readingsFor(snapshots.filter((snapshot) => snapshot.unit === "PERCENT" || isAvailabilitySnapshot(snapshot)), provider, now);
|
|
180
212
|
if (readings.length === 0)
|
|
181
213
|
continue;
|
|
182
214
|
if (meters === "all") {
|
|
183
215
|
for (const reading of readings) {
|
|
216
|
+
if (isAvailabilitySnapshot(reading.snapshot)) {
|
|
217
|
+
cells.push(availabilityCell(provider, reading.snapshot, now));
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
184
220
|
cells.push(buildCell(provider + ":" + reading.snapshot.meter, reading.snapshot, reading.state, color, wide));
|
|
185
221
|
}
|
|
186
222
|
continue;
|
|
@@ -190,6 +226,10 @@ export function statuslineCells(snapshots, now, order, meters, color, wide) {
|
|
|
190
226
|
if (reading.snapshot.value > worst.snapshot.value)
|
|
191
227
|
worst = reading;
|
|
192
228
|
}
|
|
229
|
+
if (isAvailabilitySnapshot(worst.snapshot)) {
|
|
230
|
+
cells.push(availabilityCell(provider, worst.snapshot, now));
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
193
233
|
cells.push(buildCell(provider, worst.snapshot, worst.state, color, wide));
|
|
194
234
|
}
|
|
195
235
|
return cells;
|
|
@@ -294,6 +334,7 @@ export const PROVIDER_SHORT_TAGS = {
|
|
|
294
334
|
GEMINI_CLI: "gm",
|
|
295
335
|
GROK: "gk",
|
|
296
336
|
KIMI: "km",
|
|
337
|
+
CURSOR: "cu",
|
|
297
338
|
OPENCODE: "oc",
|
|
298
339
|
OPENROUTER: "or",
|
|
299
340
|
MANUAL: "mn"
|
|
@@ -316,16 +357,14 @@ export function windowCode(snapshot) {
|
|
|
316
357
|
const meterName = snapshot.meter.toUpperCase();
|
|
317
358
|
if (meterName.includes("MONTH") || meterName === "ON_DEMAND_MONTHLY")
|
|
318
359
|
return "mo";
|
|
319
|
-
if (duration !== undefined) {
|
|
320
|
-
if (duration
|
|
321
|
-
return "
|
|
322
|
-
if (duration
|
|
323
|
-
return "
|
|
324
|
-
if (duration
|
|
325
|
-
return "
|
|
326
|
-
|
|
327
|
-
return "mo";
|
|
328
|
-
return "";
|
|
360
|
+
if (duration !== undefined && Number.isFinite(duration) && duration > 0) {
|
|
361
|
+
if (duration % ONE_DAY === 0)
|
|
362
|
+
return String(duration / ONE_DAY) + "d";
|
|
363
|
+
if (duration % 3600 === 0)
|
|
364
|
+
return String(duration / 3600) + "h";
|
|
365
|
+
if (duration % 60 === 0)
|
|
366
|
+
return String(duration / 60) + "m";
|
|
367
|
+
return String(duration) + "s";
|
|
329
368
|
}
|
|
330
369
|
if (meterName === "FIVE_HOUR" || meterName === "SESSION")
|
|
331
370
|
return "5h";
|
|
@@ -337,18 +376,18 @@ export function windowCode(snapshot) {
|
|
|
337
376
|
return "mo";
|
|
338
377
|
return "";
|
|
339
378
|
}
|
|
340
|
-
export function tenBlockBar(value) {
|
|
379
|
+
export function tenBlockBar(value, unicode = true) {
|
|
341
380
|
const clamped = Math.min(100, Math.max(0, value));
|
|
342
|
-
const filled =
|
|
381
|
+
const filled = clamped > 0 ? Math.max(1, Math.floor(clamped / 10)) : 0;
|
|
343
382
|
const empty = 10 - filled;
|
|
344
|
-
return "[" + TEN_BLOCK_FULL.repeat(filled) + TEN_BLOCK_EMPTY.repeat(empty) + "]";
|
|
383
|
+
return "[" + (unicode ? TEN_BLOCK_FULL : "#").repeat(filled) + (unicode ? TEN_BLOCK_EMPTY : ".").repeat(empty) + "]";
|
|
345
384
|
}
|
|
346
385
|
export function formatResetTime(resetAt, now) {
|
|
347
386
|
if (!resetAt)
|
|
348
387
|
return "";
|
|
349
388
|
const diffMs = new Date(resetAt).getTime() - new Date(now).getTime();
|
|
350
389
|
const diffSec = Math.floor(diffMs / 1000);
|
|
351
|
-
if (diffSec <= 0)
|
|
390
|
+
if (!Number.isFinite(diffSec) || diffSec <= 0)
|
|
352
391
|
return "";
|
|
353
392
|
if (diffSec >= 86_400) {
|
|
354
393
|
const days = Math.floor(diffSec / 86_400);
|
|
@@ -366,18 +405,16 @@ export function formatResetTime(resetAt, now) {
|
|
|
366
405
|
}
|
|
367
406
|
return "·" + String(diffSec) + "s";
|
|
368
407
|
}
|
|
369
|
-
export function paintBand(text, value,
|
|
370
|
-
if (state === "stale")
|
|
371
|
-
return "\x1b[90m" + text + "\x1b[0m";
|
|
408
|
+
export function paintBand(text, value, _state, _wide = false) {
|
|
372
409
|
if (value >= 90)
|
|
373
410
|
return "\x1b[31m" + text + "\x1b[0m";
|
|
374
411
|
if (value >= 80)
|
|
375
|
-
return
|
|
412
|
+
return "\x1b[38;5;208m" + text + "\x1b[0m";
|
|
376
413
|
if (value >= 60)
|
|
377
414
|
return "\x1b[33m" + text + "\x1b[0m";
|
|
378
415
|
return "\x1b[32m" + text + "\x1b[0m";
|
|
379
416
|
}
|
|
380
|
-
export function barStyleCells(snapshots, now, order, host, show, metersSetting, color, wide, explicitSelection = false) {
|
|
417
|
+
export function barStyleCells(snapshots, now, order, host, show, metersSetting, color, wide, explicitSelection = false, visibility = {}, unicode = true) {
|
|
381
418
|
const cells = [];
|
|
382
419
|
const hostProvider = HOST_PROVIDER[host];
|
|
383
420
|
const allowedProviders = show.length === 0 && !explicitSelection
|
|
@@ -385,19 +422,22 @@ export function barStyleCells(snapshots, now, order, host, show, metersSetting,
|
|
|
385
422
|
: new Set(show.map((s) => s.toLowerCase()));
|
|
386
423
|
for (const provider of order) {
|
|
387
424
|
const shortTag = PROVIDER_SHORT_TAGS[provider];
|
|
388
|
-
const isAllowed = allowedProviders === null ||
|
|
425
|
+
const isAllowed = visibility[provider.toLowerCase()] ?? (allowedProviders === null ||
|
|
389
426
|
allowedProviders.has(provider.toLowerCase()) ||
|
|
390
|
-
allowedProviders.has(shortTag);
|
|
427
|
+
allowedProviders.has(shortTag));
|
|
391
428
|
if (!isAllowed)
|
|
392
429
|
continue;
|
|
393
|
-
const readings = readingsFor(snapshots, provider, now);
|
|
430
|
+
const readings = readingsFor(snapshots, provider, now).filter(({ snapshot }) => visibility[windowCode(snapshot)] !== false);
|
|
394
431
|
if (readings.length === 0) {
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
432
|
+
// A dormant account stays omitted even when its provider was selected.
|
|
433
|
+
const rows = snapshots.filter((snapshot) => snapshot.provider === provider);
|
|
434
|
+
const dormant = rows.length > 0 && rows.every((snapshot) => Date.parse(now) - Date.parse(snapshot.observedAt) > ONE_DAY * 1000);
|
|
435
|
+
const windowsHidden = readingsFor(snapshots, provider, now).length > 0;
|
|
436
|
+
const chosen = visibility[provider.toLowerCase()] === true ||
|
|
437
|
+
allowedProviders?.has(provider.toLowerCase()) || allowedProviders?.has(shortTag);
|
|
438
|
+
if (chosen && !dormant && !windowsHidden) {
|
|
439
|
+
const plain = shortTag + " [?]";
|
|
440
|
+
cells.push({ plain, painted: color ? shortTag + " \x1b[31m[?]\x1b[0m" : plain, percent: Infinity });
|
|
401
441
|
}
|
|
402
442
|
continue;
|
|
403
443
|
}
|
|
@@ -419,43 +459,46 @@ export function barStyleCells(snapshots, now, order, host, show, metersSetting,
|
|
|
419
459
|
for (const reading of selectedReadings) {
|
|
420
460
|
const { snapshot, state } = reading;
|
|
421
461
|
const providerTag = provider === hostProvider ? "" : shortTag;
|
|
422
|
-
|
|
423
|
-
|
|
462
|
+
const ageSeconds = Math.max(0, Math.floor((Date.parse(now) - Date.parse(snapshot.observedAt)) / 1000));
|
|
463
|
+
const stale = state === "stale" || ageSeconds >= 180 || snapshot.precision === "estimated";
|
|
464
|
+
if (isAvailabilitySnapshot(snapshot)) {
|
|
424
465
|
const tag = providerTag || shortTag;
|
|
425
|
-
const plain =
|
|
426
|
-
|
|
427
|
-
|
|
466
|
+
const plain = tag + " " + availabilityText(snapshot, now);
|
|
467
|
+
const chosen = visibility[provider.toLowerCase()] === true ||
|
|
468
|
+
allowedProviders?.has(provider.toLowerCase()) || allowedProviders?.has(shortTag);
|
|
469
|
+
const unknown = chosen && snapshot.availability !== "unlimited";
|
|
470
|
+
cells.push({ plain: plain + (unknown ? " [?]" : ""), painted: plain +
|
|
471
|
+
(unknown ? (color ? " \x1b[31m[?]\x1b[0m" : " [?]") : ""), percent: Number.NEGATIVE_INFINITY });
|
|
428
472
|
continue;
|
|
429
473
|
}
|
|
430
|
-
if (snapshot.
|
|
474
|
+
if (provider === "OPENROUTER" && (snapshot.unit === "CREDITS" ||
|
|
475
|
+
snapshot.currency === "USD" && snapshot.limitAmount !== undefined && snapshot.usedAmount !== undefined)) {
|
|
476
|
+
const balance = snapshot.unit === "CREDITS" ? snapshot.value : snapshot.limitAmount - snapshot.usedAmount;
|
|
477
|
+
const amount = (stale ? "~" : "") + "$" + balance.toFixed(2);
|
|
478
|
+
const band = balance < 1 ? 95 : balance < 5 ? 65 : 0;
|
|
479
|
+
cells.push({ plain: "or " + amount, painted: "or " + (color ? paintBand(amount, band, "fresh") : amount), percent: band });
|
|
480
|
+
continue;
|
|
481
|
+
}
|
|
482
|
+
if (snapshot.usedAmount !== undefined && snapshot.currency === "USD") {
|
|
431
483
|
const tag = providerTag || shortTag;
|
|
432
|
-
const plain = tag + "
|
|
433
|
-
|
|
434
|
-
cells.push({ plain, painted, percent: snapshot.value });
|
|
484
|
+
const plain = tag + " spend " + (stale ? "~" : "") + "$" + snapshot.usedAmount.toFixed(2);
|
|
485
|
+
cells.push({ plain, painted: plain, percent: snapshot.value });
|
|
435
486
|
continue;
|
|
436
487
|
}
|
|
437
488
|
const winTag = windowCode(snapshot);
|
|
438
489
|
const combinedTag = providerTag + winTag;
|
|
439
490
|
const tag = combinedTag === "" ? shortTag : combinedTag;
|
|
440
|
-
const
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
cells.push({ plain, painted, percent: snapshot.value });
|
|
445
|
-
continue;
|
|
446
|
-
}
|
|
447
|
-
const prefix = ageSeconds >= 180 ? "~" : "";
|
|
448
|
-
const bar = tenBlockBar(snapshot.value);
|
|
449
|
-
const percentStr = floorFixed(snapshot.value, 0) + "%";
|
|
450
|
-
const resetStr = formatResetTime(snapshot.resetAt, now);
|
|
451
|
-
const label = prefix + tag;
|
|
491
|
+
const bar = tenBlockBar(snapshot.value, unicode);
|
|
492
|
+
const percentStr = (stale ? "~" : "") + Math.round(snapshot.value) + "%";
|
|
493
|
+
const resetStr = formatResetTime(snapshot.resetAt, now).replace("·", unicode ? "·" : ".");
|
|
494
|
+
const label = tag;
|
|
452
495
|
const plain = resetStr !== ""
|
|
453
496
|
? label + " " + bar + " " + percentStr + " " + resetStr
|
|
454
497
|
: label + " " + bar + " " + percentStr;
|
|
455
498
|
let painted = plain;
|
|
456
499
|
if (color) {
|
|
457
|
-
const paintedBar = paintBand(bar, snapshot.value,
|
|
458
|
-
const paintedPct = paintBand(percentStr, snapshot.value,
|
|
500
|
+
const paintedBar = paintBand(bar, snapshot.value, stale ? "stale" : "fresh", wide);
|
|
501
|
+
const paintedPct = paintBand(percentStr, snapshot.value, stale ? "stale" : "fresh", wide);
|
|
459
502
|
painted = resetStr !== ""
|
|
460
503
|
? label + " " + paintedBar + " " + paintedPct + " " + resetStr
|
|
461
504
|
: label + " " + paintedBar + " " + paintedPct;
|
|
@@ -469,56 +512,25 @@ export function barStyleCells(snapshots, now, order, host, show, metersSetting,
|
|
|
469
512
|
}
|
|
470
513
|
return cells;
|
|
471
514
|
}
|
|
472
|
-
function packedBarRows(cells, width, rows) {
|
|
473
|
-
const laid = [];
|
|
474
|
-
let index = 0;
|
|
475
|
-
for (let row = 0; row < rows; row += 1) {
|
|
476
|
-
const current = [];
|
|
477
|
-
let used = 0;
|
|
478
|
-
while (index < cells.length) {
|
|
479
|
-
const cell = cells[index];
|
|
480
|
-
const needed = used === 0
|
|
481
|
-
? cell.plain.length
|
|
482
|
-
: used + BAR_CELL_SEPARATOR.length + cell.plain.length;
|
|
483
|
-
if (needed > width)
|
|
484
|
-
break;
|
|
485
|
-
used = needed;
|
|
486
|
-
current.push(cell);
|
|
487
|
-
index += 1;
|
|
488
|
-
}
|
|
489
|
-
laid.push(current);
|
|
490
|
-
}
|
|
491
|
-
return laid;
|
|
492
|
-
}
|
|
493
|
-
function paintBarRows(rows) {
|
|
494
|
-
return rows
|
|
495
|
-
.map((row) => row.map((cell) => cell.painted).join(BAR_CELL_SEPARATOR))
|
|
496
|
-
.filter((line) => line !== "")
|
|
497
|
-
.join("\n");
|
|
498
|
-
}
|
|
499
515
|
function renderBarStatusline(input) {
|
|
500
516
|
const { config } = input;
|
|
501
517
|
const host = input.host ?? "claude";
|
|
502
|
-
const cells = barStyleCells(input.snapshots, input.now, resolveProviderOrder(config.order), host, config.show, config.meters, input.color, input.wide, config.showMode === "explicit");
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
const
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
if (fittedCount(attempt) === shown.length)
|
|
519
|
-
return paintBarRows(attempt);
|
|
520
|
-
}
|
|
521
|
-
return cells[0]?.painted ?? STATUSLINE_UNKNOWN;
|
|
518
|
+
const cells = barStyleCells(input.snapshots, input.now, resolveProviderOrder(config.order), host, config.show, config.meters, input.color, input.wide, config.showMode === "explicit", config.visibility, input.unicode);
|
|
519
|
+
const session = input.session ?? {};
|
|
520
|
+
const shown = (key) => config.visibility?.[key] !== false;
|
|
521
|
+
const parts = [];
|
|
522
|
+
const identity = [shown("model") ? session.model : undefined, shown("effort") ? session.effort : undefined].filter(Boolean).join(" ");
|
|
523
|
+
if (identity)
|
|
524
|
+
parts.push(identity);
|
|
525
|
+
if (shown("dir") && session.dir)
|
|
526
|
+
parts.push(session.dir);
|
|
527
|
+
if (shown("ctx") && session.ctx !== undefined)
|
|
528
|
+
parts.push("ctx " + Math.round(session.ctx) + "%");
|
|
529
|
+
parts.push(...cells.map((cell) => cell.painted));
|
|
530
|
+
if (shown("style") && session.style)
|
|
531
|
+
parts.push(session.style);
|
|
532
|
+
// The host owns wrapping. A column guess must not silently hide a provider.
|
|
533
|
+
return parts.join(BAR_CELL_SEPARATOR) || STATUSLINE_UNKNOWN;
|
|
522
534
|
}
|
|
523
535
|
/** What the statusline says when it has nothing bounded to say. */
|
|
524
536
|
export const STATUSLINE_UNKNOWN = "OpenLimiter UNKNOWN";
|
|
@@ -532,11 +544,12 @@ export const STATUSLINE_UNKNOWN = "OpenLimiter UNKNOWN";
|
|
|
532
544
|
*/
|
|
533
545
|
export function renderStatuslineLayout(input) {
|
|
534
546
|
const { advice, config } = input;
|
|
535
|
-
if (!advice.inject || advice.reason === "UNKNOWN")
|
|
536
|
-
return STATUSLINE_UNKNOWN;
|
|
537
547
|
if (config.style === "cells") {
|
|
538
|
-
|
|
539
|
-
|
|
548
|
+
if (!advice.inject || advice.reason === "UNKNOWN")
|
|
549
|
+
return STATUSLINE_UNKNOWN;
|
|
550
|
+
const cells = statuslineCells(input.snapshots.filter((snapshot) => config.visibility?.[windowCode(snapshot)] !== false), input.now, resolveProviderOrder(config.order).filter((provider) => config.visibility?.[provider.toLowerCase()] ??
|
|
551
|
+
(config.show.length === 0 && config.showMode !== "explicit" ||
|
|
552
|
+
config.show.includes(provider.toLowerCase()) || config.show.includes(PROVIDER_SHORT_TAGS[provider]))), config.meters, input.color, input.wide);
|
|
540
553
|
if (cells.length === 0)
|
|
541
554
|
return STATUSLINE_UNKNOWN;
|
|
542
555
|
const head = statuslineHead(advice);
|
|
@@ -560,13 +573,18 @@ export function renderStatuslineLayout(input) {
|
|
|
560
573
|
* convention a person can set once, for every tool on the machine, and a
|
|
561
574
|
* configuration file inside one tool is not the place to overrule it.
|
|
562
575
|
*/
|
|
563
|
-
export function statuslineColor(setting, environment, automatic) {
|
|
576
|
+
export function statuslineColor(setting, environment, automatic, host) {
|
|
564
577
|
if (environment["NO_COLOR"] !== undefined)
|
|
565
578
|
return false;
|
|
566
579
|
if (setting === "never")
|
|
567
580
|
return false;
|
|
568
581
|
if (setting === "always")
|
|
569
582
|
return true;
|
|
570
|
-
return automatic;
|
|
583
|
+
return automatic || host === "claude";
|
|
584
|
+
}
|
|
585
|
+
/** Node writes UTF8 on every OS; fall back only for an explicit encoding limitation. */
|
|
586
|
+
export function statuslineUnicode(environment) {
|
|
587
|
+
const locale = environment["LC_ALL"] || environment["LC_CTYPE"] || environment["LANG"];
|
|
588
|
+
return environment["TERM"] !== "dumb" && !/^(C|POSIX)$/i.test(locale ?? "");
|
|
571
589
|
}
|
|
572
590
|
//# sourceMappingURL=statusline.js.map
|