termdeck-cli 2.0.6 → 2.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -1
- package/package.json +1 -1
- package/src/dashboard.js +28 -23
package/README.md
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
```text
|
|
4
|
+
▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄
|
|
5
|
+
█▄▄ ▄▄█ █ ▄▄▄▄█ █ ▄▄▄▄█ █ ▄ ▄ █ █ ▄▄ ▀█ █ ▄▄▄▄█ █ ▄▄▄▄█ █ █▀ ▄█
|
|
6
|
+
█ █ █ ▄▄▄█▄ █ ▄ ▄▄█ █ █ █ █ █ █▄▀ █ █ ▄▄▄█▄ █ █▄▄▄▄ █ ▄ ▀█▄
|
|
7
|
+
█▄█ █▄▄▄▄▄█ █▄█▄▄▄█ █▄█▀█▄█ █▄▄▄▄█▀ █▄▄▄▄▄█ █▄▄▄▄▄█ █▄██▄▄█
|
|
8
|
+
```
|
|
4
9
|
|
|
5
10
|
**A beautiful, multi-pane TUI dashboard for managing your local development projects.**
|
|
6
11
|
|
package/package.json
CHANGED
package/src/dashboard.js
CHANGED
|
@@ -7,9 +7,10 @@
|
|
|
7
7
|
* exactly the rows it needs, with zero gaps between panes:
|
|
8
8
|
*
|
|
9
9
|
* +-------------------------------------------------------------------+
|
|
10
|
-
* | 15:14:19
|
|
11
|
-
* |
|
|
12
|
-
* |
|
|
10
|
+
* | 15:14:19 ● DAEMON ON |
|
|
11
|
+
* | (4-line ASCII TERMDECK banner, centered |
|
|
12
|
+
* | columns 0-62, rows 1-4 of the 5-row masthead) |
|
|
13
|
+
* | |
|
|
13
14
|
* | [ALL 14] [LIVE 6] [EXP 4] … /search (regex) [box] |
|
|
14
15
|
* +---------------------------------+---------------------------------+
|
|
15
16
|
* | PROJECTS (14) | DETAILS: hyperion-core |
|
|
@@ -42,7 +43,7 @@ const { getGitInfo, detectStack, generateCommitMessage, commitAndPush } = requir
|
|
|
42
43
|
const { launchAgent, tailAgentLog, stopAllAgents, activeTails } = require('./agentManager');
|
|
43
44
|
const { startMonitoring, stopMonitoring, stopAllMonitoring } = require('./processMonitor');
|
|
44
45
|
|
|
45
|
-
const LAYOUT = { rows: 12, cols: 12, headerHeight:
|
|
46
|
+
const LAYOUT = { rows: 12, cols: 12, headerHeight: 8, footerHeight: 2 };
|
|
46
47
|
|
|
47
48
|
/* ------------------------------------------------------------------ *
|
|
48
49
|
* Theme — dark, modern palette, pastel status tags, thin borders.
|
|
@@ -227,13 +228,18 @@ function launchDashboard(config, options = {}) {
|
|
|
227
228
|
return widget;
|
|
228
229
|
}
|
|
229
230
|
|
|
230
|
-
// Two-strip header: a
|
|
231
|
-
// 3-row chips strip
|
|
232
|
-
// renderer that mutates
|
|
233
|
-
const
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
231
|
+
// Two-strip header: a 5-row masthead (row 0 clock + daemon, rows 1-4 the
|
|
232
|
+
// centered ASCII banner) above a 3-row chips strip. updateHeader() is the
|
|
233
|
+
// only renderer that mutates the dynamic parts.
|
|
234
|
+
const BANNER = [
|
|
235
|
+
'\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584',
|
|
236
|
+
'\u2588\u2584\u2584 \u2584\u2584\u2588 \u2588 \u2584\u2584\u2584\u2584\u2588 \u2588 \u2584\u2584\u2584\u2584\u2588 \u2588 \u2584 \u2584 \u2588 \u2588 \u2584\u2584 \u2580\u2588 \u2588 \u2584\u2584\u2584\u2584\u2588 \u2588 \u2584\u2584\u2584\u2584\u2588 \u2588 \u2588\u2580 \u2584\u2588',
|
|
237
|
+
' \u2588 \u2588 \u2588 \u2584\u2584\u2584\u2588\u2584 \u2588 \u2584 \u2584\u2584\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584\u2580 \u2588 \u2588 \u2584\u2584\u2584\u2588\u2584 \u2588 \u2588\u2584\u2584\u2584\u2584 \u2588 \u2584 \u2580\u2588\u2584',
|
|
238
|
+
' \u2588\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2588\u2584\u2584\u2584\u2588 \u2588\u2584\u2588\u2580\u2588\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2588\u2580 \u2588\u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2588\u2588\u2584\u2584\u2588',
|
|
239
|
+
].join('\n');
|
|
240
|
+
const BANNER_FG = '#AAAAAA';
|
|
241
|
+
const HEADER_ROWS = 8;
|
|
242
|
+
const CHIP_STRIP_TOP = 5;
|
|
237
243
|
const CHIP_ORDER = ['all', 'live', 'exp', 'pend', 'unknown', 'scrap'];
|
|
238
244
|
const CHIP_LABELS = { all: 'ALL', live: 'LIVE', exp: 'EXP', pend: 'PEND', unknown: 'UNKNOWN', scrap: 'SCRAP' };
|
|
239
245
|
const CHIP_WIDTHS = { all: 8, live: 8, exp: 8, pend: 8, unknown: 12, scrap: 11 };
|
|
@@ -250,14 +256,14 @@ function launchDashboard(config, options = {}) {
|
|
|
250
256
|
top: 0,
|
|
251
257
|
left: 0,
|
|
252
258
|
width: '100%',
|
|
253
|
-
height:
|
|
259
|
+
height: 5,
|
|
254
260
|
tags: true,
|
|
255
261
|
style: { bg: THEME.bg, fg: THEME.text },
|
|
256
262
|
});
|
|
257
263
|
|
|
258
264
|
const clockLabel = blessed.text({
|
|
259
265
|
parent: masthead,
|
|
260
|
-
top:
|
|
266
|
+
top: 0,
|
|
261
267
|
left: 1,
|
|
262
268
|
height: 1,
|
|
263
269
|
tags: true,
|
|
@@ -267,21 +273,20 @@ function launchDashboard(config, options = {}) {
|
|
|
267
273
|
|
|
268
274
|
const titleBox = blessed.box({
|
|
269
275
|
parent: masthead,
|
|
270
|
-
top:
|
|
271
|
-
left:
|
|
272
|
-
width:
|
|
273
|
-
height:
|
|
276
|
+
top: 1,
|
|
277
|
+
left: 0,
|
|
278
|
+
width: '100%',
|
|
279
|
+
height: 4,
|
|
274
280
|
tags: true,
|
|
275
281
|
align: 'center',
|
|
276
|
-
valign: '
|
|
277
|
-
|
|
278
|
-
style: { fg:
|
|
279
|
-
content: TITLE_TEXT,
|
|
282
|
+
valign: 'top',
|
|
283
|
+
content: BANNER,
|
|
284
|
+
style: { fg: BANNER_FG, bg: THEME.bg },
|
|
280
285
|
});
|
|
281
286
|
|
|
282
287
|
const daemonLabel = blessed.text({
|
|
283
288
|
parent: masthead,
|
|
284
|
-
top:
|
|
289
|
+
top: 0,
|
|
285
290
|
right: 1,
|
|
286
291
|
height: 1,
|
|
287
292
|
tags: true,
|
|
@@ -336,7 +341,7 @@ function launchDashboard(config, options = {}) {
|
|
|
336
341
|
const footerHeight = 2; // bordered footer box
|
|
337
342
|
const bodyHeight = Math.max(6, screen.rows - bodyTop - footerHeight);
|
|
338
343
|
// Bordered buttons need 5 rows x 3 cells (15) + border(2) + label-row(0). When the
|
|
339
|
-
// window is too short (80x24 → body
|
|
344
|
+
// window is too short (80x24 → body 14), the grid collapses to 1-line chips.
|
|
340
345
|
const large = bodyHeight >= 29;
|
|
341
346
|
const actionsHeight = large ? 18 : 8; // border(2) + grid(5x3 or 5x1)
|
|
342
347
|
const outputHeight = Math.max(3, Math.min(large ? 6 : 4, bodyHeight - actionsHeight - (large ? 8 : 5)));
|