open-agents-ai 0.184.65 → 0.184.66

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 +52 -3
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -53071,6 +53071,8 @@ var init_banner = __esm({
53071
53071
  _updateAvailable = null;
53072
53072
  /** Global frame counter for pulse animation (survives frame resets) */
53073
53073
  _pulseFrame = 0;
53074
+ /** Whether header zone is focused (Ctrl+Tab highlight) */
53075
+ _focused = false;
53074
53076
  constructor() {
53075
53077
  this.width = process.stdout.columns ?? 80;
53076
53078
  }
@@ -53082,6 +53084,10 @@ var init_banner = __esm({
53082
53084
  clearUpdateAvailable() {
53083
53085
  this._updateAvailable = null;
53084
53086
  }
53087
+ /** Set header focus state for Ctrl+Tab visual highlight */
53088
+ setFocused(focused) {
53089
+ this._focused = focused;
53090
+ }
53085
53091
  /** Whether an update badge is showing */
53086
53092
  get hasUpdate() {
53087
53093
  return this._updateAvailable !== null;
@@ -53183,6 +53189,11 @@ var init_banner = __esm({
53183
53189
  buf += "\x1B]8;;\x07";
53184
53190
  }
53185
53191
  }
53192
+ if (this._focused) {
53193
+ for (let r = 0; r < this.rows; r++) {
53194
+ buf += `\x1B[${r + 1};1H\x1B[38;5;178m\x1B[48;5;234m\u258E\x1B[0m`;
53195
+ }
53196
+ }
53186
53197
  if (this._updateAvailable && this.currentDesign?.type === "default") {
53187
53198
  this._pulseFrame++;
53188
53199
  const t = (Math.sin(this._pulseFrame * 0.16) + 1) / 2;
@@ -58873,7 +58884,7 @@ var init_braille_spinner = __esm({
58873
58884
  * high SNR produces smooth coherent waves (clean signal propagation).
58874
58885
  * - Dream mode: slower, deeper breathing with warm amber color override.
58875
58886
  */
58876
- render(width) {
58887
+ render(width, hintColor) {
58877
58888
  const m = this._metrics;
58878
58889
  const useExtended = m.isStreaming || m.isDreaming || m.mood !== "neutral";
58879
58890
  const wave = useExtended ? WAVE_EXT : WAVE;
@@ -58941,7 +58952,7 @@ var init_braille_spinner = __esm({
58941
58952
  ch = sparseChars[Math.floor(scatter * sparseChars.length * 3.33) % sparseChars.length];
58942
58953
  }
58943
58954
  }
58944
- const color = activeColorRamp[Math.min(scaledIdx, activeColorRamp.length - 1)];
58955
+ const color = hintColor ?? activeColorRamp[Math.min(scaledIdx, activeColorRamp.length - 1)];
58945
58956
  if (color !== lastColor) {
58946
58957
  buf += `\x1B[38;5;${color}m`;
58947
58958
  lastColor = color;
@@ -59855,6 +59866,10 @@ var init_status_bar = __esm({
59855
59866
  _countdown = 0;
59856
59867
  _recBlink = true;
59857
59868
  _recBlinkTimer = null;
59869
+ /** Current focus zone for Ctrl+Tab cycling */
59870
+ _focusedZone = "footer";
59871
+ /** Callback to notify header (banner) of focus changes */
59872
+ _headerFocusHandler = null;
59858
59873
  /** Whether agent is actively processing (braille animation) */
59859
59874
  _processing = false;
59860
59875
  _brailleSpinner = new BrailleSpinner();
@@ -60425,6 +60440,25 @@ var init_status_bar = __esm({
60425
60440
  get isStreaming() {
60426
60441
  return this.writeDepth > 0;
60427
60442
  }
60443
+ /** Get current focused zone */
60444
+ get focusedZone() {
60445
+ return this._focusedZone;
60446
+ }
60447
+ /** Set callback for header focus changes (wired by interactive.ts to banner) */
60448
+ setHeaderFocusHandler(handler) {
60449
+ this._headerFocusHandler = handler;
60450
+ }
60451
+ /** Cycle focus: footer → header → content → footer */
60452
+ cycleFocus() {
60453
+ const order = ["footer", "header", "content"];
60454
+ const idx = order.indexOf(this._focusedZone);
60455
+ this._focusedZone = order[(idx + 1) % order.length];
60456
+ this._headerFocusHandler?.(this._focusedZone === "header");
60457
+ if (this.active) {
60458
+ this._bannerRefresh?.();
60459
+ this.renderFooterAndPositionInput();
60460
+ }
60461
+ }
60428
60462
  /** Set/get COHERE participation state — shows 🌐 in metrics when active */
60429
60463
  setCohereActive(active) {
60430
60464
  this._cohereActive = active;
@@ -61061,6 +61095,13 @@ ${CONTENT_BG_SEQ}`);
61061
61095
  const compactOrder = [];
61062
61096
  let modelSectionIdx = -1;
61063
61097
  let versionSectionIdx = -1;
61098
+ {
61099
+ const zoneLabels = { header: "hdr", content: "cnt", footer: "ftr" };
61100
+ const zoneLabel = zoneLabels[this._focusedZone];
61101
+ const focusStr = pastel2(TEXT_PRIMARY, `\u258E${zoneLabel}`);
61102
+ const focusW = 1 + zoneLabel.length;
61103
+ sections.push({ expanded: focusStr, compact: focusStr, expandedW: focusW, compactW: focusW, empty: false });
61104
+ }
61064
61105
  if (this._cohereActive) {
61065
61106
  const cohereExpanded = "\x1B[38;5;214m\u{1F310}\x1B[0m";
61066
61107
  sections.push({ expanded: cohereExpanded, compact: cohereExpanded, expandedW: 2, compactW: 2, empty: false });
@@ -61600,7 +61641,7 @@ ${CONTENT_BG_SEQ}`);
61600
61641
  */
61601
61642
  buildBufferContent(width) {
61602
61643
  if (this._processing && this._brailleSpinner.isRunning) {
61603
- return this._brailleSpinner.render(width);
61644
+ return this._brailleSpinner.render(width, PANEL_BG + 1);
61604
61645
  }
61605
61646
  return "";
61606
61647
  }
@@ -61664,6 +61705,10 @@ ${CONTENT_BG_SEQ}`);
61664
61705
  onCtrlO();
61665
61706
  return;
61666
61707
  }
61708
+ if (key?.ctrl && key?.name === "tab" || s === "\x1B[9;5u") {
61709
+ self.cycleFocus();
61710
+ return;
61711
+ }
61667
61712
  if (key?.ctrl && key?.shift && key?.name === "b") {
61668
61713
  self.armBlockSelection();
61669
61714
  return;
@@ -64947,6 +64992,10 @@ Review its full output in the [${id}] tab or via full_sub_agent(action='output',
64947
64992
  statusBar.setBannerRefresh(() => {
64948
64993
  banner.renderCurrentFrame();
64949
64994
  });
64995
+ statusBar.setHeaderFocusHandler((focused) => {
64996
+ banner.setFocused(focused);
64997
+ banner.renderCurrentFrame();
64998
+ });
64950
64999
  const { onOverlayLeave: onOverlayLeave2 } = await Promise.resolve().then(() => (init_overlay_lock(), overlay_lock_exports));
64951
65000
  onOverlayLeave2(() => {
64952
65001
  banner.renderCurrentFrame();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-agents-ai",
3
- "version": "0.184.65",
3
+ "version": "0.184.66",
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",