@easynet/agent-tool 1.0.80 → 1.0.81

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +5 -15
  2. package/dist/api/adapters/LangChainToolsHub.d.ts +1 -1
  3. package/dist/api/createAgentTools.d.ts +8 -24
  4. package/dist/api/createAgentTools.d.ts.map +1 -1
  5. package/dist/api/expose/index.d.ts +1 -1
  6. package/dist/api/main.cjs +6 -62
  7. package/dist/api/main.d.ts +3 -56
  8. package/dist/api/main.d.ts.map +1 -1
  9. package/dist/api/main.js +4 -4
  10. package/dist/api/runtimeFromConfig.d.ts +1 -1
  11. package/dist/api/runtimeFromConfig.d.ts.map +1 -1
  12. package/dist/build.cjs +5 -6
  13. package/dist/build.js +2 -3
  14. package/dist/{chunk-Q6W32HAP.js → chunk-3D7XYAZO.js} +7 -30
  15. package/dist/chunk-3D7XYAZO.js.map +1 -0
  16. package/dist/{chunk-EIIHED57.cjs → chunk-5HSGVA6S.cjs} +12 -37
  17. package/dist/chunk-5HSGVA6S.cjs.map +1 -0
  18. package/dist/{chunk-VYULM6NC.js → chunk-6ORA3MNX.js} +3 -3
  19. package/dist/{chunk-VYULM6NC.js.map → chunk-6ORA3MNX.js.map} +1 -1
  20. package/dist/{chunk-DVYM6VRD.js → chunk-ACSGEQAY.js} +13 -48
  21. package/dist/chunk-ACSGEQAY.js.map +1 -0
  22. package/dist/{chunk-5QH7YY4Z.cjs → chunk-F4HS7H7K.cjs} +4 -5
  23. package/dist/chunk-F4HS7H7K.cjs.map +1 -0
  24. package/dist/{chunk-JZ6LKSAS.js → chunk-NEMGE573.js} +4 -4
  25. package/dist/chunk-NEMGE573.js.map +1 -0
  26. package/dist/{chunk-TBDSFXNG.cjs → chunk-QCHMXVWZ.cjs} +7 -7
  27. package/dist/{chunk-TBDSFXNG.cjs.map → chunk-QCHMXVWZ.cjs.map} +1 -1
  28. package/dist/{chunk-33N4Y6IS.cjs → chunk-V2RD4BHT.cjs} +7 -33
  29. package/dist/chunk-V2RD4BHT.cjs.map +1 -0
  30. package/dist/{chunk-42UNSIZJ.js → chunk-W2WJOS5Z.js} +7 -28
  31. package/dist/chunk-W2WJOS5Z.js.map +1 -0
  32. package/dist/{chunk-GXFDYM3O.cjs → chunk-XW52LOLP.cjs} +24 -65
  33. package/dist/chunk-XW52LOLP.cjs.map +1 -0
  34. package/dist/core/index.cjs +0 -1
  35. package/dist/core/index.js +0 -1
  36. package/dist/core/runtime.cjs +0 -1
  37. package/dist/core/runtime.js +0 -1
  38. package/dist/extension.cjs +257 -42
  39. package/dist/extension.cjs.map +1 -1
  40. package/dist/extension.js +243 -3
  41. package/dist/extension.js.map +1 -1
  42. package/dist/index.cjs +11 -153
  43. package/dist/index.cjs.map +1 -1
  44. package/dist/index.d.ts +2 -55
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +9 -90
  47. package/dist/index.js.map +1 -1
  48. package/dist/observability/Logger.d.ts +1 -1
  49. package/dist/observability/Logger.d.ts.map +1 -1
  50. package/dist/security.cjs +178 -11
  51. package/dist/security.cjs.map +1 -1
  52. package/dist/security.js +179 -2
  53. package/dist/security.js.map +1 -1
  54. package/dist/tools/skill/SkillMdParser.d.ts.map +1 -1
  55. package/dist/utils/cli/index.cjs +17 -17
  56. package/dist/utils/cli/index.js +3 -3
  57. package/package.json +2 -4
  58. package/dist/chunk-33N4Y6IS.cjs.map +0 -1
  59. package/dist/chunk-42UNSIZJ.js.map +0 -1
  60. package/dist/chunk-5QH7YY4Z.cjs.map +0 -1
  61. package/dist/chunk-DEDDPMBU.js +0 -3
  62. package/dist/chunk-DEDDPMBU.js.map +0 -1
  63. package/dist/chunk-DGE2AHYT.cjs +0 -261
  64. package/dist/chunk-DGE2AHYT.cjs.map +0 -1
  65. package/dist/chunk-DVYM6VRD.js.map +0 -1
  66. package/dist/chunk-EIIHED57.cjs.map +0 -1
  67. package/dist/chunk-FWWN4D2F.js +0 -3
  68. package/dist/chunk-FWWN4D2F.js.map +0 -1
  69. package/dist/chunk-GXFDYM3O.cjs.map +0 -1
  70. package/dist/chunk-ICHSEIZN.cjs +0 -4
  71. package/dist/chunk-ICHSEIZN.cjs.map +0 -1
  72. package/dist/chunk-JZ6LKSAS.js.map +0 -1
  73. package/dist/chunk-NKYFYALQ.js +0 -181
  74. package/dist/chunk-NKYFYALQ.js.map +0 -1
  75. package/dist/chunk-NOGGIM7B.cjs +0 -4
  76. package/dist/chunk-NOGGIM7B.cjs.map +0 -1
  77. package/dist/chunk-Q6W32HAP.js.map +0 -1
  78. package/dist/chunk-R55NXJIH.cjs +0 -184
  79. package/dist/chunk-R55NXJIH.cjs.map +0 -1
  80. package/dist/chunk-S4X4NJIP.js +0 -244
  81. package/dist/chunk-S4X4NJIP.js.map +0 -1
  82. package/dist/chunk-YL6RC7HQ.cjs +0 -4
  83. package/dist/chunk-YL6RC7HQ.cjs.map +0 -1
  84. package/dist/chunk-YLWTSNTT.js +0 -3
  85. package/dist/chunk-YLWTSNTT.js.map +0 -1
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunk5QH7YY4Z_cjs = require('./chunk-5QH7YY4Z.cjs');
4
- var chunkEIIHED57_cjs = require('./chunk-EIIHED57.cjs');
3
+ var chunkF4HS7H7K_cjs = require('./chunk-F4HS7H7K.cjs');
4
+ var chunk5HSGVA6S_cjs = require('./chunk-5HSGVA6S.cjs');
5
5
  var chunkUUNG3GL3_cjs = require('./chunk-UUNG3GL3.cjs');
