@bevel-software/platform-core-backend 0.13.6 → 0.15.1

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 (456) hide show
  1. package/THIRD-PARTY-NOTICES.md +6 -6
  2. package/dist/core/catalog-cache-invalidation.d.ts +29 -0
  3. package/dist/core/catalog-cache-invalidation.d.ts.map +1 -0
  4. package/dist/core/catalog-cache-invalidation.js +71 -0
  5. package/dist/core/catalog-cache-invalidation.js.map +1 -0
  6. package/dist/core/create-core-server.d.ts.map +1 -1
  7. package/dist/core/create-core-server.js +101 -9
  8. package/dist/core/create-core-server.js.map +1 -1
  9. package/dist/core/create-core-services.d.ts +20 -1
  10. package/dist/core/create-core-services.d.ts.map +1 -1
  11. package/dist/core/create-core-services.js +105 -43
  12. package/dist/core/create-core-services.js.map +1 -1
  13. package/dist/core-config.d.ts.map +1 -1
  14. package/dist/core-config.js +12 -5
  15. package/dist/core-config.js.map +1 -1
  16. package/dist/modules/access/access-control.interface.d.ts +18 -6
  17. package/dist/modules/access/access-control.interface.d.ts.map +1 -1
  18. package/dist/modules/access/access-control.service.d.ts +26 -1
  19. package/dist/modules/access/access-control.service.d.ts.map +1 -1
  20. package/dist/modules/access/access-control.service.js +213 -71
  21. package/dist/modules/access/access-control.service.js.map +1 -1
  22. package/dist/modules/access/access.routes.d.ts.map +1 -1
  23. package/dist/modules/access/access.routes.js +59 -7
  24. package/dist/modules/access/access.routes.js.map +1 -1
  25. package/dist/modules/access-model/access-grammar.d.ts +51 -1
  26. package/dist/modules/access-model/access-grammar.d.ts.map +1 -1
  27. package/dist/modules/access-model/access-grammar.js +95 -1
  28. package/dist/modules/access-model/access-grammar.js.map +1 -1
  29. package/dist/modules/access-model/group-files.d.ts.map +1 -1
  30. package/dist/modules/access-model/group-files.js +4 -1
  31. package/dist/modules/access-model/group-files.js.map +1 -1
  32. package/dist/modules/access-model/kb-read-filter.d.ts +12 -0
  33. package/dist/modules/access-model/kb-read-filter.d.ts.map +1 -1
  34. package/dist/modules/access-model/kb-read-filter.js +15 -0
  35. package/dist/modules/access-model/kb-read-filter.js.map +1 -1
  36. package/dist/modules/access-model/plugin-principals.d.ts +49 -0
  37. package/dist/modules/access-model/plugin-principals.d.ts.map +1 -0
  38. package/dist/modules/access-model/plugin-principals.js +125 -0
  39. package/dist/modules/access-model/plugin-principals.js.map +1 -0
  40. package/dist/modules/connection-probe/connection-probe.contract.d.ts +43 -0
  41. package/dist/modules/connection-probe/connection-probe.contract.d.ts.map +1 -0
  42. package/dist/modules/connection-probe/connection-probe.contract.js +2 -0
  43. package/dist/modules/connection-probe/connection-probe.contract.js.map +1 -0
  44. package/dist/modules/connection-probe/connection-probe.service.d.ts +94 -0
  45. package/dist/modules/connection-probe/connection-probe.service.d.ts.map +1 -0
  46. package/dist/modules/connection-probe/connection-probe.service.js +684 -0
  47. package/dist/modules/connection-probe/connection-probe.service.js.map +1 -0
  48. package/dist/modules/connection-probe/index.d.ts +3 -0
  49. package/dist/modules/connection-probe/index.d.ts.map +1 -0
  50. package/dist/modules/connection-probe/index.js +3 -0
  51. package/dist/modules/connection-probe/index.js.map +1 -0
  52. package/dist/modules/database/core-schema.d.ts +326 -0
  53. package/dist/modules/database/core-schema.d.ts.map +1 -1
  54. package/dist/modules/database/core-schema.js +52 -0
  55. package/dist/modules/database/core-schema.js.map +1 -1
  56. package/dist/modules/diff/diff.routes.d.ts.map +1 -1
  57. package/dist/modules/diff/diff.routes.js +3 -5
  58. package/dist/modules/diff/diff.routes.js.map +1 -1
  59. package/dist/modules/kb-fs/mutex.d.ts +37 -0
  60. package/dist/modules/kb-fs/mutex.d.ts.map +1 -1
  61. package/dist/modules/kb-fs/mutex.js +48 -5
  62. package/dist/modules/kb-fs/mutex.js.map +1 -1
  63. package/dist/modules/kb-sync/index.d.ts +6 -0
  64. package/dist/modules/kb-sync/index.d.ts.map +1 -0
  65. package/dist/modules/kb-sync/index.js +5 -0
  66. package/dist/modules/kb-sync/index.js.map +1 -0
  67. package/dist/modules/kb-sync/kb-sync.interface.d.ts +77 -0
  68. package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -0
  69. package/dist/modules/kb-sync/kb-sync.interface.js +2 -0
  70. package/dist/modules/kb-sync/kb-sync.interface.js.map +1 -0
  71. package/dist/modules/kb-sync/kb-sync.routes.d.ts +70 -0
  72. package/dist/modules/kb-sync/kb-sync.routes.d.ts.map +1 -0
  73. package/dist/modules/kb-sync/kb-sync.routes.js +135 -0
  74. package/dist/modules/kb-sync/kb-sync.routes.js.map +1 -0
  75. package/dist/modules/kb-sync/kb-sync.service.d.ts +45 -0
  76. package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -0
  77. package/dist/modules/kb-sync/kb-sync.service.js +183 -0
  78. package/dist/modules/kb-sync/kb-sync.service.js.map +1 -0
  79. package/dist/modules/kb-sync/sync-auth.d.ts +59 -0
  80. package/dist/modules/kb-sync/sync-auth.d.ts.map +1 -0
  81. package/dist/modules/kb-sync/sync-auth.js +62 -0
  82. package/dist/modules/kb-sync/sync-auth.js.map +1 -0
  83. package/dist/modules/kb-sync/sync-payload.d.ts +32 -0
  84. package/dist/modules/kb-sync/sync-payload.d.ts.map +1 -0
  85. package/dist/modules/kb-sync/sync-payload.js +105 -0
  86. package/dist/modules/kb-sync/sync-payload.js.map +1 -0
  87. package/dist/modules/marketplace/git-http.routes.d.ts +42 -0
  88. package/dist/modules/marketplace/git-http.routes.d.ts.map +1 -0
  89. package/dist/modules/marketplace/git-http.routes.js +190 -0
  90. package/dist/modules/marketplace/git-http.routes.js.map +1 -0
  91. package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts +23 -0
  92. package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts.map +1 -0
  93. package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js +59 -0
  94. package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js.map +1 -0
  95. package/dist/modules/marketplace/github-facade/github-facade-codes.store.d.ts +59 -0
  96. package/dist/modules/marketplace/github-facade/github-facade-codes.store.d.ts.map +1 -0
  97. package/dist/modules/marketplace/github-facade/github-facade-codes.store.js +96 -0
  98. package/dist/modules/marketplace/github-facade/github-facade-codes.store.js.map +1 -0
  99. package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts +99 -0
  100. package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts.map +1 -0
  101. package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js +147 -0
  102. package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js.map +1 -0
  103. package/dist/modules/marketplace/github-facade/github-facade.routes.d.ts +47 -0
  104. package/dist/modules/marketplace/github-facade/github-facade.routes.d.ts.map +1 -0
  105. package/dist/modules/marketplace/github-facade/github-facade.routes.js +228 -0
  106. package/dist/modules/marketplace/github-facade/github-facade.routes.js.map +1 -0
  107. package/dist/modules/marketplace/github-facade/github-facade.service.d.ts +109 -0
  108. package/dist/modules/marketplace/github-facade/github-facade.service.d.ts.map +1 -0
  109. package/dist/modules/marketplace/github-facade/github-facade.service.js +172 -0
  110. package/dist/modules/marketplace/github-facade/github-facade.service.js.map +1 -0
  111. package/dist/modules/marketplace/github-facade/index.d.ts +6 -0
  112. package/dist/modules/marketplace/github-facade/index.d.ts.map +1 -0
  113. package/dist/modules/marketplace/github-facade/index.js +6 -0
  114. package/dist/modules/marketplace/github-facade/index.js.map +1 -0
  115. package/dist/modules/marketplace/index.d.ts +4 -0
  116. package/dist/modules/marketplace/index.d.ts.map +1 -0
  117. package/dist/modules/marketplace/index.js +4 -0
  118. package/dist/modules/marketplace/index.js.map +1 -0
  119. package/dist/modules/marketplace/marketplace-repo.service.d.ts +122 -0
  120. package/dist/modules/marketplace/marketplace-repo.service.d.ts.map +1 -0
  121. package/dist/modules/marketplace/marketplace-repo.service.js +300 -0
  122. package/dist/modules/marketplace/marketplace-repo.service.js.map +1 -0
  123. package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts.map +1 -1
  124. package/dist/modules/mcp/oauth/bevel-oauth-provider.js +4 -0
  125. package/dist/modules/mcp/oauth/bevel-oauth-provider.js.map +1 -1
  126. package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts +14 -8
  127. package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts.map +1 -1
  128. package/dist/modules/mcp/oauth/oauth-consent.routes.js +13 -1
  129. package/dist/modules/mcp/oauth/oauth-consent.routes.js.map +1 -1
  130. package/dist/modules/mcp/oauth/oauth-state.d.ts +13 -2
  131. package/dist/modules/mcp/oauth/oauth-state.d.ts.map +1 -1
  132. package/dist/modules/mcp/oauth/oauth-state.js +3 -1
  133. package/dist/modules/mcp/oauth/oauth-state.js.map +1 -1
  134. package/dist/modules/plugins/compile/compile-marketplace.d.ts +97 -0
  135. package/dist/modules/plugins/compile/compile-marketplace.d.ts.map +1 -0
  136. package/dist/modules/plugins/compile/compile-marketplace.js +240 -0
  137. package/dist/modules/plugins/compile/compile-marketplace.js.map +1 -0
  138. package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts +66 -0
  139. package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts.map +1 -0
  140. package/dist/modules/plugins/compile/marketplace-compiler.service.js +132 -0
  141. package/dist/modules/plugins/compile/marketplace-compiler.service.js.map +1 -0
  142. package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.d.ts +37 -0
  143. package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.d.ts.map +1 -0
  144. package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.js +135 -0
  145. package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.js.map +1 -0
  146. package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts +45 -0
  147. package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts.map +1 -0
  148. package/dist/modules/plugins/discovery/bundle-dialect/registry.js +147 -0
  149. package/dist/modules/plugins/discovery/bundle-dialect/registry.js.map +1 -0
  150. package/dist/modules/plugins/discovery/kb-plugin-source.d.ts +37 -0
  151. package/dist/modules/plugins/discovery/kb-plugin-source.d.ts.map +1 -0
  152. package/dist/modules/plugins/discovery/kb-plugin-source.js +107 -0
  153. package/dist/modules/plugins/discovery/kb-plugin-source.js.map +1 -0
  154. package/dist/modules/plugins/discovery/native.source.d.ts +15 -0
  155. package/dist/modules/plugins/discovery/native.source.d.ts.map +1 -0
  156. package/dist/modules/plugins/discovery/native.source.js +102 -0
  157. package/dist/modules/plugins/discovery/native.source.js.map +1 -0
  158. package/dist/modules/plugins/discovery/plugin-source.d.ts +96 -0
  159. package/dist/modules/plugins/discovery/plugin-source.d.ts.map +1 -0
  160. package/dist/modules/plugins/discovery/plugin-source.js +2 -0
  161. package/dist/modules/plugins/discovery/plugin-source.js.map +1 -0
  162. package/dist/modules/plugins/index.d.ts +10 -1
  163. package/dist/modules/plugins/index.d.ts.map +1 -1
  164. package/dist/modules/plugins/index.js +8 -0
  165. package/dist/modules/plugins/index.js.map +1 -1
  166. package/dist/modules/plugins/plugin-links.d.ts +66 -0
  167. package/dist/modules/plugins/plugin-links.d.ts.map +1 -0
  168. package/dist/modules/plugins/plugin-links.js +160 -0
  169. package/dist/modules/plugins/plugin-links.js.map +1 -0
  170. package/dist/modules/plugins/plugin-links.service.d.ts +114 -0
  171. package/dist/modules/plugins/plugin-links.service.d.ts.map +1 -0
  172. package/dist/modules/plugins/plugin-links.service.js +304 -0
  173. package/dist/modules/plugins/plugin-links.service.js.map +1 -0
  174. package/dist/modules/plugins/plugin-provision.service.d.ts +39 -3
  175. package/dist/modules/plugins/plugin-provision.service.d.ts.map +1 -1
  176. package/dist/modules/plugins/plugin-provision.service.js +152 -52
  177. package/dist/modules/plugins/plugin-provision.service.js.map +1 -1
  178. package/dist/modules/plugins/plugin-rename.service.d.ts +69 -0
  179. package/dist/modules/plugins/plugin-rename.service.d.ts.map +1 -0
  180. package/dist/modules/plugins/plugin-rename.service.js +245 -0
  181. package/dist/modules/plugins/plugin-rename.service.js.map +1 -0
  182. package/dist/modules/plugins/plugins.contract.d.ts +27 -1
  183. package/dist/modules/plugins/plugins.contract.d.ts.map +1 -1
  184. package/dist/modules/plugins/plugins.routes.d.ts +7 -1
  185. package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
  186. package/dist/modules/plugins/plugins.routes.js +120 -12
  187. package/dist/modules/plugins/plugins.routes.js.map +1 -1
  188. package/dist/modules/plugins/plugins.service.d.ts +50 -3
  189. package/dist/modules/plugins/plugins.service.d.ts.map +1 -1
  190. package/dist/modules/plugins/plugins.service.js +108 -47
  191. package/dist/modules/plugins/plugins.service.js.map +1 -1
  192. package/dist/modules/secrets-vault/db-secrets-vault.service.js +1 -1
  193. package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
  194. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +6 -0
  195. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
  196. package/dist/modules/secrets-vault/secrets-vault.routes.js +31 -1
  197. package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
  198. package/dist/modules/settings/deployment-settings.service.d.ts +9 -0
  199. package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -1
  200. package/dist/modules/settings/deployment-settings.service.js +82 -2
  201. package/dist/modules/settings/deployment-settings.service.js.map +1 -1
  202. package/dist/modules/settings/setup.routes.d.ts +26 -0
  203. package/dist/modules/settings/setup.routes.d.ts.map +1 -1
  204. package/dist/modules/settings/setup.routes.js +9 -1
  205. package/dist/modules/settings/setup.routes.js.map +1 -1
  206. package/dist/modules/skills/index.d.ts +1 -0
  207. package/dist/modules/skills/index.d.ts.map +1 -1
  208. package/dist/modules/skills/index.js +1 -0
  209. package/dist/modules/skills/index.js.map +1 -1
  210. package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
  211. package/dist/modules/skills/pending-skills.service.js +9 -4
  212. package/dist/modules/skills/pending-skills.service.js.map +1 -1
  213. package/dist/modules/skills/skill-access-requests.routes.d.ts +38 -0
  214. package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -0
  215. package/dist/modules/skills/skill-access-requests.routes.js +168 -0
  216. package/dist/modules/skills/skill-access-requests.routes.js.map +1 -0
  217. package/dist/modules/skills/skills.contract.d.ts +31 -0
  218. package/dist/modules/skills/skills.contract.d.ts.map +1 -1
  219. package/dist/modules/skills/skills.routes.d.ts +28 -3
  220. package/dist/modules/skills/skills.routes.d.ts.map +1 -1
  221. package/dist/modules/skills/skills.routes.js +42 -3
  222. package/dist/modules/skills/skills.routes.js.map +1 -1
  223. package/dist/modules/skills/skills.service.d.ts +4 -0
  224. package/dist/modules/skills/skills.service.d.ts.map +1 -1
  225. package/dist/modules/skills/skills.service.js +83 -22
  226. package/dist/modules/skills/skills.service.js.map +1 -1
  227. package/dist/modules/tool-auth/external-api-key.interface.d.ts +18 -1
  228. package/dist/modules/tool-auth/external-api-key.interface.d.ts.map +1 -1
  229. package/dist/modules/tool-auth/external-api-key.interface.js +2 -1
  230. package/dist/modules/tool-auth/external-api-key.interface.js.map +1 -1
  231. package/dist/modules/tool-auth/external-api-key.service.d.ts +13 -4
  232. package/dist/modules/tool-auth/external-api-key.service.d.ts.map +1 -1
  233. package/dist/modules/tool-auth/external-api-key.service.js +26 -9
  234. package/dist/modules/tool-auth/external-api-key.service.js.map +1 -1
  235. package/dist/modules/tool-manuals/mcp-json-discovery.d.ts +36 -0
  236. package/dist/modules/tool-manuals/mcp-json-discovery.d.ts.map +1 -1
  237. package/dist/modules/tool-manuals/mcp-json-discovery.js +130 -83
  238. package/dist/modules/tool-manuals/mcp-json-discovery.js.map +1 -1
  239. package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts.map +1 -1
  240. package/dist/modules/tool-manuals/mcp-server-edit.service.js +10 -4
  241. package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
  242. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +83 -0
  243. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
  244. package/dist/modules/tool-manuals/tool-manuals.service.d.ts +15 -2
  245. package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
  246. package/dist/modules/tool-manuals/tool-manuals.service.js +199 -38
  247. package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
  248. package/dist/modules/workflow/git/git.service.d.ts +58 -3
  249. package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
  250. package/dist/modules/workflow/git/git.service.js +325 -60
  251. package/dist/modules/workflow/git/git.service.js.map +1 -1
  252. package/dist/modules/workflow/git/pull-request.service.d.ts +6 -0
  253. package/dist/modules/workflow/git/pull-request.service.d.ts.map +1 -1
  254. package/dist/modules/workflow/git/pull-request.service.js +8 -0
  255. package/dist/modules/workflow/git/pull-request.service.js.map +1 -1
  256. package/dist/modules/workflow/workflow.routes.d.ts +2 -1
  257. package/dist/modules/workflow/workflow.routes.d.ts.map +1 -1
  258. package/dist/modules/workflow/workflow.routes.js +98 -9
  259. package/dist/modules/workflow/workflow.routes.js.map +1 -1
  260. package/dist/modules/workflow/workflow.service.d.ts +133 -9
  261. package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
  262. package/dist/modules/workflow/workflow.service.js +462 -52
  263. package/dist/modules/workflow/workflow.service.js.map +1 -1
  264. package/dist/modules/workspace/startup/steps/plugin-manifests.step.d.ts +35 -0
  265. package/dist/modules/workspace/startup/steps/plugin-manifests.step.d.ts.map +1 -0
  266. package/dist/modules/workspace/startup/steps/plugin-manifests.step.js +121 -0
  267. package/dist/modules/workspace/startup/steps/plugin-manifests.step.js.map +1 -0
  268. package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
  269. package/dist/modules/workspace/startup/steps/seed-tree.js +46 -2
  270. package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
  271. package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
  272. package/dist/modules/workspace/startup/steps/template-files.step.js +112 -25
  273. package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
  274. package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
  275. package/dist/modules/workspace/workspace.routes.js +11 -14
  276. package/dist/modules/workspace/workspace.routes.js.map +1 -1
  277. package/dist/modules/workspace/workspace.service.d.ts +38 -1
  278. package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
  279. package/dist/modules/workspace/workspace.service.js +131 -20
  280. package/dist/modules/workspace/workspace.service.js.map +1 -1
  281. package/dist/shared/domain-errors.d.ts +20 -0
  282. package/dist/shared/domain-errors.d.ts.map +1 -1
  283. package/dist/shared/domain-errors.js +29 -0
  284. package/dist/shared/domain-errors.js.map +1 -1
  285. package/dist/shared/fs-errors.d.ts +8 -0
  286. package/dist/shared/fs-errors.d.ts.map +1 -0
  287. package/dist/shared/fs-errors.js +11 -0
  288. package/dist/shared/fs-errors.js.map +1 -0
  289. package/dist/shared/fs-walk.d.ts +20 -6
  290. package/dist/shared/fs-walk.d.ts.map +1 -1
  291. package/dist/shared/fs-walk.js +35 -27
  292. package/dist/shared/fs-walk.js.map +1 -1
  293. package/dist/shared/kb-walk.d.ts +52 -0
  294. package/dist/shared/kb-walk.d.ts.map +1 -0
  295. package/dist/shared/kb-walk.js +76 -0
  296. package/dist/shared/kb-walk.js.map +1 -0
  297. package/dist/shared/path-order.d.ts +18 -0
  298. package/dist/shared/path-order.d.ts.map +1 -0
  299. package/dist/shared/path-order.js +35 -0
  300. package/dist/shared/path-order.js.map +1 -0
  301. package/dist/shared/token-crypto.d.ts +17 -2
  302. package/dist/shared/token-crypto.d.ts.map +1 -1
  303. package/dist/shared/token-crypto.js +25 -8
  304. package/dist/shared/token-crypto.js.map +1 -1
  305. package/dist/shared/ttl-cache.d.ts +28 -1
  306. package/dist/shared/ttl-cache.d.ts.map +1 -1
  307. package/dist/shared/ttl-cache.js +33 -1
  308. package/dist/shared/ttl-cache.js.map +1 -1
  309. package/kb-template/.bevelignore +1 -1
  310. package/kb-template/AGENTS.md +95 -30
  311. package/kb-template/Skills/.gitkeep +0 -0
  312. package/migrations/0005_github_facade.sql +25 -0
  313. package/migrations/meta/0005_snapshot.json +1717 -0
  314. package/migrations/meta/_journal.json +7 -0
  315. package/package.json +6 -6
  316. package/src/__tests__/core-config.admin.test.ts +21 -0
  317. package/src/__tests__/kb-layout-config.test.ts +110 -0
  318. package/src/core/__tests__/catalog-cache-invalidation.test.ts +146 -0
  319. package/src/core/catalog-cache-invalidation.ts +92 -0
  320. package/src/core/create-core-server.ts +126 -7
  321. package/src/core/create-core-services.ts +173 -41
  322. package/src/core-config.ts +14 -7
  323. package/src/modules/access/__tests__/access-control.invalidate-race.test.ts +86 -0
  324. package/src/modules/access/__tests__/access-control.service.test.ts +19 -3
  325. package/src/modules/access/__tests__/access-plugin-principals.test.ts +368 -0
  326. package/src/modules/access/__tests__/groups-admin.service.test.ts +8 -0
  327. package/src/modules/access/access-control.interface.ts +20 -9
  328. package/src/modules/access/access-control.service.ts +240 -78
  329. package/src/modules/access/access.routes.ts +96 -14
  330. package/src/modules/access-model/__tests__/access-grammar.test.ts +18 -0
  331. package/src/modules/access-model/__tests__/plugin-token-canonical.test.ts +40 -0
  332. package/src/modules/access-model/access-grammar.ts +114 -2
  333. package/src/modules/access-model/group-files.ts +4 -0
  334. package/src/modules/access-model/kb-read-filter.ts +22 -0
  335. package/src/modules/access-model/plugin-principals.ts +137 -0
  336. package/src/modules/connection-probe/__tests__/connection-probe.service.test.ts +685 -0
  337. package/src/modules/connection-probe/connection-probe.contract.ts +44 -0
  338. package/src/modules/connection-probe/connection-probe.service.ts +734 -0
  339. package/src/modules/connection-probe/index.ts +2 -0
  340. package/src/modules/database/core-schema.ts +54 -0
  341. package/src/modules/diff/diff.routes.ts +9 -5
  342. package/src/modules/kb-fs/__tests__/mutex.test.ts +107 -0
  343. package/src/modules/kb-fs/mutex.ts +50 -5
  344. package/src/modules/kb-sync/__tests__/kb-sync.routes.test.ts +297 -0
  345. package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +295 -0
  346. package/src/modules/kb-sync/__tests__/sync-auth.test.ts +118 -0
  347. package/src/modules/kb-sync/__tests__/sync-payload.test.ts +148 -0
  348. package/src/modules/kb-sync/index.ts +19 -0
  349. package/src/modules/kb-sync/kb-sync.interface.ts +79 -0
  350. package/src/modules/kb-sync/kb-sync.routes.ts +197 -0
  351. package/src/modules/kb-sync/kb-sync.service.ts +201 -0
  352. package/src/modules/kb-sync/sync-auth.ts +118 -0
  353. package/src/modules/kb-sync/sync-payload.ts +143 -0
  354. package/src/modules/marketplace/__tests__/github-facade.test.ts +443 -0
  355. package/src/modules/marketplace/__tests__/marketplace-git.test.ts +179 -0
  356. package/src/modules/marketplace/git-http.routes.ts +193 -0
  357. package/src/modules/marketplace/github-facade/github-facade-admin.routes.ts +78 -0
  358. package/src/modules/marketplace/github-facade/github-facade-codes.store.ts +145 -0
  359. package/src/modules/marketplace/github-facade/github-facade-credentials.service.ts +208 -0
  360. package/src/modules/marketplace/github-facade/github-facade.routes.ts +268 -0
  361. package/src/modules/marketplace/github-facade/github-facade.service.ts +221 -0
  362. package/src/modules/marketplace/github-facade/index.ts +25 -0
  363. package/src/modules/marketplace/index.ts +3 -0
  364. package/src/modules/marketplace/marketplace-repo.service.ts +337 -0
  365. package/src/modules/mcp/oauth/bevel-oauth-provider.ts +3 -0
  366. package/src/modules/mcp/oauth/oauth-consent.routes.ts +24 -2
  367. package/src/modules/mcp/oauth/oauth-state.ts +15 -3
  368. package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +163 -0
  369. package/src/modules/plugins/__tests__/compile-marketplace.test.ts +294 -0
  370. package/src/modules/plugins/__tests__/plugin-index.service.test.ts +56 -12
  371. package/src/modules/plugins/__tests__/plugin-links.service.test.ts +287 -0
  372. package/src/modules/plugins/__tests__/plugin-provision.service.test.ts +205 -5
  373. package/src/modules/plugins/__tests__/plugin-rename.service.test.ts +394 -0
  374. package/src/modules/plugins/__tests__/plugins.routes.test.ts +80 -33
  375. package/src/modules/plugins/compile/compile-marketplace.ts +403 -0
  376. package/src/modules/plugins/compile/marketplace-compiler.service.ts +150 -0
  377. package/src/modules/plugins/discovery/__tests__/kb-plugin-source.test.ts +329 -0
  378. package/src/modules/plugins/discovery/bundle-dialect/bundle.source.ts +140 -0
  379. package/src/modules/plugins/discovery/bundle-dialect/registry.ts +175 -0
  380. package/src/modules/plugins/discovery/kb-plugin-source.ts +114 -0
  381. package/src/modules/plugins/discovery/native.source.ts +122 -0
  382. package/src/modules/plugins/discovery/plugin-source.ts +99 -0
  383. package/src/modules/plugins/index.ts +10 -0
  384. package/src/modules/plugins/plugin-links.service.ts +363 -0
  385. package/src/modules/plugins/plugin-links.ts +184 -0
  386. package/src/modules/plugins/plugin-provision.service.ts +160 -54
  387. package/src/modules/plugins/plugin-rename.service.ts +298 -0
  388. package/src/modules/plugins/plugins.contract.ts +28 -1
  389. package/src/modules/plugins/plugins.routes.ts +128 -11
  390. package/src/modules/plugins/plugins.service.ts +106 -53
  391. package/src/modules/secrets-vault/__tests__/connect-pending.route.test.ts +12 -0
  392. package/src/modules/secrets-vault/__tests__/oauth-return-to.route.test.ts +10 -3
  393. package/src/modules/secrets-vault/__tests__/tool-owner-gate.route.test.ts +26 -0
  394. package/src/modules/secrets-vault/db-secrets-vault.service.ts +1 -1
  395. package/src/modules/secrets-vault/secrets-vault.routes.ts +35 -1
  396. package/src/modules/settings/__tests__/deployment-settings.service.test.ts +57 -0
  397. package/src/modules/settings/__tests__/setup.routes.sync-status.test.ts +77 -0
  398. package/src/modules/settings/deployment-settings.service.ts +95 -2
  399. package/src/modules/settings/setup.routes.ts +24 -0
  400. package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +128 -0
  401. package/src/modules/skills/__tests__/skills.service.test.ts +85 -0
  402. package/src/modules/skills/index.ts +1 -0
  403. package/src/modules/skills/pending-skills.service.ts +7 -5
  404. package/src/modules/skills/skill-access-requests.routes.ts +199 -0
  405. package/src/modules/skills/skills.contract.ts +32 -0
  406. package/src/modules/skills/skills.routes.ts +59 -3
  407. package/src/modules/skills/skills.service.ts +84 -22
  408. package/src/modules/tool-auth/external-api-key.interface.ts +20 -1
  409. package/src/modules/tool-auth/external-api-key.service.ts +31 -13
  410. package/src/modules/tool-manuals/__tests__/mcp-json-discovery.test.ts +35 -1
  411. package/src/modules/tool-manuals/__tests__/tool-manuals.cli.test.ts +2 -0
  412. package/src/modules/tool-manuals/__tests__/tool-manuals.health-check.test.ts +104 -0
  413. package/src/modules/tool-manuals/__tests__/tool-manuals.service.test.ts +56 -0
  414. package/src/modules/tool-manuals/mcp-json-discovery.ts +154 -76
  415. package/src/modules/tool-manuals/mcp-server-edit.service.ts +13 -4
  416. package/src/modules/tool-manuals/tool-manuals.contract.ts +89 -0
  417. package/src/modules/tool-manuals/tool-manuals.service.ts +210 -37
  418. package/src/modules/workflow/__tests__/preserve-roles-yaml.test.ts +1 -1
  419. package/src/modules/workflow/__tests__/workflow.routes.history-read-gate.test.ts +139 -0
  420. package/src/modules/workflow/__tests__/workflow.service.branch-in-use.test.ts +337 -0
  421. package/src/modules/workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts +1 -0
  422. package/src/modules/workflow/__tests__/workflow.service.deleted-branch-sweep.test.ts +7 -1
  423. package/src/modules/workflow/__tests__/workflow.service.facade.test.ts +97 -10
  424. package/src/modules/workflow/__tests__/workflow.service.releaseLock.test.ts +119 -2
  425. package/src/modules/workflow/__tests__/workflow.service.sync.test.ts +437 -0
  426. package/src/modules/workflow/git/__tests__/git.service.history-guards.test.ts +86 -0
  427. package/src/modules/workflow/git/__tests__/git.service.postMergePull.test.ts +3 -3
  428. package/src/modules/workflow/git/__tests__/git.service.pull.test.ts +47 -4
  429. package/src/modules/workflow/git/__tests__/git.service.syncFromRemote.test.ts +253 -0
  430. package/src/modules/workflow/git/git.service.ts +354 -63
  431. package/src/modules/workflow/git/pull-request.service.ts +9 -0
  432. package/src/modules/workflow/workflow.routes.ts +104 -4
  433. package/src/modules/workflow/workflow.service.ts +505 -64
  434. package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +6 -7
  435. package/src/modules/workspace/__tests__/workspace.service.list-cloned.test.ts +93 -0
  436. package/src/modules/workspace/__tests__/workspace.service.missing-branch.test.ts +28 -0
  437. package/src/modules/workspace/__tests__/workspace.service.read-filter.test.ts +42 -12
  438. package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +219 -4
  439. package/src/modules/workspace/startup/steps/plugin-manifests.step.ts +129 -0
  440. package/src/modules/workspace/startup/steps/seed-tree.ts +44 -2
  441. package/src/modules/workspace/startup/steps/template-files.step.ts +131 -27
  442. package/src/modules/workspace/workspace.routes.ts +17 -21
  443. package/src/modules/workspace/workspace.service.ts +128 -19
  444. package/src/shared/__tests__/filename.test.ts +0 -0
  445. package/src/shared/__tests__/fs-walk.test.ts +22 -1
  446. package/src/shared/__tests__/kb-walk.test.ts +107 -0
  447. package/src/shared/__tests__/path-order.test.ts +24 -0
  448. package/src/shared/__tests__/token-crypto.test.ts +34 -0
  449. package/src/shared/__tests__/ttl-cache.test.ts +55 -0
  450. package/src/shared/domain-errors.ts +29 -0
  451. package/src/shared/fs-errors.ts +10 -0
  452. package/src/shared/fs-walk.ts +38 -23
  453. package/src/shared/kb-walk.ts +95 -0
  454. package/src/shared/path-order.ts +33 -0
  455. package/src/shared/token-crypto.ts +28 -10
  456. package/src/shared/ttl-cache.ts +33 -1
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server-edit.service.js","sourceRoot":"","sources":["../../../src/modules/tool-manuals/mcp-server-edit.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACpB,eAAe,GAEhB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAmEnG,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAGhC;IAFX,YACE,OAAe,EACN,MAAc;QAEvB,KAAK,CAAC,OAAO,CAAC,CAAC;QAFN,WAAM,GAAN,MAAM,CAAQ;QAGvB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,2EAA2E;AAC3E,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAE/C,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,MAAM,SAAS,GAAG,yBAAyB,CAAC;AAE5C,SAAS,QAAQ,CAAC,CAAU;IAC1B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAYhD,MAAM,OAAO,oBAAoB;IAEZ;IACA;IACA;IACA;IACA;IALnB,YACmB,gBAAkC,EAClC,OAAqB,EACrB,aAA6B,EAC7B,WAA+B,EAC/B,SAAiB;QAJjB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,YAAO,GAAP,OAAO,CAAc;QACrB,kBAAa,GAAb,aAAa,CAAgB;QAC7B,gBAAW,GAAX,WAAW,CAAoB;QAC/B,cAAS,GAAT,SAAS,CAAQ;IACjC,CAAC;IAEJ,uGAAuG;IACvG,KAAK,CAAC,SAAS,CAAC,SAAiB,EAAE,IAAY;QAC7C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QACpD,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,KAAK,GAAI,GAAG,EAAE,UAAkD,EAAE,CAAC,IAAI,CAAC,CAAC;QAC/E,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACrD,MAAM,GAAG,GAAG,KAAgC,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChD,OAAO;YACL,IAAI;YACJ,SAAS,EAAG,GAAG,CAAC,IAAqB,IAAI,iBAAiB;YAC1D,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAA6B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7F,yEAAyE;YACzE,qEAAqE;YACrE,gEAAgE;YAChE,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,OAAkC,CAAC,CAAC,CAAC,EAAE;YACpF,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,OAAkC,CAAC,CAAC,CAAC,EAAE;YACjF,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,SAA4B,CAAC,CAAC,CAAC,EAAE;YAChF,GAAG,CAAC,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,KAAK,EAAE,GAAG,CAAC,KAAK,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;YACjD,QAAQ,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC;SAC1E,CAAC;IACJ,CAAC;IAED,4FAA4F;IAC5F,KAAK,CAAC,SAAS,CAAC,IAAc,EAAE,IAAY,EAAE,KAAqB;QACjE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,kBAAkB,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QACjE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QACpD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,kBAAkB,CAAC,0DAA0D,EAAE,GAAG,CAAC,CAAC;QAChG,CAAC;QACD,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5E,IAAI,CAAC,GAAG,EAAE,UAAU,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC3D,MAAM,IAAI,kBAAkB,CAAC,GAAG,eAAe,iDAAiD,EAAE,GAAG,CAAC,CAAC;QACzG,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,UAAqC,CAAC;QAC1D,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC;YAAE,MAAM,IAAI,kBAAkB,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;QAE7E,IAAI,KAAK,CAAC,SAAS,KAAK,iBAAiB,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,IAAI,KAAK,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;YACtG,qEAAqE;YACrE,wEAAwE;YACxE,MAAM,IAAI,kBAAkB,CAAC,sBAAsB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACvF,CAAC;QACD,6DAA6D;QAC7D,mEAAmE;QACnE,gDAAgD;QAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAE,OAAO,CAAC,IAAI,CAA6B,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACjF,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACjG,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC5F,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,GAA8B,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACnG,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACjF,MAAM,SAAS,GACb,KAAK,CAAC,cAAc,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,OAAkC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrG,MAAM,MAAM,GACV,KAAK,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,QAAQ,CAAC,OAAkC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxG,uEAAuE;QACvE,wEAAwE;QACxE,uEAAuE;QACvE,gCAAgC;QAChC,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC;QAC1D,uEAAuE;QACvE,qEAAqE;QACrE,qEAAqE;QACrE,wEAAwE;QACxE,yEAAyE;QACzE,4BAA4B;QAC5B,MAAM,SAAS,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,kBAAkB,CAC1B,qFAAqF;gBACnF,6FAA6F;gBAC7F,gGAAgG;gBAChG,kGAAkG,EACpG,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GACf,KAAK,CAAC,WAAW,IAAI,CAAC,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACrG,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;QAEvD,yEAAyE;QACzE,yEAAyE;QACzE,wEAAwE;QACxE,sEAAsE;QACtE,uDAAuD;QACvD,MAAM,WAAW,GAAG,eAAe,CAAC;YAClC,GAAG;YACH,OAAO;YACP,IAAI;YACJ,GAAG;YACH,GAAG;YACH,WAAW;YACX,cAAc,EAAE,SAAS;YACzB,WAAW,EAAE,MAAM;YACnB,SAAS;SACV,CAAC,CAAC;QACH,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,kBAAkB,CAC1B,IAAI,WAAW,uEAAuE;gBACpF,oEAAoE,EACtE,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;QAC7C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,kBAAkB,CAC1B,6EAA6E,EAC7E,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;YACzC,MAAM,IAAI,kBAAkB,CAAC,mBAAmB,MAAM,wBAAwB,EAAE,GAAG,CAAC,CAAC;QACvF,CAAC;QAED,yEAAyE;QACzE,sEAAsE;QACtE,sEAAsE;QACtE,iCAAiC;QACjC,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,MAAM,IAAI,GAA2B,EAAE,GAAG,MAAM,EAAE,CAAC;QACnD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/C,IAAI,SAAS,CAAC,CAAC,CAAC;gBAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;;gBACzB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;QAED,IAAI,KAA8B,CAAC;QACnC,IAAI,KAAK,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,kBAAkB,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;YAC/E,KAAK,GAAG;gBACN,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,GAAG;gBACZ,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5C,GAAG,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtD,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,MAAW,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,kBAAkB,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAChE,MAAM,IAAI,kBAAkB,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAC;YAC7E,CAAC;YACD,wEAAwE;YACxE,sEAAsE;YACtE,wEAAwE;YACxE,gCAAgC;YAChC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,IAAI,CAAC;oBACH,kBAAkB,CAAC,GAAG,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;gBACzD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,IAAI,kBAAkB,CAC1B,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,6CAA6C,KAAK;wBACxF,2DAA2D,EAC7D,GAAG,CACJ,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,KAAK,GAAG;gBACN,IAAI,EAAE,KAAK,CAAC,SAAS;gBACrB,GAAG;gBACH,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjE,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1C,OAAO,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;QAExB,sEAAsE;QACtE,uEAAuE;QACvE,yEAAyE;QACzE,MAAM,QAAQ,GAAG;YACf,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1E,CAAC;QACF,IAAI,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,kBAAkB,CAAC,GAAG,oBAAoB,iDAAiD,EAAE,GAAG,CAAC,CAAC;QAC9G,CAAC;QACD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,oEAAoE;YACpE,wEAAwE;YACxE,uEAAuE;YACvE,gEAAgE;YAChE,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAW,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACvH,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,UAAU,KAAK,EAAE,CAA4B,CAAC;YACpE,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,kBAAkB,CAAC,GAAG,oBAAoB,6DAA6D,EAAE,GAAG,CAAC,CAAC;YAC1H,CAAC;YACD,IAAI,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,QAAQ,CAAE,GAAG,CAAC,kBAAkB,CAAyC,EAAE,UAAU,CAAC,EAAE,CAAC;gBAChI,MAAM,IAAI,kBAAkB,CAAC,GAAG,oBAAoB,6DAA6D,EAAE,GAAG,CAAC,CAAC;YAC1H,CAAC;YACD,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAA4B,CAAC;YACvE,MAAM,UAAU,GAAG,CAAC,EAAE,CAAC,UAAU,KAAK,EAAE,CAA4B,CAAC;YACrE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC;gBAAE,UAAU,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;QACtE,CAAC;QAED,yEAAyE;QACzE,0EAA0E;QAC1E,sEAAsE;QACtE,WAAW;QACX,wEAAwE;QACxE,sEAAsE;QACtE,yEAAyE;QACzE,yEAAyE;QACzE,0EAA0E;QAC1E,wEAAwE;QACxE,yEAAyE;QACzE,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACpD,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;YAC7C,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;SACnD,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACxE,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,SAAS,KAAK,IAAI;gBAAE,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACtF,IAAI,cAAc,KAAK,IAAI;gBAAE,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACrG,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,2EAA2E;QAC3E,yEAAyE;QACzE,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CACjC,oBAAoB,CAAC,cAAc,CAAC,EACpC,cAAc,EACd,GAAG,IAAI,CAAC,SAAS,IAAI,WAAW,IAAI,MAAM,EAAE,EAC5C,IAAI,CACL,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED,uFAAuF;IAC/E,KAAK,CAAC,MAAM,CAClB,SAAiB,EACjB,IAAY;QAEZ,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACnE,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,eAAe,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/F,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO;YACL,MAAM;YACN,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,oBAAoB,CAAC,cAAc,CAAC;YAC1C,WAAW,EAAE,KAAK,CAAC,IAAI;SACxB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,MAAc;QAMpC,MAAM,IAAI,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;QAClD,MAAM,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;QAC/D,OAAO;YACL,GAAG,EAAE,MAAM,QAAQ,CAAC,MAAM,CAAC;YAC3B,QAAQ,EAAE,MAAM,QAAQ,CAAC,WAAW,CAAC;YACrC,MAAM;YACN,WAAW;SACZ,CAAC;IACJ,CAAC;IAEO,cAAc,CAAC,QAAwC,EAAE,IAAY;QAC3E,MAAM,EAAE,GAAI,QAAQ,EAAE,UAAkD,EAAE,CAAC,kBAAkB,CAAC,CAAC;QAC/F,MAAM,OAAO,GAAI,EAA0C,EAAE,UAAU,CAAC;QACxE,MAAM,KAAK,GAAI,OAA+C,EAAE,CAAC,IAAI,CAAC,CAAC;QACvE,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,KAAiC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,CAAC;CACF;AAED,KAAK,UAAU,QAAQ,CAAC,CAAS;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAClE,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAC5E,CAAC,CAAE,MAAkC;YACrC,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"mcp-server-edit.service.js","sourceRoot":"","sources":["../../../src/modules/tool-manuals/mcp-server-edit.service.ts"],"names":[],"mappings":"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"}
@@ -81,6 +81,55 @@ export interface ToolVariable {
81
81
  */
82
82
  oauth?: ToolVariableOAuth;
83
83
  }
