open-agents-ai 0.187.109 → 0.187.110

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.
package/dist/index.js CHANGED
@@ -3886,8 +3886,8 @@ var init_explore_tools = __esm({
3886
3886
  },
3887
3887
  required: []
3888
3888
  };
3889
- /** Set of currently unlocked tool names (managed by the runner) */
3890
- unlockedTools = /* @__PURE__ */ new Set();
3889
+ /** Set of currently unlocked tool names (now defaults to ALL tools) */
3890
+ unlockedTools = new Set(Object.keys(TOOL_CATALOG));
3891
3891
  /** Callback to signal tool unlock to the runner */
3892
3892
  onUnlock;
3893
3893
  /**
@@ -3917,7 +3917,7 @@ var init_explore_tools = __esm({
3917
3917
  if (this.unlockedTools.has(enableName)) {
3918
3918
  return {
3919
3919
  success: true,
3920
- output: `Tool '${enableName}' is already unlocked. You can use it now.`,
3920
+ output: `Tool '${enableName}' is already available. You can use it now.`,
3921
3921
  durationMs: performance.now() - start2
3922
3922
  };
3923
3923
  }
@@ -3934,7 +3934,7 @@ var init_explore_tools = __esm({
3934
3934
  }
3935
3935
  return {
3936
3936
  success: true,
3937
- output: `UNLOCK_TOOL:${enableName}`,
3937
+ output: `Tool '${enableName}' is now available.`,
3938
3938
  durationMs: performance.now() - start2
3939
3939
  };
3940
3940
  }
@@ -3958,27 +3958,22 @@ var init_explore_tools = __esm({
3958
3958
  const lines2 = [`Tools matching "${searchQuery}":
3959
3959
  `];
3960
3960
  for (const [name10, desc] of matches.slice(0, 8)) {
3961
- const status = this.unlockedTools.has(name10) ? " [unlocked]" : "";
3962
- lines2.push(` ${name10}: ${desc}${status}`);
3961
+ lines2.push(` ${name10}: ${desc}`);
3963
3962
  }
3964
3963
  lines2.push(`
3965
- Use explore_tools(enable='name') to unlock a tool.`);
3964
+ Call the tools above directly; all tools are available by default.`);
3966
3965
  return {
3967
3966
  success: true,
3968
3967
  output: lines2.join("\n"),
3969
3968
  durationMs: performance.now() - start2
3970
3969
  };
3971
3970
  }
3972
- const lines = ["Available tools (call explore_tools with enable='name' to unlock):\n"];
3971
+ const lines = ["Available tools (all tools are available by default):\n"];
3973
3972
  for (const [name10, desc] of Object.entries(TOOL_CATALOG)) {
3974
- const status = this.unlockedTools.has(name10) ? " [unlocked]" : "";
3975
- lines.push(` ${name10}: ${desc}${status}`);
3973
+ lines.push(` ${name10}: ${desc}`);
3976
3974
  }
3977
3975
  lines.push(`
3978
- ${this.unlockedTools.size} of ${Object.keys(TOOL_CATALOG).length} tools currently unlocked.`);
3979
- lines.push(`
3980
3976
  Examples:`);
3981
- lines.push(` explore_tools({enable: 'grep_search'})`);
3982
3977
  lines.push(` explore_tools({search: 'search files'})`);
3983
3978
  return {
3984
3979
  success: true,
@@ -278956,6 +278951,10 @@ var init_status_bar = __esm({
278956
278951
  _contentScrollOffset = 0;
278957
278952
  // 0 = live (bottom), >0 = scrolled back
278958
278953
  _contentMaxLines = 1e4;
278954
+ /** Auto-scroll to live when new content arrives (disabled when user scrolls back) */
278955
+ _autoScroll = true;
278956
+ /** Cached click region for the spacer button */
278957
+ _scrollBtnRegion = null;
278959
278958
  stdinHooked = false;
