lumira 0.2.4 → 0.3.1

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.
Files changed (46) hide show
  1. package/README.md +20 -6
  2. package/dist/config.d.ts +7 -0
  3. package/dist/config.js +36 -3
  4. package/dist/config.js.map +1 -1
  5. package/dist/index.js +8 -3
  6. package/dist/index.js.map +1 -1
  7. package/dist/installer-wizard.d.ts +21 -0
  8. package/dist/installer-wizard.js +74 -0
  9. package/dist/installer-wizard.js.map +1 -0
  10. package/dist/installer.d.ts +10 -0
  11. package/dist/installer.js +149 -16
  12. package/dist/installer.js.map +1 -1
  13. package/dist/normalize.d.ts +70 -0
  14. package/dist/normalize.js +113 -0
  15. package/dist/normalize.js.map +1 -0
  16. package/dist/parsers/git.js +3 -2
  17. package/dist/parsers/git.js.map +1 -1
  18. package/dist/parsers/token-speed.d.ts +1 -1
  19. package/dist/parsers/token-speed.js +2 -1
  20. package/dist/parsers/token-speed.js.map +1 -1
  21. package/dist/render/index.js +2 -1
  22. package/dist/render/index.js.map +1 -1
  23. package/dist/render/line1.js +19 -18
  24. package/dist/render/line1.js.map +1 -1
  25. package/dist/render/line2.js +32 -30
  26. package/dist/render/line2.js.map +1 -1
  27. package/dist/render/minimal.js +29 -26
  28. package/dist/render/minimal.js.map +1 -1
  29. package/dist/render/shared.d.ts +2 -1
  30. package/dist/render/shared.js +18 -4
  31. package/dist/render/shared.js.map +1 -1
  32. package/dist/render/text.js +21 -13
  33. package/dist/render/text.js.map +1 -1
  34. package/dist/tui/banner.d.ts +10 -0
  35. package/dist/tui/banner.js +42 -0
  36. package/dist/tui/banner.js.map +1 -0
  37. package/dist/tui/preview.d.ts +12 -0
  38. package/dist/tui/preview.js +115 -0
  39. package/dist/tui/preview.js.map +1 -0
  40. package/dist/tui/select.d.ts +32 -0
  41. package/dist/tui/select.js +107 -0
  42. package/dist/tui/select.js.map +1 -0
  43. package/dist/types.d.ts +84 -5
  44. package/dist/types.js.map +1 -1
  45. package/package.json +1 -1
  46. package/skills/lumira/SKILL.md +9 -0
