@easynet/agent-tool 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/README.md +90 -73
  2. package/dist/api/adapters/LangChainToolsHub.d.ts +34 -0
  3. package/dist/api/adapters/LangChainToolsHub.d.ts.map +1 -0
  4. package/dist/api/createAgentTools.d.ts +24 -0
  5. package/dist/api/createAgentTools.d.ts.map +1 -0
  6. package/dist/api/expose/index.d.ts +16 -0
  7. package/dist/api/expose/index.d.ts.map +1 -0
  8. package/dist/api/expose/mcp-build/build.d.ts.map +1 -0
  9. package/dist/{codegen → api/expose/mcp-build}/generator.d.ts +3 -3
  10. package/dist/api/expose/mcp-build/generator.d.ts.map +1 -0
  11. package/dist/api/expose/mcp-build/index.d.ts +8 -0
  12. package/dist/api/expose/mcp-build/index.d.ts.map +1 -0
  13. package/dist/api/expose/mcp-build/init.d.ts.map +1 -0
  14. package/dist/api/expose/mcp-build/run.d.ts.map +1 -0
  15. package/dist/api/expose/mcp-build/types.d.ts +25 -0
  16. package/dist/api/expose/mcp-build/types.d.ts.map +1 -0
  17. package/dist/api/expose/mcpServer.d.ts +75 -0
  18. package/dist/api/expose/mcpServer.d.ts.map +1 -0
  19. package/dist/api/expose/openapi.d.ts +23 -0
  20. package/dist/api/expose/openapi.d.ts.map +1 -0
  21. package/dist/api/expose/openapiHttp.d.ts +67 -0
  22. package/dist/api/expose/openapiHttp.d.ts.map +1 -0
  23. package/dist/api/main.cjs +56 -0
  24. package/dist/api/main.cjs.map +1 -0
  25. package/dist/api/main.d.ts +23 -0
  26. package/dist/api/main.d.ts.map +1 -0
  27. package/dist/api/main.js +7 -0
  28. package/dist/api/main.js.map +1 -0
  29. package/dist/api/runtimeFromConfig.d.ts +34 -0
  30. package/dist/api/runtimeFromConfig.d.ts.map +1 -0
  31. package/dist/canonicalCoreSchemas-CTW6CCFY.cjs +20 -0
  32. package/dist/canonicalCoreSchemas-CTW6CCFY.cjs.map +1 -0
  33. package/dist/canonicalCoreSchemas-YLHVHYJZ.js +3 -0
  34. package/dist/canonicalCoreSchemas-YLHVHYJZ.js.map +1 -0
  35. package/dist/{chunk-AXUNV4MK.js → chunk-5SWSNVMI.js} +3 -3
  36. package/dist/chunk-5SWSNVMI.js.map +1 -0
  37. package/dist/chunk-6F5JHLZ7.cjs +243 -0
  38. package/dist/chunk-6F5JHLZ7.cjs.map +1 -0
  39. package/dist/chunk-AE6FSNGY.js +201 -0
  40. package/dist/chunk-AE6FSNGY.js.map +1 -0
  41. package/dist/chunk-BZOKPJMP.cjs +120 -0
  42. package/dist/chunk-BZOKPJMP.cjs.map +1 -0
  43. package/dist/chunk-FA2ZEICE.cjs +1620 -0
  44. package/dist/chunk-FA2ZEICE.cjs.map +1 -0
  45. package/dist/chunk-FR2CXERF.js +239 -0
  46. package/dist/chunk-FR2CXERF.js.map +1 -0
  47. package/dist/chunk-MGEQPAHV.cjs +475 -0
  48. package/dist/chunk-MGEQPAHV.cjs.map +1 -0
  49. package/dist/{chunk-BM4EVYI5.js → chunk-PJ4RUBZL.js} +836 -122
  50. package/dist/chunk-PJ4RUBZL.js.map +1 -0
  51. package/dist/chunk-Q7KPGWC6.js +1584 -0
  52. package/dist/chunk-Q7KPGWC6.js.map +1 -0
  53. package/dist/chunk-QVH6IQKQ.js +469 -0
  54. package/dist/chunk-QVH6IQKQ.js.map +1 -0
  55. package/dist/{chunk-3YLVPZRJ.cjs → chunk-SOFUWEZ6.cjs} +3 -3
  56. package/dist/chunk-SOFUWEZ6.cjs.map +1 -0
  57. package/dist/chunk-TBMWJWQ2.js +116 -0
  58. package/dist/chunk-TBMWJWQ2.js.map +1 -0
  59. package/dist/{chunk-Z7TGIG77.cjs → chunk-ZBNRHRGM.cjs} +843 -127
  60. package/dist/chunk-ZBNRHRGM.cjs.map +1 -0
  61. package/dist/chunk-ZNJBRLKN.cjs +210 -0
  62. package/dist/chunk-ZNJBRLKN.cjs.map +1 -0
  63. package/dist/core/index.cjs +20 -0
  64. package/dist/core/index.cjs.map +1 -0
  65. package/dist/{core.d.ts → core/index.d.ts} +2 -3
  66. package/dist/core/index.d.ts.map +1 -0
  67. package/dist/core/index.js +3 -0
  68. package/dist/core/index.js.map +1 -0
  69. package/dist/core/registry/ToolRegistry.d.ts.map +1 -0
  70. package/dist/core/runtime/Budget.d.ts.map +1 -0
  71. package/dist/core/runtime/Evidence.d.ts.map +1 -0
  72. package/dist/{runtime → core/runtime}/PTCRuntime.d.ts +4 -4
  73. package/dist/core/runtime/PTCRuntime.d.ts.map +1 -0
  74. package/dist/{runtime → core/runtime}/PTCRuntimeObservability.d.ts +4 -4
  75. package/dist/core/runtime/PTCRuntimeObservability.d.ts.map +1 -0
  76. package/dist/{runtime → core/runtime}/PTCRuntimePipeline.d.ts +4 -4
  77. package/dist/core/runtime/PTCRuntimePipeline.d.ts.map +1 -0
  78. package/dist/core/runtime/PolicyEngine.d.ts.map +1 -0
  79. package/dist/core/runtime/Retry.d.ts.map +1 -0
  80. package/dist/core/runtime/SchemaValidator.d.ts.map +1 -0
  81. package/dist/core/runtime.cjs +24 -0
  82. package/dist/core/runtime.cjs.map +1 -0
  83. package/dist/core/runtime.d.ts +12 -0
  84. package/dist/core/runtime.d.ts.map +1 -0
  85. package/dist/core/runtime.js +3 -0
  86. package/dist/core/runtime.js.map +1 -0
  87. package/dist/core/types/Events.d.ts.map +1 -0
  88. package/dist/core/types/ToolIntent.d.ts.map +1 -0
  89. package/dist/{types → core/types}/ToolResult.d.ts +6 -1
  90. package/dist/core/types/ToolResult.d.ts.map +1 -0
  91. package/dist/{types → core/types}/ToolSpec.d.ts +15 -5
  92. package/dist/core/types/ToolSpec.d.ts.map +1 -0
  93. package/dist/core/types/ToolTypeHandler.d.ts +88 -0
  94. package/dist/core/types/ToolTypeHandler.d.ts.map +1 -0
  95. package/dist/{types → core/types}/index.d.ts +2 -1
  96. package/dist/core/types/index.d.ts.map +1 -0
  97. package/dist/index.cjs +249 -2749
  98. package/dist/index.cjs.map +1 -1
  99. package/dist/index.d.ts +61 -55
  100. package/dist/index.d.ts.map +1 -1
  101. package/dist/index.js +126 -2688
  102. package/dist/index.js.map +1 -1
  103. package/dist/observability/EventLog.d.ts +1 -1
  104. package/dist/observability/EventLog.d.ts.map +1 -1
  105. package/dist/tools/discoveryFactory.d.ts +117 -0
  106. package/dist/tools/discoveryFactory.d.ts.map +1 -0
  107. package/dist/tools/function/index.d.ts +10 -0
  108. package/dist/tools/function/index.d.ts.map +1 -0
  109. package/dist/{codegen/scan → tools/function}/scanner.d.ts +5 -2
  110. package/dist/{codegen/scan → tools/function}/scanner.d.ts.map +1 -1
  111. package/dist/{codegen/scan → tools/function}/schemaFromTs.d.ts +1 -1
  112. package/dist/tools/function/schemaFromTs.d.ts.map +1 -0
  113. package/dist/tools/function/types.d.ts +20 -0
  114. package/dist/tools/function/types.d.ts.map +1 -0
  115. package/dist/tools/index.d.ts +13 -0
  116. package/dist/tools/index.d.ts.map +1 -0
  117. package/dist/{discovery/load → tools/langchain}/LangChainLoader.d.ts +1 -1
  118. package/dist/tools/langchain/LangChainLoader.d.ts.map +1 -0
  119. package/dist/tools/langchain/directoryApply.d.ts +5 -0
  120. package/dist/tools/langchain/directoryApply.d.ts.map +1 -0
  121. package/dist/tools/langchain/directoryLoad.d.ts +13 -0
  122. package/dist/tools/langchain/directoryLoad.d.ts.map +1 -0
  123. package/dist/tools/langchain/index.d.ts +3 -0
  124. package/dist/tools/langchain/index.d.ts.map +1 -0
  125. package/dist/tools/langchain/scanner.d.ts +8 -0
  126. package/dist/tools/langchain/scanner.d.ts.map +1 -0
  127. package/dist/tools/langchain/types.d.ts +5 -0
  128. package/dist/tools/langchain/types.d.ts.map +1 -0
  129. package/dist/{mcp → tools/mcp}/MCPClientAdapter.d.ts +3 -3
  130. package/dist/tools/mcp/MCPClientAdapter.d.ts.map +1 -0
  131. package/dist/{discovery/load → tools/mcp}/MCPLoader.d.ts +1 -1
  132. package/dist/tools/mcp/MCPLoader.d.ts.map +1 -0
  133. package/dist/tools/mcp/MCPProcessManager.d.ts +29 -0
  134. package/dist/tools/mcp/MCPProcessManager.d.ts.map +1 -0
  135. package/dist/{mcp → tools/mcp}/connectMCP.d.ts +3 -3
  136. package/dist/tools/mcp/connectMCP.d.ts.map +1 -0
  137. package/dist/tools/mcp/directoryApply.d.ts +10 -0
  138. package/dist/tools/mcp/directoryApply.d.ts.map +1 -0
  139. package/dist/{mcp → tools/mcp}/index.d.ts +6 -1
  140. package/dist/tools/mcp/index.d.ts.map +1 -0
  141. package/dist/tools/mcp/mcpSpecToToolSpec.d.ts +8 -0
  142. package/dist/tools/mcp/mcpSpecToToolSpec.d.ts.map +1 -0
  143. package/dist/{mcp → tools/mcp}/registerMCPTools.d.ts +2 -2
  144. package/dist/tools/mcp/registerMCPTools.d.ts.map +1 -0
  145. package/dist/tools/mcp/scanner.d.ts +8 -0
  146. package/dist/tools/mcp/scanner.d.ts.map +1 -0
  147. package/dist/tools/mcp/types.d.ts +3 -0
  148. package/dist/tools/mcp/types.d.ts.map +1 -0
  149. package/dist/{discovery/load → tools/n8n}/N8nLoader.d.ts +3 -3
  150. package/dist/tools/n8n/N8nLoader.d.ts.map +1 -0
  151. package/dist/tools/n8n/directoryApply.d.ts +10 -0
  152. package/dist/tools/n8n/directoryApply.d.ts.map +1 -0
  153. package/dist/tools/n8n/index.d.ts +6 -0
  154. package/dist/tools/n8n/index.d.ts.map +1 -0
  155. package/dist/tools/n8n/scanN8n.d.ts +20 -0
  156. package/dist/tools/n8n/scanN8n.d.ts.map +1 -0
  157. package/dist/tools/n8n/types.d.ts +18 -0
  158. package/dist/tools/n8n/types.d.ts.map +1 -0
  159. package/dist/tools/scanPackage.d.ts +42 -0
  160. package/dist/tools/scanPackage.d.ts.map +1 -0
  161. package/dist/{discovery/load → tools/skill}/SkillLoader.d.ts +1 -1
  162. package/dist/tools/skill/SkillLoader.d.ts.map +1 -0
  163. package/dist/tools/skill/SkillManifest.d.ts.map +1 -0
  164. package/dist/tools/skill/SkillMdParser.d.ts.map +1 -0
  165. package/dist/tools/skill/directoryApply.d.ts +10 -0
  166. package/dist/tools/skill/directoryApply.d.ts.map +1 -0
  167. package/dist/tools/skill/index.d.ts +8 -0
  168. package/dist/tools/skill/index.d.ts.map +1 -0
  169. package/dist/tools/skill/scanSkill.d.ts +20 -0
  170. package/dist/tools/skill/scanSkill.d.ts.map +1 -0
  171. package/dist/tools/skill/types.d.ts +19 -0
  172. package/dist/tools/skill/types.d.ts.map +1 -0
  173. package/dist/tools/util/canonicalCoreSchemas.d.ts +19 -0
  174. package/dist/tools/util/canonicalCoreSchemas.d.ts.map +1 -0
  175. package/dist/tools/util/index.d.ts +13 -0
  176. package/dist/tools/util/index.d.ts.map +1 -0
  177. package/dist/tools/util/resolveEntry.d.ts +6 -0
  178. package/dist/tools/util/resolveEntry.d.ts.map +1 -0
  179. package/dist/tools/util/scanUtil.d.ts +9 -0
  180. package/dist/tools/util/scanUtil.d.ts.map +1 -0
  181. package/dist/tools/util/toolConfig.d.ts +32 -0
  182. package/dist/tools/util/toolConfig.d.ts.map +1 -0
  183. package/dist/tools/util/toolDescriptor.d.ts +92 -0
  184. package/dist/tools/util/toolDescriptor.d.ts.map +1 -0
  185. package/dist/utils/cli/index.cjs +419 -0
  186. package/dist/utils/cli/index.cjs.map +1 -0
  187. package/dist/utils/cli/index.d.ts +9 -0
  188. package/dist/utils/cli/index.d.ts.map +1 -0
  189. package/dist/utils/cli/index.js +412 -0
  190. package/dist/utils/cli/index.js.map +1 -0
  191. package/dist/utils/cli/toolRuntime.d.ts +19 -0
  192. package/dist/utils/cli/toolRuntime.d.ts.map +1 -0
  193. package/dist/utils/npmCache.d.ts +28 -0
  194. package/dist/utils/npmCache.d.ts.map +1 -0
  195. package/package.json +20 -11
  196. package/dist/chunk-3YLVPZRJ.cjs.map +0 -1
  197. package/dist/chunk-AXUNV4MK.js.map +0 -1
  198. package/dist/chunk-BM4EVYI5.js.map +0 -1
  199. package/dist/chunk-P3UEAZHK.cjs +0 -171
  200. package/dist/chunk-P3UEAZHK.cjs.map +0 -1
  201. package/dist/chunk-RPAMQCFH.js +0 -167
  202. package/dist/chunk-RPAMQCFH.js.map +0 -1
  203. package/dist/chunk-Z7TGIG77.cjs.map +0 -1
  204. package/dist/cli.cjs +0 -154
  205. package/dist/cli.cjs.map +0 -1
  206. package/dist/cli.d.ts +0 -10
  207. package/dist/cli.d.ts.map +0 -1
  208. package/dist/cli.js +0 -147
  209. package/dist/cli.js.map +0 -1
  210. package/dist/codegen/build.d.ts.map +0 -1
  211. package/dist/codegen/generator.d.ts.map +0 -1
  212. package/dist/codegen/index.d.ts +0 -21
  213. package/dist/codegen/index.d.ts.map +0 -1
  214. package/dist/codegen/init.d.ts.map +0 -1
  215. package/dist/codegen/run.d.ts.map +0 -1
  216. package/dist/codegen/scan/scanN8n.d.ts +0 -17
  217. package/dist/codegen/scan/scanN8n.d.ts.map +0 -1
  218. package/dist/codegen/scan/scanSkill.d.ts +0 -17
  219. package/dist/codegen/scan/scanSkill.d.ts.map +0 -1
  220. package/dist/codegen/scan/scanTools.d.ts +0 -31
  221. package/dist/codegen/scan/scanTools.d.ts.map +0 -1
  222. package/dist/codegen/scan/schemaFromTs.d.ts.map +0 -1
  223. package/dist/codegen/types.d.ts +0 -81
  224. package/dist/codegen/types.d.ts.map +0 -1
  225. package/dist/core.cjs +0 -20
  226. package/dist/core.cjs.map +0 -1
  227. package/dist/core.d.ts.map +0 -1
  228. package/dist/core.js +0 -3
  229. package/dist/core.js.map +0 -1
  230. package/dist/discovery/MCPProcessManager.d.ts +0 -57
  231. package/dist/discovery/MCPProcessManager.d.ts.map +0 -1
  232. package/dist/discovery/errors.d.ts +0 -13
  233. package/dist/discovery/errors.d.ts.map +0 -1
  234. package/dist/discovery/load/LangChainLoader.d.ts.map +0 -1
  235. package/dist/discovery/load/MCPLoader.d.ts.map +0 -1
  236. package/dist/discovery/load/N8nLoader.d.ts.map +0 -1
  237. package/dist/discovery/load/SkillLoader.d.ts.map +0 -1
  238. package/dist/discovery/load/SkillManifest.d.ts.map +0 -1
  239. package/dist/discovery/load/SkillMdParser.d.ts.map +0 -1
  240. package/dist/discovery/load/index.d.ts +0 -6
  241. package/dist/discovery/load/index.d.ts.map +0 -1
  242. package/dist/discovery/load/resolveEntry.d.ts +0 -7
  243. package/dist/discovery/load/resolveEntry.d.ts.map +0 -1
  244. package/dist/discovery/scan/DirectoryScanner.d.ts +0 -37
  245. package/dist/discovery/scan/DirectoryScanner.d.ts.map +0 -1
  246. package/dist/discovery/scan/scanUtil.d.ts +0 -16
  247. package/dist/discovery/scan/scanUtil.d.ts.map +0 -1
  248. package/dist/discovery/types.d.ts +0 -99
  249. package/dist/discovery/types.d.ts.map +0 -1
  250. package/dist/llm/AgentLLMAdapter.d.ts +0 -27
  251. package/dist/llm/AgentLLMAdapter.d.ts.map +0 -1
  252. package/dist/llm/LangChainToolsHub.d.ts +0 -31
  253. package/dist/llm/LangChainToolsHub.d.ts.map +0 -1
  254. package/dist/llm/OpenAICompatibleClient.d.ts +0 -64
  255. package/dist/llm/OpenAICompatibleClient.d.ts.map +0 -1
  256. package/dist/llm/ReActAgent.d.ts +0 -35
  257. package/dist/llm/ReActAgent.d.ts.map +0 -1
  258. package/dist/llm-export.cjs +0 -20
  259. package/dist/llm-export.cjs.map +0 -1
  260. package/dist/llm-export.d.ts +0 -9
  261. package/dist/llm-export.d.ts.map +0 -1
  262. package/dist/llm-export.js +0 -3
  263. package/dist/llm-export.js.map +0 -1
  264. package/dist/mcp/MCPClientAdapter.d.ts.map +0 -1
  265. package/dist/mcp/connectMCP.d.ts.map +0 -1
  266. package/dist/mcp/index.d.ts.map +0 -1
  267. package/dist/mcp/registerMCPTools.d.ts.map +0 -1
  268. package/dist/registry/ToolRegistry.d.ts.map +0 -1
  269. package/dist/report/AgentReportGenerator.d.ts +0 -53
  270. package/dist/report/AgentReportGenerator.d.ts.map +0 -1
  271. package/dist/report/agent-report-template.html +0 -362
  272. package/dist/report/index.d.ts +0 -3
  273. package/dist/report/index.d.ts.map +0 -1
  274. package/dist/report/types.d.ts +0 -101
  275. package/dist/report/types.d.ts.map +0 -1
  276. package/dist/runAgent.d.ts +0 -37
  277. package/dist/runAgent.d.ts.map +0 -1
  278. package/dist/runtime/Budget.d.ts.map +0 -1
  279. package/dist/runtime/Evidence.d.ts.map +0 -1
  280. package/dist/runtime/PTCRuntime.d.ts.map +0 -1
  281. package/dist/runtime/PTCRuntimeObservability.d.ts.map +0 -1
  282. package/dist/runtime/PTCRuntimePipeline.d.ts.map +0 -1
  283. package/dist/runtime/PolicyEngine.d.ts.map +0 -1
  284. package/dist/runtime/Retry.d.ts.map +0 -1
  285. package/dist/runtime/SchemaValidator.d.ts.map +0 -1
  286. package/dist/toolDescriptor.d.ts +0 -38
  287. package/dist/toolDescriptor.d.ts.map +0 -1
  288. package/dist/types/Events.d.ts.map +0 -1
  289. package/dist/types/ToolIntent.d.ts.map +0 -1
  290. package/dist/types/ToolResult.d.ts.map +0 -1
  291. package/dist/types/ToolSpec.d.ts.map +0 -1
  292. package/dist/types/index.d.ts.map +0 -1
  293. package/extensions/examples/README.md +0 -40
  294. package/extensions/examples/scripts/agent-tool-react-stock.mjs +0 -30
  295. package/extensions/examples/tools/instruction-only/skill/SKILL.md +0 -26
  296. package/extensions/examples/tools/web-search/mcp/mcp.json +0 -8
  297. /package/dist/{codegen → api/expose/mcp-build}/build.d.ts +0 -0
  298. /package/dist/{codegen → api/expose/mcp-build}/init.d.ts +0 -0
  299. /package/dist/{codegen → api/expose/mcp-build}/run.d.ts +0 -0
  300. /package/dist/{registry → core/registry}/ToolRegistry.d.ts +0 -0
  301. /package/dist/{runtime → core/runtime}/Budget.d.ts +0 -0
  302. /package/dist/{runtime → core/runtime}/Evidence.d.ts +0 -0
  303. /package/dist/{runtime → core/runtime}/PolicyEngine.d.ts +0 -0
  304. /package/dist/{runtime → core/runtime}/Retry.d.ts +0 -0
  305. /package/dist/{runtime → core/runtime}/SchemaValidator.d.ts +0 -0
  306. /package/dist/{types → core/types}/Events.d.ts +0 -0
  307. /package/dist/{types → core/types}/ToolIntent.d.ts +0 -0
  308. /package/dist/{discovery/load → tools/skill}/SkillManifest.d.ts +0 -0
  309. /package/dist/{discovery/load → tools/skill}/SkillMdParser.d.ts +0 -0
