agentx-sdk 0.1.0

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 (318) hide show
  1. package/README.md +561 -0
  2. package/dist/agent.d.ts +105 -0
  3. package/dist/agent.d.ts.map +1 -0
  4. package/dist/agent.js +690 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/config/config.d.ts +346 -0
  7. package/dist/config/config.d.ts.map +1 -0
  8. package/dist/config/config.js +93 -0
  9. package/dist/config/config.js.map +1 -0
  10. package/dist/contracts/entities/agent-event.d.ts +97 -0
  11. package/dist/contracts/entities/agent-event.d.ts.map +1 -0
  12. package/dist/contracts/entities/agent-event.js +2 -0
  13. package/dist/contracts/entities/agent-event.js.map +1 -0
  14. package/dist/contracts/entities/agent-skill.d.ts +59 -0
  15. package/dist/contracts/entities/agent-skill.d.ts.map +1 -0
  16. package/dist/contracts/entities/agent-skill.js +2 -0
  17. package/dist/contracts/entities/agent-skill.js.map +1 -0
  18. package/dist/contracts/entities/agent-tool.d.ts +42 -0
  19. package/dist/contracts/entities/agent-tool.d.ts.map +1 -0
  20. package/dist/contracts/entities/agent-tool.js +2 -0
  21. package/dist/contracts/entities/agent-tool.js.map +1 -0
  22. package/dist/contracts/entities/chat-message.d.ts +13 -0
  23. package/dist/contracts/entities/chat-message.d.ts.map +1 -0
  24. package/dist/contracts/entities/chat-message.js +2 -0
  25. package/dist/contracts/entities/chat-message.js.map +1 -0
  26. package/dist/contracts/entities/content-part.d.ts +16 -0
  27. package/dist/contracts/entities/content-part.d.ts.map +1 -0
  28. package/dist/contracts/entities/content-part.js +2 -0
  29. package/dist/contracts/entities/content-part.js.map +1 -0
  30. package/dist/contracts/entities/execution-context.d.ts +9 -0
  31. package/dist/contracts/entities/execution-context.d.ts.map +1 -0
  32. package/dist/contracts/entities/execution-context.js +2 -0
  33. package/dist/contracts/entities/execution-context.js.map +1 -0
  34. package/dist/contracts/entities/index.d.ts +11 -0
  35. package/dist/contracts/entities/index.d.ts.map +1 -0
  36. package/dist/contracts/entities/index.js +2 -0
  37. package/dist/contracts/entities/index.js.map +1 -0
  38. package/dist/contracts/entities/knowledge.d.ts +21 -0
  39. package/dist/contracts/entities/knowledge.d.ts.map +1 -0
  40. package/dist/contracts/entities/knowledge.js +2 -0
  41. package/dist/contracts/entities/knowledge.js.map +1 -0
  42. package/dist/contracts/entities/stores.d.ts +18 -0
  43. package/dist/contracts/entities/stores.d.ts.map +1 -0
  44. package/dist/contracts/entities/stores.js +2 -0
  45. package/dist/contracts/entities/stores.js.map +1 -0
  46. package/dist/contracts/entities/token-usage.d.ts +7 -0
  47. package/dist/contracts/entities/token-usage.d.ts.map +1 -0
  48. package/dist/contracts/entities/token-usage.js +2 -0
  49. package/dist/contracts/entities/token-usage.js.map +1 -0
  50. package/dist/contracts/entities/tool-call.d.ts +16 -0
  51. package/dist/contracts/entities/tool-call.d.ts.map +1 -0
  52. package/dist/contracts/entities/tool-call.js +2 -0
  53. package/dist/contracts/entities/tool-call.js.map +1 -0
  54. package/dist/contracts/enums/index.d.ts +21 -0
  55. package/dist/contracts/enums/index.d.ts.map +1 -0
  56. package/dist/contracts/enums/index.js +8 -0
  57. package/dist/contracts/enums/index.js.map +1 -0
  58. package/dist/contracts/index.d.ts +3 -0
  59. package/dist/contracts/index.d.ts.map +1 -0
  60. package/dist/contracts/index.js +3 -0
  61. package/dist/contracts/index.js.map +1 -0
  62. package/dist/core/compaction/autocompact.d.ts +18 -0
  63. package/dist/core/compaction/autocompact.d.ts.map +1 -0
  64. package/dist/core/compaction/autocompact.js +68 -0
  65. package/dist/core/compaction/autocompact.js.map +1 -0
  66. package/dist/core/compaction/microcompact.d.ts +20 -0
  67. package/dist/core/compaction/microcompact.d.ts.map +1 -0
  68. package/dist/core/compaction/microcompact.js +38 -0
  69. package/dist/core/compaction/microcompact.js.map +1 -0
  70. package/dist/core/compaction/snip-compact.d.ts +22 -0
  71. package/dist/core/compaction/snip-compact.d.ts.map +1 -0
  72. package/dist/core/compaction/snip-compact.js +61 -0
  73. package/dist/core/compaction/snip-compact.js.map +1 -0
  74. package/dist/core/compaction/tool-result-budget.d.ts +24 -0
  75. package/dist/core/compaction/tool-result-budget.d.ts.map +1 -0
  76. package/dist/core/compaction/tool-result-budget.js +67 -0
  77. package/dist/core/compaction/tool-result-budget.js.map +1 -0
  78. package/dist/core/context-analysis.d.ts +24 -0
  79. package/dist/core/context-analysis.d.ts.map +1 -0
  80. package/dist/core/context-analysis.js +37 -0
  81. package/dist/core/context-analysis.js.map +1 -0
  82. package/dist/core/context-builder.d.ts +25 -0
  83. package/dist/core/context-builder.d.ts.map +1 -0
  84. package/dist/core/context-builder.js +108 -0
  85. package/dist/core/context-builder.js.map +1 -0
  86. package/dist/core/conversation-manager.d.ts +19 -0
  87. package/dist/core/conversation-manager.d.ts.map +1 -0
  88. package/dist/core/conversation-manager.js +62 -0
  89. package/dist/core/conversation-manager.js.map +1 -0
  90. package/dist/core/execution-context.d.ts +6 -0
  91. package/dist/core/execution-context.d.ts.map +1 -0
  92. package/dist/core/execution-context.js +14 -0
  93. package/dist/core/execution-context.js.map +1 -0
  94. package/dist/core/loop-deps.d.ts +15 -0
  95. package/dist/core/loop-deps.d.ts.map +1 -0
  96. package/dist/core/loop-deps.js +8 -0
  97. package/dist/core/loop-deps.js.map +1 -0
  98. package/dist/core/loop-types.d.ts +34 -0
  99. package/dist/core/loop-types.d.ts.map +1 -0
  100. package/dist/core/loop-types.js +15 -0
  101. package/dist/core/loop-types.js.map +1 -0
  102. package/dist/core/message-normalize.d.ts +18 -0
  103. package/dist/core/message-normalize.d.ts.map +1 -0
  104. package/dist/core/message-normalize.js +69 -0
  105. package/dist/core/message-normalize.js.map +1 -0
  106. package/dist/core/prompt-builders.d.ts +36 -0
  107. package/dist/core/prompt-builders.d.ts.map +1 -0
  108. package/dist/core/prompt-builders.js +89 -0
  109. package/dist/core/prompt-builders.js.map +1 -0
  110. package/dist/core/prompt-cache.d.ts +25 -0
  111. package/dist/core/prompt-cache.d.ts.map +1 -0
  112. package/dist/core/prompt-cache.js +34 -0
  113. package/dist/core/prompt-cache.js.map +1 -0
  114. package/dist/core/react-loop.d.ts +43 -0
  115. package/dist/core/react-loop.d.ts.map +1 -0
  116. package/dist/core/react-loop.js +403 -0
  117. package/dist/core/react-loop.js.map +1 -0
  118. package/dist/core/stop-hooks.d.ts +18 -0
  119. package/dist/core/stop-hooks.d.ts.map +1 -0
  120. package/dist/core/stop-hooks.js +18 -0
  121. package/dist/core/stop-hooks.js.map +1 -0
  122. package/dist/core/stream-emitter.d.ts +24 -0
  123. package/dist/core/stream-emitter.d.ts.map +1 -0
  124. package/dist/core/stream-emitter.js +65 -0
  125. package/dist/core/stream-emitter.js.map +1 -0
  126. package/dist/core/streaming-tool-executor.d.ts +54 -0
  127. package/dist/core/streaming-tool-executor.d.ts.map +1 -0
  128. package/dist/core/streaming-tool-executor.js +164 -0
  129. package/dist/core/streaming-tool-executor.js.map +1 -0
  130. package/dist/core/turn-end-hooks.d.ts +39 -0
  131. package/dist/core/turn-end-hooks.d.ts.map +1 -0
  132. package/dist/core/turn-end-hooks.js +36 -0
  133. package/dist/core/turn-end-hooks.js.map +1 -0
  134. package/dist/index.d.ts +39 -0
  135. package/dist/index.d.ts.map +1 -0
  136. package/dist/index.js +45 -0
  137. package/dist/index.js.map +1 -0
  138. package/dist/knowledge/chunking.d.ts +9 -0
  139. package/dist/knowledge/chunking.d.ts.map +1 -0
  140. package/dist/knowledge/chunking.js +49 -0
  141. package/dist/knowledge/chunking.js.map +1 -0
  142. package/dist/knowledge/embedding-service.d.ts +16 -0
  143. package/dist/knowledge/embedding-service.d.ts.map +1 -0
  144. package/dist/knowledge/embedding-service.js +43 -0
  145. package/dist/knowledge/embedding-service.js.map +1 -0
  146. package/dist/knowledge/knowledge-manager.d.ts +33 -0
  147. package/dist/knowledge/knowledge-manager.d.ts.map +1 -0
  148. package/dist/knowledge/knowledge-manager.js +62 -0
  149. package/dist/knowledge/knowledge-manager.js.map +1 -0
  150. package/dist/knowledge/sqlite-vector-store.d.ts +16 -0
  151. package/dist/knowledge/sqlite-vector-store.d.ts.map +1 -0
  152. package/dist/knowledge/sqlite-vector-store.js +56 -0
  153. package/dist/knowledge/sqlite-vector-store.js.map +1 -0
  154. package/dist/knowledge/vector-store.d.ts +2 -0
  155. package/dist/knowledge/vector-store.d.ts.map +1 -0
  156. package/dist/knowledge/vector-store.js +2 -0
  157. package/dist/knowledge/vector-store.js.map +1 -0
  158. package/dist/llm/errors.d.ts +15 -0
  159. package/dist/llm/errors.d.ts.map +1 -0
  160. package/dist/llm/errors.js +39 -0
  161. package/dist/llm/errors.js.map +1 -0
  162. package/dist/llm/message-types.d.ts +80 -0
  163. package/dist/llm/message-types.d.ts.map +1 -0
  164. package/dist/llm/message-types.js +2 -0
  165. package/dist/llm/message-types.js.map +1 -0
  166. package/dist/llm/openrouter-client.d.ts +18 -0
  167. package/dist/llm/openrouter-client.d.ts.map +1 -0
  168. package/dist/llm/openrouter-client.js +215 -0
  169. package/dist/llm/openrouter-client.js.map +1 -0
  170. package/dist/llm/reasoning.d.ts +10 -0
  171. package/dist/llm/reasoning.d.ts.map +1 -0
  172. package/dist/llm/reasoning.js +18 -0
  173. package/dist/llm/reasoning.js.map +1 -0
  174. package/dist/memory/file-memory-system.d.ts +98 -0
  175. package/dist/memory/file-memory-system.d.ts.map +1 -0
  176. package/dist/memory/file-memory-system.js +310 -0
  177. package/dist/memory/file-memory-system.js.map +1 -0
  178. package/dist/memory/memory-age.d.ts +22 -0
  179. package/dist/memory/memory-age.d.ts.map +1 -0
  180. package/dist/memory/memory-age.js +44 -0
  181. package/dist/memory/memory-age.js.map +1 -0
  182. package/dist/memory/memory-extractor.d.ts +56 -0
  183. package/dist/memory/memory-extractor.d.ts.map +1 -0
  184. package/dist/memory/memory-extractor.js +91 -0
  185. package/dist/memory/memory-extractor.js.map +1 -0
  186. package/dist/memory/memory-paths.d.ts +45 -0
  187. package/dist/memory/memory-paths.d.ts.map +1 -0
  188. package/dist/memory/memory-paths.js +121 -0
  189. package/dist/memory/memory-paths.js.map +1 -0
  190. package/dist/memory/memory-prompts.d.ts +41 -0
  191. package/dist/memory/memory-prompts.d.ts.map +1 -0
  192. package/dist/memory/memory-prompts.js +279 -0
  193. package/dist/memory/memory-prompts.js.map +1 -0
  194. package/dist/memory/memory-relevance.d.ts +16 -0
  195. package/dist/memory/memory-relevance.d.ts.map +1 -0
  196. package/dist/memory/memory-relevance.js +46 -0
  197. package/dist/memory/memory-relevance.js.map +1 -0
  198. package/dist/memory/memory-scanner.d.ts +22 -0
  199. package/dist/memory/memory-scanner.d.ts.map +1 -0
  200. package/dist/memory/memory-scanner.js +99 -0
  201. package/dist/memory/memory-scanner.js.map +1 -0
  202. package/dist/memory/memory-tools.d.ts +16 -0
  203. package/dist/memory/memory-tools.d.ts.map +1 -0
  204. package/dist/memory/memory-tools.js +196 -0
  205. package/dist/memory/memory-tools.js.map +1 -0
  206. package/dist/memory/memory-types.d.ts +47 -0
  207. package/dist/memory/memory-types.d.ts.map +1 -0
  208. package/dist/memory/memory-types.js +24 -0
  209. package/dist/memory/memory-types.js.map +1 -0
  210. package/dist/skills/skill-args.d.ts +23 -0
  211. package/dist/skills/skill-args.d.ts.map +1 -0
  212. package/dist/skills/skill-args.js +77 -0
  213. package/dist/skills/skill-args.js.map +1 -0
  214. package/dist/skills/skill-glob.d.ts +24 -0
  215. package/dist/skills/skill-glob.d.ts.map +1 -0
  216. package/dist/skills/skill-glob.js +60 -0
  217. package/dist/skills/skill-glob.js.map +1 -0
  218. package/dist/skills/skill-loader.d.ts +49 -0
  219. package/dist/skills/skill-loader.d.ts.map +1 -0
  220. package/dist/skills/skill-loader.js +197 -0
  221. package/dist/skills/skill-loader.js.map +1 -0
  222. package/dist/skills/skill-manager.d.ts +83 -0
  223. package/dist/skills/skill-manager.d.ts.map +1 -0
  224. package/dist/skills/skill-manager.js +338 -0
  225. package/dist/skills/skill-manager.js.map +1 -0
  226. package/dist/storage/sqlite-conversation-store.d.ts +15 -0
  227. package/dist/storage/sqlite-conversation-store.d.ts.map +1 -0
  228. package/dist/storage/sqlite-conversation-store.js +45 -0
  229. package/dist/storage/sqlite-conversation-store.js.map +1 -0
  230. package/dist/storage/sqlite-database.d.ts +14 -0
  231. package/dist/storage/sqlite-database.d.ts.map +1 -0
  232. package/dist/storage/sqlite-database.js +95 -0
  233. package/dist/storage/sqlite-database.js.map +1 -0
  234. package/dist/tools/builtin/ask-user.d.ts +7 -0
  235. package/dist/tools/builtin/ask-user.d.ts.map +1 -0
  236. package/dist/tools/builtin/ask-user.js +23 -0
  237. package/dist/tools/builtin/ask-user.js.map +1 -0
  238. package/dist/tools/builtin/bash.d.ts +3 -0
  239. package/dist/tools/builtin/bash.d.ts.map +1 -0
  240. package/dist/tools/builtin/bash.js +54 -0
  241. package/dist/tools/builtin/bash.js.map +1 -0
  242. package/dist/tools/builtin/file-edit.d.ts +3 -0
  243. package/dist/tools/builtin/file-edit.d.ts.map +1 -0
  244. package/dist/tools/builtin/file-edit.js +50 -0
  245. package/dist/tools/builtin/file-edit.js.map +1 -0
  246. package/dist/tools/builtin/file-read.d.ts +3 -0
  247. package/dist/tools/builtin/file-read.d.ts.map +1 -0
  248. package/dist/tools/builtin/file-read.js +47 -0
  249. package/dist/tools/builtin/file-read.js.map +1 -0
  250. package/dist/tools/builtin/file-write.d.ts +3 -0
  251. package/dist/tools/builtin/file-write.d.ts.map +1 -0
  252. package/dist/tools/builtin/file-write.js +29 -0
  253. package/dist/tools/builtin/file-write.js.map +1 -0
  254. package/dist/tools/builtin/glob.d.ts +3 -0
  255. package/dist/tools/builtin/glob.d.ts.map +1 -0
  256. package/dist/tools/builtin/glob.js +67 -0
  257. package/dist/tools/builtin/glob.js.map +1 -0
  258. package/dist/tools/builtin/grep.d.ts +3 -0
  259. package/dist/tools/builtin/grep.d.ts.map +1 -0
  260. package/dist/tools/builtin/grep.js +94 -0
  261. package/dist/tools/builtin/grep.js.map +1 -0
  262. package/dist/tools/builtin/index.d.ts +49 -0
  263. package/dist/tools/builtin/index.d.ts.map +1 -0
  264. package/dist/tools/builtin/index.js +65 -0
  265. package/dist/tools/builtin/index.js.map +1 -0
  266. package/dist/tools/builtin/web-fetch.d.ts +3 -0
  267. package/dist/tools/builtin/web-fetch.d.ts.map +1 -0
  268. package/dist/tools/builtin/web-fetch.js +56 -0
  269. package/dist/tools/builtin/web-fetch.js.map +1 -0
  270. package/dist/tools/json-schema-to-zod.d.ts +30 -0
  271. package/dist/tools/json-schema-to-zod.d.ts.map +1 -0
  272. package/dist/tools/json-schema-to-zod.js +123 -0
  273. package/dist/tools/json-schema-to-zod.js.map +1 -0
  274. package/dist/tools/mcp-adapter.d.ts +80 -0
  275. package/dist/tools/mcp-adapter.d.ts.map +1 -0
  276. package/dist/tools/mcp-adapter.js +326 -0
  277. package/dist/tools/mcp-adapter.js.map +1 -0
  278. package/dist/tools/skill-tool.d.ts +41 -0
  279. package/dist/tools/skill-tool.d.ts.map +1 -0
  280. package/dist/tools/skill-tool.js +149 -0
  281. package/dist/tools/skill-tool.js.map +1 -0
  282. package/dist/tools/sql/index.d.ts +4 -0
  283. package/dist/tools/sql/index.d.ts.map +1 -0
  284. package/dist/tools/sql/index.js +2 -0
  285. package/dist/tools/sql/index.js.map +1 -0
  286. package/dist/tools/sql/sql-query-def.d.ts +22 -0
  287. package/dist/tools/sql/sql-query-def.d.ts.map +1 -0
  288. package/dist/tools/sql/sql-query-def.js +2 -0
  289. package/dist/tools/sql/sql-query-def.js.map +1 -0
  290. package/dist/tools/sql/sql-tool-factory.d.ts +28 -0
  291. package/dist/tools/sql/sql-tool-factory.d.ts.map +1 -0
  292. package/dist/tools/sql/sql-tool-factory.js +136 -0
  293. package/dist/tools/sql/sql-tool-factory.js.map +1 -0
  294. package/dist/tools/tool-executor.d.ts +67 -0
  295. package/dist/tools/tool-executor.d.ts.map +1 -0
  296. package/dist/tools/tool-executor.js +232 -0
  297. package/dist/tools/tool-executor.js.map +1 -0
  298. package/dist/utils/cache.d.ts +22 -0
  299. package/dist/utils/cache.d.ts.map +1 -0
  300. package/dist/utils/cache.js +61 -0
  301. package/dist/utils/cache.js.map +1 -0
  302. package/dist/utils/logger.d.ts +15 -0
  303. package/dist/utils/logger.d.ts.map +1 -0
  304. package/dist/utils/logger.js +46 -0
  305. package/dist/utils/logger.js.map +1 -0
  306. package/dist/utils/model-context.d.ts +14 -0
  307. package/dist/utils/model-context.d.ts.map +1 -0
  308. package/dist/utils/model-context.js +52 -0
  309. package/dist/utils/model-context.js.map +1 -0
  310. package/dist/utils/retry.d.ts +13 -0
  311. package/dist/utils/retry.d.ts.map +1 -0
  312. package/dist/utils/retry.js +41 -0
  313. package/dist/utils/retry.js.map +1 -0
  314. package/dist/utils/token-counter.d.ts +6 -0
  315. package/dist/utils/token-counter.d.ts.map +1 -0
  316. package/dist/utils/token-counter.js +19 -0
  317. package/dist/utils/token-counter.js.map +1 -0
  318. package/package.json +43 -0
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Deep JSON Schema → Zod converter.
3
+ *
4
+ * Converts JSON Schema objects (as returned by MCP servers) to Zod schemas
5
+ * for validation in the ToolExecutor pipeline.
6
+ *
7
+ * Supports: primitives, nested objects, arrays, enums, anyOf/oneOf,
8
+ * nullable, descriptions, required fields. Max recursion depth: 10.
9
+ */
10
+ import { z } from 'zod';
11
+ const MAX_DEPTH = 10;
12
+ /**
13
+ * Convert a JSON Schema to a Zod schema.
14
+ * Returns `z.object({}).passthrough()` for undefined/empty input.
15
+ */
16
+ export function jsonSchemaToZod(schema, depth = 0) {
17
+ if (!schema || depth > MAX_DEPTH)
18
+ return z.unknown();
19
+ // Handle anyOf / oneOf → z.union
20
+ if (schema.anyOf && schema.anyOf.length > 0) {
21
+ return buildUnion(schema.anyOf, depth);
22
+ }
23
+ if (schema.oneOf && schema.oneOf.length > 0) {
24
+ return buildUnion(schema.oneOf, depth);
25
+ }
26
+ // Handle enum
27
+ if (schema.enum && schema.enum.length > 0) {
28
+ return buildEnum(schema.enum, schema.nullable);
29
+ }
30
+ const type = schema.type;
31
+ // Object with properties
32
+ if (type === 'object' || (schema.properties && !type)) {
33
+ return buildObject(schema, depth);
34
+ }
35
+ // Array
36
+ if (type === 'array') {
37
+ const items = schema.items
38
+ ? jsonSchemaToZod(schema.items, depth + 1)
39
+ : z.unknown();
40
+ let arr = z.array(items);
41
+ if (schema.nullable)
42
+ arr = arr.nullable();
43
+ if (schema.description)
44
+ arr = arr.describe(schema.description);
45
+ return arr;
46
+ }
47
+ // Primitives
48
+ let field;
49
+ switch (type) {
50
+ case 'string':
51
+ field = z.string();
52
+ break;
53
+ case 'number':
54
+ case 'integer':
55
+ field = z.number();
56
+ break;
57
+ case 'boolean':
58
+ field = z.boolean();
59
+ break;
60
+ case 'null':
61
+ field = z.null();
62
+ break;
63
+ default:
64
+ field = z.unknown();
65
+ break;
66
+ }
67
+ if (schema.nullable)
68
+ field = field.nullable();
69
+ if (schema.description)
70
+ field = field.describe(schema.description);
71
+ return field;
72
+ }
73
+ function buildObject(schema, depth) {
74
+ if (!schema.properties)
75
+ return z.object({}).passthrough();
76
+ const required = new Set(schema.required ?? []);
77
+ const shape = {};
78
+ for (const [key, propSchema] of Object.entries(schema.properties)) {
79
+ let field = jsonSchemaToZod(propSchema, depth + 1);
80
+ if (!required.has(key)) {
81
+ field = field.optional();
82
+ }
83
+ shape[key] = field;
84
+ }
85
+ let obj = z.object(shape).passthrough();
86
+ if (schema.nullable)
87
+ obj = obj.nullable();
88
+ if (schema.description)
89
+ obj = obj.describe(schema.description);
90
+ return obj;
91
+ }
92
+ function buildEnum(values, nullable) {
93
+ // Filter to string values for z.enum (Zod enums only support strings)
94
+ const strings = values.filter((v) => typeof v === 'string');
95
+ if (strings.length >= 2) {
96
+ let e = z.enum(strings);
97
+ if (nullable)
98
+ e = e.nullable();
99
+ return e;
100
+ }
101
+ if (strings.length === 1) {
102
+ let e = z.literal(strings[0]);
103
+ if (nullable)
104
+ e = e.nullable();
105
+ return e;
106
+ }
107
+ // Mixed types — fall back to union of literals
108
+ const literals = values.map(v => z.literal(v));
109
+ if (literals.length >= 2) {
110
+ return z.union(literals);
111
+ }
112
+ return z.unknown();
113
+ }
114
+ function buildUnion(schemas, depth) {
115
+ const members = schemas.map(s => jsonSchemaToZod(s, depth + 1));
116
+ if (members.length >= 2) {
117
+ return z.union(members);
118
+ }
119
+ if (members.length === 1)
120
+ return members[0];
121
+ return z.unknown();
122
+ }
123
+ //# sourceMappingURL=json-schema-to-zod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-to-zod.js","sourceRoot":"","sources":["../../src/tools/json-schema-to-zod.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,SAAS,GAAG,EAAE,CAAC;AAgBrB;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAA0B,EAAE,KAAK,GAAG,CAAC;IACnE,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,SAAS;QAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IAErD,iCAAiC;IACjC,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,cAAc;IACd,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAEzB,yBAAyB;IACzB,IAAI,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,QAAQ;IACR,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;YACxB,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAChB,IAAI,GAAG,GAAiB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,MAAM,CAAC,QAAQ;YAAE,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC1C,IAAI,MAAM,CAAC,WAAW;YAAE,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC/D,OAAO,GAAG,CAAC;IACb,CAAC;IAED,aAAa;IACb,IAAI,KAAmB,CAAC;IACxB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM;QACR,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACZ,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM;QACR,KAAK,SAAS;YACZ,KAAK,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM;QACR,KAAK,MAAM;YACT,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM;QACR;YACE,KAAK,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM;IACV,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ;QAAE,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC9C,IAAI,MAAM,CAAC,WAAW;QAAE,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAEnE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,MAAkB,EAAE,KAAa;IACpD,IAAI,CAAC,MAAM,CAAC,UAAU;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAE1D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,KAAK,GAAiC,EAAE,CAAC;IAE/C,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAClE,IAAI,KAAK,GAAG,eAAe,CAAC,UAAU,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,IAAI,GAAG,GAAiB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACtD,IAAI,MAAM,CAAC,QAAQ;QAAE,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC1C,IAAI,MAAM,CAAC,WAAW;QAAE,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/D,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,SAAS,CAAC,MAAiB,EAAE,QAAkB;IACtD,sEAAsE;IACtE,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;IACzE,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,GAAiB,CAAC,CAAC,IAAI,CAAC,OAAgC,CAAC,CAAC;QAC/D,IAAI,QAAQ;YAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,GAAiB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC;QAC7C,IAAI,QAAQ;YAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,+CAA+C;IAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAgB,CAAC,CAAC,CAAC;IAC9D,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC,KAAK,CAAC,QAAsE,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;AACrB,CAAC;AAED,SAAS,UAAU,CAAC,OAAqB,EAAE,KAAa;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAChE,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,CAAC,KAAK,CAAC,OAA0D,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAE,CAAC;IAC7C,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;AACrB,CAAC"}
@@ -0,0 +1,80 @@
1
+ import type { AgentTool } from '../contracts/entities/agent-tool.js';
2
+ import type { MCPConnectionConfig } from '../config/config.js';
3
+ import type { ToolExecutor } from './tool-executor.js';
4
+ export interface MCPHealthStatus {
5
+ servers: Array<{
6
+ name: string;
7
+ status: 'connected' | 'disconnected' | 'error' | 'reconnecting';
8
+ lastError?: string;
9
+ toolCount: number;
10
+ uptime: number;
11
+ }>;
12
+ }
13
+ /**
14
+ * Bridges MCP servers to AgentTool instances.
15
+ * Uses dynamic import for @modelcontextprotocol/sdk.
16
+ */
17
+ export interface MCPResource {
18
+ uri: string;
19
+ name: string;
20
+ mimeType?: string;
21
+ description?: string;
22
+ serverName: string;
23
+ }
24
+ export interface MCPPromptInfo {
25
+ serverName: string;
26
+ promptName: string;
27
+ description?: string;
28
+ }
29
+ export interface MCPConnectionInfo {
30
+ name: string;
31
+ status: string;
32
+ instructions?: string;
33
+ toolCount: number;
34
+ }
35
+ export declare class MCPAdapter {
36
+ private readonly executor;
37
+ private readonly connections;
38
+ /** MCP prompts discovered from servers */
39
+ private readonly mcpPrompts;
40
+ constructor(executor: ToolExecutor);
41
+ /**
42
+ * Connect to an MCP server and register its tools.
43
+ * For URL-based transports (sse/http), auto-detects the correct transport
44
+ * by trying StreamableHTTP first, then falling back to SSE.
45
+ */
46
+ connect(config: MCPConnectionConfig): Promise<AgentTool[]>;
47
+ /**
48
+ * Disconnect a specific server and unregister its tools.
49
+ */
50
+ disconnect(name: string): Promise<void>;
51
+ /**
52
+ * Disconnect all servers.
53
+ */
54
+ disconnectAll(): Promise<void>;
55
+ /**
56
+ * Get health status of all connected servers.
57
+ */
58
+ getHealth(): MCPHealthStatus;
59
+ isConnected(name: string): boolean;
60
+ /** Get connection info for all servers (for context injection). */
61
+ getConnections(): MCPConnectionInfo[];
62
+ /** Get all discovered MCP prompts. */
63
+ getPrompts(): Map<string, MCPPromptInfo>;
64
+ /** List resources from a connected server. */
65
+ listResources(serverName: string): Promise<MCPResource[]>;
66
+ /** Read a specific resource from a server. */
67
+ readResource(serverName: string, uri: string): Promise<string>;
68
+ /** Fetch and return a prompt from a server (for skill getPrompt). */
69
+ getPrompt(serverName: string, promptName: string, args?: string): Promise<string>;
70
+ private convertTool;
71
+ /**
72
+ * Connect with transport auto-detection for URL-based configs.
73
+ * When transport is 'auto', tries StreamableHTTP first then falls back to SSE.
74
+ * Explicit 'sse' or 'http' use that transport directly.
75
+ */
76
+ private connectWithFallback;
77
+ private healthCheck;
78
+ private attemptReconnect;
79
+ }
80
+ //# sourceMappingURL=mcp-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-adapter.d.ts","sourceRoot":"","sources":["../../src/tools/mcp-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAErE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,OAAO,GAAG,cAAc,CAAC;QAChE,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ;AAwCD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoC;IAChE,0CAA0C;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;gBAEnD,QAAQ,EAAE,YAAY;IAIlC;;;;OAIG;IACG,OAAO,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA6ChE;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB7C;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC;;OAEG;IACH,SAAS,IAAI,eAAe;IAY5B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIlC,mEAAmE;IACnE,cAAc,IAAI,iBAAiB,EAAE;IASrC,sCAAsC;IACtC,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;IAIxC,8CAA8C;IACxC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAe/D,8CAA8C;IACxC,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAcpE,qEAAqE;IAC/D,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6BvF,OAAO,CAAC,WAAW;IAyEnB;;;;OAIG;YACW,mBAAmB;YA+BnB,WAAW;YAiBX,gBAAgB;CA6B/B"}
@@ -0,0 +1,326 @@
1
+ import { jsonSchemaToZod } from './json-schema-to-zod.js';
2
+ export class MCPAdapter {
3
+ executor;
4
+ connections = new Map();
5
+ /** MCP prompts discovered from servers */
6
+ mcpPrompts = new Map();
7
+ constructor(executor) {
8
+ this.executor = executor;
9
+ }
10
+ /**
11
+ * Connect to an MCP server and register its tools.
12
+ * For URL-based transports (sse/http), auto-detects the correct transport
13
+ * by trying StreamableHTTP first, then falling back to SSE.
14
+ */
15
+ async connect(config) {
16
+ if (this.connections.has(config.name)) {
17
+ throw new Error(`MCP server "${config.name}" already connected`);
18
+ }
19
+ const { Client } = await loadSDK();
20
+ const { client, transport } = await this.connectWithFallback(Client, config);
21
+ // List tools from server
22
+ const { tools: mcpTools } = await client.listTools();
23
+ // Convert MCP tools to AgentTools
24
+ const agentTools = mcpTools.map(mcpTool => this.convertTool(config.name, mcpTool, client, config));
25
+ // Register tools in executor
26
+ for (const tool of agentTools) {
27
+ this.executor.register(tool);
28
+ }
29
+ // Track connection
30
+ const connection = {
31
+ name: config.name,
32
+ config,
33
+ client,
34
+ transport,
35
+ toolNames: agentTools.map(t => t.name),
36
+ connectedAt: Date.now(),
37
+ status: 'connected',
38
+ };
39
+ // Health check timer
40
+ if (config.healthCheckInterval && config.healthCheckInterval > 0) {
41
+ connection.healthTimer = setInterval(() => void this.healthCheck(config.name), config.healthCheckInterval);
42
+ }
43
+ this.connections.set(config.name, connection);
44
+ return agentTools;
45
+ }
46
+ /**
47
+ * Disconnect a specific server and unregister its tools.
48
+ */
49
+ async disconnect(name) {
50
+ const conn = this.connections.get(name);
51
+ if (!conn)
52
+ throw new Error(`MCP server "${name}" not found`);
53
+ // Clear health check
54
+ if (conn.healthTimer)
55
+ clearInterval(conn.healthTimer);
56
+ // Unregister tools
57
+ for (const toolName of conn.toolNames) {
58
+ this.executor.unregister(toolName);
59
+ }
60
+ // Close connection
61
+ try {
62
+ await conn.client.close();
63
+ }
64
+ catch {
65
+ // Ignore close errors
66
+ }
67
+ this.connections.delete(name);
68
+ }
69
+ /**
70
+ * Disconnect all servers.
71
+ */
72
+ async disconnectAll() {
73
+ const names = [...this.connections.keys()];
74
+ for (const name of names) {
75
+ await this.disconnect(name);
76
+ }
77
+ }
78
+ /**
79
+ * Get health status of all connected servers.
80
+ */
81
+ getHealth() {
82
+ return {
83
+ servers: [...this.connections.values()].map(conn => ({
84
+ name: conn.name,
85
+ status: conn.status,
86
+ lastError: conn.lastError,
87
+ toolCount: conn.toolNames.length,
88
+ uptime: Date.now() - conn.connectedAt,
89
+ })),
90
+ };
91
+ }
92
+ isConnected(name) {
93
+ return this.connections.get(name)?.status === 'connected';
94
+ }
95
+ /** Get connection info for all servers (for context injection). */
96
+ getConnections() {
97
+ return [...this.connections.values()].map(conn => ({
98
+ name: conn.name,
99
+ status: conn.status,
100
+ instructions: conn.instructions,
101
+ toolCount: conn.toolNames.length,
102
+ }));
103
+ }
104
+ /** Get all discovered MCP prompts. */
105
+ getPrompts() {
106
+ return this.mcpPrompts;
107
+ }
108
+ /** List resources from a connected server. */
109
+ async listResources(serverName) {
110
+ const conn = this.connections.get(serverName);
111
+ if (!conn || conn.status !== 'connected')
112
+ return [];
113
+ try {
114
+ const result = await conn.client.listResources?.();
115
+ if (!result)
116
+ return [];
117
+ return result.resources.map(r => ({ ...r, serverName }));
118
+ }
119
+ catch {
120
+ return [];
121
+ }
122
+ }
123
+ /** Read a specific resource from a server. */
124
+ async readResource(serverName, uri) {
125
+ const conn = this.connections.get(serverName);
126
+ if (!conn || conn.status !== 'connected') {
127
+ throw new Error(`MCP server "${serverName}" not connected`);
128
+ }
129
+ const result = await conn.client.readResource?.({ uri });
130
+ if (!result)
131
+ throw new Error('Server does not support resources');
132
+ return result.contents.map(c => c.text ?? `[Binary: ${c.uri}]`).join('\n');
133
+ }
134
+ /** Fetch and return a prompt from a server (for skill getPrompt). */
135
+ async getPrompt(serverName, promptName, args) {
136
+ const conn = this.connections.get(serverName);
137
+ if (!conn || conn.status !== 'connected') {
138
+ throw new Error(`MCP server "${serverName}" not connected`);
139
+ }
140
+ const parsedArgs = {};
141
+ if (args) {
142
+ // Simple key=value parsing from args string
143
+ for (const part of args.split(/\s+/)) {
144
+ const [k, ...v] = part.split('=');
145
+ if (k && v.length > 0)
146
+ parsedArgs[k] = v.join('=');
147
+ }
148
+ }
149
+ const result = await conn.client.getPrompt?.({ name: promptName, arguments: parsedArgs });
150
+ if (!result)
151
+ throw new Error('Server does not support prompts');
152
+ return result.messages.map(m => {
153
+ const content = typeof m.content === 'string' ? m.content : m.content.text ?? '';
154
+ return content;
155
+ }).join('\n');
156
+ }
157
+ convertTool(serverName, mcpTool, client, config) {
158
+ const namespacedName = `mcp__${serverName}__${mcpTool.name}`;
159
+ const parameters = jsonSchemaToZod(mcpTool.inputSchema);
160
+ const isolateErrors = config.isolateErrors ?? true;
161
+ const timeout = config.timeout ?? 30_000;
162
+ // Map MCP annotations to AgentTool flags
163
+ const annotations = mcpTool.annotations ?? {};
164
+ const isReadOnly = annotations.readOnlyHint ?? false;
165
+ const isDestructive = annotations.destructiveHint ?? false;
166
+ return {
167
+ name: namespacedName,
168
+ description: mcpTool.description?.slice(0, 2048) ?? `MCP tool: ${mcpTool.name}`,
169
+ parameters,
170
+ isReadOnly,
171
+ isDestructive,
172
+ isConcurrencySafe: isReadOnly, // read-only tools are safe for parallel execution
173
+ execute: async (args, signal) => {
174
+ try {
175
+ const controller = new AbortController();
176
+ const timer = setTimeout(() => controller.abort(), timeout);
177
+ signal.addEventListener('abort', () => controller.abort(), { once: true });
178
+ try {
179
+ const timeoutPromise = new Promise((_, reject) => {
180
+ controller.signal.addEventListener('abort', () => reject(new Error(`MCP tool "${mcpTool.name}" timed out after ${timeout}ms`)), { once: true });
181
+ });
182
+ const result = await Promise.race([
183
+ client.callTool({ name: mcpTool.name, arguments: args }, undefined, { signal: controller.signal }),
184
+ timeoutPromise,
185
+ ]);
186
+ // Handle mixed content types (text, image, resource)
187
+ const parts = result.content.map((c) => {
188
+ if (c.type === 'text' && c.text)
189
+ return c.text;
190
+ if (c.type === 'image') {
191
+ const mime = c.mimeType ?? 'unknown';
192
+ const dataLen = typeof c.data === 'string' ? c.data.length : 0;
193
+ const sizeKB = Math.round(dataLen * 0.75 / 1024);
194
+ return `[Image: ${mime}, ~${sizeKB}KB]`;
195
+ }
196
+ if (c.type === 'resource')
197
+ return c.text ?? `[Resource: ${c.uri}]`;
198
+ return `[${c.type}]`;
199
+ });
200
+ const textContent = parts.join('\n');
201
+ if (result.isError) {
202
+ return { content: textContent || 'MCP tool returned an error', isError: true };
203
+ }
204
+ return textContent || 'Tool completed with no text output';
205
+ }
206
+ finally {
207
+ clearTimeout(timer);
208
+ }
209
+ }
210
+ catch (error) {
211
+ if (isolateErrors) {
212
+ return {
213
+ content: `MCP tool error: ${error instanceof Error ? error.message : String(error)}`,
214
+ isError: true,
215
+ };
216
+ }
217
+ throw error;
218
+ }
219
+ },
220
+ };
221
+ }
222
+ /**
223
+ * Connect with transport auto-detection for URL-based configs.
224
+ * When transport is 'auto', tries StreamableHTTP first then falls back to SSE.
225
+ * Explicit 'sse' or 'http' use that transport directly.
226
+ */
227
+ async connectWithFallback(Client, config) {
228
+ // Explicit transport — use directly, no fallback
229
+ if (config.transport !== 'auto') {
230
+ const client = new Client({ name: `agentx-${config.name}`, version: '0.1.0' });
231
+ const transport = await createTransport(config);
232
+ await client.connect(transport);
233
+ return { client, transport };
234
+ }
235
+ // Auto-detect: try StreamableHTTP first, fall back to SSE
236
+ const requestInit = config.headers ? { headers: config.headers } : undefined;
237
+ try {
238
+ const client = new Client({ name: `agentx-${config.name}`, version: '0.1.0' });
239
+ const { StreamableHTTPClientTransport } = await import('@modelcontextprotocol/sdk/client/streamableHttp.js');
240
+ const transport = new StreamableHTTPClientTransport(new URL(config.url), { requestInit });
241
+ await client.connect(transport);
242
+ return { client, transport };
243
+ }
244
+ catch {
245
+ // StreamableHTTP failed — try SSE
246
+ const client = new Client({ name: `agentx-${config.name}`, version: '0.1.0' });
247
+ const { SSEClientTransport } = await import('@modelcontextprotocol/sdk/client/sse.js');
248
+ const transport = new SSEClientTransport(new URL(config.url), { requestInit });
249
+ await client.connect(transport);
250
+ return { client, transport };
251
+ }
252
+ }
253
+ async healthCheck(name) {
254
+ const conn = this.connections.get(name);
255
+ if (!conn)
256
+ return;
257
+ try {
258
+ await conn.client.listTools();
259
+ conn.status = 'connected';
260
+ conn.lastError = undefined;
261
+ }
262
+ catch (error) {
263
+ conn.status = 'error';
264
+ conn.lastError = error instanceof Error ? error.message : String(error);
265
+ // Attempt reconnection
266
+ void this.attemptReconnect(name);
267
+ }
268
+ }
269
+ async attemptReconnect(name) {
270
+ const conn = this.connections.get(name);
271
+ if (!conn || conn.status === 'reconnecting')
272
+ return;
273
+ conn.status = 'reconnecting';
274
+ const maxRetries = conn.config.maxRetries ?? 3;
275
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
276
+ try {
277
+ const delay = Math.min(1000 * 2 ** attempt, 30_000);
278
+ await new Promise(r => setTimeout(r, delay));
279
+ const transport = await createTransport(conn.config);
280
+ await conn.client.connect(transport);
281
+ conn.transport = transport;
282
+ conn.status = 'connected';
283
+ conn.lastError = undefined;
284
+ return;
285
+ }
286
+ catch (error) {
287
+ conn.lastError = error instanceof Error ? error.message : String(error);
288
+ }
289
+ }
290
+ // Failed all retries — remove tools
291
+ conn.status = 'disconnected';
292
+ for (const toolName of conn.toolNames) {
293
+ this.executor.unregister(toolName);
294
+ }
295
+ }
296
+ }
297
+ // --- SDK Loading ---
298
+ async function loadSDK() {
299
+ try {
300
+ const mod = await import('@modelcontextprotocol/sdk/client/index.js');
301
+ // Cast needed because MCP SDK types are broader than our minimal MCPClient interface
302
+ return { Client: mod.Client };
303
+ }
304
+ catch {
305
+ throw new Error('Install @modelcontextprotocol/sdk to use MCP connections: npm install @modelcontextprotocol/sdk');
306
+ }
307
+ }
308
+ async function createTransport(config) {
309
+ const requestInit = config.headers
310
+ ? { headers: config.headers }
311
+ : undefined;
312
+ if (config.transport === 'stdio') {
313
+ const { StdioClientTransport } = await import('@modelcontextprotocol/sdk/client/stdio.js');
314
+ return new StdioClientTransport({ command: config.command, args: config.args ?? [] });
315
+ }
316
+ if (config.transport === 'sse') {
317
+ const { SSEClientTransport } = await import('@modelcontextprotocol/sdk/client/sse.js');
318
+ return new SSEClientTransport(new URL(config.url), { requestInit });
319
+ }
320
+ if (config.transport === 'http') {
321
+ const { StreamableHTTPClientTransport } = await import('@modelcontextprotocol/sdk/client/streamableHttp.js');
322
+ return new StreamableHTTPClientTransport(new URL(config.url), { requestInit });
323
+ }
324
+ throw new Error(`Unsupported MCP transport: ${config.transport}`);
325
+ }
326
+ //# sourceMappingURL=mcp-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-adapter.js","sourceRoot":"","sources":["../../src/tools/mcp-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * SkillTool — allows the LLM to invoke skills as tool calls mid-loop.
3
+ *
4
+ * Ported from old_src/tools/SkillTool/SkillTool.ts with adaptations for SDK context.
5
+ *
6
+ * Key behaviors from old_src:
7
+ * - Skill lookup by exact name, alias, and triggerPrefix
8
+ * - Validates modelInvocable flag (disableModelInvocation equivalent)
9
+ * - Dynamic prompt resolution via resolveInstructions()
10
+ * - Registers skill-scoped tools in ToolExecutor when skill activates
11
+ * - Returns resolved prompt as tagged block for the model
12
+ * - Tracks invocation for session (survives compaction via invoked set)
13
+ *
14
+ * Differences from old_src:
15
+ * - No permission system (SDK has no interactive UI to ask user)
16
+ * - No fork mode (SDK uses inline execution only)
17
+ * - No contextModifier (SDK doesn't support mid-loop model/effort override)
18
+ * - No remote skill loading (CLI-specific feature)
19
+ */
20
+ import type { AgentTool } from '../contracts/entities/agent-tool.js';
21
+ import type { ToolExecutor } from './tool-executor.js';
22
+ import type { SkillManager } from '../skills/skill-manager.js';
23
+ export declare const SKILL_TOOL_NAME = "Skill";
24
+ export interface SkillToolContext {
25
+ threadId: string;
26
+ traceId: string;
27
+ }
28
+ /**
29
+ * Build the system prompt section that teaches the model how to use the Skill tool.
30
+ * Ported from old_src/tools/SkillTool/prompt.ts getPrompt().
31
+ */
32
+ export declare function buildSkillToolPrompt(listing: string): string;
33
+ /**
34
+ * Create the Skill tool that the model can invoke during the react loop.
35
+ *
36
+ * @param skillManager — manages skill registry and resolution
37
+ * @param toolExecutor — used to register skill-scoped tools mid-loop
38
+ * @param getContext — returns current execution context (threadId, traceId)
39
+ */
40
+ export declare function createSkillTool(skillManager: SkillManager, toolExecutor: ToolExecutor, getContext: () => SkillToolContext): AgentTool;
41
+ //# sourceMappingURL=skill-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-tool.d.ts","sourceRoot":"","sources":["../../src/tools/skill-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAErE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,eAAO,MAAM,eAAe,UAAU,CAAC;AAOvC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAmB5D;AA6BD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,MAAM,gBAAgB,GACjC,SAAS,CAkFX"}