open-agents-ai 0.187.36 → 0.187.38

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 +87 -124
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -276850,7 +276850,7 @@ function tuiSelect(opts) {
276850
276850
  const hasCrumbs = opts.breadcrumbs && opts.breadcrumbs.length > 0;
276851
276851
  const selectChrome = (hasCrumbs ? 11 : 10) + 3;
276852
276852
  const contentArea = opts.availableRows ? opts.availableRows + reservedTopBottom : process.stdout.rows ?? 24;
276853
- const maxVisible = opts.maxVisible ?? Math.max(3, contentArea - selectChrome);
276853
+ let maxVisible = opts.maxVisible ?? Math.max(3, contentArea - selectChrome);
276854
276854
  let scrollOffset = 0;
276855
276855
  let lastRenderedLines = 0;
276856
276856
  return new Promise((resolve39) => {
@@ -276872,7 +276872,7 @@ function tuiSelect(opts) {
276872
276872
  }
276873
276873
  stdin.resume();
276874
276874
  enterOverlay();
276875
- overlayWrite("\x1B[?1049h\x1B[48;5;234m\x1B[2J\x1B[H\x1B[?25l\x1B[?1003h\x1B[?1006h");
276875
+ overlayWrite("\x1B[?1049h\x1B[48;5;0m\x1B[2J\x1B[H\x1B[?25l\x1B[?1003h\x1B[?1006h");
276876
276876
  let listRowOffset = 0;
276877
276877
  function clampScroll(displayList) {
276878
276878
  const cursorPos = displayList.indexOf(cursor);
@@ -276888,7 +276888,11 @@ function tuiSelect(opts) {
276888
276888
  }
276889
276889
  const hasBreadcrumbs = opts.breadcrumbs && opts.breadcrumbs.length > 0;
276890
276890
  function render() {
276891
- overlayWrite("\x1B[48;5;234m\x1B[H\x1B[2J");
276891
+ const currentRows = process.stdout.rows ?? 24;
276892
+ if (!opts.maxVisible) {
276893
+ maxVisible = Math.max(3, currentRows - selectChrome);
276894
+ }
276895
+ overlayWrite("\x1B[48;5;0m\x1B[H\x1B[2J");
276892
276896
  const lines = [];
276893
276897
  lines.push("", "", "");
276894
276898
  if (hasBreadcrumbs) {
@@ -276970,8 +276974,8 @@ function tuiSelect(opts) {
276970
276974
  lines.push(` ${selectColors.dim("\u2191/\u2193 navigate Enter/Click select" + actionHint + deleteHint + customHint + " Esc " + escLabel + " Type to filter")}`);
276971
276975
  }
276972
276976
  lines.push("");
276973
- let output = lines.join("\n").replace(/\x1B\[0m/g, "\x1B[0m\x1B[48;5;234m").replace(/\n/g, "\x1B[K\n\x1B[48;5;234m");
276974
- overlayWrite("\x1B[48;5;234m" + output + "\x1B[K");
276977
+ let output = lines.join("\n").replace(/\x1B\[0m/g, "\x1B[0m\x1B[48;5;0m").replace(/\n/g, "\x1B[K\n\x1B[48;5;0m");
276978
+ overlayWrite("\x1B[48;5;0m" + output + "\x1B[K");
276975
276979
  lastRenderedLines = lines.length;
276976
276980
  }
276977
276981
  function cleanup() {
@@ -277427,8 +277431,8 @@ var init_daemon_registry = __esm({
277427
277431
  */
277428
277432
  renderBar(width) {
277429
277433
  this.refresh();
277430
- const PANEL_BG2 = "\x1B[48;5;234m";
277431
- const BTN_BG = "\x1B[48;5;236m";
277434
+ const PANEL_BG2 = "\x1B[48;5;0m";
277435
+ const BTN_BG = "\x1B[48;5;0m";
277432
277436
  let bar = "";
277433
277437
  for (const [, d2] of this.daemons) {
277434
277438
  const dotColor = d2.status === "running" ? "32" : (
@@ -280633,7 +280637,7 @@ async function startNeovimMode(opts) {
280633
280637
  const bottomBound = Math.min(termRows, topOffset + ptyRows);
280634
280638
  process.stdout.write(`\x1B[${topOffset + 1};${bottomBound}r\x1B[${topOffset + 1};1H`);
280635
280639
  }
280636
- const initVimCmd = "let g:loaded_netrwPlugin=1 | let g:loaded_netrw=1 | set mouse=a autoread updatetime=300 signcolumn=no noswapfile | hi WinSeparator guifg=#1c1c1c guibg=#1c1c1c ctermfg=234 ctermbg=234 | hi VertSplit guifg=#1c1c1c guibg=#1c1c1c ctermfg=234 ctermbg=234 | hi StatusLine guifg=#bcbcbc guibg=#1c1c1c ctermfg=250 ctermbg=234 | hi StatusLineNC guifg=#585858 guibg=#1c1c1c ctermfg=240 ctermbg=234 | hi NeoTreeWinSeparator guifg=#1c1c1c guibg=#1c1c1c ctermfg=234 ctermbg=234";
280640
+ const initVimCmd = "let g:loaded_netrwPlugin=1 | let g:loaded_netrw=1 | set mouse=a autoread updatetime=300 signcolumn=no noswapfile | hi WinSeparator guifg=#000000 guibg=#000000 ctermfg=0 ctermbg=0 | hi VertSplit guifg=#000000 guibg=#000000 ctermfg=0 ctermbg=0 | hi StatusLine guifg=#bcbcbc guibg=#000000 ctermfg=250 ctermbg=0 | hi StatusLineNC guifg=#585858 guibg=#000000 ctermfg=240 ctermbg=0 | hi NeoTreeWinSeparator guifg=#000000 guibg=#000000 ctermfg=0 ctermbg=0";
280637
280641
  const luaBootstrap = "lua " + [
280638
280642
  'local lp = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"',
280639
280643
  'if not vim.loop.fs_stat(lp) then pcall(vim.fn.system, {"git", "clone", "--filter=blob:none", "--depth=1", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lp}) end',
@@ -280694,11 +280698,11 @@ async function startNeovimMode(opts) {
280694
280698
  if (!isTTY5)
280695
280699
  return;
280696
280700
  let buf = "\x1B7";
280697
- buf += `\x1B[2;1H\x1B[48;5;234m\x1B[2K`;
280701
+ buf += `\x1B[2;1H\x1B[48;5;0m\x1B[2K`;
280698
280702
  for (const btn of toolbarBtns) {
280699
280703
  buf += `\x1B[2;${btn.startCol}H`;
280700
280704
  buf += `\x1B]8;;oa-cmd:${btn.action}\x07`;
280701
- buf += `\x1B[38;5;245m\x1B[48;5;236m${btn.label}`;
280705
+ buf += `\x1B[38;5;245m\x1B[48;5;0m${btn.label}`;
280702
280706
  buf += `\x1B]8;;\x07`;
280703
280707
  }
280704
280708
  buf += "\x1B[0m\x1B8";
@@ -290052,7 +290056,7 @@ async function handleUpdate(subcommand, ctx3) {
290052
290056
  function renderInstallFrame(version4, frame, statusLine) {
290053
290057
  const cols = process.stdout.columns ?? 80;
290054
290058
  const rows = process.stdout.rows ?? 24;
290055
- const bgDark = 234;
290059
+ const bgDark = 0;
290056
290060
  const yellow = 178;
290057
290061
  const contentTop = 4;
290058
290062
  const contentBottom = rows - 3;
@@ -290136,7 +290140,7 @@ async function handleUpdate(subcommand, ctx3) {
290136
290140
  const contentBottom = rows - 3;
290137
290141
  let buf = "\x1B7";
290138
290142
  for (let r2 = contentTop; r2 <= contentBottom; r2++) {
290139
- buf += `\x1B[${r2};1H\x1B[48;5;234m\x1B[2K`;
290143
+ buf += `\x1B[${r2};1H\x1B[48;5;0m\x1B[2K`;
290140
290144
  }
290141
290145
  buf += "\x1B8";
290142
290146
  process.stdout.write(buf);
@@ -292356,101 +292360,47 @@ function createDefaultBanner(version4 = "0.120.0") {
292356
292360
  const width = process.stdout.columns ?? 80;
292357
292361
  const rows = 3;
292358
292362
  const yellow = 178;
292359
- const bgDark = 234;
292360
- const particles = [
292361
- " ",
292362
- // 0: empty
292363
- "\u2801",
292364
- "\u2802",
292365
- // 1-2: sparse braille
292366
- "\u2596",
292367
- "\u2597",
292368
- // 3-4: ▖▗ single quadrants
292369
- "\u2598",
292370
- "\u259D",
292371
- // 5-6: ▘▝ upper quadrants
292372
- "\u259E",
292373
- "\u259A",
292374
- // 7-8: ▞▚ diagonals
292375
- "\xB7",
292376
- "\u2591",
292377
- // 9-10: · (dot + light shade)
292378
- "\u2599",
292379
- "\u259B",
292380
- // 11-12: ▙▛ three-quarter fills
292381
- "\u2592",
292382
- // 13: ▒ medium shade
292383
- "\u259C",
292384
- "\u259F",
292385
- // 14-15: ▜▟ three-quarter fills
292386
- "\u2593",
292387
- // 16: dark shade
292388
- "\u2588"
292389
- // 17: full block
292390
- ];
292391
- const hash = (r2, c4, frame) => {
292392
- const x = r2 * 7 + c4 * 13 + frame * 3 + 37;
292393
- return (x * x * 31 + x * 17 + 59) % 97 / 97;
292394
- };
292395
- const frameCount = 8;
292396
- const frames = [];
292397
- for (let f2 = 0; f2 < frameCount; f2++) {
292398
- const grid = [];
292399
- for (let r2 = 0; r2 < rows; r2++) {
292400
- const row = [];
292401
- for (let c4 = 0; c4 < width; c4++) {
292402
- const fadeStart = Math.floor(width * 0.45);
292403
- const solidStart = Math.floor(width * 0.85);
292404
- if (c4 >= fadeStart) {
292405
- const progress = Math.min(1, (c4 - fadeStart) / Math.max(1, solidStart - fadeStart));
292406
- const wave = Math.sin(c4 * 0.15 + f2 * 0.5 + r2 * 1.2) * 0.15;
292407
- const density = progress * progress + wave;
292408
- const noise2 = hash(r2, c4, f2);
292409
- if (noise2 < density) {
292410
- const charIdx = Math.min(particles.length - 1, Math.floor(Math.max(0, density) * particles.length));
292411
- row.push({ char: particles[charIdx], fg: yellow, bg: bgDark, bold: false });
292412
- } else {
292413
- row.push({ char: " ", fg: 0, bg: bgDark, bold: false });
292414
- }
292415
- } else {
292416
- row.push({ char: " ", fg: 0, bg: bgDark, bold: false });
292417
- }
292418
- }
292419
- grid.push(row);
292420
- }
292421
- const mnemonic = getNodeMnemonic();
292422
- const versionText = ` OA v${version4}`;
292423
- const mnemonicSuffix = ` \xB7 ${mnemonic}`;
292424
- for (let i2 = 0; i2 < versionText.length && i2 < width; i2++) {
292425
- grid[0][i2] = { char: versionText[i2], fg: yellow, bg: bgDark, bold: true };
292426
- }
292427
- const mnemonicStart = versionText.length;
292428
- for (let i2 = 0; i2 < mnemonicSuffix.length && mnemonicStart + i2 < Math.floor(width * 0.44); i2++) {
292429
- grid[0][mnemonicStart + i2] = { char: mnemonicSuffix[i2], fg: 240, bg: bgDark, bold: false };
292430
- }
292431
- const cwd4 = process.cwd();
292432
- const shortCwd = cwd4.length > 40 ? "..." + cwd4.slice(-37) : cwd4;
292433
- const infoText = ` ${shortCwd}`;
292434
- for (let i2 = 0; i2 < infoText.length && i2 < Math.floor(width * 0.44); i2++) {
292435
- grid[1][i2] = { char: infoText[i2], fg: 245, bg: bgDark, bold: false };
292436
- }
292437
- const btnLabels = ["help", "voice", "cohere", "model"];
292438
- const btnBg = 236;
292439
- let bCol = 2;
292440
- for (const lbl of btnLabels) {
292441
- const padded = ` ${lbl} `;
292442
- for (let ci = 0; ci < padded.length && bCol + ci < Math.floor(width * 0.44); ci++) {
292443
- grid[2][bCol + ci] = { char: padded[ci], fg: 245, bg: btnBg, bold: false };
292444
- }
292445
- bCol += padded.length + 1;
292446
- }
292447
- frames.push({ grid, durationMs: 200 });
292448
- }
292363
+ const bgBlack = 0;
292364
+ const grid = [];
292365
+ const innerW = width - 2;
292366
+ const topRow = [];
292367
+ topRow.push({ char: "\u256D", fg: yellow, bg: bgBlack, bold: false });
292368
+ for (let c4 = 0; c4 < innerW; c4++) {
292369
+ topRow.push({ char: "\u2500", fg: yellow, bg: bgBlack, bold: false });
292370
+ }
292371
+ topRow.push({ char: "\u256E", fg: yellow, bg: bgBlack, bold: false });
292372
+ grid.push(topRow);
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);
292380
+ const midRow = [];
292381
+ midRow.push({ char: "\u2502", fg: yellow, bg: bgBlack, bold: false });
292382
+ for (let i2 = 0; i2 < leftPad; i2++)
292383
+ 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
+ }
292387
+ for (let i2 = 0; i2 < rightPad; i2++)
292388
+ midRow.push({ char: " ", fg: 0, bg: bgBlack, bold: false });
292389
+ midRow.push({ char: "\u2502", fg: yellow, bg: bgBlack, bold: false });
292390
+ grid.push(midRow);
292391
+ const botRow = [];
292392
+ botRow.push({ char: "\u2570", fg: yellow, bg: bgBlack, bold: false });
292393
+ for (let c4 = 0; c4 < innerW; c4++) {
292394
+ botRow.push({ char: "\u2500", fg: yellow, bg: bgBlack, bold: false });
292395
+ }
292396
+ botRow.push({ char: "\u256F", fg: yellow, bg: bgBlack, bold: false });
292397
+ grid.push(botRow);
292449
292398
  return {
292450
292399
  id: "default-header",
292451
292400
  name: "OA Default Header",
292452
292401
  type: "default",
292453
- frames,
292402
+ frames: [{ grid, durationMs: 0 }],
292403
+ // Single static frame, no animation
292454
292404
  alignment: ["left", "center", "left"],
292455
292405
  flowSpeed: [0, 0, 0],
292456
292406
  author: "system",
@@ -292462,7 +292412,7 @@ function createCohereBanner() {
292462
292412
  const width = process.stdout.columns ?? 80;
292463
292413
  const rows = 3;
292464
292414
  const grid = [];
292465
- const bgColor = 236;
292415
+ const bgColor = 0;
292466
292416
  const fgColor = 226;
292467
292417
  const halftone = ["\u2588", "\u2593", "\u2592", "\u2591", " "];
292468
292418
  for (let r2 = 0; r2 < rows; r2++) {
@@ -292832,7 +292782,7 @@ var init_banner = __esm({
292832
292782
  ];
292833
292783
  for (let r2 = 0; r2 < this.rows; r2++) {
292834
292784
  const ch = FOCUS[(this.frameTick + r2 * 3) % FOCUS.length];
292835
- buf += `\x1B[${r2 + 1};1H\x1B[38;5;178m\x1B[48;5;234m${ch}\x1B[0m`;
292785
+ buf += `\x1B[${r2 + 1};1H\x1B[38;5;178m\x1B[48;5;0m${ch}\x1B[0m`;
292836
292786
  }
292837
292787
  }
292838
292788
  if (this._updateAvailable && this.currentDesign?.type === "default") {
@@ -292858,7 +292808,7 @@ var init_banner = __esm({
292858
292808
  const badgeStart = vStart + vLen;
292859
292809
  if (badgeStart + badge.length < this.width) {
292860
292810
  buf += `\x1B]8;;oa-cmd:/update\x07`;
292861
- buf += `\x1B[1;${badgeStart}H\x1B[1;38;5;${updateFg}m\x1B[48;5;236m${badge}`;
292811
+ buf += `\x1B[1;${badgeStart}H\x1B[1;38;5;${updateFg}m\x1B[48;5;0m${badge}`;
292862
292812
  buf += `\x1B]8;;\x07`;
292863
292813
  const mnemonicStartCol = badgeStart + badge.length;
292864
292814
  const gridRow = frame.grid[0];
@@ -293394,14 +293344,14 @@ var init_stream_renderer = __esm({
293394
293344
  this.lineStarted = false;
293395
293345
  }
293396
293346
  if (this.thinkingTokenCount % 50 === 0) {
293397
- this.writeRaw(`\x1B[1A\x1B[48;5;233m\x1B[2K${dimText(" \u23BF ")}${dimItalic(`thinking... (${this.thinkingTokenCount} tokens)`)}
293347
+ this.writeRaw(`\x1B[1A\x1B[48;5;0m\x1B[2K${dimText(" \u23BF ")}${dimItalic(`thinking... (${this.thinkingTokenCount} tokens)`)}
293398
293348
  `);
293399
293349
  }
293400
293350
  return;
293401
293351
  }
293402
293352
  if (this.thinkingIndicatorShown && kind === "content") {
293403
293353
  this.thinkingIndicatorShown = false;
293404
- this.writeRaw(`\x1B[1A\x1B[48;5;233m\x1B[2K${dimText(" \u23BF ")}${dimItalic(`thought for ${this.thinkingTokenCount} tokens`)}
293354
+ this.writeRaw(`\x1B[1A\x1B[48;5;0m\x1B[2K${dimText(" \u23BF ")}${dimItalic(`thought for ${this.thinkingTokenCount} tokens`)}
293405
293355
  `);
293406
293356
  this.thinkingTokenCount = 0;
293407
293357
  this.lineStarted = false;
@@ -299380,12 +299330,12 @@ var init_text_selection = __esm({
299380
299330
  _clipboardAutoInstallAttempted = false;
299381
299331
  _hoveredButtonCmd = null;
299382
299332
  _pressedButtonCmd = null;
299383
- BTN_REST_BG = 236;
299333
+ BTN_REST_BG = 0;
299384
299334
  BTN_REST_FG = 245;
299385
- BTN_HOVER_BG = 238;
299335
+ BTN_HOVER_BG = 235;
299386
299336
  BTN_HOVER_FG = 252;
299387
299337
  BTN_PRESS_BG = 249;
299388
- BTN_PRESS_FG = 234;
299338
+ BTN_PRESS_FG = 0;
299389
299339
  _updateBadgeActive = false;
299390
299340
  _updateBadgeCol = 0;
299391
299341
  _updateBadgeLen = 0;
@@ -299401,7 +299351,7 @@ function setTerminalTitle(task, version4) {
299401
299351
  const title = task ? `${task.slice(0, 60)} \xB7 ${ver}` : ver;
299402
299352
  process.stdout.write(`\x1B]2;${title}\x07`);
299403
299353
  }
299404
- var EXPERT_TOOL_BASELINES, CONTEXT_SWITCH_OVERHEAD, TURN_PLANNING_OVERHEAD, DEFAULT_TOOL_BASELINE, CODE_READ_CHARS_PER_SEC, PROSE_READ_CHARS_PER_SEC, MIN_CONTENT_FOR_READING, CODE_CONTENT_TOOLS, PROSE_CONTENT_TOOLS, HumanSpeedTracker, PANEL_BG, CONTENT_BG, TEXT_PRIMARY, TEXT_DIM, PANEL_BG_SEQ, CONTENT_BG_SEQ, RESET, _isWindows, StatusBar;
299354
+ var EXPERT_TOOL_BASELINES, CONTEXT_SWITCH_OVERHEAD, TURN_PLANNING_OVERHEAD, DEFAULT_TOOL_BASELINE, CODE_READ_CHARS_PER_SEC, PROSE_READ_CHARS_PER_SEC, MIN_CONTENT_FOR_READING, CODE_CONTENT_TOOLS, PROSE_CONTENT_TOOLS, HumanSpeedTracker, PANEL_BG, CONTENT_BG, TEXT_PRIMARY, TEXT_DIM, BOX_COLOR, PANEL_BG_SEQ, CONTENT_BG_SEQ, BOX_TL, BOX_TR, BOX_BL, BOX_BR, BOX_H, BOX_V, BOX_FG, RESET, _isWindows, StatusBar;
299405
299355
  var init_status_bar = __esm({
299406
299356
  "packages/cli/dist/tui/status-bar.js"() {
299407
299357
  "use strict";
@@ -299567,12 +299517,20 @@ var init_status_bar = __esm({
299567
299517
  return this.toolCalls > 0;
299568
299518
  }
299569
299519
  };
299570
- PANEL_BG = 234;
299571
- CONTENT_BG = 233;
299520
+ PANEL_BG = 0;
299521
+ CONTENT_BG = 0;
299572
299522
  TEXT_PRIMARY = 178;
299573
299523
  TEXT_DIM = 240;
299524
+ BOX_COLOR = 178;
299574
299525
  PANEL_BG_SEQ = `\x1B[48;5;${PANEL_BG}m`;
299575
299526
  CONTENT_BG_SEQ = `\x1B[48;5;${CONTENT_BG}m`;
299527
+ BOX_TL = "\u256D";
299528
+ BOX_TR = "\u256E";
299529
+ BOX_BL = "\u2570";
299530
+ BOX_BR = "\u256F";
299531
+ BOX_H = "\u2500";
299532
+ BOX_V = "\u2502";
299533
+ BOX_FG = `\x1B[38;5;${BOX_COLOR}m`;
299576
299534
  RESET = "\x1B[0m";
299577
299535
  _isWindows = process.platform === "win32";
299578
299536
  StatusBar = class _StatusBar {
@@ -300681,7 +300639,7 @@ var init_status_bar = __esm({
300681
300639
  )
300682
300640
  );
300683
300641
  const label = ` ${view.label} ${icon} `;
300684
- const bg = isActive ? 238 : 236;
300642
+ const bg = isActive ? 235 : 0;
300685
300643
  const fg2 = isActive ? 252 : 245;
300686
300644
  buf += `\x1B[${pos.tabBarRow};${col}H`;
300687
300645
  buf += `\x1B]8;;oa-view:${view.id}\x07`;
@@ -301378,7 +301336,7 @@ ${CONTENT_BG_SEQ}`);
301378
301336
  this._updateSuggestions();
301379
301337
  const inputLines = this.computeInputLineCount(termWidth);
301380
301338
  const suggestionRows = this._suggestions.length > 0 ? this._suggestions.length : 1;
301381
- const newHeight = 1 + inputLines + suggestionRows;
301339
+ const newHeight = 1 + 1 + inputLines + suggestionRows;
301382
301340
  if (newHeight !== this._currentFooterHeight) {
301383
301341
  this._currentFooterHeight = newHeight;
301384
301342
  return true;
@@ -301390,7 +301348,7 @@ ${CONTENT_BG_SEQ}`);
301390
301348
  this._updateSuggestions();
301391
301349
  const inputLines = this.computeInputLineCount(termWidth);
301392
301350
  const suggestionRows = this._suggestions.length > 0 ? this._suggestions.length : 1;
301393
- return 1 + inputLines + suggestionRows !== this._currentFooterHeight;
301351
+ return 1 + 1 + inputLines + suggestionRows !== this._currentFooterHeight;
301394
301352
  }
301395
301353
  /** Compute absolute row positions for all footer elements.
301396
301354
  * Layout (top to bottom): input → suggestions/braille → metrics.
@@ -301516,12 +301474,17 @@ ${CONTENT_BG_SEQ}`);
301516
301474
  }
301517
301475
  const inputWrap = this.wrapInput(w);
301518
301476
  let buf = "\x1B[?7l";
301477
+ const boxInner = w - 2;
301478
+ buf += `\x1B[${pos.inputStartRow};1H${PANEL_BG_SEQ}\x1B[2K${BOX_FG}${BOX_TL}${BOX_H.repeat(Math.max(0, boxInner))}${BOX_TR}${RESET}`;
301519
301479
  for (let i2 = 0; i2 < inputWrap.lines.length; i2++) {
301520
- const row = pos.inputStartRow + i2;
301480
+ const row = pos.inputStartRow + 1 + i2;
301521
301481
  const prefix = i2 === 0 ? this.promptText : " ".repeat(this.promptWidth);
301522
- buf += `\x1B[${row};1H${PANEL_BG_SEQ}\x1B[2K${prefix}${inputWrap.lines[i2]}${RESET}`;
301482
+ const lineContent = `${prefix}${inputWrap.lines[i2]}`;
301483
+ const visLen = this.promptWidth + (inputWrap.lines[i2]?.length ?? 0);
301484
+ const pad = Math.max(0, boxInner - visLen);
301485
+ 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}`;
301523
301486
  }
301524
- const cursorTermRow = pos.inputStartRow + inputWrap.cursorRow;
301487
+ const cursorTermRow = pos.inputStartRow + 1 + inputWrap.cursorRow;
301525
301488
  if (pos.tabBarRow > 0) {
301526
301489
  buf += `\x1B[${pos.tabBarRow};1H${PANEL_BG_SEQ}\x1B[2K${RESET}`;
301527
301490
  }
@@ -301530,7 +301493,7 @@ ${CONTENT_BG_SEQ}`);
301530
301493
  const row = pos.suggestStartRow + si;
301531
301494
  const cmd = this._suggestions[si];
301532
301495
  const isHighlighted = si === this._suggestIndex;
301533
- const bg = isHighlighted ? `\x1B[48;5;236m` : PANEL_BG_SEQ;
301496
+ const bg = isHighlighted ? `\x1B[48;5;235m` : PANEL_BG_SEQ;
301534
301497
  const fg2 = isHighlighted ? `\x1B[1;38;5;${TEXT_PRIMARY}m` : `\x1B[38;5;${TEXT_PRIMARY}m`;
301535
301498
  const slash = isHighlighted ? `\x1B[38;5;245m` : `\x1B[38;5;${TEXT_DIM}m`;
301536
301499
  const marker = isHighlighted ? `\x1B[38;5;${TEXT_PRIMARY}m\u203A ` : " ";
@@ -301539,7 +301502,7 @@ ${CONTENT_BG_SEQ}`);
301539
301502
  buf += `${RESET}`;
301540
301503
  }
301541
301504
  } else {
301542
- buf += `\x1B[${pos.bufferRow};1H${PANEL_BG_SEQ}\x1B[2K${this.buildBufferContent(w)}${RESET}`;
301505
+ buf += `\x1B[${pos.bufferRow};1H${PANEL_BG_SEQ}\x1B[2K${BOX_FG}${BOX_BL}${BOX_H.repeat(Math.max(0, boxInner))}${BOX_BR}${RESET}`;
301543
301506
  }
301544
301507
  buf += `\x1B[${pos.metricsRow};1H${PANEL_BG_SEQ}\x1B[2K${this.buildMetricsLine()}${RESET}`;
301545
301508
  const focusChar = this._getFocusQuadrant();
@@ -308188,7 +308151,7 @@ async function startInteractive(config, repoPath) {
308188
308151
  let restoredSessionContext = null;
308189
308152
  if (process.stdout.isTTY) {
308190
308153
  process.stdout.write("\x1B[2J\x1B[3J\x1B]50;ClearScrollback\x07\x1B[H");
308191
- process.stdout.write(`\x1B[?1002l\x1B[?1003l\x1B[?1006l\x1B[?1015l\x1B[?1049h\x1B[48;5;233m\x1B[2J\x1B[3J\x1B[H\x1B[1;${process.stdout.rows ?? 24}r\x1B[?25l`);
308154
+ process.stdout.write(`\x1B[?1002l\x1B[?1003l\x1B[?1006l\x1B[?1015l\x1B[?1049h\x1B[48;5;0m\x1B[2J\x1B[3J\x1B[H\x1B[1;${process.stdout.rows ?? 24}r\x1B[?25l`);
308192
308155
  const restoreScreen = () => {
308193
308156
  process.stdout.write("\x1B[?1002l\x1B[?1003l\x1B[?1006l\x1B[?1015l\x1B[?25h\x1B[?1049l");
308194
308157
  };
@@ -308787,7 +308750,7 @@ Rationale: ${proposal.rationale}${provenanceNote}`;
308787
308750
  const RECALL_WINDOW_MS = 1500;
308788
308751
  let sessionSudoPassword = null;
308789
308752
  let sudoPromptPending = false;
308790
- const panelBg = "\x1B[48;5;234m";
308753
+ const panelBg = "\x1B[48;5;0m";
308791
308754
  const idlePrompt = `${panelBg}${c3.bold(c3.white("\u276F "))}${panelBg}`;
308792
308755
  const activePrompt = `${panelBg}${c3.bold(c3.white("+ "))}${panelBg}`;
308793
308756
  const pausedPrompt = `${panelBg}${c3.bold(c3.yellow("| "))}${panelBg}`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-agents-ai",
3
- "version": "0.187.36",
3
+ "version": "0.187.38",
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",