278960
278959
  /** COHERE distributed cognitive commons active flag */
278961
278960
  _cohereActive = false;
@@ -280198,6 +280197,12 @@ var init_status_bar = __esm({
280198
280197
  }
280199
280198
  return;
280200
280199
  }
280200
+ if (type === "press" && this._scrollBtnRegion && row === this._scrollBtnRegion.row) {
280201
+ if (col >= this._scrollBtnRegion.start && col <= this._scrollBtnRegion.end) {
280202
+ this.jumpToLive();
280203
+ return;
280204
+ }
280205
+ }
280201
280206
  const pos = this.rowPositions(termRows());
280202
280207
  if (type === "press" && pos.tabBarRow > 0 && row === pos.tabBarRow) {
280203
280208
  const viewId = this.hitTestTabBar(col);
@@ -280252,7 +280257,8 @@ var init_status_bar = __esm({
280252
280257
  scrollOffset: 0,
280253
280258
  status: "running",
280254
280259
  taskSummary: taskSummary ?? "",
280255
- startedAt: Date.now()
280260
+ startedAt: Date.now(),
280261
+ colorCode: this.nextAgentColor()
280256
280262
  });
280257
280263
  if (this.active) {
280258
280264
  this.applyScrollRegion();
@@ -280304,7 +280310,9 @@ var init_status_bar = __esm({
280304
280310
  if (!view)
280305
280311
  return;
280306
280312
  const lines = text.split("\n");
280307
- view.contentLines.push(...lines);
280313
+ const color = view.colorCode ?? 213;
280314
+ const colored = lines.map((l2) => l2.length ? `\x1B[38;5;${color}m${l2}\x1B[0m` : l2);
280315
+ view.contentLines.push(...colored);
280308
280316
  if (view.contentLines.length > this._contentMaxLines) {
280309
280317
  view.contentLines.splice(0, view.contentLines.length - this._contentMaxLines);
280310
280318
  }
@@ -280330,6 +280338,14 @@ var init_status_bar = __esm({
280330
280338
  get hasSubAgents() {
280331
280339
  return this._agentViews.size > 1;
280332
280340
  }
280341
+ // Distinct color assignment per sub-agent for consistent labeling
280342
+ _agentColorIndex = 0;
280343
+ _agentColorPalette = [213, 183, 147, 219, 141, 177, 111, 186];
280344
+ nextAgentColor() {
280345
+ const code8 = this._agentColorPalette[this._agentColorIndex % this._agentColorPalette.length];
280346
+ this._agentColorIndex++;
280347
+ return code8;
280348
+ }
280333
280349
  // ── Agent Tab Bar (WO-NA2) ───────────────────────────────────
280334
280350
  /** Refresh agent tabs in header — delegates to the header panel system.
280335
280351
  * If currently on the "systems" panel, re-render to show updated agent list. */
@@ -280590,6 +280606,8 @@ ${CONTENT_BG_SEQ}`);
280590
280606
  this._contentScrollOffset = Math.min(this._contentScrollOffset, Math.max(0, this._contentLines.length - this.contentHeight));
280591
280607
  }
280592
280608
  }
280609
+ if (this._autoScroll)
280610
+ this._contentScrollOffset = 0;
280593
280611
  }
280594
280612
  /**
280595
280613
  * Remove the last N lines from the content scrollback buffer and repaint.
@@ -280617,6 +280635,7 @@ ${CONTENT_BG_SEQ}`);
280617
280635
  this._textSelection.clear();
280618
280636
  this.cancelMouseIdle();
280619
280637
  this.enableMouseTracking();
280638
+ this._autoScroll = false;
280620
280639
  const maxOffset = Math.max(0, this._contentLines.length - this.contentHeight);
280621
280640
  this._contentScrollOffset = Math.min(maxOffset, this._contentScrollOffset + lines);
280622
280641
  this.repaintContent();
@@ -280631,6 +280650,8 @@ ${CONTENT_BG_SEQ}`);
280631
280650
  this.enableMouseTracking();
280632
280651
  this._contentScrollOffset = Math.max(0, this._contentScrollOffset - lines);
280633
280652
  this.repaintContent();
280653
+ if (this._contentScrollOffset === 0)
280654
+ this._autoScroll = true;
280634
280655
  this.scheduleMouseIdle();
280635
280656
  }
280636
280657
  /** Page up — scroll by visible height */
@@ -280644,6 +280665,7 @@ ${CONTENT_BG_SEQ}`);
280644
280665
  /** Jump to live (End key) */
280645
280666
  jumpToLive() {
280646
280667
  this._contentScrollOffset = 0;
280668
+ this._autoScroll = true;
280647
280669
  this.repaintContent();
280648
280670
  }
280649
280671
  /**
@@ -280674,6 +280696,14 @@ ${CONTENT_BG_SEQ}`);
280674
280696
  const spacerRow = L.footerBoxTop - 1;
280675
280697
  if (spacerRow >= this.scrollRegionTop && spacerRow < this.scrollRegionTop + h + 2) {
280676
280698
  buf += `\x1B[${spacerRow};1H${CONTENT_BG_SEQ}\x1B[2K`;
280699
+ if (this._contentScrollOffset > 0) {
280700
+ const label = " \u2193 scroll to bottom ";
280701
+ const startCol = 3;
280702
+ buf += `\x1B[${spacerRow};${startCol}H\x1B[48;5;236m\x1B[38;5;229m${label}\x1B[0m${CONTENT_BG_SEQ}`;
280703
+ this._scrollBtnRegion = { row: spacerRow, start: startCol, end: startCol + label.length - 1 };
280704
+ } else {
280705
+ this._scrollBtnRegion = null;
280706
+ }
280677
280707
  }
280678
280708
  if (this._contentScrollOffset > 0) {
280679
280709
  const linesAbove = startIdx;
@@ -310542,6 +310572,9 @@ Rationale: ${proposal.rationale}${provenanceNote}`;
310542
310572
  }
310543
310573
  statusBar.endContentWrite();
310544
310574
  }
310575
+ statusBar.cancelMouseIdle();
310576
+ statusBar.enableMouseTracking();
310577
+ statusBar.refreshHeaderContent();
310545
310578
  }
310546
310579
  });
310547
310580
  let commandCtxRef = null;
@@ -312961,7 +312994,11 @@ Summarize or analyze this transcription as appropriate.`;
312961
312994
  }
312962
312995
  const inputLineCount = fullInput.split("\n").length;
312963
312996
  const displayText = isImage ? `[Image: ${cleanPath}]` : inputLineCount > 1 ? `[pasted ${inputLineCount} lines]` : fullInput;
312964
- writeContent(() => renderUserMessage(displayText));
312997
+ writeContent(() => {
312998
+ renderUserMessage(displayText);
312999
+ const preview = fullInput.length > 160 ? fullInput.slice(0, 160) + "\u2026" : fullInput;
313000
+ renderUserInterrupt(preview);
313001
+ });
312965
313002
  _recallText = input;
312966
313003
  if (_recallTimer)
312967
313004
  clearTimeout(_recallTimer);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-agents-ai",
3
- "version": "0.187.109",
3
+ "version": "0.187.110",
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",
@@ -164,7 +164,7 @@ When you discover image files (png, jpg, gif, svg, webp, bmp) during codebase ex
164
164
 
165
165
  You are **Open Agent** (open-agents-ai), an autonomous AI coding agent running on local hardware via Ollama or vLLM with open-weight models. No cloud APIs — everything runs on the user's machine.
166
166
 
167
- **Core capabilities** (use explore_tools() to unlock more):
167
+ **Core capabilities** (use explore_tools() to discover):
168
168
  - Code: read, write, edit, search, patch files across any language
169
169
  - Shell: run any command — tests, builds, git, npm, docker, etc.
170
170
  - Web: search documentation and fetch web pages
@@ -173,8 +173,8 @@ You are **Open Agent** (open-agents-ai), an autonomous AI coding agent running o
173
173
  - P2P: connect to other agents via nexus (libp2p + NATS mesh)
174
174
  - Background tasks: run long commands in background, check status later
175
175
  - Voice/TTS: text-to-speech via ONNX (cross-platform) or MLX (Apple Silicon) — use /voice to enable
176
- - Desktop/Vision: screenshot, click UI, OCR (via explore_tools)
177
- - Scheduling: cron jobs, reminders, agenda (via explore_tools)
176
+ - Desktop/Vision: screenshot, click UI, OCR (discover with explore_tools)
177
+ - Scheduling: cron jobs, reminders, agenda (discover with explore_tools)
178
178
  - Custom tools: create reusable tools from repeated workflows
179
179
 
180
180
  **Introspection tools** (use to answer questions about yourself):
@@ -88,7 +88,7 @@ NEVER write the entire document in ONE file_write call. DECOMPOSE:
88
88
 
89
89
  You are **Open Agent** (open-agents-ai), an autonomous AI coding agent running on local hardware via Ollama or vLLM with open-weight models. No cloud APIs — everything runs on the user's machine.
90
90
 
91
- **Core capabilities** (use explore_tools() to unlock more):
91
+ **Core capabilities** (use explore_tools() to discover):
92
92
  - Code: read, write, edit, search, patch files across any language
93
93
  - Shell: run any command — tests, builds, git, npm, docker, etc.
94
94
  - Web: search documentation and fetch web pages
@@ -97,8 +97,8 @@ You are **Open Agent** (open-agents-ai), an autonomous AI coding agent running o
97
97
  - P2P: nexus agent mesh — ALWAYS call nexus(action='connect') FIRST, then join_room/send_message/discover_peers/expose
98
98
  - Background tasks: run long commands in background, check status later
99
99
  - Voice/TTS: text-to-speech via ONNX (cross-platform) or MLX (Apple Silicon) — use /voice to enable
100
- - Desktop/Vision: screenshot, click UI, OCR (via explore_tools)
101
- - Scheduling: cron jobs, reminders, agenda (via explore_tools)
100
+ - Desktop/Vision: screenshot, click UI, OCR (discover with explore_tools)
101
+ - Scheduling: cron jobs, reminders, agenda (discover with explore_tools)
102
102
  - Custom tools: create reusable tools from repeated workflows
103
103
 
104
104
  When asked "how do you work?" or "what can you do?", answer from this list and use explore_tools() or skill_list() to provide specifics. Do NOT hallucinate capabilities — use tools to discover concrete information.
@@ -30,7 +30,7 @@ Rules:
30
30
  - Use list_directory for directories, NOT file_read. Prefer list_directory over shell ls.
31
31
  - Core: code editing, shell commands, web search, memory, 250+ skills (skill_list), P2P mesh (nexus — call connect FIRST), background tasks.
32
32
  - Memory: your persistent memories live in .oa/memory/ — use memory_read(topic) to recall, memory_write(topic, key, value) to save. Session history: file_read(".oa/context/session-diary.md")
33
- - When asked "what can you do?", use explore_tools() and skill_list() to discover and report your actual capabilities. Do NOT hallucinate.
33
+ - When asked "what can you do?", use explore_tools() and skill_list() to discover and report your actual capabilities. Do NOT hallucinate. All tools are available by default; explore_tools helps you discover relevant ones.
34
34
  - The <environment> block contains LIVE system metrics. When asked about hardware, battery, CPU, RAM, GPU, disk, or system info — read and report those values directly.
35
35
 
36
36
  When working with tool results, write down any important information you might need later in your response, as older tool results may be cleared to save context space.