@@ -0,0 +1,412 @@
1
+ #!/usr/bin/env node
2
+ import { initProject, buildMcpPackage, runMcpServer } from '../../chunk-PJ4RUBZL.js';
3
+ import '../../chunk-5SWSNVMI.js';
4
+ import { runMCPServerOverStdio, createHttpService } from '../../chunk-QVH6IQKQ.js';
5
+ import { resolveToolDescriptor, findAndLoadToolConfig, resolveSandboxedPath, createRuntimeFromConfigSync, getDisplayScope } from '../../chunk-Q7KPGWC6.js';
6
+ import '../../chunk-AE6FSNGY.js';
7
+ import { enrichSpecWithCanonicalSchema } from '../../chunk-FR2CXERF.js';
8
+ import path from 'path';
9
+ import { realpathSync } from 'fs';
10
+ import { fileURLToPath } from 'url';
11
+
12
+ ({
13
+ sandboxRoot: process.cwd()});
14
+ function getRuntimeWithTools(pathOpt) {
15
+ const cwd = process.cwd();
16
+ const searchDir = pathOpt ? path.resolve(cwd, pathOpt) : cwd;
17
+ const config = findAndLoadToolConfig(searchDir);
18
+ let sandboxRoot = cwd;
19
+ if (config.sandboxedPath && typeof config.sandboxedPath === "string" && config.configPath) {
20
+ sandboxRoot = resolveSandboxedPath(config.configPath, config.sandboxedPath);
21
+ }
22
+ const coreConfig = { sandboxRoot, allowedHosts: [] };
23
+ return createRuntimeFromConfigSync({ coreTools: coreConfig });
24
+ }
25
+ function parseToolName(fullName) {
26
+ const i = fullName.indexOf("/");
27
+ if (i < 0) return { scope: "", name: fullName };
28
+ return { scope: fullName.slice(0, i), name: fullName.slice(i + 1) };
29
+ }
30
+ function parseArgv(argv) {
31
+ const args = argv.slice(2);
32
+ let command = "help";
33
+ let startSub = "http";
34
+ let help = false;
35
+ let pathOpt = "";
36
+ let outDir = "";
37
+ let include = [];
38
+ let includeN8n = false;
39
+ let toolName = "";
40
+ let toolArgsJson = "{}";
41
+ let port = 3e3;
42
+ let host = "127.0.0.1";
43
+ const commands = [
44
+ "init",
45
+ "build",
46
+ "serve",
47
+ "list",
48
+ "ls",
49
+ "show",
50
+ "describe",
51
+ "run",
52
+ "start",
53
+ "help"
54
+ ];
55
+ const startSubcommands = ["mcp", "http"];
56
+ for (let i = 0; i < args.length; i++) {
57
+ const arg = args[i];
58
+ if (arg === "--help" || arg === "-h") {
59
+ help = true;
60
+ } else if (arg === "--path" || arg === "-p") {
61
+ pathOpt = path.resolve(process.cwd(), args[++i] ?? "");
62
+ } else if (arg === "--out" || arg === "-o") {
63
+ outDir = path.resolve(process.cwd(), args[++i] ?? "");
64
+ } else if (arg === "--include" || arg === "-i") {
65
+ const v = args[++i];
66
+ if (v) include.push(v);
67
+ } else if (arg === "--include-n8n") {
68
+ includeN8n = true;
69
+ } else if (arg === "--port") {
70
+ const v = args[++i];
71
+ if (v !== void 0) port = parseInt(v, 10) || 3e3;
72
+ } else if (arg === "--host") {
73
+ const v = args[++i];
74
+ if (v !== void 0) host = v;
75
+ } else if (arg && !arg.startsWith("-") && commands.includes(arg)) {
76
+ command = arg;
77
+ const nextArg = args[i + 1];
78
+ if ((command === "show" || command === "describe") && nextArg !== void 0 && !nextArg.startsWith("-")) {
79
+ toolName = args[++i] ?? "";
80
+ } else if (command === "run" && nextArg !== void 0 && !nextArg.startsWith("-")) {
81
+ toolName = args[++i] ?? "";
82
+ const runNext = args[i + 1];
83
+ if (runNext !== void 0 && !runNext.startsWith("-")) {
84
+ toolArgsJson = args[++i] ?? "{}";
85
+ }
86
+ } else if (command === "start" && nextArg !== void 0 && !nextArg.startsWith("-") && startSubcommands.includes(nextArg)) {
87
+ startSub = args[++i];
88
+ }
89
+ }
90
+ }
91
+ return { command, startSub, help, pathOpt, outDir, include, includeN8n, toolName, toolArgsJson, port, host };
92
+ }
93
+ function printHelp() {
94
+ const bin = "agent-tool";
95
+ process.stdout.write(`
96
+ Usage: ${bin} <command> [options] [args]
97
+
98
+ Primary commands:
99
+ ls List all tools (scope, name, description).
100
+ describe <tool path> Show tool details (schema, capabilities, etc.).
101
+ run <tool path> [params] Run a tool. Params: JSON, e.g. '{"path":"README.md"}'
102
+ start mcp Start MCP server over stdio (streamable).
103
+ start http Start OpenAPI HTTP server (API + Swagger).
104
+
105
+ Other commands:
106
+ init Create project template. Then npm install && npm run build.
107
+ build Scan folder for @tool / SKILL / n8n, generate MCP npm package.
108
+ serve Start the generated MCP server (stdio) for testing.
109
+ list Alias for ls.
110
+ show <tool> Alias for describe.
111
+ help Show this help.
112
+
113
+ Options:
114
+ --path, -p <path> For init/build/serve: path (default: cwd).
115
+ --out, -o <path> For build: output directory.
116
+ --include, -i <glob> For build: glob for TS files.
117
+ --include-n8n For build: include n8n workflow tools.
118
+ --port <number> For start http: port (default: 3000).
119
+ --host <string> For start http: host (default: 127.0.0.1).
120
+ --help, -h Show this help.
121
+
122
+ Examples:
123
+ ${bin} ls
124
+ ${bin} describe core/fs.readText
125
+ ${bin} run core/fs.readText '{"path":"README.md"}'
126
+ ${bin} start mcp
127
+ ${bin} start http --port 3000
128
+ ${bin} build --path . --out dist
129
+
130
+ For agent run (ReAct + agent.yaml): npx @easynet/agent-orchestra run "task" -c agent.yaml
131
+ `);
132
+ }
133
+ async function cmdInit(pathOpt) {
134
+ try {
135
+ const { targetPath, filesCreated } = await initProject({ targetPath: pathOpt || void 0 });
136
+ process.stdout.write(`Initialized project at ${targetPath}
137
+ Created: ${filesCreated.join(", ")}
138
+ Next: npm install && npm run build
139
+ `);
140
+ return 0;
141
+ } catch (err) {
142
+ process.stderr.write(`Init failed: ${err instanceof Error ? err.message : String(err)}
143
+ `);
144
+ return 1;
145
+ }
146
+ }
147
+ async function cmdBuild(pathOpt, outDir, include, includeN8n) {
148
+ try {
149
+ const result = await buildMcpPackage({
150
+ projectPath: pathOpt || void 0,
151
+ outDir: outDir || void 0,
152
+ include: include.length > 0 ? include : void 0,
153
+ includeN8n: includeN8n || void 0
154
+ });
155
+ process.stdout.write(
156
+ `Built ${result.toolCount} tool(s) -> ${result.outDir}
157
+ Entry: ${result.entryPath}
158
+ mcp.json: ${result.mcpJsonPath}
159
+ `
160
+ );
161
+ return 0;
162
+ } catch (err) {
163
+ process.stderr.write(`Build failed: ${err instanceof Error ? err.message : String(err)}
164
+ `);
165
+ return 1;
166
+ }
167
+ }
168
+ async function cmdServe(pathOpt) {
169
+ try {
170
+ const { process: child } = await runMcpServer({ path: pathOpt || void 0 });
171
+ child.stdin?.pipe(process.stdin);
172
+ child.stdout?.pipe(process.stdout);
173
+ process.stdin?.unref();
174
+ const exit = new Promise((resolve) => {
175
+ child.on("close", (code) => resolve(code ?? 0));
176
+ });
177
+ return exit;
178
+ } catch (err) {
179
+ process.stderr.write(`Serve failed: ${err instanceof Error ? err.message : String(err)}
180
+ `);
181
+ return 1;
182
+ }
183
+ }
184
+ var LS_DESC_MAX = 72;
185
+ function formatLsOutput(specs) {
186
+ const rows = specs.map((spec) => {
187
+ const { name } = parseToolName(spec.name);
188
+ const scope = getDisplayScope(spec.name, spec.kind, spec.version);
189
+ const desc = (spec.description ?? "").replace(/\n/g, " ").trim().slice(0, LS_DESC_MAX);
190
+ return { scope, name, description: desc || "(no description)" };
191
+ });
192
+ const scopeW = Math.max(6, ...rows.map((r) => r.scope.length));
193
+ const nameW = Math.max(4, ...rows.map((r) => r.name.length));
194
+ const sep = `${"\u2500".repeat(scopeW)}\u252C${"\u2500".repeat(nameW)}\u252C${"\u2500".repeat(LS_DESC_MAX + 2)}`;
195
+ const header = [
196
+ "SCOPE".padEnd(scopeW),
197
+ "NAME".padEnd(nameW),
198
+ "DESCRIPTION"
199
+ ].join(" \u2502 ");
200
+ const lines = [
201
+ header,
202
+ sep,
203
+ ...rows.map(
204
+ (r) => [
205
+ r.scope.padEnd(scopeW),
206
+ r.name.padEnd(nameW),
207
+ r.description
208
+ ].join(" \u2502 ")
209
+ )
210
+ ];
211
+ return lines.join("\n");
212
+ }
213
+ function formatDescribeOutput(spec) {
214
+ const { name: localName } = parseToolName(spec.name);
215
+ const scope = getDisplayScope(spec.name, spec.kind, spec.version);
216
+ const sections = [];
217
+ sections.push("\u250C\u2500 Tool");
218
+ sections.push(`\u2502 name: ${spec.name}`);
219
+ sections.push(`\u2502 scope: ${scope}`);
220
+ sections.push(`\u2502 localName: ${localName}`);
221
+ sections.push(`\u2502 version: ${spec.version}`);
222
+ sections.push(`\u2502 kind: ${spec.kind}`);
223
+ sections.push("\u251C\u2500 Description");
224
+ sections.push(`\u2502 ${(spec.description ?? "(none)").replace(/\n/g, "\n\u2502 ")}`);
225
+ sections.push("\u251C\u2500 Tags");
226
+ sections.push(`\u2502 ${spec.tags?.length ? spec.tags.join(", ") : "(none)"}`);
227
+ sections.push("\u251C\u2500 Capabilities");
228
+ sections.push(`\u2502 ${spec.capabilities.join(", ")}`);
229
+ if (spec._meta?.hitl?.sideEffect) {
230
+ sections.push("\u251C\u2500 HITL");
231
+ sections.push(`\u2502 sideEffect: ${spec._meta.hitl.sideEffect}`);
232
+ }
233
+ sections.push("\u251C\u2500 Input schema");
234
+ sections.push(
235
+ "\u2502 " + JSON.stringify(spec.inputSchema, null, 2).replace(/\n/g, "\n\u2502 ")
236
+ );
237
+ sections.push("\u2514\u2500 Output schema");
238
+ sections.push(
239
+ " " + JSON.stringify(spec.outputSchema, null, 2).replace(/\n/g, "\n ")
240
+ );
241
+ return sections.join("\n");
242
+ }
243
+ async function cmdLs(pathOpt) {
244
+ try {
245
+ const { registry } = getRuntimeWithTools(pathOpt);
246
+ const specs = registry.snapshot();
247
+ if (specs.length === 0) {
248
+ process.stdout.write("No tools registered.\n");
249
+ return 0;
250
+ }
251
+ specs.sort((a, b) => a.name.localeCompare(b.name));
252
+ process.stdout.write(formatLsOutput(specs) + "\n");
253
+ return 0;
254
+ } catch (err) {
255
+ process.stderr.write(`ls failed: ${err instanceof Error ? err.message : String(err)}
256
+ `);
257
+ return 1;
258
+ }
259
+ }
260
+ async function cmdDescribe(toolName, pathOpt) {
261
+ if (!toolName.trim()) {
262
+ process.stderr.write("Usage: agent-tool describe <tool path>\n");
263
+ return 1;
264
+ }
265
+ try {
266
+ const { registry } = getRuntimeWithTools(pathOpt);
267
+ const registryName = resolveToolDescriptor(toolName.trim());
268
+ const spec = registry.get(registryName);
269
+ if (!spec) {
270
+ process.stderr.write(`Tool not found: ${toolName}
271
+ `);
272
+ return 1;
273
+ }
274
+ process.stdout.write(formatDescribeOutput(enrichSpecWithCanonicalSchema(spec)) + "\n");
275
+ return 0;
276
+ } catch (err) {
277
+ process.stderr.write(`describe failed: ${err instanceof Error ? err.message : String(err)}
278
+ `);
279
+ return 1;
280
+ }
281
+ }
282
+ function defaultExecContext() {
283
+ return {
284
+ requestId: `cli-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,
285
+ taskId: `task-${Date.now()}`,
286
+ permissions: [
287
+ "read:web",
288
+ "read:fs",
289
+ "write:fs",
290
+ "read:db",
291
+ "write:db",
292
+ "network",
293
+ "workflow",
294
+ "danger:destructive",
295
+ "exec"
296
+ ]
297
+ };
298
+ }
299
+ async function cmdRun(toolName, toolArgsJson, pathOpt) {
300
+ if (!toolName.trim()) {
301
+ process.stderr.write("Usage: agent-tool run <tool path> [<json params>]\n");
302
+ return 1;
303
+ }
304
+ let args = {};
305
+ if (toolArgsJson.trim()) {
306
+ try {
307
+ args = JSON.parse(toolArgsJson);
308
+ } catch {
309
+ process.stderr.write(`Invalid JSON for parameters. Example: '{"path":"README.md"}'
310
+ `);
311
+ return 1;
312
+ }
313
+ }
314
+ try {
315
+ const { runtime, registry } = getRuntimeWithTools(pathOpt);
316
+ const registryName = resolveToolDescriptor(toolName.trim());
317
+ if (!registry.get(registryName)) {
318
+ process.stderr.write(`Tool not found: ${toolName}
319
+ `);
320
+ return 1;
321
+ }
322
+ const ctx = defaultExecContext();
323
+ const result = await runtime.invoke(
324
+ { tool: registryName, args, purpose: "cli" },
325
+ ctx
326
+ );
327
+ if (result.ok) {
328
+ process.stdout.write(JSON.stringify(result.result, null, 2) + "\n");
329
+ return 0;
330
+ }
331
+ process.stderr.write(`Tool error: ${result.error?.kind ?? "unknown"} - ${result.error?.message ?? ""}
332
+ `);
333
+ return 1;
334
+ } catch (err) {
335
+ process.stderr.write(`Run failed: ${err instanceof Error ? err.message : String(err)}
336
+ `);
337
+ return 1;
338
+ }
339
+ }
340
+ async function cmdStartMcp(pathOpt) {
341
+ try {
342
+ const { runtime } = getRuntimeWithTools(pathOpt);
343
+ await runMCPServerOverStdio(runtime);
344
+ return 0;
345
+ } catch (err) {
346
+ process.stderr.write(`start mcp failed: ${err instanceof Error ? err.message : String(err)}
347
+ `);
348
+ return 1;
349
+ }
350
+ }
351
+ async function cmdStartHttp(port, host, pathOpt) {
352
+ try {
353
+ const { runtime } = getRuntimeWithTools(pathOpt);
354
+ const http = await createHttpService(runtime);
355
+ const { port: actualPort, host: actualHost } = await http.listen({ port, host });
356
+ const base = `http://${actualHost}:${actualPort}`;
357
+ process.stdout.write(`API: ${base}/invoke (POST), ${base}/tools (GET)
358
+ `);
359
+ process.stdout.write(`Swagger UI: ${base}/ (spec: ${base}/openapi.json)
360
+ `);
361
+ await new Promise(() => {
362
+ });
363
+ return 0;
364
+ } catch (err) {
365
+ process.stderr.write(`start http failed: ${err instanceof Error ? err.message : String(err)}
366
+ `);
367
+ return 1;
368
+ }
369
+ }
370
+ async function main(argv = process.argv) {
371
+ const { command, startSub, help, pathOpt, outDir, include, includeN8n, toolName, toolArgsJson, port, host } = parseArgv(argv);
372
+ if (help || command === "help") {
373
+ printHelp();
374
+ return 0;
375
+ }
376
+ if (command === "init") return cmdInit(pathOpt);
377
+ if (command === "build") return cmdBuild(pathOpt, outDir, include, includeN8n);
378
+ if (command === "serve") return cmdServe(pathOpt);
379
+ if (command === "ls" || command === "list") return cmdLs(pathOpt);
380
+ if (command === "describe" || command === "show") return cmdDescribe(toolName, pathOpt);
381
+ if (command === "run") return cmdRun(toolName, toolArgsJson, pathOpt);
382
+ if (command === "start") {
383
+ if (startSub === "mcp") return cmdStartMcp(pathOpt);
384
+ if (startSub === "http") return cmdStartHttp(port, host, pathOpt);
385
+ process.stderr.write("Usage: agent-tool start mcp | agent-tool start http [--port 3000] [--host 127.0.0.1]\n");
386
+ return 1;
387
+ }
388
+ printHelp();
389
+ return 1;
390
+ }
391
+ async function run(argv) {
392
+ return main(argv);
393
+ }
394
+ var scriptPath = fileURLToPath(import.meta.url);
395
+ var invokedPath = process.argv[1];
396
+ var isMain = typeof process !== "undefined" && invokedPath !== void 0 && invokedPath === scriptPath;
397
+ if (!isMain && invokedPath) {
398
+ try {
399
+ isMain = realpathSync(invokedPath) === realpathSync(scriptPath);
400
+ } catch {
401
+ }
402
+ }
403
+ if (isMain) {
404
+ main().then((code) => process.exit(code)).catch((err) => {
405
+ process.stderr.write(String(err?.message ?? err) + "\n");
406
+ process.exit(1);
407
+ });
408
+ }
409
+
410
+ export { run };
411
+ //# sourceMappingURL=index.js.map
412
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/cli/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["#!/usr/bin/env node\n/**\n * CLI for @easynet/agent-tool: ls | describe | run | start mcp | start http | init | build | serve | help.\n * Usage: agent-tool <command> [options] [args]\n * Primary: ls, describe [tool path], run [tool path] [parameters], start mcp, start http.\n */\n\nimport path from \"node:path\";\nimport { realpathSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { initProject } from \"../../api/expose/mcp-build/init.js\";\nimport { buildMcpPackage } from \"../../api/expose/mcp-build/build.js\";\nimport { runMcpServer } from \"../../api/expose/mcp-build/run.js\";\nimport { createRuntimeFromConfigSync } from \"../../api/runtimeFromConfig.js\";\nimport { createHttpService } from \"../../api/expose/openapiHttp.js\";\nimport { runMCPServerOverStdio } from \"../../api/expose/mcpServer.js\";\nimport type { ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport type { ExecContext } from \"../../core/types/ToolIntent.js\";\nimport { getDisplayScope, resolveToolDescriptor } from \"../../tools/util/toolDescriptor.js\";\nimport { findAndLoadToolConfig, resolveSandboxedPath } from \"../../tools/util/toolConfig.js\";\nimport { enrichSpecWithCanonicalSchema } from \"../../tools/util/canonicalCoreSchemas.js\";\n\ntype CliCommand = \"init\" | \"build\" | \"serve\" | \"list\" | \"ls\" | \"show\" | \"describe\" | \"run\" | \"start\" | \"help\";\ntype StartSubcommand = \"mcp\" | \"http\";\n\ninterface CliArgs {\n command: CliCommand;\n startSub: StartSubcommand;\n help: boolean;\n pathOpt: string;\n outDir: string;\n include: string[];\n includeN8n: boolean;\n toolName: string;\n toolArgsJson: string;\n port: number;\n host: string;\n}\n\nconst DEFAULT_CORE_CONFIG = {\n sandboxRoot: process.cwd(),\n allowedHosts: [] as string[],\n};\n\nfunction getRuntimeWithTools(pathOpt?: string): { runtime: ReturnType<typeof createRuntimeFromConfigSync>[\"runtime\"]; registry: ReturnType<typeof createRuntimeFromConfigSync>[\"registry\"] } {\n const cwd = process.cwd();\n const searchDir = pathOpt ? path.resolve(cwd, pathOpt) : cwd;\n const config = findAndLoadToolConfig(searchDir);\n let sandboxRoot = cwd;\n if (config.sandboxedPath && typeof config.sandboxedPath === \"string\" && config.configPath) {\n sandboxRoot = resolveSandboxedPath(config.configPath, config.sandboxedPath);\n }\n const coreConfig = { sandboxRoot, allowedHosts: [] as string[] };\n return createRuntimeFromConfigSync({ coreTools: coreConfig });\n}\n\n/** Parse \"scope/name\" into { scope, name }; if no slash, scope is \"\", name is full. */\nfunction parseToolName(fullName: string): { scope: string; name: string } {\n const i = fullName.indexOf(\"/\");\n if (i < 0) return { scope: \"\", name: fullName };\n return { scope: fullName.slice(0, i), name: fullName.slice(i + 1) };\n}\n\nfunction parseArgv(argv: string[]): CliArgs {\n const args = argv.slice(2);\n let command: CliCommand = \"help\";\n let startSub: StartSubcommand = \"http\";\n let help = false;\n let pathOpt = \"\";\n let outDir = \"\";\n let include: string[] = [];\n let includeN8n = false;\n let toolName = \"\";\n let toolArgsJson = \"{}\";\n let port = 3000;\n let host = \"127.0.0.1\";\n\n const commands: CliCommand[] = [\n \"init\", \"build\", \"serve\", \"list\", \"ls\", \"show\", \"describe\", \"run\", \"start\", \"help\",\n ];\n const startSubcommands: StartSubcommand[] = [\"mcp\", \"http\"];\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--help\" || arg === \"-h\") {\n help = true;\n } else if (arg === \"--path\" || arg === \"-p\") {\n pathOpt = path.resolve(process.cwd(), args[++i] ?? \"\");\n } else if (arg === \"--out\" || arg === \"-o\") {\n outDir = path.resolve(process.cwd(), args[++i] ?? \"\");\n } else if (arg === \"--include\" || arg === \"-i\") {\n const v = args[++i];\n if (v) include.push(v);\n } else if (arg === \"--include-n8n\") {\n includeN8n = true;\n } else if (arg === \"--port\") {\n const v = args[++i];\n if (v !== undefined) port = parseInt(v, 10) || 3000;\n } else if (arg === \"--host\") {\n const v = args[++i];\n if (v !== undefined) host = v;\n } else if (arg && !arg.startsWith(\"-\") && commands.includes(arg as CliCommand)) {\n command = arg as CliCommand;\n const nextArg = args[i + 1];\n if ((command === \"show\" || command === \"describe\") && nextArg !== undefined && !nextArg.startsWith(\"-\")) {\n toolName = args[++i] ?? \"\";\n } else if (command === \"run\" && nextArg !== undefined && !nextArg.startsWith(\"-\")) {\n toolName = args[++i] ?? \"\";\n const runNext = args[i + 1];\n if (runNext !== undefined && !runNext.startsWith(\"-\")) {\n toolArgsJson = args[++i] ?? \"{}\";\n }\n } else if (command === \"start\" && nextArg !== undefined && !nextArg.startsWith(\"-\") && startSubcommands.includes(nextArg as StartSubcommand)) {\n startSub = args[++i] as StartSubcommand;\n }\n }\n }\n\n return { command, startSub, help, pathOpt, outDir, include, includeN8n, toolName, toolArgsJson, port, host };\n}\n\nfunction printHelp(): void {\n const bin = \"agent-tool\";\n process.stdout.write(`\nUsage: ${bin} <command> [options] [args]\n\nPrimary commands:\n ls List all tools (scope, name, description).\n describe <tool path> Show tool details (schema, capabilities, etc.).\n run <tool path> [params] Run a tool. Params: JSON, e.g. '{\"path\":\"README.md\"}'\n start mcp Start MCP server over stdio (streamable).\n start http Start OpenAPI HTTP server (API + Swagger).\n\nOther commands:\n init Create project template. Then npm install && npm run build.\n build Scan folder for @tool / SKILL / n8n, generate MCP npm package.\n serve Start the generated MCP server (stdio) for testing.\n list Alias for ls.\n show <tool> Alias for describe.\n help Show this help.\n\nOptions:\n --path, -p <path> For init/build/serve: path (default: cwd).\n --out, -o <path> For build: output directory.\n --include, -i <glob> For build: glob for TS files.\n --include-n8n For build: include n8n workflow tools.\n --port <number> For start http: port (default: 3000).\n --host <string> For start http: host (default: 127.0.0.1).\n --help, -h Show this help.\n\nExamples:\n ${bin} ls\n ${bin} describe core/fs.readText\n ${bin} run core/fs.readText '{\"path\":\"README.md\"}'\n ${bin} start mcp\n ${bin} start http --port 3000\n ${bin} build --path . --out dist\n\nFor agent run (ReAct + agent.yaml): npx @easynet/agent-orchestra run \"task\" -c agent.yaml\n`);\n}\n\nasync function cmdInit(pathOpt: string): Promise<number> {\n try {\n const { targetPath, filesCreated } = await initProject({ targetPath: pathOpt || undefined });\n process.stdout.write(`Initialized project at ${targetPath}\\nCreated: ${filesCreated.join(\", \")}\\nNext: npm install && npm run build\\n`);\n return 0;\n } catch (err) {\n process.stderr.write(`Init failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function cmdBuild(\n pathOpt: string,\n outDir: string,\n include: string[],\n includeN8n: boolean,\n): Promise<number> {\n try {\n const result = await buildMcpPackage({\n projectPath: pathOpt || undefined,\n outDir: outDir || undefined,\n include: include.length > 0 ? include : undefined,\n includeN8n: includeN8n || undefined,\n });\n process.stdout.write(\n `Built ${result.toolCount} tool(s) -> ${result.outDir}\\nEntry: ${result.entryPath}\\nmcp.json: ${result.mcpJsonPath}\\n`,\n );\n return 0;\n } catch (err) {\n process.stderr.write(`Build failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function cmdServe(pathOpt: string): Promise<number> {\n try {\n const { process: child } = await runMcpServer({ path: pathOpt || undefined });\n child.stdin?.pipe(process.stdin);\n child.stdout?.pipe(process.stdout);\n process.stdin?.unref();\n const exit = new Promise<number>((resolve) => {\n child.on(\"close\", (code) => resolve(code ?? 0));\n });\n return exit;\n } catch (err) {\n process.stderr.write(`Serve failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nconst LS_DESC_MAX = 72;\n\n/** Format tool list as table: SCOPE (full package name) | NAME | DESCRIPTION */\nfunction formatLsOutput(specs: ToolSpec[]): string {\n const rows = specs.map((spec) => {\n const { name } = parseToolName(spec.name);\n const scope = getDisplayScope(spec.name, spec.kind, spec.version);\n const desc = (spec.description ?? \"\")\n .replace(/\\n/g, \" \")\n .trim()\n .slice(0, LS_DESC_MAX);\n return { scope, name, description: desc || \"(no description)\" };\n });\n\n const scopeW = Math.max(6, ...rows.map((r) => r.scope.length));\n const nameW = Math.max(4, ...rows.map((r) => r.name.length));\n\n const sep = `${\"─\".repeat(scopeW)}┬${\"─\".repeat(nameW)}┬${\"─\".repeat(LS_DESC_MAX + 2)}`;\n const header = [\n \"SCOPE\".padEnd(scopeW),\n \"NAME\".padEnd(nameW),\n \"DESCRIPTION\",\n ].join(\" │ \");\n const lines = [\n header,\n sep,\n ...rows.map((r) =>\n [\n r.scope.padEnd(scopeW),\n r.name.padEnd(nameW),\n r.description,\n ].join(\" │ \")\n ),\n ];\n return lines.join(\"\\n\");\n}\n\n/** Format single tool details (describe) with clear sections */\nfunction formatDescribeOutput(spec: ToolSpec): string {\n const { name: localName } = parseToolName(spec.name);\n const scope = getDisplayScope(spec.name, spec.kind, spec.version);\n const sections: string[] = [];\n\n sections.push(\"┌─ Tool\");\n sections.push(`│ name: ${spec.name}`);\n sections.push(`│ scope: ${scope}`);\n sections.push(`│ localName: ${localName}`);\n sections.push(`│ version: ${spec.version}`);\n sections.push(`│ kind: ${spec.kind}`);\n sections.push(\"├─ Description\");\n sections.push(`│ ${(spec.description ?? \"(none)\").replace(/\\n/g, \"\\n│ \")}`);\n sections.push(\"├─ Tags\");\n sections.push(`│ ${spec.tags?.length ? spec.tags.join(\", \") : \"(none)\"}`);\n sections.push(\"├─ Capabilities\");\n sections.push(`│ ${spec.capabilities.join(\", \")}`);\n if (spec._meta?.hitl?.sideEffect) {\n sections.push(\"├─ HITL\");\n sections.push(`│ sideEffect: ${spec._meta.hitl.sideEffect}`);\n }\n sections.push(\"├─ Input schema\");\n sections.push(\n \"│ \" + JSON.stringify(spec.inputSchema, null, 2).replace(/\\n/g, \"\\n│ \")\n );\n sections.push(\"└─ Output schema\");\n sections.push(\n \" \" + JSON.stringify(spec.outputSchema, null, 2).replace(/\\n/g, \"\\n \")\n );\n\n return sections.join(\"\\n\");\n}\n\nasync function cmdLs(pathOpt?: string): Promise<number> {\n try {\n const { registry } = getRuntimeWithTools(pathOpt);\n const specs = registry.snapshot();\n if (specs.length === 0) {\n process.stdout.write(\"No tools registered.\\n\");\n return 0;\n }\n specs.sort((a, b) => a.name.localeCompare(b.name));\n process.stdout.write(formatLsOutput(specs) + \"\\n\");\n return 0;\n } catch (err) {\n process.stderr.write(`ls failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function cmdDescribe(toolName: string, pathOpt?: string): Promise<number> {\n if (!toolName.trim()) {\n process.stderr.write(\"Usage: agent-tool describe <tool path>\\n\");\n return 1;\n }\n try {\n const { registry } = getRuntimeWithTools(pathOpt);\n const registryName = resolveToolDescriptor(toolName.trim());\n const spec = registry.get(registryName);\n if (!spec) {\n process.stderr.write(`Tool not found: ${toolName}\\n`);\n return 1;\n }\n process.stdout.write(formatDescribeOutput(enrichSpecWithCanonicalSchema(spec)) + \"\\n\");\n return 0;\n } catch (err) {\n process.stderr.write(`describe failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nfunction defaultExecContext(): ExecContext {\n return {\n requestId: `cli-${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 \"exec\",\n ],\n };\n}\n\nasync function cmdRun(toolName: string, toolArgsJson: string, pathOpt?: string): Promise<number> {\n if (!toolName.trim()) {\n process.stderr.write(\"Usage: agent-tool run <tool path> [<json params>]\\n\");\n return 1;\n }\n let args: unknown = {};\n if (toolArgsJson.trim()) {\n try {\n args = JSON.parse(toolArgsJson) as unknown;\n } catch {\n process.stderr.write(\"Invalid JSON for parameters. Example: '{\\\"path\\\":\\\"README.md\\\"}'\\n\");\n return 1;\n }\n }\n try {\n const { runtime, registry } = getRuntimeWithTools(pathOpt);\n const registryName = resolveToolDescriptor(toolName.trim());\n if (!registry.get(registryName)) {\n process.stderr.write(`Tool not found: ${toolName}\\n`);\n return 1;\n }\n const ctx = defaultExecContext();\n const result = await runtime.invoke(\n { tool: registryName, args, purpose: \"cli\" },\n ctx\n );\n if (result.ok) {\n process.stdout.write(JSON.stringify(result.result, null, 2) + \"\\n\");\n return 0;\n }\n process.stderr.write(`Tool error: ${result.error?.kind ?? \"unknown\"} - ${result.error?.message ?? \"\"}\\n`);\n return 1;\n } catch (err) {\n process.stderr.write(`Run failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function cmdStartMcp(pathOpt?: string): Promise<number> {\n try {\n const { runtime } = getRuntimeWithTools(pathOpt);\n await runMCPServerOverStdio(runtime);\n return 0;\n } catch (err) {\n process.stderr.write(`start mcp failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function cmdStartHttp(port: number, host: string, pathOpt?: string): Promise<number> {\n try {\n const { runtime } = getRuntimeWithTools(pathOpt);\n const http = await createHttpService(runtime);\n const { port: actualPort, host: actualHost } = await http.listen({ port, host });\n const base = `http://${actualHost}:${actualPort}`;\n process.stdout.write(`API: ${base}/invoke (POST), ${base}/tools (GET)\\n`);\n process.stdout.write(`Swagger UI: ${base}/ (spec: ${base}/openapi.json)\\n`);\n await new Promise<void>(() => {});\n return 0;\n } catch (err) {\n process.stderr.write(`start http failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function main(argv: string[] = process.argv): Promise<number> {\n const { command, startSub, help, pathOpt, outDir, include, includeN8n, toolName, toolArgsJson, port, host } =\n parseArgv(argv);\n\n if (help || command === \"help\") {\n printHelp();\n return 0;\n }\n\n if (command === \"init\") return cmdInit(pathOpt);\n if (command === \"build\") return cmdBuild(pathOpt, outDir, include, includeN8n);\n if (command === \"serve\") return cmdServe(pathOpt);\n if (command === \"ls\" || command === \"list\") return cmdLs(pathOpt);\n if (command === \"describe\" || command === \"show\") return cmdDescribe(toolName, pathOpt);\n if (command === \"run\") return cmdRun(toolName, toolArgsJson, pathOpt);\n if (command === \"start\") {\n if (startSub === \"mcp\") return cmdStartMcp(pathOpt);\n if (startSub === \"http\") return cmdStartHttp(port, host, pathOpt);\n process.stderr.write(\"Usage: agent-tool start mcp | agent-tool start http [--port 3000] [--host 127.0.0.1]\\n\");\n return 1;\n }\n\n printHelp();\n return 1;\n}\n\n/** Run CLI with the given argv (same shape as process.argv). Exported for tests. */\nexport async function run(argv: string[]): Promise<number> {\n return main(argv);\n}\n\nconst scriptPath = fileURLToPath(import.meta.url);\nconst invokedPath = process.argv[1];\nlet isMain = typeof process !== \"undefined\" && invokedPath !== undefined && invokedPath === scriptPath;\nif (!isMain && invokedPath) {\n try {\n isMain = realpathSync(invokedPath) === realpathSync(scriptPath);\n } catch {\n // keep isMain false if realpath fails\n }\n}\n\nif (isMain) {\n main()\n .then((code) => process.exit(code))\n .catch((err) => {\n process.stderr.write(String(err?.message ?? err) + \"\\n\");\n process.exit(1);\n });\n}\n"]}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Create a default ToolRegistry + PTCRuntime with no tools registered.
3
+ * Used by CLI list / show / run. Tools are provided by extensions (e.g. @easynet/agent-tool-builtin-tools).
4
+ */
5
+ import { ToolRegistry } from "../../core/registry/ToolRegistry.js";
6
+ import { PTCRuntime } from "../../core/runtime/PTCRuntime.js";
7
+ export interface DefaultToolRuntimeOptions {
8
+ sandboxRoot?: string;
9
+ allowedHosts?: string[];
10
+ }
11
+ /**
12
+ * Create PTCRuntime with empty registry. Use for CLI list/show/run when no extension is loaded.
13
+ * Extensions (e.g. builtin-tools) can register their tools separately.
14
+ */
15
+ export declare function createDefaultToolRuntime(_options?: DefaultToolRuntimeOptions): {
16
+ runtime: PTCRuntime;
17
+ registry: ToolRegistry;
18
+ };
19
+ //# sourceMappingURL=toolRuntime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolRuntime.d.ts","sourceRoot":"","sources":["../../../src/utils/cli/toolRuntime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE9D,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,GAAE,yBAA8B,GACvC;IAAE,OAAO,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,CAIjD"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Framework: resolve an npm package into a local cache folder (like Maven .m2).
3
+ * Cache root: ~/.agent/cache/, organized by package path and version.
4
+ * Packs the package, extracts it, runs npm install in that directory so each
5
+ * downloaded package has its own node_modules—no sharing with the host project—
6
+ * to avoid package conflicts.
7
+ */
8
+ export interface EnsurePackageInCacheOptions {
9
+ /** Custom cache root (default: ~/.agent/cache) */
10
+ cacheBase?: string;
11
+ /** Called after npm install; use to add symlinks/aliases in cacheDir/node_modules */
12
+ afterInstall?: (cacheDir: string, packageName: string) => void;
13
+ }
14
+ /**
15
+ * Ensure the npm package is in the cache: pack, extract, npm install.
16
+ * Returns the package root path (with its own node_modules).
17
+ * Cache layout: ~/.agent/cache/<scope>/<name>/<version>/ (like Maven .m2).
18
+ */
19
+ export declare function ensurePackageInCache(packageName: string, version?: string, options?: EnsurePackageInCacheOptions): string;
20
+ /**
21
+ * Resolve the package entry point (main or dist/index.js).
22
+ */
23
+ export declare function getPackageEntryPath(packageRoot: string): string;
24
+ /**
25
+ * Dynamic import from a cached package (file URL so Node resolves the package's node_modules).
26
+ */
27
+ export declare function importFromCache(packageRoot: string): Promise<unknown>;
28
+ //# sourceMappingURL=npmCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npmCache.d.ts","sourceRoot":"","sources":["../../src/utils/npmCache.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,MAAM,WAAW,2BAA2B;IAC1C,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CAChE;AA8BD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,MAAiB,EAC1B,OAAO,GAAE,2BAAgC,GACxC,MAAM,CA4DR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAY/D;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAI3E"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@easynet/agent-tool",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "MCP build: init → build → run. Turn your project (@tool, SKILL, n8n) into a standalone MCP npm server (no framework embedding, no package conflict).",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
7
7
  "module": "./dist/index.js",
