@raytio/mcp-server 3.1.1 → 3.4.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 (499) hide show
  1. package/dist/capabilities/effective-capabilities.d.ts +11 -4
  2. package/dist/capabilities/effective-capabilities.d.ts.map +1 -1
  3. package/dist/capabilities/effective-capabilities.js +11 -4
  4. package/dist/capabilities/effective-capabilities.js.map +1 -1
  5. package/dist/capabilities/tool-capability.d.ts +52 -0
  6. package/dist/capabilities/tool-capability.d.ts.map +1 -0
  7. package/dist/capabilities/tool-capability.js +238 -0
  8. package/dist/capabilities/tool-capability.js.map +1 -0
  9. package/dist/generated-reads/catalogue.d.ts +80 -0
  10. package/dist/generated-reads/catalogue.d.ts.map +1 -0
  11. package/dist/generated-reads/catalogue.js +127 -0
  12. package/dist/generated-reads/catalogue.js.map +1 -0
  13. package/dist/generated-reads/guardrails.d.ts +147 -0
  14. package/dist/generated-reads/guardrails.d.ts.map +1 -0
  15. package/dist/generated-reads/guardrails.js +190 -0
  16. package/dist/generated-reads/guardrails.js.map +1 -0
  17. package/dist/generated-reads/index.d.ts +9 -0
  18. package/dist/generated-reads/index.d.ts.map +1 -0
  19. package/dist/generated-reads/index.js +5 -0
  20. package/dist/generated-reads/index.js.map +1 -0
  21. package/dist/generated-reads/query-builder.d.ts +99 -0
  22. package/dist/generated-reads/query-builder.d.ts.map +1 -0
  23. package/dist/generated-reads/query-builder.js +240 -0
  24. package/dist/generated-reads/query-builder.js.map +1 -0
  25. package/dist/generated-reads/resource-tools.d.ts +110 -0
  26. package/dist/generated-reads/resource-tools.d.ts.map +1 -0
  27. package/dist/generated-reads/resource-tools.js +280 -0
  28. package/dist/generated-reads/resource-tools.js.map +1 -0
  29. package/dist/tools/dsm/index.d.ts.map +1 -1
  30. package/dist/tools/dsm/index.js +18 -0
  31. package/dist/tools/dsm/index.js.map +1 -1
  32. package/dist/tools/ppm/activity-create.d.ts.map +1 -1
  33. package/dist/tools/ppm/activity-create.js +4 -0
  34. package/dist/tools/ppm/activity-create.js.map +1 -1
  35. package/dist/tools/ppm/activity-update.d.ts.map +1 -1
  36. package/dist/tools/ppm/activity-update.js +4 -0
  37. package/dist/tools/ppm/activity-update.js.map +1 -1
  38. package/dist/tools/ppm/external-system-list.d.ts.map +1 -1
  39. package/dist/tools/ppm/external-system-list.js +4 -0
  40. package/dist/tools/ppm/external-system-list.js.map +1 -1
  41. package/dist/tools/ppm/template-create.d.ts.map +1 -1
  42. package/dist/tools/ppm/template-create.js +4 -0
  43. package/dist/tools/ppm/template-create.js.map +1 -1
  44. package/dist/tools/ppm/template-get.d.ts.map +1 -1
  45. package/dist/tools/ppm/template-get.js +5 -0
  46. package/dist/tools/ppm/template-get.js.map +1 -1
  47. package/dist/tools/ppm/template-instantiate.d.ts.map +1 -1
  48. package/dist/tools/ppm/template-instantiate.js +4 -0
  49. package/dist/tools/ppm/template-instantiate.js.map +1 -1
  50. package/dist/tools/ppm/template-list.d.ts.map +1 -1
  51. package/dist/tools/ppm/template-list.js +4 -0
  52. package/dist/tools/ppm/template-list.js.map +1 -1
  53. package/dist/tools/ppm/template-slot-create.d.ts.map +1 -1
  54. package/dist/tools/ppm/template-slot-create.js +4 -0
  55. package/dist/tools/ppm/template-slot-create.js.map +1 -1
  56. package/dist/tools/ppm/template-slot-list.d.ts.map +1 -1
  57. package/dist/tools/ppm/template-slot-list.js +4 -0
  58. package/dist/tools/ppm/template-slot-list.js.map +1 -1
  59. package/dist/tools/ppm/work-item-activities.d.ts.map +1 -1
  60. package/dist/tools/ppm/work-item-activities.js +4 -0
  61. package/dist/tools/ppm/work-item-activities.js.map +1 -1
  62. package/dist/tools/ppm/work-item-block.d.ts.map +1 -1
  63. package/dist/tools/ppm/work-item-block.js +5 -0
  64. package/dist/tools/ppm/work-item-block.js.map +1 -1
  65. package/dist/tools/ppm/work-item-cancel.d.ts.map +1 -1
  66. package/dist/tools/ppm/work-item-cancel.js +14 -2
  67. package/dist/tools/ppm/work-item-cancel.js.map +1 -1
  68. package/dist/tools/ppm/work-item-comment.d.ts.map +1 -1
  69. package/dist/tools/ppm/work-item-comment.js +4 -0
  70. package/dist/tools/ppm/work-item-comment.js.map +1 -1
  71. package/dist/tools/ppm/work-item-complete.d.ts.map +1 -1
  72. package/dist/tools/ppm/work-item-complete.js +5 -0
  73. package/dist/tools/ppm/work-item-complete.js.map +1 -1
  74. package/dist/tools/ppm/work-item-create.d.ts.map +1 -1
  75. package/dist/tools/ppm/work-item-create.js +4 -0
  76. package/dist/tools/ppm/work-item-create.js.map +1 -1
  77. package/dist/tools/ppm/work-item-dependency-create.d.ts.map +1 -1
  78. package/dist/tools/ppm/work-item-dependency-create.js +4 -0
  79. package/dist/tools/ppm/work-item-dependency-create.js.map +1 -1
  80. package/dist/tools/ppm/work-item-dependency-list.d.ts.map +1 -1
  81. package/dist/tools/ppm/work-item-dependency-list.js +4 -0
  82. package/dist/tools/ppm/work-item-dependency-list.js.map +1 -1
  83. package/dist/tools/ppm/work-item-get.d.ts.map +1 -1
  84. package/dist/tools/ppm/work-item-get.js +4 -0
  85. package/dist/tools/ppm/work-item-get.js.map +1 -1
  86. package/dist/tools/ppm/work-item-link-create.d.ts.map +1 -1
  87. package/dist/tools/ppm/work-item-link-create.js +4 -0
  88. package/dist/tools/ppm/work-item-link-create.js.map +1 -1
  89. package/dist/tools/ppm/work-item-link-list.d.ts.map +1 -1
  90. package/dist/tools/ppm/work-item-link-list.js +4 -0
  91. package/dist/tools/ppm/work-item-link-list.js.map +1 -1
  92. package/dist/tools/ppm/work-item-list.d.ts.map +1 -1
  93. package/dist/tools/ppm/work-item-list.js +4 -0
  94. package/dist/tools/ppm/work-item-list.js.map +1 -1
  95. package/dist/tools/ppm/work-item-ready.d.ts.map +1 -1
  96. package/dist/tools/ppm/work-item-ready.js +5 -0
  97. package/dist/tools/ppm/work-item-ready.js.map +1 -1
  98. package/dist/tools/ppm/work-item-start.d.ts.map +1 -1
  99. package/dist/tools/ppm/work-item-start.js +5 -0
  100. package/dist/tools/ppm/work-item-start.js.map +1 -1
  101. package/dist/tools/ppm/work-item-tree.d.ts.map +1 -1
  102. package/dist/tools/ppm/work-item-tree.js +4 -0
  103. package/dist/tools/ppm/work-item-tree.js.map +1 -1
  104. package/dist/tools/ppm/work-item-unblock.d.ts.map +1 -1
  105. package/dist/tools/ppm/work-item-unblock.js +5 -0
  106. package/dist/tools/ppm/work-item-unblock.js.map +1 -1
  107. package/dist/tools/ppm/work-item-update-progress.d.ts.map +1 -1
  108. package/dist/tools/ppm/work-item-update-progress.js +5 -0
  109. package/dist/tools/ppm/work-item-update-progress.js.map +1 -1
  110. package/dist/tools/ppm/work-item-update.d.ts.map +1 -1
  111. package/dist/tools/ppm/work-item-update.js +4 -0
  112. package/dist/tools/ppm/work-item-update.js.map +1 -1
  113. package/dist/tools/prm/prm-party-create.d.ts.map +1 -1
  114. package/dist/tools/prm/prm-party-create.js +4 -0
  115. package/dist/tools/prm/prm-party-create.js.map +1 -1
  116. package/dist/tools/prm/prm-party-list.d.ts.map +1 -1
  117. package/dist/tools/prm/prm-party-list.js +4 -0
  118. package/dist/tools/prm/prm-party-list.js.map +1 -1
  119. package/dist/tools/registry.d.ts +68 -0
  120. package/dist/tools/registry.d.ts.map +1 -1
  121. package/dist/tools/wrm/wrm-agent-run-artifact-create.d.ts.map +1 -1
  122. package/dist/tools/wrm/wrm-agent-run-artifact-create.js +4 -0
  123. package/dist/tools/wrm/wrm-agent-run-artifact-create.js.map +1 -1
  124. package/dist/tools/wrm/wrm-agent-run-artifact-get.d.ts.map +1 -1
  125. package/dist/tools/wrm/wrm-agent-run-artifact-get.js +4 -0
  126. package/dist/tools/wrm/wrm-agent-run-artifact-get.js.map +1 -1
  127. package/dist/tools/wrm/wrm-agent-run-artifact-list.d.ts.map +1 -1
  128. package/dist/tools/wrm/wrm-agent-run-artifact-list.js +4 -0
  129. package/dist/tools/wrm/wrm-agent-run-artifact-list.js.map +1 -1
  130. package/dist/tools/wrm/wrm-agent-run-cost-summary.d.ts.map +1 -1
  131. package/dist/tools/wrm/wrm-agent-run-cost-summary.js +6 -0
  132. package/dist/tools/wrm/wrm-agent-run-cost-summary.js.map +1 -1
  133. package/dist/tools/wrm/wrm-agent-run-create.d.ts.map +1 -1
  134. package/dist/tools/wrm/wrm-agent-run-create.js +4 -0
  135. package/dist/tools/wrm/wrm-agent-run-create.js.map +1 -1
  136. package/dist/tools/wrm/wrm-agent-run-eval-create.d.ts.map +1 -1
  137. package/dist/tools/wrm/wrm-agent-run-eval-create.js +4 -0
  138. package/dist/tools/wrm/wrm-agent-run-eval-create.js.map +1 -1
  139. package/dist/tools/wrm/wrm-agent-run-eval-list.d.ts.map +1 -1
  140. package/dist/tools/wrm/wrm-agent-run-eval-list.js +4 -0
  141. package/dist/tools/wrm/wrm-agent-run-eval-list.js.map +1 -1
  142. package/dist/tools/wrm/wrm-agent-run-eval-summary.d.ts.map +1 -1
  143. package/dist/tools/wrm/wrm-agent-run-eval-summary.js +8 -0
  144. package/dist/tools/wrm/wrm-agent-run-eval-summary.js.map +1 -1
  145. package/dist/tools/wrm/wrm-agent-run-get.d.ts.map +1 -1
  146. package/dist/tools/wrm/wrm-agent-run-get.js +4 -0
  147. package/dist/tools/wrm/wrm-agent-run-get.js.map +1 -1
  148. package/dist/tools/wrm/wrm-agent-run-guardrail-result-create.d.ts.map +1 -1
  149. package/dist/tools/wrm/wrm-agent-run-guardrail-result-create.js +4 -0
  150. package/dist/tools/wrm/wrm-agent-run-guardrail-result-create.js.map +1 -1
  151. package/dist/tools/wrm/wrm-agent-run-guardrail-result-list.d.ts.map +1 -1
  152. package/dist/tools/wrm/wrm-agent-run-guardrail-result-list.js +4 -0
  153. package/dist/tools/wrm/wrm-agent-run-guardrail-result-list.js.map +1 -1
  154. package/dist/tools/wrm/wrm-agent-run-guardrail-summary.d.ts.map +1 -1
  155. package/dist/tools/wrm/wrm-agent-run-guardrail-summary.js +5 -0
  156. package/dist/tools/wrm/wrm-agent-run-guardrail-summary.js.map +1 -1
  157. package/dist/tools/wrm/wrm-agent-run-list.d.ts.map +1 -1
  158. package/dist/tools/wrm/wrm-agent-run-list.js +4 -0
  159. package/dist/tools/wrm/wrm-agent-run-list.js.map +1 -1
  160. package/dist/tools/wrm/wrm-agent-run-step-create.d.ts.map +1 -1
  161. package/dist/tools/wrm/wrm-agent-run-step-create.js +4 -0
  162. package/dist/tools/wrm/wrm-agent-run-step-create.js.map +1 -1
  163. package/dist/tools/wrm/wrm-agent-run-step-list.d.ts.map +1 -1
  164. package/dist/tools/wrm/wrm-agent-run-step-list.js +4 -0
  165. package/dist/tools/wrm/wrm-agent-run-step-list.js.map +1 -1
  166. package/dist/tools/wrm/wrm-agent-run-step-update.d.ts.map +1 -1
  167. package/dist/tools/wrm/wrm-agent-run-step-update.js +4 -0
  168. package/dist/tools/wrm/wrm-agent-run-step-update.js.map +1 -1
  169. package/dist/tools/wrm/wrm-agent-run-summary.d.ts.map +1 -1
  170. package/dist/tools/wrm/wrm-agent-run-summary.js +7 -0
  171. package/dist/tools/wrm/wrm-agent-run-summary.js.map +1 -1
  172. package/dist/tools/wrm/wrm-agent-run-update.d.ts.map +1 -1
  173. package/dist/tools/wrm/wrm-agent-run-update.js +4 -0
  174. package/dist/tools/wrm/wrm-agent-run-update.js.map +1 -1
  175. package/dist/tools/wrm/wrm-credential-list.d.ts.map +1 -1
  176. package/dist/tools/wrm/wrm-credential-list.js +4 -0
  177. package/dist/tools/wrm/wrm-credential-list.js.map +1 -1
  178. package/dist/tools/wrm/wrm-credential-request-create.d.ts.map +1 -1
  179. package/dist/tools/wrm/wrm-credential-request-create.js +14 -0
  180. package/dist/tools/wrm/wrm-credential-request-create.js.map +1 -1
  181. package/dist/tools/wrm/wrm-credential-request-status.d.ts.map +1 -1
  182. package/dist/tools/wrm/wrm-credential-request-status.js +5 -0
  183. package/dist/tools/wrm/wrm-credential-request-status.js.map +1 -1
  184. package/dist/tools/wrm/wrm-credential-retrieve.d.ts.map +1 -1
  185. package/dist/tools/wrm/wrm-credential-retrieve.js +4 -0
  186. package/dist/tools/wrm/wrm-credential-retrieve.js.map +1 -1
  187. package/dist/tools/wrm/wrm-credential-revoke.d.ts.map +1 -1
  188. package/dist/tools/wrm/wrm-credential-revoke.js +7 -0
  189. package/dist/tools/wrm/wrm-credential-revoke.js.map +1 -1
  190. package/dist/tools/wrm/wrm-domain-create.d.ts.map +1 -1
  191. package/dist/tools/wrm/wrm-domain-create.js +4 -0
  192. package/dist/tools/wrm/wrm-domain-create.js.map +1 -1
  193. package/dist/tools/wrm/wrm-domain-get.d.ts.map +1 -1
  194. package/dist/tools/wrm/wrm-domain-get.js +4 -0
  195. package/dist/tools/wrm/wrm-domain-get.js.map +1 -1
  196. package/dist/tools/wrm/wrm-domain-list.d.ts.map +1 -1
  197. package/dist/tools/wrm/wrm-domain-list.js +4 -0
  198. package/dist/tools/wrm/wrm-domain-list.js.map +1 -1
  199. package/dist/tools/wrm/wrm-domain-repository-create.d.ts.map +1 -1
  200. package/dist/tools/wrm/wrm-domain-repository-create.js +4 -0
  201. package/dist/tools/wrm/wrm-domain-repository-create.js.map +1 -1
  202. package/dist/tools/wrm/wrm-domain-repository-get.d.ts.map +1 -1
  203. package/dist/tools/wrm/wrm-domain-repository-get.js +4 -0
  204. package/dist/tools/wrm/wrm-domain-repository-get.js.map +1 -1
  205. package/dist/tools/wrm/wrm-domain-repository-list.d.ts.map +1 -1
  206. package/dist/tools/wrm/wrm-domain-repository-list.js +4 -0
  207. package/dist/tools/wrm/wrm-domain-repository-list.js.map +1 -1
  208. package/dist/tools/wrm/wrm-domain-repository-update.d.ts.map +1 -1
  209. package/dist/tools/wrm/wrm-domain-repository-update.js +4 -0
  210. package/dist/tools/wrm/wrm-domain-repository-update.js.map +1 -1
  211. package/dist/tools/wrm/wrm-domain-update.d.ts.map +1 -1
  212. package/dist/tools/wrm/wrm-domain-update.js +4 -0
  213. package/dist/tools/wrm/wrm-domain-update.js.map +1 -1
  214. package/dist/tools/wrm/wrm-effective-mcp-servers.d.ts.map +1 -1
  215. package/dist/tools/wrm/wrm-effective-mcp-servers.js +4 -0
  216. package/dist/tools/wrm/wrm-effective-mcp-servers.js.map +1 -1
  217. package/dist/tools/wrm/wrm-effective-mcp-tools.d.ts.map +1 -1
  218. package/dist/tools/wrm/wrm-effective-mcp-tools.js +4 -0
  219. package/dist/tools/wrm/wrm-effective-mcp-tools.js.map +1 -1
  220. package/dist/tools/wrm/wrm-effective-model-prefs.d.ts.map +1 -1
  221. package/dist/tools/wrm/wrm-effective-model-prefs.js +4 -0
  222. package/dist/tools/wrm/wrm-effective-model-prefs.js.map +1 -1
  223. package/dist/tools/wrm/wrm-eval-scorer-create.d.ts.map +1 -1
  224. package/dist/tools/wrm/wrm-eval-scorer-create.js +4 -0
  225. package/dist/tools/wrm/wrm-eval-scorer-create.js.map +1 -1
  226. package/dist/tools/wrm/wrm-eval-scorer-get.d.ts.map +1 -1
  227. package/dist/tools/wrm/wrm-eval-scorer-get.js +4 -0
  228. package/dist/tools/wrm/wrm-eval-scorer-get.js.map +1 -1
  229. package/dist/tools/wrm/wrm-eval-scorer-list.d.ts.map +1 -1
  230. package/dist/tools/wrm/wrm-eval-scorer-list.js +4 -0
  231. package/dist/tools/wrm/wrm-eval-scorer-list.js.map +1 -1
  232. package/dist/tools/wrm/wrm-eval-scorer-update.d.ts.map +1 -1
  233. package/dist/tools/wrm/wrm-eval-scorer-update.js +4 -0
  234. package/dist/tools/wrm/wrm-eval-scorer-update.js.map +1 -1
  235. package/dist/tools/wrm/wrm-guardrail-create.d.ts.map +1 -1
  236. package/dist/tools/wrm/wrm-guardrail-create.js +4 -0
  237. package/dist/tools/wrm/wrm-guardrail-create.js.map +1 -1
  238. package/dist/tools/wrm/wrm-guardrail-get.d.ts.map +1 -1
  239. package/dist/tools/wrm/wrm-guardrail-get.js +4 -0
  240. package/dist/tools/wrm/wrm-guardrail-get.js.map +1 -1
  241. package/dist/tools/wrm/wrm-guardrail-list.d.ts.map +1 -1
  242. package/dist/tools/wrm/wrm-guardrail-list.js +4 -0
  243. package/dist/tools/wrm/wrm-guardrail-list.js.map +1 -1
  244. package/dist/tools/wrm/wrm-guardrail-update.d.ts.map +1 -1
  245. package/dist/tools/wrm/wrm-guardrail-update.js +4 -0
  246. package/dist/tools/wrm/wrm-guardrail-update.js.map +1 -1
  247. package/dist/tools/wrm/wrm-knowledge-chunk-search.d.ts.map +1 -1
  248. package/dist/tools/wrm/wrm-knowledge-chunk-search.js +4 -0
  249. package/dist/tools/wrm/wrm-knowledge-chunk-search.js.map +1 -1
  250. package/dist/tools/wrm/wrm-knowledge-source-create.d.ts.map +1 -1
  251. package/dist/tools/wrm/wrm-knowledge-source-create.js +4 -0
  252. package/dist/tools/wrm/wrm-knowledge-source-create.js.map +1 -1
  253. package/dist/tools/wrm/wrm-knowledge-source-get.d.ts.map +1 -1
  254. package/dist/tools/wrm/wrm-knowledge-source-get.js +4 -0
  255. package/dist/tools/wrm/wrm-knowledge-source-get.js.map +1 -1
  256. package/dist/tools/wrm/wrm-knowledge-source-list.d.ts.map +1 -1
  257. package/dist/tools/wrm/wrm-knowledge-source-list.js +4 -0
  258. package/dist/tools/wrm/wrm-knowledge-source-list.js.map +1 -1
  259. package/dist/tools/wrm/wrm-knowledge-source-update.d.ts.map +1 -1
  260. package/dist/tools/wrm/wrm-knowledge-source-update.js +4 -0
  261. package/dist/tools/wrm/wrm-knowledge-source-update.js.map +1 -1
  262. package/dist/tools/wrm/wrm-mcp-server-create.d.ts.map +1 -1
  263. package/dist/tools/wrm/wrm-mcp-server-create.js +4 -0
  264. package/dist/tools/wrm/wrm-mcp-server-create.js.map +1 -1
  265. package/dist/tools/wrm/wrm-mcp-server-get.d.ts.map +1 -1
  266. package/dist/tools/wrm/wrm-mcp-server-get.js +4 -0
  267. package/dist/tools/wrm/wrm-mcp-server-get.js.map +1 -1
  268. package/dist/tools/wrm/wrm-mcp-server-list.d.ts.map +1 -1
  269. package/dist/tools/wrm/wrm-mcp-server-list.js +4 -0
  270. package/dist/tools/wrm/wrm-mcp-server-list.js.map +1 -1
  271. package/dist/tools/wrm/wrm-mcp-server-update.d.ts.map +1 -1
  272. package/dist/tools/wrm/wrm-mcp-server-update.js +4 -0
  273. package/dist/tools/wrm/wrm-mcp-server-update.js.map +1 -1
  274. package/dist/tools/wrm/wrm-mcp-tool-create.d.ts.map +1 -1
  275. package/dist/tools/wrm/wrm-mcp-tool-create.js +4 -0
  276. package/dist/tools/wrm/wrm-mcp-tool-create.js.map +1 -1
  277. package/dist/tools/wrm/wrm-mcp-tool-get.d.ts.map +1 -1
  278. package/dist/tools/wrm/wrm-mcp-tool-get.js +4 -0
  279. package/dist/tools/wrm/wrm-mcp-tool-get.js.map +1 -1
  280. package/dist/tools/wrm/wrm-mcp-tool-list.d.ts.map +1 -1
  281. package/dist/tools/wrm/wrm-mcp-tool-list.js +4 -0
  282. package/dist/tools/wrm/wrm-mcp-tool-list.js.map +1 -1
  283. package/dist/tools/wrm/wrm-mcp-tool-update.d.ts.map +1 -1
  284. package/dist/tools/wrm/wrm-mcp-tool-update.js +4 -0
  285. package/dist/tools/wrm/wrm-mcp-tool-update.js.map +1 -1
  286. package/dist/tools/wrm/wrm-memory-create.d.ts.map +1 -1
  287. package/dist/tools/wrm/wrm-memory-create.js +6 -0
  288. package/dist/tools/wrm/wrm-memory-create.js.map +1 -1
  289. package/dist/tools/wrm/wrm-memory-get.d.ts.map +1 -1
  290. package/dist/tools/wrm/wrm-memory-get.js +4 -0
  291. package/dist/tools/wrm/wrm-memory-get.js.map +1 -1
  292. package/dist/tools/wrm/wrm-memory-list.d.ts.map +1 -1
  293. package/dist/tools/wrm/wrm-memory-list.js +4 -0
  294. package/dist/tools/wrm/wrm-memory-list.js.map +1 -1
  295. package/dist/tools/wrm/wrm-memory-search.d.ts.map +1 -1
  296. package/dist/tools/wrm/wrm-memory-search.js +4 -0
  297. package/dist/tools/wrm/wrm-memory-search.js.map +1 -1
  298. package/dist/tools/wrm/wrm-memory-update.d.ts.map +1 -1
  299. package/dist/tools/wrm/wrm-memory-update.js +5 -0
  300. package/dist/tools/wrm/wrm-memory-update.js.map +1 -1
  301. package/dist/tools/wrm/wrm-model-availability-create.d.ts.map +1 -1
  302. package/dist/tools/wrm/wrm-model-availability-create.js +4 -0
  303. package/dist/tools/wrm/wrm-model-availability-create.js.map +1 -1
  304. package/dist/tools/wrm/wrm-model-availability-get.d.ts.map +1 -1
  305. package/dist/tools/wrm/wrm-model-availability-get.js +4 -0
  306. package/dist/tools/wrm/wrm-model-availability-get.js.map +1 -1
  307. package/dist/tools/wrm/wrm-model-availability-list.d.ts.map +1 -1
  308. package/dist/tools/wrm/wrm-model-availability-list.js +4 -0
  309. package/dist/tools/wrm/wrm-model-availability-list.js.map +1 -1
  310. package/dist/tools/wrm/wrm-model-availability-update.d.ts.map +1 -1
  311. package/dist/tools/wrm/wrm-model-availability-update.js +4 -0
  312. package/dist/tools/wrm/wrm-model-availability-update.js.map +1 -1
  313. package/dist/tools/wrm/wrm-model-create.d.ts.map +1 -1
  314. package/dist/tools/wrm/wrm-model-create.js +4 -0
  315. package/dist/tools/wrm/wrm-model-create.js.map +1 -1
  316. package/dist/tools/wrm/wrm-model-get.d.ts.map +1 -1
  317. package/dist/tools/wrm/wrm-model-get.js +4 -0
  318. package/dist/tools/wrm/wrm-model-get.js.map +1 -1
  319. package/dist/tools/wrm/wrm-model-list.d.ts.map +1 -1
  320. package/dist/tools/wrm/wrm-model-list.js +4 -0
  321. package/dist/tools/wrm/wrm-model-list.js.map +1 -1
  322. package/dist/tools/wrm/wrm-model-parameter-create.d.ts.map +1 -1
  323. package/dist/tools/wrm/wrm-model-parameter-create.js +4 -0
  324. package/dist/tools/wrm/wrm-model-parameter-create.js.map +1 -1
  325. package/dist/tools/wrm/wrm-model-parameter-get.d.ts.map +1 -1
  326. package/dist/tools/wrm/wrm-model-parameter-get.js +4 -0
  327. package/dist/tools/wrm/wrm-model-parameter-get.js.map +1 -1
  328. package/dist/tools/wrm/wrm-model-parameter-list.d.ts.map +1 -1
  329. package/dist/tools/wrm/wrm-model-parameter-list.js +4 -0
  330. package/dist/tools/wrm/wrm-model-parameter-list.js.map +1 -1
  331. package/dist/tools/wrm/wrm-model-parameter-update.d.ts.map +1 -1
  332. package/dist/tools/wrm/wrm-model-parameter-update.js +4 -0
  333. package/dist/tools/wrm/wrm-model-parameter-update.js.map +1 -1
  334. package/dist/tools/wrm/wrm-model-update.d.ts.map +1 -1
  335. package/dist/tools/wrm/wrm-model-update.js +4 -0
  336. package/dist/tools/wrm/wrm-model-update.js.map +1 -1
  337. package/dist/tools/wrm/wrm-platform-label-map-create.d.ts.map +1 -1
  338. package/dist/tools/wrm/wrm-platform-label-map-create.js +4 -0
  339. package/dist/tools/wrm/wrm-platform-label-map-create.js.map +1 -1
  340. package/dist/tools/wrm/wrm-platform-label-map-get.d.ts.map +1 -1
  341. package/dist/tools/wrm/wrm-platform-label-map-get.js +4 -0
  342. package/dist/tools/wrm/wrm-platform-label-map-get.js.map +1 -1
  343. package/dist/tools/wrm/wrm-platform-label-map-list.d.ts.map +1 -1
  344. package/dist/tools/wrm/wrm-platform-label-map-list.js +4 -0
  345. package/dist/tools/wrm/wrm-platform-label-map-list.js.map +1 -1
  346. package/dist/tools/wrm/wrm-platform-label-map-resolve.d.ts.map +1 -1
  347. package/dist/tools/wrm/wrm-platform-label-map-resolve.js +4 -0
  348. package/dist/tools/wrm/wrm-platform-label-map-resolve.js.map +1 -1
  349. package/dist/tools/wrm/wrm-platform-label-map-update.d.ts.map +1 -1
  350. package/dist/tools/wrm/wrm-platform-label-map-update.js +4 -0
  351. package/dist/tools/wrm/wrm-platform-label-map-update.js.map +1 -1
  352. package/dist/tools/wrm/wrm-provider-create.d.ts.map +1 -1
  353. package/dist/tools/wrm/wrm-provider-create.js +4 -0
  354. package/dist/tools/wrm/wrm-provider-create.js.map +1 -1
  355. package/dist/tools/wrm/wrm-provider-get.d.ts.map +1 -1
  356. package/dist/tools/wrm/wrm-provider-get.js +4 -0
  357. package/dist/tools/wrm/wrm-provider-get.js.map +1 -1
  358. package/dist/tools/wrm/wrm-provider-list.d.ts.map +1 -1
  359. package/dist/tools/wrm/wrm-provider-list.js +4 -0
  360. package/dist/tools/wrm/wrm-provider-list.js.map +1 -1
  361. package/dist/tools/wrm/wrm-provider-update.d.ts.map +1 -1
  362. package/dist/tools/wrm/wrm-provider-update.js +4 -0
  363. package/dist/tools/wrm/wrm-provider-update.js.map +1 -1
  364. package/dist/tools/wrm/wrm-role-create.d.ts.map +1 -1
  365. package/dist/tools/wrm/wrm-role-create.js +4 -0
  366. package/dist/tools/wrm/wrm-role-create.js.map +1 -1
  367. package/dist/tools/wrm/wrm-role-get.d.ts.map +1 -1
  368. package/dist/tools/wrm/wrm-role-get.js +4 -0
  369. package/dist/tools/wrm/wrm-role-get.js.map +1 -1
  370. package/dist/tools/wrm/wrm-role-list.d.ts.map +1 -1
  371. package/dist/tools/wrm/wrm-role-list.js +4 -0
  372. package/dist/tools/wrm/wrm-role-list.js.map +1 -1
  373. package/dist/tools/wrm/wrm-role-memory-create.d.ts.map +1 -1
  374. package/dist/tools/wrm/wrm-role-memory-create.js +4 -0
  375. package/dist/tools/wrm/wrm-role-memory-create.js.map +1 -1
  376. package/dist/tools/wrm/wrm-role-memory-get.d.ts.map +1 -1
  377. package/dist/tools/wrm/wrm-role-memory-get.js +4 -0
  378. package/dist/tools/wrm/wrm-role-memory-get.js.map +1 -1
  379. package/dist/tools/wrm/wrm-role-memory-list.d.ts.map +1 -1
  380. package/dist/tools/wrm/wrm-role-memory-list.js +4 -0
  381. package/dist/tools/wrm/wrm-role-memory-list.js.map +1 -1
  382. package/dist/tools/wrm/wrm-role-memory-search.d.ts.map +1 -1
  383. package/dist/tools/wrm/wrm-role-memory-search.js +5 -0
  384. package/dist/tools/wrm/wrm-role-memory-search.js.map +1 -1
  385. package/dist/tools/wrm/wrm-role-memory-update.d.ts.map +1 -1
  386. package/dist/tools/wrm/wrm-role-memory-update.js +4 -0
  387. package/dist/tools/wrm/wrm-role-memory-update.js.map +1 -1
  388. package/dist/tools/wrm/wrm-role-update.d.ts.map +1 -1
  389. package/dist/tools/wrm/wrm-role-update.js +4 -0
  390. package/dist/tools/wrm/wrm-role-update.js.map +1 -1
  391. package/dist/tools/wrm/wrm-sandbox-provider-create.d.ts.map +1 -1
  392. package/dist/tools/wrm/wrm-sandbox-provider-create.js +4 -0
  393. package/dist/tools/wrm/wrm-sandbox-provider-create.js.map +1 -1
  394. package/dist/tools/wrm/wrm-sandbox-provider-get.d.ts.map +1 -1
  395. package/dist/tools/wrm/wrm-sandbox-provider-get.js +4 -0
  396. package/dist/tools/wrm/wrm-sandbox-provider-get.js.map +1 -1
  397. package/dist/tools/wrm/wrm-sandbox-provider-list.d.ts.map +1 -1
  398. package/dist/tools/wrm/wrm-sandbox-provider-list.js +4 -0
  399. package/dist/tools/wrm/wrm-sandbox-provider-list.js.map +1 -1
  400. package/dist/tools/wrm/wrm-sandbox-provider-update.d.ts.map +1 -1
  401. package/dist/tools/wrm/wrm-sandbox-provider-update.js +4 -0
  402. package/dist/tools/wrm/wrm-sandbox-provider-update.js.map +1 -1
  403. package/dist/tools/wrm/wrm-worker-create.d.ts.map +1 -1
  404. package/dist/tools/wrm/wrm-worker-create.js +4 -0
  405. package/dist/tools/wrm/wrm-worker-create.js.map +1 -1
  406. package/dist/tools/wrm/wrm-worker-def-mcp-server-create.d.ts.map +1 -1
  407. package/dist/tools/wrm/wrm-worker-def-mcp-server-create.js +4 -0
  408. package/dist/tools/wrm/wrm-worker-def-mcp-server-create.js.map +1 -1
  409. package/dist/tools/wrm/wrm-worker-def-mcp-server-list.d.ts.map +1 -1
  410. package/dist/tools/wrm/wrm-worker-def-mcp-server-list.js +4 -0
  411. package/dist/tools/wrm/wrm-worker-def-mcp-server-list.js.map +1 -1
  412. package/dist/tools/wrm/wrm-worker-def-mcp-server-update.d.ts.map +1 -1
  413. package/dist/tools/wrm/wrm-worker-def-mcp-server-update.js +4 -0
  414. package/dist/tools/wrm/wrm-worker-def-mcp-server-update.js.map +1 -1
  415. package/dist/tools/wrm/wrm-worker-def-mcp-tool-create.d.ts.map +1 -1
  416. package/dist/tools/wrm/wrm-worker-def-mcp-tool-create.js +4 -0
  417. package/dist/tools/wrm/wrm-worker-def-mcp-tool-create.js.map +1 -1
  418. package/dist/tools/wrm/wrm-worker-def-mcp-tool-list.d.ts.map +1 -1
  419. package/dist/tools/wrm/wrm-worker-def-mcp-tool-list.js +4 -0
  420. package/dist/tools/wrm/wrm-worker-def-mcp-tool-list.js.map +1 -1
  421. package/dist/tools/wrm/wrm-worker-def-mcp-tool-update.d.ts.map +1 -1
  422. package/dist/tools/wrm/wrm-worker-def-mcp-tool-update.js +4 -0
  423. package/dist/tools/wrm/wrm-worker-def-mcp-tool-update.js.map +1 -1
  424. package/dist/tools/wrm/wrm-worker-def-model-pref-create.d.ts.map +1 -1
  425. package/dist/tools/wrm/wrm-worker-def-model-pref-create.js +4 -0
  426. package/dist/tools/wrm/wrm-worker-def-model-pref-create.js.map +1 -1
  427. package/dist/tools/wrm/wrm-worker-def-model-pref-list.d.ts.map +1 -1
  428. package/dist/tools/wrm/wrm-worker-def-model-pref-list.js +4 -0
  429. package/dist/tools/wrm/wrm-worker-def-model-pref-list.js.map +1 -1
  430. package/dist/tools/wrm/wrm-worker-def-model-pref-update.d.ts.map +1 -1
  431. package/dist/tools/wrm/wrm-worker-def-model-pref-update.js +4 -0
  432. package/dist/tools/wrm/wrm-worker-def-model-pref-update.js.map +1 -1
  433. package/dist/tools/wrm/wrm-worker-definition-create.d.ts.map +1 -1
  434. package/dist/tools/wrm/wrm-worker-definition-create.js +4 -0
  435. package/dist/tools/wrm/wrm-worker-definition-create.js.map +1 -1
  436. package/dist/tools/wrm/wrm-worker-definition-get.d.ts.map +1 -1
  437. package/dist/tools/wrm/wrm-worker-definition-get.js +4 -0
  438. package/dist/tools/wrm/wrm-worker-definition-get.js.map +1 -1
  439. package/dist/tools/wrm/wrm-worker-definition-list.d.ts.map +1 -1
  440. package/dist/tools/wrm/wrm-worker-definition-list.js +4 -0
  441. package/dist/tools/wrm/wrm-worker-definition-list.js.map +1 -1
  442. package/dist/tools/wrm/wrm-worker-definition-update.d.ts.map +1 -1
  443. package/dist/tools/wrm/wrm-worker-definition-update.js +4 -0
  444. package/dist/tools/wrm/wrm-worker-definition-update.js.map +1 -1
  445. package/dist/tools/wrm/wrm-worker-find-for-role.d.ts.map +1 -1
  446. package/dist/tools/wrm/wrm-worker-find-for-role.js +5 -0
  447. package/dist/tools/wrm/wrm-worker-find-for-role.js.map +1 -1
  448. package/dist/tools/wrm/wrm-worker-get.d.ts.map +1 -1
  449. package/dist/tools/wrm/wrm-worker-get.js +4 -0
  450. package/dist/tools/wrm/wrm-worker-get.js.map +1 -1
  451. package/dist/tools/wrm/wrm-worker-list.d.ts.map +1 -1
  452. package/dist/tools/wrm/wrm-worker-list.js +4 -0
  453. package/dist/tools/wrm/wrm-worker-list.js.map +1 -1
  454. package/dist/tools/wrm/wrm-worker-mcp-server-create.d.ts.map +1 -1
  455. package/dist/tools/wrm/wrm-worker-mcp-server-create.js +4 -0
  456. package/dist/tools/wrm/wrm-worker-mcp-server-create.js.map +1 -1
  457. package/dist/tools/wrm/wrm-worker-mcp-server-list.d.ts.map +1 -1
  458. package/dist/tools/wrm/wrm-worker-mcp-server-list.js +4 -0
  459. package/dist/tools/wrm/wrm-worker-mcp-server-list.js.map +1 -1
  460. package/dist/tools/wrm/wrm-worker-mcp-server-update.d.ts.map +1 -1
  461. package/dist/tools/wrm/wrm-worker-mcp-server-update.js +4 -0
  462. package/dist/tools/wrm/wrm-worker-mcp-server-update.js.map +1 -1
  463. package/dist/tools/wrm/wrm-worker-mcp-tool-create.d.ts.map +1 -1
  464. package/dist/tools/wrm/wrm-worker-mcp-tool-create.js +4 -0
  465. package/dist/tools/wrm/wrm-worker-mcp-tool-create.js.map +1 -1
  466. package/dist/tools/wrm/wrm-worker-mcp-tool-list.d.ts.map +1 -1
  467. package/dist/tools/wrm/wrm-worker-mcp-tool-list.js +4 -0
  468. package/dist/tools/wrm/wrm-worker-mcp-tool-list.js.map +1 -1
  469. package/dist/tools/wrm/wrm-worker-mcp-tool-update.d.ts.map +1 -1
  470. package/dist/tools/wrm/wrm-worker-mcp-tool-update.js +4 -0
  471. package/dist/tools/wrm/wrm-worker-mcp-tool-update.js.map +1 -1
  472. package/dist/tools/wrm/wrm-worker-model-pref-create.d.ts.map +1 -1
  473. package/dist/tools/wrm/wrm-worker-model-pref-create.js +4 -0
  474. package/dist/tools/wrm/wrm-worker-model-pref-create.js.map +1 -1
  475. package/dist/tools/wrm/wrm-worker-model-pref-list.d.ts.map +1 -1
  476. package/dist/tools/wrm/wrm-worker-model-pref-list.js +4 -0
  477. package/dist/tools/wrm/wrm-worker-model-pref-list.js.map +1 -1
  478. package/dist/tools/wrm/wrm-worker-model-pref-update.d.ts.map +1 -1
  479. package/dist/tools/wrm/wrm-worker-model-pref-update.js +4 -0
  480. package/dist/tools/wrm/wrm-worker-model-pref-update.js.map +1 -1
  481. package/dist/tools/wrm/wrm-worker-resolve-config.d.ts.map +1 -1
  482. package/dist/tools/wrm/wrm-worker-resolve-config.js +13 -0
  483. package/dist/tools/wrm/wrm-worker-resolve-config.js.map +1 -1
  484. package/dist/tools/wrm/wrm-worker-role-assignment-create.d.ts.map +1 -1
  485. package/dist/tools/wrm/wrm-worker-role-assignment-create.js +4 -0
  486. package/dist/tools/wrm/wrm-worker-role-assignment-create.js.map +1 -1
  487. package/dist/tools/wrm/wrm-worker-role-assignment-get.d.ts.map +1 -1
  488. package/dist/tools/wrm/wrm-worker-role-assignment-get.js +4 -0
  489. package/dist/tools/wrm/wrm-worker-role-assignment-get.js.map +1 -1
  490. package/dist/tools/wrm/wrm-worker-role-assignment-list.d.ts.map +1 -1
  491. package/dist/tools/wrm/wrm-worker-role-assignment-list.js +4 -0
  492. package/dist/tools/wrm/wrm-worker-role-assignment-list.js.map +1 -1
  493. package/dist/tools/wrm/wrm-worker-role-assignment-update.d.ts.map +1 -1
  494. package/dist/tools/wrm/wrm-worker-role-assignment-update.js +4 -0
  495. package/dist/tools/wrm/wrm-worker-role-assignment-update.js.map +1 -1
  496. package/dist/tools/wrm/wrm-worker-update.d.ts.map +1 -1
  497. package/dist/tools/wrm/wrm-worker-update.js +4 -0
  498. package/dist/tools/wrm/wrm-worker-update.js.map +1 -1
  499. package/package.json +1 -1