6
- var chunk33N4Y6IS_cjs = require('./chunk-33N4Y6IS.cjs');
6
+ var chunkV2RD4BHT_cjs = require('./chunk-V2RD4BHT.cjs');
7
7
  var agentCommon = require('@easynet/agent-common');
8
8
  var tools = require('@langchain/core/tools');
9
9
  var url = require('url');
@@ -32,7 +32,7 @@ function buildIntent(toolName, inputSchema, args) {
32
32
  return {
33
33
  tool: toolName,
34
34
  args: hasArgsWrapper(inputSchema) ? { args } : args,
35
- purpose: chunk33N4Y6IS_cjs.LANGCHAIN_KIND
35
+ purpose: chunkV2RD4BHT_cjs.LANGCHAIN_KIND
36
36
  };
37
37
  }
38
38
  function normalizeArgs(args) {
@@ -119,7 +119,7 @@ function mergeHostLists(a, b) {
119
119
  return out;
120
120
  }
121
121
  function resolveEmbeddedToolConfigPath() {
122
- const moduleDir = path.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-GXFDYM3O.cjs', document.baseURI).href))));
122
+ const moduleDir = path.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-XW52LOLP.cjs', document.baseURI).href))));
123
123
  const candidates = [
124
124
  path.resolve(moduleDir, "../../config/tool.yaml"),
125
125
  // src/api -> config
@@ -142,9 +142,9 @@ function collectExtensionEmbeddedDefaults(exts) {
142
142
  ) ?? "";
143
143
  if (!configPath) continue;
144
144
  try {
145
- const toolDefaults = chunkEIIHED57_cjs.loadToolConfig(configPath).toolDefaults ?? {};
145
+ const toolDefaults = chunk5HSGVA6S_cjs.loadToolConfig(configPath).toolDefaults ?? {};
146
146
  if (Object.keys(toolDefaults).length === 0) continue;
147
- const manifest = chunk5QH7YY4Z_cjs.loadExtensionManifest(ext.packageRoot);
147
+ const manifest = chunkF4HS7H7K_cjs.loadExtensionManifest(ext.packageRoot);
148
148
  const ownToolNames = /* @__PURE__ */ new Set();
149
149
  for (const e of manifest.entries) {
150
150
  if (e.name) ownToolNames.add(e.name);
@@ -163,9 +163,9 @@ function collectExtensionEmbeddedDefaults(exts) {
163
163
  return merged;
164
164
  }
165
165
  function loadMergedToolConfig(overridePath) {
166
- const baseConfig = chunkEIIHED57_cjs.loadToolConfig(EMBEDDED_TOOL_CONFIG_PATH);
166
+ const baseConfig = chunk5HSGVA6S_cjs.loadToolConfig(EMBEDDED_TOOL_CONFIG_PATH);
167
167
  if (!overridePath) return baseConfig;
168
- const overrideConfig = chunkEIIHED57_cjs.loadToolConfig(overridePath);
168
+ const overrideConfig = chunk5HSGVA6S_cjs.loadToolConfig(overridePath);
169
169
  return agentCommon.deepMerge({}, baseConfig, overrideConfig);
170
170
  }
171
171
  function runtimeOptionsFromConfig(opts, toolConfig, configPathForResolve, extensionEmbeddedDefaults) {
@@ -173,7 +173,7 @@ function runtimeOptionsFromConfig(opts, toolConfig, configPathForResolve, extens
173
173
  {
174
174
  const updates = {};
175
175
  if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === "string") {
176
- updates.sandboxRoot = chunkEIIHED57_cjs.resolveSandboxedPath(configPathForResolve, toolConfig.sandboxedPath);
176
+ updates.sandboxRoot = chunk5HSGVA6S_cjs.resolveSandboxedPath(configPathForResolve, toolConfig.sandboxedPath);
177
177
  }
178
178
  if (typeof toolConfig.enableSandboxValidation === "boolean") {
179
179
  updates.enableSandboxValidation = toolConfig.enableSandboxValidation;
@@ -200,7 +200,7 @@ function runtimeOptionsFromConfig(opts, toolConfig, configPathForResolve, extens
200
200
  const packageDefaults = { ...coreTools.packageDefaults };
201
201
  if (toolConfig.packageToolDefaults != null && Object.keys(toolConfig.packageToolDefaults).length > 0) {
202
202
  for (const [descriptor, pkgConfig] of Object.entries(toolConfig.packageToolDefaults)) {
203
- const prefix = descriptor.startsWith("file:") ? chunkEIIHED57_cjs.fileDescriptorToPackagePrefix(descriptor) : chunkEIIHED57_cjs.npmDescriptorToPackagePrefixWithVersion(descriptor);
203
+ const prefix = descriptor.startsWith("file:") ? chunk5HSGVA6S_cjs.fileDescriptorToPackagePrefix(descriptor) : chunk5HSGVA6S_cjs.npmDescriptorToPackagePrefixWithVersion(descriptor);
204
204
  if (!prefix) continue;
205
205
  const pkgDefaults = pkgConfig?.defaults != null && typeof pkgConfig.defaults === "object" && !Array.isArray(pkgConfig.defaults) ? pkgConfig.defaults : {};
206
206
  if (Object.keys(pkgDefaults).length > 0) {
@@ -229,10 +229,10 @@ function buildRuntimeAndHub(options = {}) {
229
229
  const configPathForResolve = options.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;
230
230
  const mergedToolConfig = loadMergedToolConfig(options.configFilePath);
231
231
  const extensionEmbeddedDefaults = collectExtensionEmbeddedDefaults(
232
- chunkEIIHED57_cjs.loadAllExtensionsFromToolYamlSync(configPathForResolve)
232
+ chunk5HSGVA6S_cjs.loadAllExtensionsFromToolYamlSync(configPathForResolve)
233
233
  );
234
234
  const runtimeOpts = runtimeOptionsFromConfig(options, mergedToolConfig, configPathForResolve, extensionEmbeddedDefaults);
235
- const { runtime } = chunkEIIHED57_cjs.createRuntimeFromConfigSync(runtimeOpts);
235
+ const { runtime } = chunk5HSGVA6S_cjs.createRuntimeFromConfigSync(runtimeOpts);
236
236
  const hub = new LangChainToolsHub(runtime);
237
237
  return { runtime, hub, mergedToolConfig };
238
238
  }
@@ -242,61 +242,20 @@ function createLangChainAgentTools(options) {
242
242
  const names = Array.isArray(mergedToolConfig.tools) ? mergedToolConfig.tools : [];
243
243
  if (names.length > 0) {
244
244
  const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
245
- const allBarePackages = names.every((n) => chunkEIIHED57_cjs.isBarePackageDescriptor(String(n)));
245
+ const allBarePackages = names.every((n) => chunk5HSGVA6S_cjs.isBarePackageDescriptor(String(n)));
246
246
  if (allBarePackages) return hub.getLangChainTools();
247
- return hub.getLangChainToolsForNames(chunkEIIHED57_cjs.expandToolDescriptorsToRegistryNames(names, registryNames));
247
+ return hub.getLangChainToolsForNames(chunk5HSGVA6S_cjs.expandToolDescriptorsToRegistryNames(names, registryNames));
248
248
  }
249
249
  return hub.getLangChainTools();
250
250
  }
251
- async function createMcpServer(options) {
252
- const opts = typeof options === "string" ? { configFilePath: options } : options ?? {};
253
- const { runtime, mergedToolConfig } = buildRuntimeAndHub(opts);
254
- const serverOpts = {
255
- name: opts.name ?? mergedToolConfig.mcp?.name,
256
- version: opts.version ?? mergedToolConfig.mcp?.version,
257
- execContextFactory: opts.execContextFactory
258
- };
259
- const { server } = await chunkEIIHED57_cjs.createMCPServer(runtime, serverOpts);
260
- return server;
261
- }
262
- async function createOpenAPIServer(options) {
263
- const opts = typeof options === "string" ? { configFilePath: options } : options ?? {};
264
- const { runtime, mergedToolConfig } = buildRuntimeAndHub(opts);
265
- const serverOpts = {
266
- host: opts.host ?? mergedToolConfig.openapi?.host,
267
- port: opts.port ?? mergedToolConfig.openapi?.port,
268
- basePath: opts.basePath ?? mergedToolConfig.openapi?.basePath,
269
- execContextFactory: opts.execContextFactory
270
- };
271
- return chunkEIIHED57_cjs.createOpenAPIHttpServer(runtime, serverOpts);
272
- }
273
251
 
274
- // src/api/main.ts
275
- var langchainApi = {
276
- createLangChainAgentTools
277
- };
278
- var runtimeApi = {
279
- createRuntimeFromConfig: chunkEIIHED57_cjs.createRuntimeFromConfig,
280
- createRuntimeFromConfigSync: chunkEIIHED57_cjs.createRuntimeFromConfigSync
281
- };
282
- var mcpApi = {
283
- createMcpServer,
284
- createMCPServer: chunkEIIHED57_cjs.createMCPServer,
285
- runMCPServerOverStdio: chunkEIIHED57_cjs.runMCPServerOverStdio,
286
- createMCPStreamableHttpHandler: chunkEIIHED57_cjs.createMCPStreamableHttpHandler,
287
- createMCPServerStreamableHttp: chunkEIIHED57_cjs.createMCPServerStreamableHttp
288
- };
289
- var openApi = {
290
- createOpenAPIServer,
291
- createHttpService: chunkEIIHED57_cjs.createHttpService
292
- };
252
+ // src/api/register-tools.ts
253
+ function createAgentTools(options) {
254
+ const tools = createLangChainAgentTools(options);
255
+ agentCommon.getDefaultAgentContext().set(agentCommon.AgentContextTokens.Tools, tools);
256
+ return tools;
257
+ }
293
258
 
294
- exports.createLangChainAgentTools = createLangChainAgentTools;
295
- exports.createMcpServer = createMcpServer;
296
- exports.createOpenAPIServer = createOpenAPIServer;
297
- exports.langchainApi = langchainApi;
298
- exports.mcpApi = mcpApi;
299
- exports.openApi = openApi;
300
- exports.runtimeApi = runtimeApi;
301
- //# sourceMappingURL=chunk-GXFDYM3O.cjs.map
302
- //# sourceMappingURL=chunk-GXFDYM3O.cjs.map
259
+ exports.createAgentTools = createAgentTools;
260
+ //# sourceMappingURL=chunk-XW52LOLP.cjs.map
261
+ //# sourceMappingURL=chunk-XW52LOLP.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/adapters/LangChainToolsHub.ts","../src/api/createAgentTools.ts","../src/api/register-tools.ts"],"names":["LANGCHAIN_KIND","stripNullishObjectFields","enrichSpecWithCanonicalSchema","DynamicStructuredTool","dirname","fileURLToPath","resolve","existsSync","loadToolConfig","loadExtensionManifest","deepMerge","resolveSandboxedPath","fileDescriptorToPackagePrefix","npmDescriptorToPackagePrefixWithVersion","loadAllExtensionsFromToolYamlSync","createRuntimeFromConfigSync","isBarePackageDescriptor","expandToolDescriptorsToRegistryNames","getDefaultAgentContext","AgentContextTokens"],"mappings":"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","file":"chunk-XW52LOLP.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\";\nimport type { PTCRuntime } from \"../../core/runtime/PTCRuntime.js\";\nimport type { ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport type { ToolResult } from \"../../core/types/ToolResult.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\";\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\nfunction serializeToolResult(result: ToolResult): string {\n if (result.ok) {\n return typeof result.result === \"string\"\n ? result.result\n : JSON.stringify(result.result);\n }\n\n const err = result.error;\n const message = err?.message ?? \"Tool failed\";\n const details = err?.details;\n return JSON.stringify(\n details != null ? { error: message, details } : { error: message },\n );\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 serializeToolResult(result);\n },\n });\n }\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 } 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 npmDescriptorToPackagePrefixWithVersion,\n fileDescriptorToPackagePrefix,\n} from \"../tools/util/toolDescriptor.js\";\nimport { deepMerge } from \"@easynet/agent-common\";\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\";\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\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 toolDefaults 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 toolDefaults = loadToolConfig(configPath).toolDefaults ?? {};\n if (Object.keys(toolDefaults).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(toolDefaults)) {\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 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 < layer 1+3 toolDefaults\n const flatOverrides: Record<string, Record<string, unknown>> = {\n ...extensionEmbeddedDefaults,\n ...coreTools.toolOverrides,\n };\n if (Object.keys(extensionEmbeddedDefaults).length > 0) hasToolDefaults = true;\n if (toolConfig.toolDefaults != null && Object.keys(toolConfig.toolDefaults).length > 0) {\n Object.assign(flatOverrides, toolConfig.toolDefaults);\n hasToolDefaults = true;\n }\n const packageDefaults: Record<string, Record<string, unknown>> = { ...coreTools.packageDefaults };\n if (toolConfig.packageToolDefaults != null && Object.keys(toolConfig.packageToolDefaults).length > 0) {\n for (const [descriptor, pkgConfig] of Object.entries(toolConfig.packageToolDefaults)) {\n const prefix = descriptor.startsWith(\"file:\")\n ? fileDescriptorToPackagePrefix(descriptor)\n : npmDescriptorToPackagePrefixWithVersion(descriptor);\n if (!prefix) continue;\n const pkgDefaults =\n pkgConfig?.defaults != null && typeof pkgConfig.defaults === \"object\" && !Array.isArray(pkgConfig.defaults)\n ? (pkgConfig.defaults as Record<string, unknown>)\n : {};\n if (Object.keys(pkgDefaults).length > 0) {\n packageDefaults[prefix] = pkgDefaults;\n }\n const toolConfigs = pkgConfig?.tools != null && typeof pkgConfig.tools === \"object\" && !Array.isArray(pkgConfig.tools) ? pkgConfig.tools : {};\n for (const [toolName, config] of Object.entries(toolConfigs)) {\n if (config != null && typeof config === \"object\") {\n hasToolDefaults = true;\n flatOverrides[`${prefix}::${toolName}`] = { ...pkgDefaults, ...(config as Record<string, unknown>) };\n }\n }\n }\n if (Object.keys(packageDefaults).length > 0) {\n updates.packageDefaults = packageDefaults;\n }\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(opts);\n\n const names = Array.isArray(mergedToolConfig.tools) ? mergedToolConfig.tools : [];\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, getDefaultAgentContext } from \"@easynet/agent-common\";\nimport { createLangChainAgentTools, type CreateAgentToolsOptions } from \"./createAgentTools.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): unknown[] {\n const tools = createLangChainAgentTools(options);\n getDefaultAgentContext().set(AgentContextTokens.Tools, tools);\n return tools;\n}\n"]}
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
2
 
3
- require('../chunk-ICHSEIZN.cjs');
4
3
  var chunkQEJF3KDV_cjs = require('../chunk-QEJF3KDV.cjs');
5
4
 
6
5
 
@@ -1,4 +1,3 @@
1
- import '../chunk-YLWTSNTT.js';
2
1
  export { DEFAULT_INPUT_SCHEMA, DEFAULT_OUTPUT_SCHEMA, createToolSpec } from '../chunk-ODEHUAR4.js';
3
2
  //# sourceMappingURL=index.js.map
4
3
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
2
 
3
- require('../chunk-NOGGIM7B.cjs');
4
3
  var chunkPYCCJF7C_cjs = require('../chunk-PYCCJF7C.cjs');
5
4
  var chunkXPGHS4W7_cjs = require('../chunk-XPGHS4W7.cjs');
6
5
  require('../chunk-QEJF3KDV.cjs');
@@ -1,4 +1,3 @@
1
- import '../chunk-DEDDPMBU.js';
2
1
  export { ToolRegistry } from '../chunk-WUMLZERG.js';
3
2
  export { createTaggedError, isRetryable, withRetry } from '../chunk-RZTTO5MQ.js';
4
3
  import '../chunk-ODEHUAR4.js';
@@ -1,59 +1,274 @@
1
1
  'use strict';
2
2
 
3
- var chunkDGE2AHYT_cjs = require('./chunk-DGE2AHYT.cjs');
4
- var chunk5QH7YY4Z_cjs = require('./chunk-5QH7YY4Z.cjs');
5
- require('./chunk-LHKEJNKL.cjs');
3
+ var chunkF4HS7H7K_cjs = require('./chunk-F4HS7H7K.cjs');
4
+ var chunkLHKEJNKL_cjs = require('./chunk-LHKEJNKL.cjs');
6
5
  require('./chunk-QEJF3KDV.cjs');
6
+ var async_hooks = require('async_hooks');
7
+ var path4 = require('path');
8
+ var url = require('url');
9
+ var fs = require('fs');
10
+ var agentCommon = require('@easynet/agent-common');
7
11
 
12
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
13
 
14
+ var path4__default = /*#__PURE__*/_interopDefault(path4);
15
+
16
+ function createContextRunner() {
17
+ const storage = new async_hooks.AsyncLocalStorage();
18
+ return {
19
+ runWith(ctx, fn) {
20
+ return storage.run(ctx, fn);
21
+ },
22
+ getContext() {
23
+ const ctx = storage.getStore();
24
+ if (ctx === void 0) {
25
+ throw new Error("Extension context not set; invoke only through the extension adapter.");
26
+ }
27
+ return ctx;
28
+ }
29
+ };
30
+ }
31
+ function unwrapArgsForHandler(spec, args) {
32
+ if (args == null || typeof args !== "object" || Array.isArray(args)) return args;
33
+ const s = spec.inputSchema;
34
+ if (s?.type !== "object" || !s.properties || typeof s.properties !== "object") return args;
35
+ const props = s.properties;
36
+ const argsProp = props.args;
37
+ if (argsProp != null && typeof argsProp === "object" && argsProp.type === "object" && argsProp.properties != null) {
38
+ const obj = args;
39
+ if (Object.keys(obj).length === 1 && "args" in obj && typeof obj.args === "object" && obj.args !== null) {
40
+ return obj.args;
41
+ }
42
+ }
43
+ return args;
44
+ }
45
+ function createDynamicImportAdapter(options) {
46
+ const { kind, packageRoot, getExtensionContext, contextRunner } = options;
47
+ return {
48
+ kind,
49
+ async invoke(spec, args, execCtx) {
50
+ const meta = spec._meta;
51
+ const sourcePath = meta?.sourcePath;
52
+ const exportName = meta?.exportName;
53
+ if (!sourcePath || !exportName) {
54
+ throw new Error(`Extension tool ${spec.name} missing _meta.sourcePath or _meta.exportName`);
55
+ }
56
+ const defaultArgs = meta?.defaultArgs ?? {};
57
+ const mergedArgs = Object.keys(defaultArgs).length === 0 ? args : { ...defaultArgs, ...args };
58
+ const handlerArgs = unwrapArgsForHandler(spec, mergedArgs);
59
+ const resolvedPackageRoot = meta?.packageRoot ?? packageRoot;
60
+ const modulePath = path4__default.default.join(resolvedPackageRoot, `${sourcePath}.js`);
61
+ const mod = await import(url.pathToFileURL(modulePath).href);
62
+ const handler = mod[exportName];
63
+ if (typeof handler !== "function") {
64
+ throw new Error(
65
+ `Extension tool ${spec.name}: export "${exportName}" from ${sourcePath} is not a function`
66
+ );
67
+ }
68
+ const ctx = getExtensionContext(execCtx, spec, mergedArgs);
69
+ const output = await contextRunner.runWith(ctx, () => handler(handlerArgs));
70
+ return {
71
+ result: { result: output.result, evidence: output.evidence },
72
+ raw: { evidence: output.evidence }
73
+ };
74
+ }
75
+ };
76
+ }
77
+ function resolveExtensionPackageRoot(metaUrlOrPath) {
78
+ const dir = metaUrlOrPath.startsWith("file:") ? path4__default.default.dirname(url.fileURLToPath(metaUrlOrPath)) : path4__default.default.resolve(metaUrlOrPath);
79
+ const dist = path4__default.default.join(dir, "dist");
80
+ return fs.existsSync(dist) ? dist : dir;
81
+ }
82
+
83
+ // src/api/extension/registerExtension.ts
84
+ function registerExtension(registry, options) {
85
+ const { packagePath, kind: kindOpt, config, getContextRunner, only, namePrefixes } = options;
86
+ const packageRoot = resolveExtensionPackageRoot(packagePath);
87
+ const contextRunner = getContextRunner();
88
+ const loaded = chunkF4HS7H7K_cjs.loadExtensionManifest(packagePath);
89
+ const kind = kindOpt ?? loaded.kind ?? "extension";
90
+ chunkF4HS7H7K_cjs.registerToolsFromManifest(registry, {
91
+ manifestPathOrDir: packagePath,
92
+ kind,
93
+ only,
94
+ namePrefixes,
95
+ packageRoot
96
+ });
97
+ const adapter = createDynamicImportAdapter({
98
+ kind,
99
+ packageRoot,
100
+ getExtensionContext: (execCtx, spec, mergedArgs) => {
101
+ const defaultArgs = spec._meta?.defaultArgs ?? {};
102
+ const baseConfig = config !== void 0 ? config : {};
103
+ const toolOverrides = baseConfig?.toolOverrides;
104
+ const shortName = spec._meta?.shortName ?? spec.name;
105
+ const prefixWithVersion = shortName && spec.name.endsWith(shortName) && spec.name.length > shortName.length ? spec.name.slice(0, spec.name.length - shortName.length - 1) : "";
106
+ const parts = prefixWithVersion ? prefixWithVersion.split(".") : [];
107
+ const packageScopedKey = parts.length > 1 ? `${parts.slice(0, -1).join(".")}::${shortName}` : "";
108
+ const perTool = toolOverrides?.[spec.name] ?? (packageScopedKey ? toolOverrides?.[packageScopedKey] : void 0) ?? toolOverrides?.[shortName] ?? {};
109
+ const packagePrefix = parts.length > 1 ? parts.slice(0, -1).join(".") : "";
110
+ const packageDefaults = baseConfig?.packageDefaults;
111
+ const packageDefaultsForPkg = (packagePrefix && packageDefaults?.[packagePrefix]) ?? (prefixWithVersion && packageDefaults?.[prefixWithVersion]) ?? {};
112
+ const baseWithoutOverrides = { ...baseConfig };
113
+ delete baseWithoutOverrides.toolOverrides;
114
+ delete baseWithoutOverrides.packageDefaults;
115
+ const resolvedConfig = {
116
+ ...defaultArgs,
117
+ ...baseWithoutOverrides,
118
+ ...packageDefaultsForPkg,
119
+ ...perTool,
120
+ ...mergedArgs ?? {}
121
+ };
122
+ return { execCtx, config: resolvedConfig };
123
+ },
124
+ contextRunner: {
125
+ runWith(ctx, fn) {
126
+ return contextRunner.runWith(ctx, fn);
127
+ }
128
+ }
129
+ });
130
+ return adapter;
131
+ }
132
+
133
+ // src/api/extension/createExtension.ts
134
+ function resolvePackagePath(options) {
135
+ if (options.packagePath != null && options.packagePath !== "") return options.packagePath;
136
+ if (options.importMeta?.url) return path4__default.default.dirname(url.fileURLToPath(options.importMeta.url));
137
+ throw new Error("createExtension: provide packagePath or importMeta");
138
+ }
139
+ function createExtension(options) {
140
+ const packagePath = resolvePackagePath(options);
141
+ const kind = options.kind;
142
+ const buildConfig = "buildConfig" in options ? options.buildConfig : void 0;
143
+ const contextRunner = createContextRunner();
144
+ return {
145
+ register(registry, userConfigOrOpts, opts) {
146
+ const config = buildConfig ? buildConfig(userConfigOrOpts) : userConfigOrOpts;
147
+ return registerExtension(registry, {
148
+ packagePath,
149
+ kind,
150
+ config,
151
+ getContextRunner: () => contextRunner,
152
+ only: opts?.only ?? userConfigOrOpts?.only,
153
+ namePrefixes: opts?.namePrefixes ?? userConfigOrOpts?.namePrefixes
154
+ });
155
+ },
156
+ getContext() {
157
+ return contextRunner.getContext();
158
+ },
159
+ runWith(ctx, fn) {
160
+ return contextRunner.runWith(ctx, fn);
161
+ }
162
+ };
163
+ }
164
+ function copyToolYamlRecursive(srcDir, destDir) {
165
+ if (!fs.existsSync(srcDir)) return 0;
166
+ let copied = 0;
167
+ for (const e of fs.readdirSync(srcDir, { withFileTypes: true })) {
168
+ const srcPath = path4__default.default.join(srcDir, e.name);
169
+ const destPath = path4__default.default.join(destDir, e.name);
170
+ if (e.isFile() && (e.name.endsWith(".tool.yaml") || e.name.endsWith(".example.yaml"))) {
171
+ if (!fs.existsSync(destDir)) fs.mkdirSync(destDir, { recursive: true });
172
+ fs.copyFileSync(srcPath, destPath);
173
+ copied++;
174
+ } else if (e.isDirectory()) {
175
+ copied += copyToolYamlRecursive(srcPath, destPath);
176
+ }
177
+ }
178
+ return copied;
179
+ }
180
+ function generateExtensionManifest(projectRoot = process.cwd(), options = {}) {
181
+ const root = path4__default.default.resolve(projectRoot);
182
+ const outDir = path4__default.default.resolve(options.outDir ?? path4__default.default.join(root, "dist"));
183
+ const kind = options.kind ?? "core";
184
+ const { specs, errors } = chunkLHKEJNKL_cjs.scanForTools({
185
+ projectPath: root,
186
+ include: options.include ?? ["**/*.ts"],
187
+ tsconfigPath: options.tsconfigPath
188
+ });
189
+ if (errors.length > 0) {
190
+ console.warn("generateExtensionManifest: scan errors", errors);
191
+ }
192
+ const entries = specs.map((spec) => {
193
+ const sourcePathNoExt = (spec.sourcePath ?? "").replace(/\.(ts|tsx)$/i, "");
194
+ const pathBasedName = sourcePathNoExt.replace(/^src\//, "").replace(/\//g, ".");
195
+ const name = spec.exportName ?? pathBasedName;
196
+ const sideEffect = spec._meta?.hitl?.sideEffect ?? "none";
197
+ return {
198
+ name,
199
+ description: spec.description ?? sourcePathNoExt,
200
+ inputSchema: spec.inputSchema ?? { type: "object", additionalProperties: true },
201
+ outputSchema: spec.outputSchema ?? { type: "object", additionalProperties: true },
202
+ sourcePath: sourcePathNoExt,
203
+ exportName: spec.exportName ?? "",
204
+ sideEffect
205
+ };
206
+ });
207
+ if (!fs.existsSync(outDir)) fs.mkdirSync(outDir, { recursive: true });
208
+ const manifestPath = path4__default.default.join(outDir, "core-tools-manifest.json");
209
+ fs.writeFileSync(
210
+ manifestPath,
211
+ JSON.stringify({ kind, tools: entries }, null, 2),
212
+ "utf-8"
213
+ );
214
+ let toolYamlCopied = 0;
215
+ const copyDirs = options.copyToolYamlDirs;
216
+ if (copyDirs?.length) {
217
+ for (const d of copyDirs) {
218
+ const srcDir = path4__default.default.join(root, d);
219
+ const destDir = path4__default.default.join(outDir, d);
220
+ try {
221
+ toolYamlCopied += copyToolYamlRecursive(srcDir, destDir);
222
+ } catch {
223
+ }
224
+ }
225
+ }
226
+ return { manifestPath, toolsCount: entries.length, toolYamlCopied };
227
+ }
228
+ function generateManifest(projectRoot = process.cwd(), options = {}) {
229
+ const { manifestPath, toolsCount, toolYamlCopied } = generateExtensionManifest(projectRoot, {
230
+ include: ["src/**/*.ts"],
231
+ copyToolYamlDirs: ["src"],
232
+ ...options
233
+ });
234
+ console.log(`Wrote ${toolsCount} tools to ${path4__default.default.relative(projectRoot, manifestPath)}`);
235
+ if (toolYamlCopied > 0) console.log(`Copied ${toolYamlCopied} .tool.yaml/.example.yaml file(s) to dist`);
236
+ }
237
+
238
+ // src/api/extension/groupPrefix.ts
239
+ function getGroupNamePrefixes(options) {
240
+ const { groups, only, groupPrefixMap } = options;
241
+ const onlySet = only?.length ? new Set(only) : null;
242
+ const namePrefixes = !onlySet && groups?.length ? groups.map((g) => groupPrefixMap[g]).filter((x) => x != null) : void 0;
243
+ return {
244
+ ...onlySet ? { only: Array.from(onlySet) } : {},
245
+ ...namePrefixes?.length ? { namePrefixes } : {}
246
+ };
247
+ }
9
248
 
10
- Object.defineProperty(exports, "createContextRunner", {
11
- enumerable: true,
12
- get: function () { return chunkDGE2AHYT_cjs.createContextRunner; }
13
- });
14
- Object.defineProperty(exports, "createDynamicImportAdapter", {
15
- enumerable: true,
16
- get: function () { return chunkDGE2AHYT_cjs.createDynamicImportAdapter; }
17
- });
18
- Object.defineProperty(exports, "createExtension", {
19
- enumerable: true,
20
- get: function () { return chunkDGE2AHYT_cjs.createExtension; }
21
- });
22
- Object.defineProperty(exports, "generateExtensionManifest", {
23
- enumerable: true,
24
- get: function () { return chunkDGE2AHYT_cjs.generateExtensionManifest; }
25
- });
26
- Object.defineProperty(exports, "generateManifest", {
27
- enumerable: true,
28
- get: function () { return chunkDGE2AHYT_cjs.generateManifest; }
29
- });
30
- Object.defineProperty(exports, "getGroupNamePrefixes", {
31
- enumerable: true,
32
- get: function () { return chunkDGE2AHYT_cjs.getGroupNamePrefixes; }
33
- });
34
- Object.defineProperty(exports, "overrideWithConfig", {
35
- enumerable: true,
36
- get: function () { return chunkDGE2AHYT_cjs.overrideWithConfig; }
37
- });
38
- Object.defineProperty(exports, "registerExtension", {
39
- enumerable: true,
40
- get: function () { return chunkDGE2AHYT_cjs.registerExtension; }
41
- });
42
- Object.defineProperty(exports, "resolveExtensionPackageRoot", {
43
- enumerable: true,
44
- get: function () { return chunkDGE2AHYT_cjs.resolveExtensionPackageRoot; }
45
- });
46
249
  Object.defineProperty(exports, "loadExtensionManifest", {
47
250
  enumerable: true,
48
- get: function () { return chunk5QH7YY4Z_cjs.loadExtensionManifest; }
251
+ get: function () { return chunkF4HS7H7K_cjs.loadExtensionManifest; }
49
252
  });
50
253
  Object.defineProperty(exports, "loadToolYaml", {
51
254
  enumerable: true,
52
- get: function () { return chunk5QH7YY4Z_cjs.loadToolYaml; }
255
+ get: function () { return chunkF4HS7H7K_cjs.loadToolYaml; }
53
256
  });
54
257
  Object.defineProperty(exports, "registerToolsFromManifest", {
55
258
  enumerable: true,
56
- get: function () { return chunk5QH7YY4Z_cjs.registerToolsFromManifest; }
259
+ get: function () { return chunkF4HS7H7K_cjs.registerToolsFromManifest; }
260
+ });
261
+ Object.defineProperty(exports, "overrideWithConfig", {
262
+ enumerable: true,
263
+ get: function () { return agentCommon.overrideWithConfig; }
57
264
  });
265
+ exports.createContextRunner = createContextRunner;
266
+ exports.createDynamicImportAdapter = createDynamicImportAdapter;
267
+ exports.createExtension = createExtension;
268
+ exports.generateExtensionManifest = generateExtensionManifest;
269
+ exports.generateManifest = generateManifest;
270
+ exports.getGroupNamePrefixes = getGroupNamePrefixes;
271
+ exports.registerExtension = registerExtension;
272
+ exports.resolveExtensionPackageRoot = resolveExtensionPackageRoot;
58
273
  //# sourceMappingURL=extension.cjs.map
59
274
  //# sourceMappingURL=extension.cjs.map