@felan-ai/ext-background-bash 0.3.0

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.
@@ -0,0 +1,352 @@
1
+ import { matchesKey, truncateToWidth } from '@earendil-works/pi-tui';
2
+ const LOG_SCROLLBACK_LINES = 2_000;
3
+ const LOG_VISIBLE_LINES = 28;
4
+ const JOB_LIST_VISIBLE_ROWS = 18;
5
+ const PADDING_X = 2;
6
+ const PADDING_Y = 1;
7
+ export class BackgroundBashOverlay {
8
+ manager;
9
+ theme;
10
+ done;
11
+ requestRender;
12
+ jobs = [];
13
+ selected = 0;
14
+ listScroll = 0;
15
+ logLines = [];
16
+ logScroll = 0;
17
+ loading = false;
18
+ message = '';
19
+ view = 'list';
20
+ constructor(manager, theme, done, requestRender) {
21
+ this.manager = manager;
22
+ this.theme = theme;
23
+ this.done = done;
24
+ this.requestRender = requestRender;
25
+ void this.refresh();
26
+ }
27
+ handleInput(data) {
28
+ if (matchesKey(data, 'escape') || data === 'q') {
29
+ this.done();
30
+ return;
31
+ }
32
+ if (this.view === 'list') {
33
+ this.handleListInput(data);
34
+ return;
35
+ }
36
+ this.handleDetailInput(data);
37
+ }
38
+ render(width) {
39
+ const lines = this.view === 'list' ? this.renderList() : this.renderDetail();
40
+ const innerWidth = Math.max(1, width - PADDING_X * 2);
41
+ const prefix = ' '.repeat(PADDING_X);
42
+ const padded = lines.map((line) => `${prefix}${truncateToWidth(line, innerWidth, '…')}${prefix}`);
43
+ return [...Array(PADDING_Y).fill(''), ...padded, ...Array(PADDING_Y).fill('')];
44
+ }
45
+ invalidate() { }
46
+ handleListInput(data) {
47
+ if (matchesKey(data, 'up')) {
48
+ this.selectListJob(-1);
49
+ return;
50
+ }
51
+ if (matchesKey(data, 'down')) {
52
+ this.selectListJob(1);
53
+ return;
54
+ }
55
+ if (matchesKey(data, 'ctrl+u')) {
56
+ this.selectListJob(-JOB_LIST_VISIBLE_ROWS);
57
+ return;
58
+ }
59
+ if (matchesKey(data, 'ctrl+d')) {
60
+ this.selectListJob(JOB_LIST_VISIBLE_ROWS);
61
+ return;
62
+ }
63
+ if (matchesKey(data, 'home') || data === 'g') {
64
+ this.selected = 0;
65
+ this.clampListScroll();
66
+ this.requestRender();
67
+ return;
68
+ }
69
+ if (matchesKey(data, 'end') || data === 'G') {
70
+ this.selected = Math.max(0, this.jobs.length - 1);
71
+ this.clampListScroll();
72
+ this.requestRender();
73
+ return;
74
+ }
75
+ if (matchesKey(data, 'return') || matchesKey(data, 'right')) {
76
+ void this.openDetail();
77
+ return;
78
+ }
79
+ if (data === 'r') {
80
+ void this.refresh();
81
+ return;
82
+ }
83
+ if (data === 's') {
84
+ void this.stopSelected();
85
+ return;
86
+ }
87
+ if (data === 'k')
88
+ void this.killSelected();
89
+ }
90
+ handleDetailInput(data) {
91
+ if (matchesKey(data, 'backspace') || matchesKey(data, 'left')) {
92
+ this.view = 'list';
93
+ this.requestRender();
94
+ return;
95
+ }
96
+ if (matchesKey(data, 'up')) {
97
+ this.scrollLog(-1);
98
+ return;
99
+ }
100
+ if (matchesKey(data, 'down')) {
101
+ this.scrollLog(1);
102
+ return;
103
+ }
104
+ if (matchesKey(data, 'ctrl+u')) {
105
+ this.scrollLog(-LOG_VISIBLE_LINES);
106
+ return;
107
+ }
108
+ if (matchesKey(data, 'ctrl+d')) {
109
+ this.scrollLog(LOG_VISIBLE_LINES);
110
+ return;
111
+ }
112
+ if (matchesKey(data, 'home') || data === 'g') {
113
+ this.logScroll = 0;
114
+ this.requestRender();
115
+ return;
116
+ }
117
+ if (matchesKey(data, 'end') || data === 'G') {
118
+ this.scrollLogToBottom();
119
+ this.requestRender();
120
+ return;
121
+ }
122
+ if (data === 'r') {
123
+ void this.refreshDetail();
124
+ return;
125
+ }
126
+ if (data === 's') {
127
+ void this.stopSelected();
128
+ return;
129
+ }
130
+ if (data === 'k')
131
+ void this.killSelected();
132
+ }
133
+ renderList() {
134
+ const lines = [];
135
+ const runningCount = this.jobs.filter((job) => job.status.status === 'running').length;
136
+ const runningLabel = runningCount === 1 ? '1 running' : `${runningCount} running`;
137
+ lines.push(this.theme.fg('accent', this.theme.bold('Background Bash'))
138
+ + ' '
139
+ + (runningCount > 0
140
+ ? this.theme.fg('accent', runningLabel)
141
+ : this.theme.fg('dim', runningLabel))
142
+ + this.theme.fg('dim', ' ↑↓ select • enter/→ open • s stop • k kill • r refresh • q/esc close'));
143
+ if (this.loading)
144
+ lines.push(this.theme.fg('warning', 'Refreshing...'));
145
+ if (this.message)
146
+ lines.push(this.theme.fg('muted', this.message));
147
+ lines.push('');
148
+ if (this.jobs.length === 0) {
149
+ lines.push(this.theme.fg('dim', 'No Background Bash processes found for this workspace.'));
150
+ return lines;
151
+ }
152
+ const start = this.listScroll;
153
+ const end = Math.min(this.jobs.length, start + JOB_LIST_VISIBLE_ROWS);
154
+ lines.push(this.theme.fg('dim', `Showing processes ${start + 1}-${end}/${this.jobs.length}`));
155
+ for (let index = start; index < end; index += 1) {
156
+ const job = this.jobs[index];
157
+ const marker = index === this.selected ? this.theme.fg('accent', '▶') : ' ';
158
+ lines.push(`${marker} ${job.meta.id} ${colorStatus(job, this.theme)} ${formatDuration(job)} ${oneLine(job.meta.command, 90)}`);
159
+ }
160
+ return lines;
161
+ }
162
+ renderDetail() {
163
+ const lines = [];
164
+ const current = this.jobs[this.selected];
165
+ if (!current)
166
+ return [this.theme.fg('dim', 'No process selected.')];
167
+ lines.push(this.theme.fg('accent', this.theme.bold(current.meta.id))
168
+ + this.theme.fg('dim', ' backspace/← processes • ↑↓ scroll • ctrl+u/d page • g/G top/bottom • r refresh • s stop • k kill • q/esc close'));
169
+ if (this.loading)
170
+ lines.push(this.theme.fg('warning', 'Refreshing...'));
171
+ if (this.message)
172
+ lines.push(this.theme.fg('muted', this.message));
173
+ lines.push('');
174
+ lines.push(`status=${colorStatus(current, this.theme)} duration=${formatDuration(current)}`);
175
+ lines.push(`command=${current.meta.command}`);
176
+ lines.push('');
177
+ const totalLines = this.logLines.length;
178
+ const start = Math.min(this.logScroll, Math.max(0, totalLines - 1));
179
+ const end = Math.min(totalLines, start + LOG_VISIBLE_LINES);
180
+ const range = totalLines === 0 ? '0/0' : `${start + 1}-${end}/${totalLines}`;
181
+ lines.push(this.theme.fg('accent', this.theme.bold('Log')) + this.theme.fg('dim', ` ${range}`));
182
+ const visible = this.logLines.slice(start, end);
183
+ for (const line of visible.length > 0 ? visible : ['(log is empty)']) {
184
+ lines.push(this.theme.fg('toolOutput', line));
185
+ }
186
+ return lines;
187
+ }
188
+ async refresh() {
189
+ this.loading = true;
190
+ this.requestRender();
191
+ try {
192
+ const selectedId = this.jobs[this.selected]?.meta.id;
193
+ this.jobs = await this.manager.list('all');
194
+ const selectedIndex = selectedId
195
+ ? this.jobs.findIndex((job) => job.meta.id === selectedId)
196
+ : -1;
197
+ this.selected = selectedIndex >= 0
198
+ ? selectedIndex
199
+ : Math.min(this.selected, Math.max(0, this.jobs.length - 1));
200
+ this.clampListScroll();
201
+ if (this.view === 'detail')
202
+ await this.refreshLog(false, true);
203
+ this.message = `Last refresh: ${new Date().toLocaleTimeString()}`;
204
+ }
205
+ catch (error) {
206
+ this.message = errorMessage(error);
207
+ }
208
+ finally {
209
+ this.loading = false;
210
+ this.requestRender();
211
+ }
212
+ }
213
+ async refreshDetail() {
214
+ await this.refresh();
215
+ await this.refreshLog(true, true);
216
+ }
217
+ async refreshLog(render = true, scrollToBottom = false) {
218
+ const current = this.jobs[this.selected];
219
+ if (!current) {
220
+ this.logLines = [];
221
+ this.logScroll = 0;
222
+ if (render)
223
+ this.requestRender();
224
+ return;
225
+ }
226
+ try {
227
+ const log = await this.manager.tail(current.meta.id, LOG_SCROLLBACK_LINES);
228
+ this.logLines = getProcessOutputLines(log);
229
+ }
230
+ catch (error) {
231
+ this.logLines = [errorMessage(error)];
232
+ }
233
+ if (scrollToBottom)
234
+ this.scrollLogToBottom();
235
+ else
236
+ this.clampLogScroll();
237
+ if (render)
238
+ this.requestRender();
239
+ }
240
+ selectListJob(delta) {
241
+ if (this.jobs.length === 0)
242
+ return;
243
+ this.selected = Math.max(0, Math.min(this.jobs.length - 1, this.selected + delta));
244
+ this.clampListScroll();
245
+ this.requestRender();
246
+ }
247
+ async openDetail() {
248
+ if (this.jobs.length === 0)
249
+ return;
250
+ this.view = 'detail';
251
+ await this.refreshLog(true, true);
252
+ }
253
+ clampListScroll() {
254
+ if (this.selected < this.listScroll)
255
+ this.listScroll = this.selected;
256
+ if (this.selected >= this.listScroll + JOB_LIST_VISIBLE_ROWS) {
257
+ this.listScroll = this.selected - JOB_LIST_VISIBLE_ROWS + 1;
258
+ }
259
+ this.listScroll = Math.max(0, Math.min(this.listScroll, Math.max(0, this.jobs.length - JOB_LIST_VISIBLE_ROWS)));
260
+ }
261
+ scrollLog(delta) {
262
+ this.logScroll += delta;
263
+ this.clampLogScroll();
264
+ this.requestRender();
265
+ }
266
+ scrollLogToBottom() {
267
+ this.logScroll = Math.max(0, this.logLines.length - LOG_VISIBLE_LINES);
268
+ }
269
+ clampLogScroll() {
270
+ this.logScroll = Math.max(0, Math.min(this.logScroll, Math.max(0, this.logLines.length - LOG_VISIBLE_LINES)));
271
+ }
272
+ async stopSelected() {
273
+ await this.signalSelected('SIGTERM', 'Stopping', 'Stopped');
274
+ }
275
+ async killSelected() {
276
+ await this.signalSelected('SIGKILL', 'Killing', 'Killed');
277
+ }
278
+ async signalSelected(signal, action, result) {
279
+ const current = this.jobs[this.selected];
280
+ if (!current)
281
+ return;
282
+ this.loading = true;
283
+ this.message = `${action} ${current.meta.id}...`;
284
+ this.requestRender();
285
+ try {
286
+ await this.manager.stop(current.meta.id, signal);
287
+ await this.refresh();
288
+ if (this.view === 'detail')
289
+ await this.refreshLog(false, true);
290
+ this.message = `${result} ${current.meta.id}`;
291
+ }
292
+ catch (error) {
293
+ this.message = errorMessage(error);
294
+ }
295
+ finally {
296
+ this.loading = false;
297
+ this.requestRender();
298
+ }
299
+ }
300
+ }
301
+ function getProcessOutputLines(log) {
302
+ const lines = log.split(/\r?\n/);
303
+ const outputMarkerIndex = lines.findIndex((line) => line.trim() === '--- output ---');
304
+ const source = outputMarkerIndex >= 0 ? lines.slice(outputMarkerIndex + 1) : lines;
305
+ const result = [];
306
+ for (let index = 0; index < source.length; index += 1) {
307
+ const line = source[index] ?? '';
308
+ const trimmed = line.trim();
309
+ if (trimmed === '--- spawned ---') {
310
+ if ((source[index + 1] ?? '').startsWith('pid: '))
311
+ index += 1;
312
+ continue;
313
+ }
314
+ if (/^--- (completed|failed|killed|unknown) ---$/u.test(trimmed)) {
315
+ while (/^(status|exitCode|signal|completed|error):/u.test(source[index + 1] ?? ''))
316
+ index += 1;
317
+ continue;
318
+ }
319
+ result.push(line);
320
+ }
321
+ while (result[0]?.trim() === '')
322
+ result.shift();
323
+ while (result.at(-1)?.trim() === '')
324
+ result.pop();
325
+ return result.length > 0 ? result : ['(no process output yet)'];
326
+ }
327
+ function colorStatus(job, theme) {
328
+ const color = job.status.status === 'running'
329
+ ? 'accent'
330
+ : job.status.status === 'completed'
331
+ ? 'success'
332
+ : job.status.status === 'failed'
333
+ ? 'error'
334
+ : 'warning';
335
+ return theme.fg(color, job.status.status);
336
+ }
337
+ function oneLine(value, max) {
338
+ const compact = value.replace(/\s+/gu, ' ').trim();
339
+ return compact.length > max ? `${compact.slice(0, max - 1)}…` : compact;
340
+ }
341
+ function formatDuration(job) {
342
+ const end = job.status.completedAt ?? Date.now();
343
+ const seconds = Math.max(0, Math.round((end - job.meta.startedAt) / 1_000));
344
+ if (seconds < 60)
345
+ return `${seconds}s`;
346
+ const minutes = Math.floor(seconds / 60);
347
+ return `${minutes}m${seconds % 60}s`;
348
+ }
349
+ function errorMessage(error) {
350
+ return error instanceof Error ? error.message : String(error);
351
+ }
352
+ //# sourceMappingURL=background-bash-overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background-bash-overlay.js","sourceRoot":"","sources":["../../src/ui/background-bash-overlay.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@felan-ai/ext-background-bash",
3
+ "version": "0.3.0",
4
+ "description": "Runtime-portable detached Bash processes for Felan",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/felan-ai/felan.git",
10
+ "directory": "packages/ext-background-bash"
11
+ },
12
+ "engines": {
13
+ "node": ">=22.19.0"
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "LICENSE",
18
+ "NOTICE",
19
+ "README.md"
20
+ ],
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/index.d.ts",
24
+ "import": "./dist/index.js"
25
+ }
26
+ },
27
+ "dependencies": {
28
+ "@earendil-works/pi-tui": "0.83.0",
29
+ "typebox": "1.1.38",
30
+ "@felan-ai/agent-core": "0.3.2"
31
+ },
32
+ "publishConfig": {
33
+ "access": "public",
34
+ "provenance": true
35
+ },
36
+ "scripts": {
37
+ "build": "rm -rf dist && tsc -p tsconfig.build.json",
38
+ "type-check": "tsc -p tsconfig.json --noEmit",
39
+ "test": "vitest run"
40
+ }
41
+ }