@@ -0,0 +1,240 @@
1
+ /**
2
+ * PostgREST query builder for the schema-driven bounded read framework.
3
+ *
4
+ * The builder is the single choke point that turns caller-supplied
5
+ * filter/order/select/pagination input into a validated PostgREST URL.
6
+ * Every value that could influence the outbound URL is checked against
7
+ * the resource's declared capability allowlists BEFORE it is placed in
8
+ * the query — an unknown filter field, an unsupported operator, an
9
+ * unlisted order field, or a bogus select column is a hard input error,
10
+ * not something we silently forward.
11
+ *
12
+ * Safety contract, enforced here so the generated tools never have to
13
+ * hand-write it:
14
+ *
15
+ * - Endpoint is fixed to the resource's `public_endpoint`; callers
16
+ * cannot influence it.
17
+ * - `select` is either the full field list or a caller-provided subset,
18
+ * always constrained to declared fields. No dotted paths, no
19
+ * parentheses — so no embedded resource traversal
20
+ * (`select=id,foo(bar)`).
21
+ * - Filters are `{field, op, value(s)}` — the operator is compared
22
+ * against `filter_capabilities.supported_operators`, the field
23
+ * against `filter_capabilities.filterable_fields`.
24
+ * - `order` is `{field, direction}` — the field must be in
25
+ * `order_capabilities.orderable_fields`; direction is `asc` | `desc`;
26
+ * optional `nulls` is `first` | `last`.
27
+ * - `limit` is clamped to {@link MAX_LIMIT} (200); `offset` must be
28
+ * non-negative. Every response advertises `next_offset` so callers
29
+ * cannot accidentally issue an unbounded scan.
30
+ */
31
+ import { isSensitiveField } from './guardrails.js';
32
+ /** Server-side ceiling. No caller can ask for more rows per page. */
33
+ export const MAX_LIMIT = 200;
34
+ /** Default page size when the caller does not supply one. */
35
+ export const DEFAULT_LIMIT = 50;
36
+ /** Direction values PostgREST accepts on an `order` clause. */
37
+ export const ORDER_DIRECTIONS = ['asc', 'desc'];
38
+ /** Nulls-placement modifiers PostgREST accepts on an `order` clause. */
39
+ export const ORDER_NULLS = ['first', 'last'];
40
+ export class QueryBuilderError extends Error {
41
+ constructor(message) {
42
+ super(message);
43
+ this.name = 'QueryBuilderError';
44
+ }
45
+ }
46
+ /**
47
+ * Field names must be simple PostgREST-safe identifiers. This blocks
48
+ * dotted traversal, embedded resources, cast operators, and quoted
49
+ * relations from ever reaching the wire, even if the same string
50
+ * accidentally slipped into an allowlist.
51
+ */
52
+ const FIELD_NAME_RE = /^[a-z_][a-z0-9_]*$/i;
53
+ function assertSimpleFieldName(field, where) {
54
+ if (!FIELD_NAME_RE.test(field)) {
55
+ throw new QueryBuilderError(`${where} field "${field}" is not a simple identifier (dotted traversal / embedding is not supported).`);
56
+ }
57
+ }
58
+ function resourceFieldNames(resource) {
59
+ return resource.fields.map((f) => f.name);
60
+ }
61
+ function assertAllowedField(field, allowed, where) {
62
+ assertSimpleFieldName(field, where);
63
+ if (isSensitiveField(field)) {
64
+ // Belt-and-braces: even if a caller's allowlist includes a
65
+ // secret-shaped name (e.g. sensitive resource opted in via
66
+ // `includeSensitive`), the field must never reach the wire.
67
+ throw new QueryBuilderError(`${where} field "${field}" is redacted by the sensitive-field guardrail and cannot be requested.`);
68
+ }
69
+ if (!allowed.includes(field)) {
70
+ throw new QueryBuilderError(`${where} field "${field}" is not in the resource allowlist.`);
71
+ }
72
+ }
73
+ function assertAllowedOperator(op, supported) {
74
+ if (!/^[a-z]+$/.test(op)) {
75
+ throw new QueryBuilderError(`Filter operator "${op}" is not a lowercase identifier.`);
76
+ }
77
+ if (!supported.includes(op)) {
78
+ throw new QueryBuilderError(`Filter operator "${op}" is not supported by this resource.`);
79
+ }
80
+ }
81
+ function encodeScalar(value) {
82
+ if (value === null)
83
+ return 'null';
84
+ if (typeof value === 'boolean')
85
+ return value ? 'true' : 'false';
86
+ if (typeof value === 'number') {
87
+ if (!Number.isFinite(value)) {
88
+ throw new QueryBuilderError(`Non-finite number in filter value: ${String(value)}`);
89
+ }
90
+ return String(value);
91
+ }
92
+ if (typeof value === 'string') {
93
+ // PostgREST treats `.` and `,` as syntactic in the value position.
94
+ // Wrap in double-quotes when the raw value could confuse the parser.
95
+ if (/[.,()"]/.test(value)) {
96
+ return `"${value.replace(/"/g, '""')}"`;
97
+ }
98
+ return value;
99
+ }
100
+ throw new QueryBuilderError(`Unsupported filter value type: ${typeof value}`);
101
+ }
102
+ function encodeFilterValue(clause) {
103
+ if (clause.op === 'in') {
104
+ if (!Array.isArray(clause.values) || clause.values.length === 0) {
105
+ throw new QueryBuilderError('`in` filter requires a non-empty `values` array.');
106
+ }
107
+ return `in.(${clause.values.map(encodeScalar).join(',')})`;
108
+ }
109
+ if (clause.values !== undefined) {
110
+ throw new QueryBuilderError(`Filter op "${clause.op}" takes a single \`value\`; \`values\` is only for \`in\`.`);
111
+ }
112
+ if (clause.value === undefined) {
113
+ throw new QueryBuilderError(`Filter op "${clause.op}" requires a \`value\`.`);
114
+ }
115
+ if (clause.op === 'is') {
116
+ // PostgREST `is` allows only null / true / false / unknown — enforce.
117
+ const literals = new Set(['null', 'true', 'false', 'unknown']);
118
+ const encoded = encodeScalar(clause.value);
119
+ if (!literals.has(encoded)) {
120
+ throw new QueryBuilderError(`\`is\` filter accepts only null/true/false/unknown; got ${encoded}.`);
121
+ }
122
+ return `is.${encoded}`;
123
+ }
124
+ return `${clause.op}.${encodeScalar(clause.value)}`;
125
+ }
126
+ function normaliseLimit(input) {
127
+ const raw = input ?? DEFAULT_LIMIT;
128
+ if (!Number.isInteger(raw) || raw <= 0) {
129
+ throw new QueryBuilderError(`limit must be a positive integer; got ${raw}.`);
130
+ }
131
+ return Math.min(raw, MAX_LIMIT);
132
+ }
133
+ function normaliseOffset(input) {
134
+ const raw = input ?? 0;
135
+ if (!Number.isInteger(raw) || raw < 0) {
136
+ throw new QueryBuilderError(`offset must be a non-negative integer; got ${raw}.`);
137
+ }
138
+ return raw;
139
+ }
140
+ function buildSelectValue(select, resource) {
141
+ const allowed = resourceFieldNames(resource);
142
+ // Drop sensitive-looking columns from the default projection so a
143
+ // caller that omits `select` never lands on a redacted field. When a
144
+ // caller supplies an explicit `select`, assertAllowedField rejects any
145
+ // sensitive name outright — the two paths converge on the same rule.
146
+ const visible = allowed.filter((n) => !isSensitiveField(n));
147
+ if (!select || select.length === 0) {
148
+ return visible.join(',');
149
+ }
150
+ const seen = new Set();
151
+ const out = [];
152
+ for (const field of select) {
153
+ assertAllowedField(field, allowed, 'select');
154
+ if (seen.has(field))
155
+ continue;
156
+ seen.add(field);
157
+ out.push(field);
158
+ }
159
+ return out.join(',');
160
+ }
161
+ function buildOrderValue(order, resource) {
162
+ if (!order || order.length === 0)
163
+ return undefined;
164
+ const allowed = resource.order_capabilities.orderable_fields;
165
+ const parts = [];
166
+ for (const clause of order) {
167
+ assertAllowedField(clause.field, allowed, 'order');
168
+ const direction = clause.direction ?? 'asc';
169
+ if (!ORDER_DIRECTIONS.includes(direction)) {
170
+ throw new QueryBuilderError(`Order direction "${direction}" must be one of: ${ORDER_DIRECTIONS.join(', ')}.`);
171
+ }
172
+ let part = `${clause.field}.${direction}`;
173
+ if (clause.nulls !== undefined) {
174
+ if (!ORDER_NULLS.includes(clause.nulls)) {
175
+ throw new QueryBuilderError(`Order nulls "${clause.nulls}" must be one of: ${ORDER_NULLS.join(', ')}.`);
176
+ }
177
+ part += `.nulls${clause.nulls}`;
178
+ }
179
+ parts.push(part);
180
+ }
181
+ return parts.join(',');
182
+ }
183
+ /**
184
+ * Build a validated PostgREST list-query. Throws {@link QueryBuilderError}
185
+ * on any input that would breach the resource's declared safety envelope.
186
+ */
187
+ export function buildListQuery(resource, input) {
188
+ const query = {};
189
+ query.select = buildSelectValue(input.select, resource);
190
+ if (input.filters) {
191
+ const filterable = resource.filter_capabilities.filterable_fields;
192
+ const operators = resource.filter_capabilities.supported_operators;
193
+ for (const clause of input.filters) {
194
+ assertAllowedField(clause.field, filterable, 'filter');
195
+ assertAllowedOperator(clause.op, operators);
196
+ const encoded = encodeFilterValue(clause);
197
+ // Multiple filters on the same field are permitted (e.g. gt + lt).
198
+ // We rely on the api-client's URLSearchParams encoder to preserve
199
+ // insertion order for repeated keys, but PostgREST is order-agnostic.
200
+ const existing = query[clause.field];
201
+ query[clause.field] = existing === undefined ? encoded : `${existing},${encoded}`;
202
+ }
203
+ }
204
+ const orderValue = buildOrderValue(input.order, resource);
205
+ if (orderValue !== undefined) {
206
+ query.order = orderValue;
207
+ }
208
+ const limit = normaliseLimit(input.limit);
209
+ const offset = normaliseOffset(input.offset);
210
+ query.limit = String(limit);
211
+ if (offset > 0)
212
+ query.offset = String(offset);
213
+ return { path: resource.public_endpoint, query, limit, offset };
214
+ }
215
+ /**
216
+ * Build a validated PostgREST get-by-primary-key query. Resources with
217
+ * a composite primary key are not supported here — the caller must check
218
+ * {@link isSingletonPrimaryKey} before invoking.
219
+ */
220
+ export function buildGetQuery(resource, input) {
221
+ if (!isSingletonPrimaryKey(resource)) {
222
+ throw new QueryBuilderError(`Resource "${resource.resource_id}" has no scalar primary key; get-by-id is not supported.`);
223
+ }
224
+ const pkColumn = resource.primary_key;
225
+ if (typeof input.id !== 'string' || input.id.length === 0) {
226
+ throw new QueryBuilderError('`id` must be a non-empty string.');
227
+ }
228
+ const select = buildSelectValue(input.select, resource);
229
+ const query = {
230
+ select,
231
+ [pkColumn]: `eq.${encodeScalar(input.id)}`,
232
+ limit: '1',
233
+ };
234
+ return { path: resource.public_endpoint, query, limit: 1, offset: 0 };
235
+ }
236
+ /** `true` iff the resource's primary key is a single scalar column. */
237
+ export function isSingletonPrimaryKey(resource) {
238
+ return typeof resource.primary_key === 'string' && resource.primary_key.length > 0;
239
+ }
240
+ //# sourceMappingURL=query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/generated-reads/query-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Factory that turns one pinned {@link PersistResource} into the three
3
+ * generated read tools:
4
+ *
5
+ * `<resource_id>_describe` — no-args tool that returns the resource
6
+ * metadata (fields, filter/order allowlists, primary key, permission,
7
+ * sensitivity, side-effect markers, allowed CRUD operations).
8
+ *
9
+ * `<resource_id>_list` — bounded list/search. Allowed filters, order
10
+ * fields, and select subset are derived from the same contract; the
11
+ * query builder enforces the safety envelope before any HTTP call.
12
+ *
13
+ * `<resource_id>_get` — get-by-primary-key. Omitted for resources with
14
+ * no scalar primary key.
15
+ *
16
+ * Every generated tool declares its capability requirement from the
17
+ * resource's `permission.resource_group` / `permission.resource_name`
18
+ * at `SELECT@OWN_RECORDS`. The describe tool declares no capability —
19
+ * metadata is safe to advertise even to callers without SELECT rights,
20
+ * but returns a fixed shape the caller can plan against.
21
+ *
22
+ * Tools returned by this factory are pure functions of the input
23
+ * resource. Two calls with equal input produce byte-for-byte identical
24
+ * `name`, `description`, and JSON-Schema output — the deterministic-
25
+ * metadata acceptance criterion for WI-0003500.
26
+ */
27
+ import type { PersistResource } from '../contracts/persist-resource-contract.js';
28
+ import { Tool } from '../tools/registry.js';
29
+ /** Stable error codes emitted by generated read tools. */
30
+ export declare const GENERATED_READ_ERRORS: {
31
+ readonly INPUT: "GENERATED_READ_INPUT";
32
+ readonly UPSTREAM: "GENERATED_READ_UPSTREAM";
33
+ readonly NOT_FOUND: "GENERATED_READ_NOT_FOUND";
34
+ };
35
+ /** Shape emitted on a successful list call. */
36
+ export interface GeneratedListResponse<T = unknown> {
37
+ resource_id: string;
38
+ items: T[];
39
+ count: number;
40
+ limit: number;
41
+ offset: number;
42
+ /** Set when the previous page hit the effective limit. Null on the last page. */
43
+ next_offset: number | null;
44
+ }
45
+ /** Shape emitted by the describe tool. */
46
+ export interface GeneratedDescribeResponse {
47
+ resource_id: string;
48
+ module: string;
49
+ table: string;
50
+ schema_name: string | null;
51
+ schema_version: string | null;
52
+ public_endpoint: string;
53
+ primary_key: string | string[] | null;
54
+ title: string | null;
55
+ title_plural: string | null;
56
+ description: string | null;
57
+ operations: readonly string[];
58
+ sensitivity: PersistResource['sensitivity'];
59
+ side_effects: readonly string[];
60
+ permission: PersistResource['permission'];
61
+ fields: PersistResource['fields'];
62
+ filter_capabilities: PersistResource['filter_capabilities'];
63
+ order_capabilities: PersistResource['order_capabilities'];
64
+ read_limits: {
65
+ default: number;
66
+ max: number;
67
+ };
68
+ /**
69
+ * Guardrail metadata surfaced so callers understand the safety
70
+ * envelope enforced by this tool bundle before they plan a query.
71
+ */
72
+ guardrails: {
73
+ /** `SELECT@OWN_RECORDS` — every generated read enforces this. */
74
+ scope: 'OWN_RECORDS';
75
+ /** `true` iff this bundle was materialised for a sensitive resource. */
76
+ sensitive: boolean;
77
+ /** Field names redacted from every response and rejected in `select`. */
78
+ redacted_fields: readonly string[];
79
+ /**
80
+ * PostgREST operations declared on the resource but never surfaced
81
+ * by the generator (writes must be dedicated tools with explicit
82
+ * confirmation and idempotency semantics).
83
+ */
84
+ write_operations_blocked: readonly string[];
85
+ };
86
+ }
87
+ /** Bundle returned per resource. */
88
+ export interface GeneratedResourceTools {
89
+ describe: Tool;
90
+ list: Tool;
91
+ /** `null` when the resource has no scalar primary key. */
92
+ get: Tool | null;
93
+ }
94
+ /**
95
+ * Produce the describe/list/get triple for a single pinned resource.
96
+ *
97
+ * The output is deterministic — tool names, descriptions, and schema
98
+ * bodies depend only on the resource fields, so two invocations with an
99
+ * equal input yield equal tools. The doc generator relies on this.
100
+ *
101
+ * A hard guardrail refuses to build tools for a resource that
102
+ * {@link evaluateResourceEligibility} rejects with a `side_effects` reason:
103
+ * generic CRUD around a side-effecting resource is prohibited, and no
104
+ * caller-passed opt-in changes that. Sensitive resources reach this
105
+ * function only when the catalogue explicitly opts in via
106
+ * `includeSensitive`; the sensitivity marker is preserved on the
107
+ * describe payload so downstream tooling still knows to warn.
108
+ */
109
+ export declare function buildResourceTools(resource: PersistResource): GeneratedResourceTools;
110
+ //# sourceMappingURL=resource-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-tools.d.ts","sourceRoot":"","sources":["../../src/generated-reads/resource-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,IAAI,EAAe,MAAM,sBAAsB,CAAC;AAoBzD,0DAA0D;AAC1D,eAAO,MAAM,qBAAqB;;;;CAIxB,CAAC;AAEX,+CAA+C;AAC/C,MAAM,WAAW,qBAAqB,CAAC,CAAC,GAAG,OAAO;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,0CAA0C;AAC1C,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACtC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;IAC5C,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAC1C,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAClC,mBAAmB,EAAE,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAC5D,kBAAkB,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC;IAC1D,WAAW,EAAE;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF;;;OAGG;IACH,UAAU,EAAE;QACV,iEAAiE;QACjE,KAAK,EAAE,aAAa,CAAC;QACrB,wEAAwE;QACxE,SAAS,EAAE,OAAO,CAAC;QACnB,yEAAyE;QACzE,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;QACnC;;;;WAIG;QACH,wBAAwB,EAAE,SAAS,MAAM,EAAE,CAAC;KAC7C,CAAC;CACH;AAED,oCAAoC;AACpC,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,0DAA0D;IAC1D,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC;CAClB;AA8PD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,sBAAsB,CAwCpF"}
@@ -0,0 +1,280 @@
1
+ /**
2
+ * Factory that turns one pinned {@link PersistResource} into the three
3
+ * generated read tools:
4
+ *
5
+ * `<resource_id>_describe` — no-args tool that returns the resource
6
+ * metadata (fields, filter/order allowlists, primary key, permission,
7
+ * sensitivity, side-effect markers, allowed CRUD operations).
8
+ *
9
+ * `<resource_id>_list` — bounded list/search. Allowed filters, order
10
+ * fields, and select subset are derived from the same contract; the
11
+ * query builder enforces the safety envelope before any HTTP call.
12
+ *
13
+ * `<resource_id>_get` — get-by-primary-key. Omitted for resources with
14
+ * no scalar primary key.
15
+ *
16
+ * Every generated tool declares its capability requirement from the
17
+ * resource's `permission.resource_group` / `permission.resource_name`
18
+ * at `SELECT@OWN_RECORDS`. The describe tool declares no capability —
19
+ * metadata is safe to advertise even to callers without SELECT rights,
20
+ * but returns a fixed shape the caller can plan against.
21
+ *
22
+ * Tools returned by this factory are pure functions of the input
23
+ * resource. Two calls with equal input produce byte-for-byte identical
24
+ * `name`, `description`, and JSON-Schema output — the deterministic-
25
+ * metadata acceptance criterion for WI-0003500.
26
+ */
27
+ import { z } from 'zod';
28
+ import { errorResponse, successResponse } from '../tools/types.js';
29
+ import { buildGetQuery, buildListQuery, DEFAULT_LIMIT, isSingletonPrimaryKey, MAX_LIMIT, QueryBuilderError, } from './query-builder.js';
30
+ import { assertNoAutoGeneratedWrites, hasSideEffects, isSensitiveResource, redactRow, redactRows, sensitiveFieldNames, } from './guardrails.js';
31
+ /** Stable error codes emitted by generated read tools. */
32
+ export const GENERATED_READ_ERRORS = {
33
+ INPUT: 'GENERATED_READ_INPUT',
34
+ UPSTREAM: 'GENERATED_READ_UPSTREAM',
35
+ NOT_FOUND: 'GENERATED_READ_NOT_FOUND',
36
+ };
37
+ const scalarFilterValueSchema = z.union([
38
+ z.string(),
39
+ z.number(),
40
+ z.boolean(),
41
+ z.null(),
42
+ ]);
43
+ const filterClauseSchema = z.object({
44
+ field: z.string().min(1),
45
+ op: z.string().min(1),
46
+ value: scalarFilterValueSchema.optional(),
47
+ values: z.array(scalarFilterValueSchema).optional(),
48
+ });
49
+ const orderClauseSchema = z.object({
50
+ field: z.string().min(1),
51
+ direction: z.enum(['asc', 'desc']).optional(),
52
+ nulls: z.enum(['first', 'last']).optional(),
53
+ });
54
+ function listInputSchema(resource) {
55
+ const filterable = resource.filter_capabilities.filterable_fields;
56
+ const operators = resource.filter_capabilities.supported_operators;
57
+ const orderable = resource.order_capabilities.orderable_fields;
58
+ const fieldNames = resource.fields.map((f) => f.name);
59
+ return z
60
+ .object({
61
+ filters: z
62
+ .array(filterClauseSchema)
63
+ .max(20)
64
+ .optional()
65
+ .describe(`Filter clauses. Allowed fields: [${filterable.join(', ')}]. ` +
66
+ `Allowed ops: [${operators.join(', ')}]. Use \`values\` (array) for op=in; use \`value\` (scalar) otherwise.`),
67
+ order: z
68
+ .array(orderClauseSchema)
69
+ .max(4)
70
+ .optional()
71
+ .describe(`Order clauses. Allowed fields: [${orderable.join(', ')}]. direction=asc|desc (default asc); optional nulls=first|last.`),
72
+ select: z
73
+ .array(z.string().min(1))
74
+ .max(fieldNames.length)
75
+ .optional()
76
+ .describe(`Optional projection (subset of resource fields). Full field list: [${fieldNames.join(', ')}]. Embedded resources are not supported.`),
77
+ limit: z
78
+ .number()
79
+ .int()
80
+ .positive()
81
+ .optional()
82
+ .describe(`Page size (default ${DEFAULT_LIMIT}, hard maximum ${MAX_LIMIT}).`),
83
+ offset: z
84
+ .number()
85
+ .int()
86
+ .nonnegative()
87
+ .optional()
88
+ .describe('Offset for pagination (default 0).'),
89
+ })
90
+ .strict();
91
+ }
92
+ function getInputSchema(resource) {
93
+ const pk = resource.primary_key;
94
+ const fieldNames = resource.fields.map((f) => f.name);
95
+ return z
96
+ .object({
97
+ id: z.string().min(1).describe(`Primary-key value for the \`${pk}\` column.`),
98
+ select: z
99
+ .array(z.string().min(1))
100
+ .max(fieldNames.length)
101
+ .optional()
102
+ .describe(`Optional projection (subset of resource fields). Full field list: [${fieldNames.join(', ')}]. Embedded resources are not supported.`),
103
+ })
104
+ .strict();
105
+ }
106
+ function describeInputSchema() {
107
+ return z.object({}).strict();
108
+ }
109
+ function selectCapability(resource) {
110
+ return {
111
+ resourceGroup: resource.permission.resource_group,
112
+ resourceName: resource.permission.resource_name,
113
+ operation: 'SELECT',
114
+ scope: 'OWN_RECORDS',
115
+ };
116
+ }
117
+ function humanLabel(resource) {
118
+ return (resource.title_plural ??
119
+ resource.title ??
120
+ resource.resource_id.replace(/_/g, ' '));
121
+ }
122
+ function humanSingular(resource) {
123
+ return resource.title ?? resource.resource_id.replace(/_/g, ' ');
124
+ }
125
+ function describeDescription(resource) {
126
+ return (`Describe the \`${resource.resource_id}\` resource: fields, allowed filter operators, ` +
127
+ `orderable fields, primary key, sensitivity, and required permission. Metadata-only — ` +
128
+ `does not read any rows. Call this before ${resource.resource_id}_list to plan a query.`);
129
+ }
130
+ function listDescription(resource) {
131
+ return (`List/search \`${humanLabel(resource)}\` (${resource.public_endpoint}) with bounded ` +
132
+ `pagination and validated filter/order/select clauses. Server clamps limit to ${MAX_LIMIT}; ` +
133
+ `embedded traversal is not supported. Filters and order fields must come from the ` +
134
+ `resource's declared capabilities — call ${resource.resource_id}_describe first if unsure.`);
135
+ }
136
+ function getDescription(resource) {
137
+ const pk = resource.primary_key;
138
+ return (`Fetch a single \`${humanSingular(resource)}\` from ${resource.public_endpoint} by ` +
139
+ `its \`${pk}\` primary key. Returns the full row (or a caller-selected projection). ` +
140
+ `Bounded (limit 1) — cannot fan out.`);
141
+ }
142
+ async function callListHandler(resource, args, ctx) {
143
+ let built;
144
+ try {
145
+ built = buildListQuery(resource, args);
146
+ }
147
+ catch (error) {
148
+ if (error instanceof QueryBuilderError) {
149
+ return errorResponse(GENERATED_READ_ERRORS.INPUT, error.message, {
150
+ resource_id: resource.resource_id,
151
+ });
152
+ }
153
+ throw error;
154
+ }
155
+ try {
156
+ const items = await ctx.apiClient.get(`${ctx.apiClient.dbBasePath}${built.path}`, { query: built.query });
157
+ // Defence-in-depth: even though the select allowlist already
158
+ // excludes sensitive fields, redact the returned rows before
159
+ // handing them to the caller. Catches upstream shape changes and
160
+ // PostgREST default projections.
161
+ const redacted = redactRows(items);
162
+ const next_offset = redacted.length === built.limit ? built.offset + built.limit : null;
163
+ return successResponse({
164
+ resource_id: resource.resource_id,
165
+ items: redacted,
166
+ count: redacted.length,
167
+ limit: built.limit,
168
+ offset: built.offset,
169
+ next_offset,
170
+ });
171
+ }
172
+ catch (error) {
173
+ return errorResponse(GENERATED_READ_ERRORS.UPSTREAM, `Failed to list ${resource.resource_id}: ${error.message}`, { resource_id: resource.resource_id });
174
+ }
175
+ }
176
+ async function callGetHandler(resource, args, ctx) {
177
+ let built;
178
+ try {
179
+ built = buildGetQuery(resource, args);
180
+ }
181
+ catch (error) {
182
+ if (error instanceof QueryBuilderError) {
183
+ return errorResponse(GENERATED_READ_ERRORS.INPUT, error.message, {
184
+ resource_id: resource.resource_id,
185
+ });
186
+ }
187
+ throw error;
188
+ }
189
+ try {
190
+ const rows = await ctx.apiClient.get(`${ctx.apiClient.dbBasePath}${built.path}`, { query: built.query });
191
+ if (!Array.isArray(rows) || rows.length === 0) {
192
+ return errorResponse(GENERATED_READ_ERRORS.NOT_FOUND, `No ${humanSingular(resource)} with id "${args.id}".`, { resource_id: resource.resource_id });
193
+ }
194
+ return successResponse(redactRow(rows[0]));
195
+ }
196
+ catch (error) {
197
+ return errorResponse(GENERATED_READ_ERRORS.UPSTREAM, `Failed to get ${resource.resource_id}: ${error.message}`, { resource_id: resource.resource_id });
198
+ }
199
+ }
200
+ function describeHandler(resource) {
201
+ const redacted = sensitiveFieldNames(resource);
202
+ const writeOperationsBlocked = resource.operations.filter((op) => op === 'create' || op === 'update' || op === 'delete');
203
+ const payload = {
204
+ resource_id: resource.resource_id,
205
+ module: resource.module,
206
+ table: resource.table,
207
+ schema_name: resource.schema_name,
208
+ schema_version: resource.schema_version,
209
+ public_endpoint: resource.public_endpoint,
210
+ primary_key: resource.primary_key,
211
+ title: resource.title,
212
+ title_plural: resource.title_plural,
213
+ description: resource.description,
214
+ operations: resource.operations,
215
+ sensitivity: resource.sensitivity,
216
+ side_effects: resource.side_effects,
217
+ permission: resource.permission,
218
+ fields: resource.fields,
219
+ filter_capabilities: resource.filter_capabilities,
220
+ order_capabilities: resource.order_capabilities,
221
+ read_limits: { default: DEFAULT_LIMIT, max: MAX_LIMIT },
222
+ guardrails: {
223
+ scope: 'OWN_RECORDS',
224
+ sensitive: isSensitiveResource(resource),
225
+ redacted_fields: redacted,
226
+ write_operations_blocked: writeOperationsBlocked,
227
+ },
228
+ };
229
+ return async () => successResponse(payload);
230
+ }
231
+ /**
232
+ * Produce the describe/list/get triple for a single pinned resource.
233
+ *
234
+ * The output is deterministic — tool names, descriptions, and schema
235
+ * bodies depend only on the resource fields, so two invocations with an
236
+ * equal input yield equal tools. The doc generator relies on this.
237
+ *
238
+ * A hard guardrail refuses to build tools for a resource that
239
+ * {@link evaluateResourceEligibility} rejects with a `side_effects` reason:
240
+ * generic CRUD around a side-effecting resource is prohibited, and no
241
+ * caller-passed opt-in changes that. Sensitive resources reach this
242
+ * function only when the catalogue explicitly opts in via
243
+ * `includeSensitive`; the sensitivity marker is preserved on the
244
+ * describe payload so downstream tooling still knows to warn.
245
+ */
246
+ export function buildResourceTools(resource) {
247
+ if (hasSideEffects(resource)) {
248
+ throw new Error(`Refusing to build generated read tools for ${resource.resource_id}: ` +
249
+ 'resource declares side effects and requires a dedicated tool with ' +
250
+ 'explicit confirmation and idempotency semantics.');
251
+ }
252
+ assertNoAutoGeneratedWrites(resource);
253
+ const selectReq = selectCapability(resource);
254
+ const describe = {
255
+ name: `${resource.resource_id}_describe`,
256
+ description: describeDescription(resource),
257
+ inputSchema: describeInputSchema(),
258
+ handler: describeHandler(resource),
259
+ // Metadata is safe to advertise — no rows are read.
260
+ capabilities: [],
261
+ };
262
+ const list = {
263
+ name: `${resource.resource_id}_list`,
264
+ description: listDescription(resource),
265
+ inputSchema: listInputSchema(resource),
266
+ handler: (args, ctx) => callListHandler(resource, args, ctx),
267
+ capabilities: [selectReq],
268
+ };
269
+ const get = isSingletonPrimaryKey(resource)
270
+ ? {
271
+ name: `${resource.resource_id}_get`,
272
+ description: getDescription(resource),
273
+ inputSchema: getInputSchema(resource),
274
+ handler: (args, ctx) => callGetHandler(resource, args, ctx),
275
+ capabilities: [selectReq],
276
+ }
277
+ : null;
278
+ return { describe, list, get };
279
+ }
280
+ //# sourceMappingURL=resource-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-tools.js","sourceRoot":"","sources":["../../src/generated-reads/resource-tools.ts"],"names":[],"mappings":"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"}