@easynet/agent-tool 1.0.98 → 1.0.99

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.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkHMC5G5FQ_cjs = require('./chunk-HMC5G5FQ.cjs');
4
- var chunkGNYBAJZZ_cjs = require('./chunk-GNYBAJZZ.cjs');
4
+ var chunkTJUWCIYZ_cjs = require('./chunk-TJUWCIYZ.cjs');
5
5
  var chunkVLV5F6HX_cjs = require('./chunk-VLV5F6HX.cjs');
6
6
  require('./chunk-AGLGFQUW.cjs');
7
7
  require('./chunk-JW4EMVTE.cjs');
@@ -92,7 +92,7 @@ var LangChainToolsHub = class {
92
92
  const intent = buildIntent(spec.name, enriched.inputSchema, normalizedArgs);
93
93
  const ctx = ctxFactory();
94
94
  const result = await runtime.invoke(intent, ctx);
95
- return chunkGNYBAJZZ_cjs.toToolObservationText(result, { includeFeedbackMarker: true });
95
+ return chunkTJUWCIYZ_cjs.toToolObservationText(result, { includeFeedbackMarker: true });
96
96
  }
97
97
  });
98
98
  }
@@ -207,7 +207,7 @@ function collectExtensionEmbeddedDefaults(exts) {
207
207
  ) ?? "";
208
208
  if (!configPath) continue;
