open-agents-ai 0.187.38 → 0.187.39

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/dist/index.js +35 -47
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -292371,21 +292371,27 @@ function createDefaultBanner(version4 = "0.120.0") {
292371
292371
  topRow.push({ char: "\u256E", fg: yellow, bg: bgBlack, bold: false });
292372
292372
  grid.push(topRow);
292373
292373
  const mnemonic = getNodeMnemonic();
292374
- const cwd4 = process.cwd();
292375
- const shortCwd = cwd4.length > 30 ? "..." + cwd4.slice(-27) : cwd4;
292376
- const centerText = `Open Agents v${version4} \xB7 ${mnemonic} \xB7 ${shortCwd}`;
292377
- const textLen = centerText.length;
292378
- const leftPad = Math.max(0, Math.floor((innerW - textLen) / 2));
292379
- const rightPad = Math.max(0, innerW - textLen - leftPad);
292374
+ const versionText = ` OA v${version4} \xB7 ${mnemonic}`;
292375
+ const btnLabels = ["help", "voice", "model", "cohere"];
292376
+ const btnText = btnLabels.map((b) => ` ${b} `).join(" ");
292377
+ const gapSize = Math.max(1, innerW - versionText.length - btnText.length);
292380
292378
  const midRow = [];
292381
292379
  midRow.push({ char: "\u2502", fg: yellow, bg: bgBlack, bold: false });
292382
- for (let i2 = 0; i2 < leftPad; i2++)
292380
+ for (let i2 = 0; i2 < versionText.length && midRow.length <= innerW; i2++) {
292381
+ midRow.push({ char: versionText[i2], fg: yellow, bg: bgBlack, bold: true });
292382
+ }
292383
+ for (let i2 = 0; i2 < gapSize && midRow.length <= innerW; i2++) {
292383
292384
  midRow.push({ char: " ", fg: 0, bg: bgBlack, bold: false });
292384
- for (let i2 = 0; i2 < centerText.length && i2 < innerW; i2++) {
292385
- midRow.push({ char: centerText[i2], fg: yellow, bg: bgBlack, bold: true });
292386
292385
  }
292387
- for (let i2 = 0; i2 < rightPad; i2++)
292386
+ const dimYellow = 240;
292387
+ for (const ch of btnText) {
292388
+ if (midRow.length > innerW)
292389
+ break;
292390
+ midRow.push({ char: ch, fg: dimYellow, bg: bgBlack, bold: false });
292391
+ }
292392
+ while (midRow.length <= innerW) {
292388
292393
  midRow.push({ char: " ", fg: 0, bg: bgBlack, bold: false });
292394
+ }
292389
292395
  midRow.push({ char: "\u2502", fg: yellow, bg: bgBlack, bold: false });
292390
292396
  grid.push(midRow);
292391
292397
  const botRow = [];
@@ -299709,16 +299715,7 @@ var init_status_bar = __esm({
299709
299715
  clearInterval(this._monitorTimer);
299710
299716
  this._monitorTimer = null;
299711
299717
  }
299712
- this._brailleSpinner.setMetrics({ isStreaming: true });
299713
- this._brailleSpinner.start(() => {
299714
- if (this.active)
299715
- this.renderBufferLine();
299716
- });
299717
299718
  } else {
299718
- this._brailleSpinner.setMetrics({ isStreaming: false, tokenRate: 0 });
299719
- this._brailleSpinner.stop();
299720
- if (this.active)
299721
- this.renderBufferLine();
299722
299719
  this.ensureMonitorTimer();
299723
299720
  }
299724
299721
  }
@@ -300489,8 +300486,7 @@ var init_status_bar = __esm({
300489
300486
  return;
300490
300487
  }
300491
300488
  const fh = this._currentFooterHeight;
300492
- const tabBarH = this.hasSubAgents ? 1 : 0;
300493
- const footerStart = rows - fh - tabBarH + 1;
300489
+ const footerStart = rows - fh + 1;
300494
300490
  if (row >= footerStart)
300495
300491
  return;
300496
300492
  }
@@ -300613,17 +300609,15 @@ var init_status_bar = __esm({
300613
300609
  return this._agentViews.size > 1;
300614
300610
  }
300615
300611
  // ── Agent Tab Bar (WO-NA2) ───────────────────────────────────
300616
- /** Render the agent tab bar between input row and braille row */
300612
+ /** Render the agent tab bar in the HEADER area (row 2, right-aligned).
300613
+ * Moved from footer to header so agents are visible alongside version info. */
300617
300614
  renderAgentTabs() {
300618
300615
  if (!this.active || !this.hasSubAgents)
300619
300616
  return;
300620
- const rows = process.stdout.rows ?? 24;
300621
- const pos = this.rowPositions(rows);
300622
- if (pos.tabBarRow < 0)
300623
- return;
300624
300617
  const w = process.stdout.columns ?? 80;
300625
- let buf = `\x1B[${pos.tabBarRow};1H${PANEL_BG_SEQ}\x1B[2K`;
300626
- let col = 2;
300618
+ const headerContentRow = 2;
300619
+ const tabs = [];
300620
+ let totalLen = 0;
300627
300621
  for (const view of this._agentViews.values()) {
300628
300622
  const isActive = view.id === this._activeViewId;
300629
300623
  if (view.id === "main" && this._activeViewId === "main")
@@ -300641,14 +300635,17 @@ var init_status_bar = __esm({
300641
300635
  const label = ` ${view.label} ${icon} `;
300642
300636
  const bg = isActive ? 235 : 0;
300643
300637
  const fg2 = isActive ? 252 : 245;
300644
- buf += `\x1B[${pos.tabBarRow};${col}H`;
300645
- buf += `\x1B]8;;oa-view:${view.id}\x07`;
300646
- buf += `\x1B[38;5;${fg2}m\x1B[48;5;${bg}m${label}\x1B[0m${PANEL_BG_SEQ}`;
300647
- buf += `\x1B]8;;\x07`;
300648
- col += label.length + 1;
300649
- if (col >= w - 5)
300638
+ const tabStr = `\x1B]8;;oa-view:${view.id}\x07\x1B[38;5;${fg2}m\x1B[48;5;${bg}m${label}\x1B[0m\x1B[48;5;0m\x1B]8;;\x07`;
300639
+ tabs.push(tabStr);
300640
+ totalLen += label.length + 1;
300641
+ if (totalLen >= Math.floor(w * 0.4))
300650
300642
  break;
300651
300643
  }
300644
+ if (tabs.length === 0)
300645
+ return;
300646
+ const startCol = Math.max(2, w - totalLen - 2);
300647
+ let buf = `\x1B[${headerContentRow};${startCol}H\x1B[48;5;0m`;
300648
+ buf += tabs.join(" ");
300652
300649
  buf += RESET;
300653
300650
  this.termWrite(buf);
300654
300651
  }
@@ -301357,12 +301354,12 @@ ${CONTENT_BG_SEQ}`);
301357
301354
  const fh = this._currentFooterHeight;
301358
301355
  const suggestionRows = this._suggestions.length > 0 ? this._suggestions.length : 1;
301359
301356
  const inputLines = fh - 1 - suggestionRows;
301360
- const tabBarH = this.hasSubAgents ? 1 : 0;
301361
- const totalFooter = fh + tabBarH;
301357
+ const totalFooter = fh;
301362
301358
  return {
301363
301359
  scrollEnd: Math.max(rows - totalFooter, this.scrollRegionTop + 1),
301364
301360
  inputStartRow: rows - totalFooter + 1,
301365
- tabBarRow: tabBarH > 0 ? rows - suggestionRows - 1 : -1,
301361
+ tabBarRow: -1,
301362
+ // deprecated: tabs now in header
301366
301363
  // When suggestions active: multiple rows between input and metrics
301367
301364
  // When no suggestions: single braille row at N-1
301368
301365
  bufferRow: rows - 1,
@@ -301485,9 +301482,6 @@ ${CONTENT_BG_SEQ}`);
301485
301482
  buf += `\x1B[${row};1H${PANEL_BG_SEQ}\x1B[2K${BOX_FG}${BOX_V}${RESET}${PANEL_BG_SEQ}${lineContent}${" ".repeat(pad)}${BOX_FG}${BOX_V}${RESET}`;
301486
301483
  }
301487
301484
  const cursorTermRow = pos.inputStartRow + 1 + inputWrap.cursorRow;
301488
- if (pos.tabBarRow > 0) {
301489
- buf += `\x1B[${pos.tabBarRow};1H${PANEL_BG_SEQ}\x1B[2K${RESET}`;
301490
- }
301491
301485
  if (this._suggestions.length > 0 && pos.suggestStartRow > 0) {
301492
301486
  for (let si = 0; si < this._suggestions.length; si++) {
301493
301487
  const row = pos.suggestStartRow + si;
@@ -301624,13 +301618,7 @@ ${CONTENT_BG_SEQ}`);
301624
301618
  * When daemons/agents are tracked: shows monitoring bar with status dots.
301625
301619
  * Otherwise: braille animation when processing, empty when idle.
301626
301620
  */
301627
- buildBufferContent(width) {
301628
- if (registry2.hasEntries) {
301629
- return registry2.renderBar(width);
301630
- }
301631
- if (this._processing && this._brailleSpinner.isRunning) {
301632
- return this._brailleSpinner.render(width, PANEL_BG + 1);
301633
- }
301621
+ buildBufferContent(_width) {
301634
301622
  return "";
301635
301623
  }
301636
301624
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-agents-ai",
3
- "version": "0.187.38",
3
+ "version": "0.187.39",
4
4
  "description": "AI coding agent powered by open-source models (Ollama/vLLM) — interactive TUI with agentic tool-calling loop",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",