8
8
  "types": "./dist/index.d.ts",
9
9
  "bin": {
10
- "agent-tool": "dist/cli.js"
10
+ "agent-tool": "dist/utils/cli/index.js"
11
11
  },
12
12
  "exports": {
13
13
  ".": {
@@ -16,25 +16,34 @@
16
16
  "require": "./dist/index.cjs"
17
17
  },
18
18
  "./core": {
19
- "types": "./dist/core.d.ts",
20
- "import": "./dist/core.js",
21
- "require": "./dist/core.cjs"
19
+ "types": "./dist/core/index.d.ts",
20
+ "import": "./dist/core/index.js",
21
+ "require": "./dist/core/index.cjs"
22
+ },
23
+ "./runtime": {
24
+ "types": "./dist/core/runtime.d.ts",
25
+ "import": "./dist/core/runtime.js",
26
+ "require": "./dist/core/runtime.cjs"
27
+ },
28
+ "./api": {
29
+ "types": "./dist/api/main.d.ts",
30
+ "import": "./dist/api/main.js",
31
+ "require": "./dist/api/main.cjs"
22
32
  }
23
33
  },
24
34
  "files": [
25
- "dist",
26
- "extensions/examples"
35
+ "dist"
27
36
  ],
28
37
  "publishConfig": {
29
38
  "access": "public",
30
39
  "registry": "https://registry.npmjs.org/"
31
40
  },
