open-agents-ai 0.184.65 → 0.184.67

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 +85 -22
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -11893,8 +11893,8 @@ async function loadTranscribeCli() {
11893
11893
  }).trim();
11894
11894
  const tcPath = join19(globalRoot, "transcribe-cli");
11895
11895
  if (existsSync16(join19(tcPath, "dist", "index.js"))) {
11896
- const { createRequire: createRequire5 } = await import("node:module");
11897
- const req = createRequire5(import.meta.url);
11896
+ const { createRequire: createRequire6 } = await import("node:module");
11897
+ const req = createRequire6(import.meta.url);
11898
11898
  _tcModule = req(join19(tcPath, "dist", "index.js"));
11899
11899
  return _tcModule;
11900
11900
  }
@@ -11907,8 +11907,8 @@ async function loadTranscribeCli() {
11907
11907
  for (const ver of readdirSync23(nvmBase)) {
11908
11908
  const tcPath = join19(nvmBase, ver, "lib", "node_modules", "transcribe-cli");
11909
11909
  if (existsSync16(join19(tcPath, "dist", "index.js"))) {
11910
- const { createRequire: createRequire5 } = await import("node:module");
11911
- const req = createRequire5(import.meta.url);
11910
+ const { createRequire: createRequire6 } = await import("node:module");
11911
+ const req = createRequire6(import.meta.url);
11912
11912
  _tcModule = req(join19(tcPath, "dist", "index.js"));
11913
11913
  return _tcModule;
11914
11914
  }
@@ -30101,8 +30101,8 @@ var init_listen = __esm({
30101
30101
  /** Load transcribe-cli — bundled as a dependency of open-agents-ai. */
30102
30102
  async loadTranscribeCli() {
30103
30103
  try {
30104
- const { createRequire: createRequire5 } = await import("node:module");
30105
- const req = createRequire5(import.meta.url);
30104
+ const { createRequire: createRequire6 } = await import("node:module");
30105
+ const req = createRequire6(import.meta.url);
30106
30106
  return req("transcribe-cli");
30107
30107
  } catch {
30108
30108
  }
@@ -30114,8 +30114,8 @@ var init_listen = __esm({
30114
30114
  }).trim();
30115
30115
  const tcPath = join48(globalRoot, "transcribe-cli");
30116
30116
  if (existsSync32(join48(tcPath, "dist", "index.js"))) {
30117
- const { createRequire: createRequire5 } = await import("node:module");
30118
- const req = createRequire5(import.meta.url);
30117
+ const { createRequire: createRequire6 } = await import("node:module");
30118
+ const req = createRequire6(import.meta.url);
30119
30119
  return req(join48(tcPath, "dist", "index.js"));
30120
30120
  }
30121
30121
  } catch {
@@ -30127,8 +30127,8 @@ var init_listen = __esm({
30127
30127
  for (const ver of readdirSync23(nvmBase)) {
30128
30128
  const tcPath = join48(nvmBase, ver, "lib", "node_modules", "transcribe-cli");
30129
30129
  if (existsSync32(join48(tcPath, "dist", "index.js"))) {
30130
- const { createRequire: createRequire5 } = await import("node:module");
30131
- const req = createRequire5(import.meta.url);
30130
+ const { createRequire: createRequire6 } = await import("node:module");
30131
+ const req = createRequire6(import.meta.url);
30132
30132
  return req(join48(tcPath, "dist", "index.js"));
30133
30133
  }
30134
30134
  }
@@ -50633,11 +50633,11 @@ async function handleUpdate(subcommand, ctx) {
50633
50633
  }
50634
50634
  let currentVersion = "0.0.0";
50635
50635
  try {
50636
- const { createRequire: createRequire5 } = await import("node:module");
50636
+ const { createRequire: createRequire6 } = await import("node:module");
50637
50637
  const { fileURLToPath: fileURLToPath15 } = await import("node:url");
50638
50638
  const { dirname: dirname23, join: join76 } = await import("node:path");
50639
50639
  const { existsSync: existsSync56 } = await import("node:fs");
50640
- const req = createRequire5(import.meta.url);
50640
+ const req = createRequire6(import.meta.url);
50641
50641
  const thisDir = dirname23(fileURLToPath15(import.meta.url));
50642
50642
  const candidates = [
50643
50643
  join76(thisDir, "..", "package.json"),
@@ -51817,8 +51817,20 @@ var init_project_context = __esm({
51817
51817
  });
51818
51818
 
51819
51819
  // packages/memory/dist/db.js
51820
- import Database from "better-sqlite3";
51820
+ import { createRequire as createRequire2 } from "node:module";
51821
+ function getDatabase() {
51822
+ if (_Database !== null)
51823
+ return _Database;
51824
+ try {
51825
+ const req = createRequire2(import.meta.url);
51826
+ _Database = req("better-sqlite3");
51827
+ } catch {
51828
+ throw new Error("better-sqlite3 is not available (native module build may have failed).\nTry: npm rebuild better-sqlite3\nMemory features (SQLite) are disabled until this is resolved.");
51829
+ }
51830
+ return _Database;
51831
+ }
51821
51832
  function initDb(dbPath) {
51833
+ const Database = getDatabase();
51822
51834
  const db = new Database(dbPath);
51823
51835
  db.pragma("journal_mode = WAL");
51824
51836
  db.pragma("foreign_keys = ON");
@@ -52040,9 +52052,11 @@ function runMigrations(db) {
52040
52052
  ON memory_link (target_id);
52041
52053
  `);
52042
52054
  }
52055
+ var _Database;
52043
52056
  var init_db = __esm({
52044
52057
  "packages/memory/dist/db.js"() {
52045
52058
  "use strict";
52059
+ _Database = null;
52046
52060
  }
52047
52061
  });
52048
52062
 
@@ -53071,6 +53085,8 @@ var init_banner = __esm({
53071
53085
  _updateAvailable = null;
53072
53086
  /** Global frame counter for pulse animation (survives frame resets) */
53073
53087
  _pulseFrame = 0;
53088
+ /** Whether header zone is focused (Ctrl+Tab highlight) */
53089
+ _focused = false;
53074
53090
  constructor() {
53075
53091
  this.width = process.stdout.columns ?? 80;
53076
53092
  }
@@ -53082,6 +53098,10 @@ var init_banner = __esm({
53082
53098
  clearUpdateAvailable() {
53083
53099
  this._updateAvailable = null;
53084
53100
  }
53101
+ /** Set header focus state for Ctrl+Tab visual highlight */
53102
+ setFocused(focused) {
53103
+ this._focused = focused;
53104
+ }
53085
53105
  /** Whether an update badge is showing */
53086
53106
  get hasUpdate() {
53087
53107
  return this._updateAvailable !== null;
@@ -53183,6 +53203,11 @@ var init_banner = __esm({
53183
53203
  buf += "\x1B]8;;\x07";
53184
53204
  }
53185
53205
  }
53206
+ if (this._focused) {
53207
+ for (let r = 0; r < this.rows; r++) {
53208
+ buf += `\x1B[${r + 1};1H\x1B[38;5;178m\x1B[48;5;234m\u258E\x1B[0m`;
53209
+ }
53210
+ }
53186
53211
  if (this._updateAvailable && this.currentDesign?.type === "default") {
53187
53212
  this._pulseFrame++;
53188
53213
  const t = (Math.sin(this._pulseFrame * 0.16) + 1) / 2;
@@ -58873,7 +58898,7 @@ var init_braille_spinner = __esm({
58873
58898
  * high SNR produces smooth coherent waves (clean signal propagation).
58874
58899
  * - Dream mode: slower, deeper breathing with warm amber color override.
58875
58900
  */
58876
- render(width) {
58901
+ render(width, hintColor) {
58877
58902
  const m = this._metrics;
58878
58903
  const useExtended = m.isStreaming || m.isDreaming || m.mood !== "neutral";
58879
58904
  const wave = useExtended ? WAVE_EXT : WAVE;
@@ -58941,7 +58966,7 @@ var init_braille_spinner = __esm({
58941
58966
  ch = sparseChars[Math.floor(scatter * sparseChars.length * 3.33) % sparseChars.length];
58942
58967
  }
58943
58968
  }
58944
- const color = activeColorRamp[Math.min(scaledIdx, activeColorRamp.length - 1)];
58969
+ const color = hintColor ?? activeColorRamp[Math.min(scaledIdx, activeColorRamp.length - 1)];
58945
58970
  if (color !== lastColor) {
58946
58971
  buf += `\x1B[38;5;${color}m`;
58947
58972
  lastColor = color;
@@ -59855,6 +59880,10 @@ var init_status_bar = __esm({
59855
59880
  _countdown = 0;
59856
59881
  _recBlink = true;
59857
59882
  _recBlinkTimer = null;
59883
+ /** Current focus zone for Ctrl+Tab cycling */
59884
+ _focusedZone = "footer";
59885
+ /** Callback to notify header (banner) of focus changes */
59886
+ _headerFocusHandler = null;
59858
59887
  /** Whether agent is actively processing (braille animation) */
59859
59888
  _processing = false;
59860
59889
  _brailleSpinner = new BrailleSpinner();
@@ -60425,6 +60454,25 @@ var init_status_bar = __esm({
60425
60454
  get isStreaming() {
60426
60455
  return this.writeDepth > 0;
60427
60456
  }
60457
+ /** Get current focused zone */
60458
+ get focusedZone() {
60459
+ return this._focusedZone;
60460
+ }
60461
+ /** Set callback for header focus changes (wired by interactive.ts to banner) */
60462
+ setHeaderFocusHandler(handler) {
60463
+ this._headerFocusHandler = handler;
60464
+ }
60465
+ /** Cycle focus: footer → header → content → footer */
60466
+ cycleFocus() {
60467
+ const order = ["footer", "header", "content"];
60468
+ const idx = order.indexOf(this._focusedZone);
60469
+ this._focusedZone = order[(idx + 1) % order.length];
60470
+ this._headerFocusHandler?.(this._focusedZone === "header");
60471
+ if (this.active) {
60472
+ this._bannerRefresh?.();
60473
+ this.renderFooterAndPositionInput();
60474
+ }
60475
+ }
60428
60476
  /** Set/get COHERE participation state — shows 🌐 in metrics when active */
60429
60477
  setCohereActive(active) {
60430
60478
  this._cohereActive = active;
@@ -61061,6 +61109,13 @@ ${CONTENT_BG_SEQ}`);
61061
61109
  const compactOrder = [];
61062
61110
  let modelSectionIdx = -1;
61063
61111
  let versionSectionIdx = -1;
61112
+ {
61113
+ const zoneLabels = { header: "hdr", content: "cnt", footer: "ftr" };
61114
+ const zoneLabel = zoneLabels[this._focusedZone];
61115
+ const focusStr = pastel2(TEXT_PRIMARY, `\u258E${zoneLabel}`);
61116
+ const focusW = 1 + zoneLabel.length;
61117
+ sections.push({ expanded: focusStr, compact: focusStr, expandedW: focusW, compactW: focusW, empty: false });
61118
+ }
61064
61119
  if (this._cohereActive) {
61065
61120
  const cohereExpanded = "\x1B[38;5;214m\u{1F310}\x1B[0m";
61066
61121
  sections.push({ expanded: cohereExpanded, compact: cohereExpanded, expandedW: 2, compactW: 2, empty: false });
@@ -61600,7 +61655,7 @@ ${CONTENT_BG_SEQ}`);
61600
61655
  */
61601
61656
  buildBufferContent(width) {
61602
61657
  if (this._processing && this._brailleSpinner.isRunning) {
61603
- return this._brailleSpinner.render(width);
61658
+ return this._brailleSpinner.render(width, PANEL_BG + 1);
61604
61659
  }
61605
61660
  return "";
61606
61661
  }
@@ -61664,6 +61719,10 @@ ${CONTENT_BG_SEQ}`);
61664
61719
  onCtrlO();
61665
61720
  return;
61666
61721
  }
61722
+ if (key?.ctrl && key?.name === "tab" || s === "\x1B[9;5u") {
61723
+ self.cycleFocus();
61724
+ return;
61725
+ }
61667
61726
  if (key?.ctrl && key?.shift && key?.name === "b") {
61668
61727
  self.armBlockSelection();
61669
61728
  return;
@@ -62057,7 +62116,7 @@ __export(serve_exports, {
62057
62116
  });
62058
62117
  import * as http from "node:http";
62059
62118
  import * as https from "node:https";
62060
- import { createRequire as createRequire2 } from "node:module";
62119
+ import { createRequire as createRequire3 } from "node:module";
62061
62120
  import { fileURLToPath as fileURLToPath12 } from "node:url";
62062
62121
  import { dirname as dirname20, join as join69, resolve as resolve31 } from "node:path";
62063
62122
  import { spawn as spawn20 } from "node:child_process";
@@ -62065,7 +62124,7 @@ import { mkdirSync as mkdirSync26, writeFileSync as writeFileSync25, readFileSyn
62065
62124
  import { randomBytes as randomBytes16 } from "node:crypto";
62066
62125
  function getVersion3() {
62067
62126
  try {
62068
- const require2 = createRequire2(import.meta.url);
62127
+ const require2 = createRequire3(import.meta.url);
62069
62128
  const thisDir = dirname20(fileURLToPath12(import.meta.url));
62070
62129
  const candidates = [
62071
62130
  join69(thisDir, "..", "package.json"),
@@ -63485,7 +63544,7 @@ import * as readline2 from "node:readline";
63485
63544
  import { Writable } from "node:stream";
63486
63545
  import { cwd } from "node:process";
63487
63546
  import { resolve as resolve32, join as join70, dirname as dirname21, extname as extname11 } from "node:path";
63488
- import { createRequire as createRequire3 } from "node:module";
63547
+ import { createRequire as createRequire4 } from "node:module";
63489
63548
  import { fileURLToPath as fileURLToPath13 } from "node:url";
63490
63549
  import { readFileSync as readFileSync42, writeFileSync as writeFileSync26, appendFileSync as appendFileSync4, rmSync as rmSync3, readdirSync as readdirSync21, mkdirSync as mkdirSync27 } from "node:fs";
63491
63550
  import { existsSync as existsSync53 } from "node:fs";
@@ -63506,7 +63565,7 @@ function formatTimeAgo(date) {
63506
63565
  }
63507
63566
  function getVersion4() {
63508
63567
  try {
63509
- const require2 = createRequire3(import.meta.url);
63568
+ const require2 = createRequire4(import.meta.url);
63510
63569
  const thisDir = dirname21(fileURLToPath13(import.meta.url));
63511
63570
  const candidates = [
63512
63571
  join70(thisDir, "..", "package.json"),
@@ -64947,6 +65006,10 @@ Review its full output in the [${id}] tab or via full_sub_agent(action='output',
64947
65006
  statusBar.setBannerRefresh(() => {
64948
65007
  banner.renderCurrentFrame();
64949
65008
  });
65009
+ statusBar.setHeaderFocusHandler((focused) => {
65010
+ banner.setFocused(focused);
65011
+ banner.renderCurrentFrame();
65012
+ });
64950
65013
  const { onOverlayLeave: onOverlayLeave2 } = await Promise.resolve().then(() => (init_overlay_lock(), overlay_lock_exports));
64951
65014
  onOverlayLeave2(() => {
64952
65015
  banner.renderCurrentFrame();
@@ -69265,7 +69328,7 @@ init_config();
69265
69328
  init_output();
69266
69329
  init_updater();
69267
69330
  import { parseArgs as nodeParseArgs2 } from "node:util";
69268
- import { createRequire as createRequire4 } from "node:module";
69331
+ import { createRequire as createRequire5 } from "node:module";
69269
69332
  import { fileURLToPath as fileURLToPath14 } from "node:url";
69270
69333
  import { dirname as dirname22, join as join75 } from "node:path";
69271
69334
 
@@ -69373,7 +69436,7 @@ init_spinner();
69373
69436
  init_output();
69374
69437
  function getVersion5() {
69375
69438
  try {
69376
- const require2 = createRequire4(import.meta.url);
69439
+ const require2 = createRequire5(import.meta.url);
69377
69440
  const pkgPath = join75(dirname22(fileURLToPath14(import.meta.url)), "..", "package.json");
69378
69441
  const pkg = require2(pkgPath);
69379
69442
  return pkg.version;
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.67",
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",
@@ -76,7 +76,6 @@
76
76
  },
77
77
  "dependencies": {
78
78
  "aiwg": "^2026.3.2",
79
- "better-sqlite3": "^11.7.0",
80
79
  "glob": "^11.0.0",
81
80
  "ignore": "^6.0.2",
82
81
  "nats.ws": "^1.30.3",
@@ -84,6 +83,7 @@
84
83
  "zod": "^3.24.1"
85
84
  },
86
85
  "optionalDependencies": {
86
+ "better-sqlite3": "^11.7.0",
87
87
  "moondream": "^0.2.0",
88
88
  "neovim": "^5.3.0",
89
89
  "node-pty": "^1.0.0",