@botbotgo/agent-harness 0.0.261 → 0.0.263

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.
@@ -1 +1 @@
1
- export declare const AGENT_HARNESS_VERSION = "0.0.260";
1
+ export declare const AGENT_HARNESS_VERSION = "0.0.262";
@@ -1 +1 @@
1
- export const AGENT_HARNESS_VERSION = "0.0.260";
1
+ export const AGENT_HARNESS_VERSION = "0.0.262";
@@ -1,3 +1,4 @@
1
+ export declare function shouldSkipScanDirectory(entryName: string): boolean;
1
2
  export declare function ensureDir(dirPath: string): Promise<void>;
2
3
  export declare function readYamlOrJson(filePath: string): Promise<string>;
3
4
  export declare function writeJson(filePath: string, value: unknown): Promise<void>;
package/dist/utils/fs.js CHANGED
@@ -1,5 +1,8 @@
1
1
  import { mkdir, readFile, readdir, stat, writeFile } from "node:fs/promises";
2
2
  import path from "node:path";
3
+ export function shouldSkipScanDirectory(entryName) {
4
+ return entryName === "node_modules";
5
+ }
3
6
  export async function ensureDir(dirPath) {
4
7
  await mkdir(dirPath, { recursive: true });
5
8
  }
@@ -28,7 +31,7 @@ export async function listFilesRecursive(root, suffix) {
28
31
  for (const item of items) {
29
32
  const fullPath = path.join(root, item.name);
30
33
  if (item.isDirectory()) {
31
- if (item.name === "node_modules") {
34
+ if (shouldSkipScanDirectory(item.name)) {
32
35
  continue;
33
36
  }
34
37
  results.push(...(await listFilesRecursive(fullPath, suffix)));
@@ -13,6 +13,7 @@ import { collectAgentDiscoverySourceRefs, collectToolSourceRefs } from "./suppor
13
13
  import { getRoutingDefaultAgentId, getRuntimeResources, getRoutingRules, resolveRefId, } from "./support/workspace-ref-utils.js";
14
14
  import { hydrateAgentMcpTools, hydrateResourceAndExternalTools } from "./tool-hydration.js";
15
15
  import { traceStartupStage } from "../runtime/startup-tracing.js";
16
+ import { shouldSkipScanDirectory } from "../utils/fs.js";
16
17
  function collectParsedResources(refs) {
17
18
  const embeddings = new Map();
18
19
  const mcpServers = new Map();
@@ -151,7 +152,7 @@ async function collectSkillRoots(root) {
151
152
  return [root];
152
153
  }
153
154
  const nested = await Promise.all(entries
154
- .filter((entry) => entry.isDirectory())
155
+ .filter((entry) => entry.isDirectory() && !shouldSkipScanDirectory(entry.name))
155
156
  .map((entry) => collectSkillRoots(path.join(root, entry.name))));
156
157
  return nested.flat();
157
158
  }
@@ -5,7 +5,7 @@ import { fileURLToPath, pathToFileURL } from "node:url";
5
5
  import { resolveIsolatedResourceModulePath } from "../resource/isolation.js";
6
6
  import { isExternalSourceLocator, resolveResourcePackageRoot } from "../resource/sources.js";
7
7
  import { discoverToolModuleDefinitions, isSupportedToolModulePath, loadToolModuleDefinition } from "../tool-modules.js";
8
- import { fileExists } from "../utils/fs.js";
8
+ import { fileExists, shouldSkipScanDirectory } from "../utils/fs.js";
9
9
  import { readNamedYamlItems, readYamlItems, } from "./yaml-object-reader.js";
10
10
  export { normalizeYamlItem, readYamlItems } from "./yaml-object-reader.js";
11
11
  const CONVENTIONAL_OBJECT_DIRECTORIES = ["tools"];
@@ -645,7 +645,7 @@ async function readYamlItemsIgnoringNodeModules(root) {
645
645
  for (const entry of entries.sort((left, right) => left.name.localeCompare(right.name))) {
646
646
  const entryPath = path.join(current, entry.name);
647
647
  if (entry.isDirectory()) {
648
- if (entry.name === "node_modules") {
648
+ if (shouldSkipScanDirectory(entry.name)) {
649
649
  continue;
650
650
  }
651
651
  pending.push(entryPath);
@@ -796,6 +796,9 @@ export async function readToolModuleItems(root) {
796
796
  for (const entry of entries.sort((left, right) => left.name.localeCompare(right.name))) {
797
797
  const entryPath = path.join(current, entry.name);
798
798
  if (entry.isDirectory()) {
799
+ if (shouldSkipScanDirectory(entry.name)) {
800
+ continue;
801
+ }
799
802
  pending.push(entryPath);
800
803
  continue;
801
804
  }
@@ -49,6 +49,16 @@ function parseHitlPolicy(value) {
49
49
  allow: allow && allow.length > 0 ? allow : undefined,
50
50
  };
51
51
  }
52
+ function deriveParsedToolName(inferredType, rawName, implementationName) {
53
+ const explicitName = String(rawName ?? "").trim();
54
+ if (explicitName) {
55
+ return explicitName;
56
+ }
57
+ if (inferredType !== "function") {
58
+ return "";
59
+ }
60
+ return typeof implementationName === "string" ? implementationName.trim() : "";
61
+ }
52
62
  export function parseModelObject(object) {
53
63
  const value = object.value;
54
64
  assertNoInitBlock(value, "Model", object.id);
@@ -275,12 +285,13 @@ export function parseToolObject(object) {
275
285
  : backend
276
286
  ? "backend"
277
287
  : "function";
288
+ const implementationName = typeof value.implementationName === "string" ? value.implementationName : undefined;
278
289
  return {
279
290
  id: object.id,
280
291
  type: String(inferredType),
281
- name: String(value.name ?? "").trim(),
292
+ name: deriveParsedToolName(String(inferredType), value.name, implementationName),
282
293
  description: String(value.description ?? "").trim(),
283
- implementationName: typeof value.implementationName === "string" ? value.implementationName : undefined,
294
+ implementationName,
284
295
  config: mergeObjects(mergeObjects(asObject(value.config), providerTool
285
296
  ? {
286
297
  providerTool,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botbotgo/agent-harness",
3
- "version": "0.0.261",
3
+ "version": "0.0.263",
4
4
  "description": "Workspace runtime for multi-agent applications",
5
5
  "license": "MIT",
6
6
  "type": "module",