84
+ /**
85
+ * An optional cheap, read-only call that proves a credential actually WORKS.
86
+ *
87
+ * A `type: mcp` manual needs none — its handshake is authenticated, so merely
88
+ * connecting already tests the token. `http` and `inline` manuals have no such
89
+ * moment: registering an `http` manual fetches its DESCRIPTION, which providers
90
+ * usually serve publicly, so a wrong key sails through; an `inline` manual's
91
+ * discovery template points at Bevel's own API and never touches the provider
92
+ * at all. Without a declaration there is genuinely nothing to call, and the
93
+ * platform reports the connection as unverified rather than guessing.
94
+ *
95
+ * NOT inferred from the manual's own tools. Picking one automatically would
96
+ * mean calling an arbitrary tool with invented arguments — a probe that could
97
+ * send a message or create a record is worse than no probe. The author names a
98
+ * safe endpoint or the tool stays unverified.
99
+ *
100
+ * `${VAR}` refs resolve from the caller's vault exactly as they do in `url` and
101
+ * `headers`, which is the whole point: the probe must carry the same credential
102
+ * the real calls carry. Any 2xx is a pass; 401/403 is a rejection; anything
103
+ * else is treated as the provider being unwell rather than the key being wrong.
104
+ */
105
+ export interface ToolHealthCheck {
106
+ /** Absolute URL to call. May contain `${VAR}` refs; SSRF-checked like `url`. */
107
+ url: string;
108
+ /** Default `GET`. A health check may not mutate, so nothing else is allowed. */
109
+ method?: 'GET';
110
+ /** Defaults to the manual's own `headers` — usually where the credential is. */
111
+ headers?: Record<string, string>;
112
+ }
113
+ /**
114
+ * One manual, reduced to exactly what testing its credential requires.
115
+ *
116
+ * Server-internal, like {@link ToolHealthCheck} and for the same reason: both
117
+ * `healthCheck.headers` and `callTemplate` can carry a literal token.
118
+ */
119
+ export interface ToolProbeTarget {
120
+ name: string;
121
+ type: ToolManualType;
122
+ /** `false` for a local-only tool this server is not the one that can reach it. */
123
+ remote?: boolean;
124
+ /** The probe the `.tool` declares, if any. */
125
+ healthCheck?: ToolHealthCheck;
126
+ /**
127
+ * The validated UTCP call template, or `null` when the manual doesn't produce
128
+ * a valid one. Only the `mcp` probe uses it — its handshake IS the test — but
129
+ * it is built here so the probe never has to walk the catalog again.
130
+ */
131
+ callTemplate: CallTemplate | null;
132
+ }
84
133
  /**
85
134
  * For a `type: mcp` tool, what an admin must do to make the remote server
86
135
  * reachable — derived from OAuth auto-discovery, which a non-mcp tool has no
@@ -132,6 +181,15 @@ export interface ToolManualDescriptorBase {
132
181
  variables?: ToolVariable[];
133
182
  /** For `type: mcp`: the admin-facing setup requirement from auto-discovery. */
