@easynet/agent-tool 1.0.61 → 1.0.63

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 (70) hide show
  1. package/dist/api/adapters/LangChainToolsHub.d.ts.map +1 -1
  2. package/dist/api/expose/extension-init/initExtension.d.ts.map +1 -1
  3. package/dist/api/main.cjs +29 -13
  4. package/dist/api/main.d.ts +34 -0
  5. package/dist/api/main.d.ts.map +1 -1
  6. package/dist/api/main.js +2 -2
  7. package/dist/api/runtimeFromConfig.d.ts +2 -5
  8. package/dist/api/runtimeFromConfig.d.ts.map +1 -1
  9. package/dist/api/runtimeFromConfig.helpers.d.ts +12 -0
  10. package/dist/api/runtimeFromConfig.helpers.d.ts.map +1 -0
  11. package/dist/build.cjs +1 -0
  12. package/dist/build.js +1 -0
  13. package/dist/chunk-DEDDPMBU.js +3 -0
  14. package/dist/chunk-DEDDPMBU.js.map +1 -0
  15. package/dist/chunk-FWWN4D2F.js +3 -0
  16. package/dist/chunk-FWWN4D2F.js.map +1 -0
  17. package/dist/chunk-ICHSEIZN.cjs +4 -0
  18. package/dist/chunk-ICHSEIZN.cjs.map +1 -0
  19. package/dist/{chunk-HK4GTFTQ.cjs → chunk-M2GEHWPN.cjs} +41 -40
  20. package/dist/chunk-M2GEHWPN.cjs.map +1 -0
  21. package/dist/chunk-NKYFYALQ.js +181 -0
  22. package/dist/chunk-NKYFYALQ.js.map +1 -0
  23. package/dist/chunk-NOGGIM7B.cjs +4 -0
  24. package/dist/chunk-NOGGIM7B.cjs.map +1 -0
  25. package/dist/chunk-R55NXJIH.cjs +184 -0
  26. package/dist/chunk-R55NXJIH.cjs.map +1 -0
  27. package/dist/{chunk-NVT4X4CB.js → chunk-RJAF5XY6.js} +40 -39
  28. package/dist/chunk-RJAF5XY6.js.map +1 -0
  29. package/dist/{chunk-ZH5MH3AK.cjs → chunk-U67QDQFQ.cjs} +73 -41
  30. package/dist/chunk-U67QDQFQ.cjs.map +1 -0
  31. package/dist/chunk-WO4LZKPQ.cjs +359 -0
  32. package/dist/chunk-WO4LZKPQ.cjs.map +1 -0
  33. package/dist/chunk-YL6RC7HQ.cjs +4 -0
  34. package/dist/chunk-YL6RC7HQ.cjs.map +1 -0
  35. package/dist/chunk-YLWTSNTT.js +3 -0
  36. package/dist/chunk-YLWTSNTT.js.map +1 -0
  37. package/dist/{chunk-QPKBEU64.js → chunk-YMHUDRYE.js} +59 -31
  38. package/dist/chunk-YMHUDRYE.js.map +1 -0
  39. package/dist/chunk-YPGF5Y2Y.js +341 -0
  40. package/dist/chunk-YPGF5Y2Y.js.map +1 -0
  41. package/dist/core/index.cjs +1 -0
  42. package/dist/core/index.js +1 -0
  43. package/dist/core/runtime.cjs +1 -0
  44. package/dist/core/runtime.js +1 -0
  45. package/dist/extension.cjs +54 -355
  46. package/dist/extension.cjs.map +1 -1
  47. package/dist/extension.js +3 -339
  48. package/dist/extension.js.map +1 -1
  49. package/dist/index.cjs +96 -17
  50. package/dist/index.cjs.map +1 -1
  51. package/dist/index.d.ts +50 -1
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +59 -7
  54. package/dist/index.js.map +1 -1
  55. package/dist/security.cjs +11 -178
  56. package/dist/security.cjs.map +1 -1
  57. package/dist/security.js +2 -179
  58. package/dist/security.js.map +1 -1
  59. package/dist/utils/cli/help.d.ts +2 -0
  60. package/dist/utils/cli/help.d.ts.map +1 -0
  61. package/dist/utils/cli/index.cjs +95 -73
  62. package/dist/utils/cli/index.cjs.map +1 -1
  63. package/dist/utils/cli/index.d.ts.map +1 -1
  64. package/dist/utils/cli/index.js +84 -62
  65. package/dist/utils/cli/index.js.map +1 -1
  66. package/package.json +3 -3
  67. package/dist/chunk-HK4GTFTQ.cjs.map +0 -1
  68. package/dist/chunk-NVT4X4CB.js.map +0 -1
  69. package/dist/chunk-QPKBEU64.js.map +0 -1
  70. package/dist/chunk-ZH5MH3AK.cjs.map +0 -1
@@ -1,28 +1,48 @@
1
1
  'use strict';
2
2
 
