lumira 0.7.0 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -9
- package/dist/config.js +39 -5
- package/dist/config.js.map +1 -1
- package/dist/normalize.d.ts +11 -1
- package/dist/normalize.js +49 -7
- package/dist/normalize.js.map +1 -1
- package/dist/parsers/token-speed.d.ts +1 -1
- package/dist/parsers/token-speed.js.map +1 -1
- package/dist/parsers/transcript.d.ts +7 -0
- package/dist/parsers/transcript.js +116 -10
- package/dist/parsers/transcript.js.map +1 -1
- package/dist/render/colors.d.ts +13 -1
- package/dist/render/colors.js +17 -6
- package/dist/render/colors.js.map +1 -1
- package/dist/render/line1.js +17 -5
- package/dist/render/line1.js.map +1 -1
- package/dist/render/line2.js +31 -34
- package/dist/render/line2.js.map +1 -1
- package/dist/render/line3.js +1 -1
- package/dist/render/minimal.js +10 -5
- package/dist/render/minimal.js.map +1 -1
- package/dist/render/powerline-line1.js +30 -5
- package/dist/render/powerline-line1.js.map +1 -1
- package/dist/render/powerline-line2.js +20 -11
- package/dist/render/powerline-line2.js.map +1 -1
- package/dist/render/shared.d.ts +11 -2
- package/dist/render/shared.js +15 -12
- package/dist/render/shared.js.map +1 -1
- package/dist/types.d.ts +23 -1
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/path.d.ts +16 -0
- package/dist/utils/path.js +33 -0
- package/dist/utils/path.js.map +1 -0
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ Interactive wizard — preset, theme, icons — previewed live before write.
|
|
|
24
24
|

|
|
25
25
|

