open-agents-ai 0.187.109 → 0.187.111
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 (
|
|
3890
|
-
unlockedTools =
|
|
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
|
|
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: `
|
|
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
|
-
|
|
3962
|
-
lines2.push(` ${name10}: ${desc}${status}`);
|
|
3961
|
+
lines2.push(` ${name10}: ${desc}`);
|
|
3963
3962
|
}
|
|
3964
3963
|
lines2.push(`
|
|
3965
|
-
|
|
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 (
|
|
3971
|
+
const lines = ["Available tools (all tools are available by default):\n"];
|
|
3973
3972
|
for (const [name10, desc] of Object.entries(TOOL_CATALOG)) {
|
|
3974
|
-
|
|
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,
|
|
@@ -278750,7 +278745,7 @@ function setTerminalTitle(task, version4) {
|
|
|
278750
278745
|
const title = task ? `${task.slice(0, 60)} \xB7 ${ver}` : ver;
|
|
278751
278746
|
process.stdout.write(`\x1B]2;${title}\x07`);
|
|
278752
278747
|
}
|
|
278753
|
-
var EXPERT_TOOL_BASELINES, CONTEXT_SWITCH_OVERHEAD, TURN_PLANNING_OVERHEAD, DEFAULT_TOOL_BASELINE, CODE_READ_CHARS_PER_SEC, PROSE_READ_CHARS_PER_SEC, MIN_CONTENT_FOR_READING, CODE_CONTENT_TOOLS, PROSE_CONTENT_TOOLS, HumanSpeedTracker, PANEL_BG_SEQ, CONTENT_BG_SEQ, BOX_FG, TEXT_PRIMARY, TEXT_DIM, BOX_TL, BOX_TR, BOX_BL, BOX_BR, BOX_H, BOX_V, _globalFooterLock, RESET, _isWindows, StatusBar;
|
|
278748
|
+
var EXPERT_TOOL_BASELINES, CONTEXT_SWITCH_OVERHEAD, TURN_PLANNING_OVERHEAD, DEFAULT_TOOL_BASELINE, CODE_READ_CHARS_PER_SEC, PROSE_READ_CHARS_PER_SEC, MIN_CONTENT_FOR_READING, CODE_CONTENT_TOOLS, PROSE_CONTENT_TOOLS, HumanSpeedTracker, PANEL_BG_SEQ, CONTENT_BG_SEQ, BOX_FG, TEXT_PRIMARY, TEXT_DIM, BOX_TL, BOX_TR, BOX_BL, BOX_BR, BOX_H, BOX_V, _globalFooterLock, RESET, CURSOR_BLINK_BLOCK, _isWindows, StatusBar;
|
|
278754
278749
|
var init_status_bar = __esm({
|
|
278755
278750
|
"packages/cli/dist/tui/status-bar.js"() {
|
|
278756
278751
|
"use strict";
|
|
@@ -278932,6 +278927,7 @@ var init_status_bar = __esm({
|
|
|
278932
278927
|
BOX_V = "\u2502";
|
|
278933
278928
|
_globalFooterLock = false;
|
|
278934
278929
|
RESET = "\x1B[0m";
|
|
278930
|
+
CURSOR_BLINK_BLOCK = "\x1B[1 q";
|
|
278935
278931
|
_isWindows = process.platform === "win32";
|
|
278936
278932
|
StatusBar = class _StatusBar {
|
|
278937
278933
|
metrics = {
|
|
@@ -278956,6 +278952,10 @@ var init_status_bar = __esm({
|
|
|
278956
278952
|
_contentScrollOffset = 0;
|
|
278957
278953
|
// 0 = live (bottom), >0 = scrolled back
|
|
278958
278954
|
_contentMaxLines = 1e4;
|
|
278955
|
+
/** Auto-scroll to live when new content arrives (disabled when user scrolls back) */
|
|
278956
|
+
_autoScroll = true;
|
|
278957
|
+
/** Cached click region for the spacer button */
|
|
278958
|
+
_scrollBtnRegion = null;
|
|
278959
278959
|
stdinHooked = false;
|
|
278960
278960
|
/** COHERE distributed cognitive commons active flag */
|
|
278961
278961
|
_cohereActive = false;
|
|
@@ -280198,6 +280198,12 @@ var init_status_bar = __esm({
|
|
|
280198
280198
|
}
|
|
280199
280199
|
return;
|
|
280200
280200
|
}
|
|
280201
|
+
if (type === "press" && this._scrollBtnRegion && row === this._scrollBtnRegion.row) {
|
|
280202
|
+
if (col >= this._scrollBtnRegion.start && col <= this._scrollBtnRegion.end) {
|
|
280203
|
+
this.jumpToLive();
|
|
280204
|
+
return;
|
|
280205
|
+
}
|
|
280206
|
+
}
|
|
280201
280207
|
const pos = this.rowPositions(termRows());
|
|
280202
280208
|
if (type === "press" && pos.tabBarRow > 0 && row === pos.tabBarRow) {
|
|
280203
280209
|
const viewId = this.hitTestTabBar(col);
|
|
@@ -280252,7 +280258,8 @@ var init_status_bar = __esm({
|
|
|
280252
280258
|
scrollOffset: 0,
|
|
280253
280259
|
status: "running",
|
|
280254
280260
|
taskSummary: taskSummary ?? "",
|
|
280255
|
-
startedAt: Date.now()
|
|
280261
|
+
startedAt: Date.now(),
|
|
280262
|
+
colorCode: this.nextAgentColor()
|
|
280256
280263
|
});
|
|
280257
280264
|
if (this.active) {
|
|
280258
280265
|
this.applyScrollRegion();
|
|
@@ -280304,7 +280311,9 @@ var init_status_bar = __esm({
|
|
|
280304
280311
|
if (!view)
|
|
280305
280312
|
return;
|
|
280306
280313
|
const lines = text.split("\n");
|
|
280307
|
-
view.
|
|
280314
|
+
const color = view.colorCode ?? 213;
|
|
280315
|
+
const colored = lines.map((l2) => l2.length ? `\x1B[38;5;${color}m${l2}\x1B[0m` : l2);
|
|
280316
|
+
view.contentLines.push(...colored);
|
|
280308
280317
|
if (view.contentLines.length > this._contentMaxLines) {
|
|
280309
280318
|
view.contentLines.splice(0, view.contentLines.length - this._contentMaxLines);
|
|
280310
280319
|
}
|
|
@@ -280330,6 +280339,14 @@ var init_status_bar = __esm({
|
|
|
280330
280339
|
get hasSubAgents() {
|
|
280331
280340
|
return this._agentViews.size > 1;
|
|
280332
280341
|
}
|
|
280342
|
+
// Distinct color assignment per sub-agent for consistent labeling
|
|
280343
|
+
_agentColorIndex = 0;
|
|
280344
|
+
_agentColorPalette = [213, 183, 147, 219, 141, 177, 111, 186];
|
|
280345
|
+
nextAgentColor() {
|
|
280346
|
+
const code8 = this._agentColorPalette[this._agentColorIndex % this._agentColorPalette.length];
|
|
280347
|
+
this._agentColorIndex++;
|
|
280348
|
+
return code8;
|
|
280349
|
+
}
|
|
280333
280350
|
// ── Agent Tab Bar (WO-NA2) ───────────────────────────────────
|
|
280334
280351
|
/** Refresh agent tabs in header — delegates to the header panel system.
|
|
280335
280352
|
* If currently on the "systems" panel, re-render to show updated agent list. */
|
|
@@ -280590,6 +280607,8 @@ ${CONTENT_BG_SEQ}`);
|
|
|
280590
280607
|
this._contentScrollOffset = Math.min(this._contentScrollOffset, Math.max(0, this._contentLines.length - this.contentHeight));
|
|
280591
280608
|
}
|
|
280592
280609
|
}
|
|
280610
|
+
if (this._autoScroll)
|
|
280611
|
+
this._contentScrollOffset = 0;
|
|
280593
280612
|
}
|
|
280594
280613
|
/**
|
|
280595
280614
|
* Remove the last N lines from the content scrollback buffer and repaint.
|
|
@@ -280617,6 +280636,7 @@ ${CONTENT_BG_SEQ}`);
|
|
|
280617
280636
|
this._textSelection.clear();
|
|
280618
280637
|
this.cancelMouseIdle();
|
|
280619
280638
|
this.enableMouseTracking();
|
|
280639
|
+
this._autoScroll = false;
|
|
280620
280640
|
const maxOffset = Math.max(0, this._contentLines.length - this.contentHeight);
|
|
280621
280641
|
this._contentScrollOffset = Math.min(maxOffset, this._contentScrollOffset + lines);
|
|
280622
280642
|
this.repaintContent();
|
|
@@ -280631,6 +280651,8 @@ ${CONTENT_BG_SEQ}`);
|
|
|
280631
280651
|
this.enableMouseTracking();
|
|
280632
280652
|
this._contentScrollOffset = Math.max(0, this._contentScrollOffset - lines);
|
|
280633
280653
|
this.repaintContent();
|
|
280654
|
+
if (this._contentScrollOffset === 0)
|
|
280655
|
+
this._autoScroll = true;
|
|
280634
280656
|
this.scheduleMouseIdle();
|
|
280635
280657
|
}
|
|
280636
280658
|
/** Page up — scroll by visible height */
|
|
@@ -280644,6 +280666,7 @@ ${CONTENT_BG_SEQ}`);
|
|
|
280644
280666
|
/** Jump to live (End key) */
|
|
280645
280667
|
jumpToLive() {
|
|
280646
280668
|
this._contentScrollOffset = 0;
|
|
280669
|
+
this._autoScroll = true;
|
|
280647
280670
|
this.repaintContent();
|
|
280648
280671
|
}
|
|
280649
280672
|
/**
|
|
@@ -280674,6 +280697,14 @@ ${CONTENT_BG_SEQ}`);
|
|
|
280674
280697
|
const spacerRow = L.footerBoxTop - 1;
|
|
280675
280698
|
if (spacerRow >= this.scrollRegionTop && spacerRow < this.scrollRegionTop + h + 2) {
|
|
280676
280699
|
buf += `\x1B[${spacerRow};1H${CONTENT_BG_SEQ}\x1B[2K`;
|
|
280700
|
+
if (this._contentScrollOffset > 0) {
|
|
280701
|
+
const label = " \u2193 scroll to bottom ";
|
|
280702
|
+
const startCol = 3;
|
|
280703
|
+
buf += `\x1B[${spacerRow};${startCol}H\x1B[48;5;236m\x1B[38;5;229m${label}\x1B[0m${CONTENT_BG_SEQ}`;
|
|
280704
|
+
this._scrollBtnRegion = { row: spacerRow, start: startCol, end: startCol + label.length - 1 };
|
|
280705
|
+
} else {
|
|
280706
|
+
this._scrollBtnRegion = null;
|
|
280707
|
+
}
|
|
280677
280708
|
}
|
|
280678
280709
|
if (this._contentScrollOffset > 0) {
|
|
280679
280710
|
const linesAbove = startIdx;
|
|
@@ -280696,7 +280727,7 @@ ${CONTENT_BG_SEQ}`);
|
|
|
280696
280727
|
if (!this.active)
|
|
280697
280728
|
return;
|
|
280698
280729
|
const L = layout();
|
|
280699
|
-
this.termWrite(`\x1B[${L.footerInput};${this.promptWidth + 2}H\x1B[?25h`);
|
|
280730
|
+
this.termWrite(`\x1B[${L.footerInput};${this.promptWidth + 2}H${CURSOR_BLINK_BLOCK}\x1B[?25h`);
|
|
280700
280731
|
}
|
|
280701
280732
|
/** Strip ANSI escape codes to measure visible character width */
|
|
280702
280733
|
static visWidth(s2) {
|
|
@@ -281107,7 +281138,9 @@ ${CONTENT_BG_SEQ}`);
|
|
|
281107
281138
|
return {
|
|
281108
281139
|
lines: [displayLine],
|
|
281109
281140
|
cursorRow: 0,
|
|
281110
|
-
|
|
281141
|
+
// Align with bordered input layout: col1 is │, content starts at col2.
|
|
281142
|
+
// Keep this consistent with the wrapped path (+2) and positionAtInput().
|
|
281143
|
+
cursorCol: this.promptWidth + cursorPos + 2
|
|
281111
281144
|
};
|
|
281112
281145
|
}
|
|
281113
281146
|
const rawLines = [];
|
|
@@ -281238,7 +281271,7 @@ ${CONTENT_BG_SEQ}`);
|
|
|
281238
281271
|
buf += `\x1B[${pos.metricsRow};1H${PANEL_BG_SEQ}\x1B[2K${this.buildMetricsLine()}${RESET}`;
|
|
281239
281272
|
buf += "\x1B[?7h";
|
|
281240
281273
|
if (this.writeDepth === 0) {
|
|
281241
|
-
buf += `\x1B[${cursorTermRow};${inputWrap.cursorCol}H\x1B[?25h`;
|
|
281274
|
+
buf += `\x1B[${cursorTermRow};${inputWrap.cursorCol}H${CURSOR_BLINK_BLOCK}\x1B[?25h`;
|
|
281242
281275
|
}
|
|
281243
281276
|
this.termWrite(buf);
|
|
281244
281277
|
}
|
|
@@ -281287,7 +281320,7 @@ ${CONTENT_BG_SEQ}`);
|
|
|
281287
281320
|
buf += `\x1B[${pos.bufferRow};1H${PANEL_BG_SEQ}\x1B[2K${BOX_FG}${BOX_BL}${BOX_H.repeat(Math.max(0, boxInnerR))}${BOX_BR}${RESET}`;
|
|
281288
281321
|
}
|
|
281289
281322
|
buf += `\x1B[${pos.metricsRow};1H${PANEL_BG_SEQ}\x1B[2K${this.buildMetricsLine()}${RESET}\x1B[?7h\x1B8` + // DEC restore cursor
|
|
281290
|
-
(this.writeDepth === 0 ?
|
|
281323
|
+
(this.writeDepth === 0 ? `${CURSOR_BLINK_BLOCK}\x1B[?25h` : "");
|
|
281291
281324
|
this.termWrite(buf);
|
|
281292
281325
|
if (pos.tabBarRow > 0)
|
|
281293
281326
|
this.renderAgentTabs();
|
|
@@ -310542,6 +310575,9 @@ Rationale: ${proposal.rationale}${provenanceNote}`;
|
|
|
310542
310575
|
}
|
|
310543
310576
|
statusBar.endContentWrite();
|
|
310544
310577
|
}
|
|
310578
|
+
statusBar.cancelMouseIdle();
|
|
310579
|
+
statusBar.enableMouseTracking();
|
|
310580
|
+
statusBar.refreshHeaderContent();
|
|
310545
310581
|
}
|
|
310546
310582
|
});
|
|
310547
310583
|
let commandCtxRef = null;
|
|
@@ -312961,7 +312997,11 @@ Summarize or analyze this transcription as appropriate.`;
|
|
|
312961
312997
|
}
|
|
312962
312998
|
const inputLineCount = fullInput.split("\n").length;
|
|
312963
312999
|
const displayText = isImage ? `[Image: ${cleanPath}]` : inputLineCount > 1 ? `[pasted ${inputLineCount} lines]` : fullInput;
|
|
312964
|
-
writeContent(() =>
|
|
313000
|
+
writeContent(() => {
|
|
313001
|
+
renderUserMessage(displayText);
|
|
313002
|
+
const preview = fullInput.length > 160 ? fullInput.slice(0, 160) + "\u2026" : fullInput;
|
|
313003
|
+
renderUserInterrupt(preview);
|
|
313004
|
+
});
|
|
312965
313005
|
_recallText = input;
|
|
312966
313006
|
if (_recallTimer)
|
|
312967
313007
|
clearTimeout(_recallTimer);
|
package/package.json
CHANGED
|
@@ -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
|
|
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 (
|
|
177
|
-
- Scheduling: cron jobs, reminders, agenda (
|
|
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
|
|
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 (
|
|
101
|
-
- Scheduling: cron jobs, reminders, agenda (
|
|
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.
|