@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.
- package/README.md +5 -15
- package/dist/api/adapters/LangChainToolsHub.d.ts +1 -1
- package/dist/api/createAgentTools.d.ts +8 -24
- package/dist/api/createAgentTools.d.ts.map +1 -1
- package/dist/api/expose/index.d.ts +1 -1
- package/dist/api/main.cjs +6 -62
- package/dist/api/main.d.ts +3 -56
- package/dist/api/main.d.ts.map +1 -1
- package/dist/api/main.js +4 -4
- package/dist/api/runtimeFromConfig.d.ts +1 -1
- package/dist/api/runtimeFromConfig.d.ts.map +1 -1
- package/dist/build.cjs +5 -6
- package/dist/build.js +2 -3
- package/dist/{chunk-Q6W32HAP.js → chunk-3D7XYAZO.js} +7 -30
- package/dist/chunk-3D7XYAZO.js.map +1 -0
- package/dist/{chunk-EIIHED57.cjs → chunk-5HSGVA6S.cjs} +12 -37
- package/dist/chunk-5HSGVA6S.cjs.map +1 -0
- package/dist/{chunk-VYULM6NC.js → chunk-6ORA3MNX.js} +3 -3
- package/dist/{chunk-VYULM6NC.js.map → chunk-6ORA3MNX.js.map} +1 -1
- package/dist/{chunk-DVYM6VRD.js → chunk-ACSGEQAY.js} +13 -48
- package/dist/chunk-ACSGEQAY.js.map +1 -0
- package/dist/{chunk-5QH7YY4Z.cjs → chunk-F4HS7H7K.cjs} +4 -5
- package/dist/chunk-F4HS7H7K.cjs.map +1 -0
- package/dist/{chunk-JZ6LKSAS.js → chunk-NEMGE573.js} +4 -4
- package/dist/chunk-NEMGE573.js.map +1 -0
- package/dist/{chunk-TBDSFXNG.cjs → chunk-QCHMXVWZ.cjs} +7 -7
- package/dist/{chunk-TBDSFXNG.cjs.map → chunk-QCHMXVWZ.cjs.map} +1 -1
- package/dist/{chunk-33N4Y6IS.cjs → chunk-V2RD4BHT.cjs} +7 -33
- package/dist/chunk-V2RD4BHT.cjs.map +1 -0
- package/dist/{chunk-42UNSIZJ.js → chunk-W2WJOS5Z.js} +7 -28
- package/dist/chunk-W2WJOS5Z.js.map +1 -0
- package/dist/{chunk-GXFDYM3O.cjs → chunk-XW52LOLP.cjs} +24 -65
- package/dist/chunk-XW52LOLP.cjs.map +1 -0
- package/dist/core/index.cjs +0 -1
- package/dist/core/index.js +0 -1
- package/dist/core/runtime.cjs +0 -1
- package/dist/core/runtime.js +0 -1
- package/dist/extension.cjs +257 -42
- package/dist/extension.cjs.map +1 -1
- package/dist/extension.js +243 -3
- package/dist/extension.js.map +1 -1
- package/dist/index.cjs +11 -153
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -55
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -90
- package/dist/index.js.map +1 -1
- package/dist/observability/Logger.d.ts +1 -1
- package/dist/observability/Logger.d.ts.map +1 -1
- package/dist/security.cjs +178 -11
- package/dist/security.cjs.map +1 -1
- package/dist/security.js +179 -2
- package/dist/security.js.map +1 -1
- package/dist/tools/skill/SkillMdParser.d.ts.map +1 -1
- package/dist/utils/cli/index.cjs +17 -17
- package/dist/utils/cli/index.js +3 -3
- package/package.json +2 -4
- package/dist/chunk-33N4Y6IS.cjs.map +0 -1
- package/dist/chunk-42UNSIZJ.js.map +0 -1
- package/dist/chunk-5QH7YY4Z.cjs.map +0 -1
- package/dist/chunk-DEDDPMBU.js +0 -3
- package/dist/chunk-DEDDPMBU.js.map +0 -1
- package/dist/chunk-DGE2AHYT.cjs +0 -261
- package/dist/chunk-DGE2AHYT.cjs.map +0 -1
- package/dist/chunk-DVYM6VRD.js.map +0 -1
- package/dist/chunk-EIIHED57.cjs.map +0 -1
- package/dist/chunk-FWWN4D2F.js +0 -3
- package/dist/chunk-FWWN4D2F.js.map +0 -1
- package/dist/chunk-GXFDYM3O.cjs.map +0 -1
- package/dist/chunk-ICHSEIZN.cjs +0 -4
- package/dist/chunk-ICHSEIZN.cjs.map +0 -1
- package/dist/chunk-JZ6LKSAS.js.map +0 -1
- package/dist/chunk-NKYFYALQ.js +0 -181
- package/dist/chunk-NKYFYALQ.js.map +0 -1
- package/dist/chunk-NOGGIM7B.cjs +0 -4
- package/dist/chunk-NOGGIM7B.cjs.map +0 -1
- package/dist/chunk-Q6W32HAP.js.map +0 -1
- package/dist/chunk-R55NXJIH.cjs +0 -184
- package/dist/chunk-R55NXJIH.cjs.map +0 -1
- package/dist/chunk-S4X4NJIP.js +0 -244
- package/dist/chunk-S4X4NJIP.js.map +0 -1
- package/dist/chunk-YL6RC7HQ.cjs +0 -4
- package/dist/chunk-YL6RC7HQ.cjs.map +0 -1
- package/dist/chunk-YLWTSNTT.js +0 -3
- package/dist/chunk-YLWTSNTT.js.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
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
|
|
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:
|
|
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-
|
|
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 =
|
|
145
|
+
const toolDefaults = chunk5HSGVA6S_cjs.loadToolConfig(configPath).toolDefaults ?? {};
|
|
146
146
|
if (Object.keys(toolDefaults).length === 0) continue;
|
|
147
|
-
const manifest =
|
|
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 =
|
|
166
|
+
const baseConfig = chunk5HSGVA6S_cjs.loadToolConfig(EMBEDDED_TOOL_CONFIG_PATH);
|
|
167
167
|
if (!overridePath) return baseConfig;
|
|
168
|
-
const overrideConfig =
|
|
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 =
|
|
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:") ?
|
|
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
|
-
|
|
232
|
+
chunk5HSGVA6S_cjs.loadAllExtensionsFromToolYamlSync(configPathForResolve)
|
|
233
233
|
);
|
|
234
234
|
const runtimeOpts = runtimeOptionsFromConfig(options, mergedToolConfig, configPathForResolve, extensionEmbeddedDefaults);
|
|
235
|
-
const { runtime } =
|
|
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) =>
|
|
245
|
+
const allBarePackages = names.every((n) => chunk5HSGVA6S_cjs.isBarePackageDescriptor(String(n)));
|
|
246
246
|
if (allBarePackages) return hub.getLangChainTools();
|
|
247
|
-
return hub.getLangChainToolsForNames(
|
|
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/
|
|
275
|
-
|
|
276
|
-
createLangChainAgentTools
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
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.
|
|
295
|
-
|
|
296
|
-
|
|
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"]}
|
package/dist/core/index.cjs
CHANGED
package/dist/core/index.js
CHANGED
package/dist/core/runtime.cjs
CHANGED
package/dist/core/runtime.js
CHANGED
package/dist/extension.cjs
CHANGED
|
@@ -1,59 +1,274 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
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
|
|
251
|
+
get: function () { return chunkF4HS7H7K_cjs.loadExtensionManifest; }
|
|
49
252
|
});
|
|
50
253
|
Object.defineProperty(exports, "loadToolYaml", {
|
|
51
254
|
enumerable: true,
|
|
52
|
-
get: function () { return
|
|
255
|
+
get: function () { return chunkF4HS7H7K_cjs.loadToolYaml; }
|
|
53
256
|
});
|
|
54
257
|
Object.defineProperty(exports, "registerToolsFromManifest", {
|
|
55
258
|
enumerable: true,
|
|
56
|
-
get: function () { return
|
|
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
|