|
|
26
26
|
|
|
27
|
-
>
|
|
27
|
+
> 1,700+ downloads in the first month — [share your setup](https://github.com/cativo23/lumira/discussions) in Discussions.
|
|
28
28
|
|
|
29
29
|
## Table of contents
|
|
30
30
|
|
|
@@ -51,12 +51,12 @@ Claude Code's default statusline shows the model name and current directory. Tha
|
|
|
51
51
|
- **Active tools, agents, and todo progress** — parsed from the live transcript, updated every render.
|
|
52
52
|
- **Cross-platform** — same config drives Claude Code and Qwen Code; Qwen sessions auto-collapse to single-line.
|
|
53
53
|
|
|
54
|
-
Inspired by [claude-hud](https://github.com/jarrodwatts/claude-hud); takes a different stance on opt-in powerline rendering, theme contrast guarantees, and
|
|
54
|
+
Inspired by [claude-hud](https://github.com/jarrodwatts/claude-hud); takes a different stance on opt-in powerline rendering, theme contrast guarantees, and Qwen Code compatibility.
|
|
55
55
|
|
|
56
56
|
## Requirements
|
|
57
57
|
|
|
58
58
|
- **Node ≥18**
|
|
59
|
-
- **Nerd Font** (recommended) — for
|
|
59
|
+
- **Nerd Font** (recommended) — for branch, folder, model, and spinner icons. Falls back to plain glyphs via `icons: emoji` or `icons: none`.
|
|
60
60
|
- **Truecolor terminal** (for themes / powerline) — auto-detected via `COLORTERM=truecolor`. 256-color terminals get a nearest-index projection; named-ANSI terminals fall back to default colors silently.
|
|
61
61
|
|
|
62
62
|
## Features
|
|
@@ -253,13 +253,19 @@ Create `~/.config/lumira/config.json`:
|
|
|
253
253
|
"version": true,
|
|
254
254
|
"linesChanged": true,
|
|
255
255
|
"memory": true,
|
|
256
|
-
"health": false
|
|
256
|
+
"health": false,
|
|
257
|
+
"contextWarningThreshold": 70,
|
|
258
|
+
"contextCriticalThreshold": 85
|
|
257
259
|
}
|
|
258
260
|
}
|
|
259
261
|
```
|
|
260
262
|
|
|
261
263
|
All fields are optional — defaults are shown above. `display.health` defaults to `false` (opt-in widget).
|
|
262
264
|
|
|
265
|
+
**Context bar thresholds** — `contextWarningThreshold` (default 70) and `contextCriticalThreshold` (default 85) control when the bar transitions through yellow/orange/red. Both are clamped to `[0, 100]` and `warning < critical` is required (invalid pairs fall back to defaults with a one-shot stderr warning). Lower them for earlier warnings, raise them if your workflow tolerates fuller buffers.
|
|
266
|
+
|
|
267
|
+
> **Migration note (post-0.7.1):** default color transitions shifted from `50/65/80` to `50/70/85`. The bar now stays yellow up to 70% (was 65%) and orange up to 85% (was 80%) before flashing red. To restore the previous behavior, set `"contextWarningThreshold": 65, "contextCriticalThreshold": 80` in your config.
|
|
268
|
+
|
|
263
269
|
### CLI Flags
|
|
264
270
|
|
|
265
271
|
```bash
|
|
@@ -310,19 +316,19 @@ LUMIRA_DEBUG=1 claude # or export LUMIRA_DEBUG=1
|
|
|
310
316
|
|
|
311
317
|
## Contributing
|
|
312
318
|
|
|
313
|
-
PRs welcome — particularly for new themes (one of the most common contribution paths). See [CONTRIBUTING.md](CONTRIBUTING.md) for the
|
|
319
|
+
PRs welcome — particularly for new themes (one of the most common contribution paths). See [CONTRIBUTING.md](CONTRIBUTING.md) for the branching model, theme submission walkthrough, and the contrast-guard CI step that runs on every theme PR.
|
|
314
320
|
|
|
315
321
|
### What's next
|
|
316
322
|
|
|
317
|
-
- **
|
|
318
|
-
- **
|
|
319
|
-
- **Backlog** — incremental transcript parsing for very large sessions (
|
|
323
|
+
- **v1.0** — soak window on v0.7.x, then tagging stable. CLI flags, preset names, and config schema are considered frozen from this point.
|
|
324
|
+
- **Themes** — community theme contributions welcome via the theme PR template.
|
|
325
|
+
- **Backlog** — incremental transcript parsing for very large sessions (deferred; full re-parse stays under budget for real-world transcripts).
|
|
320
326
|
|
|
321
327
|
For security issues, see [SECURITY.md](SECURITY.md).
|
|
322
328
|
|
|
323
329
|
## Credits
|
|
324
330
|
|
|
325
|
-
|
|
331
|
+
Migrated from [claude-setup](https://github.com/cativo23/claude-setup) statusline.
|
|
326
332
|
|
|
327
333
|
Theme palettes drawn from upstream specs: [Dracula](https://draculatheme.com), [Nord](https://www.nordtheme.com), [Tokyo Night](https://github.com/folke/tokyonight.nvim), [Catppuccin](https://catppuccin.com), [Monokai](https://monokai.pro), [Gruvbox](https://github.com/morhetz/gruvbox), [Solarized](https://ethanschoonover.com/solarized).
|
|
328
334
|
|
package/dist/config.js
CHANGED
|
@@ -1,13 +1,39 @@
|
|
|
1
1
|
import { readFileSync, existsSync, writeFileSync, renameSync, mkdirSync } from 'node:fs';
|
|
2
2
|
import { join, dirname } from 'node:path';
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
|
-
import { DEFAULT_CONFIG, DEFAULT_DISPLAY, POWERLINE_STYLE_NAMES } from './types.js';
|
|
4
|
+
import { DEFAULT_CONFIG, DEFAULT_DISPLAY, DEFAULT_CONTEXT_WARNING_THRESHOLD, DEFAULT_CONTEXT_CRITICAL_THRESHOLD, POWERLINE_STYLE_NAMES } from './types.js';
|
|
5
5
|
// Module-level flag: fires the qwen→minimal deprecation warning once per
|
|
6
6
|
// Node process. Process-scoped by design — tests must run in forked workers
|
|
7
7
|
// (see vitest.config.ts `pool: 'forks'`). Issue #20.
|
|
8
8
|
let qwenWarningShown = false;
|
|
9
|
+
let thresholdWarningShown = false;
|
|
9
10
|
/** Test-only — resets the process-scoped qwenWarningShown flag. Do not call in production. */
|
|
10
|
-
export function _resetMigrationFlags() { qwenWarningShown = false; }
|
|
11
|
+
export function _resetMigrationFlags() { qwenWarningShown = false; thresholdWarningShown = false; }
|
|
12
|
+
const clampPct = (n) => Math.max(0, Math.min(100, n));
|
|
13
|
+
/**
|
|
14
|
+
* Validate context-bar threshold pair. Clamps each to [0, 100]. If `warning`
|
|
15
|
+
* is not strictly less than `critical` after clamping, emits a one-shot warn
|
|
16
|
+
* to stderr and returns the defaults (70/85). Falls back to defaults if a
|
|
17
|
+
* value is missing or non-finite.
|
|
18
|
+
*/
|
|
19
|
+
function resolveThresholds(rawWarn, rawCrit) {
|
|
20
|
+
const hasWarn = typeof rawWarn === 'number' && Number.isFinite(rawWarn);
|
|
21
|
+
const hasCrit = typeof rawCrit === 'number' && Number.isFinite(rawCrit);
|
|
22
|
+
if (!hasWarn && !hasCrit) {
|
|
23
|
+
return { warning: DEFAULT_CONTEXT_WARNING_THRESHOLD, critical: DEFAULT_CONTEXT_CRITICAL_THRESHOLD };
|
|
24
|
+
}
|
|
25
|
+
const warning = hasWarn ? clampPct(rawWarn) : DEFAULT_CONTEXT_WARNING_THRESHOLD;
|
|
26
|
+
const critical = hasCrit ? clampPct(rawCrit) : DEFAULT_CONTEXT_CRITICAL_THRESHOLD;
|
|
27
|
+
if (warning >= critical) {
|
|
28
|
+
if (!thresholdWarningShown) {
|
|
29
|
+
process.stderr.write(`[lumira] context thresholds invalid (warning=${warning}, critical=${critical}); ` +
|
|
30
|
+
`falling back to defaults (${DEFAULT_CONTEXT_WARNING_THRESHOLD}/${DEFAULT_CONTEXT_CRITICAL_THRESHOLD})\n`);
|
|
31
|
+
thresholdWarningShown = true;
|
|
32
|
+
}
|
|
33
|
+
return { warning: DEFAULT_CONTEXT_WARNING_THRESHOLD, critical: DEFAULT_CONTEXT_CRITICAL_THRESHOLD };
|
|
34
|
+
}
|
|
35
|
+
return { warning, critical };
|
|
36
|
+
}
|
|
11
37
|
export function loadConfig(configDir = join(homedir(), '.config', 'lumira')) {
|
|
12
38
|
const p = join(configDir, 'config.json');
|
|
13
39
|
if (!existsSync(p))
|
|
@@ -43,10 +69,14 @@ function mergeConfig(rawIn) {
|
|
|
43
69
|
applyPreset(result, raw.preset);
|
|
44
70
|
// Then overlay user's explicit display toggles (user wins over preset)
|
|
45
71
|
if (raw.display && typeof raw.display === 'object') {
|
|
72
|
+
const rawDisplay = raw.display;
|
|
46
73
|
for (const k of Object.keys(DEFAULT_DISPLAY)) {
|
|
47
|
-
if (typeof
|
|
48
|
-
result.display[k] =
|
|
74
|
+
if (typeof rawDisplay[k] === 'boolean')
|
|
75
|
+
result.display[k] = rawDisplay[k];
|
|
49
76
|
}
|
|
77
|
+
const { warning, critical } = resolveThresholds(rawDisplay.contextWarningThreshold, rawDisplay.contextCriticalThreshold);
|
|
78
|
+
result.display.contextWarningThreshold = warning;
|
|
79
|
+
result.display.contextCriticalThreshold = critical;
|
|
50
80
|
}
|
|
51
81
|
if (typeof raw.theme === 'string' && raw.theme.length > 0)
|
|
52
82
|
result.theme = raw.theme;
|
|
@@ -112,8 +142,12 @@ export function applyPreset(r, preset) {
|
|
|
112
142
|
const def = PRESET_DEFS[preset];
|
|
113
143
|
r.preset = preset;
|
|
114
144
|
r.layout = def.layout;
|
|
145
|
+
// PRESET_DEFS only set boolean toggles — threshold numbers are not
|
|
146
|
+
// overridable via preset. The runtime guard keeps the cast narrow and
|
|
147
|
+
// catches accidental non-boolean entries in PRESET_DEFS.
|
|
115
148
|
for (const [k, v] of Object.entries(def.display)) {
|
|
116
|
-
|
|
149
|
+
if (typeof v === 'boolean')
|
|
150
|
+
r.display[k] = v;
|
|
117
151
|
}
|
|
118
152
|
}
|
|
119
153
|
export function mergeCliFlags(config, argv) {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,qBAAqB,EAAyD,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/normalize.d.ts
CHANGED
|
@@ -49,6 +49,8 @@ export interface NormalizedInput {
|
|
|
49
49
|
agentName?: string;
|
|
50
50
|
/** Worktree name */
|
|
51
51
|
worktreeName?: string;
|
|
52
|
+
/** Reasoning effort level (≥ 2.1.x stdin, falls back to transcript regex) */
|
|
53
|
+
effortLevel?: string;
|
|
52
54
|
/** Rate limits (Claude only) */
|
|
53
55
|
rateLimits?: {
|
|
54
56
|
fiveHour?: {
|
|
@@ -65,6 +67,14 @@ export interface NormalizedInput {
|
|
|
65
67
|
/** Escape hatch: access raw platform data for platform-specific widgets */
|
|
66
68
|
raw: RawInput;
|
|
67
69
|
}
|
|
68
|
-
/**
|
|
70
|
+
/**
|
|
71
|
+
* Strip terminal control characters and bidirectional/zero-width Unicode from
|
|
72
|
+
* untrusted strings.
|
|
73
|
+
* - C0/C1 + DEL — escape sequences, ANSI, etc.
|
|
74
|
+
* - U+200B-200F — zero-width and LTR/RTL marks
|
|
75
|
+
* - U+202A-202E — explicit directional embedding/overrides (visual spoofing)
|
|
76
|
+
* - U+2028/2029 — line/paragraph separators
|
|
77
|
+
* - U+2066-2069 — directional isolates
|
|
78
|
+
*/
|
|
69
79
|
export declare function sanitizeTermString(s: string): string;
|
|
70
80
|
export declare function normalize(input: RawInput): NormalizedInput;
|
package/dist/normalize.js
CHANGED
|
@@ -13,10 +13,20 @@ export function isQwenInput(input) {
|
|
|
13
13
|
const first = Object.values(models)[0];
|
|
14
14
|
return first != null && typeof first === 'object' && 'api' in first;
|
|
15
15
|
}
|
|
16
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Strip terminal control characters and bidirectional/zero-width Unicode from
|
|
18
|
+
* untrusted strings.
|
|
19
|
+
* - C0/C1 + DEL — escape sequences, ANSI, etc.
|
|
20
|
+
* - U+200B-200F — zero-width and LTR/RTL marks
|
|
21
|
+
* - U+202A-202E — explicit directional embedding/overrides (visual spoofing)
|
|
22
|
+
* - U+2028/2029 — line/paragraph separators
|
|
23
|
+
* - U+2066-2069 — directional isolates
|
|
24
|
+
*/
|
|
17
25
|
export function sanitizeTermString(s) {
|
|
18
|
-
return s.replace(/[\x00-\x1f\x7f-\x9f]/g, '');
|
|
26
|
+
return s.replace(/[\x00-\x1f\x7f-\x9f\u200b-\u200f\u202a-\u202e\u2028\u2029\u2066-\u2069]/g, '');
|
|
19
27
|
}
|
|
28
|
+
/** Allowed values for the reasoning effort level field (CC ≥ 2.1.x). */
|
|
29
|
+
const VALID_EFFORT_LEVELS = new Set(['low', 'medium', 'high', 'xhigh', 'max']);
|
|
20
30
|
export function normalize(input) {
|
|
21
31
|
const platform = isQwenInput(input) ? 'qwen-code' : 'claude-code';
|
|
22
32
|
const qwen = isQwenInput(input) ? input : null;
|
|
@@ -40,7 +50,33 @@ export function normalize(input) {
|
|
|
40
50
|
}
|
|
41
51
|
}
|
|
42
52
|
else if (claude) {
|
|
43
|
-
|
|
53
|
+
// Modern Claude Code (≥ 2.1.x) nests cache fields under current_usage.
|
|
54
|
+
// Fall back to the legacy top-level path for older payloads.
|
|
55
|
+
const cu = claude.context_window?.current_usage;
|
|
56
|
+
const nested = typeof cu === 'object' ? cu?.cache_read_input_tokens : undefined;
|
|
57
|
+
cached = nested ?? claude.context_window?.cache_read_input_tokens;
|
|
58
|
+
}
|
|
59
|
+
// Per-turn cache denominator (Claude only): fresh input + cache_read + cache_creation
|
|
60
|
+
// for the current turn. Used to compute a meaningful cache hit rate, since
|
|
61
|
+
// `cached` is per-turn while `total_input_tokens` is cumulative across the session.
|
|
62
|
+
// Falls back to total_input_tokens for legacy payloads without current_usage.
|
|
63
|
+
let cacheTurnDenominator;
|
|
64
|
+
if (claude) {
|
|
65
|
+
const cu = claude.context_window?.current_usage;
|
|
66
|
+
if (typeof cu === 'object' && cu) {
|
|
67
|
+
const fresh = cu.input_tokens ?? 0;
|
|
68
|
+
const read = cu.cache_read_input_tokens ?? 0;
|
|
69
|
+
const create = cu.cache_creation_input_tokens ?? 0;
|
|
70
|
+
const total = fresh + read + create;
|
|
71
|
+
if (total > 0)
|
|
72
|
+
cacheTurnDenominator = total;
|
|
73
|
+
}
|
|
74
|
+
// Legacy fallback: top-level totals (pre-2.1.x payloads, or current_usage
|
|
75
|
+
// without cache fields). The Math.min(100, ...) cap below protects against
|
|
76
|
+
// overflow when cache_read accumulates past total_input in long sessions.
|
|
77
|
+
if (cacheTurnDenominator == null && inputTokens > 0) {
|
|
78
|
+
cacheTurnDenominator = inputTokens;
|
|
79
|
+
}
|
|
44
80
|
}
|
|
45
81
|
// Performance (Qwen only)
|
|
46
82
|
let performance;
|
|
@@ -74,9 +110,10 @@ export function normalize(input) {
|
|
|
74
110
|
: undefined,
|
|
75
111
|
};
|
|
76
112
|
}
|
|
77
|
-
// Cache hit rate (Claude only)
|
|
78
|
-
|
|
79
|
-
|
|
113
|
+
// Cache hit rate (Claude only) — denominator is the current turn's total input
|
|
114
|
+
// (fresh + cache_read + cache_creation), not the cumulative session total.
|
|
115
|
+
const cacheHitRate = (cached != null && cached > 0 && cacheTurnDenominator && platform === 'claude-code')
|
|
116
|
+
? Math.min(100, Math.round((cached / cacheTurnDenominator) * 100))
|
|
80
117
|
: undefined;
|
|
81
118
|
return {
|
|
82
119
|
platform,
|
|
@@ -92,7 +129,9 @@ export function normalize(input) {
|
|
|
92
129
|
},
|
|
93
130
|
context: {
|
|
94
131
|
usedPercentage: input.context_window.used_percentage,
|
|
95
|
-
windowSize: qwen
|
|
132
|
+
windowSize: qwen
|
|
133
|
+
? qwen.context_window.context_window_size
|
|
134
|
+
: claude?.context_window?.context_window_size,
|
|
96
135
|
},
|
|
97
136
|
cost: claude ? claude.cost?.total_cost_usd : undefined,
|
|
98
137
|
durationMs: claude ? claude.cost?.total_duration_ms : undefined,
|
|
@@ -104,6 +143,9 @@ export function normalize(input) {
|
|
|
104
143
|
sessionName: input.session_name ? sanitizeTermString(input.session_name) : undefined,
|
|
105
144
|
outputStyle: input.output_style?.name ? sanitizeTermString(input.output_style.name) : undefined,
|
|
106
145
|
agentName: input.agent?.name ? sanitizeTermString(input.agent.name) : undefined,
|
|
146
|
+
effortLevel: claude?.effort?.level && VALID_EFFORT_LEVELS.has(claude.effort.level)
|
|
147
|
+
? sanitizeTermString(claude.effort.level)
|
|
148
|
+
: undefined,
|
|
107
149
|
worktreeName: input.worktree?.name ? sanitizeTermString(input.worktree.name) : undefined,
|
|
108
150
|
rateLimits,
|
|
109
151
|
cacheHitRate,
|
package/dist/normalize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,EAAE;AACF,yDAAyD;AACzD,kDAAkD;AAClD,yDAAyD;AAIzD,MAAM,UAAU,WAAW,CAAC,KAAe;IACzC,MAAM,GAAG,GAAG,KAA2C,CAAC;IACxD,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAChG,MAAM,MAAM,GAAI,GAAG,CAAC,OAAgD,CAAC,MAAM,CAAC;IAC5E,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,KAAK,CAAC;AACtE,CAAC;
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ interface ContextWindow {
|
|
|
2
2
|
used_percentage: number;
|
|
3
3
|
remaining_percentage: number;
|
|
4
4
|
current_usage?: number | {
|
|
5
|
-
output_tokens
|
|
5
|
+
output_tokens?: number;
|
|
6
6
|
};
|
|
7
7
|
}
|
|
8
8
|
export declare function getTokenSpeed(contextWindow: ContextWindow, cacheDir?: string): number | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-speed.js","sourceRoot":"","sources":["../../src/parsers/token-speed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,MAAM,eAAe,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"token-speed.js","sourceRoot":"","sources":["../../src/parsers/token-speed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,MAAM,eAAe,GAAG,IAAI,CAAC;AAO7B,MAAM,UAAU,aAAa,CAAC,aAA4B,EAAE,WAAmB,MAAM,EAAE;IACrF,MAAM,EAAE,GAAG,aAAa,EAAE,aAAa,CAAC;IACxC,MAAM,YAAY,GAAG,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,aAAa,CAAC;IACrE,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,YAAY,CAAa,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;IAE9E,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,IAAI,QAAQ,IAAI,YAAY,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;QACtD,MAAM,WAAW,GAAG,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;QACzD,MAAM,OAAO,GAAG,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC;QACzC,IAAI,WAAW,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,IAAI,eAAe,EAAE,CAAC;YACjE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,aAAa,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IACnE,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type { TranscriptData, TodoStatus } from '../types.js';
|
|
2
|
+
export declare const TRANSCRIPT_CACHE_CAP = 10;
|
|
3
|
+
export declare function _transcriptCacheSize(): number;
|
|
4
|
+
export declare function _transcriptCacheKeys(): string[];
|
|
5
|
+
export declare function _clearTranscriptCache(): void;
|
|
6
|
+
export declare const MAX_LINES = 50000;
|
|
7
|
+
export declare function _truncationWarned(): boolean;
|
|
8
|
+
export declare function _resetTruncationWarned(): void;
|
|
2
9
|
export declare function normalizeTodoStatus(status: string | undefined): TodoStatus;
|
|
3
10
|
export declare function extractToolTarget(toolName: string, input: Record<string, unknown> | undefined): string | undefined;
|
|
4
11
|
export declare function parseTranscript(transcriptPath: string): Promise<TranscriptData>;
|
|
@@ -1,14 +1,79 @@
|
|
|
1
|
-
import { createReadStream, existsSync } from 'node:fs';
|
|
1
|
+
import { createReadStream, existsSync, realpathSync } from 'node:fs';
|
|
2
2
|
import { createInterface } from 'node:readline';
|
|
3
3
|
import { resolve } from 'node:path';
|
|
4
4
|
import { homedir, tmpdir } from 'node:os';
|
|
5
5
|
import { EMPTY_TRANSCRIPT } from '../types.js';
|
|
6
6
|
import { isMtimeFresh, getMtimeState } from '../utils/cache.js';
|
|
7
7
|
import { sanitizeTermString } from '../normalize.js';
|
|
8
|
+
import { isUnderAllowedRoot } from '../utils/path.js';
|
|
8
9
|
import { debug } from '../utils/debug.js';
|
|
9
10
|
const log = debug('transcript');
|
|
11
|
+
// Full re-parse on cache miss is intentional. Incremental byte-offset parsing
|
|
12
|
+
// was evaluated and rejected (see #43): real transcripts are low-thousands of
|
|
13
|
+
// lines, parse cost stays under the statusline budget, and stateful
|
|
14
|
+
// accumulation breaks under concurrent ticks, file replacement (TOCTOU), and
|
|
15
|
+
// TaskUpdate's numeric-taskId index semantics. Each call uses local maps
|
|
16
|
+
// (toolMap, agentMap, todos below) — that locality is what keeps the parser
|
|
17
|
+
// concurrent-tick safe. Don't refactor it into shared mutable state.
|
|
18
|
+
//
|
|
19
|
+
// LRU bound: long-running shells switch transcript paths across sessions, so
|
|
20
|
+
// the cache would otherwise grow one entry per session forever (#69). Map
|
|
21
|
+
// iteration order is insertion order, which gives us a free LRU: re-insert
|
|
22
|
+
// on hit to refresh recency, drop the first key when size > cap.
|
|
23
|
+
export const TRANSCRIPT_CACHE_CAP = 10;
|
|
10
24
|
const transcriptCache = new Map();
|
|
11
|
-
|
|
25
|
+
// Shallow clone of TranscriptData so callers can't mutate the cached arrays.
|
|
26
|
+
// IMPORTANT: this is *shallow*. Caller can still mutate per-entry fields
|
|
27
|
+
// (e.g. `result.tools[0].status = 'evil'`) and corrupt the cache. All current
|
|
28
|
+
// renderers (src/render/line1.ts, line3.ts, powerline-line1.ts,
|
|
29
|
+
// powerline-line3.ts) treat entries as read-only — verified by review. If a
|
|
30
|
+
// future consumer mutates per-entry fields, switch to Object.freeze on each
|
|
31
|
+
// entry or to a structuredClone.
|
|
32
|
+
function cloneShallow(result) {
|
|
33
|
+
return {
|
|
34
|
+
...result,
|
|
35
|
+
tools: result.tools.slice(),
|
|
36
|
+
agents: result.agents.slice(),
|
|
37
|
+
todos: result.todos.slice(),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function touchCache(key, value) {
|
|
41
|
+
if (transcriptCache.has(key))
|
|
42
|
+
transcriptCache.delete(key);
|
|
43
|
+
transcriptCache.set(key, value);
|
|
44
|
+
// Size briefly hits CAP+1 between set() above and delete() below, but
|
|
45
|
+
// touchCache is synchronous — no await boundary exists here, so no other
|
|
46
|
+
// code can observe that window. Each call leaves the map at or below cap.
|
|
47
|
+
if (transcriptCache.size > TRANSCRIPT_CACHE_CAP) {
|
|
48
|
+
const oldest = transcriptCache.keys().next().value;
|
|
49
|
+
if (oldest !== undefined)
|
|
50
|
+
transcriptCache.delete(oldest);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Test-only inspectors. Underscore prefix signals "internal" — do not call
|
|
54
|
+
// from production code paths.
|
|
55
|
+
export function _transcriptCacheSize() {
|
|
56
|
+
return transcriptCache.size;
|
|
57
|
+
}
|
|
58
|
+
export function _transcriptCacheKeys() {
|
|
59
|
+
return Array.from(transcriptCache.keys());
|
|
60
|
+
}
|
|
61
|
+
export function _clearTranscriptCache() {
|
|
62
|
+
transcriptCache.clear();
|
|
63
|
+
}
|
|
64
|
+
export const MAX_LINES = 50_000;
|
|
65
|
+
// Warn-once flag for the MAX_LINES truncation path (#70). Long-running sessions
|
|
66
|
+
// that produce >50k JSONL lines silently lose data after the cap; flagging once
|
|
67
|
+
// per process surfaces the condition in `LUMIRA_DEBUG=1` logs and lets tests
|
|
68
|
+
// observe it. We set the flag regardless of `log.enabled` so the diagnostic is
|
|
69
|
+
// available even when debug logging is off.
|
|
70
|
+
let truncationWarned = false;
|
|
71
|
+
export function _truncationWarned() {
|
|
72
|
+
return truncationWarned;
|
|
73
|
+
}
|
|
74
|
+
export function _resetTruncationWarned() {
|
|
75
|
+
truncationWarned = false;
|
|
76
|
+
}
|
|
12
77
|
export function normalizeTodoStatus(status) {
|
|
13
78
|
if (!status)
|
|
14
79
|
return 'pending';
|
|
@@ -40,23 +105,59 @@ export function extractToolTarget(toolName, input) {
|
|
|
40
105
|
})();
|
|
41
106
|
return typeof raw === 'string' ? sanitizeTermString(raw) : raw;
|
|
42
107
|
}
|
|
108
|
+
// Allowed roots, snapshotted once at module load. We include both the
|
|
109
|
+
// as-returned form and the realpath form of homedir()/tmpdir() so platforms
|
|
110
|
+
// like macOS work transparently — `os.tmpdir()` returns `/var/folders/...`
|
|
111
|
+
// while the kernel realpath is `/private/var/folders/...`. Either form on
|
|
112
|
+
// the candidate side will match.
|
|
113
|
+
//
|
|
114
|
+
// We deliberately do NOT realpath the candidate path inside parseTranscript:
|
|
115
|
+
// (a) it would 5–10× the syscalls on the cache hit path, and
|
|
116
|
+
// (b) it would break legitimate user setups like `~/.claude → /data/claude`,
|
|
117
|
+
// where the canonical target sits outside `homedir()`.
|
|
118
|
+
// Symlink-traversal hardening (defense against attacker-placed symlinks
|
|
119
|
+
// under an allowed root pointing at /etc/passwd) is tracked separately;
|
|
120
|
+
// the threat is narrow because `transcript_path` arrives from Claude Code
|
|
121
|
+
// itself, not arbitrary external input.
|
|
122
|
+
function realpathSafe(p) {
|
|
123
|
+
try {
|
|
124
|
+
return realpathSync(p);
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return resolve(p);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const ALLOWED_ROOTS = [
|
|
131
|
+
...new Set([
|
|
132
|
+
resolve(homedir()),
|
|
133
|
+
resolve(tmpdir()),
|
|
134
|
+
realpathSafe(homedir()),
|
|
135
|
+
realpathSafe(tmpdir()),
|
|
136
|
+
]),
|
|
137
|
+
];
|
|
43
138
|
export async function parseTranscript(transcriptPath) {
|
|
44
139
|
const result = { ...EMPTY_TRANSCRIPT, tools: [], agents: [], todos: [] };
|
|
45
140
|
if (!transcriptPath || !existsSync(transcriptPath)) {
|
|
46
141
|
if (log.enabled)
|
|
47
142
|
log('skip — transcript path missing or nonexistent:', transcriptPath || '(empty)');
|
|
143
|
+
// File may have been deleted/rotated between calls — drop any stale entry
|
|
144
|
+
// so the LRU slot doesn't pin an inaccessible path.
|
|
145
|
+
if (transcriptPath)
|
|
146
|
+
transcriptCache.delete(resolve(transcriptPath));
|
|
48
147
|
return result;
|
|
49
148
|
}
|
|
50
149
|
const resolved = resolve(transcriptPath);
|
|
51
|
-
if (!resolved
|
|
150
|
+
if (!isUnderAllowedRoot(resolved, ALLOWED_ROOTS)) {
|
|
52
151
|
log('skip — path outside allowed roots:', resolved);
|
|
152
|
+
transcriptCache.delete(resolved);
|
|
53
153
|
return result;
|
|
54
154
|
}
|
|
55
|
-
const currentMtime = getMtimeState(
|
|
155
|
+
const currentMtime = getMtimeState(resolved);
|
|
56
156
|
const cached = transcriptCache.get(resolved);
|
|
57
|
-
if (currentMtime && cached && isMtimeFresh(
|
|
157
|
+
if (currentMtime && cached && isMtimeFresh(resolved, cached.mtime)) {
|
|
58
158
|
log('cache hit:', resolved);
|
|
59
|
-
|
|
159
|
+
touchCache(resolved, cached);
|
|
160
|
+
return cloneShallow(cached.result);
|
|
60
161
|
}
|
|
61
162
|
const parseStart = log.enabled ? Date.now() : 0;
|
|
62
163
|
const toolMap = new Map();
|
|
@@ -66,14 +167,19 @@ export async function parseTranscript(transcriptPath) {
|
|
|
66
167
|
let thinkingEffort = '';
|
|
67
168
|
let fileStream = null;
|
|
68
169
|
try {
|
|
69
|
-
fileStream = createReadStream(
|
|
170
|
+
fileStream = createReadStream(resolved);
|
|
70
171
|
const rl = createInterface({ input: fileStream, crlfDelay: Infinity });
|
|
71
172
|
let lineCount = 0;
|
|
72
173
|
for await (const line of rl) {
|
|
73
174
|
if (!line.trim())
|
|
74
175
|
continue;
|
|
75
|
-
if (++lineCount > MAX_LINES)
|
|
176
|
+
if (++lineCount > MAX_LINES) {
|
|
177
|
+
if (!truncationWarned) {
|
|
178
|
+
truncationWarned = true;
|
|
179
|
+
log(`warn — transcript exceeded MAX_LINES (${MAX_LINES}), output may be stale`);
|
|
180
|
+
}
|
|
76
181
|
break;
|
|
182
|
+
}
|
|
77
183
|
try {
|
|
78
184
|
const entry = JSON.parse(line);
|
|
79
185
|
if (!result.sessionStart && entry.timestamp)
|
|
@@ -160,7 +266,7 @@ export async function parseTranscript(transcriptPath) {
|
|
|
160
266
|
result.todos = todos;
|
|
161
267
|
result.thinkingEffort = thinkingEffort;
|
|
162
268
|
if (currentMtime) {
|
|
163
|
-
|
|
269
|
+
touchCache(resolved, { result, mtime: currentMtime });
|
|
164
270
|
}
|
|
165
271
|
if (log.enabled) {
|
|
166
272
|
log('parsed', resolved, {
|
|
@@ -171,6 +277,6 @@ export async function parseTranscript(transcriptPath) {
|
|
|
171
277
|
durationMs: Date.now() - parseStart,
|
|
172
278
|
});
|
|
173
279
|
}
|
|
174
|
-
return result;
|
|
280
|
+
return cloneShallow(result);
|
|
175
281
|
}
|
|
176
282
|
//# sourceMappingURL=transcript.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../src/parsers/transcript.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../src/parsers/transcript.ts"],"names":[],"mappings":"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"}
|
package/dist/render/colors.d.ts
CHANGED
|
@@ -16,5 +16,17 @@ export interface Colors {
|
|
|
16
16
|
export declare function createColors(mode: ColorMode, theme?: import('../themes.js').ThemePalette | null): Colors;
|
|
17
17
|
export declare function stripAnsi(str: string): string;
|
|
18
18
|
export declare function detectColorMode(): ColorMode;
|
|
19
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Map a context-fill percentage to its alarm color.
|
|
21
|
+
*
|
|
22
|
+
* Zones (with default 70/85): green<50, yellow 50–70, orange 70–85, red 85+.
|
|
23
|
+
*
|
|
24
|
+
* **Asymmetry by design:** the green→yellow boundary is fixed at 50%, the
|
|
25
|
+
* "universally healthy" mark. So if a user sets `warning ≤ 50`, the yellow
|
|
26
|
+
* zone collapses entirely and the bar jumps green→orange at `warning`. That's
|
|
27
|
+
* consistent with the field's contract ("percentage at which the bar turns
|
|
28
|
+
* orange") — yellow is just a soft pre-alarm buffer that only exists when
|
|
29
|
+
* there's room for it between 50 and `warning`.
|
|
30
|
+
*/
|
|
31
|
+
export declare function getContextColor(pct: number, warning?: number, critical?: number): ColorName;
|
|
20
32
|
export declare function getQuotaColor(pct: number): ColorName;
|