@amodalai/core 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 (463) hide show
  1. package/LICENSE +21 -0
  2. package/dist/.last_build +0 -0
  3. package/dist/src/amodal-config.d.ts +194 -0
  4. package/dist/src/amodal-config.js +326 -0
  5. package/dist/src/amodal-config.js.map +1 -0
  6. package/dist/src/audit/audit-logger.d.ts +52 -0
  7. package/dist/src/audit/audit-logger.js +137 -0
  8. package/dist/src/audit/audit-logger.js.map +1 -0
  9. package/dist/src/audit/audit-outputs.d.ts +34 -0
  10. package/dist/src/audit/audit-outputs.js +73 -0
  11. package/dist/src/audit/audit-outputs.js.map +1 -0
  12. package/dist/src/audit/audit-redact.d.ts +14 -0
  13. package/dist/src/audit/audit-redact.js +55 -0
  14. package/dist/src/audit/audit-redact.js.map +1 -0
  15. package/dist/src/audit/audit-types.d.ts +122 -0
  16. package/dist/src/audit/audit-types.js +64 -0
  17. package/dist/src/audit/audit-types.js.map +1 -0
  18. package/dist/src/audit/index.d.ts +10 -0
  19. package/dist/src/audit/index.js +10 -0
  20. package/dist/src/audit/index.js.map +1 -0
  21. package/dist/src/eval/eval-cost.d.ts +33 -0
  22. package/dist/src/eval/eval-cost.js +73 -0
  23. package/dist/src/eval/eval-cost.js.map +1 -0
  24. package/dist/src/eval/eval-diff.d.ts +11 -0
  25. package/dist/src/eval/eval-diff.js +97 -0
  26. package/dist/src/eval/eval-diff.js.map +1 -0
  27. package/dist/src/eval/eval-formatter.d.ts +23 -0
  28. package/dist/src/eval/eval-formatter.js +221 -0
  29. package/dist/src/eval/eval-formatter.js.map +1 -0
  30. package/dist/src/eval/eval-judge.d.ts +26 -0
  31. package/dist/src/eval/eval-judge.js +76 -0
  32. package/dist/src/eval/eval-judge.js.map +1 -0
  33. package/dist/src/eval/eval-run-builder.d.ts +25 -0
  34. package/dist/src/eval/eval-run-builder.js +78 -0
  35. package/dist/src/eval/eval-run-builder.js.map +1 -0
  36. package/dist/src/eval/eval-runner.d.ts +36 -0
  37. package/dist/src/eval/eval-runner.js +92 -0
  38. package/dist/src/eval/eval-runner.js.map +1 -0
  39. package/dist/src/eval/eval-session-provider.d.ts +40 -0
  40. package/dist/src/eval/eval-session-provider.js +46 -0
  41. package/dist/src/eval/eval-session-provider.js.map +1 -0
  42. package/dist/src/eval/eval-types.d.ts +146 -0
  43. package/dist/src/eval/eval-types.js +7 -0
  44. package/dist/src/eval/eval-types.js.map +1 -0
  45. package/dist/src/eval/experiment-runner.d.ts +16 -0
  46. package/dist/src/eval/experiment-runner.js +73 -0
  47. package/dist/src/eval/experiment-runner.js.map +1 -0
  48. package/dist/src/eval/experiment-types.d.ts +56 -0
  49. package/dist/src/eval/experiment-types.js +7 -0
  50. package/dist/src/eval/experiment-types.js.map +1 -0
  51. package/dist/src/eval/index.d.ts +22 -0
  52. package/dist/src/eval/index.js +18 -0
  53. package/dist/src/eval/index.js.map +1 -0
  54. package/dist/src/eval/multi-model-runner.d.ts +42 -0
  55. package/dist/src/eval/multi-model-runner.js +70 -0
  56. package/dist/src/eval/multi-model-runner.js.map +1 -0
  57. package/dist/src/eval/platform-eval-client.d.ts +105 -0
  58. package/dist/src/eval/platform-eval-client.js +155 -0
  59. package/dist/src/eval/platform-eval-client.js.map +1 -0
  60. package/dist/src/index.d.ts +41 -0
  61. package/dist/src/index.js +68 -0
  62. package/dist/src/index.js.map +1 -0
  63. package/dist/src/knowledge/index.d.ts +11 -0
  64. package/dist/src/knowledge/index.js +12 -0
  65. package/dist/src/knowledge/index.js.map +1 -0
  66. package/dist/src/knowledge/kb-formatter.d.ts +15 -0
  67. package/dist/src/knowledge/kb-formatter.js +78 -0
  68. package/dist/src/knowledge/kb-formatter.js.map +1 -0
  69. package/dist/src/knowledge/kb-index.d.ts +27 -0
  70. package/dist/src/knowledge/kb-index.js +66 -0
  71. package/dist/src/knowledge/kb-index.js.map +1 -0
  72. package/dist/src/knowledge/kb-types.d.ts +54 -0
  73. package/dist/src/knowledge/kb-types.js +7 -0
  74. package/dist/src/knowledge/kb-types.js.map +1 -0
  75. package/dist/src/knowledge/knowledge-store.d.ts +56 -0
  76. package/dist/src/knowledge/knowledge-store.js +141 -0
  77. package/dist/src/knowledge/knowledge-store.js.map +1 -0
  78. package/dist/src/knowledge/load-knowledge.d.ts +30 -0
  79. package/dist/src/knowledge/load-knowledge.js +161 -0
  80. package/dist/src/knowledge/load-knowledge.js.map +1 -0
  81. package/dist/src/knowledge/propose-kb-update.d.ts +32 -0
  82. package/dist/src/knowledge/propose-kb-update.js +148 -0
  83. package/dist/src/knowledge/propose-kb-update.js.map +1 -0
  84. package/dist/src/knowledge/propose-knowledge.d.ts +34 -0
  85. package/dist/src/knowledge/propose-knowledge.js +163 -0
  86. package/dist/src/knowledge/propose-knowledge.js.map +1 -0
  87. package/dist/src/mcp/index.d.ts +7 -0
  88. package/dist/src/mcp/index.js +7 -0
  89. package/dist/src/mcp/index.js.map +1 -0
  90. package/dist/src/mcp/mcp-manager.d.ts +96 -0
  91. package/dist/src/mcp/mcp-manager.js +192 -0
  92. package/dist/src/mcp/mcp-manager.js.map +1 -0
  93. package/dist/src/packages/config-deps.d.ts +20 -0
  94. package/dist/src/packages/config-deps.js +77 -0
  95. package/dist/src/packages/config-deps.js.map +1 -0
  96. package/dist/src/packages/env-file.d.ts +28 -0
  97. package/dist/src/packages/env-file.js +143 -0
  98. package/dist/src/packages/env-file.js.map +1 -0
  99. package/dist/src/packages/frontmatter.d.ts +28 -0
  100. package/dist/src/packages/frontmatter.js +77 -0
  101. package/dist/src/packages/frontmatter.js.map +1 -0
  102. package/dist/src/packages/index.d.ts +16 -0
  103. package/dist/src/packages/index.js +17 -0
  104. package/dist/src/packages/index.js.map +1 -0
  105. package/dist/src/packages/lock-file.d.ts +35 -0
  106. package/dist/src/packages/lock-file.js +117 -0
  107. package/dist/src/packages/lock-file.js.map +1 -0
  108. package/dist/src/packages/manifest-reader.d.ts +19 -0
  109. package/dist/src/packages/manifest-reader.js +91 -0
  110. package/dist/src/packages/manifest-reader.js.map +1 -0
  111. package/dist/src/packages/merge-engine.d.ts +63 -0
  112. package/dist/src/packages/merge-engine.js +357 -0
  113. package/dist/src/packages/merge-engine.js.map +1 -0
  114. package/dist/src/packages/npm-context.d.ts +56 -0
  115. package/dist/src/packages/npm-context.js +235 -0
  116. package/dist/src/packages/npm-context.js.map +1 -0
  117. package/dist/src/packages/npm-registry.d.ts +35 -0
  118. package/dist/src/packages/npm-registry.js +107 -0
  119. package/dist/src/packages/npm-registry.js.map +1 -0
  120. package/dist/src/packages/package-error.d.ts +16 -0
  121. package/dist/src/packages/package-error.js +17 -0
  122. package/dist/src/packages/package-error.js.map +1 -0
  123. package/dist/src/packages/package-types.d.ts +477 -0
  124. package/dist/src/packages/package-types.js +156 -0
  125. package/dist/src/packages/package-types.js.map +1 -0
  126. package/dist/src/packages/resolver.d.ts +41 -0
  127. package/dist/src/packages/resolver.js +353 -0
  128. package/dist/src/packages/resolver.js.map +1 -0
  129. package/dist/src/platform/config-builder.d.ts +24 -0
  130. package/dist/src/platform/config-builder.js +70 -0
  131. package/dist/src/platform/config-builder.js.map +1 -0
  132. package/dist/src/platform/index.d.ts +8 -0
  133. package/dist/src/platform/index.js +9 -0
  134. package/dist/src/platform/index.js.map +1 -0
  135. package/dist/src/platform/platform-client.d.ts +160 -0
  136. package/dist/src/platform/platform-client.js +486 -0
  137. package/dist/src/platform/platform-client.js.map +1 -0
  138. package/dist/src/platform/platform-types.d.ts +81 -0
  139. package/dist/src/platform/platform-types.js +18 -0
  140. package/dist/src/platform/platform-types.js.map +1 -0
  141. package/dist/src/providers/content-generator/google-to-llm.d.ts +87 -0
  142. package/dist/src/providers/content-generator/google-to-llm.js +226 -0
  143. package/dist/src/providers/content-generator/google-to-llm.js.map +1 -0
  144. package/dist/src/providers/content-generator/index.d.ts +10 -0
  145. package/dist/src/providers/content-generator/index.js +9 -0
  146. package/dist/src/providers/content-generator/index.js.map +1 -0
  147. package/dist/src/providers/content-generator/llm-to-google.d.ts +59 -0
  148. package/dist/src/providers/content-generator/llm-to-google.js +178 -0
  149. package/dist/src/providers/content-generator/llm-to-google.js.map +1 -0
  150. package/dist/src/providers/content-generator/multi-provider-content-generator.d.ts +61 -0
  151. package/dist/src/providers/content-generator/multi-provider-content-generator.js +144 -0
  152. package/dist/src/providers/content-generator/multi-provider-content-generator.js.map +1 -0
  153. package/dist/src/providers/runtime/anthropic-provider.d.ts +18 -0
  154. package/dist/src/providers/runtime/anthropic-provider.js +253 -0
  155. package/dist/src/providers/runtime/anthropic-provider.js.map +1 -0
  156. package/dist/src/providers/runtime/azure-provider.d.ts +25 -0
  157. package/dist/src/providers/runtime/azure-provider.js +206 -0
  158. package/dist/src/providers/runtime/azure-provider.js.map +1 -0
  159. package/dist/src/providers/runtime/bedrock-provider.d.ts +22 -0
  160. package/dist/src/providers/runtime/bedrock-provider.js +276 -0
  161. package/dist/src/providers/runtime/bedrock-provider.js.map +1 -0
  162. package/dist/src/providers/runtime/failover-provider.d.ts +30 -0
  163. package/dist/src/providers/runtime/failover-provider.js +124 -0
  164. package/dist/src/providers/runtime/failover-provider.js.map +1 -0
  165. package/dist/src/providers/runtime/google-provider.d.ts +17 -0
  166. package/dist/src/providers/runtime/google-provider.js +239 -0
  167. package/dist/src/providers/runtime/google-provider.js.map +1 -0
  168. package/dist/src/providers/runtime/index.d.ts +16 -0
  169. package/dist/src/providers/runtime/index.js +16 -0
  170. package/dist/src/providers/runtime/index.js.map +1 -0
  171. package/dist/src/providers/runtime/openai-provider.d.ts +21 -0
  172. package/dist/src/providers/runtime/openai-provider.js +266 -0
  173. package/dist/src/providers/runtime/openai-provider.js.map +1 -0
  174. package/dist/src/providers/runtime/provider-errors.d.ts +39 -0
  175. package/dist/src/providers/runtime/provider-errors.js +50 -0
  176. package/dist/src/providers/runtime/provider-errors.js.map +1 -0
  177. package/dist/src/providers/runtime/provider-factory.d.ts +19 -0
  178. package/dist/src/providers/runtime/provider-factory.js +45 -0
  179. package/dist/src/providers/runtime/provider-factory.js.map +1 -0
  180. package/dist/src/providers/runtime/runtime-provider-types.d.ts +63 -0
  181. package/dist/src/providers/runtime/runtime-provider-types.js +7 -0
  182. package/dist/src/providers/runtime/runtime-provider-types.js.map +1 -0
  183. package/dist/src/providers/runtime/streaming-types.d.ts +40 -0
  184. package/dist/src/providers/runtime/streaming-types.js +7 -0
  185. package/dist/src/providers/runtime/streaming-types.js.map +1 -0
  186. package/dist/src/repo/config-schema.d.ts +238 -0
  187. package/dist/src/repo/config-schema.js +155 -0
  188. package/dist/src/repo/config-schema.js.map +1 -0
  189. package/dist/src/repo/connection-schemas.d.ts +449 -0
  190. package/dist/src/repo/connection-schemas.js +109 -0
  191. package/dist/src/repo/connection-schemas.js.map +1 -0
  192. package/dist/src/repo/connection-types.d.ts +29 -0
  193. package/dist/src/repo/connection-types.js +7 -0
  194. package/dist/src/repo/connection-types.js.map +1 -0
  195. package/dist/src/repo/drift-detector.d.ts +26 -0
  196. package/dist/src/repo/drift-detector.js +66 -0
  197. package/dist/src/repo/drift-detector.js.map +1 -0
  198. package/dist/src/repo/graphql-drift-detector.d.ts +27 -0
  199. package/dist/src/repo/graphql-drift-detector.js +66 -0
  200. package/dist/src/repo/graphql-drift-detector.js.map +1 -0
  201. package/dist/src/repo/graphql-parser.d.ts +30 -0
  202. package/dist/src/repo/graphql-parser.js +125 -0
  203. package/dist/src/repo/graphql-parser.js.map +1 -0
  204. package/dist/src/repo/graphql-surface-parser.d.ts +20 -0
  205. package/dist/src/repo/graphql-surface-parser.js +74 -0
  206. package/dist/src/repo/graphql-surface-parser.js.map +1 -0
  207. package/dist/src/repo/index.d.ts +30 -0
  208. package/dist/src/repo/index.js +29 -0
  209. package/dist/src/repo/index.js.map +1 -0
  210. package/dist/src/repo/local-reader.d.ts +10 -0
  211. package/dist/src/repo/local-reader.js +299 -0
  212. package/dist/src/repo/local-reader.js.map +1 -0
  213. package/dist/src/repo/openapi-parser.d.ts +35 -0
  214. package/dist/src/repo/openapi-parser.js +93 -0
  215. package/dist/src/repo/openapi-parser.js.map +1 -0
  216. package/dist/src/repo/parsers.d.ts +91 -0
  217. package/dist/src/repo/parsers.js +454 -0
  218. package/dist/src/repo/parsers.js.map +1 -0
  219. package/dist/src/repo/platform-reader.d.ts +10 -0
  220. package/dist/src/repo/platform-reader.js +206 -0
  221. package/dist/src/repo/platform-reader.js.map +1 -0
  222. package/dist/src/repo/repo-loader.d.ts +14 -0
  223. package/dist/src/repo/repo-loader.js +25 -0
  224. package/dist/src/repo/repo-loader.js.map +1 -0
  225. package/dist/src/repo/repo-types.d.ts +159 -0
  226. package/dist/src/repo/repo-types.js +17 -0
  227. package/dist/src/repo/repo-types.js.map +1 -0
  228. package/dist/src/repo/spec-syncer.d.ts +30 -0
  229. package/dist/src/repo/spec-syncer.js +85 -0
  230. package/dist/src/repo/spec-syncer.js.map +1 -0
  231. package/dist/src/repo/store-loader.d.ts +19 -0
  232. package/dist/src/repo/store-loader.js +94 -0
  233. package/dist/src/repo/store-loader.js.map +1 -0
  234. package/dist/src/repo/store-schemas.d.ts +313 -0
  235. package/dist/src/repo/store-schemas.js +103 -0
  236. package/dist/src/repo/store-schemas.js.map +1 -0
  237. package/dist/src/repo/store-tool-schema.d.ts +29 -0
  238. package/dist/src/repo/store-tool-schema.js +103 -0
  239. package/dist/src/repo/store-tool-schema.js.map +1 -0
  240. package/dist/src/repo/store-types.d.ts +91 -0
  241. package/dist/src/repo/store-types.js +7 -0
  242. package/dist/src/repo/store-types.js.map +1 -0
  243. package/dist/src/repo/surface-parser.d.ts +17 -0
  244. package/dist/src/repo/surface-parser.js +75 -0
  245. package/dist/src/repo/surface-parser.js.map +1 -0
  246. package/dist/src/repo/tool-loader.d.ts +33 -0
  247. package/dist/src/repo/tool-loader.js +240 -0
  248. package/dist/src/repo/tool-loader.js.map +1 -0
  249. package/dist/src/repo/tool-types.d.ts +205 -0
  250. package/dist/src/repo/tool-types.js +61 -0
  251. package/dist/src/repo/tool-types.js.map +1 -0
  252. package/dist/src/roles/index.d.ts +7 -0
  253. package/dist/src/roles/index.js +8 -0
  254. package/dist/src/roles/index.js.map +1 -0
  255. package/dist/src/roles/role-filter.d.ts +33 -0
  256. package/dist/src/roles/role-filter.js +55 -0
  257. package/dist/src/roles/role-filter.js.map +1 -0
  258. package/dist/src/roles/role-types.d.ts +76 -0
  259. package/dist/src/roles/role-types.js +38 -0
  260. package/dist/src/roles/role-types.js.map +1 -0
  261. package/dist/src/runtime/connection-bridge.d.ts +19 -0
  262. package/dist/src/runtime/connection-bridge.js +103 -0
  263. package/dist/src/runtime/connection-bridge.js.map +1 -0
  264. package/dist/src/runtime/context-compiler.d.ts +35 -0
  265. package/dist/src/runtime/context-compiler.js +183 -0
  266. package/dist/src/runtime/context-compiler.js.map +1 -0
  267. package/dist/src/runtime/default-prompt.d.ts +28 -0
  268. package/dist/src/runtime/default-prompt.js +71 -0
  269. package/dist/src/runtime/default-prompt.js.map +1 -0
  270. package/dist/src/runtime/explore-tool.d.ts +96 -0
  271. package/dist/src/runtime/explore-tool.js +111 -0
  272. package/dist/src/runtime/explore-tool.js.map +1 -0
  273. package/dist/src/runtime/index.d.ts +26 -0
  274. package/dist/src/runtime/index.js +19 -0
  275. package/dist/src/runtime/index.js.map +1 -0
  276. package/dist/src/runtime/output-pipeline.d.ts +62 -0
  277. package/dist/src/runtime/output-pipeline.js +69 -0
  278. package/dist/src/runtime/output-pipeline.js.map +1 -0
  279. package/dist/src/runtime/plan-mode.d.ts +39 -0
  280. package/dist/src/runtime/plan-mode.js +81 -0
  281. package/dist/src/runtime/plan-mode.js.map +1 -0
  282. package/dist/src/runtime/preference-client.d.ts +39 -0
  283. package/dist/src/runtime/preference-client.js +70 -0
  284. package/dist/src/runtime/preference-client.js.map +1 -0
  285. package/dist/src/runtime/preference-detector.d.ts +22 -0
  286. package/dist/src/runtime/preference-detector.js +95 -0
  287. package/dist/src/runtime/preference-detector.js.map +1 -0
  288. package/dist/src/runtime/request-integration.d.ts +18 -0
  289. package/dist/src/runtime/request-integration.js +36 -0
  290. package/dist/src/runtime/request-integration.js.map +1 -0
  291. package/dist/src/runtime/runtime-types.d.ts +48 -0
  292. package/dist/src/runtime/runtime-types.js +7 -0
  293. package/dist/src/runtime/runtime-types.js.map +1 -0
  294. package/dist/src/runtime/session-setup.d.ts +53 -0
  295. package/dist/src/runtime/session-setup.js +90 -0
  296. package/dist/src/runtime/session-setup.js.map +1 -0
  297. package/dist/src/runtime/telemetry-client.d.ts +39 -0
  298. package/dist/src/runtime/telemetry-client.js +87 -0
  299. package/dist/src/runtime/telemetry-client.js.map +1 -0
  300. package/dist/src/runtime/telemetry-hooks.d.ts +47 -0
  301. package/dist/src/runtime/telemetry-hooks.js +115 -0
  302. package/dist/src/runtime/telemetry-hooks.js.map +1 -0
  303. package/dist/src/runtime/token-allocator.d.ts +34 -0
  304. package/dist/src/runtime/token-allocator.js +86 -0
  305. package/dist/src/runtime/token-allocator.js.map +1 -0
  306. package/dist/src/runtime/user-context.d.ts +49 -0
  307. package/dist/src/runtime/user-context.js +135 -0
  308. package/dist/src/runtime/user-context.js.map +1 -0
  309. package/dist/src/sdk.d.ts +57 -0
  310. package/dist/src/sdk.js +377 -0
  311. package/dist/src/sdk.js.map +1 -0
  312. package/dist/src/security/action-gate.d.ts +23 -0
  313. package/dist/src/security/action-gate.js +78 -0
  314. package/dist/src/security/action-gate.js.map +1 -0
  315. package/dist/src/security/field-scrubber.d.ts +27 -0
  316. package/dist/src/security/field-scrubber.js +152 -0
  317. package/dist/src/security/field-scrubber.js.map +1 -0
  318. package/dist/src/security/index.d.ts +14 -0
  319. package/dist/src/security/index.js +15 -0
  320. package/dist/src/security/index.js.map +1 -0
  321. package/dist/src/security/leak-detector.d.ts +23 -0
  322. package/dist/src/security/leak-detector.js +51 -0
  323. package/dist/src/security/leak-detector.js.map +1 -0
  324. package/dist/src/security/output-guard.d.ts +33 -0
  325. package/dist/src/security/output-guard.js +118 -0
  326. package/dist/src/security/output-guard.js.map +1 -0
  327. package/dist/src/security/pattern-scanner.d.ts +19 -0
  328. package/dist/src/security/pattern-scanner.js +66 -0
  329. package/dist/src/security/pattern-scanner.js.map +1 -0
  330. package/dist/src/security/scope-checker.d.ts +27 -0
  331. package/dist/src/security/scope-checker.js +52 -0
  332. package/dist/src/security/scope-checker.js.map +1 -0
  333. package/dist/src/security/scrub-tracker.d.ts +21 -0
  334. package/dist/src/security/scrub-tracker.js +39 -0
  335. package/dist/src/security/scrub-tracker.js.map +1 -0
  336. package/dist/src/security/security-types.d.ts +69 -0
  337. package/dist/src/security/security-types.js +17 -0
  338. package/dist/src/security/security-types.js.map +1 -0
  339. package/dist/src/security/threshold-evaluator.d.ts +13 -0
  340. package/dist/src/security/threshold-evaluator.js +44 -0
  341. package/dist/src/security/threshold-evaluator.js.map +1 -0
  342. package/dist/src/snapshot/index.d.ts +8 -0
  343. package/dist/src/snapshot/index.js +9 -0
  344. package/dist/src/snapshot/index.js.map +1 -0
  345. package/dist/src/snapshot/snapshot-builder.d.ts +37 -0
  346. package/dist/src/snapshot/snapshot-builder.js +152 -0
  347. package/dist/src/snapshot/snapshot-builder.js.map +1 -0
  348. package/dist/src/snapshot/snapshot-loader.d.ts +29 -0
  349. package/dist/src/snapshot/snapshot-loader.js +188 -0
  350. package/dist/src/snapshot/snapshot-loader.js.map +1 -0
  351. package/dist/src/snapshot/snapshot-types.d.ts +1940 -0
  352. package/dist/src/snapshot/snapshot-types.js +145 -0
  353. package/dist/src/snapshot/snapshot-types.js.map +1 -0
  354. package/dist/src/stores/index.d.ts +6 -0
  355. package/dist/src/stores/index.js +7 -0
  356. package/dist/src/stores/index.js.map +1 -0
  357. package/dist/src/stores/store-backend.d.ts +135 -0
  358. package/dist/src/stores/store-backend.js +7 -0
  359. package/dist/src/stores/store-backend.js.map +1 -0
  360. package/dist/src/templates/connections.d.ts +14 -0
  361. package/dist/src/templates/connections.js +7 -0
  362. package/dist/src/templates/connections.js.map +1 -0
  363. package/dist/src/templates/index.d.ts +7 -0
  364. package/dist/src/templates/index.js +8 -0
  365. package/dist/src/templates/index.js.map +1 -0
  366. package/dist/src/templates/template-resolver.d.ts +45 -0
  367. package/dist/src/templates/template-resolver.js +121 -0
  368. package/dist/src/templates/template-resolver.js.map +1 -0
  369. package/dist/src/tool-context.d.ts +33 -0
  370. package/dist/src/tool-context.js +7 -0
  371. package/dist/src/tool-context.js.map +1 -0
  372. package/dist/src/tool-registration.d.ts +14 -0
  373. package/dist/src/tool-registration.js +51 -0
  374. package/dist/src/tool-registration.js.map +1 -0
  375. package/dist/src/tools/amodal-tool-errors.d.ts +24 -0
  376. package/dist/src/tools/amodal-tool-errors.js +28 -0
  377. package/dist/src/tools/amodal-tool-errors.js.map +1 -0
  378. package/dist/src/tools/amodal-tool-names.d.ts +14 -0
  379. package/dist/src/tools/amodal-tool-names.js +15 -0
  380. package/dist/src/tools/amodal-tool-names.js.map +1 -0
  381. package/dist/src/tools/chain-tool-registry.d.ts +20 -0
  382. package/dist/src/tools/chain-tool-registry.js +49 -0
  383. package/dist/src/tools/chain-tool-registry.js.map +1 -0
  384. package/dist/src/tools/chain-tool-types.d.ts +190 -0
  385. package/dist/src/tools/chain-tool-types.js +50 -0
  386. package/dist/src/tools/chain-tool-types.js.map +1 -0
  387. package/dist/src/tools/chain-tool.d.ts +34 -0
  388. package/dist/src/tools/chain-tool.js +294 -0
  389. package/dist/src/tools/chain-tool.js.map +1 -0
  390. package/dist/src/tools/custom-tool-registrar.d.ts +8 -0
  391. package/dist/src/tools/custom-tool-registrar.js +10 -0
  392. package/dist/src/tools/custom-tool-registrar.js.map +1 -0
  393. package/dist/src/tools/definitions/amodal-tools.d.ts +9 -0
  394. package/dist/src/tools/definitions/amodal-tools.js +192 -0
  395. package/dist/src/tools/definitions/amodal-tools.js.map +1 -0
  396. package/dist/src/tools/function-tool-registry.d.ts +22 -0
  397. package/dist/src/tools/function-tool-registry.js +45 -0
  398. package/dist/src/tools/function-tool-registry.js.map +1 -0
  399. package/dist/src/tools/function-tool-types.d.ts +76 -0
  400. package/dist/src/tools/function-tool-types.js +27 -0
  401. package/dist/src/tools/function-tool-types.js.map +1 -0
  402. package/dist/src/tools/function-tool.d.ts +34 -0
  403. package/dist/src/tools/function-tool.js +97 -0
  404. package/dist/src/tools/function-tool.js.map +1 -0
  405. package/dist/src/tools/http-tool-registry.d.ts +20 -0
  406. package/dist/src/tools/http-tool-registry.js +34 -0
  407. package/dist/src/tools/http-tool-registry.js.map +1 -0
  408. package/dist/src/tools/http-tool-types.d.ts +92 -0
  409. package/dist/src/tools/http-tool-types.js +44 -0
  410. package/dist/src/tools/http-tool-types.js.map +1 -0
  411. package/dist/src/tools/http-tool.d.ts +32 -0
  412. package/dist/src/tools/http-tool.js +176 -0
  413. package/dist/src/tools/http-tool.js.map +1 -0
  414. package/dist/src/tools/merge-template.d.ts +33 -0
  415. package/dist/src/tools/merge-template.js +65 -0
  416. package/dist/src/tools/merge-template.js.map +1 -0
  417. package/dist/src/tools/request-tool-types.d.ts +46 -0
  418. package/dist/src/tools/request-tool-types.js +20 -0
  419. package/dist/src/tools/request-tool-types.js.map +1 -0
  420. package/dist/src/tools/request-tool.d.ts +29 -0
  421. package/dist/src/tools/request-tool.js +268 -0
  422. package/dist/src/tools/request-tool.js.map +1 -0
  423. package/dist/src/tools/store-query-tool.d.ts +29 -0
  424. package/dist/src/tools/store-query-tool.js +82 -0
  425. package/dist/src/tools/store-query-tool.js.map +1 -0
  426. package/dist/src/tools/store-write-tool.d.ts +26 -0
  427. package/dist/src/tools/store-write-tool.js +84 -0
  428. package/dist/src/tools/store-write-tool.js.map +1 -0
  429. package/dist/src/tools/tool-definition-types.d.ts +21 -0
  430. package/dist/src/tools/tool-definition-types.js +7 -0
  431. package/dist/src/tools/tool-definition-types.js.map +1 -0
  432. package/dist/src/tools/tool-utils.d.ts +29 -0
  433. package/dist/src/tools/tool-utils.js +66 -0
  434. package/dist/src/tools/tool-utils.js.map +1 -0
  435. package/dist/src/versions/bundle-loader.d.ts +37 -0
  436. package/dist/src/versions/bundle-loader.js +99 -0
  437. package/dist/src/versions/bundle-loader.js.map +1 -0
  438. package/dist/src/versions/dependency-manager.d.ts +54 -0
  439. package/dist/src/versions/dependency-manager.js +132 -0
  440. package/dist/src/versions/dependency-manager.js.map +1 -0
  441. package/dist/src/versions/handler-loader.d.ts +27 -0
  442. package/dist/src/versions/handler-loader.js +62 -0
  443. package/dist/src/versions/handler-loader.js.map +1 -0
  444. package/dist/src/versions/index.d.ts +10 -0
  445. package/dist/src/versions/index.js +11 -0
  446. package/dist/src/versions/index.js.map +1 -0
  447. package/dist/src/versions/version-bundle-types.d.ts +1278 -0
  448. package/dist/src/versions/version-bundle-types.js +207 -0
  449. package/dist/src/versions/version-bundle-types.js.map +1 -0
  450. package/dist/src/versions/version-manager.d.ts +89 -0
  451. package/dist/src/versions/version-manager.js +124 -0
  452. package/dist/src/versions/version-manager.js.map +1 -0
  453. package/dist/src/widgets/index.d.ts +8 -0
  454. package/dist/src/widgets/index.js +8 -0
  455. package/dist/src/widgets/index.js.map +1 -0
  456. package/dist/src/widgets/present-tool.d.ts +21 -0
  457. package/dist/src/widgets/present-tool.js +107 -0
  458. package/dist/src/widgets/present-tool.js.map +1 -0
  459. package/dist/src/widgets/widget-types.d.ts +78 -0
  460. package/dist/src/widgets/widget-types.js +28 -0
  461. package/dist/src/widgets/widget-types.js.map +1 -0
  462. package/dist/tsconfig.tsbuildinfo +1 -0
  463. package/package.json +50 -0
