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.
@@ -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: "stable" | "beta";
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";
@@ -1 +1 @@
1
- {"version":3,"file":"smoke.d.ts","sourceRoot":"","sources":["../src/smoke.ts"],"names":[],"mappings":"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"}
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"}
@@ -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, state: "fresh" | "stale", wide?: boolean): string;
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
@@ -1 +1 @@
1
- {"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"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"}
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,EAEd,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAkChE,eAAO,MAAM,sBAAsB,EAAE,SAAS,YAAY,EAGzD,CAAC;AAIF;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,SAAS,YAAY,EAAE,CAazB;AAID,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,OAAO,GACP,QAAQ,GACR,SAAS,GACT,SAAS,GACT,OAAO,CAAC;AA0EZ;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAazD;AAID,MAAM,WAAW,cAAc;IAC7B,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,6EAA6E;AAC7E,eAAO,MAAM,QAAQ,OAAO,CAAC;AA6D7B;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,QAAQ,EAAE,EAC9B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAClC,KAAK,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,OAAO,GACb,SAAS,cAAc,EAAE,CAgC3B;AAID;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQrD;AA8ED,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,aAAa,GACb,MAAM,GACN,OAAO,GACP,OAAO,CAAC;AAEZ,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EAMrD,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,cAAc,CAEvE;AAED,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAWtE,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,GAAG,IAAI,CAAC,CAM/E,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AACxC,eAAO,MAAM,cAAc,WAAM,CAAC;AAClC,eAAO,MAAM,eAAe,WAAM,CAAC;AAEnC,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAkBrD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,UAAO,GAAG,MAAM,CAKjE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAoBvF;AAED,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,GAAG,OAAO,EACzB,KAAK,UAAQ,GACZ,MAAM,CAKR;AAED,wBAAgB,aAAa,CAC3B,SAAS,EAAE,SAAS,QAAQ,EAAE,EAC9B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,aAAa,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EACzC,KAAK,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,OAAO,EACd,iBAAiB,UAAQ,EACzB,UAAU,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM,EAClD,OAAO,UAAO,GACb,SAAS,cAAc,EAAE,CA6G3B;AA+BD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,oEAAoE;IACpE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,mEAAmE;AACnE,eAAO,MAAM,kBAAkB,wBAAwB,CAAC;AAExD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CA4B3E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACzD,SAAS,EAAE,OAAO,EAClB,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAKT;AAED,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,OAAO,CAGpG"}
@@ -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
- * Statusline layout, version two.
5
- *
6
- * Version one was one plain line of provider names and percentages, and every
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 = (paint) => meterBar(snapshot.value, state, paint, STATUSLINE_BAR_SEGMENTS, wide);
157
+ const bar = meterBar(snapshot.value, state, false, STATUSLINE_BAR_SEGMENTS, wide);
140
158
  return {
141
- plain: label + " " + bar(false) + " " + percent,
142
- painted: label + " " + bar(color) + " " + percent,
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
- return snapshots
148
- .filter((snapshot) => snapshot.provider === provider && snapshot.unit === "PERCENT")
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 <= SIX_HOURS || meterName === "FIVE_HOUR" || meterName === "SESSION")
321
- return "5h";
322
- if (duration <= ONE_DAY || meterName === "DAILY" || meterName === "DAY")
323
- return "1d";
324
- if (duration <= SEVEN_DAYS || meterName === "WEEKLY" || meterName === "SEVEN_DAY")
325
- return "7d";
326
- if (duration <= THIRTY_ONE_DAYS || meterName === "MONTHLY" || meterName === "MONTH")
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 = Math.min(10, Math.max(0, Math.floor(clamped / 10)));
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, state, wide = false) {
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 wide ? "\x1b[38;5;208m" + text + "\x1b[0m" : "\x1b[33m" + text + "\x1b[0m";
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
- if (allowedProviders !== null || snapshots.some((s) => s.provider === provider)) {
396
- const tag = provider === hostProvider ? "" : shortTag;
397
- const displayTag = tag === "" ? provider.toLowerCase() : tag;
398
- const plain = displayTag + " [?]";
399
- const painted = color ? displayTag + " \x1b[31m[?]\x1b[0m" : plain;
400
- cells.push({ plain, painted, percent: 0 });
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
- if (snapshot.usedAmount !== undefined && snapshot.currency === "USD") {
423
- const age = (Date.parse(now) - Date.parse(snapshot.observedAt)) / 1000;
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 = age >= 900 ? tag + " [?]" :
426
- (state === "stale" || age >= 180 ? "~" : "") + tag + " spend $" + snapshot.usedAmount.toFixed(2);
427
- cells.push({ plain, painted: color && (state === "stale" || age >= 180) ? "\x1b[90m" + plain + "\x1b[0m" : plain, percent: snapshot.value });
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.window.kind === "unknown") {
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
- const painted = color ? tag + " \x1b[31m[?]\x1b[0m" : plain;
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 ageSeconds = Math.max(0, Math.floor((new Date(now).getTime() - new Date(snapshot.observedAt).getTime()) / 1000));
441
- if (ageSeconds >= 900) {
442
- const plain = tag + " [?]";
443
- const painted = color ? tag + " \x1b[31m[?]\x1b[0m" : plain;
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, state, wide);
458
- const paintedPct = paintBand(percentStr, snapshot.value, state, wide);
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
- if (cells.length === 0)
504
- return STATUSLINE_UNKNOWN;
505
- const whole = packedBarRows(cells, config.width, config.rows);
506
- if (fittedCount(whole) === cells.length)
507
- return paintBarRows(whole);
508
- for (let keep = fittedCount(whole); keep >= 0; keep -= 1) {
509
- const dropped = cells.length - keep;
510
- const tailText = "+" + String(dropped);
511
- const tailCell = {
512
- plain: tailText,
513
- painted: tailText,
514
- percent: Number.NEGATIVE_INFINITY
515
- };
516
- const shown = [...worstCells(cells, keep), tailCell];
517
- const attempt = packedBarRows(shown, config.width, config.rows);
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
- const cells = statuslineCells(input.snapshots, input.now, resolveProviderOrder(config.order).filter((provider) => config.show.length === 0 && config.showMode !== "explicit" ||
539
- config.show.includes(provider.toLowerCase()) || config.show.includes(PROVIDER_SHORT_TAGS[provider])), config.meters, input.color, input.wide);
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