@botbotgo/kit 1.0.106

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 (269) hide show
  1. package/README.md +65 -0
  2. package/config/build/build.sh +182 -0
  3. package/config/build/tsconfig.dts.json +34 -0
  4. package/config/build/tsup.config.ts +19 -0
  5. package/config/build/vitest.config.ts +29 -0
  6. package/config/tool.yaml +11 -0
  7. package/dist/agent-context.d.ts +3 -0
  8. package/dist/agent-context.d.ts.map +1 -0
  9. package/dist/api/adapters/LangChainToolsHub.d.ts +35 -0
  10. package/dist/api/adapters/LangChainToolsHub.d.ts.map +1 -0
  11. package/dist/api/createAgentTools.d.ts +52 -0
  12. package/dist/api/createAgentTools.d.ts.map +1 -0
  13. package/dist/api/expose/extension-init/index.d.ts +3 -0
  14. package/dist/api/expose/extension-init/index.d.ts.map +1 -0
  15. package/dist/api/expose/extension-init/initExtension.d.ts +21 -0
  16. package/dist/api/expose/extension-init/initExtension.d.ts.map +1 -0
  17. package/dist/api/expose/index.d.ts +16 -0
  18. package/dist/api/expose/index.d.ts.map +1 -0
  19. package/dist/api/expose/mcp-build/build.d.ts +21 -0
  20. package/dist/api/expose/mcp-build/build.d.ts.map +1 -0
  21. package/dist/api/expose/mcp-build/generator.d.ts +15 -0
  22. package/dist/api/expose/mcp-build/generator.d.ts.map +1 -0
  23. package/dist/api/expose/mcp-build/index.d.ts +8 -0
  24. package/dist/api/expose/mcp-build/index.d.ts.map +1 -0
  25. package/dist/api/expose/mcp-build/init.d.ts +17 -0
  26. package/dist/api/expose/mcp-build/init.d.ts.map +1 -0
  27. package/dist/api/expose/mcp-build/run.d.ts +17 -0
  28. package/dist/api/expose/mcp-build/run.d.ts.map +1 -0
  29. package/dist/api/expose/mcp-build/types.d.ts +25 -0
  30. package/dist/api/expose/mcp-build/types.d.ts.map +1 -0
  31. package/dist/api/expose/mcpServer.d.ts +74 -0
  32. package/dist/api/expose/mcpServer.d.ts.map +1 -0
  33. package/dist/api/expose/openapi.d.ts +23 -0
  34. package/dist/api/expose/openapi.d.ts.map +1 -0
  35. package/dist/api/expose/openapiHttp.d.ts +51 -0
  36. package/dist/api/expose/openapiHttp.d.ts.map +1 -0
  37. package/dist/api/extension/contextRunner.d.ts +10 -0
  38. package/dist/api/extension/contextRunner.d.ts.map +1 -0
  39. package/dist/api/extension/createExtension.d.ts +38 -0
  40. package/dist/api/extension/createExtension.d.ts.map +1 -0
  41. package/dist/api/extension/dynamicImportAdapter.d.ts +25 -0
  42. package/dist/api/extension/dynamicImportAdapter.d.ts.map +1 -0
  43. package/dist/api/extension/generateExtensionManifest.d.ts +29 -0
  44. package/dist/api/extension/generateExtensionManifest.d.ts.map +1 -0
  45. package/dist/api/extension/index.d.ts +23 -0
  46. package/dist/api/extension/index.d.ts.map +1 -0
  47. package/dist/api/extension/loadToolYaml.d.ts +7 -0
  48. package/dist/api/extension/loadToolYaml.d.ts.map +1 -0
  49. package/dist/api/extension/overrideWithConfig.d.ts +2 -0
  50. package/dist/api/extension/overrideWithConfig.d.ts.map +1 -0
  51. package/dist/api/extension/registerExtension.d.ts +32 -0
  52. package/dist/api/extension/registerExtension.d.ts.map +1 -0
  53. package/dist/api/extension/registerFromManifest.d.ts +43 -0
  54. package/dist/api/extension/registerFromManifest.d.ts.map +1 -0
  55. package/dist/api/extension/resolvePackageRoot.d.ts +2 -0
  56. package/dist/api/extension/resolvePackageRoot.d.ts.map +1 -0
  57. package/dist/api/extension/support/groupPrefix.d.ts +21 -0
  58. package/dist/api/extension/support/groupPrefix.d.ts.map +1 -0
  59. package/dist/api/extension/support/types.d.ts +15 -0
  60. package/dist/api/extension/support/types.d.ts.map +1 -0
  61. package/dist/api/register-tools.d.ts +17 -0
  62. package/dist/api/register-tools.d.ts.map +1 -0
  63. package/dist/api/resolveAgentSkillRoots.d.ts +7 -0
  64. package/dist/api/resolveAgentSkillRoots.d.ts.map +1 -0
  65. package/dist/api/runtimeFromConfig.d.ts +20 -0
  66. package/dist/api/runtimeFromConfig.d.ts.map +1 -0
  67. package/dist/api/runtimeFromConfig.helpers.d.ts +12 -0
  68. package/dist/api/runtimeFromConfig.helpers.d.ts.map +1 -0
  69. package/dist/api/runtimeFromConfig.types.d.ts +37 -0
  70. package/dist/api/runtimeFromConfig.types.d.ts.map +1 -0
  71. package/dist/build.cjs +30 -0
  72. package/dist/build.cjs.map +1 -0
  73. package/dist/build.d.ts +13 -0
  74. package/dist/build.d.ts.map +1 -0
  75. package/dist/build.js +5 -0
  76. package/dist/build.js.map +1 -0
  77. package/dist/canonicalCoreSchemas-PHGTNPN5.js +3 -0
  78. package/dist/canonicalCoreSchemas-PHGTNPN5.js.map +1 -0
  79. package/dist/canonicalCoreSchemas-TY7NCWCC.cjs +16 -0
  80. package/dist/canonicalCoreSchemas-TY7NCWCC.cjs.map +1 -0
  81. package/dist/chunk-4OOTCNR7.js +324 -0
  82. package/dist/chunk-4OOTCNR7.js.map +1 -0
  83. package/dist/chunk-4VKCWJHF.cjs +3043 -0
  84. package/dist/chunk-4VKCWJHF.cjs.map +1 -0
  85. package/dist/chunk-AGLGFQUW.cjs +259 -0
  86. package/dist/chunk-AGLGFQUW.cjs.map +1 -0
  87. package/dist/chunk-AZUXVVGV.cjs +1073 -0
  88. package/dist/chunk-AZUXVVGV.cjs.map +1 -0
  89. package/dist/chunk-BDUSB6GT.js +520 -0
  90. package/dist/chunk-BDUSB6GT.js.map +1 -0
  91. package/dist/chunk-BNIE2IKZ.cjs +100 -0
  92. package/dist/chunk-BNIE2IKZ.cjs.map +1 -0
  93. package/dist/chunk-BTHDNP3C.cjs +350 -0
  94. package/dist/chunk-BTHDNP3C.cjs.map +1 -0
  95. package/dist/chunk-GGFAGLDC.js +1049 -0
  96. package/dist/chunk-GGFAGLDC.js.map +1 -0
  97. package/dist/chunk-ITX6A2BT.js +92 -0
  98. package/dist/chunk-ITX6A2BT.js.map +1 -0
  99. package/dist/chunk-IVL4TBFB.js +248 -0
  100. package/dist/chunk-IVL4TBFB.js.map +1 -0
  101. package/dist/chunk-JH4ZF3FN.js +3013 -0
  102. package/dist/chunk-JH4ZF3FN.js.map +1 -0
  103. package/dist/chunk-JW4EMVTE.cjs +553 -0
  104. package/dist/chunk-JW4EMVTE.cjs.map +1 -0
  105. package/dist/chunk-NTWOVFEY.js +16 -0
  106. package/dist/chunk-NTWOVFEY.js.map +1 -0
  107. package/dist/chunk-UUNG3GL3.cjs +19 -0
  108. package/dist/chunk-UUNG3GL3.cjs.map +1 -0
  109. package/dist/core/registry/ToolRegistry.d.ts +68 -0
  110. package/dist/core/registry/ToolRegistry.d.ts.map +1 -0
  111. package/dist/core/runtime/Budget.d.ts +63 -0
  112. package/dist/core/runtime/Budget.d.ts.map +1 -0
  113. package/dist/core/runtime/Evidence.d.ts +19 -0
  114. package/dist/core/runtime/Evidence.d.ts.map +1 -0
  115. package/dist/core/runtime/PTCRuntime.d.ts +124 -0
  116. package/dist/core/runtime/PTCRuntime.d.ts.map +1 -0
  117. package/dist/core/runtime/PTCRuntimeObservability.d.ts +26 -0
  118. package/dist/core/runtime/PTCRuntimeObservability.d.ts.map +1 -0
  119. package/dist/core/runtime/PTCRuntimePipeline.d.ts +69 -0
  120. package/dist/core/runtime/PTCRuntimePipeline.d.ts.map +1 -0
  121. package/dist/core/runtime/PolicyEngine.d.ts +67 -0
  122. package/dist/core/runtime/PolicyEngine.d.ts.map +1 -0
  123. package/dist/core/runtime/Retry.d.ts +33 -0
  124. package/dist/core/runtime/Retry.d.ts.map +1 -0
  125. package/dist/core/runtime/SchemaValidator.d.ts +42 -0
  126. package/dist/core/runtime/SchemaValidator.d.ts.map +1 -0
  127. package/dist/core/runtime/toolObservation.d.ts +7 -0
  128. package/dist/core/runtime/toolObservation.d.ts.map +1 -0
  129. package/dist/core/types/Events.d.ts +99 -0
  130. package/dist/core/types/Events.d.ts.map +1 -0
  131. package/dist/core/types/ToolIntent.d.ts +40 -0
  132. package/dist/core/types/ToolIntent.d.ts.map +1 -0
  133. package/dist/core/types/ToolResult.d.ts +44 -0
  134. package/dist/core/types/ToolResult.d.ts.map +1 -0
  135. package/dist/core/types/ToolSpec.d.ts +116 -0
  136. package/dist/core/types/ToolSpec.d.ts.map +1 -0
  137. package/dist/core/types/ToolTypeHandler.d.ts +88 -0
  138. package/dist/core/types/ToolTypeHandler.d.ts.map +1 -0
  139. package/dist/core/types/index.d.ts +7 -0
  140. package/dist/core/types/index.d.ts.map +1 -0
  141. package/dist/index.cjs +399 -0
  142. package/dist/index.cjs.map +1 -0
  143. package/dist/index.d.ts +8 -0
  144. package/dist/index.d.ts.map +1 -0
  145. package/dist/index.js +394 -0
  146. package/dist/index.js.map +1 -0
  147. package/dist/observability/EventLog.d.ts +60 -0
  148. package/dist/observability/EventLog.d.ts.map +1 -0
  149. package/dist/observability/Logger.d.ts +33 -0
  150. package/dist/observability/Logger.d.ts.map +1 -0
  151. package/dist/observability/Metrics.d.ts +70 -0
  152. package/dist/observability/Metrics.d.ts.map +1 -0
  153. package/dist/observability/Tracing.d.ts +69 -0
  154. package/dist/observability/Tracing.d.ts.map +1 -0
  155. package/dist/sdk.cjs +493 -0
  156. package/dist/sdk.cjs.map +1 -0
  157. package/dist/sdk.d.ts +17 -0
  158. package/dist/sdk.d.ts.map +1 -0
  159. package/dist/sdk.js +443 -0
  160. package/dist/sdk.js.map +1 -0
  161. package/dist/security/sandbox.d.ts +10 -0
  162. package/dist/security/sandbox.d.ts.map +1 -0
  163. package/dist/security/ssrf.d.ts +24 -0
  164. package/dist/security/ssrf.d.ts.map +1 -0
  165. package/dist/templates/mcp-server.js +48 -0
  166. package/dist/templates/n8n-invoker.js +11 -0
  167. package/dist/templates/skill-invoker.js +11 -0
  168. package/dist/templates/tool-index.js +9 -0
  169. package/dist/tools/discoveryFactory.d.ts +117 -0
  170. package/dist/tools/discoveryFactory.d.ts.map +1 -0
  171. package/dist/tools/function/index.d.ts +10 -0
  172. package/dist/tools/function/index.d.ts.map +1 -0
  173. package/dist/tools/function/scanner.d.ts +29 -0
  174. package/dist/tools/function/scanner.d.ts.map +1 -0
  175. package/dist/tools/function/schemaFromTs.d.ts +16 -0
  176. package/dist/tools/function/schemaFromTs.d.ts.map +1 -0
  177. package/dist/tools/function/types.d.ts +20 -0
  178. package/dist/tools/function/types.d.ts.map +1 -0
  179. package/dist/tools/index.d.ts +13 -0
  180. package/dist/tools/index.d.ts.map +1 -0
  181. package/dist/tools/langchain/LangChainLoader.d.ts +7 -0
  182. package/dist/tools/langchain/LangChainLoader.d.ts.map +1 -0
  183. package/dist/tools/langchain/directoryApply.d.ts +5 -0
  184. package/dist/tools/langchain/directoryApply.d.ts.map +1 -0
  185. package/dist/tools/langchain/directoryLoad.d.ts +13 -0
  186. package/dist/tools/langchain/directoryLoad.d.ts.map +1 -0
  187. package/dist/tools/langchain/index.d.ts +3 -0
  188. package/dist/tools/langchain/index.d.ts.map +1 -0
  189. package/dist/tools/langchain/scanner.d.ts +8 -0
  190. package/dist/tools/langchain/scanner.d.ts.map +1 -0
  191. package/dist/tools/langchain/types.d.ts +5 -0
  192. package/dist/tools/langchain/types.d.ts.map +1 -0
  193. package/dist/tools/mcp/MCPClientAdapter.d.ts +34 -0
  194. package/dist/tools/mcp/MCPClientAdapter.d.ts.map +1 -0
  195. package/dist/tools/mcp/MCPLoader.d.ts +8 -0
  196. package/dist/tools/mcp/MCPLoader.d.ts.map +1 -0
  197. package/dist/tools/mcp/MCPProcessManager.d.ts +29 -0
  198. package/dist/tools/mcp/MCPProcessManager.d.ts.map +1 -0
  199. package/dist/tools/mcp/connectMCP.d.ts +47 -0
  200. package/dist/tools/mcp/connectMCP.d.ts.map +1 -0
  201. package/dist/tools/mcp/directoryApply.d.ts +10 -0
  202. package/dist/tools/mcp/directoryApply.d.ts.map +1 -0
  203. package/dist/tools/mcp/index.d.ts +16 -0
  204. package/dist/tools/mcp/index.d.ts.map +1 -0
  205. package/dist/tools/mcp/mcpSpecToToolSpec.d.ts +8 -0
  206. package/dist/tools/mcp/mcpSpecToToolSpec.d.ts.map +1 -0
  207. package/dist/tools/mcp/registerMCPTools.d.ts +24 -0
  208. package/dist/tools/mcp/registerMCPTools.d.ts.map +1 -0
  209. package/dist/tools/mcp/scanner.d.ts +8 -0
  210. package/dist/tools/mcp/scanner.d.ts.map +1 -0
  211. package/dist/tools/mcp/support/types.d.ts +3 -0
  212. package/dist/tools/mcp/support/types.d.ts.map +1 -0
  213. package/dist/tools/n8n/N8nLoader.d.ts +25 -0
  214. package/dist/tools/n8n/N8nLoader.d.ts.map +1 -0
  215. package/dist/tools/n8n/directoryApply.d.ts +10 -0
  216. package/dist/tools/n8n/directoryApply.d.ts.map +1 -0
  217. package/dist/tools/n8n/index.d.ts +6 -0
  218. package/dist/tools/n8n/index.d.ts.map +1 -0
  219. package/dist/tools/n8n/scanN8n.d.ts +20 -0
  220. package/dist/tools/n8n/scanN8n.d.ts.map +1 -0
  221. package/dist/tools/n8n/types.d.ts +18 -0
  222. package/dist/tools/n8n/types.d.ts.map +1 -0
  223. package/dist/tools/scanPackage.d.ts +42 -0
  224. package/dist/tools/scanPackage.d.ts.map +1 -0
  225. package/dist/tools/skill/SkillLoader.d.ts +20 -0
  226. package/dist/tools/skill/SkillLoader.d.ts.map +1 -0
  227. package/dist/tools/skill/SkillManifest.d.ts +79 -0
  228. package/dist/tools/skill/SkillManifest.d.ts.map +1 -0
  229. package/dist/tools/skill/SkillMdParser.d.ts +31 -0
  230. package/dist/tools/skill/SkillMdParser.d.ts.map +1 -0
  231. package/dist/tools/skill/directoryApply.d.ts +10 -0
  232. package/dist/tools/skill/directoryApply.d.ts.map +1 -0
  233. package/dist/tools/skill/index.d.ts +8 -0
  234. package/dist/tools/skill/index.d.ts.map +1 -0
  235. package/dist/tools/skill/scanSkill.d.ts +20 -0
  236. package/dist/tools/skill/scanSkill.d.ts.map +1 -0
  237. package/dist/tools/skill/types.d.ts +19 -0
  238. package/dist/tools/skill/types.d.ts.map +1 -0
  239. package/dist/tools/util/canonicalCoreSchemas.d.ts +15 -0
  240. package/dist/tools/util/canonicalCoreSchemas.d.ts.map +1 -0
  241. package/dist/tools/util/index.d.ts +13 -0
  242. package/dist/tools/util/index.d.ts.map +1 -0
  243. package/dist/tools/util/resolveEntry.d.ts +6 -0
  244. package/dist/tools/util/resolveEntry.d.ts.map +1 -0
  245. package/dist/tools/util/scanUtil.d.ts +9 -0
  246. package/dist/tools/util/scanUtil.d.ts.map +1 -0
  247. package/dist/tools/util/toolConfig.d.ts +38 -0
  248. package/dist/tools/util/toolConfig.d.ts.map +1 -0
  249. package/dist/tools/util/toolDescriptor.d.ts +117 -0
  250. package/dist/tools/util/toolDescriptor.d.ts.map +1 -0
  251. package/dist/utils/cli/help.d.ts +2 -0
  252. package/dist/utils/cli/help.d.ts.map +1 -0
  253. package/dist/utils/cli/index.cjs +700 -0
  254. package/dist/utils/cli/index.cjs.map +1 -0
  255. package/dist/utils/cli/index.d.ts +9 -0
  256. package/dist/utils/cli/index.d.ts.map +1 -0
  257. package/dist/utils/cli/index.js +677 -0
  258. package/dist/utils/cli/index.js.map +1 -0
  259. package/dist/utils/cli/toolRuntime.d.ts +19 -0
  260. package/dist/utils/cli/toolRuntime.d.ts.map +1 -0
  261. package/dist/utils/log.d.ts +2 -0
  262. package/dist/utils/log.d.ts.map +1 -0
  263. package/dist/utils/npmCache.d.ts +11 -0
  264. package/dist/utils/npmCache.d.ts.map +1 -0
  265. package/dist/utils/npmVersion.d.ts +10 -0
  266. package/dist/utils/npmVersion.d.ts.map +1 -0
  267. package/dist/utils/overrideWithConfig.d.ts +2 -0
  268. package/dist/utils/overrideWithConfig.d.ts.map +1 -0
  269. package/package.json +125 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/security/ssrf.ts","../src/api/extension/contextRunner.ts","../src/api/extension/dynamicImportAdapter.ts","../src/api/extension/resolvePackageRoot.ts","../src/api/extension/registerExtension.ts","../src/api/extension/createExtension.ts","../src/api/extension/generateExtensionManifest.ts","../src/utils/overrideWithConfig.ts","../src/api/extension/support/groupPrefix.ts"],"names":["path","fileURLToPath","existsSync"],"mappings":";;;;;;;;;;;AAsBA,eAAsB,WAAA,CAAY,KAAa,OAAA,EAA2C;AACxF,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAI,IAAI,GAAG,CAAA;AAAA,EACtB,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,iBAAA;AAAA,MACJ,sBAAA;AAAA,MACA,gBAAgB,GAAG,CAAA,CAAA;AAAA,MACnB,EAAE,GAAA;AAAI,KACR;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,QAAA,KAAa,OAAA,IAAW,MAAA,CAAO,aAAa,QAAA,EAAU;AAC/D,IAAA,MAAM,iBAAA;AAAA,MACJ,sBAAA;AAAA,MACA,CAAA,sBAAA,EAAyB,OAAO,QAAQ,CAAA,sCAAA,CAAA;AAAA,MACxC,EAAE,GAAA,EAAK,QAAA,EAAU,MAAA,CAAO,QAAA;AAAS,KACnC;AAAA,EACF;AAEA,EAAA,MAAM,WAAW,MAAA,CAAO,QAAA;AAExB,EAAA,IAAI,CAAC,aAAA,CAAc,QAAA,EAAU,OAAA,CAAQ,YAAY,CAAA,EAAG;AAClD,IAAA,MAAM,iBAAA;AAAA,MACJ,sBAAA;AAAA,MACA,SAAS,QAAQ,CAAA,kCAAA,CAAA;AAAA,MACjB,EAAE,GAAA,EAAK,QAAA,EAAU,YAAA,EAAc,QAAQ,YAAA;AAAa,KACtD;AAAA,EACF;AACA,EAAA,IAAI,aAAA,CAAc,QAAA,EAAU,OAAA,CAAQ,YAAY,CAAA,EAAG;AACjD,IAAA,MAAM,iBAAA;AAAA,MACJ,sBAAA;AAAA,MACA,SAAS,QAAQ,CAAA,8BAAA,CAAA;AAAA,MACjB,EAAE,GAAA,EAAK,QAAA,EAAU,YAAA,EAAc,QAAQ,YAAA;AAAa,KACtD;AAAA,EACF;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,MAAM,OAAO,QAAQ,CAAA;AACzC,IAAA,IAAI,kBAAA,CAAmB,OAAA,EAAS,OAAA,CAAQ,YAAY,CAAA,EAAG;AACrD,MAAA,MAAM,iBAAA;AAAA,QACJ,sBAAA;AAAA,QACA,CAAA,MAAA,EAAS,QAAQ,CAAA,0BAAA,EAA6B,OAAO,CAAA,CAAA;AAAA,QACrD,EAAE,GAAA,EAAK,QAAA,EAAU,UAAA,EAAY,OAAA;AAAQ,OACvC;AAAA,IACF;AAAA,EACF,SAAS,GAAA,EAAK;AAEZ,IAAA,IAAI,GAAA,YAAe,KAAA,IAAU,GAAA,CAAY,IAAA,KAAS,sBAAA,EAAwB;AACxE,MAAA,MAAM,GAAA;AAAA,IACR;AAEA,IAAA,MAAM,iBAAA;AAAA,MACJ,sBAAA;AAAA,MACA,CAAA,gCAAA,EAAmC,QAAQ,CAAA,GAAA,EAAM,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AAAA,MACjG,EAAE,KAAK,QAAA;AAAS,KAClB;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAMA,SAAS,aAAA,CAAc,UAAkB,YAAA,EAAiC;AACxE,EAAA,KAAA,MAAW,WAAW,YAAA,EAAc;AAClC,IAAA,IAAI,YAAY,GAAA,EAAK;AACnB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AAC5B,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA;AAC9B,MAAA,IAAI,QAAA,CAAS,SAAS,MAAM,CAAA,IAAK,aAAa,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,EAAG;AAC9D,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF,CAAA,MAAA,IAAW,aAAa,OAAA,EAAS;AAC/B,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAKA,SAAS,aAAA,CAAc,UAAkB,YAAA,EAAiC;AACxE,EAAA,KAAA,MAAW,WAAW,YAAA,EAAc;AAClC,IAAA,IAAI,YAAY,GAAA,EAAK;AACnB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AAC5B,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA;AAC9B,MAAA,IAAI,QAAA,CAAS,SAAS,MAAM,CAAA,IAAK,aAAa,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,EAAG;AAC9D,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF,CAAA,MAAA,IAAW,aAAa,OAAA,EAAS;AAC/B,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAKO,SAAS,kBAAA,CAAmB,IAAY,KAAA,EAA0B;AAEvE,EAAA,MAAM,YAAA,GAAe,YAAY,EAAE,CAAA;AACnC,EAAA,IAAI,CAAC,cAAc,OAAO,KAAA;AAE1B,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AAEtB,MAAA,IAAI,CAAC,EAAA,CAAG,QAAA,CAAS,GAAG,CAAA,EAAG;AACvB,MAAA,IAAI,YAAA,CAAa,EAAA,EAAI,IAAI,CAAA,EAAG,OAAO,IAAA;AAAA,IACrC,CAAA,MAAO;AACL,MAAA,IAAI,YAAA,CAAa,YAAA,EAAc,IAAI,CAAA,EAAG,OAAO,IAAA;AAAA,IAC/C;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,YAAY,EAAA,EAA2B;AAE9C,EAAA,IAAI,EAAA,CAAG,UAAA,CAAW,SAAS,CAAA,EAAG;AAC5B,IAAA,OAAO,EAAA,CAAG,MAAM,CAAC,CAAA;AAAA,EACnB;AAEA,EAAA,IAAI,sBAAA,CAAuB,IAAA,CAAK,EAAE,CAAA,EAAG;AACnC,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,YAAA,CAAa,IAAY,IAAA,EAAuB;AACvD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,IAAA,CAAK,MAAM,GAAG,CAAA;AAC1C,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,SAAA,EAAW,OAAO,KAAA;AAElC,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,SAAA,EAAW,EAAE,CAAA;AACrC,EAAA,IAAI,MAAM,MAAM,CAAA,IAAK,SAAS,CAAA,IAAK,MAAA,GAAS,IAAI,OAAO,KAAA;AAEvD,EAAA,MAAM,KAAA,GAAQ,UAAU,EAAE,CAAA;AAC1B,EAAA,MAAM,OAAA,GAAU,UAAU,MAAM,CAAA;AAChC,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAA,KAAY,IAAA,EAAM,OAAO,KAAA;AAE/C,EAAA,MAAM,OAAO,MAAA,KAAW,CAAA,GAAI,IAAK,EAAC,IAAM,KAAK,MAAA,KAAa,CAAA;AAC1D,EAAA,OAAA,CAAQ,KAAA,GAAQ,WAAW,OAAA,GAAU,IAAA,CAAA;AACvC;AAEA,SAAS,UAAU,EAAA,EAA2B;AAC5C,EAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA;AAC1B,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAC/B,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,CAAA,GAAI,QAAA,CAAS,IAAA,EAAM,EAAE,CAAA;AAC3B,IAAA,IAAI,MAAM,CAAC,CAAA,IAAK,IAAI,CAAA,IAAK,CAAA,GAAI,KAAK,OAAO,IAAA;AACzC,IAAA,GAAA,GAAO,OAAO,CAAA,GAAK,CAAA;AAAA,EACrB;AACA,EAAA,OAAO,GAAA,KAAQ,CAAA;AACjB;AAEA,SAAS,YAAA,CAAa,IAAY,IAAA,EAAuB;AAEvD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,IAAA,CAAK,MAAM,GAAG,CAAA;AAC1C,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,SAAA,EAAW,OAAO,KAAA;AAElC,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,SAAA,EAAW,EAAE,CAAA;AACrC,EAAA,IAAI,KAAA,CAAM,MAAM,CAAA,EAAG,OAAO,KAAA;AAE1B,EAAA,MAAM,OAAA,GAAU,WAAW,EAAE,CAAA;AAC7B,EAAA,MAAM,SAAA,GAAY,WAAW,MAAM,CAAA;AACnC,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,SAAA,EAAW,OAAO,KAAA;AAGnC,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACvC,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAA,IAAa,CAAA,GAAI,IAAI,CAAA,EAAA,EAAK;AAC5C,IAAA,IAAI,QAAQ,CAAC,CAAA,KAAM,SAAA,CAAU,CAAC,GAAG,OAAO,KAAA;AAAA,EAC1C;AAEA,EAAA,MAAM,gBAAgB,MAAA,GAAS,CAAA;AAC/B,EAAA,IAAI,aAAA,GAAgB,CAAA,IAAK,SAAA,GAAY,EAAA,EAAI;AACvC,IAAA,MAAM,IAAA,GAAQ,EAAC,IAAM,CAAA,GAAI,aAAA,GAAkB,GAAA;AAC3C,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAS,CAAA,GAAK,IAAA,OAAW,UAAU,SAAS,CAAA,GAAK,OAAO,OAAO,KAAA;AAAA,EAC9E;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,WAAW,EAAA,EAA6B;AAE/C,EAAA,MAAM,OAAA,GAAU,EAAA,CAAG,OAAA,CAAQ,GAAG,CAAA;AAC9B,EAAA,IAAI,YAAY,EAAA,EAAI,EAAA,GAAK,EAAA,CAAG,KAAA,CAAM,GAAG,OAAO,CAAA;AAE5C,EAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,KAAA,CAAM,IAAI,CAAA;AAC3B,EAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,OAAO,IAAA;AAE7B,EAAA,MAAM,QAAkB,IAAI,KAAA,CAAM,EAAE,CAAA,CAAE,KAAK,CAAC,CAAA;AAE5C,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAA4B;AAC/C,IAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAC;AACpB,IAAA,OAAO,MAAM,KAAA,CAAM,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACvC,MAAA,MAAM,GAAA,GAAM,QAAA,CAAS,GAAA,IAAO,GAAA,EAAK,EAAE,CAAA;AACnC,MAAA,OAAO,CAAE,GAAA,IAAO,CAAA,GAAK,GAAA,EAAM,MAAM,GAAI,CAAA;AAAA,IACvC,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,KAAA,CAAM,CAAC,CAAE,CAAA;AACtC,IAAA,IAAI,QAAA,CAAS,MAAA,KAAW,EAAA,EAAI,OAAO,IAAA;AACnC,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,KAAA,CAAM,CAAC,CAAE,CAAA;AAClC,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,KAAA,CAAM,CAAC,CAAE,CAAA;AAEnC,EAAA,IAAI,IAAA,CAAK,MAAA,GAAS,KAAA,CAAM,MAAA,GAAS,IAAI,OAAO,IAAA;AAE5C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA,CAAK,CAAC,CAAA;AACvD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,CAAA,EAAA,EAAK,KAAA,CAAM,EAAA,GAAK,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,GAAI,MAAM,CAAC,CAAA;AAE7E,EAAA,OAAO,KAAA;AACT;ACvOO,SAAS,mBAAA,GAA2C;AACzD,EAAA,MAAM,OAAA,GAAU,IAAI,iBAAA,EAAqB;AACzC,EAAA,OAAO;AAAA,IACL,OAAA,CAAQ,KAAQ,EAAA,EAA8C;AAC5D,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,EAAE,CAAA;AAAA,IAC5B,CAAA;AAAA,IACA,UAAA,GAAgB;AACd,MAAA,MAAM,GAAA,GAAM,QAAQ,QAAA,EAAS;AAC7B,MAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,QAAA,MAAM,IAAI,MAAM,uEAAuE,CAAA;AAAA,MACzF;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,GACF;AACF;AClBA,SAAS,oBAAA,CAAqB,MAAgB,IAAA,EAAwB;AACpE,EAAA,IAAI,IAAA,IAAQ,QAAQ,OAAO,IAAA,KAAS,YAAY,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG,OAAO,IAAA;AAC5E,EAAA,MAAM,IAAI,IAAA,CAAK,WAAA;AACf,EAAA,IAAI,CAAA,EAAG,IAAA,KAAS,QAAA,IAAY,CAAC,CAAA,CAAE,cAAc,OAAO,CAAA,CAAE,UAAA,KAAe,QAAA,EAAU,OAAO,IAAA;AACtF,EAAA,MAAM,QAAQ,CAAA,CAAE,UAAA;AAChB,EAAA,MAAM,WAAW,KAAA,CAAM,IAAA;AACvB,EAAA,IACE,QAAA,IAAY,IAAA,IACZ,OAAO,QAAA,KAAa,QAAA,IACnB,SAAqC,IAAA,KAAS,QAAA,IAC9C,QAAA,CAAqC,UAAA,IAAc,IAAA,EACpD;AACA,IAAA,MAAM,GAAA,GAAM,IAAA;AACZ,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,WAAW,CAAA,IAAK,MAAA,IAAU,GAAA,IAAO,OAAO,GAAA,CAAI,IAAA,KAAS,QAAA,IAAY,GAAA,CAAI,SAAS,IAAA,EAAM;AACvG,MAAA,OAAO,GAAA,CAAI,IAAA;AAAA,IACb;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAsBO,SAAS,2BACd,OAAA,EACa;AACb,EAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,mBAAA,EAAqB,eAAc,GAAI,OAAA;AAClE,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,MAAM,MAAA,CACJ,IAAA,EACA,IAAA,EACA,OAAA,EAC6C;AAC7C,MAAA,MAAM,OAAO,IAAA,CAAK,KAAA;AAMlB,MAAA,MAAM,aAAa,IAAA,EAAM,UAAA;AACzB,MAAA,MAAM,aAAa,IAAA,EAAM,UAAA;AACzB,MAAA,IAAI,CAAC,UAAA,IAAc,CAAC,UAAA,EAAY;AAC9B,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,IAAA,CAAK,IAAI,CAAA,6CAAA,CAA+C,CAAA;AAAA,MAC5F;AACA,MAAA,MAAM,WAAA,GAAc,IAAA,EAAM,WAAA,IAAe,EAAC;AAC1C,MAAA,MAAM,UAAA,GACJ,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,CAAE,MAAA,KAAW,CAAA,GAC/B,IAAA,GACD,EAAE,GAAG,WAAA,EAAa,GAAI,IAAA,EAAiC;AAC7D,MAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,IAAA,EAAM,UAAU,CAAA;AACzD,MAAA,MAAM,mBAAA,GAAsB,MAAM,WAAA,IAAe,WAAA;AACjD,MAAA,MAAM,aAAaA,KAAA,CAAK,IAAA,CAAK,mBAAA,EAAqB,CAAA,EAAG,UAAU,CAAA,GAAA,CAAK,CAAA;AACpE,MAAA,MAAM,GAAA,GAAM,MAAM,OAAO,aAAA,CAAc,UAAU,CAAA,CAAE,IAAA,CAAA;AACnD,MAAA,MAAM,OAAA,GAAU,IAAI,UAAU,CAAA;AAC9B,MAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AACjC,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,kBAAkB,IAAA,CAAK,IAAI,CAAA,UAAA,EAAa,UAAU,UAAU,UAAU,CAAA,kBAAA;AAAA,SACxE;AAAA,MACF;AACA,MAAA,MAAM,GAAA,GAAM,mBAAA,CAAoB,OAAA,EAAS,IAAA,EAAM,UAAqC,CAAA;AACpF,MAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc,OAAA,CAAQ,KAAK,MAAM,OAAA,CAAQ,WAAW,CAAC,CAAA;AAE1E,MAAA,OAAO;AAAA,QACL,QAAQ,EAAE,MAAA,EAAQ,OAAO,MAAA,EAAQ,QAAA,EAAU,OAAO,QAAA,EAAS;AAAA,QAC3D,GAAA,EAAK,EAAE,QAAA,EAAU,MAAA,CAAO,QAAA;AAAS,OACnC;AAAA,IACF;AAAA,GACF;AACF;ACzFO,SAAS,4BAA4B,aAAA,EAA+B;AACzE,EAAA,MAAM,GAAA,GAAM,aAAA,CAAc,UAAA,CAAW,OAAO,CAAA,GACxCA,KAAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,aAAa,CAAC,CAAA,GACzCA,KAAAA,CAAK,QAAQ,aAAa,CAAA;AAC9B,EAAA,MAAM,IAAA,GAAOA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,MAAM,CAAA;AAClC,EAAA,OAAO,UAAA,CAAW,IAAI,CAAA,GAAI,IAAA,GAAO,GAAA;AACnC;;;ACeO,SAAS,6BAA6B,iBAAA,EAAqC;AAChF,EAAA,IAAI,CAAC,iBAAA,EAAmB,OAAO,EAAC;AAChC,EAAA,MAAM,UAAA,mBAAa,IAAI,GAAA,CAAY,CAAC,iBAAiB,CAAC,CAAA;AACtD,EAAA,IAAI,iBAAA,CAAkB,UAAA,CAAW,MAAM,CAAA,EAAG;AACxC,IAAA,MAAM,WAAA,GAAc,iBAAA,CAAkB,OAAA,CAAQ,aAAA,EAAe,EAAE,CAAA;AAC/D,IAAA,IAAI,WAAA,IAAe,gBAAgB,iBAAA,EAAmB;AACpD,MAAA,UAAA,CAAW,IAAI,WAAW,CAAA;AAAA,IAC5B;AAAA,EACF;AACA,EAAA,OAAO,CAAC,GAAG,UAAU,CAAA;AACvB;AAKO,SAAS,iBAAA,CACd,UACA,OAAA,EACa;AACb,EAAA,MAAM,EAAE,aAAa,IAAA,EAAM,OAAA,EAAS,QAAQ,gBAAA,EAAkB,IAAA,EAAM,cAAa,GAAI,OAAA;AACrF,EAAA,MAAM,WAAA,GAAc,4BAA4B,WAAW,CAAA;AAC3D,EAAA,MAAM,gBAAgB,gBAAA,EAAiB;AACvC,EAAA,MAAM,MAAA,GAAS,sBAAsB,WAAW,CAAA;AAChD,EAAA,MAAM,IAAA,GAAO,OAAA,IAAW,MAAA,CAAO,IAAA,IAAQ,WAAA;AAEvC,EAAA,yBAAA,CAA0B,QAAA,EAAU;AAAA,IAClC,iBAAA,EAAmB,WAAA;AAAA,IACnB,IAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,UAAU,0BAAA,CAAqC;AAAA,IACnD,IAAA;AAAA,IACA,WAAA;AAAA,IACA,mBAAA,EAAqB,CACnB,OAAA,EACA,IAAA,EACA,UAAA,KACG;AACH,MAAA,MAAM,WAAA,GAAe,IAAA,CAAK,KAAA,EAAiE,WAAA,IAAe,EAAC;AAC3G,MAAA,MAAM,UAAA,GAAc,MAAA,KAAW,MAAA,GAAa,MAAA,GAAqC,EAAC;AAClF,MAAA,MAAM,gBAAgB,UAAA,EAAY,aAAA;AAClC,MAAA,MAAM,SAAA,GAAa,IAAA,CAAK,KAAA,EAA8C,SAAA,IAAa,IAAA,CAAK,IAAA;AAGxF,MAAA,MAAM,iBAAA,GACJ,aAAa,IAAA,CAAK,IAAA,CAAK,SAAS,SAAS,CAAA,IAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,SAAA,CAAU,SACvE,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA,EAAG,IAAA,CAAK,KAAK,MAAA,GAAS,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA,GAC1D,EAAA;AACN,MAAA,MAAM,gBAAA,GAAmB,6BAA6B,iBAAiB,CAAA;AACvE,MAAA,MAAM,iBAAA,GAAoB,iBAAiB,GAAA,CAAI,CAAC,WAAW,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,SAAS,CAAA,CAAE,CAAA;AACpF,MAAA,MAAM,OAAA,GAAW,gBAAgB,IAAA,CAAK,IAAI,KACxC,iBAAA,CAAkB,GAAA,CAAI,CAAC,GAAA,KAAQ,aAAA,GAAgB,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,KAAU,MAAS,CAAA,IACxF,aAAA,GAAgB,SAAS,CAAA,IACzB,EAAC;AACH,MAAA,MAAM,kBAAkB,UAAA,EAAY,eAAA;AACpC,MAAA,MAAM,qBAAA,GAAwB,gBAAA,CAC3B,GAAA,CAAI,CAAC,WAAW,eAAA,GAAkB,MAAM,CAAC,CAAA,CACzC,KAAK,CAAC,KAAA,KAAU,KAAA,KAAU,MAAS,KAAK,EAAC;AAC5C,MAAA,MAAM,oBAAA,GAAuB,EAAE,GAAG,UAAA,EAAW;AAC7C,MAAA,OAAQ,oBAAA,CAAiD,aAAA;AACzD,MAAA,OAAQ,oBAAA,CAAiD,eAAA;AACzD,MAAA,MAAM,cAAA,GAAiB;AAAA,QACrB,GAAG,WAAA;AAAA,QACH,GAAG,oBAAA;AAAA,QACH,GAAG,qBAAA;AAAA,QACH,GAAG,OAAA;AAAA,QACH,GAAI,cAAc;AAAC,OACrB;AACA,MAAA,OAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,cAAA,EAAe;AAAA,IAC3C,CAAA;AAAA,IACA,aAAA,EAAe;AAAA,MACb,OAAA,CAAQ,KAAe,EAAA,EAAwC;AAC7D,QAAA,OAAO,aAAA,CAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA;AAAA,MACtC;AAAA;AACF,GACD,CAAA;AACD,EAAA,OAAO,OAAA;AACT;;;ACrDA,SAAS,mBAAmB,OAAA,EAAwE;AAClG,EAAA,IAAI,QAAQ,WAAA,IAAe,IAAA,IAAQ,QAAQ,WAAA,KAAgB,EAAA,SAAW,OAAA,CAAQ,WAAA;AAC9E,EAAA,IAAI,OAAA,CAAQ,UAAA,EAAY,GAAA,EAAK,OAAOA,KAAAA,CAAK,QAAQC,aAAAA,CAAc,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAC,CAAA;AACtF,EAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AACtE;AAEO,SAAS,gBACd,OAAA,EAC6C;AAC7C,EAAA,MAAM,WAAA,GAAc,mBAAmB,OAAO,CAAA;AAC9C,EAAA,MAAM,OAAO,OAAA,CAAQ,IAAA;AACrB,EAAA,MAAM,WAAA,GAAc,aAAA,IAAiB,OAAA,GAAU,OAAA,CAAQ,WAAA,GAAc,MAAA;AAErE,EAAA,MAAM,gBAAgB,mBAAA,EAAyB;AAE/C,EAAA,OAAO;AAAA,IACL,QAAA,CAAS,QAAA,EAAU,gBAAA,EAAkB,IAAA,EAAM;AACzC,MAAA,MAAM,MAAA,GAAS,WAAA,GACV,WAAA,CAA4C,gBAA+B,CAAA,GAC3E,gBAAA;AACL,MAAA,OAAO,kBAAkB,QAAA,EAAU;AAAA,QACjC,WAAA;AAAA,QACA,IAAA;AAAA,QACA,MAAA;AAAA,QACA,kBAAkB,MAAM,aAAA;AAAA,QACxB,IAAA,EAAM,IAAA,EAAM,IAAA,IAAS,gBAAA,EAA6D,IAAA;AAAA,QAClF,YAAA,EAAc,IAAA,EAAM,YAAA,IAAiB,gBAAA,EAA6D;AAAA,OACnG,CAAA;AAAA,IACH,CAAA;AAAA,IACA,UAAA,GAA4C;AAC1C,MAAA,OAAO,cAAc,UAAA,EAAW;AAAA,IAClC,CAAA;AAAA,IACA,OAAA,CAAW,KAAoC,EAAA,EAAkC;AAC/E,MAAA,OAAO,aAAA,CAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA;AAAA,IACtC;AAAA,GACF;AACF;ACnEA,SAAS,qBAAA,CAAsB,QAAgB,OAAA,EAAyB;AACtE,EAAA,IAAI,CAACC,UAAAA,CAAW,MAAM,CAAA,EAAG,OAAO,CAAA;AAChC,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,KAAK,WAAA,CAAY,MAAA,EAAQ,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA,EAAG;AAC5D,IAAA,MAAM,OAAA,GAAUF,KAAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,EAAE,IAAI,CAAA;AACxC,IAAA,MAAM,QAAA,GAAWA,KAAAA,CAAK,IAAA,CAAK,OAAA,EAAS,EAAE,IAAI,CAAA;AAC1C,IAAA,IAAI,CAAA,CAAE,MAAA,EAAO,KAAM,CAAA,CAAE,IAAA,CAAK,QAAA,CAAS,YAAY,CAAA,IAAK,CAAA,CAAE,IAAA,CAAK,QAAA,CAAS,eAAe,CAAA,CAAA,EAAI;AACrF,MAAA,IAAI,CAACE,WAAW,OAAO,CAAA,YAAa,OAAA,EAAS,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAChE,MAAA,YAAA,CAAa,SAAS,QAAQ,CAAA;AAC9B,MAAA,MAAA,EAAA;AAAA,IACF,CAAA,MAAA,IAAW,CAAA,CAAE,WAAA,EAAY,EAAG;AAC1B,MAAA,MAAA,IAAU,qBAAA,CAAsB,SAAS,QAAQ,CAAA;AAAA,IACnD;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAMO,SAAS,0BACd,WAAA,GAAsB,OAAA,CAAQ,KAAI,EAClC,OAAA,GAA4C,EAAC,EACyB;AACtE,EAAA,MAAM,IAAA,GAAOF,KAAAA,CAAK,OAAA,CAAQ,WAAW,CAAA;AACrC,EAAA,MAAM,MAAA,GAASA,MAAK,OAAA,CAAQ,OAAA,CAAQ,UAAUA,KAAAA,CAAK,IAAA,CAAK,IAAA,EAAM,MAAM,CAAC,CAAA;AACrE,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,IAAQ,MAAA;AAE7B,EAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,YAAA,CAAa;AAAA,IACrC,WAAA,EAAa,IAAA;AAAA,IACb,OAAA,EAAS,OAAA,CAAQ,OAAA,IAAW,CAAC,SAAS,CAAA;AAAA,IACtC,cAAc,OAAA,CAAQ;AAAA,GACvB,CAAA;AAED,EAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,IAAA,OAAA,CAAQ,IAAA,CAAK,0CAA0C,MAAM,CAAA;AAAA,EAC/D;AAEA,EAAA,MAAM,OAAA,GAAoC,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AAC5D,IAAA,MAAM,mBAAmB,IAAA,CAAK,UAAA,IAAc,EAAA,EAAI,OAAA,CAAQ,gBAAgB,EAAE,CAAA;AAC1E,IAAA,MAAM,aAAA,GAAgB,gBAAgB,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA,CAAE,OAAA,CAAQ,OAAO,GAAG,CAAA;AAC9E,IAAA,MAAM,IAAA,GAAO,KAAK,UAAA,IAAc,aAAA;AAChC,IAAA,MAAM,UAAA,GACH,IAAA,CAAK,KAAA,EAAO,IAAA,EAAM,UAAA,IAAiC,MAAA;AACtD,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,WAAA,EAAa,KAAK,WAAA,IAAe,eAAA;AAAA,MACjC,aAAa,IAAA,CAAK,WAAA,IAAe,EAAE,IAAA,EAAM,QAAA,EAAU,sBAAsB,IAAA,EAAK;AAAA,MAC9E,cAAc,IAAA,CAAK,YAAA,IAAgB,EAAE,IAAA,EAAM,QAAA,EAAU,sBAAsB,IAAA,EAAK;AAAA,MAChF,UAAA,EAAY,eAAA;AAAA,MACZ,UAAA,EAAY,KAAK,UAAA,IAAc,EAAA;AAAA,MAC/B;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,IAAI,CAACE,WAAW,MAAM,CAAA,YAAa,MAAA,EAAQ,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAC9D,EAAA,MAAM,YAAA,GAAeF,KAAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,0BAA0B,CAAA;AACjE,EAAA,aAAA;AAAA,IACE,YAAA;AAAA,IACA,IAAA,CAAK,UAAU,EAAE,IAAA,EAAM,OAAO,OAAA,EAAQ,EAAG,MAAM,CAAC,CAAA;AAAA,IAChD;AAAA,GACF;AAEA,EAAA,IAAI,cAAA,GAAiB,CAAA;AACrB,EAAA,MAAM,WAAW,OAAA,CAAQ,gBAAA;AACzB,EAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,MAAM,MAAA,GAASA,KAAAA,CAAK,IAAA,CAAK,IAAA,EAAM,CAAC,CAAA;AAChC,MAAA,MAAM,OAAA,GAAUA,KAAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,CAAC,CAAA;AACnC,MAAA,IAAI;AACF,QAAA,cAAA,IAAkB,qBAAA,CAAsB,QAAQ,OAAO,CAAA;AAAA,MACzD,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,YAAA,EAAc,UAAA,EAAY,OAAA,CAAQ,QAAQ,cAAA,EAAe;AACpE;AAMO,SAAS,iBACd,WAAA,GAAsB,OAAA,CAAQ,KAAI,EAClC,OAAA,GAAiE,EAAC,EAC5D;AACN,EAAA,MAAM,EAAE,YAAA,EAAc,UAAA,EAAY,cAAA,EAAe,GAAI,0BAA0B,WAAA,EAAa;AAAA,IAC1F,OAAA,EAAS,CAAC,aAAa,CAAA;AAAA,IACvB,gBAAA,EAAkB,CAAC,KAAK,CAAA;AAAA,IACxB,GAAG;AAAA,GACJ,CAAA;AACD,EAAA,OAAA,CAAQ,GAAA,CAAI,SAAS,UAAU,CAAA,UAAA,EAAaA,MAAK,QAAA,CAAS,WAAA,EAAa,YAAY,CAAC,CAAA,CAAE,CAAA;AACtF,EAAA,IAAI,iBAAiB,CAAA,EAAG,OAAA,CAAQ,GAAA,CAAI,CAAA,OAAA,EAAU,cAAc,CAAA,yCAAA,CAA2C,CAAA;AACzG;;;ACzHO,SAAS,kBAAA,CACd,UACA,MAAA,EACG;AACH,EAAA,MAAM,MAAA,GACJ,MAAA,IAAU,IAAA,IAAQ,OAAO,MAAA,KAAW,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,GAChE,MAAA,GACD,EAAC;AACP,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,QAAA,EAAS;AAE7B,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,EAAG;AACvC,IAAA,IAAI,GAAA,IAAO,MAAA,IAAU,MAAA,CAAO,GAAG,MAAM,MAAA,EAAW;AAC9C,MAAC,MAAA,CAAmC,GAAG,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA;AAAA,IACvD;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;;;ACIO,SAAS,qBAAqB,OAAA,EAAuD;AAC1F,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAM,cAAA,EAAe,GAAI,OAAA;AACzC,EAAA,MAAM,UAAU,IAAA,EAAM,MAAA,GAAS,IAAI,GAAA,CAAI,IAAI,CAAA,GAAI,IAAA;AAC/C,EAAA,MAAM,eACJ,CAAC,OAAA,IAAW,QAAQ,MAAA,GACf,MAAA,CAAO,IAAI,CAAC,CAAA,KAAM,cAAA,CAAe,CAAC,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAmB,CAAA,IAAK,IAAI,CAAA,GAC1E,MAAA;AACN,EAAA,OAAO;AAAA,IACL,GAAI,UAAU,EAAE,IAAA,EAAM,MAAM,IAAA,CAAK,OAAO,CAAA,EAAE,GAAI,EAAC;AAAA,IAC/C,GAAI,YAAA,EAAc,MAAA,GAAS,EAAE,YAAA,KAAiB;AAAC,GACjD;AACF","file":"sdk.js","sourcesContent":["import { lookup } from \"node:dns/promises\";\nimport { createTaggedError } from \"../core/runtime/Retry.js\";\n\n/**\n * Options for validateUrl. Unified rule: allow iff host is in allowedHosts AND not in blockedHosts.\n * - \"Default allow all + blocklist\": allowedHosts: [\"*\"], blockedHosts: [\"*.internal\", ...]\n * - \"Default disallow all + allowlist\": allowedHosts: [\"api.github.com\", ...], blockedHosts: []\n */\nexport interface ValidateUrlOptions {\n /** Allow only these hosts. Use [\"*\"] for allow-all. Supports \"*.example.com\", exact host. */\n allowedHosts: string[];\n /** Block these hosts even if allowed. Supports \"*.internal\", exact host. Merged with allowlist. */\n blockedHosts: string[];\n /** CIDR ranges to block (resolved IP). */\n blockedCidrs: string[];\n}\n\n/**\n * Validate a URL: allow iff (host in allowedHosts) AND (host not in blockedHosts). Then check blockedCidrs on resolved IP.\n *\n * @throws HTTP_DISALLOWED_HOST if the URL is blocked\n */\nexport async function validateUrl(url: string, options: ValidateUrlOptions): Promise<URL> {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n throw createTaggedError(\n \"HTTP_DISALLOWED_HOST\",\n `Invalid URL: ${url}`,\n { url },\n );\n }\n\n // Only allow http/https\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw createTaggedError(\n \"HTTP_DISALLOWED_HOST\",\n `Protocol not allowed: ${parsed.protocol}. Only http: and https: are supported.`,\n { url, protocol: parsed.protocol },\n );\n }\n\n const hostname = parsed.hostname;\n\n if (!isHostAllowed(hostname, options.allowedHosts)) {\n throw createTaggedError(\n \"HTTP_DISALLOWED_HOST\",\n `Host \"${hostname}\" is not in the allowed hosts list`,\n { url, hostname, allowedHosts: options.allowedHosts },\n );\n }\n if (isHostBlocked(hostname, options.blockedHosts)) {\n throw createTaggedError(\n \"HTTP_DISALLOWED_HOST\",\n `Host \"${hostname}\" is in the blocked hosts list`,\n { url, hostname, blockedHosts: options.blockedHosts },\n );\n }\n\n // DNS resolve and check against blocked CIDRs\n try {\n const { address } = await lookup(hostname);\n if (isIpInBlockedCidrs(address, options.blockedCidrs)) {\n throw createTaggedError(\n \"HTTP_DISALLOWED_HOST\",\n `Host \"${hostname}\" resolves to blocked IP: ${address}`,\n { url, hostname, resolvedIp: address },\n );\n }\n } catch (err) {\n // Re-throw our tagged errors\n if (err instanceof Error && (err as any).kind === \"HTTP_DISALLOWED_HOST\") {\n throw err;\n }\n // DNS resolution failure — block by default\n throw createTaggedError(\n \"HTTP_DISALLOWED_HOST\",\n `DNS resolution failed for host \"${hostname}\": ${err instanceof Error ? err.message : String(err)}`,\n { url, hostname },\n );\n }\n\n return parsed;\n}\n\n/**\n * Check if a hostname matches any entry in the allowed hosts list.\n * Supports: exact \"*\" (allow any host), wildcard prefix (e.g. \"*.github.com\"), or exact host.\n */\nfunction isHostAllowed(hostname: string, allowedHosts: string[]): boolean {\n for (const pattern of allowedHosts) {\n if (pattern === \"*\") {\n return true;\n }\n if (pattern.startsWith(\"*.\")) {\n const suffix = pattern.slice(1); // \".github.com\"\n if (hostname.endsWith(suffix) || hostname === pattern.slice(2)) {\n return true;\n }\n } else if (hostname === pattern) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Check if a hostname matches any entry in the blocked hosts list (same pattern rules as allowlist).\n */\nfunction isHostBlocked(hostname: string, blockedHosts: string[]): boolean {\n for (const pattern of blockedHosts) {\n if (pattern === \"*\") {\n return true;\n }\n if (pattern.startsWith(\"*.\")) {\n const suffix = pattern.slice(1);\n if (hostname.endsWith(suffix) || hostname === pattern.slice(2)) {\n return true;\n }\n } else if (hostname === pattern) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Check if an IPv4 address falls within any blocked CIDR range.\n */\nexport function isIpInBlockedCidrs(ip: string, cidrs: string[]): boolean {\n // Handle IPv4-mapped IPv6\n const normalizedIp = normalizeIp(ip);\n if (!normalizedIp) return false;\n\n for (const cidr of cidrs) {\n if (cidr.includes(\":\")) {\n // IPv6 CIDR — skip for IPv4 addresses\n if (!ip.includes(\":\")) continue;\n if (isIpv6InCidr(ip, cidr)) return true;\n } else {\n if (isIpv4InCidr(normalizedIp, cidr)) return true;\n }\n }\n return false;\n}\n\nfunction normalizeIp(ip: string): string | null {\n // Handle IPv4-mapped IPv6 (e.g. \"::ffff:127.0.0.1\")\n if (ip.startsWith(\"::ffff:\")) {\n return ip.slice(7);\n }\n // Pure IPv4\n if (/^\\d+\\.\\d+\\.\\d+\\.\\d+$/.test(ip)) {\n return ip;\n }\n return null;\n}\n\nfunction isIpv4InCidr(ip: string, cidr: string): boolean {\n const [cidrIp, prefixStr] = cidr.split(\"/\");\n if (!cidrIp || !prefixStr) return false;\n\n const prefix = parseInt(prefixStr, 10);\n if (isNaN(prefix) || prefix < 0 || prefix > 32) return false;\n\n const ipNum = ipv4ToNum(ip);\n const cidrNum = ipv4ToNum(cidrIp);\n if (ipNum === null || cidrNum === null) return false;\n\n const mask = prefix === 0 ? 0 : (~0 << (32 - prefix)) >>> 0;\n return (ipNum & mask) === (cidrNum & mask);\n}\n\nfunction ipv4ToNum(ip: string): number | null {\n const parts = ip.split(\".\");\n if (parts.length !== 4) return null;\n let num = 0;\n for (const part of parts) {\n const n = parseInt(part, 10);\n if (isNaN(n) || n < 0 || n > 255) return null;\n num = (num << 8) | n;\n }\n return num >>> 0;\n}\n\nfunction isIpv6InCidr(ip: string, cidr: string): boolean {\n // Simplified IPv6 CIDR matching for common cases (::1, fc00::, fe80::)\n const [cidrIp, prefixStr] = cidr.split(\"/\");\n if (!cidrIp || !prefixStr) return false;\n\n const prefix = parseInt(prefixStr, 10);\n if (isNaN(prefix)) return false;\n\n const ipBytes = expandIpv6(ip);\n const cidrBytes = expandIpv6(cidrIp);\n if (!ipBytes || !cidrBytes) return false;\n\n // Compare prefix bits\n const fullBytes = Math.floor(prefix / 8);\n for (let i = 0; i < fullBytes && i < 16; i++) {\n if (ipBytes[i] !== cidrBytes[i]) return false;\n }\n\n const remainingBits = prefix % 8;\n if (remainingBits > 0 && fullBytes < 16) {\n const mask = (~0 << (8 - remainingBits)) & 0xff;\n if ((ipBytes[fullBytes]! & mask) !== (cidrBytes[fullBytes]! & mask)) return false;\n }\n\n return true;\n}\n\nfunction expandIpv6(ip: string): number[] | null {\n // Remove zone ID\n const zoneIdx = ip.indexOf(\"%\");\n if (zoneIdx !== -1) ip = ip.slice(0, zoneIdx);\n\n const parts = ip.split(\"::\");\n if (parts.length > 2) return null;\n\n const bytes: number[] = new Array(16).fill(0);\n\n const expandGroup = (group: string): number[] => {\n if (!group) return [];\n return group.split(\":\").flatMap((hex) => {\n const val = parseInt(hex || \"0\", 16);\n return [(val >> 8) & 0xff, val & 0xff];\n });\n };\n\n if (parts.length === 1) {\n const expanded = expandGroup(parts[0]!);\n if (expanded.length !== 16) return null;\n return expanded;\n }\n\n const left = expandGroup(parts[0]!);\n const right = expandGroup(parts[1]!);\n\n if (left.length + right.length > 16) return null;\n\n for (let i = 0; i < left.length; i++) bytes[i] = left[i]!;\n for (let i = 0; i < right.length; i++) bytes[16 - right.length + i] = right[i]!;\n\n return bytes;\n}\n","/**\n * Generic context injection for extension tools (e.g. builtin).\n * Any extension that needs to inject config (sandbox, allowedHosts, etc.) into handlers uses this.\n */\nimport { AsyncLocalStorage } from \"node:async_hooks\";\n\nexport interface ContextRunner<T> {\n runWith(ctx: T, fn: () => Promise<unknown>): Promise<unknown>;\n getContext(): T;\n}\n\n/**\n * Create a context runner for an extension. Handlers call getContext() to read config.\n * Adapter calls runWith(ctx, () => handler(args)) so getContext() returns ctx.\n */\nexport function createContextRunner<T>(): ContextRunner<T> {\n const storage = new AsyncLocalStorage<T>();\n return {\n runWith(ctx: T, fn: () => Promise<unknown>): Promise<unknown> {\n return storage.run(ctx, fn);\n },\n getContext(): T {\n const ctx = storage.getStore();\n if (ctx === undefined) {\n throw new Error(\"Extension context not set; invoke only through the extension adapter.\");\n }\n return ctx;\n },\n };\n}\n","/**\n * Generic adapter for extensions that discover tools via manifest and load handlers by dynamic import.\n * Any extension (builtin, etc.) that uses @tool scan → manifest and runs handlers with injected context uses this.\n */\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { ToolAdapter, ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport type { ExecContext } from \"../../core/types/ToolIntent.js\";\nimport type { Evidence } from \"../../core/types/ToolResult.js\";\n\n/** If spec.inputSchema wraps params in \"args\", return args.args for the handler; else return args. */\nfunction unwrapArgsForHandler(spec: ToolSpec, args: unknown): unknown {\n if (args == null || typeof args !== \"object\" || Array.isArray(args)) return args;\n const s = spec.inputSchema as Record<string, unknown>;\n if (s?.type !== \"object\" || !s.properties || typeof s.properties !== \"object\") return args;\n const props = s.properties as Record<string, unknown>;\n const argsProp = props.args;\n if (\n argsProp != null &&\n typeof argsProp === \"object\" &&\n (argsProp as Record<string, unknown>).type === \"object\" &&\n (argsProp as Record<string, unknown>).properties != null\n ) {\n const obj = args as Record<string, unknown>;\n if (Object.keys(obj).length === 1 && \"args\" in obj && typeof obj.args === \"object\" && obj.args !== null) {\n return obj.args;\n }\n }\n return args;\n}\n\nexport interface ExtensionToolResult {\n result: unknown;\n evidence: Evidence[];\n}\n\nexport interface DynamicImportAdapterOptions<TContext> {\n kind: string;\n packageRoot: string;\n /**\n * Build context from execCtx, spec, and merged request args.\n * Framework merges defaultArgs (tool.yaml) with request args; implementor can merge into ctx.config\n * so handlers read resolved config from context instead of re-resolving in each handler.\n */\n getExtensionContext: (execCtx: ExecContext, spec: ToolSpec, mergedArgs?: Record<string, unknown>) => TContext;\n contextRunner: { runWith(ctx: TContext, fn: () => Promise<ExtensionToolResult>): Promise<ExtensionToolResult> };\n}\n\n/**\n * Create an adapter that loads handlers by spec._meta.sourcePath and exportName, then runs with extension context.\n */\nexport function createDynamicImportAdapter<TContext>(\n options: DynamicImportAdapterOptions<TContext>,\n): ToolAdapter {\n const { kind, packageRoot, getExtensionContext, contextRunner } = options;\n return {\n kind: kind as ToolAdapter[\"kind\"],\n async invoke(\n spec: ToolSpec,\n args: unknown,\n execCtx: ExecContext,\n ): Promise<{ result: unknown; raw?: unknown }> {\n const meta = spec._meta as {\n sourcePath?: string;\n exportName?: string;\n defaultArgs?: Record<string, unknown>;\n packageRoot?: string;\n } | undefined;\n const sourcePath = meta?.sourcePath;\n const exportName = meta?.exportName;\n if (!sourcePath || !exportName) {\n throw new Error(`Extension tool ${spec.name} missing _meta.sourcePath or _meta.exportName`);\n }\n const defaultArgs = meta?.defaultArgs ?? {};\n const mergedArgs =\n Object.keys(defaultArgs).length === 0\n ? (args as Record<string, unknown>)\n : { ...defaultArgs, ...(args as Record<string, unknown>) };\n const handlerArgs = unwrapArgsForHandler(spec, mergedArgs);\n const resolvedPackageRoot = meta?.packageRoot ?? packageRoot;\n const modulePath = path.join(resolvedPackageRoot, `${sourcePath}.js`);\n const mod = await import(pathToFileURL(modulePath).href);\n const handler = mod[exportName];\n if (typeof handler !== \"function\") {\n throw new Error(\n `Extension tool ${spec.name}: export \"${exportName}\" from ${sourcePath} is not a function`,\n );\n }\n const ctx = getExtensionContext(execCtx, spec, mergedArgs as Record<string, unknown>);\n const output = await contextRunner.runWith(ctx, () => handler(handlerArgs));\n // Return full envelope so pipeline output validation (outputSchema: { result, evidence }) passes.\n return {\n result: { result: output.result, evidence: output.evidence },\n raw: { evidence: output.evidence },\n };\n },\n };\n}\n","/**\n * Resolve extension package root for dynamic import (dist when built, else dir).\n * Accepts import.meta.url (file:) or a directory path (e.g. __dirname).\n */\nimport path from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\n\nexport function resolveExtensionPackageRoot(metaUrlOrPath: string): string {\n const dir = metaUrlOrPath.startsWith(\"file:\")\n ? path.dirname(fileURLToPath(metaUrlOrPath))\n : path.resolve(metaUrlOrPath);\n const dist = path.join(dir, \"dist\");\n return existsSync(dist) ? dist : dir;\n}\n","/**\n * One-shot: load pre-built manifest from package, register all specs, create adapter.\n * Framework does NOT scan source for @tool; it reads manifest (e.g. core-tools-manifest.json)\n * produced by the extension's build. Extension passes packagePath, config, getContextRunner.\n */\nimport type { ToolAdapter } from \"../../core/types/ToolSpec.js\";\nimport type { ToolRegistry } from \"../../core/registry/ToolRegistry.js\";\nimport type { ExecContext } from \"../../core/types/ToolIntent.js\";\nimport type { ContextRunner } from \"./contextRunner.js\";\nimport { createDynamicImportAdapter } from \"./dynamicImportAdapter.js\";\nimport type { ExtensionToolResult } from \"./dynamicImportAdapter.js\";\nimport { registerToolsFromManifest, loadExtensionManifest } from \"./registerFromManifest.js\";\nimport { resolveExtensionPackageRoot } from \"./resolvePackageRoot.js\";\n\nexport interface RegisterExtensionOptions<TContext> {\n /** Package root (e.g. __dirname of extension's entry). Manifest is read from here. */\n packagePath: string;\n /** Tool kind; if omitted, uses manifest.kind or \"extension\". */\n kind?: string;\n /** Optional default config; merged with each tool's tool.yaml (spec._meta.defaultArgs). Context config = { ...config, ...toolDefaultArgs }. */\n config?: unknown;\n /** Returns the context runner (extension's createContextRunner()). */\n getContextRunner: () => ContextRunner<TContext>;\n /** Filter: only register these tool names. */\n only?: string[];\n /** Filter: only register tools whose name starts with one of these prefixes. */\n namePrefixes?: string[];\n}\n\nexport function deriveConfigPrefixCandidates(prefixWithVersion: string): string[] {\n if (!prefixWithVersion) return [];\n const candidates = new Set<string>([prefixWithVersion]);\n if (prefixWithVersion.startsWith(\"npm.\")) {\n const versionless = prefixWithVersion.replace(/(?:\\.\\d+)+$/, \"\");\n if (versionless && versionless !== prefixWithVersion) {\n candidates.add(versionless);\n }\n }\n return [...candidates];\n}\n\n/**\n * Load manifest from package (pre-built JSON; no @tool scanning). Register all specs, create and return adapter.\n */\nexport function registerExtension<TContext extends { execCtx: ExecContext; config: unknown }>(\n registry: ToolRegistry,\n options: RegisterExtensionOptions<TContext>,\n): ToolAdapter {\n const { packagePath, kind: kindOpt, config, getContextRunner, only, namePrefixes } = options;\n const packageRoot = resolveExtensionPackageRoot(packagePath);\n const contextRunner = getContextRunner();\n const loaded = loadExtensionManifest(packagePath);\n const kind = kindOpt ?? loaded.kind ?? \"extension\";\n\n registerToolsFromManifest(registry, {\n manifestPathOrDir: packagePath,\n kind,\n only,\n namePrefixes,\n packageRoot,\n });\n\n const adapter = createDynamicImportAdapter<TContext>({\n kind,\n packageRoot,\n getExtensionContext: (\n execCtx: ExecContext,\n spec: import(\"../../core/types/ToolSpec.js\").ToolSpec,\n mergedArgs?: Record<string, unknown>,\n ) => {\n const defaultArgs = (spec._meta as { defaultArgs?: Record<string, unknown> } | undefined)?.defaultArgs ?? {};\n const baseConfig = (config !== undefined ? (config as Record<string, unknown>) : {}) as Record<string, unknown>;\n const toolOverrides = baseConfig?.toolOverrides as Record<string, Record<string, unknown>> | undefined;\n const shortName = (spec._meta as { shortName?: string } | undefined)?.shortName ?? spec.name;\n // Derive stable config keys from the registry prefix. NPM prefixes include a trailing\n // version segment, while file: prefixes do not, so we keep both exact and trimmed forms.\n const prefixWithVersion =\n shortName && spec.name.endsWith(shortName) && spec.name.length > shortName.length\n ? spec.name.slice(0, spec.name.length - shortName.length - 1)\n : \"\";\n const prefixCandidates = deriveConfigPrefixCandidates(prefixWithVersion);\n const packageScopedKeys = prefixCandidates.map((prefix) => `${prefix}::${shortName}`);\n const perTool = (toolOverrides?.[spec.name] ??\n packageScopedKeys.map((key) => toolOverrides?.[key]).find((value) => value !== undefined) ??\n toolOverrides?.[shortName] ??\n {}) as Record<string, unknown>;\n const packageDefaults = baseConfig?.packageDefaults as Record<string, Record<string, unknown>> | undefined;\n const packageDefaultsForPkg = prefixCandidates\n .map((prefix) => packageDefaults?.[prefix])\n .find((value) => value !== undefined) ?? {};\n const baseWithoutOverrides = { ...baseConfig };\n delete (baseWithoutOverrides as Record<string, unknown>).toolOverrides;\n delete (baseWithoutOverrides as Record<string, unknown>).packageDefaults;\n const resolvedConfig = {\n ...defaultArgs,\n ...baseWithoutOverrides,\n ...packageDefaultsForPkg,\n ...perTool,\n ...(mergedArgs ?? {}),\n } as TContext[\"config\"];\n return { execCtx, config: resolvedConfig } as TContext;\n },\n contextRunner: {\n runWith(ctx: TContext, fn: () => Promise<ExtensionToolResult>) {\n return contextRunner.runWith(ctx, fn) as Promise<ExtensionToolResult>;\n },\n },\n });\n return adapter;\n}\n","/**\n * One-shot extension bootstrap: context runner + register + getContext/runWith.\n * Config can be extension-level (buildConfig) or per-tool only (defaultConfig in opts, merged with tool.yaml).\n */\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { ToolAdapter } from \"../../core/types/ToolSpec.js\";\nimport type { ToolRegistry } from \"../../core/registry/ToolRegistry.js\";\nimport { createContextRunner } from \"./contextRunner.js\";\nimport { registerExtension } from \"./registerExtension.js\";\nimport type { ExtensionToolContext } from \"./support/types.js\";\n\n/** Pass import.meta so the framework derives packagePath (extension entry does not need path/fileURLToPath). */\nexport interface ImportMetaLike {\n url: string;\n}\n\n/** Options when config is built from userConfig (buildConfig). */\nexport interface CreateExtensionOptionsWithBuild<TConfig, TUserConfig> {\n packagePath?: string;\n importMeta?: ImportMetaLike;\n kind?: string;\n buildConfig: (userConfig: TUserConfig) => TConfig;\n}\n\n/** Options when config is per-tool only (each tool's tool.yaml). */\nexport interface CreateExtensionOptionsDefaultOnly {\n packagePath?: string;\n importMeta?: ImportMetaLike;\n kind?: string;\n}\n\n/** Register opts when using per-tool config only: filter tools by name. */\nexport interface RegisterOptionsDefaultOnly {\n only?: string[];\n namePrefixes?: string[];\n}\n\nexport type CreateExtensionOptions<TConfig, TUserConfig> =\n | CreateExtensionOptionsWithBuild<TConfig, TUserConfig>\n | (CreateExtensionOptionsDefaultOnly & { buildConfig?: never });\n\nexport interface CreateExtensionResult<TConfig, TUserConfig> {\n register(\n registry: ToolRegistry,\n userConfigOrOpts: TUserConfig,\n options?: { only?: string[]; namePrefixes?: string[] },\n ): ToolAdapter;\n getContext(): ExtensionToolContext<TConfig>;\n runWith<T>(ctx: ExtensionToolContext<TConfig>, fn: () => Promise<T>): Promise<T>;\n}\n\n/**\n * Create an extension. With buildConfig: register(registry, userConfig, opts?).\n * Without buildConfig: register(registry, opts?) where opts = { only?, namePrefixes? }; config comes only from each tool's tool.yaml.\n */\nfunction resolvePackagePath(options: { packagePath?: string; importMeta?: ImportMetaLike }): string {\n if (options.packagePath != null && options.packagePath !== \"\") return options.packagePath;\n if (options.importMeta?.url) return path.dirname(fileURLToPath(options.importMeta.url));\n throw new Error(\"createExtension: provide packagePath or importMeta\");\n}\n\nexport function createExtension<TConfig = Record<string, unknown>, TUserConfig = RegisterOptionsDefaultOnly>(\n options: CreateExtensionOptions<TConfig, TUserConfig>,\n): CreateExtensionResult<TConfig, TUserConfig> {\n const packagePath = resolvePackagePath(options);\n const kind = options.kind;\n const buildConfig = \"buildConfig\" in options ? options.buildConfig : undefined;\n type Ctx = ExtensionToolContext<TConfig>;\n const contextRunner = createContextRunner<Ctx>();\n\n return {\n register(registry, userConfigOrOpts, opts) {\n const config = buildConfig\n ? (buildConfig as (u: TUserConfig) => TConfig)(userConfigOrOpts as TUserConfig)\n : (userConfigOrOpts as Record<string, unknown> | undefined);\n return registerExtension(registry, {\n packagePath,\n kind,\n config,\n getContextRunner: () => contextRunner,\n only: opts?.only ?? (userConfigOrOpts as RegisterOptionsDefaultOnly | undefined)?.only,\n namePrefixes: opts?.namePrefixes ?? (userConfigOrOpts as RegisterOptionsDefaultOnly | undefined)?.namePrefixes,\n });\n },\n getContext(): ExtensionToolContext<TConfig> {\n return contextRunner.getContext() as ExtensionToolContext<TConfig>;\n },\n runWith<T>(ctx: ExtensionToolContext<TConfig>, fn: () => Promise<T>): Promise<T> {\n return contextRunner.runWith(ctx, fn) as Promise<T>;\n },\n };\n}\n","/**\n * Build step: scan project for @tool, emit extension manifest (core-tools-manifest.json) and copy *.tool.yaml / *.example.yaml.\n * Extensions run this at build time; agent-tool reads the manifest when the extension's register is called.\n */\nimport { writeFileSync, mkdirSync, existsSync, readdirSync, copyFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { scanForTools } from \"../../tools/function/scanner.js\";\nimport type { ExtensionManifestEntry } from \"./registerFromManifest.js\";\nimport type { HitlSideEffect } from \"../../core/types/ToolSpec.js\";\n\nexport interface GenerateExtensionManifestOptions {\n /** Project root (default: process.cwd()). */\n projectRoot?: string;\n /** Output directory for manifest and copied tool.yaml (default: projectRoot/dist). */\n outDir?: string;\n /** Manifest kind (default: \"core\"). */\n kind?: string;\n /** Include globs for TS files (default: all .ts). */\n include?: string[];\n /** Path to tsconfig (default: projectRoot/tsconfig.json). */\n tsconfigPath?: string;\n /** Subdirs to recursively copy *.tool.yaml and *.example.yaml from (e.g. [\"src\"]). */\n copyToolYamlDirs?: string[];\n}\n\nfunction copyToolYamlRecursive(srcDir: string, destDir: string): number {\n if (!existsSync(srcDir)) return 0;\n let copied = 0;\n for (const e of readdirSync(srcDir, { withFileTypes: true })) {\n const srcPath = path.join(srcDir, e.name);\n const destPath = path.join(destDir, e.name);\n if (e.isFile() && (e.name.endsWith(\".tool.yaml\") || e.name.endsWith(\".example.yaml\"))) {\n if (!existsSync(destDir)) mkdirSync(destDir, { recursive: true });\n copyFileSync(srcPath, destPath);\n copied++;\n } else if (e.isDirectory()) {\n copied += copyToolYamlRecursive(srcPath, destPath);\n }\n }\n return copied;\n}\n\n/**\n * Scan project for @tool, write core-tools-manifest.json and recursively copy *.tool.yaml and *.example.yaml to outDir.\n * Returns the written manifest path and number of tools.\n */\nexport function generateExtensionManifest(\n projectRoot: string = process.cwd(),\n options: GenerateExtensionManifestOptions = {},\n): { manifestPath: string; toolsCount: number; toolYamlCopied: number } {\n const root = path.resolve(projectRoot);\n const outDir = path.resolve(options.outDir ?? path.join(root, \"dist\"));\n const kind = options.kind ?? \"core\";\n\n const { specs, errors } = scanForTools({\n projectPath: root,\n include: options.include ?? [\"**/*.ts\"],\n tsconfigPath: options.tsconfigPath,\n });\n\n if (errors.length > 0) {\n console.warn(\"generateExtensionManifest: scan errors\", errors);\n }\n\n const entries: ExtensionManifestEntry[] = specs.map((spec) => {\n const sourcePathNoExt = (spec.sourcePath ?? \"\").replace(/\\.(ts|tsx)$/i, \"\");\n const pathBasedName = sourcePathNoExt.replace(/^src\\//, \"\").replace(/\\//g, \".\");\n const name = spec.exportName ?? pathBasedName;\n const sideEffect: HitlSideEffect =\n (spec._meta?.hitl?.sideEffect as HitlSideEffect) ?? \"none\";\n return {\n name,\n description: spec.description ?? sourcePathNoExt,\n inputSchema: spec.inputSchema ?? { type: \"object\", additionalProperties: true },\n outputSchema: spec.outputSchema ?? { type: \"object\", additionalProperties: true },\n sourcePath: sourcePathNoExt,\n exportName: spec.exportName ?? \"\",\n sideEffect,\n };\n });\n\n if (!existsSync(outDir)) mkdirSync(outDir, { recursive: true });\n const manifestPath = path.join(outDir, \"core-tools-manifest.json\");\n writeFileSync(\n manifestPath,\n JSON.stringify({ kind, tools: entries }, null, 2),\n \"utf-8\",\n );\n\n let toolYamlCopied = 0;\n const copyDirs = options.copyToolYamlDirs;\n if (copyDirs?.length) {\n for (const d of copyDirs) {\n const srcDir = path.join(root, d);\n const destDir = path.join(outDir, d);\n try {\n toolYamlCopied += copyToolYamlRecursive(srcDir, destDir);\n } catch {\n // ignore\n }\n }\n }\n\n return { manifestPath, toolsCount: entries.length, toolYamlCopied };\n}\n\n/**\n * Build step for extensions: scan src folder and subfolders, emit manifest, copy tool.yaml.\n * Call from extension's build script (e.g. tsx generate-manifest.ts).\n */\nexport function generateManifest(\n projectRoot: string = process.cwd(),\n options: Omit<GenerateExtensionManifestOptions, \"projectRoot\"> = {},\n): void {\n const { manifestPath, toolsCount, toolYamlCopied } = generateExtensionManifest(projectRoot, {\n include: [\"src/**/*.ts\"],\n copyToolYamlDirs: [\"src\"],\n ...options,\n });\n console.log(`Wrote ${toolsCount} tools to ${path.relative(projectRoot, manifestPath)}`);\n if (toolYamlCopied > 0) console.log(`Copied ${toolYamlCopied} .tool.yaml/.example.yaml file(s) to dist`);\n}\n","export function overrideWithConfig<T extends Record<string, unknown>>(\n defaults: T,\n config: unknown,\n): T {\n const source =\n config != null && typeof config === \"object\" && !Array.isArray(config)\n ? (config as Record<string, unknown>)\n : {};\n const output = { ...defaults };\n\n for (const key of Object.keys(defaults)) {\n if (key in source && source[key] !== undefined) {\n (output as Record<string, unknown>)[key] = source[key];\n }\n }\n\n return output;\n}\n","/**\n * Convert \"groups\" + \"only\" options and a group→prefix map into only/namePrefixes for registerToolsFromManifest.\n * Extensions define their own group names and prefixes (e.g. fs -> \"core/fs.\").\n */\nexport interface GroupPrefixOptions {\n /** Only register tools in these groups (e.g. [\"fs\", \"http\"]). */\n groups?: string[];\n /** Only register these tool names. Takes precedence over groups. */\n only?: string[];\n /** Map group name -> name prefix (e.g. { fs: \"core/fs.\", http: \"core/http.\" }). */\n groupPrefixMap: Record<string, string>;\n}\n\nexport interface ResolvedOnlyNamePrefixes {\n only?: string[];\n namePrefixes?: string[];\n}\n\n/**\n * Resolve groups/only + groupPrefixMap to only and namePrefixes for registerToolsFromManifest.\n */\nexport function getGroupNamePrefixes(options: GroupPrefixOptions): ResolvedOnlyNamePrefixes {\n const { groups, only, groupPrefixMap } = options;\n const onlySet = only?.length ? new Set(only) : null;\n const namePrefixes =\n !onlySet && groups?.length\n ? (groups.map((g) => groupPrefixMap[g]).filter((x): x is string => x != null) as string[])\n : undefined;\n return {\n ...(onlySet ? { only: Array.from(onlySet) } : {}),\n ...(namePrefixes?.length ? { namePrefixes } : {}),\n };\n}\n"]}