209
209
  try {
210
- const toolConfigs = chunkGNYBAJZZ_cjs.loadToolConfig(configPath).tools?.self ?? {};
210
+ const toolConfigs = chunkTJUWCIYZ_cjs.loadToolConfig(configPath).tools?.self ?? {};
211
211
  if (Object.keys(toolConfigs).length === 0) continue;
212
212
  const manifest = chunkHMC5G5FQ_cjs.loadExtensionManifest(ext.packageRoot);
213
213
  const ownToolNames = /* @__PURE__ */ new Set();
@@ -228,9 +228,9 @@ function collectExtensionEmbeddedDefaults(exts) {
228
228
  return merged;
229
229
  }
230
230
  function loadMergedToolConfig(overridePath) {
231
- const baseConfig = chunkGNYBAJZZ_cjs.loadToolConfig(EMBEDDED_TOOL_CONFIG_PATH);
231
+ const baseConfig = chunkTJUWCIYZ_cjs.loadToolConfig(EMBEDDED_TOOL_CONFIG_PATH);
232
232
  if (!overridePath) return baseConfig;
233
- const overrideConfig = chunkGNYBAJZZ_cjs.loadToolConfig(overridePath);
233
+ const overrideConfig = chunkTJUWCIYZ_cjs.loadToolConfig(overridePath);
234
234
  return utils.deepMerge({}, baseConfig, overrideConfig);
235
235
  }
236
236
  function flattenSourceGroupedToolConfig(sources) {
@@ -242,7 +242,7 @@ function flattenSourceGroupedToolConfig(sources) {
242
242
  }
243
243
  continue;
244
244
  }
245
- const packagePrefix = descriptor.startsWith("npm:") ? chunkGNYBAJZZ_cjs.npmDescriptorToPackagePrefix(descriptor) : descriptor.startsWith("file:") ? chunkGNYBAJZZ_cjs.fileDescriptorToPackagePrefix(descriptor) : "";
245
+ const packagePrefix = descriptor.startsWith("npm:") ? chunkTJUWCIYZ_cjs.npmDescriptorToPackagePrefix(descriptor) : descriptor.startsWith("file:") ? chunkTJUWCIYZ_cjs.fileDescriptorToPackagePrefix(descriptor) : "";
246
246
  for (const [toolName, toolConfig] of Object.entries(toolMap)) {
247
247
  flat[packagePrefix ? `${packagePrefix}::${toolName}` : toolName] = toolConfig;
248
248
  }
@@ -250,14 +250,14 @@ function flattenSourceGroupedToolConfig(sources) {
250
250
  return flat;
251
251
  }
252
252
  function buildConfiguredToolSelections(toolConfig) {
253
- return chunkGNYBAJZZ_cjs.getToolSourceDescriptors(toolConfig);
253
+ return chunkTJUWCIYZ_cjs.getToolSourceDescriptors(toolConfig);
254
254
  }
255
255
  function runtimeOptionsFromConfig(opts, toolConfig, configPathForResolve, extensionEmbeddedDefaults) {
256
256
  const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [], enableSandboxValidation: false };
257
257
  {
258
258
  const updates = {};
259
259
  if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === "string") {
260
- updates.sandboxRoot = chunkGNYBAJZZ_cjs.resolveSandboxedPath(configPathForResolve, toolConfig.sandboxedPath);
260
+ updates.sandboxRoot = chunkTJUWCIYZ_cjs.resolveSandboxedPath(configPathForResolve, toolConfig.sandboxedPath);
261
261
  }
262
262
  if (typeof toolConfig.enableSandboxValidation === "boolean") {
263
263
  updates.enableSandboxValidation = toolConfig.enableSandboxValidation;
@@ -293,10 +293,10 @@ function buildRuntimeAndHub(options = {}) {
293
293
  const configPathForResolve = options.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;
294
294
  const mergedToolConfig = loadMergedToolConfig(options.configFilePath);
295
295
  const extensionEmbeddedDefaults = collectExtensionEmbeddedDefaults(
296
- chunkGNYBAJZZ_cjs.loadAllExtensionsFromToolYamlSync(configPathForResolve)
296
+ chunkTJUWCIYZ_cjs.loadAllExtensionsFromToolYamlSync(configPathForResolve)
297
297
  );
298
298
  const runtimeOpts = runtimeOptionsFromConfig(options, mergedToolConfig, configPathForResolve, extensionEmbeddedDefaults);
299
- const { runtime } = chunkGNYBAJZZ_cjs.createRuntimeFromConfigSync(runtimeOpts);
299
+ const { runtime } = chunkTJUWCIYZ_cjs.createRuntimeFromConfigSync(runtimeOpts);
300
300
  const hub = new LangChainToolsHub(runtime);
301
301
  return { runtime, hub, mergedToolConfig };
302
302
  }
@@ -306,9 +306,30 @@ function createLangChainAgentTools(options) {
306
306
  const names = buildConfiguredToolSelections(mergedToolConfig);
307
307
  if (names.length > 0) {
308
308
  const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
309
- const allBarePackages = names.every((n) => chunkGNYBAJZZ_cjs.isBarePackageDescriptor(String(n)));
309
+ const allBarePackages = names.every((n) => chunkTJUWCIYZ_cjs.isBarePackageDescriptor(String(n)));
310
310
  if (allBarePackages) return hub.getLangChainTools();
311
- return hub.getLangChainToolsForNames(chunkGNYBAJZZ_cjs.expandToolDescriptorsToRegistryNames(names, registryNames));
311
+ return hub.getLangChainToolsForNames(chunkTJUWCIYZ_cjs.expandToolDescriptorsToRegistryNames(names, registryNames));
312
+ }
313
+ return hub.getLangChainTools();
314
+ }
315
+ async function createLangChainAgentToolsAsync(options) {
316
+ const opts = typeof options === "string" ? { configFilePath: options } : options ?? {};
317
+ const configPathForResolve = opts.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;
318
+ const mergedToolConfig = loadMergedToolConfig(opts.configFilePath);
319
+ const runtimeOpts = runtimeOptionsFromConfig(
320
+ withDefaultToolServices(opts),
321
+ mergedToolConfig,
322
+ configPathForResolve,
323
+ {}
324
+ );
325
+ const { runtime } = await chunkTJUWCIYZ_cjs.createRuntimeFromConfig(runtimeOpts);
326
+ const hub = new LangChainToolsHub(runtime);
327
+ const names = buildConfiguredToolSelections(mergedToolConfig);
328
+ if (names.length > 0) {
329
+ const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
330
+ const allBarePackages = names.every((n) => chunkTJUWCIYZ_cjs.isBarePackageDescriptor(String(n)));
331
+ if (allBarePackages) return hub.getLangChainTools();
332
+ return hub.getLangChainToolsForNames(chunkTJUWCIYZ_cjs.expandToolDescriptorsToRegistryNames(names, registryNames));
312
333
  }
313
334
  return hub.getLangChainTools();
314
335
  }
@@ -319,7 +340,13 @@ function createAgentTools(options) {
319
340
  getDefaultAgentContext().set(agentCommon.AgentContextTokens.Tools, tools);
320
341
  return tools;
321
342
  }
343
+ async function createAgentToolsAsync(options) {
344
+ const tools = await createLangChainAgentToolsAsync(options);
345
+ getDefaultAgentContext().set(agentCommon.AgentContextTokens.Tools, tools);
346
+ return tools;
347
+ }
322
348
 
323
349
  exports.createAgentTools = createAgentTools;
350
+ exports.createAgentToolsAsync = createAgentToolsAsync;
324
351
  //# sourceMappingURL=index.cjs.map
325
352
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/adapters/LangChainToolsHub.ts","../src/agent-context.ts","../src/api/createAgentTools.ts","../src/api/register-tools.ts"],"names":["LANGCHAIN_KIND","stripNullishObjectFields","enrichSpecWithCanonicalSchema","DynamicStructuredTool","toToolObservationText","createAgentContext","AgentContextTokens","dirname","fileURLToPath","resolve","existsSync","loadToolConfig","loadExtensionManifest","deepMerge","npmDescriptorToPackagePrefix","fileDescriptorToPackagePrefix","getToolSourceDescriptors","resolveSandboxedPath","loadAllExtensionsFromToolYamlSync","createRuntimeFromConfigSync","isBarePackageDescriptor","expandToolDescriptorsToRegistryNames"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Exposes all tools from a ToolRegistry + PTCRuntime as LangChain tools\n * for local agent use (e.g. with createReactAgent, AgentExecutor).\n *\n * For most users, use createAgentTools() from @easynet/agent-tool, which loads from tool.yaml and returns\n * StructuredTool[]. Use LangChainToolsHub when you need a custom runtime or ctxFactory.\n *\n * Use: new LangChainToolsHub(runtime, ctxFactory).getLangChainTools()\n */\n\nimport { DynamicStructuredTool, type StructuredToolInterface } from \"@langchain/core/tools\";\nimport { stripNullishObjectFields } from \"@easynet/agent-common/utils\";\nimport type { PTCRuntime } from \"../../core/runtime/PTCRuntime.js\";\nimport type { ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport type { ExecContext } from \"../../core/types/ToolIntent.js\";\nimport type { ToolIntent } from \"../../core/types/ToolIntent.js\";\nimport { enrichSpecWithCanonicalSchema } from \"../../tools/util/canonicalCoreSchemas.js\";\nimport { LANGCHAIN_KIND } from \"../../tools/langchain/types.js\";\nimport { toToolObservationText } from \"../../core/runtime/toolObservation.js\";\n\n/**\n * If inputSchema wraps all params in a single \"args\" object (manifest convention),\n * returns that inner args schema; otherwise returns null.\n */\nfunction getArgsSchemaIfWrapped(inputSchema: object): Record<string, unknown> | null {\n const s = inputSchema as Record<string, unknown>;\n if (s?.type !== \"object\" || !s.properties || typeof s.properties !== \"object\") return null;\n const args = (s.properties as Record<string, unknown>).args;\n if (\n args != null &&\n typeof args === \"object\" &&\n (args as Record<string, unknown>).type === \"object\" &&\n (args as Record<string, unknown>).properties != null\n ) {\n return args as Record<string, unknown>;\n }\n return null;\n}\n\n/**\n * True when inputSchema wraps all params in a single \"args\" object (manifest convention).\n */\nfunction hasArgsWrapper(inputSchema: object): boolean {\n return getArgsSchemaIfWrapped(inputSchema) !== null;\n}\n\n/**\n * If inputSchema is { type: \"object\", properties: { args: { type: \"object\", properties: {...} } } },\n * return the inner args schema so the LLM can pass { path: \".\" } instead of { args: { path: \".\" } }.\n */\nfunction schemaForLangChain(inputSchema: object): Record<string, unknown> {\n const wrapped = getArgsSchemaIfWrapped(inputSchema);\n if (wrapped !== null) return wrapped;\n return inputSchema as Record<string, unknown>;\n}\n\nfunction buildIntent(\n toolName: string,\n inputSchema: object,\n args: Record<string, unknown>,\n): ToolIntent {\n return {\n tool: toolName,\n args: hasArgsWrapper(inputSchema) ? { args } : args,\n purpose: LANGCHAIN_KIND,\n };\n}\n\nfunction normalizeArgs(args: Record<string, unknown> | undefined): Record<string, unknown> {\n return stripNullishObjectFields(args ?? {}) as Record<string, unknown>;\n}\n\nexport type ExecContextFactory = () => ExecContext;\n\nconst DEFAULT_CTX_FACTORY: ExecContextFactory = () => ({\n requestId: `lc-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,\n taskId: `task-${Date.now()}`,\n permissions: [\n \"read:web\",\n \"read:fs\",\n \"write:fs\",\n \"read:db\",\n \"write:db\",\n \"network\",\n \"workflow\",\n \"danger:destructive\",\n ],\n});\n\n/**\n * Hub that wraps PTCRuntime and exposes every registered tool as a LangChain\n * StructuredTool (DynamicStructuredTool), so local agents (LangChain AgentExecutor,\n * createReactAgent, etc.) can use the same tools as MCP and OpenAPI.\n */\nexport class LangChainToolsHub {\n constructor(\n private readonly runtime: PTCRuntime,\n private readonly ctxFactory: ExecContextFactory = DEFAULT_CTX_FACTORY,\n ) {}\n\n /**\n * Returns all registered tools as LangChain StructuredTool[].\n * Each tool invokes the runtime through the full pipeline (policy, HITL, etc.).\n */\n getLangChainTools(): StructuredToolInterface[] {\n const registry = this.runtime.getRegistry();\n const specs = registry.snapshot();\n\n return specs.map((spec) => this.specToLangChainTool(spec));\n }\n\n /**\n * Returns LangChain tools for a subset of tools (by name or query).\n */\n getLangChainToolsForNames(toolNames: string[]): StructuredToolInterface[] {\n const registry = this.runtime.getRegistry();\n const set = new Set(toolNames);\n const specs = registry.snapshot().filter((s) => set.has(s.name));\n return specs.map((spec) => this.specToLangChainTool(spec));\n }\n\n private specToLangChainTool(spec: ToolSpec): DynamicStructuredTool {\n const runtime = this.runtime;\n const ctxFactory = this.ctxFactory;\n const enriched = enrichSpecWithCanonicalSchema(spec);\n\n const schema = schemaForLangChain(enriched.inputSchema);\n return new DynamicStructuredTool({\n name: spec.name,\n description: spec.description ?? `Tool: ${spec.name}`,\n schema,\n func: async (args: Record<string, unknown>): Promise<string> => {\n const normalizedArgs = normalizeArgs(args);\n const intent = buildIntent(spec.name, enriched.inputSchema, normalizedArgs);\n const ctx = ctxFactory();\n const result = await runtime.invoke(intent, ctx);\n return toToolObservationText(result, { includeFeedbackMarker: true });\n },\n });\n }\n}\n","import { createAgentContext, type AgentContext } from \"@easynet/agent-common\";\n\nconst DEFAULT_CONTEXT_KEY = \"__easynet_agent_default_context__\";\n\nfunction isAgentContext(value: unknown): value is AgentContext {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as AgentContext).get === \"function\" &&\n typeof (value as AgentContext).set === \"function\" &&\n typeof (value as AgentContext).has === \"function\"\n );\n}\n\nexport function getDefaultAgentContext(): AgentContext {\n const store = globalThis as Record<string, unknown>;\n const existing = store[DEFAULT_CONTEXT_KEY];\n if (isAgentContext(existing)) return existing;\n\n const created = createAgentContext();\n store[DEFAULT_CONTEXT_KEY] = created;\n return created;\n}\n","/**\n * Standalone tool creation functions. Each function:\n * - Uses the embedded config/tool.yaml as the default base.\n * - If a configFilePath is provided, merges it on top of the default.\n * - If no options are provided at all, behaves as if only the embedded default is used.\n *\n * Public module API uses createAgentTools() in register-tools.ts.\n * This file keeps internal builders for LangChain / MCP / OpenAPI outputs.\n */\n\nimport { loadToolConfig, resolveSandboxedPath, getToolSourceDescriptors } from \"../tools/util/toolConfig.js\";\nimport type { ToolYamlShape } from \"../tools/util/toolConfig.js\";\nimport { loadExtensionManifest } from \"./extension/registerFromManifest.js\";\nimport {\n expandToolDescriptorsToRegistryNames,\n isBarePackageDescriptor,\n fileDescriptorToPackagePrefix,\n npmDescriptorToPackagePrefix,\n} from \"../tools/util/toolDescriptor.js\";\nimport { deepMerge } from \"@easynet/agent-common/utils\";\nimport { createRuntimeFromConfigSync, loadAllExtensionsFromToolYamlSync } from \"./runtimeFromConfig.js\";\nimport type { CreateRuntimeOptions, LoadedExtension } from \"./runtimeFromConfig.js\";\nimport { LangChainToolsHub } from \"./adapters/LangChainToolsHub.js\";\nimport { createMCPServer, type MCPServerOptions, type McpServer } from \"./expose/mcpServer.js\";\nimport {\n createOpenAPIHttpServer,\n type OpenAPIExpressApp,\n type OpenAPIHttpServerOptions,\n} from \"./expose/openapiHttp.js\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname, resolve } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { getDefaultAgentContext } from \"../agent-context.js\";\nimport { AgentContextTokens } from \"@easynet/agent-common\";\n\nexport interface CreateAgentToolsOptions extends CreateRuntimeOptions {\n /** Path to an override tool.yaml; its values are merged on top of the embedded default config/tool.yaml */\n configFilePath?: string;\n}\n\ntype ChatModelLike = { invoke: (input: unknown) => Promise<unknown> };\ntype EmbeddingModelLike = {\n embedDocuments?: (texts: string[]) => Promise<number[][]>;\n embedQuery?: (text: string) => Promise<number[]>;\n};\n\nfunction renderModelText(output: unknown): string {\n if (typeof output === \"string\") return output;\n if (output && typeof output === \"object\") {\n const content = (output as { content?: unknown }).content;\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((part) => {\n if (typeof part === \"string\") return part;\n if (part && typeof part === \"object\" && typeof (part as { text?: unknown }).text === \"string\") {\n return String((part as { text: string }).text);\n }\n return \"\";\n })\n .join(\"\")\n .trim();\n }\n }\n return String(output ?? \"\");\n}\n\nfunction createDefaultModelHubFromAgentContext():\n | {\n chat: (input: { prompt: string; model?: string }) => Promise<{ text: string; model?: string }>;\n embed: (input: { input: string | string[]; model?: string }) => Promise<{ vectors: number[][]; model?: string }>;\n }\n | undefined {\n const ctx = getDefaultAgentContext();\n const chatModel = ctx.tryGet<ChatModelLike>(AgentContextTokens.ChatModel);\n const embedModel = ctx.tryGet<EmbeddingModelLike>(AgentContextTokens.EmbedModel);\n if (!chatModel && !embedModel) return undefined;\n\n return {\n async chat({ prompt, model }) {\n if (!chatModel) throw new Error(\"Tool modelHub.chat requested but AgentContext ChatModel is not registered\");\n const output = await chatModel.invoke(prompt);\n return {\n text: renderModelText(output),\n ...(model ? { model } : {}),\n };\n },\n async embed({ input, model }) {\n if (!embedModel) throw new Error(\"Tool modelHub.embed requested but AgentContext EmbedModel is not registered\");\n const vectors = Array.isArray(input)\n ? await embedModel.embedDocuments?.(input)\n : [await embedModel.embedQuery?.(input)];\n const normalized = Array.isArray(vectors)\n ? vectors.filter((item): item is number[] => Array.isArray(item))\n : [];\n return {\n vectors: normalized,\n ...(model ? { model } : {}),\n };\n },\n };\n}\n\nfunction withDefaultToolServices(opts: CreateAgentToolsOptions): CreateAgentToolsOptions {\n const existingCoreTools = opts.coreTools ?? {};\n const existingServices = existingCoreTools.services ?? {};\n if (\"modelHub\" in existingServices && existingServices.modelHub != null) {\n return opts;\n }\n\n const modelHub = createDefaultModelHubFromAgentContext();\n if (!modelHub) return opts;\n\n return {\n ...opts,\n coreTools: {\n ...existingCoreTools,\n services: {\n ...existingServices,\n modelHub,\n },\n },\n };\n}\n\n/** Merge host lists from multiple sources (e.g. tool.yaml + programmatic). Union, dedup, preserves order. */\nfunction mergeHostLists(a?: string[], b?: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const list of [a ?? [], b ?? []]) {\n for (const h of list) {\n if (!seen.has(h)) {\n seen.add(h);\n out.push(h);\n }\n }\n }\n return out;\n}\n\nfunction resolveEmbeddedToolConfigPath(): string {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n resolve(moduleDir, \"../../config/tool.yaml\"), // src/api -> config\n resolve(moduleDir, \"../config/tool.yaml\"), // dist/* -> config\n resolve(process.cwd(), \"config/tool.yaml\"), // fallback for local app runtime\n ];\n for (const candidate of candidates) {\n if (existsSync(candidate)) return candidate;\n }\n return candidates[0]!;\n}\n\nconst EMBEDDED_TOOL_CONFIG_PATH = resolveEmbeddedToolConfigPath();\n\n/**\n * For each loaded extension, load its embedded config/tool.yaml (layer 2) and collect\n * the per-tool config into a flat map. Later entries in the list win over earlier ones.\n *\n * Security constraint: each extension's embedded config may only set defaults for tools\n * that belong to that extension (verified against its own manifest). Keys that reference\n * tools from other extensions or global config fields are silently ignored.\n */\nfunction collectExtensionEmbeddedDefaults(\n exts: LoadedExtension[],\n): Record<string, Record<string, unknown>> {\n const merged: Record<string, Record<string, unknown>> = {};\n for (const ext of exts) {\n // Prefer dist/config/tool.yaml (published package); fall back to config/tool.yaml (local dev).\n const configPath =\n [resolve(ext.packageRoot, \"dist/config/tool.yaml\"), resolve(ext.packageRoot, \"config/tool.yaml\")].find(\n existsSync,\n ) ?? \"\";\n if (!configPath) continue;\n try {\n const toolConfigs = loadToolConfig(configPath).tools?.self ?? {};\n if (Object.keys(toolConfigs).length === 0) continue;\n\n // Build the set of short names this extension owns from its manifest.\n // Include both the explicit name field and the dot-path derived from sourcePath\n // (e.g. \"listDir\" and \"fs.listDir\" for src/fs/listDir) so that config keys in\n // either format are accepted.\n const manifest = loadExtensionManifest(ext.packageRoot);\n const ownToolNames = new Set<string>();\n for (const e of manifest.entries) {\n if (e.name) ownToolNames.add(e.name);\n if (e.sourcePath) {\n ownToolNames.add(e.sourcePath.replace(/^src\\//, \"\").replace(/\\//g, \".\"));\n }\n }\n\n for (const [k, v] of Object.entries(toolConfigs)) {\n // Only allow keys that are short names of tools this extension registers.\n if (ownToolNames.has(k)) {\n merged[k] = v;\n }\n }\n } catch {\n // skip malformed extension config or missing manifest\n }\n }\n return merged;\n}\n\nfunction loadMergedToolConfig(overridePath?: string): ToolYamlShape {\n const baseConfig = loadToolConfig(EMBEDDED_TOOL_CONFIG_PATH);\n if (!overridePath) return baseConfig;\n const overrideConfig = loadToolConfig(overridePath);\n return deepMerge({} as ToolYamlShape, baseConfig, overrideConfig);\n}\n\nfunction flattenSourceGroupedToolConfig(\n sources: ToolYamlShape[\"tools\"] | undefined,\n): Record<string, Record<string, unknown>> {\n const flat: Record<string, Record<string, unknown>> = {};\n for (const [descriptor, toolMap] of Object.entries(sources ?? {})) {\n if (descriptor === \"self\") {\n for (const [toolName, toolConfig] of Object.entries(toolMap)) {\n flat[toolName] = toolConfig;\n }\n continue;\n }\n const packagePrefix = descriptor.startsWith(\"npm:\")\n ? npmDescriptorToPackagePrefix(descriptor)\n : descriptor.startsWith(\"file:\")\n ? fileDescriptorToPackagePrefix(descriptor)\n : \"\";\n for (const [toolName, toolConfig] of Object.entries(toolMap)) {\n flat[packagePrefix ? `${packagePrefix}::${toolName}` : toolName] = toolConfig;\n }\n }\n return flat;\n}\n\nfunction buildConfiguredToolSelections(toolConfig: ToolYamlShape): string[] {\n return getToolSourceDescriptors(toolConfig);\n}\n\nfunction runtimeOptionsFromConfig(\n opts: CreateAgentToolsOptions,\n toolConfig: ToolYamlShape,\n configPathForResolve: string,\n extensionEmbeddedDefaults: Record<string, Record<string, unknown>>,\n): CreateRuntimeOptions {\n const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [], enableSandboxValidation: false };\n {\n const updates: {\n sandboxRoot?: string;\n enableSandboxValidation?: boolean;\n allowedHosts?: string[];\n blockedHosts?: string[];\n blockedCidrs?: string[];\n toolOverrides?: Record<string, Record<string, unknown>>;\n packageDefaults?: Record<string, Record<string, unknown>>;\n } = {};\n if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === \"string\") {\n updates.sandboxRoot = resolveSandboxedPath(configPathForResolve, toolConfig.sandboxedPath);\n }\n if (typeof toolConfig.enableSandboxValidation === \"boolean\") {\n updates.enableSandboxValidation = toolConfig.enableSandboxValidation;\n } else if (coreTools.enableSandboxValidation == null) {\n updates.enableSandboxValidation = false;\n }\n // Smart merge: union of allowedHosts and blockedHosts from yaml + programmatic (both lists always applied)\n updates.allowedHosts = mergeHostLists(coreTools.allowedHosts, toolConfig.allowedHosts);\n updates.blockedHosts = mergeHostLists(coreTools.blockedHosts, toolConfig.blockedHosts);\n if (Array.isArray(toolConfig.blockedCidrs) && toolConfig.blockedCidrs.length > 0) {\n updates.blockedCidrs = toolConfig.blockedCidrs;\n } else if (coreTools.blockedCidrs?.length) {\n updates.blockedCidrs = coreTools.blockedCidrs;\n }\n let hasToolDefaults = false;\n // Priority (low → high): extension embedded (layer 2) < programmatic coreTools < app tool config\n const flatOverrides: Record<string, Record<string, unknown>> = {\n ...extensionEmbeddedDefaults,\n ...coreTools.toolOverrides,\n };\n if (Object.keys(extensionEmbeddedDefaults).length > 0) hasToolDefaults = true;\n const configuredToolOverrides = flattenSourceGroupedToolConfig(toolConfig.tools);\n if (Object.keys(configuredToolOverrides).length > 0) {\n Object.assign(flatOverrides, configuredToolOverrides);\n hasToolDefaults = true;\n }\n if (hasToolDefaults) {\n updates.toolOverrides = flatOverrides;\n }\n if (Object.keys(updates).length > 0) return { ...opts, coreTools: { ...coreTools, ...updates } };\n }\n return { ...opts, coreTools };\n}\n\n/**\n * Build a ready-to-use runtime + hub from options.\n * - No options → embedded default config/tool.yaml only.\n * - options.configFilePath → override merged on top of embedded default.\n */\nfunction buildRuntimeAndHub(options: CreateAgentToolsOptions = {}): {\n runtime: ReturnType<typeof createRuntimeFromConfigSync>[\"runtime\"];\n hub: LangChainToolsHub;\n mergedToolConfig: ToolYamlShape;\n} {\n const configPathForResolve = options.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;\n const mergedToolConfig = loadMergedToolConfig(options.configFilePath);\n // Collect layer-2 defaults from each extension's embedded config/tool.yaml.\n // loadAllExtensionsFromToolYamlSync is cheap here (require() is cached by Node.js).\n const extensionEmbeddedDefaults = collectExtensionEmbeddedDefaults(\n loadAllExtensionsFromToolYamlSync(configPathForResolve),\n );\n const runtimeOpts = runtimeOptionsFromConfig(options, mergedToolConfig, configPathForResolve, extensionEmbeddedDefaults);\n const { runtime } = createRuntimeFromConfigSync(runtimeOpts);\n const hub = new LangChainToolsHub(runtime);\n return { runtime, hub, mergedToolConfig };\n}\n\n/**\n * Internal: create LangChain tools from config/runtime.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - All other CreateAgentToolsOptions (coreTools, etc.) are applied as programmatic overrides.\n *\n * @example\n * Internal helper consumed by createAgentTools().\n */\nexport function createLangChainAgentTools(\n options?: CreateAgentToolsOptions | string,\n): StructuredToolInterface[] {\n const opts: CreateAgentToolsOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, hub, mergedToolConfig } = buildRuntimeAndHub(withDefaultToolServices(opts));\n\n const names = buildConfiguredToolSelections(mergedToolConfig);\n if (names.length > 0) {\n const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);\n const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));\n if (allBarePackages) return hub.getLangChainTools();\n return hub.getLangChainToolsForNames(expandToolDescriptorsToRegistryNames(names, registryNames));\n }\n return hub.getLangChainTools();\n}\n\n/**\n * Internal: create an MCP server from tool config.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - options.mcp → passed to the MCP server (name, version, execContextFactory).\n *\n * @example\n * Internal helper consumed by createAgentTools() expose flows.\n */\nexport async function createMcpServer(\n options?: (CreateAgentToolsOptions & MCPServerOptions) | string,\n): Promise<McpServer> {\n const opts: CreateAgentToolsOptions & MCPServerOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, mergedToolConfig } = buildRuntimeAndHub(opts);\n const serverOpts: MCPServerOptions = {\n name: opts.name ?? mergedToolConfig.mcp?.name,\n version: opts.version ?? mergedToolConfig.mcp?.version,\n execContextFactory: opts.execContextFactory,\n };\n const { server } = await createMCPServer(runtime, serverOpts);\n return server;\n}\n\n/**\n * Internal: create an OpenAPI / Swagger HTTP server from tool config.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - options.port, host, basePath → passed to the HTTP server; tool.yaml openapi: section provides defaults.\n *\n * @example\n * Internal helper consumed by createAgentTools() expose flows.\n */\nexport async function createOpenAPIServer(\n options?: (CreateAgentToolsOptions & OpenAPIHttpServerOptions) | string,\n): Promise<OpenAPIExpressApp> {\n const opts: CreateAgentToolsOptions & OpenAPIHttpServerOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, mergedToolConfig } = buildRuntimeAndHub(opts);\n const serverOpts: OpenAPIHttpServerOptions = {\n host: opts.host ?? mergedToolConfig.openapi?.host,\n port: opts.port ?? mergedToolConfig.openapi?.port,\n basePath: opts.basePath ?? mergedToolConfig.openapi?.basePath,\n execContextFactory: opts.execContextFactory,\n };\n return createOpenAPIHttpServer(runtime, serverOpts);\n}\n","import { AgentContextTokens } from \"@easynet/agent-common\";\nimport { createLangChainAgentTools, type CreateAgentToolsOptions } from \"./createAgentTools.js\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\nimport { getDefaultAgentContext } from \"../agent-context.js\";\n\nexport interface CreateAgentToolsModuleOptions extends CreateAgentToolsOptions {}\n\n/**\n * Initialize LangChain agent tools and register them into the process-level singleton AgentContext.\n *\n * Sets:\n * - AgentContextTokens.Tools → StructuredToolInterface[]\n *\n * @example\n * ```ts\n * createAgentTools({ configFilePath: \"config/tool.yaml\" });\n * ```\n */\nexport function createAgentTools(options?: CreateAgentToolsModuleOptions): StructuredToolInterface[] {\n const tools = createLangChainAgentTools(options);\n getDefaultAgentContext().set(AgentContextTokens.Tools, tools);\n return tools;\n}\n"]}
1
+ {"version":3,"sources":["../src/api/adapters/LangChainToolsHub.ts","../src/agent-context.ts","../src/api/createAgentTools.ts","../src/api/register-tools.ts"],"names":["LANGCHAIN_KIND","stripNullishObjectFields","enrichSpecWithCanonicalSchema","DynamicStructuredTool","toToolObservationText","createAgentContext","AgentContextTokens","dirname","fileURLToPath","resolve","existsSync","loadToolConfig","loadExtensionManifest","deepMerge","npmDescriptorToPackagePrefix","fileDescriptorToPackagePrefix","getToolSourceDescriptors","resolveSandboxedPath","loadAllExtensionsFromToolYamlSync","createRuntimeFromConfigSync","isBarePackageDescriptor","expandToolDescriptorsToRegistryNames","createRuntimeFromConfig"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Exposes all tools from a ToolRegistry + PTCRuntime as LangChain tools\n * for local agent use (e.g. with createReactAgent, AgentExecutor).\n *\n * For most users, use createAgentTools() from @easynet/agent-tool, which loads from tool.yaml and returns\n * StructuredTool[]. Use LangChainToolsHub when you need a custom runtime or ctxFactory.\n *\n * Use: new LangChainToolsHub(runtime, ctxFactory).getLangChainTools()\n */\n\nimport { DynamicStructuredTool, type StructuredToolInterface } from \"@langchain/core/tools\";\nimport { stripNullishObjectFields } from \"@easynet/agent-common/utils\";\nimport type { PTCRuntime } from \"../../core/runtime/PTCRuntime.js\";\nimport type { ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport type { ExecContext } from \"../../core/types/ToolIntent.js\";\nimport type { ToolIntent } from \"../../core/types/ToolIntent.js\";\nimport { enrichSpecWithCanonicalSchema } from \"../../tools/util/canonicalCoreSchemas.js\";\nimport { LANGCHAIN_KIND } from \"../../tools/langchain/types.js\";\nimport { toToolObservationText } from \"../../core/runtime/toolObservation.js\";\n\n/**\n * If inputSchema wraps all params in a single \"args\" object (manifest convention),\n * returns that inner args schema; otherwise returns null.\n */\nfunction getArgsSchemaIfWrapped(inputSchema: object): Record<string, unknown> | null {\n const s = inputSchema as Record<string, unknown>;\n if (s?.type !== \"object\" || !s.properties || typeof s.properties !== \"object\") return null;\n const args = (s.properties as Record<string, unknown>).args;\n if (\n args != null &&\n typeof args === \"object\" &&\n (args as Record<string, unknown>).type === \"object\" &&\n (args as Record<string, unknown>).properties != null\n ) {\n return args as Record<string, unknown>;\n }\n return null;\n}\n\n/**\n * True when inputSchema wraps all params in a single \"args\" object (manifest convention).\n */\nfunction hasArgsWrapper(inputSchema: object): boolean {\n return getArgsSchemaIfWrapped(inputSchema) !== null;\n}\n\n/**\n * If inputSchema is { type: \"object\", properties: { args: { type: \"object\", properties: {...} } } },\n * return the inner args schema so the LLM can pass { path: \".\" } instead of { args: { path: \".\" } }.\n */\nfunction schemaForLangChain(inputSchema: object): Record<string, unknown> {\n const wrapped = getArgsSchemaIfWrapped(inputSchema);\n if (wrapped !== null) return wrapped;\n return inputSchema as Record<string, unknown>;\n}\n\nfunction buildIntent(\n toolName: string,\n inputSchema: object,\n args: Record<string, unknown>,\n): ToolIntent {\n return {\n tool: toolName,\n args: hasArgsWrapper(inputSchema) ? { args } : args,\n purpose: LANGCHAIN_KIND,\n };\n}\n\nfunction normalizeArgs(args: Record<string, unknown> | undefined): Record<string, unknown> {\n return stripNullishObjectFields(args ?? {}) as Record<string, unknown>;\n}\n\nexport type ExecContextFactory = () => ExecContext;\n\nconst DEFAULT_CTX_FACTORY: ExecContextFactory = () => ({\n requestId: `lc-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,\n taskId: `task-${Date.now()}`,\n permissions: [\n \"read:web\",\n \"read:fs\",\n \"write:fs\",\n \"read:db\",\n \"write:db\",\n \"network\",\n \"workflow\",\n \"danger:destructive\",\n ],\n});\n\n/**\n * Hub that wraps PTCRuntime and exposes every registered tool as a LangChain\n * StructuredTool (DynamicStructuredTool), so local agents (LangChain AgentExecutor,\n * createReactAgent, etc.) can use the same tools as MCP and OpenAPI.\n */\nexport class LangChainToolsHub {\n constructor(\n private readonly runtime: PTCRuntime,\n private readonly ctxFactory: ExecContextFactory = DEFAULT_CTX_FACTORY,\n ) {}\n\n /**\n * Returns all registered tools as LangChain StructuredTool[].\n * Each tool invokes the runtime through the full pipeline (policy, HITL, etc.).\n */\n getLangChainTools(): StructuredToolInterface[] {\n const registry = this.runtime.getRegistry();\n const specs = registry.snapshot();\n\n return specs.map((spec) => this.specToLangChainTool(spec));\n }\n\n /**\n * Returns LangChain tools for a subset of tools (by name or query).\n */\n getLangChainToolsForNames(toolNames: string[]): StructuredToolInterface[] {\n const registry = this.runtime.getRegistry();\n const set = new Set(toolNames);\n const specs = registry.snapshot().filter((s) => set.has(s.name));\n return specs.map((spec) => this.specToLangChainTool(spec));\n }\n\n private specToLangChainTool(spec: ToolSpec): DynamicStructuredTool {\n const runtime = this.runtime;\n const ctxFactory = this.ctxFactory;\n const enriched = enrichSpecWithCanonicalSchema(spec);\n\n const schema = schemaForLangChain(enriched.inputSchema);\n return new DynamicStructuredTool({\n name: spec.name,\n description: spec.description ?? `Tool: ${spec.name}`,\n schema,\n func: async (args: Record<string, unknown>): Promise<string> => {\n const normalizedArgs = normalizeArgs(args);\n const intent = buildIntent(spec.name, enriched.inputSchema, normalizedArgs);\n const ctx = ctxFactory();\n const result = await runtime.invoke(intent, ctx);\n return toToolObservationText(result, { includeFeedbackMarker: true });\n },\n });\n }\n}\n","import { createAgentContext, type AgentContext } from \"@easynet/agent-common\";\n\nconst DEFAULT_CONTEXT_KEY = \"__easynet_agent_default_context__\";\n\nfunction isAgentContext(value: unknown): value is AgentContext {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as AgentContext).get === \"function\" &&\n typeof (value as AgentContext).set === \"function\" &&\n typeof (value as AgentContext).has === \"function\"\n );\n}\n\nexport function getDefaultAgentContext(): AgentContext {\n const store = globalThis as Record<string, unknown>;\n const existing = store[DEFAULT_CONTEXT_KEY];\n if (isAgentContext(existing)) return existing;\n\n const created = createAgentContext();\n store[DEFAULT_CONTEXT_KEY] = created;\n return created;\n}\n","/**\n * Standalone tool creation functions. Each function:\n * - Uses the embedded config/tool.yaml as the default base.\n * - If a configFilePath is provided, merges it on top of the default.\n * - If no options are provided at all, behaves as if only the embedded default is used.\n *\n * Public module API uses createAgentTools() in register-tools.ts.\n * This file keeps internal builders for LangChain / MCP / OpenAPI outputs.\n */\n\nimport { loadToolConfig, resolveSandboxedPath, getToolSourceDescriptors } from \"../tools/util/toolConfig.js\";\nimport type { ToolYamlShape } from \"../tools/util/toolConfig.js\";\nimport { loadExtensionManifest } from \"./extension/registerFromManifest.js\";\nimport {\n expandToolDescriptorsToRegistryNames,\n isBarePackageDescriptor,\n fileDescriptorToPackagePrefix,\n npmDescriptorToPackagePrefix,\n} from \"../tools/util/toolDescriptor.js\";\nimport { deepMerge } from \"@easynet/agent-common/utils\";\nimport { createRuntimeFromConfigSync, loadAllExtensionsFromToolYamlSync } from \"./runtimeFromConfig.js\";\nimport { createRuntimeFromConfig } from \"./runtimeFromConfig.js\";\nimport type { CreateRuntimeOptions, LoadedExtension } from \"./runtimeFromConfig.js\";\nimport { LangChainToolsHub } from \"./adapters/LangChainToolsHub.js\";\nimport { createMCPServer, type MCPServerOptions, type McpServer } from \"./expose/mcpServer.js\";\nimport {\n createOpenAPIHttpServer,\n type OpenAPIExpressApp,\n type OpenAPIHttpServerOptions,\n} from \"./expose/openapiHttp.js\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname, resolve } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { getDefaultAgentContext } from \"../agent-context.js\";\nimport { AgentContextTokens } from \"@easynet/agent-common\";\n\nexport interface CreateAgentToolsOptions extends CreateRuntimeOptions {\n /** Path to an override tool.yaml; its values are merged on top of the embedded default config/tool.yaml */\n configFilePath?: string;\n}\n\ntype ChatModelLike = { invoke: (input: unknown) => Promise<unknown> };\ntype EmbeddingModelLike = {\n embedDocuments?: (texts: string[]) => Promise<number[][]>;\n embedQuery?: (text: string) => Promise<number[]>;\n};\n\nfunction renderModelText(output: unknown): string {\n if (typeof output === \"string\") return output;\n if (output && typeof output === \"object\") {\n const content = (output as { content?: unknown }).content;\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((part) => {\n if (typeof part === \"string\") return part;\n if (part && typeof part === \"object\" && typeof (part as { text?: unknown }).text === \"string\") {\n return String((part as { text: string }).text);\n }\n return \"\";\n })\n .join(\"\")\n .trim();\n }\n }\n return String(output ?? \"\");\n}\n\nfunction createDefaultModelHubFromAgentContext():\n | {\n chat: (input: { prompt: string; model?: string }) => Promise<{ text: string; model?: string }>;\n embed: (input: { input: string | string[]; model?: string }) => Promise<{ vectors: number[][]; model?: string }>;\n }\n | undefined {\n const ctx = getDefaultAgentContext();\n const chatModel = ctx.tryGet<ChatModelLike>(AgentContextTokens.ChatModel);\n const embedModel = ctx.tryGet<EmbeddingModelLike>(AgentContextTokens.EmbedModel);\n if (!chatModel && !embedModel) return undefined;\n\n return {\n async chat({ prompt, model }) {\n if (!chatModel) throw new Error(\"Tool modelHub.chat requested but AgentContext ChatModel is not registered\");\n const output = await chatModel.invoke(prompt);\n return {\n text: renderModelText(output),\n ...(model ? { model } : {}),\n };\n },\n async embed({ input, model }) {\n if (!embedModel) throw new Error(\"Tool modelHub.embed requested but AgentContext EmbedModel is not registered\");\n const vectors = Array.isArray(input)\n ? await embedModel.embedDocuments?.(input)\n : [await embedModel.embedQuery?.(input)];\n const normalized = Array.isArray(vectors)\n ? vectors.filter((item): item is number[] => Array.isArray(item))\n : [];\n return {\n vectors: normalized,\n ...(model ? { model } : {}),\n };\n },\n };\n}\n\nfunction withDefaultToolServices(opts: CreateAgentToolsOptions): CreateAgentToolsOptions {\n const existingCoreTools = opts.coreTools ?? {};\n const existingServices = existingCoreTools.services ?? {};\n if (\"modelHub\" in existingServices && existingServices.modelHub != null) {\n return opts;\n }\n\n const modelHub = createDefaultModelHubFromAgentContext();\n if (!modelHub) return opts;\n\n return {\n ...opts,\n coreTools: {\n ...existingCoreTools,\n services: {\n ...existingServices,\n modelHub,\n },\n },\n };\n}\n\n/** Merge host lists from multiple sources (e.g. tool.yaml + programmatic). Union, dedup, preserves order. */\nfunction mergeHostLists(a?: string[], b?: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const list of [a ?? [], b ?? []]) {\n for (const h of list) {\n if (!seen.has(h)) {\n seen.add(h);\n out.push(h);\n }\n }\n }\n return out;\n}\n\nfunction resolveEmbeddedToolConfigPath(): string {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n resolve(moduleDir, \"../../config/tool.yaml\"), // src/api -> config\n resolve(moduleDir, \"../config/tool.yaml\"), // dist/* -> config\n resolve(process.cwd(), \"config/tool.yaml\"), // fallback for local app runtime\n ];\n for (const candidate of candidates) {\n if (existsSync(candidate)) return candidate;\n }\n return candidates[0]!;\n}\n\nconst EMBEDDED_TOOL_CONFIG_PATH = resolveEmbeddedToolConfigPath();\n\n/**\n * For each loaded extension, load its embedded config/tool.yaml (layer 2) and collect\n * the per-tool config into a flat map. Later entries in the list win over earlier ones.\n *\n * Security constraint: each extension's embedded config may only set defaults for tools\n * that belong to that extension (verified against its own manifest). Keys that reference\n * tools from other extensions or global config fields are silently ignored.\n */\nfunction collectExtensionEmbeddedDefaults(\n exts: LoadedExtension[],\n): Record<string, Record<string, unknown>> {\n const merged: Record<string, Record<string, unknown>> = {};\n for (const ext of exts) {\n // Prefer dist/config/tool.yaml (published package); fall back to config/tool.yaml (local dev).\n const configPath =\n [resolve(ext.packageRoot, \"dist/config/tool.yaml\"), resolve(ext.packageRoot, \"config/tool.yaml\")].find(\n existsSync,\n ) ?? \"\";\n if (!configPath) continue;\n try {\n const toolConfigs = loadToolConfig(configPath).tools?.self ?? {};\n if (Object.keys(toolConfigs).length === 0) continue;\n\n // Build the set of short names this extension owns from its manifest.\n // Include both the explicit name field and the dot-path derived from sourcePath\n // (e.g. \"listDir\" and \"fs.listDir\" for src/fs/listDir) so that config keys in\n // either format are accepted.\n const manifest = loadExtensionManifest(ext.packageRoot);\n const ownToolNames = new Set<string>();\n for (const e of manifest.entries) {\n if (e.name) ownToolNames.add(e.name);\n if (e.sourcePath) {\n ownToolNames.add(e.sourcePath.replace(/^src\\//, \"\").replace(/\\//g, \".\"));\n }\n }\n\n for (const [k, v] of Object.entries(toolConfigs)) {\n // Only allow keys that are short names of tools this extension registers.\n if (ownToolNames.has(k)) {\n merged[k] = v;\n }\n }\n } catch {\n // skip malformed extension config or missing manifest\n }\n }\n return merged;\n}\n\nfunction loadMergedToolConfig(overridePath?: string): ToolYamlShape {\n const baseConfig = loadToolConfig(EMBEDDED_TOOL_CONFIG_PATH);\n if (!overridePath) return baseConfig;\n const overrideConfig = loadToolConfig(overridePath);\n return deepMerge({} as ToolYamlShape, baseConfig, overrideConfig);\n}\n\nfunction flattenSourceGroupedToolConfig(\n sources: ToolYamlShape[\"tools\"] | undefined,\n): Record<string, Record<string, unknown>> {\n const flat: Record<string, Record<string, unknown>> = {};\n for (const [descriptor, toolMap] of Object.entries(sources ?? {})) {\n if (descriptor === \"self\") {\n for (const [toolName, toolConfig] of Object.entries(toolMap)) {\n flat[toolName] = toolConfig;\n }\n continue;\n }\n const packagePrefix = descriptor.startsWith(\"npm:\")\n ? npmDescriptorToPackagePrefix(descriptor)\n : descriptor.startsWith(\"file:\")\n ? fileDescriptorToPackagePrefix(descriptor)\n : \"\";\n for (const [toolName, toolConfig] of Object.entries(toolMap)) {\n flat[packagePrefix ? `${packagePrefix}::${toolName}` : toolName] = toolConfig;\n }\n }\n return flat;\n}\n\nfunction buildConfiguredToolSelections(toolConfig: ToolYamlShape): string[] {\n return getToolSourceDescriptors(toolConfig);\n}\n\nfunction runtimeOptionsFromConfig(\n opts: CreateAgentToolsOptions,\n toolConfig: ToolYamlShape,\n configPathForResolve: string,\n extensionEmbeddedDefaults: Record<string, Record<string, unknown>>,\n): CreateRuntimeOptions {\n const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [], enableSandboxValidation: false };\n {\n const updates: {\n sandboxRoot?: string;\n enableSandboxValidation?: boolean;\n allowedHosts?: string[];\n blockedHosts?: string[];\n blockedCidrs?: string[];\n toolOverrides?: Record<string, Record<string, unknown>>;\n packageDefaults?: Record<string, Record<string, unknown>>;\n } = {};\n if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === \"string\") {\n updates.sandboxRoot = resolveSandboxedPath(configPathForResolve, toolConfig.sandboxedPath);\n }\n if (typeof toolConfig.enableSandboxValidation === \"boolean\") {\n updates.enableSandboxValidation = toolConfig.enableSandboxValidation;\n } else if (coreTools.enableSandboxValidation == null) {\n updates.enableSandboxValidation = false;\n }\n // Smart merge: union of allowedHosts and blockedHosts from yaml + programmatic (both lists always applied)\n updates.allowedHosts = mergeHostLists(coreTools.allowedHosts, toolConfig.allowedHosts);\n updates.blockedHosts = mergeHostLists(coreTools.blockedHosts, toolConfig.blockedHosts);\n if (Array.isArray(toolConfig.blockedCidrs) && toolConfig.blockedCidrs.length > 0) {\n updates.blockedCidrs = toolConfig.blockedCidrs;\n } else if (coreTools.blockedCidrs?.length) {\n updates.blockedCidrs = coreTools.blockedCidrs;\n }\n let hasToolDefaults = false;\n // Priority (low → high): extension embedded (layer 2) < programmatic coreTools < app tool config\n const flatOverrides: Record<string, Record<string, unknown>> = {\n ...extensionEmbeddedDefaults,\n ...coreTools.toolOverrides,\n };\n if (Object.keys(extensionEmbeddedDefaults).length > 0) hasToolDefaults = true;\n const configuredToolOverrides = flattenSourceGroupedToolConfig(toolConfig.tools);\n if (Object.keys(configuredToolOverrides).length > 0) {\n Object.assign(flatOverrides, configuredToolOverrides);\n hasToolDefaults = true;\n }\n if (hasToolDefaults) {\n updates.toolOverrides = flatOverrides;\n }\n if (Object.keys(updates).length > 0) return { ...opts, coreTools: { ...coreTools, ...updates } };\n }\n return { ...opts, coreTools };\n}\n\n/**\n * Build a ready-to-use runtime + hub from options.\n * - No options → embedded default config/tool.yaml only.\n * - options.configFilePath → override merged on top of embedded default.\n */\nfunction buildRuntimeAndHub(options: CreateAgentToolsOptions = {}): {\n runtime: ReturnType<typeof createRuntimeFromConfigSync>[\"runtime\"];\n hub: LangChainToolsHub;\n mergedToolConfig: ToolYamlShape;\n} {\n const configPathForResolve = options.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;\n const mergedToolConfig = loadMergedToolConfig(options.configFilePath);\n // Collect layer-2 defaults from each extension's embedded config/tool.yaml.\n // loadAllExtensionsFromToolYamlSync is cheap here (require() is cached by Node.js).\n const extensionEmbeddedDefaults = collectExtensionEmbeddedDefaults(\n loadAllExtensionsFromToolYamlSync(configPathForResolve),\n );\n const runtimeOpts = runtimeOptionsFromConfig(options, mergedToolConfig, configPathForResolve, extensionEmbeddedDefaults);\n const { runtime } = createRuntimeFromConfigSync(runtimeOpts);\n const hub = new LangChainToolsHub(runtime);\n return { runtime, hub, mergedToolConfig };\n}\n\n/**\n * Internal: create LangChain tools from config/runtime.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - All other CreateAgentToolsOptions (coreTools, etc.) are applied as programmatic overrides.\n *\n * @example\n * Internal helper consumed by createAgentTools().\n */\nexport function createLangChainAgentTools(\n options?: CreateAgentToolsOptions | string,\n): StructuredToolInterface[] {\n const opts: CreateAgentToolsOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, hub, mergedToolConfig } = buildRuntimeAndHub(withDefaultToolServices(opts));\n\n const names = buildConfiguredToolSelections(mergedToolConfig);\n if (names.length > 0) {\n const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);\n const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));\n if (allBarePackages) return hub.getLangChainTools();\n return hub.getLangChainToolsForNames(expandToolDescriptorsToRegistryNames(names, registryNames));\n }\n return hub.getLangChainTools();\n}\n\nexport async function createLangChainAgentToolsAsync(\n options?: CreateAgentToolsOptions | string,\n): Promise<StructuredToolInterface[]> {\n const opts: CreateAgentToolsOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const configPathForResolve = opts.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;\n const mergedToolConfig = loadMergedToolConfig(opts.configFilePath);\n const runtimeOpts = runtimeOptionsFromConfig(\n withDefaultToolServices(opts),\n mergedToolConfig,\n configPathForResolve,\n {},\n );\n const { runtime } = await createRuntimeFromConfig(runtimeOpts);\n const hub = new LangChainToolsHub(runtime);\n\n const names = buildConfiguredToolSelections(mergedToolConfig);\n if (names.length > 0) {\n const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);\n const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));\n if (allBarePackages) return hub.getLangChainTools();\n return hub.getLangChainToolsForNames(expandToolDescriptorsToRegistryNames(names, registryNames));\n }\n return hub.getLangChainTools();\n}\n\n/**\n * Internal: create an MCP server from tool config.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - options.mcp → passed to the MCP server (name, version, execContextFactory).\n *\n * @example\n * Internal helper consumed by createAgentTools() expose flows.\n */\nexport async function createMcpServer(\n options?: (CreateAgentToolsOptions & MCPServerOptions) | string,\n): Promise<McpServer> {\n const opts: CreateAgentToolsOptions & MCPServerOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, mergedToolConfig } = buildRuntimeAndHub(opts);\n const serverOpts: MCPServerOptions = {\n name: opts.name ?? mergedToolConfig.mcp?.name,\n version: opts.version ?? mergedToolConfig.mcp?.version,\n execContextFactory: opts.execContextFactory,\n };\n const { server } = await createMCPServer(runtime, serverOpts);\n return server;\n}\n\n/**\n * Internal: create an OpenAPI / Swagger HTTP server from tool config.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - options.port, host, basePath → passed to the HTTP server; tool.yaml openapi: section provides defaults.\n *\n * @example\n * Internal helper consumed by createAgentTools() expose flows.\n */\nexport async function createOpenAPIServer(\n options?: (CreateAgentToolsOptions & OpenAPIHttpServerOptions) | string,\n): Promise<OpenAPIExpressApp> {\n const opts: CreateAgentToolsOptions & OpenAPIHttpServerOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, mergedToolConfig } = buildRuntimeAndHub(opts);\n const serverOpts: OpenAPIHttpServerOptions = {\n host: opts.host ?? mergedToolConfig.openapi?.host,\n port: opts.port ?? mergedToolConfig.openapi?.port,\n basePath: opts.basePath ?? mergedToolConfig.openapi?.basePath,\n execContextFactory: opts.execContextFactory,\n };\n return createOpenAPIHttpServer(runtime, serverOpts);\n}\n","import { AgentContextTokens } from \"@easynet/agent-common\";\nimport {\n createLangChainAgentTools,\n createLangChainAgentToolsAsync,\n type CreateAgentToolsOptions,\n} from \"./createAgentTools.js\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\nimport { getDefaultAgentContext } from \"../agent-context.js\";\n\nexport interface CreateAgentToolsModuleOptions extends CreateAgentToolsOptions {}\n\n/**\n * Initialize LangChain agent tools and register them into the process-level singleton AgentContext.\n *\n * Sets:\n * - AgentContextTokens.Tools → StructuredToolInterface[]\n *\n * @example\n * ```ts\n * createAgentTools({ configFilePath: \"config/tool.yaml\" });\n * ```\n */\nexport function createAgentTools(options?: CreateAgentToolsModuleOptions): StructuredToolInterface[] {\n const tools = createLangChainAgentTools(options);\n getDefaultAgentContext().set(AgentContextTokens.Tools, tools);\n return tools;\n}\n\nexport async function createAgentToolsAsync(\n options?: CreateAgentToolsModuleOptions,\n): Promise<StructuredToolInterface[]> {\n const tools = await createLangChainAgentToolsAsync(options);\n getDefaultAgentContext().set(AgentContextTokens.Tools, tools);\n return tools;\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -2,5 +2,5 @@
2
2
  * Minimal public API for @easynet/agent-tool.
3
3
  * Expose only module initializer for framework assembly.
4
4
  */
5
- export { createAgentTools, type CreateAgentToolsModuleOptions, } from "./api/register-tools.js";
5
+ export { createAgentTools, createAgentToolsAsync, type CreateAgentToolsModuleOptions, } from "./api/register-tools.js";
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,gBAAgB,EAChB,KAAK,6BAA6B,GACnC,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,6BAA6B,GACnC,MAAM,yBAAyB,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { loadExtensionManifest } from './chunk-JEOBJ37J.js';
2
- import { isBarePackageDescriptor, expandToolDescriptorsToRegistryNames, loadAllExtensionsFromToolYamlSync, createRuntimeFromConfigSync, getToolSourceDescriptors, loadToolConfig, resolveSandboxedPath, toToolObservationText, npmDescriptorToPackagePrefix, fileDescriptorToPackagePrefix } from './chunk-ODML7BYU.js';
2
+ import { isBarePackageDescriptor, expandToolDescriptorsToRegistryNames, createRuntimeFromConfig, loadAllExtensionsFromToolYamlSync, createRuntimeFromConfigSync, getToolSourceDescriptors, loadToolConfig, resolveSandboxedPath, toToolObservationText, npmDescriptorToPackagePrefix, fileDescriptorToPackagePrefix } from './chunk-3TT5M7A3.js';
3
3
  import { LANGCHAIN_KIND } from './chunk-POUTZDWB.js';
4
4
  import './chunk-IVL4TBFB.js';
5
5
  import './chunk-BDUSB6GT.js';
@@ -309,6 +309,27 @@ function createLangChainAgentTools(options) {
309
309
  }
310
310
  return hub.getLangChainTools();
311
311
  }
312
+ async function createLangChainAgentToolsAsync(options) {
313
+ const opts = typeof options === "string" ? { configFilePath: options } : options ?? {};
314
+ const configPathForResolve = opts.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;
315
+ const mergedToolConfig = loadMergedToolConfig(opts.configFilePath);
316
+ const runtimeOpts = runtimeOptionsFromConfig(
317
+ withDefaultToolServices(opts),
318
+ mergedToolConfig,
319
+ configPathForResolve,
320
+ {}
321
+ );
322
+ const { runtime } = await createRuntimeFromConfig(runtimeOpts);
323
+ const hub = new LangChainToolsHub(runtime);
324
+ const names = buildConfiguredToolSelections(mergedToolConfig);
325
+ if (names.length > 0) {
326
+ const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
327
+ const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));
328
+ if (allBarePackages) return hub.getLangChainTools();
329
+ return hub.getLangChainToolsForNames(expandToolDescriptorsToRegistryNames(names, registryNames));
330
+ }
331
+ return hub.getLangChainTools();
332
+ }
312
333
 