3
- var chunkHK4GTFTQ_cjs = require('./chunk-HK4GTFTQ.cjs');
3
+ var chunkM2GEHWPN_cjs = require('./chunk-M2GEHWPN.cjs');
4
4
  var chunkUUNG3GL3_cjs = require('./chunk-UUNG3GL3.cjs');
5
5
  var chunkOG5ZSXQ5_cjs = require('./chunk-OG5ZSXQ5.cjs');
6
6
  var tools = require('@langchain/core/tools');
7
7
  var agentCommon = require('@easynet/agent-common');
8
8
 
9
- function hasArgsWrapper(inputSchema) {
9
+ function getArgsSchemaIfWrapped(inputSchema) {
10
10
  const s = inputSchema;
11
- if (s?.type !== "object" || !s.properties || typeof s.properties !== "object") return false;
11
+ if (s?.type !== "object" || !s.properties || typeof s.properties !== "object") return null;
12
12
  const args = s.properties.args;
13
- return args != null && typeof args === "object" && args.type === "object" && args.properties != null;
13
+ if (args != null && typeof args === "object" && args.type === "object" && args.properties != null) {
14
+ return args;
15
+ }
16
+ return null;
17
+ }
18
+ function hasArgsWrapper(inputSchema) {
19
+ return getArgsSchemaIfWrapped(inputSchema) !== null;
14
20
  }
15
21
  function schemaForLangChain(inputSchema) {
16
- const s = inputSchema;
17
- if (s?.type !== "object" || !s.properties || typeof s.properties !== "object") {
18
- return s;
19
- }
20
- const props = s.properties;
21
- const args = props.args;
22
- if (hasArgsWrapper(inputSchema)) {
23
- return args;
22
+ const wrapped = getArgsSchemaIfWrapped(inputSchema);
23
+ if (wrapped !== null) return wrapped;
24
+ return inputSchema;
25
+ }
26
+ function buildIntent(toolName, inputSchema, args) {
27
+ return {
28
+ tool: toolName,
29
+ args: hasArgsWrapper(inputSchema) ? { args } : args,
30
+ purpose: chunkOG5ZSXQ5_cjs.LANGCHAIN_KIND
31
+ };
32
+ }
33
+ function normalizeArgs(args) {
34
+ return agentCommon.stripNullishObjectFields(args ?? {});
35
+ }
36
+ function serializeToolResult(result) {
37
+ if (result.ok) {
38
+ return typeof result.result === "string" ? result.result : JSON.stringify(result.result);
24
39
  }
25
- return s;
40
+ const err = result.error;
41
+ const message = err?.message ?? "Tool failed";
42
+ const details = err?.details;
43
+ return JSON.stringify(
44
+ details != null ? { error: message, details } : { error: message }
45
+ );
26
46
  }
27
47
  var DEFAULT_CTX_FACTORY = () => ({
28
48
  requestId: `lc-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,
@@ -71,23 +91,11 @@ var LangChainToolsHub = class {
71
91
  description: spec.description ?? `Tool: ${spec.name}`,
72
92
  schema,
73
93
  func: async (args) => {
74
- const flat = agentCommon.stripNullishObjectFields(args ?? {});
75
- const intent = {
76
- tool: spec.name,
77
- args: hasArgsWrapper(enriched.inputSchema) ? { args: flat } : flat,
78
- purpose: chunkOG5ZSXQ5_cjs.LANGCHAIN_KIND
79
- };
94
+ const normalizedArgs = normalizeArgs(args);
95
+ const intent = buildIntent(spec.name, enriched.inputSchema, normalizedArgs);
80
96
  const ctx = ctxFactory();
81
97
  const result = await runtime.invoke(intent, ctx);
82
- if (result.ok) {
83
- return typeof result.result === "string" ? result.result : JSON.stringify(result.result);
84
- }
85
- const err = result.error;
86
- const message = err?.message ?? "Tool failed";
87
- const details = err?.details;
88
- return JSON.stringify(
89
- details != null ? { error: message, details } : { error: message }
90
- );
98
+ return serializeToolResult(result);
91
99
  }
92
100
  });
93
101
  }
@@ -110,10 +118,10 @@ function mergeHostLists(a, b) {
110
118
  function runtimeOptionsFromConfig(opts) {
111
119
  const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [], enableSandboxValidation: false };
112
120
  if (opts.configFilePath) {
113
- const toolConfig = chunkHK4GTFTQ_cjs.loadToolConfig(opts.configFilePath);
121
+ const toolConfig = chunkM2GEHWPN_cjs.loadToolConfig(opts.configFilePath);
114
122
  const updates = {};
115
123
  if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === "string") {
116
- updates.sandboxRoot = chunkHK4GTFTQ_cjs.resolveSandboxedPath(opts.configFilePath, toolConfig.sandboxedPath);
124
+ updates.sandboxRoot = chunkM2GEHWPN_cjs.resolveSandboxedPath(opts.configFilePath, toolConfig.sandboxedPath);
117
125
  }
118
126
  if (typeof toolConfig.enableSandboxValidation === "boolean") {
119
127
  updates.enableSandboxValidation = toolConfig.enableSandboxValidation;
@@ -136,7 +144,7 @@ function runtimeOptionsFromConfig(opts) {
136
144
  const packageDefaults = { ...coreTools.packageDefaults };
137
145
  if (toolConfig.packageToolDefaults != null && Object.keys(toolConfig.packageToolDefaults).length > 0) {
138
146
  for (const [descriptor, pkgConfig] of Object.entries(toolConfig.packageToolDefaults)) {
139
- const prefix = descriptor.startsWith("file:") ? chunkHK4GTFTQ_cjs.fileDescriptorToPackagePrefix(descriptor) : chunkHK4GTFTQ_cjs.npmDescriptorToPackagePrefixWithVersion(descriptor);
147
+ const prefix = descriptor.startsWith("file:") ? chunkM2GEHWPN_cjs.fileDescriptorToPackagePrefix(descriptor) : chunkM2GEHWPN_cjs.npmDescriptorToPackagePrefixWithVersion(descriptor);
140
148
  if (!prefix) continue;
141
149
  const pkgDefaults = pkgConfig?.defaults != null && typeof pkgConfig.defaults === "object" && !Array.isArray(pkgConfig.defaults) ? pkgConfig.defaults : {};
142
150
  if (Object.keys(pkgDefaults).length > 0) {
@@ -166,18 +174,18 @@ function runtimeOptionsFromConfig(opts) {
166
174
  function createAgentTools(options) {
167
175
  const opts = typeof options === "string" ? { configFilePath: options } : options ?? {};
168
176
  const runtimeOpts = runtimeOptionsFromConfig(opts);
169
- const { runtime } = chunkHK4GTFTQ_cjs.createRuntimeFromConfigSync(runtimeOpts);
177
+ const { runtime } = chunkM2GEHWPN_cjs.createRuntimeFromConfigSync(runtimeOpts);
170
178
  const hub = new LangChainToolsHub(runtime);
171
179
  if (opts.configFilePath) {
172
- const toolConfig = chunkHK4GTFTQ_cjs.loadToolConfig(opts.configFilePath);
180
+ const toolConfig = chunkM2GEHWPN_cjs.loadToolConfig(opts.configFilePath);
173
181
  const names = Array.isArray(toolConfig.tools) ? toolConfig.tools : [];
174
182
  if (names.length > 0) {
175
183
  const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
176
- const allBarePackages = names.every((n) => chunkHK4GTFTQ_cjs.isBarePackageDescriptor(String(n)));
184
+ const allBarePackages = names.every((n) => chunkM2GEHWPN_cjs.isBarePackageDescriptor(String(n)));
177
185
  if (allBarePackages) {
178
186
  return hub.getLangChainTools();
179
187
  }
180
- const expanded = chunkHK4GTFTQ_cjs.expandToolDescriptorsToRegistryNames(names, registryNames);
188
+ const expanded = chunkM2GEHWPN_cjs.expandToolDescriptorsToRegistryNames(names, registryNames);
181
189
  return hub.getLangChainToolsForNames(expanded);
182
190
  }
183
191
  }
@@ -185,25 +193,49 @@ function createAgentTools(options) {
185
193
  }
186
194
  async function createLangChainToolsAsync(options = {}) {
187
195
  const runtimeOpts = runtimeOptionsFromConfig(options);
188
- const { runtime } = await chunkHK4GTFTQ_cjs.createRuntimeFromConfig(runtimeOpts);
196
+ const { runtime } = await chunkM2GEHWPN_cjs.createRuntimeFromConfig(runtimeOpts);
189
197
  const hub = new LangChainToolsHub(runtime);
190
198
  if (options.configFilePath) {
191
- const toolConfig = chunkHK4GTFTQ_cjs.loadToolConfig(options.configFilePath);
199
+ const toolConfig = chunkM2GEHWPN_cjs.loadToolConfig(options.configFilePath);
192
200
  const names = Array.isArray(toolConfig.tools) ? toolConfig.tools : [];
193
201
  if (names.length > 0) {
194
202
  const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
195
- const allBarePackages = names.every((n) => chunkHK4GTFTQ_cjs.isBarePackageDescriptor(String(n)));
203
+ const allBarePackages = names.every((n) => chunkM2GEHWPN_cjs.isBarePackageDescriptor(String(n)));
196
204
  if (allBarePackages) {
197
205
  return hub.getLangChainTools();
198
206
  }
199
- const expanded = chunkHK4GTFTQ_cjs.expandToolDescriptorsToRegistryNames(names, registryNames);
207
+ const expanded = chunkM2GEHWPN_cjs.expandToolDescriptorsToRegistryNames(names, registryNames);
200
208
  return hub.getLangChainToolsForNames(expanded);
201
209
  }
202
210
  }
203
211
  return hub.getLangChainTools();
204
212
  }
205
213
 
214
+ // src/api/main.ts
215
+ var langchainApi = {
216
+ createAgentTools,
217
+ createLangChainToolsAsync
218
+ };
219
+ var runtimeApi = {
220
+ createRuntimeFromConfig: chunkM2GEHWPN_cjs.createRuntimeFromConfig,
221
+ createRuntimeFromConfigSync: chunkM2GEHWPN_cjs.createRuntimeFromConfigSync
222
+ };
223
+ var mcpApi = {
224
+ createMCPServer: chunkM2GEHWPN_cjs.createMCPServer,
225
+ runMCPServerOverStdio: chunkM2GEHWPN_cjs.runMCPServerOverStdio,
226
+ createMCPStreamableHttpHandler: chunkM2GEHWPN_cjs.createMCPStreamableHttpHandler,
227
+ createMCPServerStreamableHttp: chunkM2GEHWPN_cjs.createMCPServerStreamableHttp
228
+ };
229
+ var openApi = {
230
+ createOpenAPIServer: chunkM2GEHWPN_cjs.createHttpService,
231
+ createHttpService: chunkM2GEHWPN_cjs.createHttpService
232
+ };
233
+
206
234
  exports.createAgentTools = createAgentTools;
207
235
  exports.createLangChainToolsAsync = createLangChainToolsAsync;
208
- //# sourceMappingURL=chunk-ZH5MH3AK.cjs.map
209
- //# sourceMappingURL=chunk-ZH5MH3AK.cjs.map
236
+ exports.langchainApi = langchainApi;
237
+ exports.mcpApi = mcpApi;
238
+ exports.openApi = openApi;
239
+ exports.runtimeApi = runtimeApi;
240
+ //# sourceMappingURL=chunk-U67QDQFQ.cjs.map
241
+ //# sourceMappingURL=chunk-U67QDQFQ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/adapters/LangChainToolsHub.ts","../src/api/createAgentTools.ts","../src/api/main.ts"],"names":["LANGCHAIN_KIND","stripNullishObjectFields","enrichSpecWithCanonicalSchema","DynamicStructuredTool","loadToolConfig","resolveSandboxedPath","fileDescriptorToPackagePrefix","npmDescriptorToPackagePrefixWithVersion","createRuntimeFromConfigSync","isBarePackageDescriptor","expandToolDescriptorsToRegistryNames","createRuntimeFromConfig","createMCPServer","runMCPServerOverStdio","createMCPStreamableHttpHandler","createMCPServerStreamableHttp","createHttpService"],"mappings":"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","file":"chunk-U67QDQFQ.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() which loads from tools.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 * Create LangChain tools from config (sync or async). Uses PTCRuntime + registry\n * and exposes tools via LangChainToolsHub. All invokes go through PTC Intent.\n */\n\nimport { loadToolConfig, resolveSandboxedPath } from \"../tools/util/toolConfig.js\";\nimport {\n expandToolDescriptorsToRegistryNames,\n isBarePackageDescriptor,\n npmDescriptorToPackagePrefixWithVersion,\n fileDescriptorToPackagePrefix,\n} from \"../tools/util/toolDescriptor.js\";\nimport { createRuntimeFromConfigSync, createRuntimeFromConfig } from \"./runtimeFromConfig.js\";\nimport type { CreateRuntimeOptions } from \"./runtimeFromConfig.js\";\nimport { LangChainToolsHub } from \"./adapters/LangChainToolsHub.js\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\n\nexport interface CreateAgentToolsOptions extends CreateRuntimeOptions {\n /** Path to tool.yaml; when set, only tools listed there are returned; sandboxedPath from it is used as sandboxRoot */\n configFilePath?: string;\n /** Project path for async loading (use createLangChainToolsAsync) */\n projectPath?: 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 runtimeOptionsFromConfig(opts: CreateAgentToolsOptions): CreateRuntimeOptions {\n const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [], enableSandboxValidation: false };\n if (opts.configFilePath) {\n const toolConfig = loadToolConfig(opts.configFilePath);\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(opts.configFilePath, 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 const flatOverrides: Record<string, Record<string, unknown>> = { ...coreTools.toolOverrides };\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) {\n return { ...opts, coreTools: { ...coreTools, ...updates } };\n }\n }\n return { ...opts, coreTools };\n}\n\n/**\n * Create LangChain tools synchronously. When configFilePath is set, returns only\n * tools listed in that file (and that exist in the registry). If tool.yaml has\n * sandboxedPath, fs tools can only access that directory.\n */\nexport function createAgentTools(\n options?: CreateAgentToolsOptions | string\n): StructuredToolInterface[] {\n const opts: CreateAgentToolsOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const runtimeOpts = runtimeOptionsFromConfig(opts);\n const { runtime } = createRuntimeFromConfigSync(runtimeOpts);\n const hub = new LangChainToolsHub(runtime);\n\n if (opts.configFilePath) {\n const toolConfig = loadToolConfig(opts.configFilePath);\n const names = Array.isArray(toolConfig.tools) ? toolConfig.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) {\n return hub.getLangChainTools();\n }\n const expanded = expandToolDescriptorsToRegistryNames(names, registryNames);\n return hub.getLangChainToolsForNames(expanded);\n }\n }\n\n return hub.getLangChainTools();\n}\n\n/**\n * Create LangChain tools asynchronously. Use when projectPath is set to load\n * tools from the project before building the tool list.\n */\nexport async function createLangChainToolsAsync(\n options: CreateAgentToolsOptions = {}\n): Promise<StructuredToolInterface[]> {\n const runtimeOpts = runtimeOptionsFromConfig(options);\n const { runtime } = await createRuntimeFromConfig(runtimeOpts);\n const hub = new LangChainToolsHub(runtime);\n\n if (options.configFilePath) {\n const toolConfig = loadToolConfig(options.configFilePath);\n const names = Array.isArray(toolConfig.tools) ? toolConfig.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) {\n return hub.getLangChainTools();\n }\n const expanded = expandToolDescriptorsToRegistryNames(names, registryNames);\n return hub.getLangChainToolsForNames(expanded);\n }\n }\n\n return hub.getLangChainTools();\n}\n","/**\n * Public API: three create functions (config-driven) + runtime.\n *\n * 1. createLangChainTools(config?) → LangChain tools (createReactAgent / AgentExecutor)\n * 2. createMCPServer(runtime | config, options?) → MCP server (stdio, Cursor / Claude)\n * 3. createOpenAPIServer(runtime | config, options?) → HTTP + OpenAPI/Swagger (GET /tools, POST /invoke)\n *\n * All tool invokes go through PTC Intent (runtime.invoke(intent, ctx)) for policy, budget, observability.\n * Use createRuntimeFromConfig(config) when you need the runtime for multiple servers.\n */\n\nexport { createAgentTools, createLangChainToolsAsync } from \"./createAgentTools.js\";\nexport type { CreateAgentToolsOptions } from \"./createAgentTools.js\";\n\nexport { createHttpService } from \"./expose/openapiHttp.js\";\nexport type {\n CreateHttpServiceOptions,\n HttpServiceResult,\n OpenAPIHttpServerOptions,\n} from \"./expose/openapiHttp.js\";\n/** Alias: OpenAPI server with Swagger support */\nexport { createHttpService as createOpenAPIServer } from \"./expose/openapiHttp.js\";\n\nexport {\n createMCPServer,\n runMCPServerOverStdio,\n createMCPStreamableHttpHandler,\n createMCPServerStreamableHttp,\n} from \"./expose/mcpServer.js\";\nexport type {\n MCPServerOptions,\n MCPServerResult,\n MCPStreamableHttpHandler,\n MCPServerStreamableHttpResult,\n CreateMCPServerStreamableHttpOptions,\n} from \"./expose/mcpServer.js\";\n\nexport { createRuntimeFromConfig, createRuntimeFromConfigSync } from \"./runtimeFromConfig.js\";\nexport type { CreateRuntimeOptions, CreateRuntimeResult } from \"./runtimeFromConfig.js\";\n\nexport { PTCRuntime } from \"../core/runtime/PTCRuntime.js\";\nexport type { PTCRuntimeConfig } from \"../core/runtime/PTCRuntime.js\";\n\nimport { createAgentTools, createLangChainToolsAsync } from \"./createAgentTools.js\";\nimport { createHttpService } from \"./expose/openapiHttp.js\";\nimport {\n createMCPServer,\n runMCPServerOverStdio,\n createMCPStreamableHttpHandler,\n createMCPServerStreamableHttp,\n} from \"./expose/mcpServer.js\";\nimport { createRuntimeFromConfig, createRuntimeFromConfigSync } from \"./runtimeFromConfig.js\";\n\n/**\n * Facade: grouped API for lower import complexity in callers.\n */\nexport const langchainApi = {\n createAgentTools,\n createLangChainToolsAsync,\n} as const;\n\n/**\n * Facade: grouped runtime creation helpers.\n */\nexport const runtimeApi = {\n createRuntimeFromConfig,\n createRuntimeFromConfigSync,\n} as const;\n\n/**\n * Facade: grouped MCP server helpers.\n */\nexport const mcpApi = {\n createMCPServer,\n runMCPServerOverStdio,\n createMCPStreamableHttpHandler,\n createMCPServerStreamableHttp,\n} as const;\n\n/**\n * Facade: grouped OpenAPI/HTTP helpers.\n */\nexport const openApi = {\n createOpenAPIServer: createHttpService,\n createHttpService,\n} as const;\n"]}
@@ -0,0 +1,359 @@
1
+ 'use strict';
2
+
3
+ var chunkJNIWNSCQ_cjs = require('./chunk-JNIWNSCQ.cjs');
4
+ var chunkQEJF3KDV_cjs = require('./chunk-QEJF3KDV.cjs');
5
+ var async_hooks = require('async_hooks');
6
+ var path6 = require('path');
7
+ var url = require('url');
8
+ var fs = require('fs');
9
+ var yaml = require('js-yaml');
10
+
11
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
+
13
+ var path6__default = /*#__PURE__*/_interopDefault(path6);
14
+ var yaml__default = /*#__PURE__*/_interopDefault(yaml);
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 = path6__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 loadToolYaml(packageRoot, sourcePath) {
78
+ const dir = path6__default.default.dirname(sourcePath);
79
+ const base = path6__default.default.basename(sourcePath);
80
+ const dirPath = path6__default.default.join(packageRoot, dir);
81
+ const yamlPath = fs.existsSync(path6__default.default.join(dirPath, `${base}.tool.yaml`)) ? path6__default.default.join(dirPath, `${base}.tool.yaml`) : path6__default.default.join(dirPath, `${base}.example.yaml`);
82
+ if (!fs.existsSync(yamlPath)) return void 0;
83
+ try {
84
+ const raw = fs.readFileSync(yamlPath, "utf-8");
85
+ const data = yaml__default.default.load(raw);
86
+ if (data == null || typeof data !== "object" || Array.isArray(data)) return void 0;
87
+ const obj = data;
88
+ const toolBlock = obj?.tool;
89
+ const arr = toolBlock?.list;
90
+ if (!Array.isArray(arr)) return void 0;
91
+ const defaults = toolBlock?.defaults != null && typeof toolBlock.defaults === "object" && !Array.isArray(toolBlock.defaults) ? toolBlock.defaults : {};
92
+ const item = arr.find(
93
+ (e) => e != null && typeof e === "object" && e.name === base
94
+ );
95
+ if (!item || typeof item !== "object") return void 0;
96
+ const { name: _n, ...rest } = item;
97
+ const merged = { ...defaults, ...rest };
98
+ if (Object.keys(merged).length === 0) return void 0;
99
+ return merged;
100
+ } catch {
101
+ return void 0;
102
+ }
103
+ }
104
+
105
+ // src/api/extension/registerFromManifest.ts
106
+ function loadExtensionManifest(manifestPathOrDir) {
107
+ const p = path6__default.default.resolve(manifestPathOrDir);
108
+ let manifestPath;
109
+ if (fs.existsSync(p) && fs.statSync(p).isFile()) {
110
+ manifestPath = p;
111
+ } else {
112
+ const inDir = path6__default.default.join(p, "core-tools-manifest.json");
113
+ const inDist = path6__default.default.join(p, "dist", "core-tools-manifest.json");
114
+ manifestPath = fs.existsSync(inDir) ? inDir : inDist;
115
+ }
116
+ const raw = fs.readFileSync(manifestPath, "utf-8");
117
+ const parsed = JSON.parse(raw);
118
+ if (Array.isArray(parsed)) {
119
+ return { entries: parsed };
120
+ }
121
+ return { kind: parsed.kind, entries: parsed.tools ?? [] };
122
+ }
123
+ function registerToolsFromManifest(registry, options) {
124
+ const { manifestPathOrDir, kind: kindOpt, only, namePrefixes, packageRoot } = options;
125
+ const loaded = loadExtensionManifest(manifestPathOrDir);
126
+ const kind = kindOpt ?? loaded.kind ?? "extension";
127
+ const entries = loaded.entries;
128
+ const onlySet = only?.length ? new Set(only) : null;
129
+ const registered = [];
130
+ for (const entry of entries) {
131
+ const toolName = entry.name ?? (entry.coreName != null ? entry.coreName.replace(/^[^/]+\//, "").replace(/^src\./, "") : entry.sourcePath.replace(/^src\//, "").replace(/\//g, "."));
132
+ let spec = chunkQEJF3KDV_cjs.createToolSpec({
133
+ name: toolName,
134
+ kind,
135
+ description: entry.description,
136
+ inputSchema: entry.inputSchema,
137
+ outputSchema: entry.outputSchema,
138
+ capabilities: [],
139
+ sideEffect: entry.sideEffect
140
+ });
141
+ if (onlySet && !onlySet.has(spec.name)) continue;
142
+ if (namePrefixes?.length && !namePrefixes.some((prefix) => spec.name.startsWith(prefix))) {
143
+ continue;
144
+ }
145
+ const defaultArgs = packageRoot != null ? loadToolYaml(packageRoot, entry.sourcePath) : void 0;
146
+ spec = {
147
+ ...spec,
148
+ _meta: {
149
+ ...spec._meta,
150
+ sourcePath: entry.sourcePath,
151
+ exportName: entry.exportName,
152
+ shortName: toolName,
153
+ ...packageRoot != null && { packageRoot },
154
+ ...defaultArgs != null && Object.keys(defaultArgs).length > 0 && { defaultArgs }
155
+ }
156
+ };
157
+ registry.register(spec);
158
+ registered.push(spec);
159
+ }
160
+ return registered;
161
+ }
162
+ function resolveExtensionPackageRoot(metaUrlOrPath) {
163
+ const dir = metaUrlOrPath.startsWith("file:") ? path6__default.default.dirname(url.fileURLToPath(metaUrlOrPath)) : path6__default.default.resolve(metaUrlOrPath);
164
+ const dist = path6__default.default.join(dir, "dist");
165
+ return fs.existsSync(dist) ? dist : dir;
166
+ }
167
+
168
+ // src/api/extension/registerExtension.ts
169
+ function registerExtension(registry, options) {
170
+ const { packagePath, kind: kindOpt, config, getContextRunner, only, namePrefixes } = options;
171
+ const packageRoot = resolveExtensionPackageRoot(packagePath);
172
+ const contextRunner = getContextRunner();
173
+ const loaded = loadExtensionManifest(packagePath);
174
+ const kind = kindOpt ?? loaded.kind ?? "extension";
175
+ registerToolsFromManifest(registry, {
176
+ manifestPathOrDir: packagePath,
177
+ kind,
178
+ only,
179
+ namePrefixes,
180
+ packageRoot
181
+ });
182
+ const adapter = createDynamicImportAdapter({
183
+ kind,
184
+ packageRoot,
185
+ getExtensionContext: (execCtx, spec, mergedArgs) => {
186
+ const defaultArgs = spec._meta?.defaultArgs ?? {};
187
+ const baseConfig = config !== void 0 ? config : {};
188
+ const toolOverrides = baseConfig?.toolOverrides;
189
+ const shortName = spec._meta?.shortName ?? spec.name;
190
+ const prefixWithVersion = shortName && spec.name.endsWith(shortName) && spec.name.length > shortName.length ? spec.name.slice(0, spec.name.length - shortName.length - 1) : "";
191
+ const parts = prefixWithVersion ? prefixWithVersion.split(".") : [];
192
+ const packageScopedKey = parts.length > 1 ? `${parts.slice(0, -1).join(".")}::${shortName}` : "";
193
+ const perTool = toolOverrides?.[spec.name] ?? (packageScopedKey ? toolOverrides?.[packageScopedKey] : void 0) ?? toolOverrides?.[shortName] ?? {};
194
+ const packagePrefix = parts.length > 1 ? parts.slice(0, -1).join(".") : "";
195
+ const packageDefaults = baseConfig?.packageDefaults;
196
+ const packageDefaultsForPkg = (packagePrefix && packageDefaults?.[packagePrefix]) ?? (prefixWithVersion && packageDefaults?.[prefixWithVersion]) ?? {};
197
+ const baseWithoutOverrides = { ...baseConfig };
198
+ delete baseWithoutOverrides.toolOverrides;
199
+ delete baseWithoutOverrides.packageDefaults;
200
+ const resolvedConfig = {
201
+ ...defaultArgs,
202
+ ...baseWithoutOverrides,
203
+ ...packageDefaultsForPkg,
204
+ ...perTool,
205
+ ...mergedArgs ?? {}
206
+ };
207
+ return { execCtx, config: resolvedConfig };
208
+ },
209
+ contextRunner: {
210
+ runWith(ctx, fn) {
211
+ return contextRunner.runWith(ctx, fn);
212
+ }
213
+ }
214
+ });
215
+ return adapter;
216
+ }
217
+
218
+ // src/api/extension/createExtension.ts
219
+ function resolvePackagePath(options) {
220
+ if (options.packagePath != null && options.packagePath !== "") return options.packagePath;
221
+ if (options.importMeta?.url) return path6__default.default.dirname(url.fileURLToPath(options.importMeta.url));
222
+ throw new Error("createExtension: provide packagePath or importMeta");
223
+ }
224
+ function createExtension(options) {
225
+ const packagePath = resolvePackagePath(options);
226
+ const kind = options.kind;
227
+ const buildConfig = "buildConfig" in options ? options.buildConfig : void 0;
228
+ const contextRunner = createContextRunner();
229
+ return {
230
+ register(registry, userConfigOrOpts, opts) {
231
+ const config = buildConfig ? buildConfig(userConfigOrOpts) : userConfigOrOpts;
232
+ return registerExtension(registry, {
233
+ packagePath,
234
+ kind,
235
+ config,
236
+ getContextRunner: () => contextRunner,
237
+ only: opts?.only ?? userConfigOrOpts?.only,
238
+ namePrefixes: opts?.namePrefixes ?? userConfigOrOpts?.namePrefixes
239
+ });
240
+ },
241
+ getContext() {
242
+ return contextRunner.getContext();
243
+ },
244
+ runWith(ctx, fn) {
245
+ return contextRunner.runWith(ctx, fn);
246
+ }
247
+ };
248
+ }
249
+ function copyToolYamlRecursive(srcDir, destDir) {
250
+ if (!fs.existsSync(srcDir)) return 0;
251
+ let copied = 0;
252
+ for (const e of fs.readdirSync(srcDir, { withFileTypes: true })) {
253
+ const srcPath = path6__default.default.join(srcDir, e.name);
254
+ const destPath = path6__default.default.join(destDir, e.name);
255
+ if (e.isFile() && (e.name.endsWith(".tool.yaml") || e.name.endsWith(".example.yaml"))) {
256
+ if (!fs.existsSync(destDir)) fs.mkdirSync(destDir, { recursive: true });
257
+ fs.copyFileSync(srcPath, destPath);
258
+ copied++;
259
+ } else if (e.isDirectory()) {
260
+ copied += copyToolYamlRecursive(srcPath, destPath);
261
+ }
262
+ }
263
+ return copied;
264
+ }
265
+ function generateExtensionManifest(projectRoot = process.cwd(), options = {}) {
266
+ const root = path6__default.default.resolve(projectRoot);
267
+ const outDir = path6__default.default.resolve(options.outDir ?? path6__default.default.join(root, "dist"));
268
+ const kind = options.kind ?? "core";
269
+ const { specs, errors } = chunkJNIWNSCQ_cjs.scanForTools({
270
+ projectPath: root,
271
+ include: options.include ?? ["**/*.ts"],
272
+ tsconfigPath: options.tsconfigPath
273
+ });
274
+ if (errors.length > 0) {
275
+ console.warn("generateExtensionManifest: scan errors", errors);
276
+ }
277
+ const entries = specs.map((spec) => {
278
+ const sourcePathNoExt = (spec.sourcePath ?? "").replace(/\.(ts|tsx)$/i, "");
279
+ const pathBasedName = sourcePathNoExt.replace(/^src\//, "").replace(/\//g, ".");
280
+ const name = spec.exportName ?? pathBasedName;
281
+ const sideEffect = spec._meta?.hitl?.sideEffect ?? "none";
282
+ return {
283
+ name,
284
+ description: spec.description ?? sourcePathNoExt,
285
+ inputSchema: spec.inputSchema ?? { type: "object", additionalProperties: true },
286
+ outputSchema: spec.outputSchema ?? { type: "object", additionalProperties: true },
287
+ sourcePath: sourcePathNoExt,
288
+ exportName: spec.exportName ?? "",
289
+ sideEffect
290
+ };
291
+ });
292
+ if (!fs.existsSync(outDir)) fs.mkdirSync(outDir, { recursive: true });
293
+ const manifestPath = path6__default.default.join(outDir, "core-tools-manifest.json");
294
+ fs.writeFileSync(
295
+ manifestPath,
296
+ JSON.stringify({ kind, tools: entries }, null, 2),
297
+ "utf-8"
298
+ );
299
+ let toolYamlCopied = 0;
300
+ const copyDirs = options.copyToolYamlDirs;
301
+ if (copyDirs?.length) {
302
+ for (const d of copyDirs) {
303
+ const srcDir = path6__default.default.join(root, d);
304
+ const destDir = path6__default.default.join(outDir, d);
305
+ try {
306
+ toolYamlCopied += copyToolYamlRecursive(srcDir, destDir);
307
+ } catch {
308
+ }
309
+ }
310
+ }
311
+ return { manifestPath, toolsCount: entries.length, toolYamlCopied };
312
+ }
313
+ function generateManifest(projectRoot = process.cwd(), options = {}) {
314
+ const { manifestPath, toolsCount, toolYamlCopied } = generateExtensionManifest(projectRoot, {
315
+ include: ["src/**/*.ts"],
316
+ copyToolYamlDirs: ["src"],
317
+ ...options
318
+ });
319
+ console.log(`Wrote ${toolsCount} tools to ${path6__default.default.relative(projectRoot, manifestPath)}`);
320
+ if (toolYamlCopied > 0) console.log(`Copied ${toolYamlCopied} .tool.yaml/.example.yaml file(s) to dist`);
321
+ }
322
+
323
+ // src/api/extension/overrideWithConfig.ts
324
+ function overrideWithConfig(defaults, config) {
325
+ const c = config != null && typeof config === "object" && !Array.isArray(config) ? config : {};
326
+ const out = { ...defaults };
327
+ for (const key of Object.keys(defaults)) {
328
+ if (key in c && c[key] !== void 0) {
329
+ out[key] = c[key];
330
+ }
331
+ }
332
+ return out;
333
+ }
334
+
335
+ // src/api/extension/groupPrefix.ts
336
+ function getGroupNamePrefixes(options) {
337
+ const { groups, only, groupPrefixMap } = options;
338
+ const onlySet = only?.length ? new Set(only) : null;
339
+ const namePrefixes = !onlySet && groups?.length ? groups.map((g) => groupPrefixMap[g]).filter((x) => x != null) : void 0;
340
+ return {
341
+ ...onlySet ? { only: Array.from(onlySet) } : {},
342
+ ...namePrefixes?.length ? { namePrefixes } : {}
343
+ };
344
+ }
345
+
346
+ exports.createContextRunner = createContextRunner;
347
+ exports.createDynamicImportAdapter = createDynamicImportAdapter;
348
+ exports.createExtension = createExtension;
349
+ exports.generateExtensionManifest = generateExtensionManifest;
350
+ exports.generateManifest = generateManifest;
351
+ exports.getGroupNamePrefixes = getGroupNamePrefixes;
352
+ exports.loadExtensionManifest = loadExtensionManifest;
353
+ exports.loadToolYaml = loadToolYaml;
354
+ exports.overrideWithConfig = overrideWithConfig;
355
+ exports.registerExtension = registerExtension;
356
+ exports.registerToolsFromManifest = registerToolsFromManifest;
357
+ exports.resolveExtensionPackageRoot = resolveExtensionPackageRoot;
358
+ //# sourceMappingURL=chunk-WO4LZKPQ.cjs.map
359
+ //# sourceMappingURL=chunk-WO4LZKPQ.cjs.map