open-agents-ai 0.187.231 → 0.187.232

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 +100 -36
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -10159,7 +10159,7 @@ process.on('SIGINT', () => process.emit('SIGTERM'));
10159
10159
  ];
10160
10160
  NexusTool = class {
10161
10161
  name = "nexus";
10162
- description = "P2P agent mesh networking. IMPORTANT: You MUST call action='connect' FIRST — it spawns the daemon. Nothing works without it. After connect: join_room, send_message, discover_peers, expose (share models), remote_infer (use remote models). Quick start: connect → join_room → send_message. Also: wallet_create, wallet_status, ledger_status, budget_set, spend, invoke_capability, store_content.";
10162
+ description = "P2P agent mesh networking — invoked ONLY via this tool call. ⚠ DO NOT run 'nexus' as a shell command. DO NOT run 'npm install open-agents-nexus' — it's ALREADY embedded in this binary. DO NOT use the shell tool to look for a 'nexus' binary — there isn't one. Use THIS tool interface. All nexus actions are dispatched through tool calls of the form: nexus({ action: 'connect', agent_name: '...' }). IMPORTANT: You MUST call action='connect' FIRST — it spawns the daemon. Nothing works without it. After connect: join_room, send_message, discover_peers, expose (share models), remote_infer (use remote models). Voice: voice_listen_start (ASR on room audio), voice_publish, voice_speak, jibberlink_send (encrypted data-over-audio). Quick start: connect → join_room → send_message. Also: wallet_create, wallet_status, ledger_status, budget_set, spend, invoke_capability, store_content.";
10163
10163
  parameters = {
10164
10164
  type: "object",
10165
10165
  properties: {
@@ -270909,7 +270909,13 @@ ${memoryLines.join("\n")}`
270909
270909
  // list) but the dedup detector was flagging it as a wasted call
270910
270910
  // and blocking the planning workflow. The agent uses todo_write
270911
270911
  // as its primary checkpoint mechanism so it MUST always execute.
270912
- "todo_write"
270912
+ "todo_write",
270913
+ // nexus is also a state tool — connect is idempotent but the
270914
+ // dedup warning was causing confused agents to bail out to
270915
+ // shell workarounds (npm install, find /bin, etc.) when they
270916
+ // saw "DUPLICATE CALL" after their first connect. Let the
270917
+ // tool see every call and return the cached state itself.
270918
+ "nexus"
270913
270919
  ].includes(tc.name);
270914
270920
  const cachedResult = recentToolResults.get(toolFingerprint);
270915
270921
  if (isReadLike && cachedResult !== void 0) {
@@ -326355,6 +326361,91 @@ ${incompleteList}${more}`
326355
326361
  }
326356
326362
  };
326357
326363
  }
326364
+ function buildSubAgentTools(repoRoot, config) {
326365
+ return [
326366
+ // File + search
326367
+ new FileReadTool(repoRoot),
326368
+ new FileWriteTool(repoRoot),
326369
+ new FileEditTool(repoRoot),
326370
+ new ShellTool(repoRoot),
326371
+ new GrepSearchTool(repoRoot),
326372
+ new GlobFindTool(repoRoot),
326373
+ new ListDirectoryTool(repoRoot),
326374
+ new FileExploreTool(repoRoot),
326375
+ new FilePatchTool(repoRoot),
326376
+ new BatchEditTool(repoRoot),
326377
+ new NotebookEditTool(),
326378
+ // Memory
326379
+ new MemoryReadTool(repoRoot),
326380
+ new MemoryWriteTool(repoRoot),
326381
+ new MemorySearchTool(repoRoot),
326382
+ // Checklist — the critical regression we're closing here
326383
+ new TodoWriteTool(),
326384
+ new TodoReadTool(),
326385
+ new WorkingNotesTool(),
326386
+ // Code understanding + navigation
326387
+ new CodebaseMapTool(repoRoot),
326388
+ new SemanticMapTool(repoRoot),
326389
+ new RepoMapTool(repoRoot),
326390
+ new ImportGraphTool(repoRoot),
326391
+ new DiagnosticTool(repoRoot),
326392
+ new GitInfoTool(repoRoot),
326393
+ new ExploreToolsTool(),
326394
+ new ProcessHealthTool(),
326395
+ // Web research
326396
+ new WebFetchTool(),
326397
+ new WebSearchTool(),
326398
+ new WebCrawlTool(repoRoot),
326399
+ new BrowserActionTool(),
326400
+ new PlaywrightBrowserTool(),
326401
+ // Documents + media reading
326402
+ new ImageReadTool(repoRoot),
326403
+ new OCRTool(repoRoot),
326404
+ new OcrImageAdvancedTool(repoRoot),
326405
+ new OcrPdfTool(repoRoot),
326406
+ new PdfToTextTool(repoRoot),
326407
+ new ScreenshotTool(repoRoot),
326408
+ new StructuredReadTool(repoRoot),
326409
+ new StructuredFileTool(repoRoot),
326410
+ // Audio
326411
+ new AudioPlaybackTool(),
326412
+ new AudioCaptureTool(),
326413
+ new AudioAnalyzeTool(),
326414
+ new AsrListenTool(),
326415
+ new TranscribeFileTool(repoRoot),
326416
+ new TranscribeUrlTool(repoRoot),
326417
+ new YouTubeDownloadTool(repoRoot),
326418
+ // Code execution (sandboxed)
326419
+ new CodeSandboxTool(repoRoot),
326420
+ new ReplTool(repoRoot),
326421
+ // AIWG / SDLC workflow
326422
+ new AiwgSetupTool(repoRoot),
326423
+ new AiwgHealthTool(repoRoot),
326424
+ new AiwgWorkflowTool(repoRoot),
326425
+ // Scheduler + agenda (time-based tooling)
326426
+ new SchedulerTool(repoRoot),
326427
+ new ReminderTool(repoRoot),
326428
+ new AgendaTool(repoRoot),
326429
+ // Vision + multimodal memory
326430
+ new VisionTool(repoRoot),
326431
+ new DesktopClickTool(repoRoot),
326432
+ new DesktopDescribeTool(repoRoot),
326433
+ new VisualMemoryTool(),
326434
+ new MultimodalMemoryTool(),
326435
+ new VideoUnderstandTool(repoRoot),
326436
+ new CameraCaptureTool(),
326437
+ new ImageGenerateTool(repoRoot, config.backendUrl),
326438
+ // Hardware sensors + radios (read-only scans)
326439
+ new GpsLocationTool(),
326440
+ new WifiControlTool(),
326441
+ new BluetoothScanTool(),
326442
+ new SdrScanTool(),
326443
+ new FlipperZeroTool(),
326444
+ new MeshtasticTool(),
326445
+ // Autoresearch (independent ML experiment loop)
326446
+ new AutoresearchTool(repoRoot)
326447
+ ];
326448
+ }
326358
326449
  function buildTools(repoRoot, config, contextWindowSize, modelTier) {
326359
326450
  const shellTool = new ShellTool(repoRoot);
326360
326451
  _shellToolRef = shellTool;
@@ -326576,19 +326667,7 @@ function createSubAgentTool(config, repoRoot, ctxWindowSize) {
326576
326667
  recursionDepth: parentDepth + 1,
326577
326668
  maxRecursionDepth: maxDepth
326578
326669
  });
