open-agents-ai 0.104.15 → 0.104.17

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 +66 -12
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -34560,6 +34560,14 @@ import { execSync as execSync26 } from "node:child_process";
34560
34560
  function isNeovimActive() {
34561
34561
  return _state !== null && !_state.cleanedUp;
34562
34562
  }
34563
+ function isNeovimFocused() {
34564
+ return _state?.focused ?? false;
34565
+ }
34566
+ function refocusNeovim() {
34567
+ if (!_state || _state.cleanedUp || _state.focused)
34568
+ return;
34569
+ toggleFocus(_state);
34570
+ }
34563
34571
  async function startNeovimMode(opts) {
34564
34572
  if (_state && !_state.cleanedUp) {
34565
34573
  return "Neovim mode is already active. Use /neovim to exit first.";
@@ -38008,6 +38016,7 @@ async function handleSlashCommand(input, ctx) {
38008
38016
  ctx.clearScreen();
38009
38017
  renderInfo("Neovim mode stopped. Main waterfall restored.");
38010
38018
  } else {
38019
+ ctx.retireCarousel?.();
38011
38020
  const contentRows = ctx.availableContentRows?.() ?? Math.max(5, (process.stdout.rows ?? 24) - 6);
38012
38021
  const cols = process.stdout.columns ?? 80;
38013
38022
  const err = await startNeovimMode({
@@ -38023,8 +38032,6 @@ async function handleSlashCommand(input, ctx) {
38023
38032
  });
38024
38033
  if (err) {
38025
38034
  renderError(err);
38026
- } else {
38027
- renderInfo("Neovim mode started. Ctrl+N toggles focus between editor and input.");
38028
38035
  }
38029
38036
  }
38030
38037
  return "handled";
@@ -47723,22 +47730,47 @@ var init_status_bar = __esm({
47723
47730
  }
47724
47731
  /** Expose gateway status — shown after capability emojis */
47725
47732
  _expose = null;
47726
- /** Blink state for expose icon during active inference */
47733
+ /** Blink state for expose icon during active inference — router LED pattern */
47727
47734
  _exposeBlinkOn = true;
47728
47735
  _exposeBlinkTimer = null;
47736
+ /** Trail timer — keeps blinking briefly after connections drop */
47737
+ _exposeTrailTimer = null;
47738
+ /** Rolling request count for activity-based trail duration */
47739
+ _exposeRecentReqs = 0;
47740
+ _exposeLastReqCount = 0;
47729
47741
  /** Update expose gateway status */
47730
47742
  setExposeStatus(status) {
47731
47743
  this._expose = status;
47732
- if (status.activeConnections > 0 && !this._exposeBlinkTimer) {
47733
- this._exposeBlinkTimer = setInterval(() => {
47734
- this._exposeBlinkOn = !this._exposeBlinkOn;
47744
+ const newReqs = status.totalRequests - this._exposeLastReqCount;
47745
+ if (newReqs > 0) {
47746
+ this._exposeRecentReqs = Math.min(this._exposeRecentReqs + newReqs, 50);
47747
+ this._exposeLastReqCount = status.totalRequests;
47748
+ }
47749
+ if (status.activeConnections > 0) {
47750
+ if (this._exposeTrailTimer) {
47751
+ clearTimeout(this._exposeTrailTimer);
47752
+ this._exposeTrailTimer = null;
47753
+ }
47754
+ if (!this._exposeBlinkTimer) {
47755
+ this._exposeBlinkTimer = setInterval(() => {
47756
+ this._exposeBlinkOn = !this._exposeBlinkOn;
47757
+ if (this.active)
47758
+ this.renderFooterPreserveCursor();
47759
+ }, 100);
47760
+ }
47761
+ } else if (this._exposeBlinkTimer && !this._exposeTrailTimer) {
47762
+ const trailMs = Math.min(1e3 + this._exposeRecentReqs * 40, 3e3);
47763
+ this._exposeTrailTimer = setTimeout(() => {
47764
+ if (this._exposeBlinkTimer) {
47765
+ clearInterval(this._exposeBlinkTimer);
47766
+ this._exposeBlinkTimer = null;
47767
+ }
47768
+ this._exposeBlinkOn = true;
47769
+ this._exposeTrailTimer = null;
47770
+ this._exposeRecentReqs = Math.max(0, this._exposeRecentReqs - 5);
47735
47771
  if (this.active)
47736
47772
  this.renderFooterPreserveCursor();
47737
- }, 500);
47738
- } else if (status.activeConnections === 0 && this._exposeBlinkTimer) {
47739
- clearInterval(this._exposeBlinkTimer);
47740
- this._exposeBlinkTimer = null;
47741
- this._exposeBlinkOn = true;
47773
+ }, trailMs);
47742
47774
  }
47743
47775
  if (this.active)
47744
47776
  this.renderFooterPreserveCursor();
@@ -47749,8 +47781,13 @@ var init_status_bar = __esm({
47749
47781
  if (this._exposeBlinkTimer) {
47750
47782
  clearInterval(this._exposeBlinkTimer);
47751
47783
  this._exposeBlinkTimer = null;
47752
- this._exposeBlinkOn = true;
47753
47784
  }
47785
+ if (this._exposeTrailTimer) {
47786
+ clearTimeout(this._exposeTrailTimer);
47787
+ this._exposeTrailTimer = null;
47788
+ }
47789
+ this._exposeBlinkOn = true;
47790
+ this._exposeRecentReqs = 0;
47754
47791
  if (this.active)
47755
47792
  this.renderFooterPreserveCursor();
47756
47793
  }
@@ -51463,6 +51500,14 @@ Respond concisely and safely. Remember: you are talking to the general public.`;
51463
51500
  showPrompt() {
51464
51501
  showPrompt();
51465
51502
  },
51503
+ retireCarousel() {
51504
+ if (!carouselRetired && carousel.isRunning) {
51505
+ carousel.stop();
51506
+ carouselRetired = true;
51507
+ if (statusBar.isActive)
51508
+ statusBar.setScrollRegionTop(1);
51509
+ }
51510
+ },
51466
51511
  destroyProject() {
51467
51512
  const oaPath = join51(repoRoot, OA_DIR);
51468
51513
  if (existsSync42(oaPath)) {
@@ -51797,6 +51842,9 @@ Execute this skill now. Follow the behavioral guidance above.`;
51797
51842
  }, currentTaskType, resolvedContextWindowSize, resolvedCaps, currentStyle, deepContextEnabled, compactionSNRCallback(), emotionEngine, flowEnabled, buildSlashCommandHandler(), thinkingEnabled, handleAskUser);
51798
51843
  activeTask = task;
51799
51844
  showPrompt();
51845
+ if (isNeovimActive() && !isNeovimFocused()) {
51846
+ refocusNeovim();
51847
+ }
51800
51848
  await task.promise;
51801
51849
  } catch (err) {
51802
51850
  const errMsg = err instanceof Error ? err.message : String(err);
@@ -51857,6 +51905,9 @@ ${result.text}`;
51857
51905
  } else {
51858
51906
  writeContent(() => renderUserInterrupt(input));
51859
51907
  }
51908
+ if (isNeovimActive() && !isNeovimFocused()) {
51909
+ refocusNeovim();
51910
+ }
51860
51911
  const steerRunner = activeTask.runner;
51861
51912
  const steerTaskGoal = lastSubmittedPrompt;
51862
51913
  const steerFeed = getActivityFeed();
@@ -52041,6 +52092,9 @@ NEW TASK: ${fullInput}`;
52041
52092
  }, currentTaskType, resolvedContextWindowSize, resolvedCaps, currentStyle, deepContextEnabled, compactionSNRCallback(), emotionEngine, flowEnabled, buildSlashCommandHandler(), thinkingEnabled, handleAskUser);
52042
52093
  activeTask = task;
52043
52094
  showPrompt();
52095
+ if (isNeovimActive() && !isNeovimFocused()) {
52096
+ refocusNeovim();
52097
+ }
52044
52098
  await task.promise;
52045
52099
  } catch (err) {
52046
52100
  const errMsg = err instanceof Error ? err.message : String(err);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-agents-ai",
3
- "version": "0.104.15",
3
+ "version": "0.104.17",
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",