@apholdings/jensen-code 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/agent-session.d.ts +1 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +15 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +1 -1
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +4 -1
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +25 -11
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +6 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +40 -10
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +0 -2
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +8 -146
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/header.d.ts +9 -3
- package/dist/modes/interactive/components/header.d.ts.map +1 -1
- package/dist/modes/interactive/components/header.js +125 -196
- package/dist/modes/interactive/components/header.js.map +1 -1
- package/dist/modes/interactive/components/top-bar.d.ts.map +1 -1
- package/dist/modes/interactive/components/top-bar.js +1 -1
- package/dist/modes/interactive/components/top-bar.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +1 -1
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +17 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +507 -211
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +2 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/examples/extensions/antigravity-image-gen.ts +0 -1
- package/examples/extensions/auto-commit-on-exit.ts +0 -1
- package/examples/extensions/bash-spawn-hook.ts +0 -1
- package/examples/extensions/bookmark.ts +0 -1
- package/examples/extensions/built-in-tool-renderer.ts +0 -1
- package/examples/extensions/claude-rules.ts +0 -1
- package/examples/extensions/commands.ts +0 -1
- package/examples/extensions/confirm-destructive.ts +0 -1
- package/examples/extensions/custom-compaction.ts +0 -1
- package/examples/extensions/custom-footer.ts +0 -1
- package/examples/extensions/custom-header.ts +0 -1
- package/examples/extensions/custom-provider-anthropic/index.ts +0 -1
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +0 -1
- package/examples/extensions/custom-provider-qwen-cli/index.ts +0 -1
- package/examples/extensions/dirty-repo-guard.ts +0 -1
- package/examples/extensions/doom-overlay/index.ts +0 -1
- package/examples/extensions/dynamic-resources/index.ts +0 -1
- package/examples/extensions/dynamic-tools.ts +0 -1
- package/examples/extensions/event-bus.ts +0 -1
- package/examples/extensions/file-trigger.ts +0 -1
- package/examples/extensions/git-checkpoint.ts +0 -1
- package/examples/extensions/handoff.ts +0 -1
- package/examples/extensions/hello.ts +0 -1
- package/examples/extensions/inline-bash.ts +0 -1
- package/examples/extensions/input-transform.ts +0 -1
- package/examples/extensions/interactive-shell.ts +0 -1
- package/examples/extensions/mac-system-theme.ts +0 -1
- package/examples/extensions/message-renderer.ts +0 -1
- package/examples/extensions/minimal-mode.ts +0 -1
- package/examples/extensions/modal-editor.ts +0 -1
- package/examples/extensions/model-status.ts +0 -1
- package/examples/extensions/notify.ts +0 -1
- package/examples/extensions/overlay-qa-tests.ts +0 -1
- package/examples/extensions/overlay-test.ts +0 -1
- package/examples/extensions/permission-gate.ts +0 -1
- package/examples/extensions/pirate.ts +0 -1
- package/examples/extensions/plan-mode/index.ts +0 -1
- package/examples/extensions/preset.ts +0 -1
- package/examples/extensions/protected-paths.ts +0 -1
- package/examples/extensions/provider-payload.ts +0 -1
- package/examples/extensions/qna.ts +0 -1
- package/examples/extensions/question.ts +0 -1
- package/examples/extensions/questionnaire.ts +0 -1
- package/examples/extensions/rainbow-editor.ts +0 -1
- package/examples/extensions/reload-runtime.ts +0 -1
- package/examples/extensions/rpc-demo.ts +0 -1
- package/examples/extensions/sandbox/index.ts +0 -1
- package/examples/extensions/send-user-message.ts +0 -1
- package/examples/extensions/session-name.ts +0 -1
- package/examples/extensions/shutdown-command.ts +0 -1
- package/examples/extensions/snake.ts +0 -1
- package/examples/extensions/space-invaders.ts +0 -1
- package/examples/extensions/ssh.ts +0 -1
- package/examples/extensions/status-line.ts +0 -1
- package/examples/extensions/subagent/agents.ts +0 -1
- package/examples/extensions/subagent/index.ts +0 -1
- package/examples/extensions/summarize.ts +0 -1
- package/examples/extensions/system-prompt-header.ts +0 -1
- package/examples/extensions/timed-confirm.ts +0 -1
- package/examples/extensions/titlebar-spinner.ts +0 -1
- package/examples/extensions/todo.ts +0 -1
- package/examples/extensions/tool-override.ts +0 -1
- package/examples/extensions/tools.ts +0 -1
- package/examples/extensions/trigger-compact.ts +0 -1
- package/examples/extensions/truncated-tool.ts +0 -1
- package/examples/extensions/widget-placement.ts +0 -1
- package/examples/extensions/with-deps/index.ts +0 -1
- package/examples/sdk/01-minimal.ts +0 -1
- package/examples/sdk/02-custom-model.ts +0 -1
- package/examples/sdk/03-custom-prompt.ts +0 -1
- package/examples/sdk/04-skills.ts +0 -1
- package/examples/sdk/05-tools.ts +0 -1
- package/examples/sdk/06-extensions.ts +0 -1
- package/examples/sdk/07-context-files.ts +0 -1
- package/examples/sdk/08-prompt-templates.ts +0 -1
- package/examples/sdk/09-api-keys-and-oauth.ts +0 -1
- package/examples/sdk/10-settings.ts +0 -1
- package/examples/sdk/11-sessions.ts +0 -1
- package/examples/sdk/12-full-control.ts +0 -1
- package/package.json +4 -3
|
@@ -1,36 +1,25 @@
|
|
|
1
|
-
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import { truncateToWidth, visibleWidth } from "@apholdings/jensen-tui";
|
|
4
|
+
const require = createRequire(import.meta.url);
|
|
5
|
+
const packageJson = require("../../../../package.json");
|
|
2
6
|
const ANSI_ESCAPE_AT_START = /^\x1b\[[0-9;]*m/;
|
|
3
|
-
const TITLE = "
|
|
4
|
-
const
|
|
5
|
-
const
|
|
7
|
+
const TITLE = packageJson.displayTitle ?? packageJson.productTitle ?? packageJson.title ?? "Jensen Code";
|
|
8
|
+
const VERSION = packageJson.version ? `v${packageJson.version}` : "v0.0.0";
|
|
9
|
+
const LOGO = [" █████████ ", "██▓░░░░░▓██", "█░░░█░█░░░█", "█░░░░░░░░░█", " █████████ "];
|
|
10
|
+
const GRADIENT_STOPS = [
|
|
6
11
|
{ r: 0x1a, g: 0xf5, b: 0x8a },
|
|
7
12
|
{ r: 0x57, g: 0xe3, b: 0xf7 },
|
|
8
13
|
{ r: 0x8c, g: 0xb6, b: 0xff },
|
|
9
14
|
{ r: 0xc0, g: 0x7b, b: 0xff },
|
|
10
15
|
];
|
|
11
|
-
const
|
|
12
|
-
{ r:
|
|
13
|
-
{ r:
|
|
14
|
-
{ r:
|
|
15
|
-
{ r:
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
{ r: 0x05, g: 0x2a, b: 0x19 },
|
|
19
|
-
{ r: 0x0b, g: 0x22, b: 0x3a },
|
|
20
|
-
{ r: 0x19, g: 0x12, b: 0x33 },
|
|
21
|
-
];
|
|
22
|
-
function g7(...rows) {
|
|
23
|
-
return rows;
|
|
24
|
-
}
|
|
25
|
-
function g5(...rows) {
|
|
26
|
-
return rows;
|
|
27
|
-
}
|
|
28
|
-
function stripAnsi(input) {
|
|
29
|
-
return input.replace(ANSI_ESCAPE_GLOBAL, "");
|
|
30
|
-
}
|
|
31
|
-
function visibleWidth(input) {
|
|
32
|
-
return Array.from(stripAnsi(input)).length;
|
|
33
|
-
}
|
|
16
|
+
const COLORS = {
|
|
17
|
+
border: { r: 0x72, g: 0x7c, b: 0xb0 },
|
|
18
|
+
title: { r: 0xd5, g: 0xd6, b: 0xdb },
|
|
19
|
+
muted: { r: 0x7a, g: 0x84, b: 0xb2 },
|
|
20
|
+
subtle: { r: 0x56, g: 0x5f, b: 0x89 },
|
|
21
|
+
accent: { r: 0xa1, g: 0x88, b: 0xf1 },
|
|
22
|
+
};
|
|
34
23
|
function truncatePlain(input, maxWidth) {
|
|
35
24
|
if (maxWidth <= 0)
|
|
36
25
|
return "";
|
|
@@ -44,7 +33,7 @@ function truncatePlain(input, maxWidth) {
|
|
|
44
33
|
}
|
|
45
34
|
return out;
|
|
46
35
|
}
|
|
47
|
-
function
|
|
36
|
+
function truncateAnsi(input, maxWidth, ellipsis = "") {
|
|
48
37
|
if (maxWidth <= 0)
|
|
49
38
|
return "";
|
|
50
39
|
if (visibleWidth(input) <= maxWidth)
|
|
@@ -85,7 +74,18 @@ function truncateToWidth(input, maxWidth, ellipsis = "") {
|
|
|
85
74
|
function color(rgb, text) {
|
|
86
75
|
return `\x1b[38;2;${rgb.r};${rgb.g};${rgb.b}m${text}\x1b[0m`;
|
|
87
76
|
}
|
|
77
|
+
function bold(text) {
|
|
78
|
+
return `\x1b[1m${text}\x1b[0m`;
|
|
79
|
+
}
|
|
80
|
+
function dim(text) {
|
|
81
|
+
return `\x1b[38;2;${COLORS.muted.r};${COLORS.muted.g};${COLORS.muted.b}m${text}\x1b[0m`;
|
|
82
|
+
}
|
|
83
|
+
function subtle(text) {
|
|
84
|
+
return `\x1b[38;2;${COLORS.subtle.r};${COLORS.subtle.g};${COLORS.subtle.b}m${text}\x1b[0m`;
|
|
85
|
+
}
|
|
88
86
|
function interpolateStops(stops, t) {
|
|
87
|
+
if (stops.length === 0)
|
|
88
|
+
return { r: 0, g: 0, b: 0 };
|
|
89
89
|
if (stops.length === 1)
|
|
90
90
|
return stops[0];
|
|
91
91
|
const clamped = Math.max(0, Math.min(1, t));
|
|
@@ -98,185 +98,114 @@ function interpolateStops(stops, t) {
|
|
|
98
98
|
b: Math.round(stops[i].b + (stops[i + 1].b - stops[i].b) * f),
|
|
99
99
|
};
|
|
100
100
|
}
|
|
101
|
-
function
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
b: Math.min(255, rgb.b + amount),
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
function glyphWidth(glyph) {
|
|
109
|
-
return Math.max(...glyph.map((row) => row.length));
|
|
110
|
-
}
|
|
111
|
-
function classifyPixel(ch) {
|
|
112
|
-
if (ch === " ")
|
|
113
|
-
return "empty";
|
|
114
|
-
if (ch === "█")
|
|
115
|
-
return "face";
|
|
116
|
-
if (ch === "░")
|
|
117
|
-
return "detail";
|
|
118
|
-
if (ch === "▓")
|
|
119
|
-
return "highlight";
|
|
120
|
-
return "face";
|
|
121
|
-
}
|
|
122
|
-
const LARGE_GLYPHS = {
|
|
123
|
-
// UFO
|
|
124
|
-
"[": g7(" ▓███████▓ ", " ███████████ ", " ███░░░░░░░███ ", "███████████████", "░░▓██▓░▓░▓██▓░░", "░░▓██▓░▓░▓██▓░░", "░▓█▓▓░▓▓▓░▓▓█▓░"),
|
|
125
|
-
// ALIEN
|
|
126
|
-
"]": g7(" ████████████ ", " ███░▓░░░░░▓░███ ", "██░░░░█░░░█░░░░██", "██░░░░░░░░░░░░░██", "██░░░░█▓█▓█░░░░██", " ███░░░░░░░░░███ ", " ████████████ "),
|
|
127
|
-
" ": g7(" ", " ", " ", " ", " ", " ", " "),
|
|
128
|
-
J: g7("████████", "░░░░██░ ", " ░░██ ", " ░░██ ", "██░░██ ", "██░░██ ", "░█████ "),
|
|
129
|
-
E: g7("█████████", "███░░░░██", "███ ░█ ", "██████ ", "███░░█ ", "███░░ ██", "█████████"),
|
|
130
|
-
N: g7("████░░░████", " ████░░░░██", " ██░██░░░██", " ██░░██░░██", " ██ ░░██░██", " ██ ░░████", "███ ░░███"),
|
|
131
|
-
S: g7(" ████████ ", "███░░░░███", "░███ ", " ░██████ ", " ░░░███ ", "███░░░░███", " ████████ "),
|
|
132
|
-
};
|
|
133
|
-
const COMPACT_GLYPHS = {
|
|
134
|
-
// Tiny UFO
|
|
135
|
-
"[": [" ▓█████▓ ", " █████████ ", "███░░░░░███", "░░██▓░▓██░░", " ░█▓▓░▓▓█░ "],
|
|
136
|
-
// ALIEN - Scaled down to 5 rows
|
|
137
|
-
"]": [" █████████ ", "██░▓░░░▓░██", "█░░░█░█░░░█", "█░░░░░░░░░█", " █████████ "],
|
|
138
|
-
" ": g5(" ", " ", " ", " ", " "),
|
|
139
|
-
J: ["███████", " ░░██ ", " ░░██ ", "██░░██ ", "░█████ "],
|
|
140
|
-
E: ["████████", "███░░░█ ", "██████ ", "███░░ █ ", "████████"],
|
|
141
|
-
N: ["███░░░██", "██░█░░██", "██░░█░██", "██ ░░███", "███ ░░██"],
|
|
142
|
-
S: [" ██████ ", "███░░░░ ", " ░█████ ", " ░░░░███", " ██████ "],
|
|
143
|
-
};
|
|
144
|
-
function buildBitmap(text, glyphs, rows, gap) {
|
|
145
|
-
const chars = Array.from(text).map((ch) => glyphs[ch] ?? glyphs[" "]);
|
|
146
|
-
let totalWidth = 0;
|
|
147
|
-
chars.forEach((glyph, index) => {
|
|
148
|
-
totalWidth += glyphWidth(glyph);
|
|
149
|
-
if (index < chars.length - 1)
|
|
150
|
-
totalWidth += gap;
|
|
151
|
-
});
|
|
152
|
-
const pixels = Array.from({ length: rows }, () => Array(totalWidth).fill("empty"));
|
|
153
|
-
let cursorX = 0;
|
|
154
|
-
chars.forEach((glyph, index) => {
|
|
155
|
-
const width = glyphWidth(glyph);
|
|
156
|
-
for (let y = 0; y < rows; y++) {
|
|
157
|
-
const row = glyph[y].padEnd(width, " ");
|
|
158
|
-
for (let x = 0; x < width; x++) {
|
|
159
|
-
pixels[y][cursorX + x] = classifyPixel(row[x]);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
cursorX += width;
|
|
163
|
-
if (index < chars.length - 1)
|
|
164
|
-
cursorX += gap;
|
|
165
|
-
});
|
|
166
|
-
return { pixels, width: totalWidth, height: rows };
|
|
167
|
-
}
|
|
168
|
-
function renderBitmapLogo(options) {
|
|
169
|
-
const { width, pixels, bitmapWidth, bitmapHeight, indent = 1, shadowOffsetX = 2, shadowOffsetY = 1 } = options;
|
|
170
|
-
if (width <= 0)
|
|
171
|
-
return [""];
|
|
172
|
-
// Face is shifted right inside the render canvas so the cast shadow can live on the left.
|
|
173
|
-
const renderWidth = bitmapWidth + shadowOffsetX;
|
|
174
|
-
const renderHeight = bitmapHeight + shadowOffsetY;
|
|
175
|
-
const lines = [""];
|
|
176
|
-
for (let y = 0; y < renderHeight; y++) {
|
|
177
|
-
let line = " ".repeat(Math.max(0, indent));
|
|
178
|
-
for (let x = 0; x < renderWidth; x++) {
|
|
179
|
-
const faceSourceX = x - shadowOffsetX;
|
|
180
|
-
const facePixel = y >= 0 && y < bitmapHeight && faceSourceX >= 0 && faceSourceX < bitmapWidth
|
|
181
|
-
? pixels[y][faceSourceX]
|
|
182
|
-
: "empty";
|
|
183
|
-
const shadowSourceX = x;
|
|
184
|
-
const shadowSourceY = y - shadowOffsetY;
|
|
185
|
-
const shadowPixel = shadowSourceX >= 0 && shadowSourceX < bitmapWidth && shadowSourceY >= 0 && shadowSourceY < bitmapHeight
|
|
186
|
-
? pixels[shadowSourceY][shadowSourceX]
|
|
187
|
-
: "empty";
|
|
188
|
-
const shadowOn = facePixel === "empty" && shadowPixel !== "empty";
|
|
189
|
-
if (facePixel === "face") {
|
|
190
|
-
const t = bitmapWidth > 1 ? faceSourceX / (bitmapWidth - 1) : 0;
|
|
191
|
-
line += color(interpolateStops(faceStops, t), "█");
|
|
192
|
-
}
|
|
193
|
-
else if (facePixel === "detail") {
|
|
194
|
-
const t = bitmapWidth > 1 ? faceSourceX / (bitmapWidth - 1) : 0;
|
|
195
|
-
line += color(interpolateStops(detailStops, t), "█");
|
|
196
|
-
}
|
|
197
|
-
else if (facePixel === "highlight") {
|
|
198
|
-
const t = bitmapWidth > 1 ? faceSourceX / (bitmapWidth - 1) : 0;
|
|
199
|
-
line += color(brighten(interpolateStops(faceStops, t), 28), "█");
|
|
200
|
-
}
|
|
201
|
-
else if (shadowOn) {
|
|
202
|
-
const t = bitmapWidth > 1 ? shadowSourceX / (bitmapWidth - 1) : 0;
|
|
203
|
-
line += color(interpolateStops(shadowStops, t), "█");
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
line += " ";
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
lines.push(truncateToWidth(line, width));
|
|
210
|
-
}
|
|
211
|
-
return lines.map((line) => truncateToWidth(line, width));
|
|
212
|
-
}
|
|
213
|
-
function renderMicroFallback(width) {
|
|
214
|
-
if (width <= 0)
|
|
215
|
-
return [""];
|
|
216
|
-
let line = "";
|
|
217
|
-
const chars = Array.from(MINI_TITLE);
|
|
218
|
-
const plainWidth = chars.length;
|
|
101
|
+
function renderColoredLogoLine(line) {
|
|
102
|
+
const chars = Array.from(line);
|
|
103
|
+
const width = chars.length;
|
|
104
|
+
let out = "";
|
|
219
105
|
chars.forEach((ch, i) => {
|
|
220
106
|
if (ch === " ") {
|
|
221
|
-
|
|
107
|
+
out += " ";
|
|
222
108
|
return;
|
|
223
109
|
}
|
|
224
|
-
const t =
|
|
225
|
-
|
|
110
|
+
const t = width > 1 ? i / (width - 1) : 0;
|
|
111
|
+
out += color(interpolateStops(GRADIENT_STOPS, t), ch);
|
|
226
112
|
});
|
|
227
|
-
return
|
|
113
|
+
return out;
|
|
114
|
+
}
|
|
115
|
+
function compactPath(input, maxWidth = 44) {
|
|
116
|
+
const normalized = input.replaceAll("/", process.platform === "win32" ? "\\" : "/");
|
|
117
|
+
if (normalized.length <= maxWidth)
|
|
118
|
+
return normalized;
|
|
119
|
+
const separator = normalized.includes("\\") ? "\\" : "/";
|
|
120
|
+
const parts = normalized.split(separator).filter(Boolean);
|
|
121
|
+
if (parts.length <= 2)
|
|
122
|
+
return normalized;
|
|
123
|
+
const first = normalized.startsWith(separator) ? separator : "";
|
|
124
|
+
const driveMatch = parts[0]?.match(/^[A-Za-z]:$/);
|
|
125
|
+
const head = driveMatch ? `${parts[0]}${separator}` : first;
|
|
126
|
+
const tail = parts.slice(-2).join(separator);
|
|
127
|
+
return `${head}…${separator}${tail}`;
|
|
128
|
+
}
|
|
129
|
+
function padAnsi(input, width) {
|
|
130
|
+
const remaining = Math.max(0, width - visibleWidth(input));
|
|
131
|
+
return input + " ".repeat(remaining);
|
|
132
|
+
}
|
|
133
|
+
function bulletJoin(parts) {
|
|
134
|
+
return parts.filter((part) => Boolean(part && part.trim().length > 0)).join(` ${subtle("•")} `);
|
|
135
|
+
}
|
|
136
|
+
function maybePrefix(label, value) {
|
|
137
|
+
if (!value)
|
|
138
|
+
return undefined;
|
|
139
|
+
return `${dim(label)} ${value}`;
|
|
228
140
|
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
const miniNeeded = 1 + mini.width + 1;
|
|
236
|
-
if (width >= largeNeeded) {
|
|
237
|
-
return renderBitmapLogo({
|
|
238
|
-
width,
|
|
239
|
-
pixels: large.pixels,
|
|
240
|
-
bitmapWidth: large.width,
|
|
241
|
-
bitmapHeight: large.height,
|
|
242
|
-
indent: 1,
|
|
243
|
-
shadowOffsetX: 2,
|
|
244
|
-
shadowOffsetY: 1,
|
|
245
|
-
});
|
|
141
|
+
export class Header {
|
|
142
|
+
agentSession;
|
|
143
|
+
footerDataProvider;
|
|
144
|
+
constructor(agentSession, footerDataProvider) {
|
|
145
|
+
this.agentSession = agentSession;
|
|
146
|
+
this.footerDataProvider = footerDataProvider;
|
|
246
147
|
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
148
|
+
getData() {
|
|
149
|
+
const host = `${os.userInfo().username}@${os.hostname()}`;
|
|
150
|
+
const cwd = process.cwd();
|
|
151
|
+
const repo = this.footerDataProvider?.getGitRepoName() ?? undefined;
|
|
152
|
+
const branch = this.footerDataProvider?.getGitBranch() ?? undefined;
|
|
153
|
+
const workspace = this.agentSession?.sessionName;
|
|
154
|
+
return {
|
|
155
|
+
branch,
|
|
156
|
+
cwd,
|
|
157
|
+
host,
|
|
158
|
+
repo,
|
|
159
|
+
workspace,
|
|
160
|
+
};
|
|
257
161
|
}
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
shadowOffsetX: 1,
|
|
266
|
-
shadowOffsetY: 1,
|
|
267
|
-
});
|
|
162
|
+
renderCompact(width) {
|
|
163
|
+
const { branch, cwd, host, repo, workspace } = this.getData();
|
|
164
|
+
const line1 = truncateAnsi(`${bold(color(COLORS.title, TITLE))} ${dim(VERSION)}`, width);
|
|
165
|
+
const line2 = subtle(truncateAnsi(bulletJoin([maybePrefix("repo", repo), maybePrefix("branch", branch)]), width));
|
|
166
|
+
const line3 = subtle(truncateAnsi(bulletJoin([maybePrefix("workspace", workspace), maybePrefix("host", host)]), width));
|
|
167
|
+
const line4 = subtle(truncateAnsi(maybePrefix("cwd", compactPath(cwd, Math.max(16, width - 8))) ?? "", width));
|
|
168
|
+
return [line1, line2, line3, line4];
|
|
268
169
|
}
|
|
269
|
-
return renderMicroFallback(width);
|
|
270
|
-
}
|
|
271
|
-
export class Header {
|
|
272
170
|
render(width) {
|
|
273
|
-
|
|
171
|
+
if (width <= 0)
|
|
172
|
+
return [""];
|
|
173
|
+
if (width < 72)
|
|
174
|
+
return this.renderCompact(width);
|
|
175
|
+
const { branch, cwd, host, repo, workspace } = this.getData();
|
|
176
|
+
const logoWidth = visibleWidth(LOGO[0]);
|
|
177
|
+
const gap = 2;
|
|
178
|
+
const sidePadding = 1;
|
|
179
|
+
const minTextWidth = 12;
|
|
180
|
+
const maxTextWidth = Math.max(minTextWidth, width - logoWidth - gap - sidePadding * 2 - 2);
|
|
181
|
+
const baseRows = [
|
|
182
|
+
`${bold(color(COLORS.title, TITLE))} ${dim(VERSION)}`,
|
|
183
|
+
color(COLORS.title, bulletJoin([maybePrefix("repo", repo), maybePrefix("branch", branch)])),
|
|
184
|
+
color(COLORS.title, bulletJoin([maybePrefix("workspace", workspace), maybePrefix("host", host)])),
|
|
185
|
+
"",
|
|
186
|
+
];
|
|
187
|
+
const textRows = [
|
|
188
|
+
...baseRows,
|
|
189
|
+
color(COLORS.title, maybePrefix("cwd", compactPath(cwd, Math.max(18, maxTextWidth - 10))) ?? ""),
|
|
190
|
+
"",
|
|
191
|
+
];
|
|
192
|
+
const textWidth = Math.max(minTextWidth, Math.min(maxTextWidth, textRows.reduce((max, row) => Math.max(max, visibleWidth(row)), 0)));
|
|
193
|
+
const innerWidth = logoWidth + gap + textWidth + sidePadding * 2;
|
|
194
|
+
const topBorder = color(COLORS.border, "╭") + color(COLORS.border, "─".repeat(innerWidth)) + color(COLORS.border, "╮");
|
|
195
|
+
const bottomBorder = color(COLORS.border, "╰") + color(COLORS.border, "─".repeat(innerWidth)) + color(COLORS.border, "╯");
|
|
196
|
+
const lines = [];
|
|
197
|
+
// lines.push("");
|
|
198
|
+
lines.push(topBorder);
|
|
199
|
+
for (let i = 0; i < LOGO.length; i += 1) {
|
|
200
|
+
const logo = renderColoredLogoLine(LOGO[i]);
|
|
201
|
+
const text = padAnsi(truncateAnsi(textRows[i] ?? "", textWidth), textWidth);
|
|
202
|
+
lines.push(`${color(COLORS.border, "│")} ${logo}${" ".repeat(gap)}${text} ${color(COLORS.border, "│")}`);
|
|
203
|
+
}
|
|
204
|
+
lines.push(bottomBorder);
|
|
205
|
+
// lines.push("");
|
|
206
|
+
return lines.map((line) => truncateToWidth(line, width));
|
|
274
207
|
}
|
|
275
208
|
invalidate() { }
|
|
276
209
|
}
|
|
277
|
-
export default
|
|
278
|
-
pi.on("session_start", async (_event, ctx) => {
|
|
279
|
-
ctx.ui.setHeader((_tui, _theme) => new Header());
|
|
280
|
-
});
|
|
281
|
-
}
|
|
210
|
+
export default Header;
|
|
282
211
|
//# sourceMappingURL=header.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/header.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Component } from \"@apholdings/jensen-tui\";\nimport type { ExtensionAPI } from \"../../../core/extensions/index.js\";\n\ntype RGB = { r: number; g: number; b: number };\ntype Glyph7 = [string, string, string, string, string, string, string];\ntype Glyph5 = [string, string, string, string, string];\ntype PixelKind = \"empty\" | \"face\" | \"detail\" | \"highlight\";\n\nconst ANSI_ESCAPE_GLOBAL = /\\x1b\\[[0-9;]*m/g;\nconst ANSI_ESCAPE_AT_START = /^\\x1b\\[[0-9;]*m/;\n\nconst TITLE = \"[JENSEN]\";\nconst MINI_TITLE = \"[J]\";\n\nconst faceStops: RGB[] = [\n\t{ r: 0x1a, g: 0xf5, b: 0x8a },\n\t{ r: 0x57, g: 0xe3, b: 0xf7 },\n\t{ r: 0x8c, g: 0xb6, b: 0xff },\n\t{ r: 0xc0, g: 0x7b, b: 0xff },\n];\n\nconst detailStops: RGB[] = [\n\t{ r: 0x0e, g: 0x8a, b: 0x53 },\n\t{ r: 0x2c, g: 0x86, b: 0xa2 },\n\t{ r: 0x5a, g: 0x6d, b: 0xb8 },\n\t{ r: 0x7f, g: 0x4b, b: 0xb6 },\n];\n\nconst shadowStops: RGB[] = [\n\t{ r: 0x05, g: 0x2a, b: 0x19 },\n\t{ r: 0x0b, g: 0x22, b: 0x3a },\n\t{ r: 0x19, g: 0x12, b: 0x33 },\n];\n\nfunction g7(...rows: string[]): Glyph7 {\n\treturn rows as Glyph7;\n}\n\nfunction g5(...rows: string[]): Glyph5 {\n\treturn rows as Glyph5;\n}\n\nfunction stripAnsi(input: string): string {\n\treturn input.replace(ANSI_ESCAPE_GLOBAL, \"\");\n}\n\nfunction visibleWidth(input: string): number {\n\treturn Array.from(stripAnsi(input)).length;\n}\n\nfunction truncatePlain(input: string, maxWidth: number): string {\n\tif (maxWidth <= 0) return \"\";\n\n\tlet out = \"\";\n\tlet width = 0;\n\n\tfor (const ch of Array.from(input)) {\n\t\tif (width >= maxWidth) break;\n\t\tout += ch;\n\t\twidth += 1;\n\t}\n\n\treturn out;\n}\n\nfunction truncateToWidth(input: string, maxWidth: number, ellipsis = \"\"): string {\n\tif (maxWidth <= 0) return \"\";\n\tif (visibleWidth(input) <= maxWidth) return input;\n\n\tconst ellipsisWidth = visibleWidth(ellipsis);\n\tif (ellipsisWidth >= maxWidth) return truncatePlain(ellipsis, maxWidth);\n\n\tconst targetWidth = maxWidth - ellipsisWidth;\n\tlet i = 0;\n\tlet width = 0;\n\tlet out = \"\";\n\tlet sawAnsi = false;\n\n\twhile (i < input.length && width < targetWidth) {\n\t\tconst rest = input.slice(i);\n\t\tconst ansi = rest.match(ANSI_ESCAPE_AT_START);\n\t\tif (ansi) {\n\t\t\tout += ansi[0];\n\t\t\tsawAnsi = true;\n\t\t\ti += ansi[0].length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst cp = input.codePointAt(i);\n\t\tif (cp == null) break;\n\n\t\tconst ch = String.fromCodePoint(cp);\n\t\tif (width + 1 > targetWidth) break;\n\n\t\tout += ch;\n\t\twidth += 1;\n\t\ti += ch.length;\n\t}\n\n\tif (ellipsis) out += ellipsis;\n\tif (sawAnsi) out += \"\\x1b[0m\";\n\n\treturn out;\n}\n\nfunction color(rgb: RGB, text: string): string {\n\treturn `\\x1b[38;2;${rgb.r};${rgb.g};${rgb.b}m${text}\\x1b[0m`;\n}\n\nfunction interpolateStops(stops: RGB[], t: number): RGB {\n\tif (stops.length === 1) return stops[0];\n\n\tconst clamped = Math.max(0, Math.min(1, t));\n\tconst scaled = clamped * (stops.length - 1);\n\tconst i = Math.min(Math.floor(scaled), stops.length - 2);\n\tconst f = scaled - i;\n\n\treturn {\n\t\tr: Math.round(stops[i].r + (stops[i + 1].r - stops[i].r) * f),\n\t\tg: Math.round(stops[i].g + (stops[i + 1].g - stops[i].g) * f),\n\t\tb: Math.round(stops[i].b + (stops[i + 1].b - stops[i].b) * f),\n\t};\n}\n\nfunction brighten(rgb: RGB, amount: number): RGB {\n\treturn {\n\t\tr: Math.min(255, rgb.r + amount),\n\t\tg: Math.min(255, rgb.g + amount),\n\t\tb: Math.min(255, rgb.b + amount),\n\t};\n}\n\nfunction glyphWidth<T extends readonly string[]>(glyph: T): number {\n\treturn Math.max(...glyph.map((row) => row.length));\n}\n\nfunction classifyPixel(ch: string): PixelKind {\n\tif (ch === \" \") return \"empty\";\n\tif (ch === \"█\") return \"face\";\n\tif (ch === \"░\") return \"detail\";\n\tif (ch === \"▓\") return \"highlight\";\n\treturn \"face\";\n}\n\nconst LARGE_GLYPHS: Record<string, Glyph7> = {\n\t// UFO\n\t\"[\": g7(\n\t\t\" ▓███████▓ \",\n\t\t\" ███████████ \",\n\t\t\" ███░░░░░░░███ \",\n\t\t\"███████████████\",\n\t\t\"░░▓██▓░▓░▓██▓░░\",\n\t\t\"░░▓██▓░▓░▓██▓░░\",\n\t\t\"░▓█▓▓░▓▓▓░▓▓█▓░\",\n\t),\n\n\t// ALIEN\n\t\"]\": g7(\n\t\t\" ████████████ \",\n\t\t\" ███░▓░░░░░▓░███ \",\n\t\t\"██░░░░█░░░█░░░░██\",\n\t\t\"██░░░░░░░░░░░░░██\",\n\t\t\"██░░░░█▓█▓█░░░░██\",\n\t\t\" ███░░░░░░░░░███ \",\n\t\t\" ████████████ \",\n\t),\n\n\t\" \": g7(\" \", \" \", \" \", \" \", \" \", \" \", \" \"),\n\n\tJ: g7(\"████████\", \"░░░░██░ \", \" ░░██ \", \" ░░██ \", \"██░░██ \", \"██░░██ \", \"░█████ \"),\n\n\tE: g7(\"█████████\", \"███░░░░██\", \"███ ░█ \", \"██████ \", \"███░░█ \", \"███░░ ██\", \"█████████\"),\n\n\tN: g7(\"████░░░████\", \" ████░░░░██\", \" ██░██░░░██\", \" ██░░██░░██\", \" ██ ░░██░██\", \" ██ ░░████\", \"███ ░░███\"),\n\n\tS: g7(\" ████████ \", \"███░░░░███\", \"░███ \", \" ░██████ \", \" ░░░███ \", \"███░░░░███\", \" ████████ \"),\n};\n\nconst COMPACT_GLYPHS: Record<string, Glyph5> = {\n\t// Tiny UFO\n\t\"[\": [\" ▓█████▓ \", \" █████████ \", \"███░░░░░███\", \"░░██▓░▓██░░\", \" ░█▓▓░▓▓█░ \"],\n\n\t// ALIEN - Scaled down to 5 rows\n\t\"]\": [\" █████████ \", \"██░▓░░░▓░██\", \"█░░░█░█░░░█\", \"█░░░░░░░░░█\", \" █████████ \"],\n\n\t\" \": g5(\" \", \" \", \" \", \" \", \" \"),\n\n\tJ: [\"███████\", \" ░░██ \", \" ░░██ \", \"██░░██ \", \"░█████ \"],\n\n\tE: [\"████████\", \"███░░░█ \", \"██████ \", \"███░░ █ \", \"████████\"],\n\n\tN: [\"███░░░██\", \"██░█░░██\", \"██░░█░██\", \"██ ░░███\", \"███ ░░██\"],\n\n\tS: [\" ██████ \", \"███░░░░ \", \" ░█████ \", \" ░░░░███\", \" ██████ \"],\n};\n\nfunction buildBitmap<T extends readonly string[]>(\n\ttext: string,\n\tglyphs: Record<string, T>,\n\trows: number,\n\tgap: number,\n): { pixels: PixelKind[][]; width: number; height: number } {\n\tconst chars = Array.from(text).map((ch) => glyphs[ch] ?? glyphs[\" \"]);\n\n\tlet totalWidth = 0;\n\tchars.forEach((glyph, index) => {\n\t\ttotalWidth += glyphWidth(glyph);\n\t\tif (index < chars.length - 1) totalWidth += gap;\n\t});\n\n\tconst pixels = Array.from({ length: rows }, () => Array<PixelKind>(totalWidth).fill(\"empty\"));\n\n\tlet cursorX = 0;\n\tchars.forEach((glyph, index) => {\n\t\tconst width = glyphWidth(glyph);\n\n\t\tfor (let y = 0; y < rows; y++) {\n\t\t\tconst row = glyph[y].padEnd(width, \" \");\n\t\t\tfor (let x = 0; x < width; x++) {\n\t\t\t\tpixels[y][cursorX + x] = classifyPixel(row[x]);\n\t\t\t}\n\t\t}\n\n\t\tcursorX += width;\n\t\tif (index < chars.length - 1) cursorX += gap;\n\t});\n\n\treturn { pixels, width: totalWidth, height: rows };\n}\n\nfunction renderBitmapLogo(options: {\n\twidth: number;\n\tpixels: PixelKind[][];\n\tbitmapWidth: number;\n\tbitmapHeight: number;\n\tindent?: number;\n\tshadowOffsetX?: number;\n\tshadowOffsetY?: number;\n}): string[] {\n\tconst { width, pixels, bitmapWidth, bitmapHeight, indent = 1, shadowOffsetX = 2, shadowOffsetY = 1 } = options;\n\n\tif (width <= 0) return [\"\"];\n\n\t// Face is shifted right inside the render canvas so the cast shadow can live on the left.\n\tconst renderWidth = bitmapWidth + shadowOffsetX;\n\tconst renderHeight = bitmapHeight + shadowOffsetY;\n\tconst lines: string[] = [\"\"];\n\n\tfor (let y = 0; y < renderHeight; y++) {\n\t\tlet line = \" \".repeat(Math.max(0, indent));\n\n\t\tfor (let x = 0; x < renderWidth; x++) {\n\t\t\tconst faceSourceX = x - shadowOffsetX;\n\t\t\tconst facePixel =\n\t\t\t\ty >= 0 && y < bitmapHeight && faceSourceX >= 0 && faceSourceX < bitmapWidth\n\t\t\t\t\t? pixels[y][faceSourceX]\n\t\t\t\t\t: \"empty\";\n\n\t\t\tconst shadowSourceX = x;\n\t\t\tconst shadowSourceY = y - shadowOffsetY;\n\t\t\tconst shadowPixel =\n\t\t\t\tshadowSourceX >= 0 && shadowSourceX < bitmapWidth && shadowSourceY >= 0 && shadowSourceY < bitmapHeight\n\t\t\t\t\t? pixels[shadowSourceY][shadowSourceX]\n\t\t\t\t\t: \"empty\";\n\n\t\t\tconst shadowOn = facePixel === \"empty\" && shadowPixel !== \"empty\";\n\n\t\t\tif (facePixel === \"face\") {\n\t\t\t\tconst t = bitmapWidth > 1 ? faceSourceX / (bitmapWidth - 1) : 0;\n\t\t\t\tline += color(interpolateStops(faceStops, t), \"█\");\n\t\t\t} else if (facePixel === \"detail\") {\n\t\t\t\tconst t = bitmapWidth > 1 ? faceSourceX / (bitmapWidth - 1) : 0;\n\t\t\t\tline += color(interpolateStops(detailStops, t), \"█\");\n\t\t\t} else if (facePixel === \"highlight\") {\n\t\t\t\tconst t = bitmapWidth > 1 ? faceSourceX / (bitmapWidth - 1) : 0;\n\t\t\t\tline += color(brighten(interpolateStops(faceStops, t), 28), \"█\");\n\t\t\t} else if (shadowOn) {\n\t\t\t\tconst t = bitmapWidth > 1 ? shadowSourceX / (bitmapWidth - 1) : 0;\n\t\t\t\tline += color(interpolateStops(shadowStops, t), \"█\");\n\t\t\t} else {\n\t\t\t\tline += \" \";\n\t\t\t}\n\t\t}\n\n\t\tlines.push(truncateToWidth(line, width));\n\t}\n\n\treturn lines.map((line) => truncateToWidth(line, width));\n}\n\nfunction renderMicroFallback(width: number): string[] {\n\tif (width <= 0) return [\"\"];\n\n\tlet line = \"\";\n\tconst chars = Array.from(MINI_TITLE);\n\tconst plainWidth = chars.length;\n\n\tchars.forEach((ch, i) => {\n\t\tif (ch === \" \") {\n\t\t\tline += \" \";\n\t\t\treturn;\n\t\t}\n\n\t\tconst t = plainWidth > 1 ? i / (plainWidth - 1) : 0;\n\t\tline += color(interpolateStops(faceStops, t), ch);\n\t});\n\n\treturn [\"\", truncateToWidth(line, width, \"\")];\n}\n\nfunction renderResponsiveLogo(width: number): string[] {\n\tconst large = buildBitmap(TITLE, LARGE_GLYPHS, 7, 1);\n\tconst largeNeeded = 1 + large.width + 1;\n\n\tconst compact = buildBitmap(TITLE, COMPACT_GLYPHS, 5, 1);\n\tconst compactNeeded = 1 + compact.width + 1;\n\n\tconst mini = buildBitmap(MINI_TITLE, COMPACT_GLYPHS, 5, 1);\n\tconst miniNeeded = 1 + mini.width + 1;\n\n\tif (width >= largeNeeded) {\n\t\treturn renderBitmapLogo({\n\t\t\twidth,\n\t\t\tpixels: large.pixels,\n\t\t\tbitmapWidth: large.width,\n\t\t\tbitmapHeight: large.height,\n\t\t\tindent: 1,\n\t\t\tshadowOffsetX: 2,\n\t\t\tshadowOffsetY: 1,\n\t\t});\n\t}\n\n\tif (width >= compactNeeded) {\n\t\treturn renderBitmapLogo({\n\t\t\twidth,\n\t\t\tpixels: compact.pixels,\n\t\t\tbitmapWidth: compact.width,\n\t\t\tbitmapHeight: compact.height,\n\t\t\tindent: 1,\n\t\t\tshadowOffsetX: 1,\n\t\t\tshadowOffsetY: 1,\n\t\t});\n\t}\n\n\tif (width >= miniNeeded) {\n\t\treturn renderBitmapLogo({\n\t\t\twidth,\n\t\t\tpixels: mini.pixels,\n\t\t\tbitmapWidth: mini.width,\n\t\t\tbitmapHeight: mini.height,\n\t\t\tindent: 1,\n\t\t\tshadowOffsetX: 1,\n\t\t\tshadowOffsetY: 1,\n\t\t});\n\t}\n\n\treturn renderMicroFallback(width);\n}\n\nexport class Header implements Component {\n\trender(width: number): string[] {\n\t\treturn renderResponsiveLogo(width);\n\t}\n\n\tinvalidate(): void {}\n}\n\nexport default function jensenHeader(pi: ExtensionAPI) {\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\tctx.ui.setHeader((_tui, _theme) => new Header());\n\t});\n}\n"]}
|
|
1
|
+
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/header.ts"],"names":[],"mappings":"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","sourcesContent":["import { createRequire } from \"node:module\";\nimport os from \"node:os\";\nimport { type Component, truncateToWidth, visibleWidth } from \"@apholdings/jensen-tui\";\nimport type { AgentSession } from \"../../../core/agent-session.js\";\nimport type { ReadonlyFooterDataProvider } from \"../../../core/footer-data-provider.js\";\n\nconst require = createRequire(import.meta.url);\nconst packageJson = require(\"../../../../package.json\") as {\n\ttitle?: string;\n\tversion?: string;\n\tdisplayTitle?: string;\n\tproductTitle?: string;\n};\n\ntype RGB = { r: number; g: number; b: number };\nconst ANSI_ESCAPE_AT_START = /^\\x1b\\[[0-9;]*m/;\n\nconst TITLE = packageJson.displayTitle ?? packageJson.productTitle ?? packageJson.title ?? \"Jensen Code\";\n\nconst VERSION = packageJson.version ? `v${packageJson.version}` : \"v0.0.0\";\n\nconst LOGO = [\" █████████ \", \"██▓░░░░░▓██\", \"█░░░█░█░░░█\", \"█░░░░░░░░░█\", \" █████████ \"];\n\nconst GRADIENT_STOPS: RGB[] = [\n\t{ r: 0x1a, g: 0xf5, b: 0x8a },\n\t{ r: 0x57, g: 0xe3, b: 0xf7 },\n\t{ r: 0x8c, g: 0xb6, b: 0xff },\n\t{ r: 0xc0, g: 0x7b, b: 0xff },\n];\n\nconst COLORS = {\n\tborder: { r: 0x72, g: 0x7c, b: 0xb0 },\n\ttitle: { r: 0xd5, g: 0xd6, b: 0xdb },\n\tmuted: { r: 0x7a, g: 0x84, b: 0xb2 },\n\tsubtle: { r: 0x56, g: 0x5f, b: 0x89 },\n\taccent: { r: 0xa1, g: 0x88, b: 0xf1 },\n};\n\nfunction truncatePlain(input: string, maxWidth: number): string {\n\tif (maxWidth <= 0) return \"\";\n\n\tlet out = \"\";\n\tlet width = 0;\n\n\tfor (const ch of Array.from(input)) {\n\t\tif (width >= maxWidth) break;\n\t\tout += ch;\n\t\twidth += 1;\n\t}\n\n\treturn out;\n}\n\nfunction truncateAnsi(input: string, maxWidth: number, ellipsis = \"\"): string {\n\tif (maxWidth <= 0) return \"\";\n\tif (visibleWidth(input) <= maxWidth) return input;\n\n\tconst ellipsisWidth = visibleWidth(ellipsis);\n\tif (ellipsisWidth >= maxWidth) return truncatePlain(ellipsis, maxWidth);\n\n\tconst targetWidth = maxWidth - ellipsisWidth;\n\tlet i = 0;\n\tlet width = 0;\n\tlet out = \"\";\n\tlet sawAnsi = false;\n\n\twhile (i < input.length && width < targetWidth) {\n\t\tconst rest = input.slice(i);\n\t\tconst ansi = rest.match(ANSI_ESCAPE_AT_START);\n\t\tif (ansi) {\n\t\t\tout += ansi[0];\n\t\t\tsawAnsi = true;\n\t\t\ti += ansi[0].length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst cp = input.codePointAt(i);\n\t\tif (cp == null) break;\n\n\t\tconst ch = String.fromCodePoint(cp);\n\t\tif (width + 1 > targetWidth) break;\n\n\t\tout += ch;\n\t\twidth += 1;\n\t\ti += ch.length;\n\t}\n\n\tif (ellipsis) out += ellipsis;\n\tif (sawAnsi) out += \"\\x1b[0m\";\n\n\treturn out;\n}\n\nfunction color(rgb: RGB, text: string): string {\n\treturn `\\x1b[38;2;${rgb.r};${rgb.g};${rgb.b}m${text}\\x1b[0m`;\n}\n\nfunction bold(text: string): string {\n\treturn `\\x1b[1m${text}\\x1b[0m`;\n}\n\nfunction dim(text: string): string {\n\treturn `\\x1b[38;2;${COLORS.muted.r};${COLORS.muted.g};${COLORS.muted.b}m${text}\\x1b[0m`;\n}\n\nfunction subtle(text: string): string {\n\treturn `\\x1b[38;2;${COLORS.subtle.r};${COLORS.subtle.g};${COLORS.subtle.b}m${text}\\x1b[0m`;\n}\n\nfunction interpolateStops(stops: RGB[], t: number): RGB {\n\tif (stops.length === 0) return { r: 0, g: 0, b: 0 };\n\tif (stops.length === 1) return stops[0];\n\n\tconst clamped = Math.max(0, Math.min(1, t));\n\tconst scaled = clamped * (stops.length - 1);\n\tconst i = Math.min(Math.floor(scaled), stops.length - 2);\n\tconst f = scaled - i;\n\n\treturn {\n\t\tr: Math.round(stops[i].r + (stops[i + 1].r - stops[i].r) * f),\n\t\tg: Math.round(stops[i].g + (stops[i + 1].g - stops[i].g) * f),\n\t\tb: Math.round(stops[i].b + (stops[i + 1].b - stops[i].b) * f),\n\t};\n}\n\nfunction renderColoredLogoLine(line: string): string {\n\tconst chars = Array.from(line);\n\tconst width = chars.length;\n\n\tlet out = \"\";\n\tchars.forEach((ch, i) => {\n\t\tif (ch === \" \") {\n\t\t\tout += \" \";\n\t\t\treturn;\n\t\t}\n\t\tconst t = width > 1 ? i / (width - 1) : 0;\n\t\tout += color(interpolateStops(GRADIENT_STOPS, t), ch);\n\t});\n\n\treturn out;\n}\n\nfunction compactPath(input: string, maxWidth = 44): string {\n\tconst normalized = input.replaceAll(\"/\", process.platform === \"win32\" ? \"\\\\\" : \"/\");\n\tif (normalized.length <= maxWidth) return normalized;\n\n\tconst separator = normalized.includes(\"\\\\\") ? \"\\\\\" : \"/\";\n\tconst parts = normalized.split(separator).filter(Boolean);\n\tif (parts.length <= 2) return normalized;\n\n\tconst first = normalized.startsWith(separator) ? separator : \"\";\n\tconst driveMatch = parts[0]?.match(/^[A-Za-z]:$/);\n\tconst head = driveMatch ? `${parts[0]}${separator}` : first;\n\tconst tail = parts.slice(-2).join(separator);\n\treturn `${head}…${separator}${tail}`;\n}\n\nfunction padAnsi(input: string, width: number): string {\n\tconst remaining = Math.max(0, width - visibleWidth(input));\n\treturn input + \" \".repeat(remaining);\n}\n\nfunction bulletJoin(parts: Array<string | undefined>): string {\n\treturn parts.filter((part) => Boolean(part && part.trim().length > 0)).join(` ${subtle(\"•\")} `);\n}\n\nfunction maybePrefix(label: string, value: string | undefined): string | undefined {\n\tif (!value) return undefined;\n\treturn `${dim(label)} ${value}`;\n}\n\nexport class Header implements Component {\n\tconstructor(\n\t\tprivate readonly agentSession?: AgentSession,\n\t\tprivate readonly footerDataProvider?: ReadonlyFooterDataProvider,\n\t) {}\n\n\tprivate getData() {\n\t\tconst host = `${os.userInfo().username}@${os.hostname()}`;\n\t\tconst cwd = process.cwd();\n\t\tconst repo = this.footerDataProvider?.getGitRepoName() ?? undefined;\n\t\tconst branch = this.footerDataProvider?.getGitBranch() ?? undefined;\n\t\tconst workspace = this.agentSession?.sessionName;\n\n\t\treturn {\n\t\t\tbranch,\n\t\t\tcwd,\n\t\t\thost,\n\t\t\trepo,\n\t\t\tworkspace,\n\t\t};\n\t}\n\n\tprivate renderCompact(width: number): string[] {\n\t\tconst { branch, cwd, host, repo, workspace } = this.getData();\n\n\t\tconst line1 = truncateAnsi(`${bold(color(COLORS.title, TITLE))} ${dim(VERSION)}`, width);\n\t\tconst line2 = subtle(truncateAnsi(bulletJoin([maybePrefix(\"repo\", repo), maybePrefix(\"branch\", branch)]), width));\n\t\tconst line3 = subtle(\n\t\t\ttruncateAnsi(bulletJoin([maybePrefix(\"workspace\", workspace), maybePrefix(\"host\", host)]), width),\n\t\t);\n\t\tconst line4 = subtle(truncateAnsi(maybePrefix(\"cwd\", compactPath(cwd, Math.max(16, width - 8))) ?? \"\", width));\n\n\t\treturn [line1, line2, line3, line4];\n\t}\n\n\trender(width: number): string[] {\n\t\tif (width <= 0) return [\"\"];\n\t\tif (width < 72) return this.renderCompact(width);\n\n\t\tconst { branch, cwd, host, repo, workspace } = this.getData();\n\t\tconst logoWidth = visibleWidth(LOGO[0]);\n\t\tconst gap = 2;\n\t\tconst sidePadding = 1;\n\t\tconst minTextWidth = 12;\n\t\tconst maxTextWidth = Math.max(minTextWidth, width - logoWidth - gap - sidePadding * 2 - 2);\n\n\t\tconst baseRows = [\n\t\t\t`${bold(color(COLORS.title, TITLE))} ${dim(VERSION)}`,\n\t\t\tcolor(COLORS.title, bulletJoin([maybePrefix(\"repo\", repo), maybePrefix(\"branch\", branch)])),\n\t\t\tcolor(COLORS.title, bulletJoin([maybePrefix(\"workspace\", workspace), maybePrefix(\"host\", host)])),\n\t\t\t\"\",\n\t\t];\n\n\t\tconst textRows = [\n\t\t\t...baseRows,\n\t\t\tcolor(COLORS.title, maybePrefix(\"cwd\", compactPath(cwd, Math.max(18, maxTextWidth - 10))) ?? \"\"),\n\t\t\t\"\",\n\t\t];\n\t\tconst textWidth = Math.max(\n\t\t\tminTextWidth,\n\t\t\tMath.min(\n\t\t\t\tmaxTextWidth,\n\t\t\t\ttextRows.reduce((max, row) => Math.max(max, visibleWidth(row)), 0),\n\t\t\t),\n\t\t);\n\t\tconst innerWidth = logoWidth + gap + textWidth + sidePadding * 2;\n\n\t\tconst topBorder =\n\t\t\tcolor(COLORS.border, \"╭\") + color(COLORS.border, \"─\".repeat(innerWidth)) + color(COLORS.border, \"╮\");\n\n\t\tconst bottomBorder =\n\t\t\tcolor(COLORS.border, \"╰\") + color(COLORS.border, \"─\".repeat(innerWidth)) + color(COLORS.border, \"╯\");\n\n\t\tconst lines: string[] = [];\n\n\t\t// lines.push(\"\");\n\t\tlines.push(topBorder);\n\t\tfor (let i = 0; i < LOGO.length; i += 1) {\n\t\t\tconst logo = renderColoredLogoLine(LOGO[i]);\n\t\t\tconst text = padAnsi(truncateAnsi(textRows[i] ?? \"\", textWidth), textWidth);\n\n\t\t\tlines.push(`${color(COLORS.border, \"│\")} ${logo}${\" \".repeat(gap)}${text} ${color(COLORS.border, \"│\")}`);\n\t\t}\n\t\tlines.push(bottomBorder);\n\t\t// lines.push(\"\");\n\t\treturn lines.map((line) => truncateToWidth(line, width));\n\t}\n\n\tinvalidate(): void {}\n}\n\nexport default Header;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"top-bar.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/top-bar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,KAAK,EAAa,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAIlF,KAAK,SAAS,GACX;IACA,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACnB,GACD,SAAS,CAAC;AAEb,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,SAAS,CAAC;IAC1B,gBAAgB,EAAE,MAAM,MAAM,CAAC;IAC/B,WAAW,EAAE,kBAAkB,CAAC;CAChC;AAkCD,qBAAa,MAAO,YAAW,SAAS;IAC3B,OAAO,CAAC,OAAO;IAA3B,YAAoB,OAAO,EAAE,aAAa,EAAI;IAE9C,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,gBAAgB;IAexB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CA8B9B;IAED,UAAU,IAAI,IAAI,CAAG;CACrB","sourcesContent":["import type { Component } from \"@apholdings/jensen-tui\";\nimport { visibleWidth } from \"@apholdings/jensen-tui\";\nimport type { AppAction, KeybindingsManager } from \"../../../core/keybindings.js\";\nimport { type ThemeColor, theme } from \"../theme/theme.js\";\nimport { appKey } from \"./keybinding-hints.js\";\n\ntype ModelLike =\n\t| {\n\t\t\tprovider?: string;\n\t\t\tapiProvider?: string;\n\t\t\tid?: string;\n\t\t\tmodelId?: string;\n\t\t\tname?: string;\n\t\t\treasoning?: boolean;\n\t }\n\t| undefined;\n\nexport interface TopBarOptions {\n\tgetModel: () => ModelLike;\n\tgetThinkingLevel: () => string;\n\tkeybindings: KeybindingsManager;\n}\n\nfunction shortenProvider(input: string): string {\n\treturn input\n\t\t.replace(/^anthropic$/i, \"claude\")\n\t\t.replace(/^openai$/i, \"openai\")\n\t\t.replace(/^google$/i, \"google\")\n\t\t.replace(/^zai$/i, \"z.ai\")\n\t\t.replace(/^openrouter$/i, \"orouter\");\n}\n\nfunction shortenModelName(input: string): string {\n\treturn input\n\t\t.replace(/^anthropic\\//, \"\")\n\t\t.replace(/^openai\\//, \"\")\n\t\t.replace(/^google\\//, \"\")\n\t\t.replace(/^zai\\//, \"\")\n\t\t.replace(/^openrouter\\//, \"\")\n\t\t.replace(/^claude-/, \"\")\n\t\t.replace(/^models\\//, \"\");\n}\n\nfunction capitalizeKey(key: string): string {\n\treturn key\n\t\t.split(\"/\")\n\t\t.map((k) =>\n\t\t\tk\n\t\t\t\t.split(\"+\")\n\t\t\t\t.map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n\t\t\t\t.join(\"+\"),\n\t\t)\n\t\t.join(\"/\");\n}\n\nexport class TopBar implements Component {\n\tconstructor(private options: TopBarOptions) {}\n\n\tprivate getAppKeyDisplay(action: AppAction): string {\n\t\treturn capitalizeKey(appKey(this.options.keybindings, action));\n\t}\n\n\tprivate getProviderModel(): { provider: string; model: string } {\n\t\tconst model = this.options.getModel();\n\t\tif (!model) {\n\t\t\treturn { provider: \"no-provider\", model: \"no-model\" };\n\t\t}\n\n\t\tconst provider = model.provider ?? model.apiProvider ?? \"unknown\";\n\t\tconst rawModel = model.id ?? model.modelId ?? model.name ?? \"unknown-model\";\n\n\t\treturn {\n\t\t\tprovider: shortenProvider(String(provider)),\n\t\t\tmodel: shortenModelName(String(rawModel)),\n\t\t};\n\t}\n\n\trender(width: number): string[] {\n\t\tconst model = this.options.getModel();\n\t\tconst parts: string[] = [];\n\n\t\tif (model?.reasoning) {\n\t\t\tconst level = this.options.getThinkingLevel();\n\t\t\tconst colorKey = `thinking${level.charAt(0).toUpperCase()}${level.slice(1)}` as ThemeColor;\n\n\t\t\tparts.push(\n\t\t\t\ttheme.fg(\"muted\", this.getAppKeyDisplay(\"cycleThinkingLevel\")) +\n\t\t\t\t\ttheme.fg(\"dim\", \" Thinking: \") +\n\t\t\t\t\ttheme.fg(colorKey, level),\n\t\t\t);\n\t\t}\n\n\t\tparts.push(theme.fg(\"muted\", this.getAppKeyDisplay(\"selectModel\")) + theme.fg(\"dim\", \" Model\"));\n\n\t\tconst leftString = ` ${parts.join(theme.fg(\"dim\", \" · \"))}`;\n\t\tconst pm = this.getProviderModel();\n\n\t\tconst rightCandidates = [theme.fg(\"dim\", `${pm.provider}/${pm.model} `), theme.fg(\"dim\", `${pm.model} `), \"\"];\n\n\t\tconst maxRightWidth = Math.max(0, width - visibleWidth(leftString));\n\t\tconst rightString = rightCandidates.find((candidate) => visibleWidth(candidate) <= maxRightWidth) ?? \"\";\n\n\t\tconst leftWidth = visibleWidth(leftString);\n\t\tconst rightWidth = visibleWidth(rightString);\n\t\tconst spaces = Math.max(0, width - leftWidth - rightWidth);\n\n\t\treturn [leftString + \" \".repeat(spaces) + rightString];\n\t}\n\n\tinvalidate(): void {}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"top-bar.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/top-bar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,KAAK,EAAa,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAIlF,KAAK,SAAS,GACX;IACA,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACnB,GACD,SAAS,CAAC;AAEb,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,SAAS,CAAC;IAC1B,gBAAgB,EAAE,MAAM,MAAM,CAAC;IAC/B,WAAW,EAAE,kBAAkB,CAAC;CAChC;AAkCD,qBAAa,MAAO,YAAW,SAAS;IAC3B,OAAO,CAAC,OAAO;IAA3B,YAAoB,OAAO,EAAE,aAAa,EAAI;IAE9C,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,gBAAgB;IAexB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CA8B9B;IAED,UAAU,IAAI,IAAI,CAAG;CACrB","sourcesContent":["import type { Component } from \"@apholdings/jensen-tui\";\nimport { visibleWidth } from \"@apholdings/jensen-tui\";\nimport type { AppAction, KeybindingsManager } from \"../../../core/keybindings.js\";\nimport { type ThemeColor, theme } from \"../theme/theme.js\";\nimport { appKey } from \"./keybinding-hints.js\";\n\ntype ModelLike =\n\t| {\n\t\t\tprovider?: string;\n\t\t\tapiProvider?: string;\n\t\t\tid?: string;\n\t\t\tmodelId?: string;\n\t\t\tname?: string;\n\t\t\treasoning?: boolean;\n\t }\n\t| undefined;\n\nexport interface TopBarOptions {\n\tgetModel: () => ModelLike;\n\tgetThinkingLevel: () => string;\n\tkeybindings: KeybindingsManager;\n}\n\nfunction shortenProvider(input: string): string {\n\treturn input\n\t\t.replace(/^anthropic$/i, \"claude\")\n\t\t.replace(/^openai$/i, \"openai\")\n\t\t.replace(/^google$/i, \"google\")\n\t\t.replace(/^zai$/i, \"z.ai\")\n\t\t.replace(/^openrouter$/i, \"orouter\");\n}\n\nfunction shortenModelName(input: string): string {\n\treturn input\n\t\t.replace(/^anthropic\\//, \"\")\n\t\t.replace(/^openai\\//, \"\")\n\t\t.replace(/^google\\//, \"\")\n\t\t.replace(/^zai\\//, \"\")\n\t\t.replace(/^openrouter\\//, \"\")\n\t\t.replace(/^claude-/, \"\")\n\t\t.replace(/^models\\//, \"\");\n}\n\nfunction capitalizeKey(key: string): string {\n\treturn key\n\t\t.split(\"/\")\n\t\t.map((k) =>\n\t\t\tk\n\t\t\t\t.split(\"+\")\n\t\t\t\t.map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n\t\t\t\t.join(\"+\"),\n\t\t)\n\t\t.join(\"/\");\n}\n\nexport class TopBar implements Component {\n\tconstructor(private options: TopBarOptions) {}\n\n\tprivate getAppKeyDisplay(action: AppAction): string {\n\t\treturn capitalizeKey(appKey(this.options.keybindings, action));\n\t}\n\n\tprivate getProviderModel(): { provider: string; model: string } {\n\t\tconst model = this.options.getModel();\n\t\tif (!model) {\n\t\t\treturn { provider: \"no-provider\", model: \"no-model\" };\n\t\t}\n\n\t\tconst provider = model.provider ?? model.apiProvider ?? \"unknown\";\n\t\tconst rawModel = model.id ?? model.modelId ?? model.name ?? \"unknown-model\";\n\n\t\treturn {\n\t\t\tprovider: shortenProvider(String(provider)),\n\t\t\tmodel: shortenModelName(String(rawModel)),\n\t\t};\n\t}\n\n\trender(width: number): string[] {\n\t\tconst model = this.options.getModel();\n\t\tconst parts: string[] = [];\n\n\t\tif (model?.reasoning) {\n\t\t\tconst level = this.options.getThinkingLevel();\n\t\t\tconst colorKey = `thinking${level.charAt(0).toUpperCase()}${level.slice(1)}` as ThemeColor;\n\n\t\t\tparts.push(\n\t\t\t\ttheme.fg(\"muted\", this.getAppKeyDisplay(\"cycleThinkingLevel\")) +\n\t\t\t\t\ttheme.fg(\"dim\", \" Thinking: \") +\n\t\t\t\t\ttheme.fg(colorKey, level),\n\t\t\t);\n\t\t}\n\n\t\tparts.push(theme.fg(\"muted\", this.getAppKeyDisplay(\"selectModel\")) + theme.fg(\"dim\", \" Model\"));\n\n\t\tconst leftString = ` ${parts.join(theme.fg(\"dim\", \" · \"))}`;\n\t\tconst pm = this.getProviderModel();\n\n\t\tconst rightCandidates = [theme.fg(\"dim\", `${pm.provider}/${pm.model} `), theme.fg(\"dim\", `${pm.model} `), \"\"];\n\n\t\tconst maxRightWidth = Math.max(0, width - visibleWidth(leftString));\n\t\tconst rightString = rightCandidates.find((candidate) => visibleWidth(candidate) <= maxRightWidth) ?? \"\";\n\n\t\tconst leftWidth = visibleWidth(leftString);\n\t\tconst rightWidth = visibleWidth(rightString);\n\t\tconst spaces = Math.max(0, width - leftWidth - rightWidth);\n\n\t\treturn [\"\", leftString + \" \".repeat(spaces) + rightString];\n\t}\n\n\tinvalidate(): void {}\n}\n"]}
|
|
@@ -67,7 +67,7 @@ export class TopBar {
|
|
|
67
67
|
const leftWidth = visibleWidth(leftString);
|
|
68
68
|
const rightWidth = visibleWidth(rightString);
|
|
69
69
|
const spaces = Math.max(0, width - leftWidth - rightWidth);
|
|
70
|
-
return [leftString + " ".repeat(spaces) + rightString];
|
|
70
|
+
return ["", leftString + " ".repeat(spaces) + rightString];
|
|
71
71
|
}
|
|
72
72
|
invalidate() { }
|
|
73
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"top-bar.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/top-bar.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"top-bar.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/top-bar.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Component } from \"@apholdings/jensen-tui\";\nimport { visibleWidth } from \"@apholdings/jensen-tui\";\nimport type { AppAction, KeybindingsManager } from \"../../../core/keybindings.js\";\nimport { type ThemeColor, theme } from \"../theme/theme.js\";\nimport { appKey } from \"./keybinding-hints.js\";\n\ntype ModelLike =\n\t| {\n\t\t\tprovider?: string;\n\t\t\tapiProvider?: string;\n\t\t\tid?: string;\n\t\t\tmodelId?: string;\n\t\t\tname?: string;\n\t\t\treasoning?: boolean;\n\t }\n\t| undefined;\n\nexport interface TopBarOptions {\n\tgetModel: () => ModelLike;\n\tgetThinkingLevel: () => string;\n\tkeybindings: KeybindingsManager;\n}\n\nfunction shortenProvider(input: string): string {\n\treturn input\n\t\t.replace(/^anthropic$/i, \"claude\")\n\t\t.replace(/^openai$/i, \"openai\")\n\t\t.replace(/^google$/i, \"google\")\n\t\t.replace(/^zai$/i, \"z.ai\")\n\t\t.replace(/^openrouter$/i, \"orouter\");\n}\n\nfunction shortenModelName(input: string): string {\n\treturn input\n\t\t.replace(/^anthropic\\//, \"\")\n\t\t.replace(/^openai\\//, \"\")\n\t\t.replace(/^google\\//, \"\")\n\t\t.replace(/^zai\\//, \"\")\n\t\t.replace(/^openrouter\\//, \"\")\n\t\t.replace(/^claude-/, \"\")\n\t\t.replace(/^models\\//, \"\");\n}\n\nfunction capitalizeKey(key: string): string {\n\treturn key\n\t\t.split(\"/\")\n\t\t.map((k) =>\n\t\t\tk\n\t\t\t\t.split(\"+\")\n\t\t\t\t.map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n\t\t\t\t.join(\"+\"),\n\t\t)\n\t\t.join(\"/\");\n}\n\nexport class TopBar implements Component {\n\tconstructor(private options: TopBarOptions) {}\n\n\tprivate getAppKeyDisplay(action: AppAction): string {\n\t\treturn capitalizeKey(appKey(this.options.keybindings, action));\n\t}\n\n\tprivate getProviderModel(): { provider: string; model: string } {\n\t\tconst model = this.options.getModel();\n\t\tif (!model) {\n\t\t\treturn { provider: \"no-provider\", model: \"no-model\" };\n\t\t}\n\n\t\tconst provider = model.provider ?? model.apiProvider ?? \"unknown\";\n\t\tconst rawModel = model.id ?? model.modelId ?? model.name ?? \"unknown-model\";\n\n\t\treturn {\n\t\t\tprovider: shortenProvider(String(provider)),\n\t\t\tmodel: shortenModelName(String(rawModel)),\n\t\t};\n\t}\n\n\trender(width: number): string[] {\n\t\tconst model = this.options.getModel();\n\t\tconst parts: string[] = [];\n\n\t\tif (model?.reasoning) {\n\t\t\tconst level = this.options.getThinkingLevel();\n\t\t\tconst colorKey = `thinking${level.charAt(0).toUpperCase()}${level.slice(1)}` as ThemeColor;\n\n\t\t\tparts.push(\n\t\t\t\ttheme.fg(\"muted\", this.getAppKeyDisplay(\"cycleThinkingLevel\")) +\n\t\t\t\t\ttheme.fg(\"dim\", \" Thinking: \") +\n\t\t\t\t\ttheme.fg(colorKey, level),\n\t\t\t);\n\t\t}\n\n\t\tparts.push(theme.fg(\"muted\", this.getAppKeyDisplay(\"selectModel\")) + theme.fg(\"dim\", \" Model\"));\n\n\t\tconst leftString = ` ${parts.join(theme.fg(\"dim\", \" · \"))}`;\n\t\tconst pm = this.getProviderModel();\n\n\t\tconst rightCandidates = [theme.fg(\"dim\", `${pm.provider}/${pm.model} `), theme.fg(\"dim\", `${pm.model} `), \"\"];\n\n\t\tconst maxRightWidth = Math.max(0, width - visibleWidth(leftString));\n\t\tconst rightString = rightCandidates.find((candidate) => visibleWidth(candidate) <= maxRightWidth) ?? \"\";\n\n\t\tconst leftWidth = visibleWidth(leftString);\n\t\tconst rightWidth = visibleWidth(rightString);\n\t\tconst spaces = Math.max(0, width - leftWidth - rightWidth);\n\n\t\treturn [\"\", leftString + \" \".repeat(spaces) + rightString];\n\t}\n\n\tinvalidate(): void {}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-message.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/user-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,KAAK,aAAa,EAAU,MAAM,wBAAwB,CAAC;AAMzF;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,SAAS;IAClD,YAAY,IAAI,EAAE,MAAM,EAAE,aAAa,GAAE,aAAkC,
|
|
1
|
+
{"version":3,"file":"user-message.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/user-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,KAAK,aAAa,EAAU,MAAM,wBAAwB,CAAC;AAMzF;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,SAAS;IAClD,YAAY,IAAI,EAAE,MAAM,EAAE,aAAa,GAAE,aAAkC,EAW1E;IAEQ,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CASvC;CACD","sourcesContent":["import { Container, Markdown, type MarkdownTheme, Spacer } from \"@apholdings/jensen-tui\";\nimport { getMarkdownTheme, theme } from \"../theme/theme.js\";\n\nconst OSC133_ZONE_START = \"\\x1b]133;A\\x07\";\nconst OSC133_ZONE_END = \"\\x1b]133;B\\x07\";\n\n/**\n * Component that renders a user message\n */\nexport class UserMessageComponent extends Container {\n\tconstructor(text: string, markdownTheme: MarkdownTheme = getMarkdownTheme()) {\n\t\tsuper();\n\n\t\tthis.addChild(\n\t\t\tnew Markdown(text, 1, 1, markdownTheme, {\n\t\t\t\tbgColor: (text: string) => theme.bg(\"userMessageBg\", text),\n\t\t\t\tcolor: (text: string) => theme.fg(\"userMessageText\", text),\n\t\t\t}),\n\t\t);\n\n\t\tthis.addChild(new Spacer(1));\n\t}\n\n\toverride render(width: number): string[] {\n\t\tconst lines = super.render(width);\n\t\tif (lines.length === 0) {\n\t\t\treturn lines;\n\t\t}\n\n\t\tlines[0] = OSC133_ZONE_START + lines[0];\n\t\tlines[lines.length - 1] = lines[lines.length - 1] + OSC133_ZONE_END;\n\t\treturn lines;\n\t}\n}\n"]}
|
|
@@ -8,11 +8,11 @@ const OSC133_ZONE_END = "\x1b]133;B\x07";
|
|
|
8
8
|
export class UserMessageComponent extends Container {
|
|
9
9
|
constructor(text, markdownTheme = getMarkdownTheme()) {
|
|
10
10
|
super();
|
|
11
|
-
this.addChild(new Spacer(1));
|
|
12
11
|
this.addChild(new Markdown(text, 1, 1, markdownTheme, {
|
|
13
12
|
bgColor: (text) => theme.bg("userMessageBg", text),
|
|
14
13
|
color: (text) => theme.fg("userMessageText", text),
|
|
15
14
|
}));
|
|
15
|
+
this.addChild(new Spacer(1));
|
|
16
16
|
}
|
|
17
17
|
render(width) {
|
|
18
18
|
const lines = super.render(width);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-message.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/user-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAsB,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAC3C,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,SAAS;IAClD,YAAY,IAAY,EAAE,aAAa,GAAkB,gBAAgB,EAAE,EAAE;QAC5E,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"user-message.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/user-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAsB,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAC3C,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,SAAS;IAClD,YAAY,IAAY,EAAE,aAAa,GAAkB,gBAAgB,EAAE,EAAE;QAC5E,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,QAAQ,CACZ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE;YACvC,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC;YAC1D,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC;SAC1D,CAAC,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAAA,CAC7B;IAEQ,MAAM,CAAC,KAAa,EAAY;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACd,CAAC;QAED,KAAK,CAAC,CAAC,CAAC,GAAG,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC;QACpE,OAAO,KAAK,CAAC;IAAA,CACb;CACD","sourcesContent":["import { Container, Markdown, type MarkdownTheme, Spacer } from \"@apholdings/jensen-tui\";\nimport { getMarkdownTheme, theme } from \"../theme/theme.js\";\n\nconst OSC133_ZONE_START = \"\\x1b]133;A\\x07\";\nconst OSC133_ZONE_END = \"\\x1b]133;B\\x07\";\n\n/**\n * Component that renders a user message\n */\nexport class UserMessageComponent extends Container {\n\tconstructor(text: string, markdownTheme: MarkdownTheme = getMarkdownTheme()) {\n\t\tsuper();\n\n\t\tthis.addChild(\n\t\t\tnew Markdown(text, 1, 1, markdownTheme, {\n\t\t\t\tbgColor: (text: string) => theme.bg(\"userMessageBg\", text),\n\t\t\t\tcolor: (text: string) => theme.fg(\"userMessageText\", text),\n\t\t\t}),\n\t\t);\n\n\t\tthis.addChild(new Spacer(1));\n\t}\n\n\toverride render(width: number): string[] {\n\t\tconst lines = super.render(width);\n\t\tif (lines.length === 0) {\n\t\t\treturn lines;\n\t\t}\n\n\t\tlines[0] = OSC133_ZONE_START + lines[0];\n\t\tlines[lines.length - 1] = lines[lines.length - 1] + OSC133_ZONE_END;\n\t\treturn lines;\n\t}\n}\n"]}
|