326579
- const subTools = [
326580
- new FileReadTool(repoRoot),
326581
- new FileWriteTool(repoRoot),
326582
- new FileEditTool(repoRoot),
326583
- new ShellTool(repoRoot),
326584
- new GrepSearchTool(repoRoot),
326585
- new GlobFindTool(repoRoot),
326586
- new ListDirectoryTool(repoRoot),
326587
- new WebFetchTool(),
326588
- new WebSearchTool(),
326589
- new MemoryReadTool(repoRoot),
326590
- new MemoryWriteTool(repoRoot)
326591
- ];
326670
+ const subTools = buildSubAgentTools(repoRoot, config);
326592
326671
  subRunner.registerTools(subTools.map(adaptTool6));
326593
326672
  subRunner.registerTool(createTaskCompleteTool());
326594
326673
  if (background) {
@@ -328462,27 +328541,12 @@ Review its full output in the [${id}] tab or via sub_agent(action='output', id='
328462
328541
  // sub-agents discover their own context window
328463
328542
  modelTier: subTier
328464
328543
  });
328465
- const subToolInstances = [];
328466
- const nameSet = new Set(opts.toolNames);
328467
- const toolMap = {
328468
- file_read: () => new FileReadTool(repoRoot),
328469
- file_write: () => new FileWriteTool(repoRoot),
328470
- file_edit: () => new FileEditTool(repoRoot),
328471
- shell: () => new ShellTool(repoRoot),
328472
- grep: () => new GrepSearchTool(repoRoot),
328473
- glob: () => new GlobFindTool(repoRoot),
328474
- list_directory: () => new ListDirectoryTool(repoRoot),
328475
- web_fetch: () => new WebFetchTool(),
328476
- web_search: () => new WebSearchTool(),
328477
- memory_read: () => new MemoryReadTool(repoRoot),
328478
- memory_write: () => new MemoryWriteTool(repoRoot),
328479
- batch_edit: () => new BatchEditTool(repoRoot),
328480
- file_patch: () => new FilePatchTool(repoRoot),
328481
- git_info: () => new GitInfoTool(repoRoot)
328482
- };
328483
- for (const [name10, factory] of Object.entries(toolMap)) {
328484
- if (nameSet.has(name10)) subToolInstances.push(factory());
328485
- }
328544
+ const allSafe = buildSubAgentTools(repoRoot, config);
328545
+ const nameSet = new Set(opts.toolNames || []);
328546
+ const subToolInstances = nameSet.size > 0 ? allSafe.filter((t2) => nameSet.has(t2.name)) : allSafe.slice();
328547
+ const nameOf = (t2) => t2.name;
328548
+ if (!subToolInstances.some((t2) => nameOf(t2) === "todo_write")) subToolInstances.push(new TodoWriteTool());
328549
+ if (!subToolInstances.some((t2) => nameOf(t2) === "todo_read")) subToolInstances.push(new TodoReadTool());
328486
328550
  subRunner.registerTools(subToolInstances.map(adaptTool6));
328487
328551
  subRunner.registerTool(createTaskCompleteTool(subTier));
328488
328552
  const systemCtx = opts.systemPromptAddition ? `Working directory: ${repoRoot}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-agents-ai",
3
- "version": "0.187.231",
3
+ "version": "0.187.232",
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",