313
334
  // src/api/register-tools.ts
314
335
  function createAgentTools(options) {
@@ -316,7 +337,12 @@ function createAgentTools(options) {
316
337
  getDefaultAgentContext().set(AgentContextTokens.Tools, tools);
317
338
  return tools;
318
339
  }
340
+ async function createAgentToolsAsync(options) {
341
+ const tools = await createLangChainAgentToolsAsync(options);
342
+ getDefaultAgentContext().set(AgentContextTokens.Tools, tools);
343
+ return tools;
344
+ }
319
345
 
320
- export { createAgentTools };
346
+ export { createAgentTools, createAgentToolsAsync };
321
347
  //# sourceMappingURL=index.js.map
322
348
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/adapters/LangChainToolsHub.ts","../src/agent-context.ts","../src/api/createAgentTools.ts","../src/api/register-tools.ts"],"names":["AgentContextTokens"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Exposes all tools from a ToolRegistry + PTCRuntime as LangChain tools\n * for local agent use (e.g. with createReactAgent, AgentExecutor).\n *\n * For most users, use createAgentTools() from @easynet/agent-tool, which loads from tool.yaml and returns\n * StructuredTool[]. Use LangChainToolsHub when you need a custom runtime or ctxFactory.\n *\n * Use: new LangChainToolsHub(runtime, ctxFactory).getLangChainTools()\n */\n\nimport { DynamicStructuredTool, type StructuredToolInterface } from \"@langchain/core/tools\";\nimport { stripNullishObjectFields } from \"@easynet/agent-common/utils\";\nimport type { PTCRuntime } from \"../../core/runtime/PTCRuntime.js\";\nimport type { ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport type { ExecContext } from \"../../core/types/ToolIntent.js\";\nimport type { ToolIntent } from \"../../core/types/ToolIntent.js\";\nimport { enrichSpecWithCanonicalSchema } from \"../../tools/util/canonicalCoreSchemas.js\";\nimport { LANGCHAIN_KIND } from \"../../tools/langchain/types.js\";\nimport { toToolObservationText } from \"../../core/runtime/toolObservation.js\";\n\n/**\n * If inputSchema wraps all params in a single \"args\" object (manifest convention),\n * returns that inner args schema; otherwise returns null.\n */\nfunction getArgsSchemaIfWrapped(inputSchema: object): Record<string, unknown> | null {\n const s = inputSchema as Record<string, unknown>;\n if (s?.type !== \"object\" || !s.properties || typeof s.properties !== \"object\") return null;\n const args = (s.properties as Record<string, unknown>).args;\n if (\n args != null &&\n typeof args === \"object\" &&\n (args as Record<string, unknown>).type === \"object\" &&\n (args as Record<string, unknown>).properties != null\n ) {\n return args as Record<string, unknown>;\n }\n return null;\n}\n\n/**\n * True when inputSchema wraps all params in a single \"args\" object (manifest convention).\n */\nfunction hasArgsWrapper(inputSchema: object): boolean {\n return getArgsSchemaIfWrapped(inputSchema) !== null;\n}\n\n/**\n * If inputSchema is { type: \"object\", properties: { args: { type: \"object\", properties: {...} } } },\n * return the inner args schema so the LLM can pass { path: \".\" } instead of { args: { path: \".\" } }.\n */\nfunction schemaForLangChain(inputSchema: object): Record<string, unknown> {\n const wrapped = getArgsSchemaIfWrapped(inputSchema);\n if (wrapped !== null) return wrapped;\n return inputSchema as Record<string, unknown>;\n}\n\nfunction buildIntent(\n toolName: string,\n inputSchema: object,\n args: Record<string, unknown>,\n): ToolIntent {\n return {\n tool: toolName,\n args: hasArgsWrapper(inputSchema) ? { args } : args,\n purpose: LANGCHAIN_KIND,\n };\n}\n\nfunction normalizeArgs(args: Record<string, unknown> | undefined): Record<string, unknown> {\n return stripNullishObjectFields(args ?? {}) as Record<string, unknown>;\n}\n\nexport type ExecContextFactory = () => ExecContext;\n\nconst DEFAULT_CTX_FACTORY: ExecContextFactory = () => ({\n requestId: `lc-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,\n taskId: `task-${Date.now()}`,\n permissions: [\n \"read:web\",\n \"read:fs\",\n \"write:fs\",\n \"read:db\",\n \"write:db\",\n \"network\",\n \"workflow\",\n \"danger:destructive\",\n ],\n});\n\n/**\n * Hub that wraps PTCRuntime and exposes every registered tool as a LangChain\n * StructuredTool (DynamicStructuredTool), so local agents (LangChain AgentExecutor,\n * createReactAgent, etc.) can use the same tools as MCP and OpenAPI.\n */\nexport class LangChainToolsHub {\n constructor(\n private readonly runtime: PTCRuntime,\n private readonly ctxFactory: ExecContextFactory = DEFAULT_CTX_FACTORY,\n ) {}\n\n /**\n * Returns all registered tools as LangChain StructuredTool[].\n * Each tool invokes the runtime through the full pipeline (policy, HITL, etc.).\n */\n getLangChainTools(): StructuredToolInterface[] {\n const registry = this.runtime.getRegistry();\n const specs = registry.snapshot();\n\n return specs.map((spec) => this.specToLangChainTool(spec));\n }\n\n /**\n * Returns LangChain tools for a subset of tools (by name or query).\n */\n getLangChainToolsForNames(toolNames: string[]): StructuredToolInterface[] {\n const registry = this.runtime.getRegistry();\n const set = new Set(toolNames);\n const specs = registry.snapshot().filter((s) => set.has(s.name));\n return specs.map((spec) => this.specToLangChainTool(spec));\n }\n\n private specToLangChainTool(spec: ToolSpec): DynamicStructuredTool {\n const runtime = this.runtime;\n const ctxFactory = this.ctxFactory;\n const enriched = enrichSpecWithCanonicalSchema(spec);\n\n const schema = schemaForLangChain(enriched.inputSchema);\n return new DynamicStructuredTool({\n name: spec.name,\n description: spec.description ?? `Tool: ${spec.name}`,\n schema,\n func: async (args: Record<string, unknown>): Promise<string> => {\n const normalizedArgs = normalizeArgs(args);\n const intent = buildIntent(spec.name, enriched.inputSchema, normalizedArgs);\n const ctx = ctxFactory();\n const result = await runtime.invoke(intent, ctx);\n return toToolObservationText(result, { includeFeedbackMarker: true });\n },\n });\n }\n}\n","import { createAgentContext, type AgentContext } from \"@easynet/agent-common\";\n\nconst DEFAULT_CONTEXT_KEY = \"__easynet_agent_default_context__\";\n\nfunction isAgentContext(value: unknown): value is AgentContext {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as AgentContext).get === \"function\" &&\n typeof (value as AgentContext).set === \"function\" &&\n typeof (value as AgentContext).has === \"function\"\n );\n}\n\nexport function getDefaultAgentContext(): AgentContext {\n const store = globalThis as Record<string, unknown>;\n const existing = store[DEFAULT_CONTEXT_KEY];\n if (isAgentContext(existing)) return existing;\n\n const created = createAgentContext();\n store[DEFAULT_CONTEXT_KEY] = created;\n return created;\n}\n","/**\n * Standalone tool creation functions. Each function:\n * - Uses the embedded config/tool.yaml as the default base.\n * - If a configFilePath is provided, merges it on top of the default.\n * - If no options are provided at all, behaves as if only the embedded default is used.\n *\n * Public module API uses createAgentTools() in register-tools.ts.\n * This file keeps internal builders for LangChain / MCP / OpenAPI outputs.\n */\n\nimport { loadToolConfig, resolveSandboxedPath, getToolSourceDescriptors } from \"../tools/util/toolConfig.js\";\nimport type { ToolYamlShape } from \"../tools/util/toolConfig.js\";\nimport { loadExtensionManifest } from \"./extension/registerFromManifest.js\";\nimport {\n expandToolDescriptorsToRegistryNames,\n isBarePackageDescriptor,\n fileDescriptorToPackagePrefix,\n npmDescriptorToPackagePrefix,\n} from \"../tools/util/toolDescriptor.js\";\nimport { deepMerge } from \"@easynet/agent-common/utils\";\nimport { createRuntimeFromConfigSync, loadAllExtensionsFromToolYamlSync } from \"./runtimeFromConfig.js\";\nimport type { CreateRuntimeOptions, LoadedExtension } from \"./runtimeFromConfig.js\";\nimport { LangChainToolsHub } from \"./adapters/LangChainToolsHub.js\";\nimport { createMCPServer, type MCPServerOptions, type McpServer } from \"./expose/mcpServer.js\";\nimport {\n createOpenAPIHttpServer,\n type OpenAPIExpressApp,\n type OpenAPIHttpServerOptions,\n} from \"./expose/openapiHttp.js\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname, resolve } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { getDefaultAgentContext } from \"../agent-context.js\";\nimport { AgentContextTokens } from \"@easynet/agent-common\";\n\nexport interface CreateAgentToolsOptions extends CreateRuntimeOptions {\n /** Path to an override tool.yaml; its values are merged on top of the embedded default config/tool.yaml */\n configFilePath?: string;\n}\n\ntype ChatModelLike = { invoke: (input: unknown) => Promise<unknown> };\ntype EmbeddingModelLike = {\n embedDocuments?: (texts: string[]) => Promise<number[][]>;\n embedQuery?: (text: string) => Promise<number[]>;\n};\n\nfunction renderModelText(output: unknown): string {\n if (typeof output === \"string\") return output;\n if (output && typeof output === \"object\") {\n const content = (output as { content?: unknown }).content;\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((part) => {\n if (typeof part === \"string\") return part;\n if (part && typeof part === \"object\" && typeof (part as { text?: unknown }).text === \"string\") {\n return String((part as { text: string }).text);\n }\n return \"\";\n })\n .join(\"\")\n .trim();\n }\n }\n return String(output ?? \"\");\n}\n\nfunction createDefaultModelHubFromAgentContext():\n | {\n chat: (input: { prompt: string; model?: string }) => Promise<{ text: string; model?: string }>;\n embed: (input: { input: string | string[]; model?: string }) => Promise<{ vectors: number[][]; model?: string }>;\n }\n | undefined {\n const ctx = getDefaultAgentContext();\n const chatModel = ctx.tryGet<ChatModelLike>(AgentContextTokens.ChatModel);\n const embedModel = ctx.tryGet<EmbeddingModelLike>(AgentContextTokens.EmbedModel);\n if (!chatModel && !embedModel) return undefined;\n\n return {\n async chat({ prompt, model }) {\n if (!chatModel) throw new Error(\"Tool modelHub.chat requested but AgentContext ChatModel is not registered\");\n const output = await chatModel.invoke(prompt);\n return {\n text: renderModelText(output),\n ...(model ? { model } : {}),\n };\n },\n async embed({ input, model }) {\n if (!embedModel) throw new Error(\"Tool modelHub.embed requested but AgentContext EmbedModel is not registered\");\n const vectors = Array.isArray(input)\n ? await embedModel.embedDocuments?.(input)\n : [await embedModel.embedQuery?.(input)];\n const normalized = Array.isArray(vectors)\n ? vectors.filter((item): item is number[] => Array.isArray(item))\n : [];\n return {\n vectors: normalized,\n ...(model ? { model } : {}),\n };\n },\n };\n}\n\nfunction withDefaultToolServices(opts: CreateAgentToolsOptions): CreateAgentToolsOptions {\n const existingCoreTools = opts.coreTools ?? {};\n const existingServices = existingCoreTools.services ?? {};\n if (\"modelHub\" in existingServices && existingServices.modelHub != null) {\n return opts;\n }\n\n const modelHub = createDefaultModelHubFromAgentContext();\n if (!modelHub) return opts;\n\n return {\n ...opts,\n coreTools: {\n ...existingCoreTools,\n services: {\n ...existingServices,\n modelHub,\n },\n },\n };\n}\n\n/** Merge host lists from multiple sources (e.g. tool.yaml + programmatic). Union, dedup, preserves order. */\nfunction mergeHostLists(a?: string[], b?: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const list of [a ?? [], b ?? []]) {\n for (const h of list) {\n if (!seen.has(h)) {\n seen.add(h);\n out.push(h);\n }\n }\n }\n return out;\n}\n\nfunction resolveEmbeddedToolConfigPath(): string {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n resolve(moduleDir, \"../../config/tool.yaml\"), // src/api -> config\n resolve(moduleDir, \"../config/tool.yaml\"), // dist/* -> config\n resolve(process.cwd(), \"config/tool.yaml\"), // fallback for local app runtime\n ];\n for (const candidate of candidates) {\n if (existsSync(candidate)) return candidate;\n }\n return candidates[0]!;\n}\n\nconst EMBEDDED_TOOL_CONFIG_PATH = resolveEmbeddedToolConfigPath();\n\n/**\n * For each loaded extension, load its embedded config/tool.yaml (layer 2) and collect\n * the per-tool config into a flat map. Later entries in the list win over earlier ones.\n *\n * Security constraint: each extension's embedded config may only set defaults for tools\n * that belong to that extension (verified against its own manifest). Keys that reference\n * tools from other extensions or global config fields are silently ignored.\n */\nfunction collectExtensionEmbeddedDefaults(\n exts: LoadedExtension[],\n): Record<string, Record<string, unknown>> {\n const merged: Record<string, Record<string, unknown>> = {};\n for (const ext of exts) {\n // Prefer dist/config/tool.yaml (published package); fall back to config/tool.yaml (local dev).\n const configPath =\n [resolve(ext.packageRoot, \"dist/config/tool.yaml\"), resolve(ext.packageRoot, \"config/tool.yaml\")].find(\n existsSync,\n ) ?? \"\";\n if (!configPath) continue;\n try {\n const toolConfigs = loadToolConfig(configPath).tools?.self ?? {};\n if (Object.keys(toolConfigs).length === 0) continue;\n\n // Build the set of short names this extension owns from its manifest.\n // Include both the explicit name field and the dot-path derived from sourcePath\n // (e.g. \"listDir\" and \"fs.listDir\" for src/fs/listDir) so that config keys in\n // either format are accepted.\n const manifest = loadExtensionManifest(ext.packageRoot);\n const ownToolNames = new Set<string>();\n for (const e of manifest.entries) {\n if (e.name) ownToolNames.add(e.name);\n if (e.sourcePath) {\n ownToolNames.add(e.sourcePath.replace(/^src\\//, \"\").replace(/\\//g, \".\"));\n }\n }\n\n for (const [k, v] of Object.entries(toolConfigs)) {\n // Only allow keys that are short names of tools this extension registers.\n if (ownToolNames.has(k)) {\n merged[k] = v;\n }\n }\n } catch {\n // skip malformed extension config or missing manifest\n }\n }\n return merged;\n}\n\nfunction loadMergedToolConfig(overridePath?: string): ToolYamlShape {\n const baseConfig = loadToolConfig(EMBEDDED_TOOL_CONFIG_PATH);\n if (!overridePath) return baseConfig;\n const overrideConfig = loadToolConfig(overridePath);\n return deepMerge({} as ToolYamlShape, baseConfig, overrideConfig);\n}\n\nfunction flattenSourceGroupedToolConfig(\n sources: ToolYamlShape[\"tools\"] | undefined,\n): Record<string, Record<string, unknown>> {\n const flat: Record<string, Record<string, unknown>> = {};\n for (const [descriptor, toolMap] of Object.entries(sources ?? {})) {\n if (descriptor === \"self\") {\n for (const [toolName, toolConfig] of Object.entries(toolMap)) {\n flat[toolName] = toolConfig;\n }\n continue;\n }\n const packagePrefix = descriptor.startsWith(\"npm:\")\n ? npmDescriptorToPackagePrefix(descriptor)\n : descriptor.startsWith(\"file:\")\n ? fileDescriptorToPackagePrefix(descriptor)\n : \"\";\n for (const [toolName, toolConfig] of Object.entries(toolMap)) {\n flat[packagePrefix ? `${packagePrefix}::${toolName}` : toolName] = toolConfig;\n }\n }\n return flat;\n}\n\nfunction buildConfiguredToolSelections(toolConfig: ToolYamlShape): string[] {\n return getToolSourceDescriptors(toolConfig);\n}\n\nfunction runtimeOptionsFromConfig(\n opts: CreateAgentToolsOptions,\n toolConfig: ToolYamlShape,\n configPathForResolve: string,\n extensionEmbeddedDefaults: Record<string, Record<string, unknown>>,\n): CreateRuntimeOptions {\n const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [], enableSandboxValidation: false };\n {\n const updates: {\n sandboxRoot?: string;\n enableSandboxValidation?: boolean;\n allowedHosts?: string[];\n blockedHosts?: string[];\n blockedCidrs?: string[];\n toolOverrides?: Record<string, Record<string, unknown>>;\n packageDefaults?: Record<string, Record<string, unknown>>;\n } = {};\n if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === \"string\") {\n updates.sandboxRoot = resolveSandboxedPath(configPathForResolve, toolConfig.sandboxedPath);\n }\n if (typeof toolConfig.enableSandboxValidation === \"boolean\") {\n updates.enableSandboxValidation = toolConfig.enableSandboxValidation;\n } else if (coreTools.enableSandboxValidation == null) {\n updates.enableSandboxValidation = false;\n }\n // Smart merge: union of allowedHosts and blockedHosts from yaml + programmatic (both lists always applied)\n updates.allowedHosts = mergeHostLists(coreTools.allowedHosts, toolConfig.allowedHosts);\n updates.blockedHosts = mergeHostLists(coreTools.blockedHosts, toolConfig.blockedHosts);\n if (Array.isArray(toolConfig.blockedCidrs) && toolConfig.blockedCidrs.length > 0) {\n updates.blockedCidrs = toolConfig.blockedCidrs;\n } else if (coreTools.blockedCidrs?.length) {\n updates.blockedCidrs = coreTools.blockedCidrs;\n }\n let hasToolDefaults = false;\n // Priority (low → high): extension embedded (layer 2) < programmatic coreTools < app tool config\n const flatOverrides: Record<string, Record<string, unknown>> = {\n ...extensionEmbeddedDefaults,\n ...coreTools.toolOverrides,\n };\n if (Object.keys(extensionEmbeddedDefaults).length > 0) hasToolDefaults = true;\n const configuredToolOverrides = flattenSourceGroupedToolConfig(toolConfig.tools);\n if (Object.keys(configuredToolOverrides).length > 0) {\n Object.assign(flatOverrides, configuredToolOverrides);\n hasToolDefaults = true;\n }\n if (hasToolDefaults) {\n updates.toolOverrides = flatOverrides;\n }\n if (Object.keys(updates).length > 0) return { ...opts, coreTools: { ...coreTools, ...updates } };\n }\n return { ...opts, coreTools };\n}\n\n/**\n * Build a ready-to-use runtime + hub from options.\n * - No options → embedded default config/tool.yaml only.\n * - options.configFilePath → override merged on top of embedded default.\n */\nfunction buildRuntimeAndHub(options: CreateAgentToolsOptions = {}): {\n runtime: ReturnType<typeof createRuntimeFromConfigSync>[\"runtime\"];\n hub: LangChainToolsHub;\n mergedToolConfig: ToolYamlShape;\n} {\n const configPathForResolve = options.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;\n const mergedToolConfig = loadMergedToolConfig(options.configFilePath);\n // Collect layer-2 defaults from each extension's embedded config/tool.yaml.\n // loadAllExtensionsFromToolYamlSync is cheap here (require() is cached by Node.js).\n const extensionEmbeddedDefaults = collectExtensionEmbeddedDefaults(\n loadAllExtensionsFromToolYamlSync(configPathForResolve),\n );\n const runtimeOpts = runtimeOptionsFromConfig(options, mergedToolConfig, configPathForResolve, extensionEmbeddedDefaults);\n const { runtime } = createRuntimeFromConfigSync(runtimeOpts);\n const hub = new LangChainToolsHub(runtime);\n return { runtime, hub, mergedToolConfig };\n}\n\n/**\n * Internal: create LangChain tools from config/runtime.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - All other CreateAgentToolsOptions (coreTools, etc.) are applied as programmatic overrides.\n *\n * @example\n * Internal helper consumed by createAgentTools().\n */\nexport function createLangChainAgentTools(\n options?: CreateAgentToolsOptions | string,\n): StructuredToolInterface[] {\n const opts: CreateAgentToolsOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, hub, mergedToolConfig } = buildRuntimeAndHub(withDefaultToolServices(opts));\n\n const names = buildConfiguredToolSelections(mergedToolConfig);\n if (names.length > 0) {\n const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);\n const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));\n if (allBarePackages) return hub.getLangChainTools();\n return hub.getLangChainToolsForNames(expandToolDescriptorsToRegistryNames(names, registryNames));\n }\n return hub.getLangChainTools();\n}\n\n/**\n * Internal: create an MCP server from tool config.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - options.mcp → passed to the MCP server (name, version, execContextFactory).\n *\n * @example\n * Internal helper consumed by createAgentTools() expose flows.\n */\nexport async function createMcpServer(\n options?: (CreateAgentToolsOptions & MCPServerOptions) | string,\n): Promise<McpServer> {\n const opts: CreateAgentToolsOptions & MCPServerOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, mergedToolConfig } = buildRuntimeAndHub(opts);\n const serverOpts: MCPServerOptions = {\n name: opts.name ?? mergedToolConfig.mcp?.name,\n version: opts.version ?? mergedToolConfig.mcp?.version,\n execContextFactory: opts.execContextFactory,\n };\n const { server } = await createMCPServer(runtime, serverOpts);\n return server;\n}\n\n/**\n * Internal: create an OpenAPI / Swagger HTTP server from tool config.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - options.port, host, basePath → passed to the HTTP server; tool.yaml openapi: section provides defaults.\n *\n * @example\n * Internal helper consumed by createAgentTools() expose flows.\n */\nexport async function createOpenAPIServer(\n options?: (CreateAgentToolsOptions & OpenAPIHttpServerOptions) | string,\n): Promise<OpenAPIExpressApp> {\n const opts: CreateAgentToolsOptions & OpenAPIHttpServerOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, mergedToolConfig } = buildRuntimeAndHub(opts);\n const serverOpts: OpenAPIHttpServerOptions = {\n host: opts.host ?? mergedToolConfig.openapi?.host,\n port: opts.port ?? mergedToolConfig.openapi?.port,\n basePath: opts.basePath ?? mergedToolConfig.openapi?.basePath,\n execContextFactory: opts.execContextFactory,\n };\n return createOpenAPIHttpServer(runtime, serverOpts);\n}\n","import { AgentContextTokens } from \"@easynet/agent-common\";\nimport { createLangChainAgentTools, type CreateAgentToolsOptions } from \"./createAgentTools.js\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\nimport { getDefaultAgentContext } from \"../agent-context.js\";\n\nexport interface CreateAgentToolsModuleOptions extends CreateAgentToolsOptions {}\n\n/**\n * Initialize LangChain agent tools and register them into the process-level singleton AgentContext.\n *\n * Sets:\n * - AgentContextTokens.Tools → StructuredToolInterface[]\n *\n * @example\n * ```ts\n * createAgentTools({ configFilePath: \"config/tool.yaml\" });\n * ```\n */\nexport function createAgentTools(options?: CreateAgentToolsModuleOptions): StructuredToolInterface[] {\n const tools = createLangChainAgentTools(options);\n getDefaultAgentContext().set(AgentContextTokens.Tools, tools);\n return tools;\n}\n"]}
1
+ {"version":3,"sources":["../src/api/adapters/LangChainToolsHub.ts","../src/agent-context.ts","../src/api/createAgentTools.ts","../src/api/register-tools.ts"],"names":["AgentContextTokens"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Exposes all tools from a ToolRegistry + PTCRuntime as LangChain tools\n * for local agent use (e.g. with createReactAgent, AgentExecutor).\n *\n * For most users, use createAgentTools() from @easynet/agent-tool, which loads from tool.yaml and returns\n * StructuredTool[]. Use LangChainToolsHub when you need a custom runtime or ctxFactory.\n *\n * Use: new LangChainToolsHub(runtime, ctxFactory).getLangChainTools()\n */\n\nimport { DynamicStructuredTool, type StructuredToolInterface } from \"@langchain/core/tools\";\nimport { stripNullishObjectFields } from \"@easynet/agent-common/utils\";\nimport type { PTCRuntime } from \"../../core/runtime/PTCRuntime.js\";\nimport type { ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport type { ExecContext } from \"../../core/types/ToolIntent.js\";\nimport type { ToolIntent } from \"../../core/types/ToolIntent.js\";\nimport { enrichSpecWithCanonicalSchema } from \"../../tools/util/canonicalCoreSchemas.js\";\nimport { LANGCHAIN_KIND } from \"../../tools/langchain/types.js\";\nimport { toToolObservationText } from \"../../core/runtime/toolObservation.js\";\n\n/**\n * If inputSchema wraps all params in a single \"args\" object (manifest convention),\n * returns that inner args schema; otherwise returns null.\n */\nfunction getArgsSchemaIfWrapped(inputSchema: object): Record<string, unknown> | null {\n const s = inputSchema as Record<string, unknown>;\n if (s?.type !== \"object\" || !s.properties || typeof s.properties !== \"object\") return null;\n const args = (s.properties as Record<string, unknown>).args;\n if (\n args != null &&\n typeof args === \"object\" &&\n (args as Record<string, unknown>).type === \"object\" &&\n (args as Record<string, unknown>).properties != null\n ) {\n return args as Record<string, unknown>;\n }\n return null;\n}\n\n/**\n * True when inputSchema wraps all params in a single \"args\" object (manifest convention).\n */\nfunction hasArgsWrapper(inputSchema: object): boolean {\n return getArgsSchemaIfWrapped(inputSchema) !== null;\n}\n\n/**\n * If inputSchema is { type: \"object\", properties: { args: { type: \"object\", properties: {...} } } },\n * return the inner args schema so the LLM can pass { path: \".\" } instead of { args: { path: \".\" } }.\n */\nfunction schemaForLangChain(inputSchema: object): Record<string, unknown> {\n const wrapped = getArgsSchemaIfWrapped(inputSchema);\n if (wrapped !== null) return wrapped;\n return inputSchema as Record<string, unknown>;\n}\n\nfunction buildIntent(\n toolName: string,\n inputSchema: object,\n args: Record<string, unknown>,\n): ToolIntent {\n return {\n tool: toolName,\n args: hasArgsWrapper(inputSchema) ? { args } : args,\n purpose: LANGCHAIN_KIND,\n };\n}\n\nfunction normalizeArgs(args: Record<string, unknown> | undefined): Record<string, unknown> {\n return stripNullishObjectFields(args ?? {}) as Record<string, unknown>;\n}\n\nexport type ExecContextFactory = () => ExecContext;\n\nconst DEFAULT_CTX_FACTORY: ExecContextFactory = () => ({\n requestId: `lc-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,\n taskId: `task-${Date.now()}`,\n permissions: [\n \"read:web\",\n \"read:fs\",\n \"write:fs\",\n \"read:db\",\n \"write:db\",\n \"network\",\n \"workflow\",\n \"danger:destructive\",\n ],\n});\n\n/**\n * Hub that wraps PTCRuntime and exposes every registered tool as a LangChain\n * StructuredTool (DynamicStructuredTool), so local agents (LangChain AgentExecutor,\n * createReactAgent, etc.) can use the same tools as MCP and OpenAPI.\n */\nexport class LangChainToolsHub {\n constructor(\n private readonly runtime: PTCRuntime,\n private readonly ctxFactory: ExecContextFactory = DEFAULT_CTX_FACTORY,\n ) {}\n\n /**\n * Returns all registered tools as LangChain StructuredTool[].\n * Each tool invokes the runtime through the full pipeline (policy, HITL, etc.).\n */\n getLangChainTools(): StructuredToolInterface[] {\n const registry = this.runtime.getRegistry();\n const specs = registry.snapshot();\n\n return specs.map((spec) => this.specToLangChainTool(spec));\n }\n\n /**\n * Returns LangChain tools for a subset of tools (by name or query).\n */\n getLangChainToolsForNames(toolNames: string[]): StructuredToolInterface[] {\n const registry = this.runtime.getRegistry();\n const set = new Set(toolNames);\n const specs = registry.snapshot().filter((s) => set.has(s.name));\n return specs.map((spec) => this.specToLangChainTool(spec));\n }\n\n private specToLangChainTool(spec: ToolSpec): DynamicStructuredTool {\n const runtime = this.runtime;\n const ctxFactory = this.ctxFactory;\n const enriched = enrichSpecWithCanonicalSchema(spec);\n\n const schema = schemaForLangChain(enriched.inputSchema);\n return new DynamicStructuredTool({\n name: spec.name,\n description: spec.description ?? `Tool: ${spec.name}`,\n schema,\n func: async (args: Record<string, unknown>): Promise<string> => {\n const normalizedArgs = normalizeArgs(args);\n const intent = buildIntent(spec.name, enriched.inputSchema, normalizedArgs);\n const ctx = ctxFactory();\n const result = await runtime.invoke(intent, ctx);\n return toToolObservationText(result, { includeFeedbackMarker: true });\n },\n });\n }\n}\n","import { createAgentContext, type AgentContext } from \"@easynet/agent-common\";\n\nconst DEFAULT_CONTEXT_KEY = \"__easynet_agent_default_context__\";\n\nfunction isAgentContext(value: unknown): value is AgentContext {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as AgentContext).get === \"function\" &&\n typeof (value as AgentContext).set === \"function\" &&\n typeof (value as AgentContext).has === \"function\"\n );\n}\n\nexport function getDefaultAgentContext(): AgentContext {\n const store = globalThis as Record<string, unknown>;\n const existing = store[DEFAULT_CONTEXT_KEY];\n if (isAgentContext(existing)) return existing;\n\n const created = createAgentContext();\n store[DEFAULT_CONTEXT_KEY] = created;\n return created;\n}\n","/**\n * Standalone tool creation functions. Each function:\n * - Uses the embedded config/tool.yaml as the default base.\n * - If a configFilePath is provided, merges it on top of the default.\n * - If no options are provided at all, behaves as if only the embedded default is used.\n *\n * Public module API uses createAgentTools() in register-tools.ts.\n * This file keeps internal builders for LangChain / MCP / OpenAPI outputs.\n */\n\nimport { loadToolConfig, resolveSandboxedPath, getToolSourceDescriptors } from \"../tools/util/toolConfig.js\";\nimport type { ToolYamlShape } from \"../tools/util/toolConfig.js\";\nimport { loadExtensionManifest } from \"./extension/registerFromManifest.js\";\nimport {\n expandToolDescriptorsToRegistryNames,\n isBarePackageDescriptor,\n fileDescriptorToPackagePrefix,\n npmDescriptorToPackagePrefix,\n} from \"../tools/util/toolDescriptor.js\";\nimport { deepMerge } from \"@easynet/agent-common/utils\";\nimport { createRuntimeFromConfigSync, loadAllExtensionsFromToolYamlSync } from \"./runtimeFromConfig.js\";\nimport { createRuntimeFromConfig } from \"./runtimeFromConfig.js\";\nimport type { CreateRuntimeOptions, LoadedExtension } from \"./runtimeFromConfig.js\";\nimport { LangChainToolsHub } from \"./adapters/LangChainToolsHub.js\";\nimport { createMCPServer, type MCPServerOptions, type McpServer } from \"./expose/mcpServer.js\";\nimport {\n createOpenAPIHttpServer,\n type OpenAPIExpressApp,\n type OpenAPIHttpServerOptions,\n} from \"./expose/openapiHttp.js\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname, resolve } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { getDefaultAgentContext } from \"../agent-context.js\";\nimport { AgentContextTokens } from \"@easynet/agent-common\";\n\nexport interface CreateAgentToolsOptions extends CreateRuntimeOptions {\n /** Path to an override tool.yaml; its values are merged on top of the embedded default config/tool.yaml */\n configFilePath?: string;\n}\n\ntype ChatModelLike = { invoke: (input: unknown) => Promise<unknown> };\ntype EmbeddingModelLike = {\n embedDocuments?: (texts: string[]) => Promise<number[][]>;\n embedQuery?: (text: string) => Promise<number[]>;\n};\n\nfunction renderModelText(output: unknown): string {\n if (typeof output === \"string\") return output;\n if (output && typeof output === \"object\") {\n const content = (output as { content?: unknown }).content;\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((part) => {\n if (typeof part === \"string\") return part;\n if (part && typeof part === \"object\" && typeof (part as { text?: unknown }).text === \"string\") {\n return String((part as { text: string }).text);\n }\n return \"\";\n })\n .join(\"\")\n .trim();\n }\n }\n return String(output ?? \"\");\n}\n\nfunction createDefaultModelHubFromAgentContext():\n | {\n chat: (input: { prompt: string; model?: string }) => Promise<{ text: string; model?: string }>;\n embed: (input: { input: string | string[]; model?: string }) => Promise<{ vectors: number[][]; model?: string }>;\n }\n | undefined {\n const ctx = getDefaultAgentContext();\n const chatModel = ctx.tryGet<ChatModelLike>(AgentContextTokens.ChatModel);\n const embedModel = ctx.tryGet<EmbeddingModelLike>(AgentContextTokens.EmbedModel);\n if (!chatModel && !embedModel) return undefined;\n\n return {\n async chat({ prompt, model }) {\n if (!chatModel) throw new Error(\"Tool modelHub.chat requested but AgentContext ChatModel is not registered\");\n const output = await chatModel.invoke(prompt);\n return {\n text: renderModelText(output),\n ...(model ? { model } : {}),\n };\n },\n async embed({ input, model }) {\n if (!embedModel) throw new Error(\"Tool modelHub.embed requested but AgentContext EmbedModel is not registered\");\n const vectors = Array.isArray(input)\n ? await embedModel.embedDocuments?.(input)\n : [await embedModel.embedQuery?.(input)];\n const normalized = Array.isArray(vectors)\n ? vectors.filter((item): item is number[] => Array.isArray(item))\n : [];\n return {\n vectors: normalized,\n ...(model ? { model } : {}),\n };\n },\n };\n}\n\nfunction withDefaultToolServices(opts: CreateAgentToolsOptions): CreateAgentToolsOptions {\n const existingCoreTools = opts.coreTools ?? {};\n const existingServices = existingCoreTools.services ?? {};\n if (\"modelHub\" in existingServices && existingServices.modelHub != null) {\n return opts;\n }\n\n const modelHub = createDefaultModelHubFromAgentContext();\n if (!modelHub) return opts;\n\n return {\n ...opts,\n coreTools: {\n ...existingCoreTools,\n services: {\n ...existingServices,\n modelHub,\n },\n },\n };\n}\n\n/** Merge host lists from multiple sources (e.g. tool.yaml + programmatic). Union, dedup, preserves order. */\nfunction mergeHostLists(a?: string[], b?: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const list of [a ?? [], b ?? []]) {\n for (const h of list) {\n if (!seen.has(h)) {\n seen.add(h);\n out.push(h);\n }\n }\n }\n return out;\n}\n\nfunction resolveEmbeddedToolConfigPath(): string {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n resolve(moduleDir, \"../../config/tool.yaml\"), // src/api -> config\n resolve(moduleDir, \"../config/tool.yaml\"), // dist/* -> config\n resolve(process.cwd(), \"config/tool.yaml\"), // fallback for local app runtime\n ];\n for (const candidate of candidates) {\n if (existsSync(candidate)) return candidate;\n }\n return candidates[0]!;\n}\n\nconst EMBEDDED_TOOL_CONFIG_PATH = resolveEmbeddedToolConfigPath();\n\n/**\n * For each loaded extension, load its embedded config/tool.yaml (layer 2) and collect\n * the per-tool config into a flat map. Later entries in the list win over earlier ones.\n *\n * Security constraint: each extension's embedded config may only set defaults for tools\n * that belong to that extension (verified against its own manifest). Keys that reference\n * tools from other extensions or global config fields are silently ignored.\n */\nfunction collectExtensionEmbeddedDefaults(\n exts: LoadedExtension[],\n): Record<string, Record<string, unknown>> {\n const merged: Record<string, Record<string, unknown>> = {};\n for (const ext of exts) {\n // Prefer dist/config/tool.yaml (published package); fall back to config/tool.yaml (local dev).\n const configPath =\n [resolve(ext.packageRoot, \"dist/config/tool.yaml\"), resolve(ext.packageRoot, \"config/tool.yaml\")].find(\n existsSync,\n ) ?? \"\";\n if (!configPath) continue;\n try {\n const toolConfigs = loadToolConfig(configPath).tools?.self ?? {};\n if (Object.keys(toolConfigs).length === 0) continue;\n\n // Build the set of short names this extension owns from its manifest.\n // Include both the explicit name field and the dot-path derived from sourcePath\n // (e.g. \"listDir\" and \"fs.listDir\" for src/fs/listDir) so that config keys in\n // either format are accepted.\n const manifest = loadExtensionManifest(ext.packageRoot);\n const ownToolNames = new Set<string>();\n for (const e of manifest.entries) {\n if (e.name) ownToolNames.add(e.name);\n if (e.sourcePath) {\n ownToolNames.add(e.sourcePath.replace(/^src\\//, \"\").replace(/\\//g, \".\"));\n }\n }\n\n for (const [k, v] of Object.entries(toolConfigs)) {\n // Only allow keys that are short names of tools this extension registers.\n if (ownToolNames.has(k)) {\n merged[k] = v;\n }\n }\n } catch {\n // skip malformed extension config or missing manifest\n }\n }\n return merged;\n}\n\nfunction loadMergedToolConfig(overridePath?: string): ToolYamlShape {\n const baseConfig = loadToolConfig(EMBEDDED_TOOL_CONFIG_PATH);\n if (!overridePath) return baseConfig;\n const overrideConfig = loadToolConfig(overridePath);\n return deepMerge({} as ToolYamlShape, baseConfig, overrideConfig);\n}\n\nfunction flattenSourceGroupedToolConfig(\n sources: ToolYamlShape[\"tools\"] | undefined,\n): Record<string, Record<string, unknown>> {\n const flat: Record<string, Record<string, unknown>> = {};\n for (const [descriptor, toolMap] of Object.entries(sources ?? {})) {\n if (descriptor === \"self\") {\n for (const [toolName, toolConfig] of Object.entries(toolMap)) {\n flat[toolName] = toolConfig;\n }\n continue;\n }\n const packagePrefix = descriptor.startsWith(\"npm:\")\n ? npmDescriptorToPackagePrefix(descriptor)\n : descriptor.startsWith(\"file:\")\n ? fileDescriptorToPackagePrefix(descriptor)\n : \"\";\n for (const [toolName, toolConfig] of Object.entries(toolMap)) {\n flat[packagePrefix ? `${packagePrefix}::${toolName}` : toolName] = toolConfig;\n }\n }\n return flat;\n}\n\nfunction buildConfiguredToolSelections(toolConfig: ToolYamlShape): string[] {\n return getToolSourceDescriptors(toolConfig);\n}\n\nfunction runtimeOptionsFromConfig(\n opts: CreateAgentToolsOptions,\n toolConfig: ToolYamlShape,\n configPathForResolve: string,\n extensionEmbeddedDefaults: Record<string, Record<string, unknown>>,\n): CreateRuntimeOptions {\n const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [], enableSandboxValidation: false };\n {\n const updates: {\n sandboxRoot?: string;\n enableSandboxValidation?: boolean;\n allowedHosts?: string[];\n blockedHosts?: string[];\n blockedCidrs?: string[];\n toolOverrides?: Record<string, Record<string, unknown>>;\n packageDefaults?: Record<string, Record<string, unknown>>;\n } = {};\n if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === \"string\") {\n updates.sandboxRoot = resolveSandboxedPath(configPathForResolve, toolConfig.sandboxedPath);\n }\n if (typeof toolConfig.enableSandboxValidation === \"boolean\") {\n updates.enableSandboxValidation = toolConfig.enableSandboxValidation;\n } else if (coreTools.enableSandboxValidation == null) {\n updates.enableSandboxValidation = false;\n }\n // Smart merge: union of allowedHosts and blockedHosts from yaml + programmatic (both lists always applied)\n updates.allowedHosts = mergeHostLists(coreTools.allowedHosts, toolConfig.allowedHosts);\n updates.blockedHosts = mergeHostLists(coreTools.blockedHosts, toolConfig.blockedHosts);\n if (Array.isArray(toolConfig.blockedCidrs) && toolConfig.blockedCidrs.length > 0) {\n updates.blockedCidrs = toolConfig.blockedCidrs;\n } else if (coreTools.blockedCidrs?.length) {\n updates.blockedCidrs = coreTools.blockedCidrs;\n }\n let hasToolDefaults = false;\n // Priority (low → high): extension embedded (layer 2) < programmatic coreTools < app tool config\n const flatOverrides: Record<string, Record<string, unknown>> = {\n ...extensionEmbeddedDefaults,\n ...coreTools.toolOverrides,\n };\n if (Object.keys(extensionEmbeddedDefaults).length > 0) hasToolDefaults = true;\n const configuredToolOverrides = flattenSourceGroupedToolConfig(toolConfig.tools);\n if (Object.keys(configuredToolOverrides).length > 0) {\n Object.assign(flatOverrides, configuredToolOverrides);\n hasToolDefaults = true;\n }\n if (hasToolDefaults) {\n updates.toolOverrides = flatOverrides;\n }\n if (Object.keys(updates).length > 0) return { ...opts, coreTools: { ...coreTools, ...updates } };\n }\n return { ...opts, coreTools };\n}\n\n/**\n * Build a ready-to-use runtime + hub from options.\n * - No options → embedded default config/tool.yaml only.\n * - options.configFilePath → override merged on top of embedded default.\n */\nfunction buildRuntimeAndHub(options: CreateAgentToolsOptions = {}): {\n runtime: ReturnType<typeof createRuntimeFromConfigSync>[\"runtime\"];\n hub: LangChainToolsHub;\n mergedToolConfig: ToolYamlShape;\n} {\n const configPathForResolve = options.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;\n const mergedToolConfig = loadMergedToolConfig(options.configFilePath);\n // Collect layer-2 defaults from each extension's embedded config/tool.yaml.\n // loadAllExtensionsFromToolYamlSync is cheap here (require() is cached by Node.js).\n const extensionEmbeddedDefaults = collectExtensionEmbeddedDefaults(\n loadAllExtensionsFromToolYamlSync(configPathForResolve),\n );\n const runtimeOpts = runtimeOptionsFromConfig(options, mergedToolConfig, configPathForResolve, extensionEmbeddedDefaults);\n const { runtime } = createRuntimeFromConfigSync(runtimeOpts);\n const hub = new LangChainToolsHub(runtime);\n return { runtime, hub, mergedToolConfig };\n}\n\n/**\n * Internal: create LangChain tools from config/runtime.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - All other CreateAgentToolsOptions (coreTools, etc.) are applied as programmatic overrides.\n *\n * @example\n * Internal helper consumed by createAgentTools().\n */\nexport function createLangChainAgentTools(\n options?: CreateAgentToolsOptions | string,\n): StructuredToolInterface[] {\n const opts: CreateAgentToolsOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, hub, mergedToolConfig } = buildRuntimeAndHub(withDefaultToolServices(opts));\n\n const names = buildConfiguredToolSelections(mergedToolConfig);\n if (names.length > 0) {\n const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);\n const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));\n if (allBarePackages) return hub.getLangChainTools();\n return hub.getLangChainToolsForNames(expandToolDescriptorsToRegistryNames(names, registryNames));\n }\n return hub.getLangChainTools();\n}\n\nexport async function createLangChainAgentToolsAsync(\n options?: CreateAgentToolsOptions | string,\n): Promise<StructuredToolInterface[]> {\n const opts: CreateAgentToolsOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const configPathForResolve = opts.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;\n const mergedToolConfig = loadMergedToolConfig(opts.configFilePath);\n const runtimeOpts = runtimeOptionsFromConfig(\n withDefaultToolServices(opts),\n mergedToolConfig,\n configPathForResolve,\n {},\n );\n const { runtime } = await createRuntimeFromConfig(runtimeOpts);\n const hub = new LangChainToolsHub(runtime);\n\n const names = buildConfiguredToolSelections(mergedToolConfig);\n if (names.length > 0) {\n const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);\n const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));\n if (allBarePackages) return hub.getLangChainTools();\n return hub.getLangChainToolsForNames(expandToolDescriptorsToRegistryNames(names, registryNames));\n }\n return hub.getLangChainTools();\n}\n\n/**\n * Internal: create an MCP server from tool config.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - options.mcp → passed to the MCP server (name, version, execContextFactory).\n *\n * @example\n * Internal helper consumed by createAgentTools() expose flows.\n */\nexport async function createMcpServer(\n options?: (CreateAgentToolsOptions & MCPServerOptions) | string,\n): Promise<McpServer> {\n const opts: CreateAgentToolsOptions & MCPServerOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, mergedToolConfig } = buildRuntimeAndHub(opts);\n const serverOpts: MCPServerOptions = {\n name: opts.name ?? mergedToolConfig.mcp?.name,\n version: opts.version ?? mergedToolConfig.mcp?.version,\n execContextFactory: opts.execContextFactory,\n };\n const { server } = await createMCPServer(runtime, serverOpts);\n return server;\n}\n\n/**\n * Internal: create an OpenAPI / Swagger HTTP server from tool config.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - options.port, host, basePath → passed to the HTTP server; tool.yaml openapi: section provides defaults.\n *\n * @example\n * Internal helper consumed by createAgentTools() expose flows.\n */\nexport async function createOpenAPIServer(\n options?: (CreateAgentToolsOptions & OpenAPIHttpServerOptions) | string,\n): Promise<OpenAPIExpressApp> {\n const opts: CreateAgentToolsOptions & OpenAPIHttpServerOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, mergedToolConfig } = buildRuntimeAndHub(opts);\n const serverOpts: OpenAPIHttpServerOptions = {\n host: opts.host ?? mergedToolConfig.openapi?.host,\n port: opts.port ?? mergedToolConfig.openapi?.port,\n basePath: opts.basePath ?? mergedToolConfig.openapi?.basePath,\n execContextFactory: opts.execContextFactory,\n };\n return createOpenAPIHttpServer(runtime, serverOpts);\n}\n","import { AgentContextTokens } from \"@easynet/agent-common\";\nimport {\n createLangChainAgentTools,\n createLangChainAgentToolsAsync,\n type CreateAgentToolsOptions,\n} from \"./createAgentTools.js\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\nimport { getDefaultAgentContext } from \"../agent-context.js\";\n\nexport interface CreateAgentToolsModuleOptions extends CreateAgentToolsOptions {}\n\n/**\n * Initialize LangChain agent tools and register them into the process-level singleton AgentContext.\n *\n * Sets:\n * - AgentContextTokens.Tools → StructuredToolInterface[]\n *\n * @example\n * ```ts\n * createAgentTools({ configFilePath: \"config/tool.yaml\" });\n * ```\n */\nexport function createAgentTools(options?: CreateAgentToolsModuleOptions): StructuredToolInterface[] {\n const tools = createLangChainAgentTools(options);\n getDefaultAgentContext().set(AgentContextTokens.Tools, tools);\n return tools;\n}\n\nexport async function createAgentToolsAsync(\n options?: CreateAgentToolsModuleOptions,\n): Promise<StructuredToolInterface[]> {\n const tools = await createLangChainAgentToolsAsync(options);\n getDefaultAgentContext().set(AgentContextTokens.Tools, tools);\n return tools;\n}\n"]}