@@ -0,0 +1,70 @@
1
+ import type { QwenInput, RawInput } from './types.js';
2
+ export declare function isQwenInput(input: RawInput): input is QwenInput;
3
+ export type Platform = 'claude-code' | 'qwen-code';
4
+ export interface NormalizedInput {
5
+ /** Which platform sent the data */
6
+ platform: Platform;
7
+ /** Model display name */
8
+ model: string;
9
+ /** Session identifier */
10
+ sessionId: string;
11
+ /** App version */
12
+ version?: string;
13
+ /** Current working directory */
14
+ cwd: string;
15
+ /** Unified token counts */
16
+ tokens: {
17
+ input: number;
18
+ output: number;
19
+ cached?: number;
20
+ thoughts?: number;
21
+ };
22
+ /** Context window usage */
23
+ context: {
24
+ usedPercentage: number;
25
+ windowSize?: number;
26
+ };
27
+ /** Cost in USD (Claude only) */
28
+ cost?: number;
29
+ /** Session duration in ms (Claude only) */
30
+ durationMs?: number;
31
+ /** API performance metrics (Qwen only) */
32
+ performance?: {
33
+ requests: number;
34
+ errors: number;
35
+ latencyMs: number;
36
+ };
37
+ /** Git branch (Qwen native, Claude via git status) */
38
+ gitBranch?: string;
39
+ /** File change stats */
40
+ linesAdded: number;
41
+ linesRemoved: number;
42
+ /** Vim mode if active */
43
+ vimMode?: string;
44
+ /** Session name */
45
+ sessionName?: string;
46
+ /** Output style name */
47
+ outputStyle?: string;
48
+ /** Agent name */
49
+ agentName?: string;
50
+ /** Worktree name */
51
+ worktreeName?: string;
52
+ /** Rate limits (Claude only) */
53
+ rateLimits?: {
54
+ fiveHour?: {
55
+ usedPercentage: number;
56
+ resetsAt?: number;
57
+ };
58
+ sevenDay?: {
59
+ usedPercentage: number;
60
+ resetsAt?: number;
61
+ };
62
+ };
63
+ /** Cache hit rate percentage (Claude only) */
64
+ cacheHitRate?: number;
65
+ /** Escape hatch: access raw platform data for platform-specific widgets */
66
+ raw: RawInput;
67
+ }
68
+ /** Strip terminal control characters (C0 + C1 + DEL) from untrusted strings */
69
+ export declare function sanitizeTermString(s: string): string;
70
+ export declare function normalize(input: RawInput): NormalizedInput;
@@ -0,0 +1,113 @@
1
+ // ── Normalized statusline input ─────────────────────────────────────
2
+ //
3
+ // Single internal format that all renderers can consume.
4
+ // Platform-specific quirks are handled once here.
5
+ // Renderers check field presence, not platform identity.
6
+ export function isQwenInput(input) {
7
+ const raw = input;
8
+ if (!raw.metrics || typeof raw.metrics !== 'object' || !('models' in raw.metrics))
9
+ return false;
10
+ const models = raw.metrics.models;
11
+ if (!models || typeof models !== 'object')
12
+ return false;
13
+ const first = Object.values(models)[0];
14
+ return first != null && typeof first === 'object' && 'api' in first;
15
+ }
16
+ /** Strip terminal control characters (C0 + C1 + DEL) from untrusted strings */
17
+ export function sanitizeTermString(s) {
18
+ return s.replace(/[\x00-\x1f\x7f-\x9f]/g, '');
19
+ }
20
+ export function normalize(input) {
21
+ const platform = isQwenInput(input) ? 'qwen-code' : 'claude-code';
22
+ const qwen = isQwenInput(input) ? input : null;
23
+ const claude = isQwenInput(input) ? null : input;
24
+ // Model name with null guard for malformed input
25
+ const modelName = typeof input.model === 'string'
26
+ ? input.model
27
+ : (input.model?.display_name ?? '');
28
+ const cwd = input.cwd || input.workspace?.current_dir || process.cwd();
29
+ // Token unification
30
+ const inputTokens = input.context_window.total_input_tokens ?? 0;
31
+ const outputTokens = input.context_window.total_output_tokens ?? 0;
32
+ let cached;
33
+ let thoughts;
34
+ const modelEntries = qwen ? Object.values(qwen.metrics.models) : [];
35
+ const first = modelEntries[0];
36
+ if (qwen) {
37
+ if (first) {
38
+ cached = first.tokens?.cached;
39
+ thoughts = first.tokens?.thoughts;
40
+ }
41
+ }
42
+ else if (claude) {
43
+ cached = claude.context_window?.cache_read_input_tokens;
44
+ }
45
+ // Performance (Qwen only)
46
+ let performance;
47
+ if (qwen && first?.api) {
48
+ performance = {
49
+ requests: first.api.total_requests,
50
+ errors: first.api.total_errors,
51
+ latencyMs: first.api.total_latency_ms,
52
+ };
53
+ }
54
+ // Lines changed
55
+ let linesAdded = 0;
56
+ let linesRemoved = 0;
57
+ if (qwen) {
58
+ linesAdded = qwen.metrics.files?.total_lines_added ?? 0;
59
+ linesRemoved = qwen.metrics.files?.total_lines_removed ?? 0;
60
+ }
61
+ else if (claude) {
62
+ linesAdded = claude.cost?.total_lines_added ?? 0;
63
+ linesRemoved = claude.cost?.total_lines_removed ?? 0;
64
+ }
65
+ // Rate limits (Claude only)
66
+ let rateLimits;
67
+ if (claude?.rate_limits) {
68
+ rateLimits = {
69
+ fiveHour: claude.rate_limits.five_hour
70
+ ? { usedPercentage: claude.rate_limits.five_hour.used_percentage, resetsAt: claude.rate_limits.five_hour.resets_at }
71
+ : undefined,
72
+ sevenDay: claude.rate_limits.seven_day
73
+ ? { usedPercentage: claude.rate_limits.seven_day.used_percentage, resetsAt: claude.rate_limits.seven_day.resets_at }
74
+ : undefined,
75
+ };
76
+ }
77
+ // Cache hit rate (Claude only)
78
+ const cacheHitRate = (cached != null && inputTokens > 0 && platform === 'claude-code')
79
+ ? Math.round((cached / inputTokens) * 100)
80
+ : undefined;
81
+ return {
82
+ platform,
83
+ model: sanitizeTermString(modelName),
84
+ sessionId: sanitizeTermString(input.session_id),
85
+ version: input.version ? sanitizeTermString(input.version) : undefined,
86
+ cwd: sanitizeTermString(cwd),
87
+ tokens: {
88
+ input: inputTokens,
89
+ output: outputTokens,
90
+ cached,
91
+ thoughts,
92
+ },
93
+ context: {
94
+ usedPercentage: input.context_window.used_percentage,
95
+ windowSize: qwen ? qwen.context_window.context_window_size : undefined,
96
+ },
97
+ cost: claude ? claude.cost?.total_cost_usd : undefined,
98
+ durationMs: claude ? claude.cost?.total_duration_ms : undefined,
99
+ performance,
100
+ gitBranch: qwen && qwen.git?.branch ? sanitizeTermString(qwen.git.branch) : undefined,
101
+ linesAdded,
102
+ linesRemoved,
103
+ vimMode: input.vim?.mode ? sanitizeTermString(input.vim.mode) : undefined,
104
+ sessionName: input.session_name ? sanitizeTermString(input.session_name) : undefined,
105
+ outputStyle: input.output_style?.name ? sanitizeTermString(input.output_style.name) : undefined,
106
+ agentName: input.agent?.name ? sanitizeTermString(input.agent.name) : undefined,
107
+ worktreeName: input.worktree?.name ? sanitizeTermString(input.worktree.name) : undefined,
108
+ rateLimits,
109
+ cacheHitRate,
110
+ raw: input,
111
+ };
112
+ }
113
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"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"}
@@ -12,9 +12,10 @@ export async function parseGitStatus(cwd, exec = safeExec) {
12
12
  const cached = readTtlCache(key, tmpdir(), GIT_CACHE_TTL);
13
13
  if (cached)
14
14
  return cached;
15
- const branch = await exec('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd, timeoutMs: 2000 });
16
- if (!branch)
15
+ const rawBranch = await exec('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd, timeoutMs: 2000 });
16
+ if (!rawBranch)
17
17
  return EMPTY_GIT;
18
+ const branch = rawBranch.replace(/[\x00-\x1f\x7f-\x9f]/g, '');
18
19
  const result = { branch, staged: 0, modified: 0, untracked: 0 };
19
20
  const status = await exec('git', ['status', '--porcelain'], { cwd, timeoutMs: 2000 });
20
21
  if (status) {
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/parsers/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAoB,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,OAAe,QAAQ;IACvE,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,YAAY,CAAY,GAAG,EAAE,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC;IACrE,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClG,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAE9B,MAAM,MAAM,GAAc,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAC3E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtF,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,wEAAwE;QACxE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;QACvE,8CAA8C;QAC9C,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;QACzE,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IAClE,CAAC;IAED,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/parsers/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAoB,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,OAAe,QAAQ;IACvE,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,YAAY,CAAY,GAAG,EAAE,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC;IACrE,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrG,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACjC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;IAE9D,MAAM,MAAM,GAAc,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAC3E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtF,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,wEAAwE;QACxE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;QACvE,8CAA8C;QAC9C,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;QACzE,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IAClE,CAAC;IAED,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  interface ContextWindow {
2
2
  used_percentage: number;
3
3
  remaining_percentage: number;
4
- current_usage?: {
4
+ current_usage?: number | {
5
5
  output_tokens: number;
6
6
  };
7
7
  }
@@ -2,7 +2,8 @@ import { readTtlCache, writeTtlCache } from '../utils/cache.js';
2
2
  import { tmpdir } from 'node:os';
3
3
  const SPEED_CACHE_TTL = 2000;
4
4
  export function getTokenSpeed(contextWindow, cacheDir = tmpdir()) {
5
- const outputTokens = contextWindow?.current_usage?.output_tokens;
5
+ const cu = contextWindow?.current_usage;
6
+ const outputTokens = typeof cu === "number" ? cu : cu?.output_tokens;
6
7
  if (typeof outputTokens !== 'number' || !Number.isFinite(outputTokens))
7
8
  return null;
8
9
  const now = Date.now();
@@ -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;AAI7B,MAAM,UAAU,aAAa,CAAC,aAA4B,EAAE,WAAmB,MAAM,EAAE;IACrF,MAAM,YAAY,GAAG,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC;IACjE,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
+ {"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;AAK7B,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"}
@@ -9,7 +9,8 @@ export function render(ctx) {
9
9
  const colorMode = ctx.config.colors.mode === 'auto' ? detectColorMode() : ctx.config.colors.mode;
10
10
  const theme = resolveTheme(ctx.config.theme, colorMode);
11
11
  const c = createColors(colorMode, theme);
12
- if (ctx.config.layout === 'singleline' || (ctx.config.layout === 'auto' && ctx.cols < 70)) {
12
+ const isQwen = ctx.input.platform === 'qwen-code';
13
+ if (isQwen || ctx.config.layout === 'singleline' || (ctx.config.layout === 'auto' && ctx.cols < 70)) {
13
14
  return renderMinimal(ctx, c);
14
15
  }
15
16
  const lines = [];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAkB,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,UAAU,MAAM,CAAC,GAAkB;IACvC,MAAM,SAAS,GAAc,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAC5G,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACxD,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAEzC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,YAAY,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC;QAC1F,OAAO,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/B,IAAI,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvB,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAAC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAAC,IAAI,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;IAC/E,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAkB,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,UAAU,MAAM,CAAC,GAAkB;IACvC,MAAM,SAAS,GAAc,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAC5G,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACxD,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,WAAW,CAAC;IAClD,IAAI,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,YAAY,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC;QACpG,OAAO,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/B,IAAI,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvB,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAAC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAAC,IAAI,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;IAC/E,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC"}
@@ -11,15 +11,16 @@ export function renderLine1(ctx, c) {
11
11
  const right = [];
12
12
  // Model
13
13
  if (display.model) {
14
- const modelName = getModelName(input.model);
14
+ const modelName = getModelName(input.raw.model);
15
15
  if (modelName)
16
16
  left.push(c.cyan(`${icons.model} ${modelName}`));
17
17
  }
18
- // Branch + git changes
19
- if (display.branch && git.branch) {
20
- const branchLen = cols < 60 ? 12 : cols < 80 ? 20 : cols < 100 ? 30 : cols < 120 ? 40 : 60;
21
- const branchName = truncField(git.branch, branchLen);
22
- let branchStr = c.magenta(`${icons.branch} ${branchName}`);
18
+ // Branch + git changes (prefer Qwen's native git.branch, fallback to external git)
19
+ const branchName = input.gitBranch || git.branch;
20
+ if (display.branch && branchName) {
21
+ const branchLen = cols < 60 ? 20 : cols < 80 ? 35 : cols < 100 ? 50 : cols < 120 ? 70 : 80;
22
+ const bName = truncField(branchName, branchLen);
23
+ let branchStr = c.magenta(`${icons.branch} ${bName}`);
23
24
  if (display.gitChanges) {
24
25
  const parts = formatGitChanges(git, c);
25
26
  if (parts.length > 0)
@@ -29,7 +30,7 @@ export function renderLine1(ctx, c) {
29
30
  }
30
31
  // Directory
31
32
  if (display.directory) {
32
- const cwd = input.cwd || input.workspace?.current_dir || '';
33
+ const cwd = input.cwd;
33
34
  if (cwd) {
34
35
  const dirName = basename(cwd) || cwd;
35
36
  const dirLen = cols < 80 ? 12 : cols < 120 ? 20 : 30;
@@ -37,9 +38,9 @@ export function renderLine1(ctx, c) {
37
38
  }
38
39
  }
39
40
  // Lines changed (right side)
40
- if (display.linesChanged && input.cost) {
41
- const added = input.cost.total_lines_added ?? 0;
42
- const removed = input.cost.total_lines_removed ?? 0;
41
+ if (display.linesChanged) {
42
+ const added = input.linesAdded;
43
+ const removed = input.linesRemoved;
43
44
  if (added > 0 || removed > 0) {
44
45
  right.push(`${c.green(`+${added}`)} ${c.red(`-${removed}`)}`);
45
46
  }
@@ -50,20 +51,20 @@ export function renderLine1(ctx, c) {
50
51
  right.push(c.yellow(truncField(activeTask, 30)));
51
52
  }
52
53
  // Worktree
53
- if (display.worktree && input.worktree?.name) {
54
- right.push(c.gray(`${icons.tree} ${truncField(input.worktree.name, 15)}`));
54
+ if (display.worktree && input.raw.worktree?.name) {
55
+ right.push(c.gray(`${icons.tree} ${truncField(input.raw.worktree.name, 15)}`));
55
56
  }
56
57
  // Agent
57
- if (display.agent && input.agent?.name) {
58
- right.push(c.gray(`${icons.cubes} ${truncField(input.agent.name, 15)}`));
58
+ if (display.agent && input.raw.agent?.name) {
59
+ right.push(c.gray(`${icons.cubes} ${truncField(input.raw.agent.name, 15)}`));
59
60
  }
60
61
  // Session name
61
- if (display.sessionName && input.session_name) {
62
- right.push(c.dim(truncField(input.session_name, 20)));
62
+ if (display.sessionName && input.raw.session_name) {
63
+ right.push(c.dim(truncField(input.raw.session_name, 20)));
63
64
  }
64
65
  // Style
65
- if (display.style && input.output_style?.name) {
66
- right.push(c.gray(input.output_style.name));
66
+ if (display.style && input.raw.output_style?.name) {
67
+ right.push(c.gray(input.raw.output_style.name));
67
68
  }
68
69
  // Version
69
70
  if (display.version && input.version) {
@@ -1 +1 @@
1
- {"version":3,"file":"line1.js","sourceRoot":"","sources":["../../src/render/line1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAIlE,SAAS,aAAa,CAAC,UAA0B;IAC/C,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;IAC5E,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAkB,EAAE,CAAS;IACvD,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;IACzE,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,QAAQ;IACR,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,uBAAuB;IACvB,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACrD,IAAI,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC,CAAC;QAE3D,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACvC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAED,YAAY;IACZ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,WAAW,IAAI,EAAE,CAAC;QAC5D,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;YACrC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,IAAI,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,CAAC;QACpD,IAAI,KAAK,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,WAAW;IACX,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,QAAQ;IACR,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,eAAe;IACf,IAAI,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,QAAQ;IACR,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,UAAU;IACV,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACvD,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"line1.js","sourceRoot":"","sources":["../../src/render/line1.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { padLine } from './text.js';
2
2
  import { getQuotaColor } from './colors.js';
3
- import { buildContextBar, SEP } from './shared.js';
3
+ import { buildContextBar, formatQwenMetrics, SEP } from './shared.js';
4
4
  import { formatTokens, formatDuration, formatCost, formatBurnRate } from '../utils/format.js';
5
5
  export function formatCountdown(resetsAt) {
6
6
  const resetsAtMs = resetsAt < 1e12 ? resetsAt * 1000 : resetsAt;
@@ -23,50 +23,50 @@ export function renderLine2(ctx, c) {
23
23
  const rightParts = [];
24
24
  // Context bar
25
25
  if (display.contextBar) {
26
- const pct = input.context_window.used_percentage;
26
+ const pct = input.context.usedPercentage;
27
27
  leftParts.push(buildContextBar(pct, c, { iconSet: icons }));
28
28
  }
29
29
  // Context tokens (estimated used/capacity from percentage)
30
- if (display.contextTokens && input.context_window.total_input_tokens != null && input.context_window.used_percentage > 0) {
31
- const used = input.context_window.total_input_tokens;
32
- const capacity = Math.round(used / (input.context_window.used_percentage / 100));
30
+ if (display.contextTokens && input.tokens.input > 0 && input.context.usedPercentage > 0) {
31
+ const used = input.tokens.input;
32
+ const capacity = Math.round(used / (input.context.usedPercentage / 100));
33
33
  leftParts.push(c.dim(`${formatTokens(used)}/${formatTokens(capacity)}`));
34
34
  }
35
35
  // Tokens
36
36
  if (display.tokens) {
37
- const inTokens = input.context_window.total_input_tokens;
38
- const outTokens = input.context_window.total_output_tokens;
37
+ const inTokens = input.tokens.input;
38
+ const outTokens = input.tokens.output;
39
39
  const parts = [];
40
- if (inTokens != null)
40
+ if (inTokens > 0)
41
41
  parts.push(`${formatTokens(inTokens)}↑`);
42
- if (outTokens != null)
42
+ if (outTokens > 0)
43
43
  parts.push(`${formatTokens(outTokens)}↓`);
44
44
  if (parts.length > 0)
45
45
  leftParts.push(`${icons.comment} ${parts.join(' ')}`);
46
46
  }
47
47
  // Cache metrics (hit rate)
48
48
  if (display.cacheMetrics) {
49
- const cacheRead = input.context_window.cache_read_input_tokens;
50
- const totalIn = input.context_window.total_input_tokens;
51
- if (cacheRead != null && totalIn != null && totalIn > 0) {
49
+ const cacheRead = input.tokens.cached;
50
+ const totalIn = input.tokens.input;
51
+ if (cacheRead != null && totalIn > 0) {
52
52
  const hitRate = Math.round((cacheRead / totalIn) * 100);
53
53
  leftParts.push(c.dim(`cache ${hitRate}%`));
54
54
  }
55
55
  }
56
- // Cost + burn rate
57
- if (display.cost && input.cost) {
58
- const costStr = formatCost(input.cost.total_cost_usd);
56
+ // Cost + burn rate (Claude only — Qwen doesn't send cost data)
57
+ if (display.cost && input.cost != null) {
58
+ const costStr = formatCost(input.cost);
59
59
  let costPart = costStr;
60
- if (display.burnRate) {
61
- const burn = formatBurnRate(input.cost.total_cost_usd, input.cost.total_duration_ms);
60
+ if (display.burnRate && input.durationMs != null) {
61
+ const burn = formatBurnRate(input.cost, input.durationMs);
62
62
  if (burn)
63
63
  costPart += ` ${c.dim(burn)}`;
64
64
  }
65
65
  leftParts.push(costPart);
66
66
  }
67
- // Duration
68
- if (display.duration && input.cost) {
69
- leftParts.push(`${icons.clock} ${formatDuration(input.cost.total_duration_ms)}`);
67
+ // Duration (Claude only)
68
+ if (display.duration && input.durationMs != null) {
69
+ leftParts.push(`${icons.clock} ${formatDuration(input.durationMs)}`);
70
70
  }
71
71
  // Memory
72
72
  if (display.memory && memory) {
@@ -83,23 +83,25 @@ export function renderLine2(ctx, c) {
83
83
  leftParts.push(c.dim(`MCP ${total}`));
84
84
  }
85
85
  }
86
+ // Qwen metrics (shared helper)
87
+ leftParts.push(...formatQwenMetrics(input, c, icons));
86
88
  // Token speed
87
89
  if (display.tokenSpeed && tokenSpeed != null) {
88
90
  leftParts.push(c.dim(`${icons.bolt}${tokenSpeed} tok/s`));
89
91
  }
90
92
  // Rate limits (only show if >=50%)
91
- if (display.rateLimits && input.rate_limits) {
93
+ if (display.rateLimits && input.rateLimits) {
92
94
  const limits = [
93
- ['5h', input.rate_limits.five_hour],
94
- ['7d', input.rate_limits.seven_day],
95
+ ['5h', input.rateLimits.fiveHour],
96
+ ['7d', input.rateLimits.sevenDay],
95
97
  ];
96
98
  for (const [label, win] of limits) {
97
- if (!win || win.used_percentage < 50)
99
+ if (!win || win.usedPercentage < 50)
98
100
  continue;
99
- const colorFn = c[getQuotaColor(win.used_percentage)];
100
- let limitStr = colorFn(`${icons.bolt} ${win.used_percentage.toFixed(0)}%(${label})`);
101
- if (win.used_percentage >= 70 && win.resets_at) {
102
- const countdown = formatCountdown(win.resets_at);
101
+ const colorFn = c[getQuotaColor(win.usedPercentage)];
102
+ let limitStr = colorFn(`${icons.bolt} ${win.usedPercentage.toFixed(0)}%(${label})`);
103
+ if (win.usedPercentage >= 70 && win.resetsAt) {
104
+ const countdown = formatCountdown(win.resetsAt);
103
105
  if (countdown)
104
106
  limitStr += c.dim(` ${countdown}`);
105
107
  }
@@ -107,8 +109,8 @@ export function renderLine2(ctx, c) {
107
109
  }
108
110
  }
109
111
  // Right side: vim mode
110
- if (display.vim && input.vim?.mode) {
111
- rightParts.push(c.dim(`[${input.vim.mode}]`));
112
+ if (display.vim && input.vimMode) {
113
+ rightParts.push(c.dim(`[${input.vimMode}]`));
112
114
  }
113
115
  // Right side: effort (hidden if medium)
114
116
  if (display.effort && thinkingEffort && thinkingEffort !== 'medium') {
@@ -1 +1 @@
1
- {"version":3,"file":"line2.js","sourceRoot":"","sources":["../../src/render/line2.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"line2.js","sourceRoot":"","sources":["../../src/render/line2.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,23 @@
1
1
  import { basename } from 'node:path';
2
2
  import { truncField } from './text.js';
3
- import { getModelName, buildContextBar, formatGitChanges, SEP_MINIMAL } from './shared.js';
3
+ import { getModelName, buildContextBar, formatGitChanges, formatQwenMetrics, SEP_MINIMAL } from './shared.js';
4
4
  import { formatTokens, formatDuration, formatCost } from '../utils/format.js';
5
5
  import { renderLine3 } from './line3.js';
6
6
  export function renderMinimal(ctx, c) {
7
7
  const { input, git, transcript, tokenSpeed, gsd, config: { display }, cols, icons } = ctx;
8
8
  const parts = [];
9
9
  // Directory
10
- const cwd = input.cwd || input.workspace?.current_dir || '';
10
+ const cwd = input.cwd;
11
11
  if (display.directory && cwd) {
12
12
  const dirName = basename(cwd) || cwd;
13
13
  const dirLen = cols < 60 ? 12 : cols < 80 ? 20 : 30;
14
14
  parts.push(c.brightBlue(truncField(dirName, dirLen)));
15
15
  }
16
16
  // Branch
17
- if (display.branch && git.branch) {
18
- const branchLen = cols < 60 ? 12 : cols < 80 ? 20 : git.branch.length;
19
- let branchStr = c.magenta(truncField(git.branch, branchLen));
17
+ const branchName = input.gitBranch || git.branch;
18
+ if (display.branch && branchName) {
19
+ const branchLen = cols < 60 ? 12 : cols < 80 ? 20 : branchName.length;
20
+ let branchStr = c.magenta(truncField(branchName, branchLen));
20
21
  if (display.gitChanges) {
21
22
  const changeParts = formatGitChanges(git, c);
22
23
  if (changeParts.length > 0)
@@ -26,51 +27,53 @@ export function renderMinimal(ctx, c) {
26
27
  }
27
28
  // Model
28
29
  if (display.model) {
29
- const modelName = getModelName(input.model);
30
+ const modelName = getModelName(input.raw.model);
30
31
  if (modelName)
31
32
  parts.push(c.cyan(truncField(modelName, 20)));
32
33
  }
33
34
  // Context bar
34
35
  if (display.contextBar) {
35
- parts.push(buildContextBar(input.context_window.used_percentage, c, { segments: 10, pctInsideBar: true, iconSet: icons }));
36
+ parts.push(buildContextBar(input.context.usedPercentage, c, { segments: 10, iconSet: icons }));
36
37
  }
37
38
  // Only add these if cols >= 60
38
39
  if (cols >= 60) {
39
40
  // Tokens
40
41
  if (display.tokens) {
41
- const inTokens = input.context_window.total_input_tokens;
42
- const outTokens = input.context_window.total_output_tokens;
42
+ const inTokens = input.tokens.input;
43
+ const outTokens = input.tokens.output;
43
44
  const tParts = [];
44
- if (inTokens != null)
45
+ if (inTokens > 0)
45
46
  tParts.push(`${formatTokens(inTokens)}↑`);
46
- if (outTokens != null)
47
+ if (outTokens > 0)
47
48
  tParts.push(`${formatTokens(outTokens)}↓`);
48
49
  if (tParts.length > 0)
49
50
  parts.push(tParts.join(' '));
50
51
  }
51
- // Cost
52
- if (display.cost && input.cost) {
53
- parts.push(formatCost(input.cost.total_cost_usd));
52
+ // Cost (Claude only)
53
+ if (display.cost && input.cost != null) {
54
+ parts.push(formatCost(input.cost));
54
55
  }
55
- // Duration
56
- if (display.duration && input.cost) {
57
- parts.push(formatDuration(input.cost.total_duration_ms));
56
+ // Duration (Claude only)
57
+ if (display.duration && input.durationMs != null) {
58
+ parts.push(formatDuration(input.durationMs));
58
59
  }
59
60
  // Token speed
60
61
  if (display.tokenSpeed && tokenSpeed != null) {
61
62
  parts.push(c.dim(`${tokenSpeed} tok/s`));
62
63
  }
63
64
  // Lines changed
64
- if (display.linesChanged && input.cost) {
65
- const added = input.cost.total_lines_added ?? 0;
66
- const removed = input.cost.total_lines_removed ?? 0;
65
+ if (display.linesChanged) {
66
+ const added = input.linesAdded;
67
+ const removed = input.linesRemoved;
67
68
  if (added > 0 || removed > 0) {
68
69
  parts.push(`${c.green(`+${added}`)}${c.red(`-${removed}`)}`);
69
70
  }
70
71
  }
72
+ // Qwen metrics (shared helper)
73
+ parts.push(...formatQwenMetrics(input, c, icons));
71
74
  // Style
72
- if (display.style && input.output_style?.name) {
73
- parts.push(c.dim(input.output_style.name));
75
+ if (display.style && input.outputStyle) {
76
+ parts.push(c.dim(input.outputStyle));
74
77
  }
75
78
  // Version
76
79
  if (display.version && input.version) {
@@ -81,12 +84,12 @@ export function renderMinimal(ctx, c) {
81
84
  parts.push(c.yellow(truncField(gsd.currentTask, 20)));
82
85
  }
83
86
  // Worktree
84
- if (display.worktree && input.worktree?.name) {
85
- parts.push(c.dim(`${icons.tree} ${truncField(input.worktree.name, 12)}`));
87
+ if (display.worktree && input.worktreeName) {
88
+ parts.push(c.dim(`${icons.tree} ${truncField(input.worktreeName, 12)}`));
86
89
  }
87
90
  // Agent
88
- if (display.agent && input.agent?.name) {
89
- parts.push(c.dim(`${icons.cubes} ${truncField(input.agent.name, 12)}`));
91
+ if (display.agent && input.agentName) {
92
+ parts.push(c.dim(`${icons.cubes} ${truncField(input.agentName, 12)}`));
90
93
  }
91
94
  }
92
95
  const mainLine = parts.join(SEP_MINIMAL);