open-agents-ai 0.103.85 → 0.103.86

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 +32 -8
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -33578,9 +33578,9 @@ function tuiSelect(opts) {
33578
33578
  const first = findSelectable(0, 1);
33579
33579
  cursor = first >= 0 ? first : 0;
33580
33580
  }
33581
- const termRows = process.stdout.rows ?? 24;
33582
- const overhead = 6;
33583
- const maxVisible = opts.maxVisible ?? Math.max(3, termRows - overhead);
33581
+ const selectChrome = 3;
33582
+ const contentArea = opts.availableRows ?? (process.stdout.rows ?? 24);
33583
+ const maxVisible = opts.maxVisible ?? Math.max(3, contentArea - selectChrome);
33584
33584
  let scrollOffset = 0;
33585
33585
  let lastRenderedLines = 0;
33586
33586
  return new Promise((resolve31) => {
@@ -35225,7 +35225,8 @@ async function showConfigEditor(ctx) {
35225
35225
  rl: ctx.rl,
35226
35226
  skipKeys,
35227
35227
  renderRow: renderConfigRow,
35228
- onAction
35228
+ onAction,
35229
+ availableRows: ctx.availableContentRows?.()
35229
35230
  });
35230
35231
  if (result.confirmed && result.key) {
35231
35232
  const entry = entries.find((e) => e.key === result.key);
@@ -35298,7 +35299,8 @@ async function handleExposeConfig(ctx) {
35298
35299
  items,
35299
35300
  title: "Expose Configuration",
35300
35301
  rl: ctx.rl,
35301
- skipKeys
35302
+ skipKeys,
35303
+ availableRows: ctx.availableContentRows?.()
35302
35304
  });
35303
35305
  if (!result.confirmed || !result.key) {
35304
35306
  renderInfo("Expose config cancelled.");
@@ -35407,7 +35409,8 @@ async function showModelPicker(ctx, local = false) {
35407
35409
  title: "Select Model",
35408
35410
  rl: ctx.rl,
35409
35411
  // Skip header rows
35410
- skipKeys: ["__header_recent__", "__header_available__"]
35412
+ skipKeys: ["__header_recent__", "__header_available__"],
35413
+ availableRows: ctx.availableContentRows?.()
35411
35414
  });
35412
35415
  if (!result.confirmed || !result.key) {
35413
35416
  renderInfo("Model selection cancelled.");
@@ -35437,6 +35440,7 @@ async function handleEndpoint(arg, ctx, local = false) {
35437
35440
  activeKey: ctx.config.backendUrl,
35438
35441
  title: "Select Endpoint",
35439
35442
  rl: ctx.rl,
35443
+ availableRows: ctx.availableContentRows?.(),
35440
35444
  onDelete: (item, done) => {
35441
35445
  deleteUsageRecord("endpoint", item.key, ctx.repoRoot);
35442
35446
  done(true);
@@ -46128,6 +46132,20 @@ var init_status_bar = __esm({
46128
46132
  get reservedRows() {
46129
46133
  return this._currentFooterHeight;
46130
46134
  }
46135
+ /**
46136
+ * Usable content area height — the rows available for scroll content,
46137
+ * model lists, dashboards, etc. Accounts for:
46138
+ * - Header/carousel rows (scrollRegionTop)
46139
+ * - Footer rows (buffer + top separator + input lines + bottom separator + metrics)
46140
+ *
46141
+ * This is the accurate "how many rows can I draw in?" value that all
46142
+ * overlay UIs (tuiSelect, /expose dashboard, etc.) should use.
46143
+ */
46144
+ get availableContentRows() {
46145
+ const rows = process.stdout.rows ?? 24;
46146
+ const usable = rows - (this.scrollRegionTop - 1) - this._currentFooterHeight;
46147
+ return Math.max(3, usable);
46148
+ }
46131
46149
  /** Handle terminal resize — debounced to prevent separator stacking during drag */
46132
46150
  handleResize() {
46133
46151
  if (!this.active)
@@ -48338,6 +48356,7 @@ Rationale: ${proposal.rationale}${provenanceNote}`;
48338
48356
  items,
48339
48357
  title: "Select one or more (Space to toggle, Enter to confirm)",
48340
48358
  rl,
48359
+ availableRows: statusBar.isActive ? statusBar.availableContentRows : void 0,
48341
48360
  renderRow: (item, focused, _isActive) => {
48342
48361
  const isSelected = selected.has(item.key);
48343
48362
  const marker = isSelected ? c2.green("\u2611") : focused ? c2.cyan("\u2610") : c2.dim("\u2610");
@@ -48369,7 +48388,8 @@ Rationale: ${proposal.rationale}${provenanceNote}`;
48369
48388
  const result = await tuiSelect({
48370
48389
  items,
48371
48390
  title: "Select one option",
48372
- rl
48391
+ rl,
48392
+ availableRows: statusBar.isActive ? statusBar.availableContentRows : void 0
48373
48393
  });
48374
48394
  if (statusBar?.isActive)
48375
48395
  statusBar.endContentWrite();
@@ -49327,6 +49347,9 @@ Respond concisely and safely. Remember: you are talking to the general public.`;
49327
49347
  }, 100);
49328
49348
  return true;
49329
49349
  },
49350
+ availableContentRows() {
49351
+ return statusBar.isActive ? statusBar.availableContentRows : Math.max(3, (process.stdout.rows ?? 24) - 6);
49352
+ },
49330
49353
  destroyProject() {
49331
49354
  const oaPath = join50(repoRoot, OA_DIR);
49332
49355
  if (existsSync40(oaPath)) {
@@ -49395,7 +49418,8 @@ Respond concisely and safely. Remember: you are talking to the general public.`;
49395
49418
  ],
49396
49419
  activeKey: "restore",
49397
49420
  title: "Restore previous session context?",
49398
- rl
49421
+ rl,
49422
+ availableRows: statusBar.isActive ? statusBar.availableContentRows : void 0
49399
49423
  });
49400
49424
  if (autoRestoreTimer)
49401
49425
  clearTimeout(autoRestoreTimer);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-agents-ai",
3
- "version": "0.103.85",
3
+ "version": "0.103.86",
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",