134
183
  setup?: ToolManualSetup;
184
+ /**
185
+ * Optional credential probe — see {@link ToolHealthCheck}. Declared on
186
+ * `http`/`inline` manuals, and honoured on `type: mcp` too, where it
187
+ * OVERRIDES the default handshake probe (a server whose health endpoint is
188
+ * cheaper or more truthful than a full MCP handshake says so here).
189
+ * INTERNAL: lives on the descriptor, never on {@link ToolManualSummary},
190
+ * because it carries `headers`.
191
+ */
192
+ healthCheck?: ToolHealthCheck;
135
193
  }
136
194
  /** The spawn spec of a stdio-declared MCP server (a plugin `mcp.json` entry). */
137
195
  export interface ToolManualStdioSpec {
@@ -266,6 +324,31 @@ export interface IToolManualService {
266
324
  * a `resolve` reads the shared row or the caller's row.
267
325
  */
268
326
  scopeOfVariable(effectiveKey: string): Promise<ToolVariableScope>;
327
+ /**
328
+ * Everything the credential probe needs about one readable manual, resolved
329
+ * in a SINGLE catalog + ACL pass.
330
+ *
331
+ * One accessor rather than three because the probe needs three facts that all
332
+ * come from the same file — is it local-only, does it declare a health check,
333
+ * and what call template would reach it — and asking for them separately made
334
+ * one probe walk the catalog four times, building call templates for every
335
+ * manual in the workspace to use exactly one of them.
336
+ *
337
+ * Deliberately NOT reachable through {@link ToolManualSummary}: that type is
338
+ * serialized straight to the browser by the tool endpoints, and a probe
339
+ * carries `headers` — which a `.tool` author may write as a literal token
340
+ * rather than a `${VAR}` ref. Probe config is internal to the server, so it
341
+ * travels by its own accessor and never rides a public DTO.
342
+ *
343
+ * Addressed by SLUG, which is what the route has: resolving the slug here
344
+ * rather than making the caller map it to a name first is what reduces a
345
+ * probe to one pass. `ToolProbeTarget.name` carries the UTCP namespace back
346
+ * out, since that is what the probe's `${VAR}` lookups are keyed by.
347
+ *
348
+ * `null` when no such manual exists OR the caller can't read it — the two are
349
+ * indistinguishable on purpose, as everywhere else in this contract.
350
+ */
351
+ probeTargetFor(userEmail: string, slug: string): Promise<ToolProbeTarget | null>;
269
352
  /**
270
353
  * The per-user (`user`-scoped) variables a manual declares, each with the vault
271
354
  * key (`<manual>_<VAR>`) the caller's value is stored under, its bare name, and
@@ -1 +1 @@
1
- {"version":3,"file":"tool-manuals.contract.d.ts","sourceRoot":"","sources":["../../../src/modules/tool-manuals/tool-manuals.contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-manuals.contract.d.ts","sourceRoot":"","sources":["../../../src/modules/tool-manuals/tool-manuals.contract.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  import '@utcp/http';
2
2
  import '@utcp/mcp';
3
3
  import { type CallTemplate } from '@utcp/sdk';
4
+ import type { PluginSource } from '../plugins/discovery/plugin-source.js';
4
5
  import type { WorkspaceService } from '../workspace/workspace.service.js';
5
6
  import type { IAccessControl } from '../access/access-control.interface.js';
6
- import { type IToolManualService, type ToolManualDescriptor, type ToolManualSummary, type ToolManualDetail, type UtcpManualDict, type ToolManualPreview, type ToolVariableScope } from './tool-manuals.contract.js';
7
+ import { type IToolManualService, type ToolManualDescriptor, type ToolManualSummary, type ToolManualDetail, type UtcpManualDict, type ToolManualPreview, type ToolProbeTarget, type ToolVariableScope } from './tool-manuals.contract.js';
7
8
  /**
8
9
  * What the catalog needs from MCP OAuth auto-discovery (structurally satisfied
9
10
  * by `McpOAuthDiscoveryService` in modules/secrets-vault). A local port keeps
@@ -48,9 +49,13 @@ export declare class ToolManualService implements IToolManualService {
48
49
  private readonly workspaceService;
49
50
  private readonly accessControl;
50
51
  private readonly kbDirName;
52
+ /** Where plugins (and their MCP servers) come from — native manifests unless a dialect is configured. */
53
+ private readonly source;
51
54
  private readonly cache;
52
55
  private mcpAuthDiscovery?;
53
- constructor(workspaceService: WorkspaceService, accessControl: IAccessControl, kbDirName: string, now?: () => number);
56
+ constructor(workspaceService: WorkspaceService, accessControl: IAccessControl, kbDirName: string, now?: () => number,
57
+ /** Where plugins (and their MCP servers) come from — native manifests unless a dialect is configured. */
58
+ source?: PluginSource);
54
59
  /**
55
60
  * Wire the MCP OAuth auto-discovery (setter injection: the discovery service
56
61
  * depends on the vault, which is constructed after this service — the same
@@ -75,6 +80,14 @@ export declare class ToolManualService implements IToolManualService {
75
80
  oauthScopes?: string[];
76
81
  }[]>;
77
82
  scopeOfVariable(effectiveKey: string): Promise<ToolVariableScope>;
83
+ /**
84
+ * The probe config for a manual this caller can read — the internal
85
+ * counterpart to everything on `ToolManualSummary`.
86
+ *
87
+ * Access-gated through `accessibleManuals` like every other read, so this
88
+ * cannot become a way to learn what a `.tool` you can't see declares.
89
+ */
90
+ probeTargetFor(userEmail: string, slug: string): Promise<ToolProbeTarget | null>;
78
91
  toManualCallTemplates(userEmail: string, opts?: {
79
92
  remoteOnly?: boolean;
80
93
  }): Promise<CallTemplate[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"tool-manuals.service.d.ts","sourceRoot":"","sources":["../../../src/modules/tool-manuals/tool-manuals.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-manuals.service.d.ts","sourceRoot":"","sources":["../../../src/modules/tool-manuals/tool-manuals.service.ts"],"names":[],"mappings":"AAGA,OAAO,YAAY,CAAC;AACpB,OAAO,WAAW,CAAC;AAInB,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,WAAW,CAAC;AAMnB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAE1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAY5E,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAEzB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAErB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAItB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EAEvB,MAAM,4BAA4B,CAAC;AAoDpC;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC/E;;;;;;OAMG;IACH,yBAAyB,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACnH;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IACE,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE;QACR,gBAAgB,EAAE,MAAM,CAAC;QACzB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH,GACD;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9C;;;;;;GAMG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;IAKxD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAE1B,yGAAyG;IACzG,OAAO,CAAC,QAAQ,CAAC,MAAM;IATzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmC;IACzD,OAAO,CAAC,gBAAgB,CAAC,CAAuB;gBAG7B,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,cAAc,EAC7B,SAAS,EAAE,MAAM,EAClC,GAAG,GAAE,MAAM,MAAiB;IAC5B,yGAAyG;IACxF,MAAM,GAAE,YAAmC;IAK9D;;;;;OAKG;IACH,mBAAmB,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI;IAI1D,UAAU,IAAI,IAAI;IAIZ,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAI/D,gBAAgB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAIhD,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAc5E,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAKzF,uBAAuB,CAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CACR;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAC9F;IAqBK,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAiBvE;;;;;;OAMG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IA4BhF,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAoBlG,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAgBpF,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAqC1D,iGAAiG;IACjG,OAAO,CAAC,qBAAqB;YA8Df,iBAAiB;YAcjB,IAAI;IAelB;;;;;;;;OAQG;IACH,OAAO,CAAC,0BAA0B;IAoClC;;;;;;;;;OASG;YACW,gBAAgB;IAyF9B;;;;;;;;;;OAUG;YACW,qBAAqB;YA4CrB,QAAQ;CAsEvB;AAmED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,oBAAoB,CAgJtB"}
@@ -7,8 +7,9 @@ import '@utcp/mcp'; // side effect: register the 'mcp' call-template type (mcp `
7
7
  // executor is removed again, so this process cannot dispatch a shell command.
8
8
  import { containsCliCallTemplate } from './utcp-cli-parse-only.js';
9
9
  import { UtcpManualSerializer, CallTemplateSerializer, DefaultVariableSubstitutor, } from '@utcp/sdk';
10
- import { DEFAULT_BRANCH, PLUGINS_DIR, PLUGIN_MANIFEST_FILE, PLUGIN_MCP_FILE, } from '@bevel-software/platform-shared';
10
+ import { DEFAULT_BRANCH, PLUGINS_DIR, } from '@bevel-software/platform-shared';
11
11
  import { descriptorsFromMcpJson } from './mcp-json-discovery.js';
12
+ import { KbPluginSource } from '../plugins/discovery/kb-plugin-source.js';
12
13
  import { workspaceIdForBranch } from '../../shared/workspace-id.js';
13
14
  import { assertSafeFetchUrl } from '../../shared/ssrf.js';
14
15
  import { RESERVED_VARIABLE_NAMES, findReservedVariableRef } from '../../shared/variable-refs.js';
@@ -70,12 +71,16 @@ export class ToolManualService {
70
71
  workspaceService;
71
72
  accessControl;
72
73
  kbDirName;
74
+ source;
73
75
  cache;
74
76
  mcpAuthDiscovery;
75
- constructor(workspaceService, accessControl, kbDirName, now = Date.now) {
77
+ constructor(workspaceService, accessControl, kbDirName, now = Date.now,
78
+ /** Where plugins (and their MCP servers) come from — native manifests unless a dialect is configured. */
79
+ source = new KbPluginSource()) {
76
80
  this.workspaceService = workspaceService;
77
81
  this.accessControl = accessControl;
78
82
  this.kbDirName = kbDirName;
83
+ this.source = source;
79
84
  this.cache = new TtlCache(CACHE_TTL_MS, now);
80
85
  }
81
86
  /**
@@ -151,6 +156,40 @@ export class ToolManualService {
151
156
  const declared = best.manual.variables?.find((v) => v.name === best.varName);
152
157
  return declared?.scope ?? 'admin';
153
158
  }
159
+ /**
160
+ * The probe config for a manual this caller can read — the internal
161
+ * counterpart to everything on `ToolManualSummary`.
162
+ *
163
+ * Access-gated through `accessibleManuals` like every other read, so this
164
+ * cannot become a way to learn what a `.tool` you can't see declares.
165
+ */
166
+ async probeTargetFor(userEmail, slug) {
167
+ const manuals = await this.accessibleManuals(userEmail);
168
+ const m = manuals.find((x) => x.slug === slug);
169
+ if (!m)
170
+ return null;
171
+ // Built here, from the manual already in hand. `toManualCallTemplates`
172
+ // would validate every manual in the workspace to hand back the one we
173
+ // want; an invalid template for THIS manual is not an error, just a probe
174
+ // that has nothing to dial (the caller reports it as unverifiable).
175
+ //
176
+ // Only for the ONE path that dials it — an `mcp` manual, reachable from
177
+ // this process, that declared no health check of its own. Everywhere else
178
+ // the template is built, validated and thrown away, and an http tool with
179
+ // an unvalidatable template warn-logs on every probe about a value nothing
180
+ // was ever going to use.
181
+ const dialsTheTemplate = m.type === 'mcp' && !m.healthCheck && m.remote !== false;
182
+ let callTemplate = null;
183
+ if (dialsTheTemplate) {
184
+ try {
185
+ callTemplate = callTemplateSerializer.validateDict(this.buildCallTemplateDict(m));
186
+ }
187
+ catch (err) {
188
+ console.warn(`[tool-manuals] no valid call template for "${m.path}": ${err instanceof Error ? err.message : String(err)}`);
189
+ }
190
+ }
191
+ return { name: m.name, type: m.type, remote: m.remote, healthCheck: m.healthCheck, callTemplate };
192
+ }
154
193
  async toManualCallTemplates(userEmail, opts) {
155
194
  const manuals = await this.accessibleManuals(userEmail);
156
195
  const out = [];
@@ -302,13 +341,16 @@ export class ToolManualService {
302
341
  const cached = this.cache.get();
303
342
  if (cached)
304
343
  return cached;
344
+ // See `TtlCache.begin`: taken before the read so an `invalidate()` that
345
+ // lands mid-scan discards this result instead of being overwritten by it.
346
+ const token = this.cache.begin();
305
347
  const manuals = await this.scanDisk();
306
348
  await this.decorateMcpOAuth(manuals);
307
349
  // AFTER the oauth decoration, so an injected `${MCP_OAUTH}` header ref is
308
350
  // already declared and isn't re-surfaced as a bare admin key.
309
351
  for (const m of manuals)
310
352
  this.surfaceReferencedVariables(m);
311
- this.cache.set(manuals);
353
+ this.cache.set(manuals, token);
312
354
  return manuals;
313
355
  }
314
356
  /**
@@ -329,6 +371,14 @@ export class ToolManualService {
329
371
  if (m.type === 'inline' && m.tools) {
330
372
  refs.push(...variableSubstitutor.findRequiredVariables(m.tools, m.name));
331
373
  }
374
+ // A probe-only credential still has to reach the secrets UI. The call
375
+ // template is built from `url`/`headers` and never carries `healthCheck`,
376
+ // so a `${VAR}` used solely by the probe would never be surfaced for
377
+ // provisioning — and `probeDeclared` would then report `unverifiable`
378
+ // forever on a variable no screen ever offered anyone to fill in.
379
+ if (m.healthCheck) {
380
+ refs.push(...variableSubstitutor.findRequiredVariables({ url: m.healthCheck.url, headers: m.healthCheck.headers ?? {} }, m.name));
381
+ }
332
382
  }
333
383
  catch {
334
384
  return; // a malformed template is reported elsewhere; never break the scan
@@ -402,6 +452,18 @@ export class ToolManualService {
402
452
  }
403
453
  m.setup = { kind: 'oauth-auto' };
404
454
  m.headers = { ...(m.headers ?? {}), Authorization: `Bearer \${${MCP_OAUTH_VAR}}` };
455
+ // A declared healthCheck froze its headers during normalize —
456
+ // BEFORE this decoration — so it would dial without the bearer
457
+ // every real call now carries and read its own 401 as a rejected
458
+ // credential. The injected sign-in reaches the check too, unless
459
+ // the check declares its own Authorization.
460
+ if (m.healthCheck &&
461
+ !Object.keys(m.healthCheck.headers ?? {}).some((h) => h.toLowerCase() === 'authorization')) {
462
+ m.healthCheck = {
463
+ ...m.healthCheck,
464
+ headers: { ...(m.healthCheck.headers ?? {}), Authorization: `Bearer \${${MCP_OAUTH_VAR}}` },
465
+ };
466
+ }
405
467
  m.variables = [
406
468
  ...(m.variables ?? []),
407
469
  {
@@ -502,29 +564,14 @@ export class ToolManualService {
502
564
  // shape. Listed BEFORE the `.tool` files: on a name collision (a legacy
503
565
  // mcp `.tool` the migration has not converted yet), the shared dedup keeps
504
566
  // the first occurrence, and the authoritative source must be the one kept.
567
+ // The plugins (and their mcp.json text) come from the configured source, so
568
+ // a dialect that expands servers from a registry lands here unchanged.
505
569
  const parsed = [];
506
- let pluginFolders = [];
507
- try {
508
- pluginFolders = (await fs.readdir(root, { withFileTypes: true }))
509
- .filter((e) => e.isDirectory() && !e.name.startsWith('.'))
510
- .map((e) => e.name)
511
- .sort();
512
- }
513
- catch {
514
- /* no Plugins/ root — nothing to scan */
515
- }
516
- for (const folder of pluginFolders) {
517
- let mcpJson;
518
- try {
519
- mcpJson = await fs.readFile(path.join(root, folder, PLUGIN_MCP_FILE), 'utf-8');
520
- }
521
- catch {
522
- continue; // no mcp.json is the common case, not an error
523
- }
524
- const pluginJson = await fs
525
- .readFile(path.join(root, folder, PLUGIN_MANIFEST_FILE), 'utf-8')
526
- .catch(() => null);
527
- parsed.push(...descriptorsFromMcpJson(folder, mcpJson, pluginJson));
570
+ const discovered = await this.source.discover(kbRoot);
571
+ for (const plugin of discovered.plugins) {
572
+ if (plugin.mcpJsonText === null)
573
+ continue; // no servers is the common case, not an error
574
+ parsed.push(...descriptorsFromMcpJson(plugin.relFolder, plugin.mcpJsonText, plugin.manifestText));
528
575
  }
529
576
  for (const f of files) {
530
577
  let content;
@@ -747,19 +794,8 @@ export function normalizeToolManual(provisionalSlug, repoPath, content) {
747
794
  // literal internal host slips past as a templated scheme or userinfo.
748
795
  // Local-only (`remote: false`) `.tool`s are never fetched server-side, so
749
796
  // are exempt.
750
- const literalScheme = /^([a-zA-Z][a-zA-Z0-9+.-]*:)[\\/]{2}/.exec(url)?.[1];
751
- const sepMatch = /:[\\/]{2}/.exec(url);
752
- const sepIdx = sepMatch ? sepMatch.index : -1;
753
- const authority = sepIdx >= 0 ? url.slice(sepIdx + 3).split(/[/\\?#]/, 1)[0] : url;
754
- const hostPort = authority.slice(authority.lastIndexOf('@') + 1);
755
- const host = hostPort.startsWith('[') ? hostPort.slice(0, hostPort.indexOf(']') + 1) : hostPort.split(':')[0];
756
- if (descriptor.remote !== false && !host.includes('${')) {
757
- const checkUrl = literalScheme && !authority.includes('${')
758
- ? url // fully literal scheme + authority → validate the URL as-is
759
- : sepIdx >= 0
760
- ? `${literalScheme ?? 'http:'}//${host}` // templated scheme/userinfo/port, literal host
761
- : url; // no authority shape at all → parse raw (refuses malformed)
762
- assertSafeFetchUrl(checkUrl, { label: `\`.tool\` "${name}" url` });
797
+ if (descriptor.remote !== false) {
798
+ assertSafeManualFetchUrl(url, `\`.tool\` "${name}" url`);
763
799
  }
764
800
  if (obj.headers && typeof obj.headers === 'object' && !Array.isArray(obj.headers)) {
765
801
  descriptor.headers = obj.headers;
@@ -769,8 +805,133 @@ export function normalizeToolManual(provisionalSlug, repoPath, content) {
769
805
  descriptor.httpMethod = m === 'POST' ? 'POST' : 'GET';
770
806
  }
771
807
  }
808
+ // LAST, because it inherits the manual's own `headers` when it declares none
809
+ // — which is the common case, and the reason a one-line `healthCheck: {url}`
810
+ // authenticates exactly like a real call. Resolving that default here, where
811
+ // the whole descriptor is in hand, keeps the probe self-contained: nothing
812
+ // downstream has to re-derive which headers a manual would have sent.
813
+ //
814
+ // For `http`/`mcp` only. An `inline` manual's execution never sends its
815
+ // top-level `headers` — each embedded tool carries its own call template —
816
+ // so inheriting them would have the probe prove a request no real call
817
+ // makes. An inline probe declares its own headers on the healthCheck, or
818
+ // sends none.
819
+ const declaredHeaders = type !== 'inline' && obj.headers && typeof obj.headers === 'object' && !Array.isArray(obj.headers)
820
+ ? obj.headers
821
+ : undefined;
822
+ const healthCheck = normalizeHealthCheck(obj.healthCheck, name, descriptor.remote, declaredHeaders);
823
+ if (healthCheck)
824
+ descriptor.healthCheck = healthCheck;
772
825
  return descriptor;
773
826
  }
827
+ /**
828
+ * SSRF guard for a URL a `.tool` will make the SERVER fetch — its manual `url`
829
+ * and its declared `healthCheck.url` alike, which is why this is a function
830
+ * rather than an inline block: two fetch targets policed by one rule cannot
831
+ * drift apart.
832
+ *
833
+ * A remote-capable `.tool` triggers a server-side fetch (the MCP proxy, the
834
+ * in-process agent, headless routines, and now the credential probe), so a
835
+ * literal private/loopback/metadata host is refused at the producing boundary.
836
+ * Only a TEMPLATED HOSTNAME (resolved at call time) is uncheckable here — a
837
+ * `${...}` in the scheme, userinfo, port, path, or query still leaves a
838
+ * concrete network target (`${S}://169.254.169.254/x` and
839
+ * `http://${U}@169.254.169.254/x` target the metadata IP no matter what
840
+ * resolves), so the guard must still run against the literal host. The
841
+ * authority is therefore taken from `://` INDEPENDENT of the scheme being
842
+ * literal, and when the raw url can't parse (templated scheme or port) the
843
+ * check runs on a synthetic `<scheme-or-http>//host`. A BACKSLASH behaves as a
844
+ * slash for http(s) in WHATWG `new URL` — BOTH as the scheme separator
845
+ * (`${S}:\\169.254.169.254\\p` → the IP is the host) and inside the authority
846
+ * (`http://169.254.169.254\\@${HOST}/x` fetches the IP, the `\\@…` becoming
847
+ * path). So the authority separator is `:` + two `[\/]` (not just `://`), and
848
+ * `\` also terminates the authority alongside `/?#`; otherwise a literal
849
+ * internal host slips past as a templated scheme or userinfo.
850
+ *
851
+ * Callers gate on `remote !== false`: a local-only `.tool` is never fetched
852
+ * server-side, so it is exempt.
853
+ */
854
+ function assertSafeManualFetchUrl(url, label) {
855
+ const literalScheme = /^([a-zA-Z][a-zA-Z0-9+.-]*:)[\\/]{2}/.exec(url)?.[1];
856
+ const sepMatch = /:[\\/]{2}/.exec(url);
857
+ const sepIdx = sepMatch ? sepMatch.index : -1;
858
+ const authority = sepIdx >= 0 ? url.slice(sepIdx + 3).split(/[/\\?#]/, 1)[0] : url;
859
+ const hostPort = authority.slice(authority.lastIndexOf('@') + 1);
860
+ const host = hostPort.startsWith('[') ? hostPort.slice(0, hostPort.indexOf(']') + 1) : hostPort.split(':')[0];
861
+ // A templated host resolves to something we can't know yet — nothing to check.
862
+ if (host.includes('${'))
863
+ return;
864
+ const checkUrl = literalScheme && !authority.includes('${')
865
+ ? url // fully literal scheme + authority → validate the URL as-is
866
+ : sepIdx >= 0
867
+ ? `${literalScheme ?? 'http:'}//${host}` // templated scheme/userinfo/port, literal host
868
+ : url; // no authority shape at all → parse raw (refuses malformed)
869
+ assertSafeFetchUrl(checkUrl, { label });
870
+ }
871
+ /**
872
+ * Parse the optional `healthCheck:` block — the read-only call that proves this
873
+ * tool's credential works (see {@link ToolHealthCheck}).
874
+ *
875
+ * Throws on a malformed block rather than dropping it, matching `variables`
876
+ * and for the same reason inverted: a silently-ignored probe would leave the
877
+ * tool reporting "can't verify" forever while its author believes they wired
878
+ * one up, and the whole point of the field is to stop the UI overclaiming.
879
+ *
880
+ * `method` accepts only `GET`. A probe that can mutate is not a probe — it runs
881
+ * unattended on every save and re-check, so `POST` is refused outright instead
882
+ * of being quietly downgraded.
883
+ */
884
+ function normalizeHealthCheck(raw, manualName, remote, manualHeaders) {
885
+ if (raw === undefined || raw === null)
886
+ return undefined;
887
+ if (typeof raw !== 'object' || Array.isArray(raw))
888
+ throw new Error('`healthCheck` must be an object');
889
+ const e = raw;
890
+ const url = typeof e.url === 'string' ? e.url.trim() : '';
891
+ if (!url)
892
+ throw new Error('`healthCheck` must have a `url`');
893
+ if (remote !== false) {
894
+ assertSafeManualFetchUrl(url, `\`.tool\` "${manualName}" healthCheck.url`);
895
+ }
896
+ const check = { url };
897
+ if (e.method !== undefined) {
898
+ const m = typeof e.method === 'string' ? e.method.toUpperCase() : '';
899
+ if (m !== 'GET')
900
+ throw new Error('`healthCheck.method` must be `GET` — a health check may not mutate');
901
+ check.method = 'GET';
902
+ }
903
+ // Whichever headers the probe ends up carrying get checked — declared OR
904
+ // inherited. Validating only the declared branch left the common case
905
+ // unguarded: `healthCheck: { url }` alone inherits the manual's headers, so a
906
+ // YAML `Authorization: 1234` there still reached the probe untouched.
907
+ if (e.headers !== undefined) {
908
+ if (!e.headers || typeof e.headers !== 'object' || Array.isArray(e.headers)) {
909
+ throw new Error('`healthCheck.headers` must be an object');
910
+ }
911
+ check.headers = assertStringHeaders(e.headers, 'healthCheck.headers');
912
+ }
913
+ else if (manualHeaders) {
914
+ check.headers = assertStringHeaders(manualHeaders, 'headers');
915
+ }
916
+ return check;
917
+ }
918
+ /**
919
+ * The VALUES of a header map, not just its container.
920
+ *
921
+ * YAML types `Authorization: 1234` as a number, and a cast alone let it through
922
+ * to the probe, where substitution calls `.matchAll` on it — surfacing
923
+ * `text.matchAll is not a function` to the user as the reason their credential
924
+ * is unhealthy. Caught at parse time, next to `url` and `method`, it reads as
925
+ * what it is: a mistake in the `.tool` file.
926
+ */
927
+ function assertStringHeaders(headers, label) {
928
+ for (const [k, v] of Object.entries(headers)) {
929
+ if (typeof v !== 'string') {
930
+ throw new Error(`\`${label}.${k}\` must be a string (quote it if it looks like a number)`);
931
+ }
932
+ }
933
+ return headers;
934
+ }
774
935
  /**
775
936
  * Parse the optional `variables:` block of a `.tool` file. Each entry names a
776
937
  * `${VAR}` and who provisions it (`admin` default | `user`). Throws on a