@openagents-org/agent-launcher 0.1.8 → 0.1.10

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 (2) hide show
  1. package/package.json +1 -1
  2. package/src/tui.js +26 -15
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openagents-org/agent-launcher",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "OpenAgents Launcher — install, configure, and run AI coding agents from your terminal",
5
5
  "main": "src/index.js",
6
6
  "bin": {
package/src/tui.js CHANGED
@@ -129,6 +129,7 @@ function generateAgentName(type) {
129
129
  function createTUI() {
130
130
  const screen = blessed.screen({
131
131
  smartCSR: true,
132
+ mouse: true,
132
133
  title: 'OpenAgents',
133
134
  fullUnicode: true,
134
135
  tags: true,
@@ -407,7 +408,7 @@ function createTUI() {
407
408
  });
408
409
 
409
410
  const list = blessed.list({
410
- parent: box, top: 2, left: 0, width: '100%', height: '100%-5',
411
+ parent: box, top: 2, left: 0, width: '100%', height: '50%-1',
411
412
  keys: true, vi: true, mouse: true,
412
413
  tags: true,
413
414
  style: {
@@ -416,14 +417,21 @@ function createTUI() {
416
417
  },
417
418
  });
418
419
 
419
- const statusBar = blessed.box({
420
- parent: box, bottom: 2, left: 0, width: '100%', height: 1,
420
+ // Install log panel — shows full streaming output
421
+ const logPanel = blessed.box({
422
+ parent: box, top: '50%+1', left: 0, width: '100%', height: '50%-2',
423
+ border: { type: 'line' },
424
+ label: ' {bold}Install Log{/bold} ',
421
425
  tags: true,
426
+ style: { border: { fg: COLORS.panelBorder }, label: { fg: COLORS.accent } },
422
427
  });
423
428
 
424
- const installLog = blessed.box({
425
- parent: box, bottom: 1, left: 0, width: '100%', height: 1,
429
+ const installLog = blessed.log({
430
+ parent: logPanel,
431
+ top: 0, left: 0, width: '100%-2', height: '100%-2',
432
+ scrollable: true, scrollOnInput: true,
426
433
  tags: true,
434
+ padding: { left: 1 },
427
435
  style: { fg: 'grey' },
428
436
  });
429
437
 
@@ -457,7 +465,7 @@ function createTUI() {
457
465
  showConfirmDialog(`${verb} ${entry.label}?`, (yes) => {
458
466
  if (yes) {
459
467
  installing = true;
460
- doInstall(entry, statusBar, installLog, list, catalog, renderList, () => { installing = false; });
468
+ doInstall(entry, logPanel, installLog, list, catalog, renderList, () => { installing = false; });
461
469
  }
462
470
  list.focus();
463
471
  screen.render();
@@ -477,33 +485,36 @@ function createTUI() {
477
485
  screen.render();
478
486
  }
479
487
 
480
- function doInstall(entry, statusBar, installLog, list, catalog, renderList, onDone) {
481
- statusBar.setContent(` {cyan-fg}Installing ${entry.name}...{/cyan-fg}`);
488
+ function doInstall(entry, logPanel, installLog, list, catalog, renderList, onDone) {
489
+ logPanel.setLabel(` {bold}Installing ${entry.name}...{/bold} `);
490
+ installLog.setContent('');
491
+ installLog.log(`{cyan-fg}>>> Installing ${entry.name}...{/cyan-fg}`);
482
492
  screen.render();
483
493
  log(`Installing {cyan-fg}${entry.name}{/cyan-fg}...`);
484
494
 
485
495
  connector.installer.installStreaming(entry.name, (chunk) => {
486
496
  const lines = chunk.split('\n').filter(l => l.trim());
487
497
  for (const line of lines) {
488
- const clean = line.trim().substring(0, 90);
489
- log(` {gray-fg}${clean}{/gray-fg}`);
490
- installLog.setContent(` {gray-fg}${clean.substring(0, 80)}{/gray-fg}`);
498
+ const clean = line.trim().substring(0, 120);
499
+ installLog.log(clean);
491
500
  screen.render();
492
501
  }
493
502
  }).then(() => {
494
- statusBar.setContent(` {green-fg}\u2713 ${entry.name} installed successfully{/green-fg}`);
503
+ installLog.log('');
504
+ installLog.log(`{green-fg}\u2713 ${entry.name} installed successfully!{/green-fg}`);
505
+ logPanel.setLabel(` {bold}{green-fg}Install Complete{/green-fg}{/bold} `);
495
506
  log(`{green-fg}\u2713{/green-fg} ${entry.name} installed`);
496
507
  const idx = catalog.findIndex(c => c.name === entry.name);
497
508
  if (idx >= 0) catalog[idx].installed = true;
498
509
  renderList();
499
- installLog.setContent('');
500
510
  onDone();
501
511
  list.focus();
502
512
  screen.render();
503
513
  }).catch((e) => {
504
- statusBar.setContent(` {red-fg}\u2717 Failed: ${e.message.substring(0, 60)}{/red-fg}`);
514
+ installLog.log('');
515
+ installLog.log(`{red-fg}\u2717 Failed: ${e.message}{/red-fg}`);
516
+ logPanel.setLabel(` {bold}{red-fg}Install Failed{/red-fg}{/bold} `);
505
517
  log(`{red-fg}\u2717 Install failed:{/red-fg} ${e.message}`);
506
- installLog.setContent('');
507
518
  onDone();
508
519
  list.focus();
509
520
  screen.render();