@easynet/agent-tool 1.0.17 → 1.0.18
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 +11 -4
- package/dist/api/createAgentTools.d.ts.map +1 -1
- package/dist/api/main.cjs +14 -14
- package/dist/api/main.js +3 -3
- package/dist/api/runtimeFromConfig.d.ts +5 -0
- package/dist/api/runtimeFromConfig.d.ts.map +1 -1
- package/dist/{chunk-LIERSUS5.js → chunk-7MRBWT2T.js} +3 -3
- package/dist/{chunk-LIERSUS5.js.map → chunk-7MRBWT2T.js.map} +1 -1
- package/dist/{chunk-M2VNTQHS.js → chunk-7WI5VK5G.js} +28 -5
- package/dist/{chunk-M2VNTQHS.js.map → chunk-7WI5VK5G.js.map} +1 -1
- package/dist/{chunk-CDTLERB6.cjs → chunk-EMI67SPN.cjs} +11 -5
- package/dist/chunk-EMI67SPN.cjs.map +1 -0
- package/dist/{chunk-SIN5JHMP.js → chunk-ETWGKCOP.js} +3 -3
- package/dist/{chunk-SIN5JHMP.js.map → chunk-ETWGKCOP.js.map} +1 -1
- package/dist/{chunk-PVVUTEZP.cjs → chunk-OXTQULXH.cjs} +7 -7
- package/dist/{chunk-PVVUTEZP.cjs.map → chunk-OXTQULXH.cjs.map} +1 -1
- package/dist/{chunk-BNHLMLDH.js → chunk-RKN4PT7P.js} +10 -4
- package/dist/chunk-RKN4PT7P.js.map +1 -0
- package/dist/{chunk-RSDA7IAQ.cjs → chunk-YK2MQDNJ.cjs} +9 -9
- package/dist/{chunk-RSDA7IAQ.cjs.map → chunk-YK2MQDNJ.cjs.map} +1 -1
- package/dist/{chunk-UDGQSHEO.cjs → chunk-ZIFQWIN3.cjs} +42 -19
- package/dist/{chunk-UDGQSHEO.cjs.map → chunk-ZIFQWIN3.cjs.map} +1 -1
- package/dist/index.cjs +74 -51
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -9
- package/dist/index.js.map +1 -1
- package/dist/security/ssrf.d.ts +15 -3
- package/dist/security/ssrf.d.ts.map +1 -1
- package/dist/tools/util/toolConfig.d.ts +7 -1
- package/dist/tools/util/toolConfig.d.ts.map +1 -1
- package/dist/utils/cli/index.cjs +17 -17
- package/dist/utils/cli/index.js +3 -3
- package/package.json +1 -1
- package/dist/chunk-BNHLMLDH.js.map +0 -1
- package/dist/chunk-CDTLERB6.cjs.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkEMI67SPN_cjs = require('./chunk-EMI67SPN.cjs');
|
|
4
4
|
var tools = require('@langchain/core/tools');
|
|
5
5
|
|
|
6
6
|
var DEFAULT_CTX_FACTORY = () => ({
|
|
@@ -51,7 +51,7 @@ var LangChainToolsHub = class {
|
|
|
51
51
|
const intent = {
|
|
52
52
|
tool: spec.name,
|
|
53
53
|
args: args ?? {},
|
|
54
|
-
purpose:
|
|
54
|
+
purpose: chunkEMI67SPN_cjs.LANGCHAIN_KIND
|
|
55
55
|
};
|
|
56
56
|
const ctx = ctxFactory();
|
|
57
57
|
const result = await runtime.invoke(intent, ctx);
|
|
@@ -70,13 +70,36 @@ var LangChainToolsHub = class {
|
|
|
70
70
|
};
|
|
71
71
|
|
|
72
72
|
// src/api/createAgentTools.ts
|
|
73
|
+
function mergeHostLists(a, b) {
|
|
74
|
+
const seen = /* @__PURE__ */ new Set();
|
|
75
|
+
const out = [];
|
|
76
|
+
for (const list of [a ?? [], b ?? []]) {
|
|
77
|
+
for (const h of list) {
|
|
78
|
+
if (!seen.has(h)) {
|
|
79
|
+
seen.add(h);
|
|
80
|
+
out.push(h);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return out;
|
|
85
|
+
}
|
|
73
86
|
function runtimeOptionsFromConfig(opts) {
|
|
74
87
|
const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [] };
|
|
75
88
|
if (opts.configFilePath) {
|
|
76
|
-
const toolConfig =
|
|
89
|
+
const toolConfig = chunkEMI67SPN_cjs.loadToolConfig(opts.configFilePath);
|
|
90
|
+
const updates = {};
|
|
77
91
|
if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === "string") {
|
|
78
|
-
|
|
79
|
-
|
|
92
|
+
updates.sandboxRoot = chunkEMI67SPN_cjs.resolveSandboxedPath(opts.configFilePath, toolConfig.sandboxedPath);
|
|
93
|
+
}
|
|
94
|
+
updates.allowedHosts = mergeHostLists(coreTools.allowedHosts, toolConfig.allowedHosts);
|
|
95
|
+
updates.blockedHosts = mergeHostLists(coreTools.blockedHosts, toolConfig.blockedHosts);
|
|
96
|
+
if (Array.isArray(toolConfig.blockedCidrs) && toolConfig.blockedCidrs.length > 0) {
|
|
97
|
+
updates.blockedCidrs = toolConfig.blockedCidrs;
|
|
98
|
+
} else if (coreTools.blockedCidrs?.length) {
|
|
99
|
+
updates.blockedCidrs = coreTools.blockedCidrs;
|
|
100
|
+
}
|
|
101
|
+
if (Object.keys(updates).length > 0) {
|
|
102
|
+
return { ...opts, coreTools: { ...coreTools, ...updates } };
|
|
80
103
|
}
|
|
81
104
|
}
|
|
82
105
|
return { ...opts, coreTools };
|
|
@@ -84,21 +107,21 @@ function runtimeOptionsFromConfig(opts) {
|
|
|
84
107
|
function createAgentTools(options) {
|
|
85
108
|
const opts = typeof options === "string" ? { configFilePath: options } : options ?? {};
|
|
86
109
|
const runtimeOpts = runtimeOptionsFromConfig(opts);
|
|
87
|
-
const { runtime } =
|
|
110
|
+
const { runtime } = chunkEMI67SPN_cjs.createRuntimeFromConfigSync(runtimeOpts);
|
|
88
111
|
const hub = new LangChainToolsHub(runtime);
|
|
89
112
|
if (opts.configFilePath) {
|
|
90
|
-
const toolConfig =
|
|
113
|
+
const toolConfig = chunkEMI67SPN_cjs.loadToolConfig(opts.configFilePath);
|
|
91
114
|
const names = Array.isArray(toolConfig.tools) ? toolConfig.tools : [];
|
|
92
115
|
if (names.length > 0) {
|
|
93
116
|
const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
|
|
94
|
-
const allBareBuiltin = names.every((n) =>
|
|
95
|
-
const p =
|
|
96
|
-
return p !== null &&
|
|
117
|
+
const allBareBuiltin = names.every((n) => chunkEMI67SPN_cjs.isBarePackageDescriptor(String(n))) && names.some((n) => {
|
|
118
|
+
const p = chunkEMI67SPN_cjs.parseNpmDescriptor(String(n));
|
|
119
|
+
return p !== null && chunkEMI67SPN_cjs.BUILTIN_PKG_NAMES.includes(p.packageName);
|
|
97
120
|
});
|
|
98
121
|
if (allBareBuiltin) {
|
|
99
122
|
return hub.getLangChainTools();
|
|
100
123
|
}
|
|
101
|
-
const expanded =
|
|
124
|
+
const expanded = chunkEMI67SPN_cjs.expandToolDescriptorsToRegistryNames(names, registryNames);
|
|
102
125
|
return hub.getLangChainToolsForNames(expanded);
|
|
103
126
|
}
|
|
104
127
|
}
|
|
@@ -106,21 +129,21 @@ function createAgentTools(options) {
|
|
|
106
129
|
}
|
|
107
130
|
async function createLangChainToolsAsync(options = {}) {
|
|
108
131
|
const runtimeOpts = runtimeOptionsFromConfig(options);
|
|
109
|
-
const { runtime } = await
|
|
132
|
+
const { runtime } = await chunkEMI67SPN_cjs.createRuntimeFromConfig(runtimeOpts);
|
|
110
133
|
const hub = new LangChainToolsHub(runtime);
|
|
111
134
|
if (options.configFilePath) {
|
|
112
|
-
const toolConfig =
|
|
135
|
+
const toolConfig = chunkEMI67SPN_cjs.loadToolConfig(options.configFilePath);
|
|
113
136
|
const names = Array.isArray(toolConfig.tools) ? toolConfig.tools : [];
|
|
114
137
|
if (names.length > 0) {
|
|
115
138
|
const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
|
|
116
|
-
const allBareBuiltin = names.every((n) =>
|
|
117
|
-
const p =
|
|
118
|
-
return p !== null &&
|
|
139
|
+
const allBareBuiltin = names.every((n) => chunkEMI67SPN_cjs.isBarePackageDescriptor(String(n))) && names.some((n) => {
|
|
140
|
+
const p = chunkEMI67SPN_cjs.parseNpmDescriptor(String(n));
|
|
141
|
+
return p !== null && chunkEMI67SPN_cjs.BUILTIN_PKG_NAMES.includes(p.packageName);
|
|
119
142
|
});
|
|
120
143
|
if (allBareBuiltin) {
|
|
121
144
|
return hub.getLangChainTools();
|
|
122
145
|
}
|
|
123
|
-
const expanded =
|
|
146
|
+
const expanded = chunkEMI67SPN_cjs.expandToolDescriptorsToRegistryNames(names, registryNames);
|
|
124
147
|
return hub.getLangChainToolsForNames(expanded);
|
|
125
148
|
}
|
|
126
149
|
}
|
|
@@ -130,5 +153,5 @@ async function createLangChainToolsAsync(options = {}) {
|
|
|
130
153
|
exports.LangChainToolsHub = LangChainToolsHub;
|
|
131
154
|
exports.createAgentTools = createAgentTools;
|
|
132
155
|
exports.createLangChainToolsAsync = createLangChainToolsAsync;
|
|
133
|
-
//# sourceMappingURL=chunk-
|
|
134
|
-
//# sourceMappingURL=chunk-
|
|
156
|
+
//# sourceMappingURL=chunk-ZIFQWIN3.cjs.map
|
|
157
|
+
//# sourceMappingURL=chunk-ZIFQWIN3.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/api/adapters/LangChainToolsHub.ts","../src/api/createAgentTools.ts"],"names":["DynamicStructuredTool","LANGCHAIN_KIND","loadToolConfig","resolveSandboxedPath","createRuntimeFromConfigSync","isBarePackageDescriptor","parseNpmDescriptor","BUILTIN_PKG_NAMES","expandToolDescriptorsToRegistryNames","createRuntimeFromConfig"],"mappings":";;;;;AAmBA,IAAM,sBAA0C,OAAO;AAAA,EACrD,SAAA,EAAW,CAAA,GAAA,EAAM,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAAA,EACrE,MAAA,EAAQ,CAAA,KAAA,EAAQ,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAAA,EAC1B,WAAA,EAAa;AAAA,IACX,UAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA;AAEJ,CAAA,CAAA;AAOO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,WAAA,CACmB,OAAA,EACA,UAAA,GAAiC,mBAAA,EAClD;AAFiB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMH,iBAAA,GAA+C;AAC7C,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAY;AAC1C,IAAA,MAAM,KAAA,GAAQ,SAAS,QAAA,EAAS;AAEhC,IAAA,OAAO,MAAM,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,mBAAA,CAAoB,IAAI,CAAC,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAKA,0BAA0B,SAAA,EAAgD;AACxE,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAY;AAC1C,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,SAAS,CAAA;AAC7B,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,QAAA,EAAS,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,GAAA,CAAI,GAAA,CAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAC/D,IAAA,OAAO,MAAM,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,mBAAA,CAAoB,IAAI,CAAC,CAAA;AAAA,EAC3D;AAAA,EAEQ,oBAAoB,IAAA,EAAuC;AACjE,IAAA,MAAM,UAAU,IAAA,CAAK,OAAA;AACrB,IAAA,MAAM,aAAa,IAAA,CAAK,UAAA;AAExB,IAAA,OAAO,IAAIA,2BAAA,CAAsB;AAAA,MAC/B,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,WAAA,EAAa,IAAA,CAAK,WAAA,IAAe,CAAA,MAAA,EAAS,KAAK,IAAI,CAAA,CAAA;AAAA,MACnD,QAAQ,IAAA,CAAK,WAAA;AAAA,MACb,IAAA,EAAM,OAAO,IAAA,KAAmD;AAC9D,QAAA,MAAM,MAAA,GAAqB;AAAA,UACzB,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,IAAA,EAAM,QAAQ,EAAC;AAAA,UACf,OAAA,EAASC;AAAA,SACX;AACA,QAAA,MAAM,MAAM,UAAA,EAAW;AACvB,QAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,MAAA,CAAO,QAAQ,GAAG,CAAA;AAE/C,QAAA,IAAI,OAAO,EAAA,EAAI;AACb,UAAA,OAAO,OAAO,OAAO,MAAA,KAAW,QAAA,GAC5B,OAAO,MAAA,GACP,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,MAAM,CAAA;AAAA,QAClC;AAEA,QAAA,MAAM,MAAM,MAAA,CAAO,KAAA;AACnB,QAAA,MAAM,OAAA,GAAU,KAAK,OAAA,IAAW,aAAA;AAChC,QAAA,MAAM,UAAU,GAAA,EAAK,OAAA;AACrB,QAAA,OAAO,IAAA,CAAK,SAAA;AAAA,UACV,OAAA,IAAW,OAAO,EAAE,KAAA,EAAO,SAAS,OAAA,EAAQ,GAAI,EAAE,KAAA,EAAO,OAAA;AAAQ,SACnE;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;ACvEA,SAAS,yBAAyB,IAAA,EAAqD;AACrF,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,IAAa,EAAE,WAAA,EAAa,QAAQ,GAAA,EAAI,EAAG,YAAA,EAAc,EAAC,EAAE;AACnF,EAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,IAAA,MAAM,UAAA,GAAaC,gCAAA,CAAe,IAAA,CAAK,cAAc,CAAA;AACrD,IAAA,IAAI,UAAA,CAAW,aAAA,IAAiB,OAAO,UAAA,CAAW,kBAAkB,QAAA,EAAU;AAC5E,MAAA,MAAM,WAAA,GAAcC,sCAAA,CAAqB,IAAA,CAAK,cAAA,EAAgB,WAAW,aAAa,CAAA;AACtF,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,SAAA,EAAW,EAAE,GAAG,SAAA,EAAW,aAAY,EAAE;AAAA,IAC7D;AAAA,EACF;AACA,EAAA,OAAO,EAAE,GAAG,IAAA,EAAM,SAAA,EAAU;AAC9B;AAOO,SAAS,iBACd,OAAA,EAC2B;AAC3B,EAAA,MAAM,IAAA,GACJ,OAAO,OAAA,KAAY,QAAA,GAAW,EAAE,cAAA,EAAgB,OAAA,EAAQ,GAAI,OAAA,IAAW,EAAC;AAC1E,EAAA,MAAM,WAAA,GAAc,yBAAyB,IAAI,CAAA;AACjD,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAIC,6CAAA,CAA4B,WAAW,CAAA;AAC3D,EAAA,MAAM,GAAA,GAAM,IAAI,iBAAA,CAAkB,OAAO,CAAA;AAEzC,EAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,IAAA,MAAM,UAAA,GAAaF,gCAAA,CAAe,IAAA,CAAK,cAAc,CAAA;AACrD,IAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,GAAI,UAAA,CAAW,QAAQ,EAAC;AACpE,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,WAAA,EAAY,CAAE,QAAA,GAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAA;AACxE,MAAA,MAAM,cAAA,GACJ,KAAA,CAAM,KAAA,CAAM,CAAC,MAAMG,yCAAA,CAAwB,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA,IACrD,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM;AAChB,QAAA,MAAM,CAAA,GAAIC,oCAAA,CAAmB,MAAA,CAAO,CAAC,CAAC,CAAA;AACtC,QAAA,OAAO,CAAA,KAAM,IAAA,IAAQC,mCAAA,CAAkB,QAAA,CAAS,EAAE,WAAW,CAAA;AAAA,MAC/D,CAAC,CAAA;AACH,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,OAAO,IAAI,iBAAA,EAAkB;AAAA,MAC/B;AACA,MAAA,MAAM,QAAA,GAAWC,sDAAA,CAAqC,KAAA,EAAO,aAAa,CAAA;AAC1E,MAAA,OAAO,GAAA,CAAI,0BAA0B,QAAQ,CAAA;AAAA,IAC/C;AAAA,EACF;AAEA,EAAA,OAAO,IAAI,iBAAA,EAAkB;AAC/B;AAMA,eAAsB,yBAAA,CACpB,OAAA,GAAmC,EAAC,EACA;AACpC,EAAA,MAAM,WAAA,GAAc,yBAAyB,OAAO,CAAA;AACpD,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,MAAMC,0CAAwB,WAAW,CAAA;AAC7D,EAAA,MAAM,GAAA,GAAM,IAAI,iBAAA,CAAkB,OAAO,CAAA;AAEzC,EAAA,IAAI,QAAQ,cAAA,EAAgB;AAC1B,IAAA,MAAM,UAAA,GAAaP,gCAAA,CAAe,OAAA,CAAQ,cAAc,CAAA;AACxD,IAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,GAAI,UAAA,CAAW,QAAQ,EAAC;AACpE,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,WAAA,EAAY,CAAE,QAAA,GAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAA;AACxE,MAAA,MAAM,cAAA,GACJ,KAAA,CAAM,KAAA,CAAM,CAAC,MAAMG,yCAAA,CAAwB,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA,IACrD,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM;AAChB,QAAA,MAAM,CAAA,GAAIC,oCAAA,CAAmB,MAAA,CAAO,CAAC,CAAC,CAAA;AACtC,QAAA,OAAO,CAAA,KAAM,IAAA,IAAQC,mCAAA,CAAkB,QAAA,CAAS,EAAE,WAAW,CAAA;AAAA,MAC/D,CAAC,CAAA;AACH,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,OAAO,IAAI,iBAAA,EAAkB;AAAA,MAC/B;AACA,MAAA,MAAM,QAAA,GAAWC,sDAAA,CAAqC,KAAA,EAAO,aAAa,CAAA;AAC1E,MAAA,OAAO,GAAA,CAAI,0BAA0B,QAAQ,CAAA;AAAA,IAC/C;AAAA,EACF;AAEA,EAAA,OAAO,IAAI,iBAAA,EAAkB;AAC/B","file":"chunk-UDGQSHEO.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 type { PTCRuntime } from \"../../core/runtime/PTCRuntime.js\";\nimport type { ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport type { ExecContext } from \"../../core/types/ToolIntent.js\";\nimport type { ToolIntent } from \"../../core/types/ToolIntent.js\";\nimport { LANGCHAIN_KIND } from \"../../tools/langchain/types.js\";\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\n return new DynamicStructuredTool({\n name: spec.name,\n description: spec.description ?? `Tool: ${spec.name}`,\n schema: spec.inputSchema as Record<string, unknown>,\n func: async (args: Record<string, unknown>): Promise<string> => {\n const intent: ToolIntent = {\n tool: spec.name,\n args: args ?? {},\n purpose: LANGCHAIN_KIND,\n };\n const ctx = ctxFactory();\n const result = await runtime.invoke(intent, ctx);\n\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 });\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} from \"../tools/util/toolDescriptor.js\";\nimport {\n createRuntimeFromConfigSync,\n createRuntimeFromConfig,\n BUILTIN_PKG_NAMES,\n parseNpmDescriptor,\n} 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\nfunction runtimeOptionsFromConfig(opts: CreateAgentToolsOptions): CreateRuntimeOptions {\n const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [] };\n if (opts.configFilePath) {\n const toolConfig = loadToolConfig(opts.configFilePath);\n if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === \"string\") {\n const sandboxRoot = resolveSandboxedPath(opts.configFilePath, toolConfig.sandboxedPath);\n return { ...opts, coreTools: { ...coreTools, sandboxRoot } };\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 allBareBuiltin =\n names.every((n) => isBarePackageDescriptor(String(n))) &&\n names.some((n) => {\n const p = parseNpmDescriptor(String(n));\n return p !== null && BUILTIN_PKG_NAMES.includes(p.packageName);\n });\n if (allBareBuiltin) {\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 allBareBuiltin =\n names.every((n) => isBarePackageDescriptor(String(n))) &&\n names.some((n) => {\n const p = parseNpmDescriptor(String(n));\n return p !== null && BUILTIN_PKG_NAMES.includes(p.packageName);\n });\n if (allBareBuiltin) {\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/api/adapters/LangChainToolsHub.ts","../src/api/createAgentTools.ts"],"names":["DynamicStructuredTool","LANGCHAIN_KIND","loadToolConfig","resolveSandboxedPath","createRuntimeFromConfigSync","isBarePackageDescriptor","parseNpmDescriptor","BUILTIN_PKG_NAMES","expandToolDescriptorsToRegistryNames","createRuntimeFromConfig"],"mappings":"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","file":"chunk-ZIFQWIN3.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 type { PTCRuntime } from \"../../core/runtime/PTCRuntime.js\";\nimport type { ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport type { ExecContext } from \"../../core/types/ToolIntent.js\";\nimport type { ToolIntent } from \"../../core/types/ToolIntent.js\";\nimport { LANGCHAIN_KIND } from \"../../tools/langchain/types.js\";\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\n return new DynamicStructuredTool({\n name: spec.name,\n description: spec.description ?? `Tool: ${spec.name}`,\n schema: spec.inputSchema as Record<string, unknown>,\n func: async (args: Record<string, unknown>): Promise<string> => {\n const intent: ToolIntent = {\n tool: spec.name,\n args: args ?? {},\n purpose: LANGCHAIN_KIND,\n };\n const ctx = ctxFactory();\n const result = await runtime.invoke(intent, ctx);\n\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 });\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} from \"../tools/util/toolDescriptor.js\";\nimport {\n createRuntimeFromConfigSync,\n createRuntimeFromConfig,\n BUILTIN_PKG_NAMES,\n parseNpmDescriptor,\n} 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: [] };\n if (opts.configFilePath) {\n const toolConfig = loadToolConfig(opts.configFilePath);\n const updates: {\n sandboxRoot?: string;\n allowedHosts?: string[];\n blockedHosts?: string[];\n blockedCidrs?: string[];\n } = {};\n if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === \"string\") {\n updates.sandboxRoot = resolveSandboxedPath(opts.configFilePath, toolConfig.sandboxedPath);\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 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 allBareBuiltin =\n names.every((n) => isBarePackageDescriptor(String(n))) &&\n names.some((n) => {\n const p = parseNpmDescriptor(String(n));\n return p !== null && BUILTIN_PKG_NAMES.includes(p.packageName);\n });\n if (allBareBuiltin) {\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 allBareBuiltin =\n names.every((n) => isBarePackageDescriptor(String(n))) &&\n names.some((n) => {\n const p = parseNpmDescriptor(String(n));\n return p !== null && BUILTIN_PKG_NAMES.includes(p.packageName);\n });\n if (allBareBuiltin) {\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"]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkZIFQWIN3_cjs = require('./chunk-ZIFQWIN3.cjs');
|
|
4
|
+
var chunkYK2MQDNJ_cjs = require('./chunk-YK2MQDNJ.cjs');
|
|
5
|
+
var chunkEMI67SPN_cjs = require('./chunk-EMI67SPN.cjs');
|
|
6
6
|
var chunkSOFUWEZ6_cjs = require('./chunk-SOFUWEZ6.cjs');
|
|
7
7
|
var chunkZNJBRLKN_cjs = require('./chunk-ZNJBRLKN.cjs');
|
|
8
8
|
require('./chunk-6F5JHLZ7.cjs');
|
|
@@ -10,7 +10,7 @@ var promises = require('dns/promises');
|
|
|
10
10
|
var path = require('path');
|
|
11
11
|
var promises$1 = require('fs/promises');
|
|
12
12
|
|
|
13
|
-
async function validateUrl(url,
|
|
13
|
+
async function validateUrl(url, options) {
|
|
14
14
|
let parsed;
|
|
15
15
|
try {
|
|
16
16
|
parsed = new URL(url);
|
|
@@ -29,16 +29,23 @@ async function validateUrl(url, allowedHosts, blockedCidrs) {
|
|
|
29
29
|
);
|
|
30
30
|
}
|
|
31
31
|
const hostname = parsed.hostname;
|
|
32
|
-
if (!isHostAllowed(hostname, allowedHosts)) {
|
|
32
|
+
if (!isHostAllowed(hostname, options.allowedHosts)) {
|
|
33
33
|
throw chunkZNJBRLKN_cjs.createTaggedError(
|
|
34
34
|
"HTTP_DISALLOWED_HOST",
|
|
35
35
|
`Host "${hostname}" is not in the allowed hosts list`,
|
|
36
|
-
{ url, hostname, allowedHosts }
|
|
36
|
+
{ url, hostname, allowedHosts: options.allowedHosts }
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
if (isHostBlocked(hostname, options.blockedHosts)) {
|
|
40
|
+
throw chunkZNJBRLKN_cjs.createTaggedError(
|
|
41
|
+
"HTTP_DISALLOWED_HOST",
|
|
42
|
+
`Host "${hostname}" is in the blocked hosts list`,
|
|
43
|
+
{ url, hostname, blockedHosts: options.blockedHosts }
|
|
37
44
|
);
|
|
38
45
|
}
|
|
39
46
|
try {
|
|
40
47
|
const { address } = await promises.lookup(hostname);
|
|
41
|
-
if (isIpInBlockedCidrs(address, blockedCidrs)) {
|
|
48
|
+
if (isIpInBlockedCidrs(address, options.blockedCidrs)) {
|
|
42
49
|
throw chunkZNJBRLKN_cjs.createTaggedError(
|
|
43
50
|
"HTTP_DISALLOWED_HOST",
|
|
44
51
|
`Host "${hostname}" resolves to blocked IP: ${address}`,
|
|
@@ -73,6 +80,22 @@ function isHostAllowed(hostname, allowedHosts) {
|
|
|
73
80
|
}
|
|
74
81
|
return false;
|
|
75
82
|
}
|
|
83
|
+
function isHostBlocked(hostname, blockedHosts) {
|
|
84
|
+
for (const pattern of blockedHosts) {
|
|
85
|
+
if (pattern === "*") {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
if (pattern.startsWith("*.")) {
|
|
89
|
+
const suffix = pattern.slice(1);
|
|
90
|
+
if (hostname.endsWith(suffix) || hostname === pattern.slice(2)) {
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
} else if (hostname === pattern) {
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
76
99
|
function isIpInBlockedCidrs(ip, cidrs) {
|
|
77
100
|
const normalizedIp = normalizeIp(ip);
|
|
78
101
|
if (!normalizedIp) return false;
|
|
@@ -212,7 +235,7 @@ var MCPClientAdapter = class {
|
|
|
212
235
|
constructor(client) {
|
|
213
236
|
this.client = client;
|
|
214
237
|
}
|
|
215
|
-
kind =
|
|
238
|
+
kind = chunkEMI67SPN_cjs.MCP_KIND;
|
|
216
239
|
async invoke(spec, args, _ctx) {
|
|
217
240
|
const params = args != null && typeof args === "object" && !Array.isArray(args) ? args : {};
|
|
218
241
|
const result = await this.client.callTool({ name: spec.name, arguments: params });
|
|
@@ -253,7 +276,7 @@ function mcpToolsToSpecs(tools) {
|
|
|
253
276
|
return tools.map((t) => ({
|
|
254
277
|
name: t.name,
|
|
255
278
|
version: "1.0.0",
|
|
256
|
-
kind:
|
|
279
|
+
kind: chunkEMI67SPN_cjs.MCP_KIND,
|
|
257
280
|
description: t.description ?? `MCP tool: ${t.name}`,
|
|
258
281
|
inputSchema: t.inputSchema ?? chunkSOFUWEZ6_cjs.DEFAULT_INPUT_SCHEMA,
|
|
259
282
|
outputSchema: chunkSOFUWEZ6_cjs.DEFAULT_OUTPUT_SCHEMA,
|
|
@@ -293,8 +316,8 @@ async function registerMCPToolsFromConfig(runtime, registry, options = {}) {
|
|
|
293
316
|
const configPath = options.configPath ?? process.env.MCP_CONFIG_PATH ?? path.join(process.cwd(), "mcp.json");
|
|
294
317
|
const dirPath = path.dirname(configPath);
|
|
295
318
|
const entryPoint = path.basename(configPath);
|
|
296
|
-
const toolName = options.toolName ??
|
|
297
|
-
const loaded = await
|
|
319
|
+
const toolName = options.toolName ?? chunkEMI67SPN_cjs.MCP_KIND;
|
|
320
|
+
const loaded = await chunkYK2MQDNJ_cjs.loadMCPTool(dirPath, { kind: chunkEMI67SPN_cjs.MCP_KIND, name: toolName, entryPoint });
|
|
298
321
|
if (!loaded.mcpConfig) {
|
|
299
322
|
throw new Error("mcp.json must have command or url");
|
|
300
323
|
}
|
|
@@ -310,163 +333,163 @@ async function registerMCPToolsFromConfig(runtime, registry, options = {}) {
|
|
|
310
333
|
|
|
311
334
|
Object.defineProperty(exports, "LangChainToolsHub", {
|
|
312
335
|
enumerable: true,
|
|
313
|
-
get: function () { return
|
|
336
|
+
get: function () { return chunkZIFQWIN3_cjs.LangChainToolsHub; }
|
|
314
337
|
});
|
|
315
338
|
Object.defineProperty(exports, "createAgentTools", {
|
|
316
339
|
enumerable: true,
|
|
317
|
-
get: function () { return
|
|
340
|
+
get: function () { return chunkZIFQWIN3_cjs.createAgentTools; }
|
|
318
341
|
});
|
|
319
342
|
Object.defineProperty(exports, "DirectoryScanner", {
|
|
320
343
|
enumerable: true,
|
|
321
|
-
get: function () { return
|
|
344
|
+
get: function () { return chunkYK2MQDNJ_cjs.DirectoryScanner; }
|
|
322
345
|
});
|
|
323
346
|
Object.defineProperty(exports, "DiscoveryError", {
|
|
324
347
|
enumerable: true,
|
|
325
|
-
get: function () { return
|
|
348
|
+
get: function () { return chunkYK2MQDNJ_cjs.DiscoveryError; }
|
|
326
349
|
});
|
|
327
350
|
Object.defineProperty(exports, "SkillManifestError", {
|
|
328
351
|
enumerable: true,
|
|
329
|
-
get: function () { return
|
|
352
|
+
get: function () { return chunkYK2MQDNJ_cjs.SkillManifestError; }
|
|
330
353
|
});
|
|
331
354
|
Object.defineProperty(exports, "buildFunctionToTool", {
|
|
332
355
|
enumerable: true,
|
|
333
|
-
get: function () { return
|
|
356
|
+
get: function () { return chunkYK2MQDNJ_cjs.buildFunctionToTool; }
|
|
334
357
|
});
|
|
335
358
|
Object.defineProperty(exports, "buildMcpPackage", {
|
|
336
359
|
enumerable: true,
|
|
337
|
-
get: function () { return
|
|
360
|
+
get: function () { return chunkYK2MQDNJ_cjs.buildMcpPackage; }
|
|
338
361
|
});
|
|
339
362
|
Object.defineProperty(exports, "initProject", {
|
|
340
363
|
enumerable: true,
|
|
341
|
-
get: function () { return
|
|
364
|
+
get: function () { return chunkYK2MQDNJ_cjs.initProject; }
|
|
342
365
|
});
|
|
343
366
|
Object.defineProperty(exports, "loadMCPTool", {
|
|
344
367
|
enumerable: true,
|
|
345
|
-
get: function () { return
|
|
368
|
+
get: function () { return chunkYK2MQDNJ_cjs.loadMCPTool; }
|
|
346
369
|
});
|
|
347
370
|
Object.defineProperty(exports, "loadSkillDefinition", {
|
|
348
371
|
enumerable: true,
|
|
349
|
-
get: function () { return
|
|
372
|
+
get: function () { return chunkYK2MQDNJ_cjs.loadSkillDefinition; }
|
|
350
373
|
});
|
|
351
374
|
Object.defineProperty(exports, "parseSkillMd", {
|
|
352
375
|
enumerable: true,
|
|
353
|
-
get: function () { return
|
|
376
|
+
get: function () { return chunkYK2MQDNJ_cjs.parseSkillMd; }
|
|
354
377
|
});
|
|
355
378
|
Object.defineProperty(exports, "runGeneratedMCP", {
|
|
356
379
|
enumerable: true,
|
|
357
|
-
get: function () { return
|
|
380
|
+
get: function () { return chunkYK2MQDNJ_cjs.runGeneratedMCP; }
|
|
358
381
|
});
|
|
359
382
|
Object.defineProperty(exports, "runMcpServer", {
|
|
360
383
|
enumerable: true,
|
|
361
|
-
get: function () { return
|
|
384
|
+
get: function () { return chunkYK2MQDNJ_cjs.runMcpServer; }
|
|
362
385
|
});
|
|
363
386
|
Object.defineProperty(exports, "scan", {
|
|
364
387
|
enumerable: true,
|
|
365
|
-
get: function () { return
|
|
388
|
+
get: function () { return chunkYK2MQDNJ_cjs.scan; }
|
|
366
389
|
});
|
|
367
390
|
Object.defineProperty(exports, "scanForTools", {
|
|
368
391
|
enumerable: true,
|
|
369
|
-
get: function () { return
|
|
392
|
+
get: function () { return chunkYK2MQDNJ_cjs.scanForTools; }
|
|
370
393
|
});
|
|
371
394
|
Object.defineProperty(exports, "scanSkillResources", {
|
|
372
395
|
enumerable: true,
|
|
373
|
-
get: function () { return
|
|
396
|
+
get: function () { return chunkYK2MQDNJ_cjs.scanSkillResources; }
|
|
374
397
|
});
|
|
375
398
|
Object.defineProperty(exports, "validateFrontmatter", {
|
|
376
399
|
enumerable: true,
|
|
377
|
-
get: function () { return
|
|
400
|
+
get: function () { return chunkYK2MQDNJ_cjs.validateFrontmatter; }
|
|
378
401
|
});
|
|
379
402
|
Object.defineProperty(exports, "BudgetManager", {
|
|
380
403
|
enumerable: true,
|
|
381
|
-
get: function () { return
|
|
404
|
+
get: function () { return chunkEMI67SPN_cjs.BudgetManager; }
|
|
382
405
|
});
|
|
383
406
|
Object.defineProperty(exports, "EventLog", {
|
|
384
407
|
enumerable: true,
|
|
385
|
-
get: function () { return
|
|
408
|
+
get: function () { return chunkEMI67SPN_cjs.EventLog; }
|
|
386
409
|
});
|
|
387
410
|
Object.defineProperty(exports, "Metrics", {
|
|
388
411
|
enumerable: true,
|
|
389
|
-
get: function () { return
|
|
412
|
+
get: function () { return chunkEMI67SPN_cjs.Metrics; }
|
|
390
413
|
});
|
|
391
414
|
Object.defineProperty(exports, "PTCRuntime", {
|
|
392
415
|
enumerable: true,
|
|
393
|
-
get: function () { return
|
|
416
|
+
get: function () { return chunkEMI67SPN_cjs.PTCRuntime; }
|
|
394
417
|
});
|
|
395
418
|
Object.defineProperty(exports, "PolicyDeniedError", {
|
|
396
419
|
enumerable: true,
|
|
397
|
-
get: function () { return
|
|
420
|
+
get: function () { return chunkEMI67SPN_cjs.PolicyDeniedError; }
|
|
398
421
|
});
|
|
399
422
|
Object.defineProperty(exports, "PolicyEngine", {
|
|
400
423
|
enumerable: true,
|
|
401
|
-
get: function () { return
|
|
424
|
+
get: function () { return chunkEMI67SPN_cjs.PolicyEngine; }
|
|
402
425
|
});
|
|
403
426
|
Object.defineProperty(exports, "SchemaValidationError", {
|
|
404
427
|
enumerable: true,
|
|
405
|
-
get: function () { return
|
|
428
|
+
get: function () { return chunkEMI67SPN_cjs.SchemaValidationError; }
|
|
406
429
|
});
|
|
407
430
|
Object.defineProperty(exports, "SchemaValidator", {
|
|
408
431
|
enumerable: true,
|
|
409
|
-
get: function () { return
|
|
432
|
+
get: function () { return chunkEMI67SPN_cjs.SchemaValidator; }
|
|
410
433
|
});
|
|
411
434
|
Object.defineProperty(exports, "Tracing", {
|
|
412
435
|
enumerable: true,
|
|
413
|
-
get: function () { return
|
|
436
|
+
get: function () { return chunkEMI67SPN_cjs.Tracing; }
|
|
414
437
|
});
|
|
415
438
|
Object.defineProperty(exports, "buildEvidence", {
|
|
416
439
|
enumerable: true,
|
|
417
|
-
get: function () { return
|
|
440
|
+
get: function () { return chunkEMI67SPN_cjs.buildEvidence; }
|
|
418
441
|
});
|
|
419
442
|
Object.defineProperty(exports, "createLogger", {
|
|
420
443
|
enumerable: true,
|
|
421
|
-
get: function () { return
|
|
444
|
+
get: function () { return chunkEMI67SPN_cjs.createLogger; }
|
|
422
445
|
});
|
|
423
446
|
Object.defineProperty(exports, "ensurePackageInCache", {
|
|
424
447
|
enumerable: true,
|
|
425
|
-
get: function () { return
|
|
448
|
+
get: function () { return chunkEMI67SPN_cjs.ensurePackageInCache; }
|
|
426
449
|
});
|
|
427
450
|
Object.defineProperty(exports, "expandToolDescriptorsToRegistryNames", {
|
|
428
451
|
enumerable: true,
|
|
429
|
-
get: function () { return
|
|
452
|
+
get: function () { return chunkEMI67SPN_cjs.expandToolDescriptorsToRegistryNames; }
|
|
430
453
|
});
|
|
431
454
|
Object.defineProperty(exports, "getPackageEntryPath", {
|
|
432
455
|
enumerable: true,
|
|
433
|
-
get: function () { return
|
|
456
|
+
get: function () { return chunkEMI67SPN_cjs.getPackageEntryPath; }
|
|
434
457
|
});
|
|
435
458
|
Object.defineProperty(exports, "importFromCache", {
|
|
436
459
|
enumerable: true,
|
|
437
|
-
get: function () { return
|
|
460
|
+
get: function () { return chunkEMI67SPN_cjs.importFromCache; }
|
|
438
461
|
});
|
|
439
462
|
Object.defineProperty(exports, "isNpmToolDescriptor", {
|
|
440
463
|
enumerable: true,
|
|
441
|
-
get: function () { return
|
|
464
|
+
get: function () { return chunkEMI67SPN_cjs.isNpmToolDescriptor; }
|
|
442
465
|
});
|
|
443
466
|
Object.defineProperty(exports, "loadToolConfig", {
|
|
444
467
|
enumerable: true,
|
|
445
|
-
get: function () { return
|
|
468
|
+
get: function () { return chunkEMI67SPN_cjs.loadToolConfig; }
|
|
446
469
|
});
|
|
447
470
|
Object.defineProperty(exports, "normalizeToolList", {
|
|
448
471
|
enumerable: true,
|
|
449
|
-
get: function () { return
|
|
472
|
+
get: function () { return chunkEMI67SPN_cjs.normalizeToolList; }
|
|
450
473
|
});
|
|
451
474
|
Object.defineProperty(exports, "parseNpmToolDescriptor", {
|
|
452
475
|
enumerable: true,
|
|
453
|
-
get: function () { return
|
|
476
|
+
get: function () { return chunkEMI67SPN_cjs.parseNpmToolDescriptor; }
|
|
454
477
|
});
|
|
455
478
|
Object.defineProperty(exports, "resolveNpmToolDescriptor", {
|
|
456
479
|
enumerable: true,
|
|
457
|
-
get: function () { return
|
|
480
|
+
get: function () { return chunkEMI67SPN_cjs.resolveNpmToolDescriptor; }
|
|
458
481
|
});
|
|
459
482
|
Object.defineProperty(exports, "resolveToolDescriptor", {
|
|
460
483
|
enumerable: true,
|
|
461
|
-
get: function () { return
|
|
484
|
+
get: function () { return chunkEMI67SPN_cjs.resolveToolDescriptor; }
|
|
462
485
|
});
|
|
463
486
|
Object.defineProperty(exports, "sanitizeForLog", {
|
|
464
487
|
enumerable: true,
|
|
465
|
-
get: function () { return
|
|
488
|
+
get: function () { return chunkEMI67SPN_cjs.sanitizeForLog; }
|
|
466
489
|
});
|
|
467
490
|
Object.defineProperty(exports, "summarizeForLog", {
|
|
468
491
|
enumerable: true,
|
|
469
|
-
get: function () { return
|
|
492
|
+
get: function () { return chunkEMI67SPN_cjs.summarizeForLog; }
|
|
470
493
|
});
|
|
471
494
|
Object.defineProperty(exports, "DEFAULT_INPUT_SCHEMA", {
|
|
472
495
|
enumerable: true,
|