@@ -0,0 +1,148 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import { BaseDeclarativeTool, BaseToolInvocation, Kind } from '@google/gemini-cli-core';
7
+ import { PROPOSE_KNOWLEDGE_TOOL_NAME } from '../tools/amodal-tool-names.js';
8
+ import { ToolErrorType } from '@google/gemini-cli-core';
9
+ import { getProposeKnowledgeDefinition } from '../tools/definitions/amodal-tools.js';
10
+ class ProposeKBUpdateInvocation extends BaseToolInvocation {
11
+ config;
12
+ constructor(config, params, messageBus, _toolName, _toolDisplayName) {
13
+ super(params, messageBus, _toolName, _toolDisplayName);
14
+ this.config = config;
15
+ }
16
+ getDescription() {
17
+ return `propose_kb_update [${this.params.scope}]: ${this.params.title}`;
18
+ }
19
+ async getConfirmationDetails(_abortSignal) {
20
+ // Proposals are reviewed by admins, not user-confirmed
21
+ return false;
22
+ }
23
+ async execute(_signal) {
24
+ const platformApiUrl = this.config.getPlatformApiUrl();
25
+ const platformApiKey = this.config.getPlatformApiKey();
26
+ if (!platformApiUrl || !platformApiKey) {
27
+ const errorMessage = 'Platform API credentials not configured. Cannot propose knowledge base updates.';
28
+ return {
29
+ llmContent: `Error: ${errorMessage}`,
30
+ returnDisplay: `Error: ${errorMessage}`,
31
+ error: {
32
+ message: errorMessage,
33
+ type: ToolErrorType.INVALID_TOOL_PARAMS,
34
+ },
35
+ };
36
+ }
37
+ // Resolve scope_id from applicationId/tenantId
38
+ const scopeId = this.params.scope === 'application'
39
+ ? this.config.getApplicationId()
40
+ : this.config.getTenantId();
41
+ if (!scopeId) {
42
+ const errorMessage = this.params.scope === 'application'
43
+ ? 'Application ID not configured. Cannot propose application-level updates.'
44
+ : 'Tenant ID not configured. Cannot propose tenant-level updates.';
45
+ return {
46
+ llmContent: `Error: ${errorMessage}`,
47
+ returnDisplay: `Error: ${errorMessage}`,
48
+ error: {
49
+ message: errorMessage,
50
+ type: ToolErrorType.INVALID_TOOL_PARAMS,
51
+ },
52
+ };
53
+ }
54
+ // Validate update action requires document_id
55
+ if (this.params.action === 'update' && !this.params.document_id) {
56
+ const errorMessage = 'document_id is required for update actions.';
57
+ return {
58
+ llmContent: `Error: ${errorMessage}`,
59
+ returnDisplay: `Error: ${errorMessage}`,
60
+ error: {
61
+ message: errorMessage,
62
+ type: ToolErrorType.INVALID_TOOL_PARAMS,
63
+ },
64
+ };
65
+ }
66
+ // Build request body
67
+ const requestBody = {
68
+ scope_type: this.params.scope,
69
+ scope_id: scopeId,
70
+ session_id: this.config.getSessionId(),
71
+ proposed_title: this.params.title,
72
+ proposed_category: this.params.category,
73
+ proposed_body: this.params.body,
74
+ reasoning: this.params.reasoning,
75
+ };
76
+ if (this.params.document_id) {
77
+ requestBody['document_id'] = this.params.document_id;
78
+ }
79
+ try {
80
+ const response = await fetch(`${platformApiUrl}/api/proposed-updates`, {
81
+ method: 'POST',
82
+ headers: {
83
+ 'Content-Type': 'application/json',
84
+ Authorization: `Bearer ${platformApiKey}`,
85
+ },
86
+ body: JSON.stringify(requestBody),
87
+ signal: _signal,
88
+ });
89
+ if (!response.ok) {
90
+ const errorMessage = `Platform API returned ${String(response.status)}: ${response.statusText}`;
91
+ return {
92
+ llmContent: `Error: ${errorMessage}`,
93
+ returnDisplay: `Error: ${errorMessage}`,
94
+ error: {
95
+ message: errorMessage,
96
+ type: ToolErrorType.EXECUTION_FAILED,
97
+ },
98
+ };
99
+ }
100
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- platform API response shape is trusted
101
+ const result = (await response.json());
102
+ // Log audit event
103
+ const auditLogger = this.config.getAuditLogger();
104
+ if (auditLogger) {
105
+ auditLogger.logKbProposal(this.params.scope, this.params.title, result.id);
106
+ }
107
+ const successMessage = `Knowledge base update proposed successfully.\n` +
108
+ `Proposal ID: ${result.id}\n` +
109
+ `Scope: ${this.params.scope}\n` +
110
+ `Title: ${this.params.title}\n` +
111
+ `Status: pending admin review`;
112
+ return {
113
+ llmContent: successMessage,
114
+ returnDisplay: successMessage,
115
+ };
116
+ }
117
+ catch (err) {
118
+ const message = err instanceof Error ? err.message : String(err);
119
+ const errorMessage = `Failed to submit proposal: ${message}`;
120
+ return {
121
+ llmContent: `Error: ${errorMessage}`,
122
+ returnDisplay: `Error: ${errorMessage}`,
123
+ error: {
124
+ message: errorMessage,
125
+ type: ToolErrorType.EXECUTION_FAILED,
126
+ },
127
+ };
128
+ }
129
+ }
130
+ }
131
+ /**
132
+ * Built-in tool for proposing knowledge base updates during conversations.
133
+ * Always available when platform API credentials are configured.
134
+ * Not subject to role filtering.
135
+ */
136
+ export class ProposeKBUpdateTool extends BaseDeclarativeTool {
137
+ config;
138
+ static Name = PROPOSE_KNOWLEDGE_TOOL_NAME;
139
+ constructor(config, messageBus) {
140
+ const definition = getProposeKnowledgeDefinition();
141
+ super(ProposeKBUpdateTool.Name, 'Propose KB Update', definition.base.description, Kind.Other, definition.base.parametersJsonSchema, messageBus, true, false);
142
+ this.config = config;
143
+ }
144
+ createInvocation(params, messageBus, _toolName, _toolDisplayName) {
145
+ return new ProposeKBUpdateInvocation(this.config, params, messageBus, _toolName, _toolDisplayName ?? 'Propose KB Update');
146
+ }
147
+ }
148
+ //# sourceMappingURL=propose-kb-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propose-kb-update.js","sourceRoot":"","sources":["../../../src/knowledge/propose-kb-update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import type { MessageBus } from '@google/gemini-cli-core';
7
+ import type { ToolResult, ToolInvocation } from '@google/gemini-cli-core';
8
+ import { BaseDeclarativeTool } from '@google/gemini-cli-core';
9
+ import type { ToolContext } from '../tool-context.js';
10
+ /**
11
+ * Parameters for the propose_knowledge tool.
12
+ */
13
+ export interface ProposeKnowledgeParams {
14
+ action: 'create' | 'update';
15
+ scope: 'application' | 'tenant';
16
+ document_id?: string;
17
+ title: string;
18
+ category: 'system_docs' | 'methodology' | 'patterns' | 'false_positives' | 'response_procedures' | 'environment' | 'baselines' | 'team' | 'incident_history' | 'working_memory';
19
+ body: string;
20
+ reasoning: string;
21
+ }
22
+ /**
23
+ * Built-in tool for proposing knowledge base updates during conversations.
24
+ * Always available when platform API credentials are configured.
25
+ * Not subject to role filtering.
26
+ */
27
+ export declare class ProposeKnowledgeTool extends BaseDeclarativeTool<ProposeKnowledgeParams, ToolResult> {
28
+ private config;
29
+ static readonly Name = "propose_knowledge";
30
+ constructor(config: ToolContext, messageBus: MessageBus);
31
+ protected createInvocation(params: ProposeKnowledgeParams, messageBus: MessageBus, _toolName?: string, _toolDisplayName?: string): ToolInvocation<ProposeKnowledgeParams, ToolResult>;
32
+ }
33
+ export { ProposeKnowledgeTool as ProposeKBUpdateTool };
34
+ export type { ProposeKnowledgeParams as ProposeKBUpdateParams };
@@ -0,0 +1,163 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import { BaseDeclarativeTool, BaseToolInvocation, Kind } from '@google/gemini-cli-core';
7
+ import { PROPOSE_KNOWLEDGE_TOOL_NAME } from '../tools/amodal-tool-names.js';
8
+ import { ToolErrorType } from '@google/gemini-cli-core';
9
+ import { getProposeKnowledgeDefinition } from '../tools/definitions/amodal-tools.js';
10
+ class ProposeKnowledgeInvocation extends BaseToolInvocation {
11
+ config;
12
+ constructor(config, params, messageBus, _toolName, _toolDisplayName) {
13
+ super(params, messageBus, _toolName, _toolDisplayName);
14
+ this.config = config;
15
+ }
16
+ getDescription() {
17
+ return `propose_knowledge [${this.params.scope}]: ${this.params.title}`;
18
+ }
19
+ async getConfirmationDetails(_abortSignal) {
20
+ // Proposals are reviewed by admins, not user-confirmed
21
+ return false;
22
+ }
23
+ async execute(_signal) {
24
+ const platformApiUrl = this.config.getPlatformApiUrl();
25
+ const platformApiKey = this.config.getPlatformApiKey();
26
+ if (!platformApiUrl || !platformApiKey) {
27
+ const errorMessage = 'Platform API credentials not configured. Cannot propose knowledge base updates.';
28
+ return {
29
+ llmContent: `Error: ${errorMessage}`,
30
+ returnDisplay: `Error: ${errorMessage}`,
31
+ error: {
32
+ message: errorMessage,
33
+ type: ToolErrorType.INVALID_TOOL_PARAMS,
34
+ },
35
+ };
36
+ }
37
+ // Resolve scope_id from applicationId/tenantId
38
+ const scopeId = this.params.scope === 'application'
39
+ ? this.config.getApplicationId()
40
+ : this.config.getTenantId();
41
+ if (!scopeId) {
42
+ const errorMessage = this.params.scope === 'application'
43
+ ? 'Application ID not configured. Cannot propose application-level updates.'
44
+ : 'Tenant ID not configured. Cannot propose tenant-level updates.';
45
+ return {
46
+ llmContent: `Error: ${errorMessage}`,
47
+ returnDisplay: `Error: ${errorMessage}`,
48
+ error: {
49
+ message: errorMessage,
50
+ type: ToolErrorType.INVALID_TOOL_PARAMS,
51
+ },
52
+ };
53
+ }
54
+ // Validate update action requires document_id
55
+ if (this.params.action === 'update' && !this.params.document_id) {
56
+ const errorMessage = 'document_id is required for update actions.';
57
+ return {
58
+ llmContent: `Error: ${errorMessage}`,
59
+ returnDisplay: `Error: ${errorMessage}`,
60
+ error: {
61
+ message: errorMessage,
62
+ type: ToolErrorType.INVALID_TOOL_PARAMS,
63
+ },
64
+ };
65
+ }
66
+ // Build request body
67
+ const requestBody = {
68
+ scope_type: this.params.scope,
69
+ scope_id: scopeId,
70
+ session_id: this.config.getSessionId(),
71
+ proposed_title: this.params.title,
72
+ proposed_category: this.params.category,
73
+ proposed_body: this.params.body,
74
+ reasoning: this.params.reasoning,
75
+ source: 'agent:chat',
76
+ };
77
+ if (this.params.document_id) {
78
+ requestBody['document_id'] = this.params.document_id;
79
+ }
80
+ try {
81
+ const response = await fetch(`${platformApiUrl}/api/proposed-updates`, {
82
+ method: 'POST',
83
+ headers: {
84
+ 'Content-Type': 'application/json',
85
+ Authorization: `Bearer ${platformApiKey}`,
86
+ },
87
+ body: JSON.stringify(requestBody),
88
+ signal: _signal,
89
+ });
90
+ if (!response.ok) {
91
+ const errorMessage = `Platform API returned ${String(response.status)}: ${response.statusText}`;
92
+ return {
93
+ llmContent: `Error: ${errorMessage}`,
94
+ returnDisplay: `Error: ${errorMessage}`,
95
+ error: {
96
+ message: errorMessage,
97
+ type: ToolErrorType.EXECUTION_FAILED,
98
+ },
99
+ };
100
+ }
101
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- platform API response shape is trusted
102
+ const result = (await response.json());
103
+ // Log audit event
104
+ const auditLogger = this.config.getAuditLogger();
105
+ if (auditLogger) {
106
+ auditLogger.logKbProposal(this.params.scope, this.params.title, result.id);
107
+ }
108
+ // Return different messages based on auto-approve status
109
+ if (result.status === 'auto_approved') {
110
+ const successMessage = `Knowledge update applied immediately.\n` +
111
+ `Proposal ID: ${result.id}\n` +
112
+ `Scope: ${this.params.scope}\n` +
113
+ `Title: ${this.params.title}\n` +
114
+ `Status: auto-approved and applied`;
115
+ return {
116
+ llmContent: successMessage,
117
+ returnDisplay: successMessage,
118
+ };
119
+ }
120
+ const successMessage = `Knowledge base update proposed successfully.\n` +
121
+ `Proposal ID: ${result.id}\n` +
122
+ `Scope: ${this.params.scope}\n` +
123
+ `Title: ${this.params.title}\n` +
124
+ `Status: pending admin review`;
125
+ return {
126
+ llmContent: successMessage,
127
+ returnDisplay: successMessage,
128
+ };
129
+ }
130
+ catch (err) {
131
+ const message = err instanceof Error ? err.message : String(err);
132
+ const errorMessage = `Failed to submit proposal: ${message}`;
133
+ return {
134
+ llmContent: `Error: ${errorMessage}`,
135
+ returnDisplay: `Error: ${errorMessage}`,
136
+ error: {
137
+ message: errorMessage,
138
+ type: ToolErrorType.EXECUTION_FAILED,
139
+ },
140
+ };
141
+ }
142
+ }
143
+ }
144
+ /**
145
+ * Built-in tool for proposing knowledge base updates during conversations.
146
+ * Always available when platform API credentials are configured.
147
+ * Not subject to role filtering.
148
+ */
149
+ export class ProposeKnowledgeTool extends BaseDeclarativeTool {
150
+ config;
151
+ static Name = PROPOSE_KNOWLEDGE_TOOL_NAME;
152
+ constructor(config, messageBus) {
153
+ const definition = getProposeKnowledgeDefinition();
154
+ super(ProposeKnowledgeTool.Name, 'Propose Knowledge', definition.base.description, Kind.Other, definition.base.parametersJsonSchema, messageBus, true, false);
155
+ this.config = config;
156
+ }
157
+ createInvocation(params, messageBus, _toolName, _toolDisplayName) {
158
+ return new ProposeKnowledgeInvocation(this.config, params, messageBus, _toolName, _toolDisplayName ?? 'Propose Knowledge');
159
+ }
160
+ }
161
+ // Backward compatibility aliases
162
+ export { ProposeKnowledgeTool as ProposeKBUpdateTool };
163
+ //# sourceMappingURL=propose-knowledge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propose-knowledge.js","sourceRoot":"","sources":["../../../src/knowledge/propose-knowledge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ export { McpManager } from './mcp-manager.js';
7
+ export type { McpDiscoveredTool, McpToolResult, McpServerStatus, McpServerInfo } from './mcp-manager.js';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ export { McpManager } from './mcp-manager.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import type { RepoMcpServerConfig } from '../repo/repo-types.js';
7
+ /**
8
+ * A discovered tool from an MCP server.
9
+ */
10
+ export interface McpDiscoveredTool {
11
+ /** Namespaced tool name: serverName__toolName */
12
+ name: string;
13
+ /** Original tool name on the server */
14
+ originalName: string;
15
+ /** Server this tool belongs to */
16
+ serverName: string;
17
+ /** Tool description */
18
+ description: string;
19
+ /** JSON Schema for parameters */
20
+ parameters: Record<string, unknown>;
21
+ }
22
+ /**
23
+ * Result of calling an MCP tool.
24
+ */
25
+ export interface McpToolResult {
26
+ content: Array<{
27
+ type: string;
28
+ text?: string;
29
+ data?: string;
30
+ mimeType?: string;
31
+ }>;
32
+ isError?: boolean;
33
+ }
34
+ /**
35
+ * Status of an MCP server connection.
36
+ */
37
+ export type McpServerStatus = 'disconnected' | 'connecting' | 'connected' | 'error';
38
+ /**
39
+ * Info about a connected MCP server.
40
+ */
41
+ export interface McpServerInfo {
42
+ name: string;
43
+ status: McpServerStatus;
44
+ tools: string[];
45
+ error?: string;
46
+ }
47
+ /**
48
+ * Manages connections to multiple MCP servers.
49
+ * Handles lifecycle (connect/disconnect), tool discovery, and tool execution.
50
+ */
51
+ export declare class McpManager {
52
+ private readonly clients;
53
+ private readonly transports;
54
+ private readonly serverTools;
55
+ private readonly serverStatuses;
56
+ private readonly serverErrors;
57
+ /**
58
+ * Connect to all configured MCP servers and discover their tools.
59
+ * Non-fatal: individual server failures don't block other servers.
60
+ */
61
+ startServers(configs: Record<string, RepoMcpServerConfig>): Promise<void>;
62
+ /**
63
+ * Connect to a single MCP server.
64
+ */
65
+ private connectServer;
66
+ /**
67
+ * Create the appropriate transport for a server config.
68
+ */
69
+ private createTransport;
70
+ /**
71
+ * Get all discovered tools across all connected servers.
72
+ */
73
+ getDiscoveredTools(): McpDiscoveredTool[];
74
+ /**
75
+ * Call a tool on an MCP server.
76
+ * @param qualifiedName — The namespaced tool name (serverName__toolName)
77
+ * @param args — Tool arguments
78
+ */
79
+ callTool(qualifiedName: string, args: Record<string, unknown>): Promise<McpToolResult>;
80
+ /**
81
+ * Check if a tool name is an MCP tool.
82
+ */
83
+ isMcpTool(name: string): boolean;
84
+ /**
85
+ * Get status info for all servers.
86
+ */
87
+ getServerInfo(): McpServerInfo[];
88
+ /**
89
+ * Disconnect from all MCP servers.
90
+ */
91
+ shutdown(): Promise<void>;
92
+ /**
93
+ * Number of connected servers.
94
+ */
95
+ get connectedCount(): number;
96
+ }
@@ -0,0 +1,192 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
7
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
8
+ import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
9
+ import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
10
+ // Separator for namespaced tool names
11
+ const MCP_NAME_SEPARATOR = '__';
12
+ /**
13
+ * Manages connections to multiple MCP servers.
14
+ * Handles lifecycle (connect/disconnect), tool discovery, and tool execution.
15
+ */
16
+ export class McpManager {
17
+ clients = new Map();
18
+ transports = new Map();
19
+ serverTools = new Map();
20
+ serverStatuses = new Map();
21
+ serverErrors = new Map();
22
+ /**
23
+ * Connect to all configured MCP servers and discover their tools.
24
+ * Non-fatal: individual server failures don't block other servers.
25
+ */
26
+ async startServers(configs) {
27
+ const startPromises = Object.entries(configs).map(async ([name, config]) => {
28
+ try {
29
+ await this.connectServer(name, config);
30
+ }
31
+ catch (err) {
32
+ const msg = err instanceof Error ? err.message : String(err);
33
+ this.serverStatuses.set(name, 'error');
34
+ this.serverErrors.set(name, msg);
35
+ process.stderr.write(`[MCP] Failed to connect to ${name}: ${msg}\n`);
36
+ }
37
+ });
38
+ await Promise.allSettled(startPromises);
39
+ }
40
+ /**
41
+ * Connect to a single MCP server.
42
+ */
43
+ async connectServer(name, config) {
44
+ this.serverStatuses.set(name, 'connecting');
45
+ const transport = this.createTransport(name, config);
46
+ const client = new Client({ name: `amodal-${name}`, version: '1.0.0' });
47
+ await client.connect(transport);
48
+ this.clients.set(name, client);
49
+ this.transports.set(name, transport);
50
+ this.serverStatuses.set(name, 'connected');
51
+ // Discover tools
52
+ try {
53
+ const toolsResult = await client.listTools();
54
+ this.serverTools.set(name, toolsResult.tools);
55
+ process.stderr.write(`[MCP] Connected to ${name}: ${toolsResult.tools.length} tools discovered\n`);
56
+ }
57
+ catch {
58
+ this.serverTools.set(name, []);
59
+ process.stderr.write(`[MCP] Connected to ${name} but tool discovery failed\n`);
60
+ }
61
+ }
62
+ /**
63
+ * Create the appropriate transport for a server config.
64
+ */
65
+ createTransport(name, config) {
66
+ if (config.transport === 'stdio') {
67
+ if (!config.command) {
68
+ throw new Error(`MCP server "${name}" has stdio transport but no command`);
69
+ }
70
+ // Merge config env vars with process.env, filtering out undefined values
71
+ let mergedEnv;
72
+ if (config.env) {
73
+ mergedEnv = {};
74
+ for (const [k, v] of Object.entries(process.env)) {
75
+ if (v !== undefined)
76
+ mergedEnv[k] = v;
77
+ }
78
+ Object.assign(mergedEnv, config.env);
79
+ }
80
+ return new StdioClientTransport({
81
+ command: config.command,
82
+ args: config.args,
83
+ env: mergedEnv,
84
+ });
85
+ }
86
+ if (config.transport === 'sse') {
87
+ if (!config.url) {
88
+ throw new Error(`MCP server "${name}" has sse transport but no url`);
89
+ }
90
+ return new SSEClientTransport(new URL(config.url));
91
+ }
92
+ if (config.transport === 'http') {
93
+ if (!config.url) {
94
+ throw new Error(`MCP server "${name}" has http transport but no url`);
95
+ }
96
+ return new StreamableHTTPClientTransport(new URL(config.url));
97
+ }
98
+ throw new Error(`Unknown MCP transport "${config.transport}" for server "${name}"`);
99
+ }
100
+ /**
101
+ * Get all discovered tools across all connected servers.
102
+ */
103
+ getDiscoveredTools() {
104
+ const tools = [];
105
+ for (const [serverName, serverTools] of this.serverTools) {
106
+ for (const tool of serverTools) {
107
+ tools.push({
108
+ name: `${serverName}${MCP_NAME_SEPARATOR}${tool.name}`,
109
+ originalName: tool.name,
110
+ serverName,
111
+ description: tool.description ?? `Tool from ${serverName}`,
112
+ parameters: (tool.inputSchema ?? { type: 'object', properties: {} }),
113
+ });
114
+ }
115
+ }
116
+ return tools;
117
+ }
118
+ /**
119
+ * Call a tool on an MCP server.
120
+ * @param qualifiedName — The namespaced tool name (serverName__toolName)
121
+ * @param args — Tool arguments
122
+ */
123
+ async callTool(qualifiedName, args) {
124
+ const sepIdx = qualifiedName.indexOf(MCP_NAME_SEPARATOR);
125
+ if (sepIdx < 0) {
126
+ throw new Error(`Invalid MCP tool name "${qualifiedName}" — expected serverName${MCP_NAME_SEPARATOR}toolName`);
127
+ }
128
+ const serverName = qualifiedName.slice(0, sepIdx);
129
+ const toolName = qualifiedName.slice(sepIdx + MCP_NAME_SEPARATOR.length);
130
+ const client = this.clients.get(serverName);
131
+ if (!client) {
132
+ throw new Error(`MCP server "${serverName}" is not connected`);
133
+ }
134
+ const result = await client.callTool({ name: toolName, arguments: args });
135
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- MCP result shape
136
+ return result;
137
+ }
138
+ /**
139
+ * Check if a tool name is an MCP tool.
140
+ */
141
+ isMcpTool(name) {
142
+ return name.includes(MCP_NAME_SEPARATOR);
143
+ }
144
+ /**
145
+ * Get status info for all servers.
146
+ */
147
+ getServerInfo() {
148
+ const info = [];
149
+ for (const [name, status] of this.serverStatuses) {
150
+ const tools = this.serverTools.get(name) ?? [];
151
+ info.push({
152
+ name,
153
+ status,
154
+ tools: tools.map((t) => t.name),
155
+ error: this.serverErrors.get(name),
156
+ });
157
+ }
158
+ return info;
159
+ }
160
+ /**
161
+ * Disconnect from all MCP servers.
162
+ */
163
+ async shutdown() {
164
+ const closePromises = [...this.clients.entries()].map(async ([name, client]) => {
165
+ try {
166
+ await client.close();
167
+ process.stderr.write(`[MCP] Disconnected from ${name}\n`);
168
+ }
169
+ catch {
170
+ // Best effort
171
+ }
172
+ });
173
+ await Promise.allSettled(closePromises);
174
+ this.clients.clear();
175
+ this.transports.clear();
176
+ this.serverTools.clear();
177
+ this.serverStatuses.clear();
178
+ this.serverErrors.clear();
179
+ }
180
+ /**
181
+ * Number of connected servers.
182
+ */
183
+ get connectedCount() {
184
+ let count = 0;
185
+ for (const status of this.serverStatuses.values()) {
186
+ if (status === 'connected')
187
+ count++;
188
+ }
189
+ return count;
190
+ }
191
+ }
192
+ //# sourceMappingURL=mcp-manager.js.map