@spences10/pi-footer 0.0.1 → 0.0.3

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 (47) hide show
  1. package/README.md +16 -0
  2. package/dist/commands/footer-command.d.ts +3 -0
  3. package/dist/commands/footer-command.js +202 -0
  4. package/dist/commands/footer-command.js.map +1 -0
  5. package/dist/config.d.ts +4 -0
  6. package/dist/config.js +47 -0
  7. package/dist/config.js.map +1 -0
  8. package/dist/extension/install.d.ts +4 -0
  9. package/dist/extension/install.js +21 -0
  10. package/dist/extension/install.js.map +1 -0
  11. package/dist/index.d.ts +7 -5
  12. package/dist/index.js +12 -264
  13. package/dist/index.js.map +1 -1
  14. package/dist/model/footer-model.d.ts +21 -0
  15. package/dist/model/footer-model.js +94 -0
  16. package/dist/model/footer-model.js.map +1 -0
  17. package/dist/model/git.d.ts +11 -0
  18. package/dist/model/git.js +83 -0
  19. package/dist/model/git.js.map +1 -0
  20. package/dist/model/thinking.d.ts +4 -0
  21. package/dist/model/thinking.js +34 -0
  22. package/dist/model/thinking.js.map +1 -0
  23. package/dist/presets/types.d.ts +23 -0
  24. package/dist/presets/types.js +51 -0
  25. package/dist/presets/types.js.map +1 -0
  26. package/dist/reference/research.d.ts +6 -0
  27. package/dist/reference/research.js +50 -0
  28. package/dist/reference/research.js.map +1 -0
  29. package/dist/render/footer-lines.d.ts +4 -0
  30. package/dist/render/footer-lines.js +117 -0
  31. package/dist/render/footer-lines.js.map +1 -0
  32. package/dist/render/preview.d.ts +6 -0
  33. package/dist/render/preview.js +34 -0
  34. package/dist/render/preview.js.map +1 -0
  35. package/dist/render/status-line.d.ts +3 -0
  36. package/dist/render/status-line.js +32 -0
  37. package/dist/render/status-line.js.map +1 -0
  38. package/dist/test-utils.d.ts +5 -0
  39. package/dist/test-utils.js +46 -0
  40. package/dist/test-utils.js.map +1 -0
  41. package/dist/theme/tokens.d.ts +16 -0
  42. package/dist/theme/tokens.js +26 -0
  43. package/dist/theme/tokens.js.map +1 -0
  44. package/dist/utils/text.d.ts +3 -0
  45. package/dist/utils/text.js +23 -0
  46. package/dist/utils/text.js.map +1 -0
  47. package/package.json +6 -6
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EACN,0BAA0B,EAC1B,iCAAiC,GACjC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,cAAc,GAKd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAoB,MAAM,mBAAmB,CAAC;AAEpE,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;AAElC,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAgB;IACxD,uBAAuB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAEnC,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC5C,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC/C,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { ExtensionContext, ReadonlyFooterDataProvider } from '@earendil-works/pi-coding-agent';
2
+ import type { GitIconMode } from '../presets/types.js';
3
+ import { type FooterTheme } from '../theme/tokens.js';
4
+ import { type GitSummary } from './git.js';
5
+ export interface FooterModel {
6
+ cwd: string;
7
+ path_text: string;
8
+ git: GitSummary;
9
+ git_text?: string;
10
+ session_text?: string;
11
+ token_parts: string[];
12
+ cost_text?: string;
13
+ context_text: string;
14
+ model_name: string;
15
+ provider?: string;
16
+ thinking_text?: string;
17
+ model_text: string;
18
+ statuses: Map<string, string>;
19
+ preset_status?: string;
20
+ }
21
+ export declare function build_footer_model(ctx: ExtensionContext, footer_data: ReadonlyFooterDataProvider, theme: FooterTheme, git_icon_mode?: GitIconMode): FooterModel;
@@ -0,0 +1,94 @@
1
+ import { error, warning } from '../theme/tokens.js';
2
+ import { format_token_count } from '../utils/text.js';
3
+ import { format_git_summary, get_git_summary, } from './git.js';
4
+ import { get_current_thinking_level } from './thinking.js';
5
+ export function build_footer_model(ctx, footer_data, theme, git_icon_mode = 'nerd') {
6
+ let total_input = 0;
7
+ let total_output = 0;
8
+ let total_cache_read = 0;
9
+ let total_cache_write = 0;
10
+ let total_cost = 0;
11
+ for (const entry of ctx.sessionManager.getEntries()) {
12
+ if (entry.type === 'message' &&
13
+ entry.message.role === 'assistant') {
14
+ total_input += entry.message.usage.input;
15
+ total_output += entry.message.usage.output;
16
+ total_cache_read += entry.message.usage.cacheRead;
17
+ total_cache_write += entry.message.usage.cacheWrite;
18
+ total_cost += entry.message.usage.cost.total;
19
+ }
20
+ }
21
+ const context_usage = ctx.getContextUsage();
22
+ const context_window = context_usage?.contextWindow ?? ctx.model?.contextWindow ?? 0;
23
+ const context_percent_value = context_usage?.percent ?? 0;
24
+ const context_percent = context_usage?.percent !== null
25
+ ? context_percent_value.toFixed(1)
26
+ : '?';
27
+ let path_text = ctx.cwd;
28
+ const home = process.env.HOME || process.env.USERPROFILE;
29
+ if (home && path_text.startsWith(home)) {
30
+ path_text = `~${path_text.slice(home.length)}`;
31
+ }
32
+ const git_branch = footer_data.getGitBranch() ?? undefined;
33
+ const git = get_git_summary(ctx.cwd, git_branch);
34
+ const git_text = format_git_summary(git, git_icon_mode);
35
+ const session_text = ctx.sessionManager.getSessionName() || undefined;
36
+ const token_parts = [];
37
+ if (total_input)
38
+ token_parts.push(`↑${format_token_count(total_input)}`);
39
+ if (total_output)
40
+ token_parts.push(`↓${format_token_count(total_output)}`);
41
+ if (total_cache_read)
42
+ token_parts.push(`R${format_token_count(total_cache_read)}`);
43
+ if (total_cache_write)
44
+ token_parts.push(`W${format_token_count(total_cache_write)}`);
45
+ const using_subscription = ctx.model
46
+ ? ctx.modelRegistry.isUsingOAuth(ctx.model)
47
+ : false;
48
+ const cost_text = total_cost || using_subscription
49
+ ? `$${total_cost.toFixed(3)}${using_subscription ? ' (sub)' : ''}`
50
+ : undefined;
51
+ const context_percent_display = context_percent === '?'
52
+ ? `?/${format_token_count(context_window)}`
53
+ : `${context_percent}%/${format_token_count(context_window)}`;
54
+ let context_text = context_percent_display;
55
+ if (context_percent_value > 90) {
56
+ context_text = error(theme, context_percent_display);
57
+ }
58
+ else if (context_percent_value > 70) {
59
+ context_text = warning(theme, context_percent_display);
60
+ }
61
+ const model_name = ctx.model?.id || 'no-model';
62
+ const thinking_level = get_current_thinking_level(ctx);
63
+ const thinking_text = ctx.model?.reasoning
64
+ ? thinking_level === 'off'
65
+ ? 'thinking off'
66
+ : thinking_level
67
+ : undefined;
68
+ let model_text = model_name;
69
+ if (thinking_text)
70
+ model_text = `${model_name} • ${thinking_text}`;
71
+ if (footer_data.getAvailableProviderCount() > 1 && ctx.model) {
72
+ model_text = `(${ctx.model.provider}) ${model_text}`;
73
+ }
74
+ const statuses = new Map(footer_data.getExtensionStatuses());
75
+ const preset_status = statuses.get('preset');
76
+ statuses.delete('preset');
77
+ return {
78
+ cwd: ctx.cwd,
79
+ path_text,
80
+ git,
81
+ git_text,
82
+ session_text,
83
+ token_parts,
84
+ cost_text,
85
+ context_text,
86
+ model_name,
87
+ provider: ctx.model?.provider,
88
+ thinking_text,
89
+ model_text,
90
+ statuses,
91
+ preset_status,
92
+ };
93
+ }
94
+ //# sourceMappingURL=footer-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"footer-model.js","sourceRoot":"","sources":["../../src/model/footer-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { GitIconMode } from '../presets/types.js';
2
+ export interface GitSummary {
3
+ branch?: string;
4
+ dirty: number;
5
+ staged: number;
6
+ untracked: number;
7
+ ahead: number;
8
+ behind: number;
9
+ }
10
+ export declare function get_git_summary(cwd: string, branch?: string): GitSummary;
11
+ export declare function format_git_summary(summary: GitSummary, icon_mode?: GitIconMode): string | undefined;
@@ -0,0 +1,83 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ const GIT_ICONS = {
3
+ nerd: {
4
+ branch: ' ',
5
+ dirty: '',
6
+ staged: '',
7
+ untracked: '',
8
+ ahead: '⇡',
9
+ behind: '⇣',
10
+ },
11
+ plain: {
12
+ branch: '',
13
+ dirty: '±',
14
+ staged: '●',
15
+ untracked: '?',
16
+ ahead: '↑',
17
+ behind: '↓',
18
+ },
19
+ };
20
+ export function get_git_summary(cwd, branch) {
21
+ const summary = {
22
+ branch,
23
+ dirty: 0,
24
+ staged: 0,
25
+ untracked: 0,
26
+ ahead: 0,
27
+ behind: 0,
28
+ };
29
+ try {
30
+ const output = execFileSync('git', ['status', '--porcelain=v1', '--branch'], {
31
+ cwd,
32
+ encoding: 'utf8',
33
+ stdio: ['ignore', 'pipe', 'ignore'],
34
+ timeout: 500,
35
+ });
36
+ for (const line of output.split('\n')) {
37
+ if (!line)
38
+ continue;
39
+ if (line.startsWith('## ')) {
40
+ const match = line.match(/^## ([^.\s]+|[^.]+?)(?:\.\.\.)?/);
41
+ if (match?.[1] && !summary.branch)
42
+ summary.branch = match[1];
43
+ const ahead = line.match(/ahead (\d+)/);
44
+ const behind = line.match(/behind (\d+)/);
45
+ summary.ahead = ahead ? Number(ahead[1]) : 0;
46
+ summary.behind = behind ? Number(behind[1]) : 0;
47
+ continue;
48
+ }
49
+ const index_status = line[0];
50
+ const worktree_status = line[1];
51
+ if (line.startsWith('??')) {
52
+ summary.untracked += 1;
53
+ continue;
54
+ }
55
+ if (index_status !== ' ')
56
+ summary.staged += 1;
57
+ if (worktree_status !== ' ')
58
+ summary.dirty += 1;
59
+ }
60
+ }
61
+ catch {
62
+ return summary;
63
+ }
64
+ return summary;
65
+ }
66
+ export function format_git_summary(summary, icon_mode = 'nerd') {
67
+ const icons = GIT_ICONS[icon_mode];
68
+ const parts = [];
69
+ if (summary.branch)
70
+ parts.push(`${icons.branch}${summary.branch}`);
71
+ if (summary.dirty)
72
+ parts.push(`${icons.dirty}${summary.dirty}`);
73
+ if (summary.staged)
74
+ parts.push(`${icons.staged}${summary.staged}`);
75
+ if (summary.untracked)
76
+ parts.push(`${icons.untracked}${summary.untracked}`);
77
+ if (summary.ahead)
78
+ parts.push(`${icons.ahead}${summary.ahead}`);
79
+ if (summary.behind)
80
+ parts.push(`${icons.behind}${summary.behind}`);
81
+ return parts.length > 0 ? parts.join(' ') : undefined;
82
+ }
83
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/model/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type ModelThinkingLevel } from '@earendil-works/pi-ai';
2
+ import type { ExtensionContext } from '@earendil-works/pi-coding-agent';
3
+ export declare function get_default_footer_thinking_level(model: ExtensionContext['model']): ModelThinkingLevel;
4
+ export declare function get_current_thinking_level(ctx: Pick<ExtensionContext, 'model' | 'sessionManager'>): ModelThinkingLevel;
@@ -0,0 +1,34 @@
1
+ import { clampThinkingLevel, getSupportedThinkingLevels, } from '@earendil-works/pi-ai';
2
+ const VALID_THINKING_LEVELS = new Set([
3
+ 'off',
4
+ 'minimal',
5
+ 'low',
6
+ 'medium',
7
+ 'high',
8
+ 'xhigh',
9
+ ]);
10
+ function is_model_thinking_level(level) {
11
+ return VALID_THINKING_LEVELS.has(level);
12
+ }
13
+ export function get_default_footer_thinking_level(model) {
14
+ if (!model?.reasoning)
15
+ return 'off';
16
+ return clampThinkingLevel(model, 'medium');
17
+ }
18
+ export function get_current_thinking_level(ctx) {
19
+ const entries = ctx.sessionManager.getEntries();
20
+ for (let i = entries.length - 1; i >= 0; i--) {
21
+ const entry = entries[i];
22
+ if (entry.type === 'thinking_level_change' &&
23
+ typeof entry.thinkingLevel === 'string' &&
24
+ is_model_thinking_level(entry.thinkingLevel)) {
25
+ if (!ctx.model?.reasoning)
26
+ return 'off';
27
+ return getSupportedThinkingLevels(ctx.model).includes(entry.thinkingLevel)
28
+ ? entry.thinkingLevel
29
+ : clampThinkingLevel(ctx.model, entry.thinkingLevel);
30
+ }
31
+ }
32
+ return get_default_footer_thinking_level(ctx.model);
33
+ }
34
+ //# sourceMappingURL=thinking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thinking.js","sourceRoot":"","sources":["../../src/model/thinking.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,kBAAkB,EAClB,0BAA0B,GAE1B,MAAM,uBAAuB,CAAC;AAG/B,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAqB;IACzD,KAAK;IACL,SAAS;IACT,KAAK;IACL,QAAQ;IACR,MAAM;IACN,OAAO;CACP,CAAC,CAAC;AAEH,SAAS,uBAAuB,CAC/B,KAAa;IAEb,OAAO,qBAAqB,CAAC,GAAG,CAAC,KAA2B,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,iCAAiC,CAChD,KAAgC;IAEhC,IAAI,CAAC,KAAK,EAAE,SAAS;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,0BAA0B,CACzC,GAAuD;IAEvD,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAGtB,CAAC;QACF,IACC,KAAK,CAAC,IAAI,KAAK,uBAAuB;YACtC,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ;YACvC,uBAAuB,CAAC,KAAK,CAAC,aAAa,CAAC,EAC3C,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS;gBAAE,OAAO,KAAK,CAAC;YACxC,OAAO,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CACpD,KAAK,CAAC,aAAa,CACnB;gBACA,CAAC,CAAC,KAAK,CAAC,aAAa;gBACrB,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QACvD,CAAC;IACF,CAAC;IACD,OAAO,iCAAiC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,23 @@
1
+ export declare const FOOTER_PRESETS: readonly ["minimal", "default", "power", "git-heavy"];
2
+ export type FooterPreset = (typeof FOOTER_PRESETS)[number];
3
+ export declare const FOOTER_DENSITIES: readonly ["compact", "comfortable", "expanded"];
4
+ export type FooterDensity = (typeof FOOTER_DENSITIES)[number];
5
+ export declare const STATUS_LABEL_MODES: readonly ["smart", "always", "never"];
6
+ export type StatusLabelMode = (typeof STATUS_LABEL_MODES)[number];
7
+ export declare const FOOTER_TONES: readonly ["muted", "balanced", "bright"];
8
+ export type FooterTone = (typeof FOOTER_TONES)[number];
9
+ export declare const GIT_ICON_MODES: readonly ["nerd", "plain"];
10
+ export type GitIconMode = (typeof GIT_ICON_MODES)[number];
11
+ export declare const FOOTER_WIDGETS: readonly ["path", "git", "session", "model", "thinking", "context", "cost", "tokens", "statuses", "preset"];
12
+ export type FooterWidget = (typeof FOOTER_WIDGETS)[number];
13
+ export type FooterWidgetState = Record<FooterWidget, boolean>;
14
+ export interface FooterState {
15
+ preset: FooterPreset;
16
+ density: FooterDensity;
17
+ status_label_mode: StatusLabelMode;
18
+ tone: FooterTone;
19
+ git_icon_mode: GitIconMode;
20
+ widgets: FooterWidgetState;
21
+ }
22
+ export declare const DEFAULT_FOOTER_WIDGETS: FooterWidgetState;
23
+ export declare const DEFAULT_FOOTER_STATE: FooterState;
@@ -0,0 +1,51 @@
1
+ export const FOOTER_PRESETS = [
2
+ 'minimal',
3
+ 'default',
4
+ 'power',
5
+ 'git-heavy',
6
+ ];
7
+ export const FOOTER_DENSITIES = [
8
+ 'compact',
9
+ 'comfortable',
10
+ 'expanded',
11
+ ];
12
+ export const STATUS_LABEL_MODES = [
13
+ 'smart',
14
+ 'always',
15
+ 'never',
16
+ ];
17
+ export const FOOTER_TONES = ['muted', 'balanced', 'bright'];
18
+ export const GIT_ICON_MODES = ['nerd', 'plain'];
19
+ export const FOOTER_WIDGETS = [
20
+ 'path',
21
+ 'git',
22
+ 'session',
23
+ 'model',
24
+ 'thinking',
25
+ 'context',
26
+ 'cost',
27
+ 'tokens',
28
+ 'statuses',
29
+ 'preset',
30
+ ];
31
+ export const DEFAULT_FOOTER_WIDGETS = {
32
+ path: true,
33
+ git: true,
34
+ session: true,
35
+ model: true,
36
+ thinking: true,
37
+ context: true,
38
+ cost: true,
39
+ tokens: true,
40
+ statuses: true,
41
+ preset: true,
42
+ };
43
+ export const DEFAULT_FOOTER_STATE = {
44
+ preset: 'default',
45
+ density: 'comfortable',
46
+ status_label_mode: 'smart',
47
+ tone: 'muted',
48
+ git_icon_mode: 'nerd',
49
+ widgets: DEFAULT_FOOTER_WIDGETS,
50
+ };
51
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/presets/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,SAAS;IACT,SAAS;IACT,OAAO;IACP,WAAW;CACF,CAAC;AAIX,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC/B,SAAS;IACT,aAAa;IACb,UAAU;CACD,CAAC;AAIX,MAAM,CAAC,MAAM,kBAAkB,GAAG;IACjC,OAAO;IACP,QAAQ;IACR,OAAO;CACE,CAAC;AAIX,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAU,CAAC;AAIrE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,OAAO,CAAU,CAAC;AAIzD,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,MAAM;IACN,KAAK;IACL,SAAS;IACT,OAAO;IACP,UAAU;IACV,SAAS;IACT,MAAM;IACN,QAAQ;IACR,UAAU;IACV,QAAQ;CACC,CAAC;AAeX,MAAM,CAAC,MAAM,sBAAsB,GAAsB;IACxD,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,IAAI;IACT,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,IAAI;CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAChD,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,aAAa;IACtB,iBAAiB,EAAE,OAAO;IAC1B,IAAI,EAAE,OAAO;IACb,aAAa,EAAE,MAAM;IACrB,OAAO,EAAE,sBAAsB;CAC/B,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface FooterReference {
2
+ name: string;
3
+ package_name?: string;
4
+ takeaways: string[];
5
+ }
6
+ export declare const FOOTER_RESEARCH_REFERENCES: FooterReference[];
@@ -0,0 +1,50 @@
1
+ export const FOOTER_RESEARCH_REFERENCES = [
2
+ {
3
+ name: 'pi-footer',
4
+ package_name: 'pi-footer',
5
+ takeaways: [
6
+ 'Config UI with live preview',
7
+ 'Preset and widget model',
8
+ 'Persisted footer configuration',
9
+ ],
10
+ },
11
+ {
12
+ name: 'pi-powerline-footer',
13
+ package_name: 'pi-powerline-footer',
14
+ takeaways: [
15
+ 'Color-coded segment system',
16
+ 'Git and context warning priority',
17
+ 'Opinionated powerline presets',
18
+ ],
19
+ },
20
+ {
21
+ name: '@feniix/pi-statusline',
22
+ package_name: '@feniix/pi-statusline',
23
+ takeaways: [
24
+ 'Fixed two-line statusline',
25
+ 'Activity, skill, and worktree indicators',
26
+ ],
27
+ },
28
+ {
29
+ name: '@sentiolabs/pi-scriptable-statusline',
30
+ package_name: '@sentiolabs/pi-scriptable-statusline',
31
+ takeaways: [
32
+ 'User-owned renderer file',
33
+ 'Reload and doctor commands',
34
+ ],
35
+ },
36
+ {
37
+ name: '@ogulcancelik/pi-minimal-footer',
38
+ package_name: '@ogulcancelik/pi-minimal-footer',
39
+ takeaways: [
40
+ 'Usage and quota bars',
41
+ 'Compact git branch/dirty/ahead/behind display',
42
+ ],
43
+ },
44
+ {
45
+ name: 'pi-ui-minimal',
46
+ package_name: 'pi-ui-minimal',
47
+ takeaways: ['Minimal/focus mode for low-noise sessions'],
48
+ },
49
+ ];
50
+ //# sourceMappingURL=research.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/reference/research.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,0BAA0B,GAAsB;IAC5D;QACC,IAAI,EAAE,WAAW;QACjB,YAAY,EAAE,WAAW;QACzB,SAAS,EAAE;YACV,6BAA6B;YAC7B,yBAAyB;YACzB,gCAAgC;SAChC;KACD;IACD;QACC,IAAI,EAAE,qBAAqB;QAC3B,YAAY,EAAE,qBAAqB;QACnC,SAAS,EAAE;YACV,4BAA4B;YAC5B,kCAAkC;YAClC,+BAA+B;SAC/B;KACD;IACD;QACC,IAAI,EAAE,uBAAuB;QAC7B,YAAY,EAAE,uBAAuB;QACrC,SAAS,EAAE;YACV,2BAA2B;YAC3B,0CAA0C;SAC1C;KACD;IACD;QACC,IAAI,EAAE,sCAAsC;QAC5C,YAAY,EAAE,sCAAsC;QACpD,SAAS,EAAE;YACV,0BAA0B;YAC1B,4BAA4B;SAC5B;KACD;IACD;QACC,IAAI,EAAE,iCAAiC;QACvC,YAAY,EAAE,iCAAiC;QAC/C,SAAS,EAAE;YACV,sBAAsB;YACtB,+CAA+C;SAC/C;KACD;IACD;QACC,IAAI,EAAE,eAAe;QACrB,YAAY,EAAE,eAAe;QAC7B,SAAS,EAAE,CAAC,2CAA2C,CAAC;KACxD;CACD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ExtensionContext, ReadonlyFooterDataProvider } from '@earendil-works/pi-coding-agent';
2
+ import type { FooterState } from '../presets/types.js';
3
+ import { type FooterTheme } from '../theme/tokens.js';
4
+ export declare function render_footer_lines(ctx: ExtensionContext, theme: FooterTheme, footer_data: ReadonlyFooterDataProvider, state: FooterState, width: number): string[];
@@ -0,0 +1,117 @@
1
+ import { truncateToWidth, visibleWidth, } from '@earendil-works/pi-tui';
2
+ import { build_footer_model, } from '../model/footer-model.js';
3
+ import { muted, themed_text, } from '../theme/tokens.js';
4
+ import { sanitize_status_text } from '../utils/text.js';
5
+ import { render_footer_status_line } from './status-line.js';
6
+ function enabled_items(items) {
7
+ return items.filter(([, enabled]) => enabled).map(([text]) => text);
8
+ }
9
+ function render_stats_line(model, theme, state, width) {
10
+ const stats_left = enabled_items([
11
+ [model.token_parts.join(' '), state.widgets.tokens],
12
+ [
13
+ model.cost_text ?? '',
14
+ state.widgets.cost && Boolean(model.cost_text),
15
+ ],
16
+ [model.context_text, state.widgets.context],
17
+ ]).join(' ');
18
+ const right_parts = enabled_items([
19
+ [model.model_name, state.widgets.model],
20
+ [
21
+ model.thinking_text ?? '',
22
+ state.widgets.thinking && Boolean(model.thinking_text),
23
+ ],
24
+ ]);
25
+ const right_side = right_parts.join(' • ');
26
+ if (!stats_left && !right_side)
27
+ return undefined;
28
+ let left = stats_left;
29
+ let left_width = visibleWidth(left);
30
+ if (left_width > width) {
31
+ left = truncateToWidth(left, width, '...');
32
+ left_width = visibleWidth(left);
33
+ }
34
+ if (!right_side)
35
+ return themed_text(theme, state.tone, left);
36
+ if (!left) {
37
+ return truncateToWidth(themed_text(theme, state.tone, right_side), width, muted(theme, '...'));
38
+ }
39
+ const right_width = visibleWidth(right_side);
40
+ const available_for_right = Math.max(0, width - left_width - 2);
41
+ const rendered_right = left_width + 2 + right_width <= width
42
+ ? right_side
43
+ : truncateToWidth(right_side, available_for_right, '');
44
+ const gap = Math.max(1, width - left_width - visibleWidth(rendered_right));
45
+ return (themed_text(theme, state.tone, left) +
46
+ ' '.repeat(gap) +
47
+ themed_text(theme, state.tone, rendered_right));
48
+ }
49
+ function render_status_label(key, text, state) {
50
+ const sanitized = sanitize_status_text(text);
51
+ if (state.status_label_mode === 'never')
52
+ return sanitized;
53
+ if (state.status_label_mode === 'always')
54
+ return `${key}:${sanitized}`;
55
+ if (sanitized.toLowerCase().startsWith(key.toLowerCase()))
56
+ return sanitized;
57
+ return `${key}:${sanitized}`;
58
+ }
59
+ function prioritized_statuses(statuses) {
60
+ const priority = ['mcp', 'team', 'lsp', 'recall', 'nopeek'];
61
+ return Array.from(statuses.entries()).sort(([a], [b]) => {
62
+ const a_index = priority.indexOf(a);
63
+ const b_index = priority.indexOf(b);
64
+ if (a_index !== -1 || b_index !== -1) {
65
+ return ((a_index === -1 ? 99 : a_index) -
66
+ (b_index === -1 ? 99 : b_index));
67
+ }
68
+ return a.localeCompare(b);
69
+ });
70
+ }
71
+ function render_statuses(model, theme, state, width) {
72
+ if (!state.widgets.statuses && !state.widgets.preset)
73
+ return undefined;
74
+ const other_statuses = state.widgets.statuses
75
+ ? prioritized_statuses(model.statuses).map(([key, text]) => render_status_label(key, text, state))
76
+ : [];
77
+ return render_footer_status_line(theme, width, other_statuses, state.widgets.preset ? model.preset_status : undefined, state.tone);
78
+ }
79
+ function render_path_line(model, theme, state, width) {
80
+ const left = enabled_items([
81
+ [model.path_text, state.widgets.path],
82
+ [
83
+ model.git_text ? `(${model.git_text})` : '',
84
+ state.widgets.git && Boolean(model.git_text),
85
+ ],
86
+ ]);
87
+ const right = state.widgets.session
88
+ ? model.session_text
89
+ : undefined;
90
+ return render_footer_status_line(theme, width, left, right, state.tone);
91
+ }
92
+ export function render_footer_lines(ctx, theme, footer_data, state, width) {
93
+ const model = build_footer_model(ctx, footer_data, theme, state.git_icon_mode);
94
+ const lines = [];
95
+ const path_line = render_path_line(model, theme, state, width);
96
+ const stats_line = render_stats_line(model, theme, state, width);
97
+ const status_line = render_statuses(model, theme, state, width);
98
+ if (state.density === 'compact' || state.preset === 'minimal') {
99
+ const compact_left = [path_line, stats_line]
100
+ .filter(Boolean)
101
+ .join(' ');
102
+ const compact = render_footer_status_line(theme, width, [compact_left], status_line, state.tone);
103
+ return compact ? [compact] : [];
104
+ }
105
+ if (path_line)
106
+ lines.push(truncateToWidth(path_line, width, muted(theme, '...')));
107
+ if (stats_line)
108
+ lines.push(truncateToWidth(stats_line, width, muted(theme, '...')));
109
+ if (status_line)
110
+ lines.push(status_line);
111
+ if (state.density === 'expanded' || state.preset === 'power') {
112
+ const footer_mode = themed_text(theme, state.tone, `footer:${state.preset} density:${state.density}`);
113
+ lines.push(truncateToWidth(footer_mode, width, muted(theme, '...')));
114
+ }
115
+ return lines;
116
+ }
117
+ //# sourceMappingURL=footer-lines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"footer-lines.js","sourceRoot":"","sources":["../../src/render/footer-lines.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { FooterModel } from '../model/footer-model.js';
2
+ import type { FooterState } from '../presets/types.js';
3
+ import type { FooterTheme } from '../theme/tokens.js';
4
+ export declare const PREVIEW_WIDTH = 72;
5
+ export declare function make_preview_footer_model(): FooterModel;
6
+ export declare function render_footer_preview(theme: FooterTheme, state: FooterState, width?: number): string[];
@@ -0,0 +1,34 @@
1
+ import { render_model_footer_lines } from './footer-lines.js';
2
+ export const PREVIEW_WIDTH = 72;
3
+ export function make_preview_footer_model() {
4
+ return {
5
+ cwd: '/home/scott/repos/my-pi',
6
+ path_text: '~/repos/my-pi',
7
+ git: {
8
+ branch: 'main',
9
+ dirty: 2,
10
+ staged: 1,
11
+ untracked: 1,
12
+ ahead: 1,
13
+ behind: 0,
14
+ },
15
+ git_text: 'main ±2 ●1 ?1 ↑1',
16
+ session_text: 'footer-preview',
17
+ token_parts: ['↑12k', '↓4.2k', 'R8k'],
18
+ cost_text: '$0.032',
19
+ context_text: '42.0%/200k',
20
+ model_name: 'claude-sonnet',
21
+ provider: 'anthropic',
22
+ thinking_text: 'high',
23
+ model_text: '(anthropic) claude-sonnet • high',
24
+ statuses: new Map([
25
+ ['mcp', 'MCP 6/6 connected'],
26
+ ['lsp', 'LSP ready'],
27
+ ]),
28
+ preset_status: 'prompt:terse +1',
29
+ };
30
+ }
31
+ export function render_footer_preview(theme, state, width = PREVIEW_WIDTH) {
32
+ return render_model_footer_lines(make_preview_footer_model(), theme, state, width);
33
+ }
34
+ //# sourceMappingURL=preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/render/preview.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC;AAEhC,MAAM,UAAU,yBAAyB;IACxC,OAAO;QACN,GAAG,EAAE,yBAAyB;QAC9B,SAAS,EAAE,eAAe;QAC1B,GAAG,EAAE;YACJ,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,CAAC;YACZ,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;SACT;QACD,QAAQ,EAAE,kBAAkB;QAC5B,YAAY,EAAE,gBAAgB;QAC9B,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;QACrC,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,YAAY;QAC1B,UAAU,EAAE,eAAe;QAC3B,QAAQ,EAAE,WAAW;QACrB,aAAa,EAAE,MAAM;QACrB,UAAU,EAAE,kCAAkC;QAC9C,QAAQ,EAAE,IAAI,GAAG,CAAC;YACjB,CAAC,KAAK,EAAE,mBAAmB,CAAC;YAC5B,CAAC,KAAK,EAAE,WAAW,CAAC;SACpB,CAAC;QACF,aAAa,EAAE,iBAAiB;KAChC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CACpC,KAAkB,EAClB,KAAkB,EAClB,KAAK,GAAG,aAAa;IAErB,OAAO,yBAAyB,CAC/B,yBAAyB,EAAE,EAC3B,KAAK,EACL,KAAK,EACL,KAAK,CACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { FooterTone } from '../presets/types.js';
2
+ import { type FooterTheme } from '../theme/tokens.js';
3
+ export declare function render_footer_status_line(theme: FooterTheme, width: number, left_items: string[], right_item?: string, tone?: FooterTone): string | undefined;