@@ -0,0 +1,10 @@
1
+ export declare function setSandboxValidationEnabled(enabled: boolean): void;
2
+ /**
3
+ * Resolve an input path to an absolute path within the sandbox.
4
+ * Throws PATH_OUTSIDE_SANDBOX if the resolved path escapes the sandbox root.
5
+ *
6
+ * For existing files: uses realpath to resolve symlinks.
7
+ * For non-existing files (write targets): resolves the parent directory.
8
+ */
9
+ export declare function resolveSandboxedPath(inputPath: string, sandboxRoot: string): Promise<string>;
10
+ //# sourceMappingURL=sandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/security/sandbox.ts"],"names":[],"mappings":"AAMA,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAElE;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CA0CjB"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Options for validateUrl. Unified rule: allow iff host is in allowedHosts AND not in blockedHosts.
3
+ * - "Default allow all + blocklist": allowedHosts: ["*"], blockedHosts: ["*.internal", ...]
4
+ * - "Default disallow all + allowlist": allowedHosts: ["api.github.com", ...], blockedHosts: []
5
+ */
6
+ export interface ValidateUrlOptions {
7
+ /** Allow only these hosts. Use ["*"] for allow-all. Supports "*.example.com", exact host. */
8
+ allowedHosts: string[];
9
+ /** Block these hosts even if allowed. Supports "*.internal", exact host. Merged with allowlist. */
10
+ blockedHosts: string[];
11
+ /** CIDR ranges to block (resolved IP). */
12
+ blockedCidrs: string[];
13
+ }
14
+ /**
15
+ * Validate a URL: allow iff (host in allowedHosts) AND (host not in blockedHosts). Then check blockedCidrs on resolved IP.
16
+ *
17
+ * @throws HTTP_DISALLOWED_HOST if the URL is blocked
18
+ */
19
+ export declare function validateUrl(url: string, options: ValidateUrlOptions): Promise<URL>;
20
+ /**
21
+ * Check if an IPv4 address falls within any blocked CIDR range.
22
+ */
23
+ export declare function isIpInBlockedCidrs(ip: string, cidrs: string[]): boolean;
24
+ //# sourceMappingURL=ssrf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssrf.d.ts","sourceRoot":"","sources":["../../src/security/ssrf.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,6FAA6F;IAC7F,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,mGAAmG;IACnG,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,0CAA0C;IAC1C,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,CA8DxF;AA2CD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAevE"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Generated MCP server entrypoint. Start with: npx tsx mcp-server.ts
3
+ * Listens on stdio for MCP protocol. Supports function, skill, and n8n tools.
4
+ */
5
+ import { createRequire } from "node:module";
6
+ import { fileURLToPath } from "node:url";
7
+ import { dirname, join } from "node:path";
8
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
10
+ import { getHandler } from "./tool-index.js";
11
+ import { getSkillInvoker } from "./skill-invoker.js";
12
+ import { getN8nInvoker } from "./n8n-invoker.js";
13
+
14
+ const __dirname = dirname(fileURLToPath(import.meta.url));
15
+ const require = createRequire(import.meta.url);
16
+ const toolSpecs = require(join(__dirname, "tool-specs.json"));
17
+
18
+ const server = new McpServer({ name: "function-tools", version: "1.0.0" });
19
+
20
+ for (const spec of toolSpecs) {
21
+ server.registerTool(
22
+ spec.name,
23
+ {
24
+ description: spec.description,
25
+ inputSchema: spec.inputSchema,
26
+ _meta: spec._meta,
27
+ },
28
+ async (args, _extra) => {
29
+ let result;
30
+ if (spec.kind === "function") {
31
+ const handler = await getHandler(spec.name);
32
+ result = await handler(args);
33
+ } else if (spec.kind === "skill") {
34
+ const invoker = await getSkillInvoker(spec.name);
35
+ result = await invoker(args);
36
+ } else if (spec.kind === "n8n") {
37
+ const invoker = await getN8nInvoker(spec.name);
38
+ result = await invoker(args);
39
+ } else {
40
+ throw new Error("Unknown tool kind: " + (spec.kind ?? "undefined"));
41
+ }
42
+ return { content: [{ type: "text", text: JSON.stringify(result) }] };
43
+ }
44
+ );
45
+ }
46
+
47
+ const transport = new StdioServerTransport();
48
+ await server.connect(transport);
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Generated n8n invoker: name -> (args) => result. POSTs to webhook URL.
3
+ */
4
+ export async function getN8nInvoker(name: string): Promise<(args: Record<string, unknown>) => Promise<unknown>> {
5
+ return async (args) => {
6
+ switch (name) {
7
+ {{CASES}}
8
+ {{DEFAULT_CASE}}
9
+ }
10
+ };
11
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Generated skill invoker: name -> (args) => result. Loads handler from project.
3
+ */
4
+ export async function getSkillInvoker(name: string): Promise<(args: Record<string, unknown>) => Promise<unknown>> {
5
+ return async (args) => {
6
+ switch (name) {
7
+ {{CASES}}
8
+ {{DEFAULT_CASE}}
9
+ }
10
+ };
11
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Generated tool index: name -> handler (function tools only).
3
+ */
4
+ export async function getHandler(name: string): Promise<(args: Record<string, unknown>) => Promise<unknown>> {
5
+ switch (name) {
6
+ {{CASES}}
7
+ default: throw new Error("Unknown tool: " + name);
8
+ }
9
+ }
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Discovery factory: types, discoverTools by kind, directory loaders/markers, and DirectoryScanner.
3
+ * Single place for discovery types, scan-by-type, and filesystem directory scanning.
4
+ */
5
+ import type { ToolSpec, Capability, CostHints } from "../core/types/ToolSpec.js";
6
+ import type { FunctionToolSpec } from "./function/types.js";
7
+ import type { SkillToolSpec } from "./skill/types.js";
8
+ import type { N8nToolSpec } from "./n8n/types.js";
9
+ export type { SideEffect, FunctionToolSpec } from "./function/types.js";
10
+ export type { SkillToolSpec } from "./skill/types.js";
11
+ export type { N8nToolSpec } from "./n8n/types.js";
12
+ export type MCPToolSpec = FunctionToolSpec | SkillToolSpec | N8nToolSpec;
13
+ export type DiscoverableKind = "function" | "skill" | "n8n" | "mcp" | "langchain";
14
+ export interface DiscoverToolsOptions {
15
+ namespace?: string;
16
+ include?: string[];
17
+ tsconfigPath?: string;
18
+ extensions?: string[];
19
+ onError?: (fileOrDir: string, error: Error) => void;
20
+ }
21
+ export interface DiscoverToolsResult {
22
+ specs: ToolSpec[];
23
+ errors: Array<{
24
+ file: string;
25
+ message: string;
26
+ }>;
27
+ warnings?: Array<{
28
+ file: string;
29
+ message: string;
30
+ }>;
31
+ }
32
+ export interface MCPServerConfig {
33
+ command?: string;
34
+ args?: string[];
35
+ env?: Record<string, string>;
36
+ cwd?: string;
37
+ url?: string;
38
+ }
39
+ export interface ToolManifest {
40
+ kind: DiscoverableKind;
41
+ name?: string;
42
+ version?: string;
43
+ description?: string;
44
+ tags?: string[];
45
+ capabilities?: Capability[];
46
+ costHints?: CostHints;
47
+ entryPoint?: string;
48
+ programs?: Record<string, string>;
49
+ inputSchema?: object;
50
+ outputSchema?: object;
51
+ enabled?: boolean;
52
+ }
53
+ export interface DirectoryScannerOptions {
54
+ roots: Array<string | {
55
+ path: string;
56
+ namespace?: string;
57
+ }>;
58
+ namespace?: string;
59
+ extensions?: string[];
60
+ onError?: (toolDir: string, error: Error) => void;
61
+ }
62
+ export interface LoadedTool {
63
+ manifest: ToolManifest;
64
+ dirPath: string;
65
+ impl?: unknown;
66
+ mcpConfig?: MCPServerConfig;
67
+ workflowDef?: unknown;
68
+ skillDefinition?: unknown;
69
+ programKey?: string;
70
+ }
71
+ export declare class DiscoveryError extends Error {
72
+ readonly toolDir: string;
73
+ readonly phase: "manifest" | "load" | "validate";
74
+ readonly cause?: Error;
75
+ constructor(toolDir: string, phase: "manifest" | "load" | "validate", message: string, cause?: Error);
76
+ }
77
+ declare const DIRECTORY_KINDS: readonly ["mcp", "langchain", "skill", "n8n"];
78
+ export declare const DIRECTORY_DISCOVERABLE_KINDS: readonly ["mcp", "langchain", "skill", "n8n"];
79
+ export declare const DIRECTORY_KIND_MARKERS: readonly [{
80
+ kind: "skill";
81
+ markerFile: string;
82
+ defaultEntryPoint: string;
83
+ }, {
84
+ kind: "n8n";
85
+ markerFile: string;
86
+ defaultEntryPoint: string;
87
+ }, {
88
+ kind: "mcp";
89
+ markerFile: string;
90
+ defaultEntryPoint: string;
91
+ }];
92
+ export type DirectoryLoader = (dirPath: string, manifest: ToolManifest, extensions: string[]) => Promise<LoadedTool | LoadedTool[]>;
93
+ export declare function getDirectoryLoader(kind: (typeof DIRECTORY_KINDS)[number]): DirectoryLoader;
94
+ export declare function applyDirectoryLoadedToSpec(spec: ToolSpec, loaded: LoadedTool, manifest: ToolManifest, defaultDirName: string, namespace: string): void;
95
+ export declare function discoverTools(type: DiscoverableKind, projectPath: string, options?: DiscoverToolsOptions): Promise<DiscoverToolsResult>;
96
+ export { LANGCHAIN_DIR_NAME } from "./langchain/types.js";
97
+ export { SKILL_DIR_NAME } from "./skill/types.js";
98
+ /**
99
+ * Scans filesystem directories for tool definitions.
100
+ */
101
+ export declare class DirectoryScanner {
102
+ private readonly roots;
103
+ private readonly extensions;
104
+ private readonly onError?;
105
+ constructor(options: DirectoryScannerOptions);
106
+ scan(): Promise<ToolSpec[]>;
107
+ private scanRoot;
108
+ private scanRecursive;
109
+ private loadToolDir;
110
+ private inferManifest;
111
+ private fileExists;
112
+ private hasEntryPoint;
113
+ private loadByKind;
114
+ private toToolSpec;
115
+ private buildBaseSpec;
116
+ }
117
+ //# sourceMappingURL=discoveryFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discoveryFactory.d.ts","sourceRoot":"","sources":["../../src/tools/discoveryFactory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Function tool type implementation: @tool TS functions.
3
+ * Scan (scanner), schema derivation (schemaFromTs), types (FunctionToolSpec, SideEffect).
4
+ * scanPackageForTools/registerPackageTools are in tools/discoveryFactory (aggregate all types).
5
+ */
6
+ export { scanForTools, scan } from "./scanner.js";
7
+ export type { ScanResult } from "./scanner.js";
8
+ export { buildInputSchemaFromParams, buildOutputSchemaFromReturnType } from "./schemaFromTs.js";
9
+ export type { FunctionToolSpec, SideEffect } from "./types.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/function/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,0BAA0B,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AAChG,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Scan TypeScript source files for exported functions with @tool JSDoc.
3
+ * Extracts description, @effect, and builds inputSchema from param types.
4
+ * Exposes both scanForTools (raw) and scan (unified DiscoverToolsResult).
5
+ */
6
+ import type { FunctionToolSpec } from "./types.js";
7
+ import type { DiscoverToolsOptions, DiscoverToolsResult } from "../discoveryFactory.js";
8
+ export interface ScanResult {
9
+ specs: FunctionToolSpec[];
10
+ errors: Array<{
11
+ file: string;
12
+ message: string;
13
+ }>;
14
+ warnings: Array<{
15
+ file: string;
16
+ message: string;
17
+ }>;
18
+ }
19
+ /**
20
+ * Scan a project folder for exported functions annotated with @tool.
21
+ */
22
+ export declare function scanForTools(options: {
23
+ projectPath: string;
24
+ include?: string[];
25
+ tsconfigPath?: string;
26
+ }): ScanResult;
27
+ /** Unified scan: (path, options) → DiscoverToolsResult. */
28
+ export declare function scan(projectPath: string, options?: DiscoverToolsOptions): Promise<DiscoverToolsResult>;
29
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/tools/function/scanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,YAAY,CAAC;AAE/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAMxF,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,UAAU,CA+Bb;AAoRD,2DAA2D;AAC3D,wBAAgB,IAAI,CAClB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAa9B"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Build JSON Schema from TypeScript parameter types using the compiler API.
3
+ * MVP: primitives, optional, array, object. Complex types fallback to {} with warn.
4
+ */
5
+ import * as ts from "typescript";
6
+ /**
7
+ * Build output JSON Schema from function return type (unwrap Promise if present).
8
+ * Used by scan when auto-deriving schema.
9
+ */
10
+ export declare function buildOutputSchemaFromReturnType(node: ts.FunctionDeclaration | ts.ArrowFunction | ts.FunctionExpression, typeChecker: ts.TypeChecker, onWarn?: (message: string) => void): object;
11
+ /** Build { type: "object", properties, required } from function parameters. */
12
+ export declare function buildInputSchemaFromParams(node: ts.FunctionDeclaration | ts.ArrowFunction | ts.FunctionExpression, typeChecker: ts.TypeChecker, onWarn?: (message: string) => void): {
13
+ schema: object;
14
+ required: string[];
15
+ };
16
+ //# sourceMappingURL=schemaFromTs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaFromTs.d.ts","sourceRoot":"","sources":["../../../src/tools/function/schemaFromTs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,EAAE,CAAC,mBAAmB,GAAG,EAAE,CAAC,aAAa,GAAG,EAAE,CAAC,kBAAkB,EACvE,WAAW,EAAE,EAAE,CAAC,WAAW,EAC3B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACjC,MAAM,CAkBR;AAED,+EAA+E;AAC/E,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,EAAE,CAAC,mBAAmB,GAAG,EAAE,CAAC,aAAa,GAAG,EAAE,CAAC,kBAAkB,EACvE,WAAW,EAAE,EAAE,CAAC,WAAW,EAC3B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACjC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAwDxC"}
@@ -0,0 +1,20 @@
1
+ /** HITL side-effect classification. */
2
+ export type SideEffect = "none" | "local_write" | "external_write" | "destructive";
3
+ /** Kind for @tool function discovery. */
4
+ export declare const FUNCTION_KIND: "function";
5
+ /** Single tool spec from @tool function. */
6
+ export interface FunctionToolSpec {
7
+ kind: typeof FUNCTION_KIND;
8
+ name: string;
9
+ description: string;
10
+ inputSchema: object;
11
+ outputSchema?: object;
12
+ _meta?: {
13
+ hitl?: {
14
+ sideEffect?: SideEffect;
15
+ };
16
+ };
17
+ sourcePath: string;
18
+ exportName: string;
19
+ }
20
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tools/function/types.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,gBAAgB,GAAG,aAAa,CAAC;AAEnF,yCAAyC;AACzC,eAAO,MAAM,aAAa,EAAG,UAAmB,CAAC;AAEjD,4CAA4C;AAC5C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,aAAa,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE;YAAE,UAAU,CAAC,EAAE,UAAU,CAAA;SAAE,CAAA;KAAE,CAAC;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,13 @@
1
+ export { isToolPath, parseToolPath, parsePackageVersion, formatToolPath, isNpmToolDescriptor, parseNpmToolDescriptor, resolveNpmToolDescriptor, resolveToolDescriptor, normalizeToolList, } from "./util/toolDescriptor.js";
2
+ export type { ToolPath, PackageVersion, NpmToolDescriptor, } from "./util/toolDescriptor.js";
3
+ export type { ToolTypeHandler, ToolRegistryLike, ToolTypeScanOptions, ToolTypeScanResult, ToolTypeLoadOptions, ToolTypeLoadResult, } from "../core/types/ToolTypeHandler.js";
4
+ export * as functionType from "./function/index.js";
5
+ export * as skillType from "./skill/index.js";
6
+ export * as n8nType from "./n8n/index.js";
7
+ export * as mcpType from "./mcp/index.js";
8
+ export * as langchainType from "./langchain/index.js";
9
+ export { discoverTools, DIRECTORY_DISCOVERABLE_KINDS, DIRECTORY_KIND_MARKERS, getDirectoryLoader, applyDirectoryLoadedToSpec, LANGCHAIN_DIR_NAME, SKILL_DIR_NAME, DirectoryScanner, } from "./discoveryFactory.js";
10
+ export { scanForAllTools, scanPackageForTools, registerPackageTools, } from "./scanPackage.js";
11
+ export type { DiscoverableKind, DiscoverToolsOptions, DiscoverToolsResult, DirectoryLoader, } from "./discoveryFactory.js";
12
+ export type { ScanAllToolsOptions, ScanAllToolsResult, ScanPackageOptions, ScanPackageResult, } from "./scanPackage.js";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,QAAQ,EACR,cAAc,EACd,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EACL,aAAa,EACb,4BAA4B,EAC5B,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,kBAAkB,EAClB,cAAc,EACd,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ToolManifest, LoadedTool } from "../discoveryFactory.js";
2
+ /**
3
+ * Load a LangChain tool from its directory.
4
+ * Dynamically imports the entry point and validates it has an invoke() method.
5
+ */
6
+ export declare function loadLangChainTool(dirPath: string, manifest: ToolManifest, extensions?: string[]): Promise<LoadedTool>;
7
+ //# sourceMappingURL=LangChainLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LangChainLoader.d.ts","sourceRoot":"","sources":["../../../src/tools/langchain/LangChainLoader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIvE;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,YAAY,EACtB,UAAU,CAAC,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,UAAU,CAAC,CAyCrB"}
@@ -0,0 +1,5 @@
1
+ import type { ToolSpec } from "../../core/types/ToolSpec.js";
2
+ import type { LoadedTool, ToolManifest } from "../discoveryFactory.js";
3
+ /** Apply LangChain-loaded tool to spec (implementation in langchain, not in factory). */
4
+ export declare function applyLoadedToSpec(spec: ToolSpec, loaded: LoadedTool, manifest: ToolManifest, _defaultDirName: string, namespace: string): void;
5
+ //# sourceMappingURL=directoryApply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directoryApply.d.ts","sourceRoot":"","sources":["../../../src/tools/langchain/directoryApply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEvE,yFAAyF;AACzF,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,YAAY,EACtB,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,GAChB,IAAI,CAcN"}
@@ -0,0 +1,13 @@
1
+ import type { ToolSpec } from "../../core/types/ToolSpec.js";
2
+ import type { ToolManifest, LoadedTool } from "../discoveryFactory.js";
3
+ /**
4
+ * List entry files (.js/.mjs) in dirPath for LangChain multi-tool dirs.
5
+ * Implementation in langchain, not in factory.
6
+ */
7
+ export declare function listLangchainEntryFiles(dirPath: string, extensions: string[]): Promise<string[]>;
8
+ /**
9
+ * Load all LangChain tools from a directory (multiple entry files).
10
+ * Implementation in langchain, not in factory.
11
+ */
12
+ export declare function loadLangChainToolsFromDir(dirPath: string, dirName: string, manifest: ToolManifest, strict: boolean, namespace: string, extensions: string[], langchainDirName: string, toSpec: (loaded: LoadedTool, nameHint: string, dirPath: string, namespace: string) => ToolSpec, onError?: (filePath: string, error: Error) => void): Promise<ToolSpec[]>;
13
+ //# sourceMappingURL=directoryLoad.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directoryLoad.d.ts","sourceRoot":"","sources":["../../../src/tools/langchain/directoryLoad.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIvE;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC,CAoBnB;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAAE,EACpB,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,QAAQ,EAC9F,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GACjD,OAAO,CAAC,QAAQ,EAAE,CAAC,CA6BrB"}
@@ -0,0 +1,3 @@
1
+ export { loadLangChainTool } from "./LangChainLoader.js";
2
+ export { scan } from "./scanner.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/langchain/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * LangChain scan: find langchain dirs / tool.json, load via DirectoryScanner, return unified DiscoverToolsResult.
3
+ * Exposes scan(path, options) only (no separate raw scanner).
4
+ */
5
+ import type { DiscoverToolsOptions, DiscoverToolsResult } from "../discoveryFactory.js";
6
+ /** Unified scan: (path, options) → DiscoverToolsResult. */
7
+ export declare function scan(projectPath: string, options?: DiscoverToolsOptions): Promise<DiscoverToolsResult>;
8
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/tools/langchain/scanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAIxF,2DAA2D;AAC3D,wBAAsB,IAAI,CACxB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CA4B9B"}
@@ -0,0 +1,5 @@
1
+ /** Kind for LangChain directory discovery. */
2
+ export declare const LANGCHAIN_KIND: "langchain";
3
+ /** Conventional directory name for LangChain tools. */
4
+ export declare const LANGCHAIN_DIR_NAME: "langchain";
5
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tools/langchain/types.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,eAAO,MAAM,cAAc,EAAG,WAAoB,CAAC;AAEnD,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,EAAG,WAAoB,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * ToolAdapter for MCP tools: holds SDK Client reference, invoke() calls client.callTool.
3
+ * Framework-level support so scripts use registerMCPToolsFromConfig instead of inline MCP logic.
4
+ */
5
+ import type { ToolAdapter, ToolSpec } from "../../core/types/ToolSpec.js";
6
+ import type { ExecContext } from "../../core/types/ToolIntent.js";
7
+ /** SDK Client type (avoid hard typing on @modelcontextprotocol/sdk in this file for optional dep). */
8
+ export interface MCPClientLike {
9
+ callTool(params: {
10
+ name: string;
11
+ arguments: Record<string, unknown>;
12
+ }): Promise<CallToolResult>;
13
+ }
14
+ export interface CallToolResult {
15
+ content?: Array<{
16
+ type: string;
17
+ text?: string;
18
+ }>;
19
+ toolResult?: unknown;
20
+ }
21
+ /**
22
+ * Adapter that invokes MCP tools via the SDK Client (callTool).
23
+ * Register with runtime after connecting and listing tools; specs must have kind MCP_KIND.
24
+ */
25
+ export declare class MCPClientAdapter implements ToolAdapter {
26
+ private readonly client;
27
+ readonly kind: "mcp";
28
+ constructor(client: MCPClientLike);
29
+ invoke(spec: ToolSpec, args: unknown, _ctx: ExecContext): Promise<{
30
+ result: unknown;
31
+ raw?: unknown;
32
+ }>;
33
+ }
34
+ //# sourceMappingURL=MCPClientAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MCPClientAdapter.d.ts","sourceRoot":"","sources":["../../../src/tools/mcp/MCPClientAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAGlE,sGAAsG;AACtG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACjG;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAaD;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAGtC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,QAAQ,CAAC,IAAI,QAAY;gBAEI,MAAM,EAAE,aAAa;IAE5C,MAAM,CACV,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAc/C"}
@@ -0,0 +1,8 @@
1
+ import type { ToolManifest, LoadedTool } from "../discoveryFactory.js";
2
+ /**
3
+ * Load an MCP tool from its directory.
4
+ * Reads mcp.json and validates it has either command or url.
5
+ * Supports both Cursor's mcpServers wrapper format and bare server config.
6
+ */
7
+ export declare function loadMCPTool(dirPath: string, manifest: ToolManifest): Promise<LoadedTool>;
8
+ //# sourceMappingURL=MCPLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MCPLoader.d.ts","sourceRoot":"","sources":["../../../src/tools/mcp/MCPLoader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAmB,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AA+CxF;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC,UAAU,CAAC,CAwCrB"}