32
41
  "scripts": {
33
- "build": "npx tsup && npx tsc -p tsconfig.dts.json && mkdir -p dist/report && cp src/report/agent-report-template.html dist/report/ && mkdir -p dist/templates && cp src/codegen/templates/*.js dist/templates/",
42
+ "build": "npx tsup && npx tsc -p tsconfig.dts.json && (mkdir -p dist/templates && cp src/api/expose/mcp-build/templates/*.js dist/templates/ 2>/dev/null || true)",
34
43
  "build:ext": "cd extensions/builtin-tools && npm install && npm run build && cd ../example-tools && npm install && npm run build",
35
44
  "dev": "npx tsup --watch",
36
- "test": "vitest run",
37
- "test:watch": "vitest",
45
+ "test": "npm run build && npx tsx test/scripts/ensure-real-packages.ts && node test/scripts/run-vitest.mjs run",
46
+ "test:watch": "npx tsx test/scripts/ensure-real-packages.ts && node test/scripts/run-vitest.mjs",
38
47
  "typecheck": "tsc --noEmit",
39
48
  "clean": "rm -rf dist",
40
49
  "lint:lines": "./scripts/check-line-count.sh",
@@ -42,7 +51,7 @@
42
51
  "deps:tree": "npm ls --all",
43
52
  "deps:size": "du -sh node_modules/* 2>/dev/null | sort -hr | head -40",
44
53
  "agent": "echo 'Use: npx @easynet/agent-orchestra run \"task\" -c agent.yaml'",
45
- "agent:stock": "node extensions/examples/scripts/agent-tool-react-stock.mjs"
54
+ "agent:stock": "echo 'Use: npx @easynet/agent-orchestra or run your own script'"
46
55
  },
47
56
  "dependencies": {
48
57
  "@easynet/agent-llm": "^1.0.0",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/types/ToolSpec.ts"],"names":[],"mappings":";;;AAwEO,IAAM,oBAAA,GAA+B;AAAA,EAC1C,IAAA,EAAM,QAAA;AAAA,EACN,oBAAA,EAAsB;AACxB;AAGO,IAAM,qBAAA,GAAgC;AAAA,EAC3C,IAAA,EAAM,QAAA;AAAA,EACN,oBAAA,EAAsB;AACxB;AA2BO,SAAS,eAAe,IAAA,EAAuC;AACpE,EAAA,MAAM,UAAA,GAAa,KAAK,UAAA,IAAc,MAAA;AACtC,EAAA,OAAO;AAAA,IACL,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,OAAA,EAAS,KAAK,OAAA,IAAW,OAAA;AAAA,IACzB,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,WAAA,EAAa,KAAK,WAAA,IAAe,oBAAA;AAAA,IACjC,YAAA,EAAc,KAAK,YAAA,IAAgB,qBAAA;AAAA,IACnC,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,KAAA,EAAO,EAAE,IAAA,EAAM,EAAE,YAAW;AAAE,GAChC;AACF","file":"chunk-3YLVPZRJ.cjs","sourcesContent":["/**\n * Unified tool kinds supported by the tools package.\n */\nexport type ToolKind = \"mcp\" | \"langchain\" | \"n8n\" | \"comfyui\" | \"skill\" | \"core\" | \"example\";\n\n/**\n * Capability declarations for tools.\n * Used by PolicyEngine for permission gating.\n */\nexport type Capability =\n | \"read:web\"\n | \"read:fs\"\n | \"write:fs\"\n | \"read:db\"\n | \"write:db\"\n | \"network\"\n | \"gpu\"\n | \"workflow\"\n | \"danger:destructive\"\n | \"exec\";\n\n/**\n * HITL (Human-in-the-Loop) side-effect classification.\n * Used to gate execution: external_write / destructive require human approval when onApprovalRequired is set.\n */\nexport type HitlSideEffect = \"none\" | \"local_write\" | \"external_write\" | \"destructive\";\n\n/**\n * Cost hints for tools, used by Budget and routing.\n */\nexport interface CostHints {\n latencyMsP50?: number;\n latencyMsP95?: number;\n isAsync?: boolean;\n}\n\n/**\n * Unified tool specification.\n * All tool types (MCP, LangChain, n8n, SKILL) are described by this interface.\n */\nexport interface ToolSpec {\n /** Globally unique name, recommended format: namespace/name */\n name: string;\n /** Semver version */\n version: string;\n /** Tool kind determines which adapter handles execution */\n kind: ToolKind;\n\n description?: string;\n tags?: string[];\n\n /** JSON Schema for input validation */\n inputSchema: object;\n /** JSON Schema for output validation */\n outputSchema: object;\n\n /** Required capabilities for this tool */\n capabilities: Capability[];\n costHints?: CostHints;\n\n /** HITL: side-effect level; when external_write/destructive, runtime may require human approval before execute */\n _meta?: { hitl?: { sideEffect?: HitlSideEffect } };\n\n /** Adapter-specific: endpoint URL (MCP/n8n) */\n endpoint?: string;\n /** Adapter-specific: resource identifier (workflowId, promptId, etc.) */\n resourceId?: string;\n /** Adapter-specific: implementation reference (LangChain Tool instance, skill handler) */\n impl?: unknown;\n}\n\n/** Default permissive input schema when not provided (framework supports auto-derived schema). */\nexport const DEFAULT_INPUT_SCHEMA: object = {\n type: \"object\",\n additionalProperties: true,\n};\n\n/** Default permissive output schema when not provided (framework supports auto-derived schema). */\nexport const DEFAULT_OUTPUT_SCHEMA: object = {\n type: \"object\",\n additionalProperties: true,\n};\n\n/**\n * Minimal options to build a ToolSpec. Use with @effect in JSDoc for HITL sideEffect.\n * Framework fills _meta.hitl.sideEffect from the sideEffect parameter (matches @effect annotation).\n * inputSchema/outputSchema are optional: when omitted, permissive defaults are used (framework supports auto-derived schema at build time in codegen).\n */\nexport interface CreateToolSpecOptions {\n name: string;\n version?: string;\n kind: ToolKind;\n description?: string;\n tags?: string[];\n /** Optional: when omitted, DEFAULT_INPUT_SCHEMA is used. Codegen can derive from handler params. */\n inputSchema?: object;\n /** Optional: when omitted, DEFAULT_OUTPUT_SCHEMA is used. Codegen can derive from handler return type. */\n outputSchema?: object;\n capabilities: Capability[];\n costHints?: CostHints;\n /** HITL: from @effect annotation (none | local_write | external_write | destructive). Default \"none\". */\n sideEffect?: HitlSideEffect;\n}\n\n/**\n * Build a ToolSpec from minimal options. Use @effect in handler JSDoc as annotation; pass same value as sideEffect.\n * When inputSchema/outputSchema are omitted, permissive defaults are used (schema can be auto-derived at build time).\n */\nexport function createToolSpec(opts: CreateToolSpecOptions): ToolSpec {\n const sideEffect = opts.sideEffect ?? \"none\";\n return {\n name: opts.name,\n version: opts.version ?? \"1.0.0\",\n kind: opts.kind,\n description: opts.description,\n tags: opts.tags,\n inputSchema: opts.inputSchema ?? DEFAULT_INPUT_SCHEMA,\n outputSchema: opts.outputSchema ?? DEFAULT_OUTPUT_SCHEMA,\n capabilities: opts.capabilities,\n costHints: opts.costHints,\n _meta: { hitl: { sideEffect } },\n };\n}\n\n/**\n * Unified adapter interface.\n * Each protocol adapter (MCP, LangChain, n8n, SKILL) implements this.\n */\nexport interface ToolAdapter {\n kind: ToolKind;\n /** Optional: supports dynamic tool discovery */\n listTools?(): Promise<ToolSpec[]>;\n /** Execute the tool with validated args */\n invoke(\n spec: ToolSpec,\n args: unknown,\n ctx: import(\"./ToolIntent.js\").ExecContext,\n ): Promise<{ result: unknown; raw?: unknown }>;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/types/ToolSpec.ts"],"names":[],"mappings":";AAwEO,IAAM,oBAAA,GAA+B;AAAA,EAC1C,IAAA,EAAM,QAAA;AAAA,EACN,oBAAA,EAAsB;AACxB;AAGO,IAAM,qBAAA,GAAgC;AAAA,EAC3C,IAAA,EAAM,QAAA;AAAA,EACN,oBAAA,EAAsB;AACxB;AA2BO,SAAS,eAAe,IAAA,EAAuC;AACpE,EAAA,MAAM,UAAA,GAAa,KAAK,UAAA,IAAc,MAAA;AACtC,EAAA,OAAO;AAAA,IACL,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,OAAA,EAAS,KAAK,OAAA,IAAW,OAAA;AAAA,IACzB,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,WAAA,EAAa,KAAK,WAAA,IAAe,oBAAA;AAAA,IACjC,YAAA,EAAc,KAAK,YAAA,IAAgB,qBAAA;AAAA,IACnC,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,KAAA,EAAO,EAAE,IAAA,EAAM,EAAE,YAAW;AAAE,GAChC;AACF","file":"chunk-AXUNV4MK.js","sourcesContent":["/**\n * Unified tool kinds supported by the tools package.\n */\nexport type ToolKind = \"mcp\" | \"langchain\" | \"n8n\" | \"comfyui\" | \"skill\" | \"core\" | \"example\";\n\n/**\n * Capability declarations for tools.\n * Used by PolicyEngine for permission gating.\n */\nexport type Capability =\n | \"read:web\"\n | \"read:fs\"\n | \"write:fs\"\n | \"read:db\"\n | \"write:db\"\n | \"network\"\n | \"gpu\"\n | \"workflow\"\n | \"danger:destructive\"\n | \"exec\";\n\n/**\n * HITL (Human-in-the-Loop) side-effect classification.\n * Used to gate execution: external_write / destructive require human approval when onApprovalRequired is set.\n */\nexport type HitlSideEffect = \"none\" | \"local_write\" | \"external_write\" | \"destructive\";\n\n/**\n * Cost hints for tools, used by Budget and routing.\n */\nexport interface CostHints {\n latencyMsP50?: number;\n latencyMsP95?: number;\n isAsync?: boolean;\n}\n\n/**\n * Unified tool specification.\n * All tool types (MCP, LangChain, n8n, SKILL) are described by this interface.\n */\nexport interface ToolSpec {\n /** Globally unique name, recommended format: namespace/name */\n name: string;\n /** Semver version */\n version: string;\n /** Tool kind determines which adapter handles execution */\n kind: ToolKind;\n\n description?: string;\n tags?: string[];\n\n /** JSON Schema for input validation */\n inputSchema: object;\n /** JSON Schema for output validation */\n outputSchema: object;\n\n /** Required capabilities for this tool */\n capabilities: Capability[];\n costHints?: CostHints;\n\n /** HITL: side-effect level; when external_write/destructive, runtime may require human approval before execute */\n _meta?: { hitl?: { sideEffect?: HitlSideEffect } };\n\n /** Adapter-specific: endpoint URL (MCP/n8n) */\n endpoint?: string;\n /** Adapter-specific: resource identifier (workflowId, promptId, etc.) */\n resourceId?: string;\n /** Adapter-specific: implementation reference (LangChain Tool instance, skill handler) */\n impl?: unknown;\n}\n\n/** Default permissive input schema when not provided (framework supports auto-derived schema). */\nexport const DEFAULT_INPUT_SCHEMA: object = {\n type: \"object\",\n additionalProperties: true,\n};\n\n/** Default permissive output schema when not provided (framework supports auto-derived schema). */\nexport const DEFAULT_OUTPUT_SCHEMA: object = {\n type: \"object\",\n additionalProperties: true,\n};\n\n/**\n * Minimal options to build a ToolSpec. Use with @effect in JSDoc for HITL sideEffect.\n * Framework fills _meta.hitl.sideEffect from the sideEffect parameter (matches @effect annotation).\n * inputSchema/outputSchema are optional: when omitted, permissive defaults are used (framework supports auto-derived schema at build time in codegen).\n */\nexport interface CreateToolSpecOptions {\n name: string;\n version?: string;\n kind: ToolKind;\n description?: string;\n tags?: string[];\n /** Optional: when omitted, DEFAULT_INPUT_SCHEMA is used. Codegen can derive from handler params. */\n inputSchema?: object;\n /** Optional: when omitted, DEFAULT_OUTPUT_SCHEMA is used. Codegen can derive from handler return type. */\n outputSchema?: object;\n capabilities: Capability[];\n costHints?: CostHints;\n /** HITL: from @effect annotation (none | local_write | external_write | destructive). Default \"none\". */\n sideEffect?: HitlSideEffect;\n}\n\n/**\n * Build a ToolSpec from minimal options. Use @effect in handler JSDoc as annotation; pass same value as sideEffect.\n * When inputSchema/outputSchema are omitted, permissive defaults are used (schema can be auto-derived at build time).\n */\nexport function createToolSpec(opts: CreateToolSpecOptions): ToolSpec {\n const sideEffect = opts.sideEffect ?? \"none\";\n return {\n name: opts.name,\n version: opts.version ?? \"1.0.0\",\n kind: opts.kind,\n description: opts.description,\n tags: opts.tags,\n inputSchema: opts.inputSchema ?? DEFAULT_INPUT_SCHEMA,\n outputSchema: opts.outputSchema ?? DEFAULT_OUTPUT_SCHEMA,\n capabilities: opts.capabilities,\n costHints: opts.costHints,\n _meta: { hitl: { sideEffect } },\n };\n}\n\n/**\n * Unified adapter interface.\n * Each protocol adapter (MCP, LangChain, n8n, SKILL) implements this.\n */\nexport interface ToolAdapter {\n kind: ToolKind;\n /** Optional: supports dynamic tool discovery */\n listTools?(): Promise<ToolSpec[]>;\n /** Execute the tool with validated args */\n invoke(\n spec: ToolSpec,\n args: unknown,\n ctx: import(\"./ToolIntent.js\").ExecContext,\n ): Promise<{ result: unknown; raw?: unknown }>;\n}\n"]}