@raytio/mcp-server 3.0.0 → 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 (510) hide show
  1. package/README.md +6 -5
  2. package/dist/authorization.d.ts +27 -2
  3. package/dist/authorization.d.ts.map +1 -1
  4. package/dist/authorization.js +67 -4
  5. package/dist/authorization.js.map +1 -1
  6. package/dist/capabilities/effective-capabilities.d.ts +248 -0
  7. package/dist/capabilities/effective-capabilities.d.ts.map +1 -0
  8. package/dist/capabilities/effective-capabilities.js +259 -0
  9. package/dist/capabilities/effective-capabilities.js.map +1 -0
  10. package/dist/capabilities/tool-capability.d.ts +52 -0
  11. package/dist/capabilities/tool-capability.d.ts.map +1 -0
  12. package/dist/capabilities/tool-capability.js +238 -0
  13. package/dist/capabilities/tool-capability.js.map +1 -0
  14. package/dist/generated-reads/catalogue.d.ts +80 -0
  15. package/dist/generated-reads/catalogue.d.ts.map +1 -0
  16. package/dist/generated-reads/catalogue.js +127 -0
  17. package/dist/generated-reads/catalogue.js.map +1 -0
  18. package/dist/generated-reads/guardrails.d.ts +147 -0
  19. package/dist/generated-reads/guardrails.d.ts.map +1 -0
  20. package/dist/generated-reads/guardrails.js +190 -0
  21. package/dist/generated-reads/guardrails.js.map +1 -0
  22. package/dist/generated-reads/index.d.ts +9 -0
  23. package/dist/generated-reads/index.d.ts.map +1 -0
  24. package/dist/generated-reads/index.js +5 -0
  25. package/dist/generated-reads/index.js.map +1 -0
  26. package/dist/generated-reads/query-builder.d.ts +99 -0
  27. package/dist/generated-reads/query-builder.d.ts.map +1 -0
  28. package/dist/generated-reads/query-builder.js +240 -0
  29. package/dist/generated-reads/query-builder.js.map +1 -0
  30. package/dist/generated-reads/resource-tools.d.ts +110 -0
  31. package/dist/generated-reads/resource-tools.d.ts.map +1 -0
  32. package/dist/generated-reads/resource-tools.js +280 -0
  33. package/dist/generated-reads/resource-tools.js.map +1 -0
  34. package/dist/index.js +20 -8
  35. package/dist/index.js.map +1 -1
  36. package/dist/tools/dispatch.d.ts +8 -1
  37. package/dist/tools/dispatch.d.ts.map +1 -1
  38. package/dist/tools/dispatch.js +16 -1
  39. package/dist/tools/dispatch.js.map +1 -1
  40. package/dist/tools/dsm/index.d.ts.map +1 -1
  41. package/dist/tools/dsm/index.js +18 -0
  42. package/dist/tools/dsm/index.js.map +1 -1
  43. package/dist/tools/ppm/activity-create.d.ts.map +1 -1
  44. package/dist/tools/ppm/activity-create.js +4 -0
  45. package/dist/tools/ppm/activity-create.js.map +1 -1
  46. package/dist/tools/ppm/activity-update.d.ts.map +1 -1
  47. package/dist/tools/ppm/activity-update.js +4 -0
  48. package/dist/tools/ppm/activity-update.js.map +1 -1
  49. package/dist/tools/ppm/external-system-list.d.ts.map +1 -1
  50. package/dist/tools/ppm/external-system-list.js +4 -0
  51. package/dist/tools/ppm/external-system-list.js.map +1 -1
  52. package/dist/tools/ppm/template-create.d.ts.map +1 -1
  53. package/dist/tools/ppm/template-create.js +4 -0
  54. package/dist/tools/ppm/template-create.js.map +1 -1
  55. package/dist/tools/ppm/template-get.d.ts.map +1 -1
  56. package/dist/tools/ppm/template-get.js +5 -0
  57. package/dist/tools/ppm/template-get.js.map +1 -1
  58. package/dist/tools/ppm/template-instantiate.d.ts.map +1 -1
  59. package/dist/tools/ppm/template-instantiate.js +4 -0
  60. package/dist/tools/ppm/template-instantiate.js.map +1 -1
  61. package/dist/tools/ppm/template-list.d.ts.map +1 -1
  62. package/dist/tools/ppm/template-list.js +4 -0
  63. package/dist/tools/ppm/template-list.js.map +1 -1
  64. package/dist/tools/ppm/template-slot-create.d.ts.map +1 -1
  65. package/dist/tools/ppm/template-slot-create.js +4 -0
  66. package/dist/tools/ppm/template-slot-create.js.map +1 -1
  67. package/dist/tools/ppm/template-slot-list.d.ts.map +1 -1
  68. package/dist/tools/ppm/template-slot-list.js +4 -0
  69. package/dist/tools/ppm/template-slot-list.js.map +1 -1
  70. package/dist/tools/ppm/work-item-activities.d.ts.map +1 -1
  71. package/dist/tools/ppm/work-item-activities.js +4 -0
  72. package/dist/tools/ppm/work-item-activities.js.map +1 -1
  73. package/dist/tools/ppm/work-item-block.d.ts.map +1 -1
  74. package/dist/tools/ppm/work-item-block.js +5 -0
  75. package/dist/tools/ppm/work-item-block.js.map +1 -1
  76. package/dist/tools/ppm/work-item-cancel.d.ts.map +1 -1
  77. package/dist/tools/ppm/work-item-cancel.js +14 -2
  78. package/dist/tools/ppm/work-item-cancel.js.map +1 -1
  79. package/dist/tools/ppm/work-item-comment.d.ts.map +1 -1
  80. package/dist/tools/ppm/work-item-comment.js +4 -0
  81. package/dist/tools/ppm/work-item-comment.js.map +1 -1
  82. package/dist/tools/ppm/work-item-complete.d.ts.map +1 -1
  83. package/dist/tools/ppm/work-item-complete.js +5 -0
  84. package/dist/tools/ppm/work-item-complete.js.map +1 -1
  85. package/dist/tools/ppm/work-item-create.d.ts.map +1 -1
  86. package/dist/tools/ppm/work-item-create.js +4 -0
  87. package/dist/tools/ppm/work-item-create.js.map +1 -1
  88. package/dist/tools/ppm/work-item-dependency-create.d.ts.map +1 -1
  89. package/dist/tools/ppm/work-item-dependency-create.js +4 -0
  90. package/dist/tools/ppm/work-item-dependency-create.js.map +1 -1
  91. package/dist/tools/ppm/work-item-dependency-list.d.ts.map +1 -1
  92. package/dist/tools/ppm/work-item-dependency-list.js +4 -0
  93. package/dist/tools/ppm/work-item-dependency-list.js.map +1 -1
  94. package/dist/tools/ppm/work-item-get.d.ts.map +1 -1
  95. package/dist/tools/ppm/work-item-get.js +4 -0
  96. package/dist/tools/ppm/work-item-get.js.map +1 -1
  97. package/dist/tools/ppm/work-item-link-create.d.ts.map +1 -1
  98. package/dist/tools/ppm/work-item-link-create.js +4 -0
  99. package/dist/tools/ppm/work-item-link-create.js.map +1 -1
  100. package/dist/tools/ppm/work-item-link-list.d.ts.map +1 -1
  101. package/dist/tools/ppm/work-item-link-list.js +4 -0
  102. package/dist/tools/ppm/work-item-link-list.js.map +1 -1
  103. package/dist/tools/ppm/work-item-list.d.ts.map +1 -1
  104. package/dist/tools/ppm/work-item-list.js +4 -0
  105. package/dist/tools/ppm/work-item-list.js.map +1 -1
  106. package/dist/tools/ppm/work-item-ready.d.ts.map +1 -1
  107. package/dist/tools/ppm/work-item-ready.js +5 -0
  108. package/dist/tools/ppm/work-item-ready.js.map +1 -1
  109. package/dist/tools/ppm/work-item-start.d.ts.map +1 -1
  110. package/dist/tools/ppm/work-item-start.js +5 -0
  111. package/dist/tools/ppm/work-item-start.js.map +1 -1
  112. package/dist/tools/ppm/work-item-tree.d.ts.map +1 -1
  113. package/dist/tools/ppm/work-item-tree.js +4 -0
  114. package/dist/tools/ppm/work-item-tree.js.map +1 -1
  115. package/dist/tools/ppm/work-item-unblock.d.ts.map +1 -1
  116. package/dist/tools/ppm/work-item-unblock.js +5 -0
  117. package/dist/tools/ppm/work-item-unblock.js.map +1 -1
  118. package/dist/tools/ppm/work-item-update-progress.d.ts.map +1 -1
  119. package/dist/tools/ppm/work-item-update-progress.js +5 -0
  120. package/dist/tools/ppm/work-item-update-progress.js.map +1 -1
  121. package/dist/tools/ppm/work-item-update.d.ts.map +1 -1
  122. package/dist/tools/ppm/work-item-update.js +4 -0
  123. package/dist/tools/ppm/work-item-update.js.map +1 -1
  124. package/dist/tools/prm/prm-party-create.d.ts.map +1 -1
  125. package/dist/tools/prm/prm-party-create.js +4 -0
  126. package/dist/tools/prm/prm-party-create.js.map +1 -1
  127. package/dist/tools/prm/prm-party-list.d.ts.map +1 -1
  128. package/dist/tools/prm/prm-party-list.js +4 -0
  129. package/dist/tools/prm/prm-party-list.js.map +1 -1
  130. package/dist/tools/registry.d.ts +81 -0
  131. package/dist/tools/registry.d.ts.map +1 -1
  132. package/dist/tools/wrm/wrm-agent-run-artifact-create.d.ts.map +1 -1
  133. package/dist/tools/wrm/wrm-agent-run-artifact-create.js +4 -0
  134. package/dist/tools/wrm/wrm-agent-run-artifact-create.js.map +1 -1
  135. package/dist/tools/wrm/wrm-agent-run-artifact-get.d.ts.map +1 -1
  136. package/dist/tools/wrm/wrm-agent-run-artifact-get.js +4 -0
  137. package/dist/tools/wrm/wrm-agent-run-artifact-get.js.map +1 -1
  138. package/dist/tools/wrm/wrm-agent-run-artifact-list.d.ts.map +1 -1
  139. package/dist/tools/wrm/wrm-agent-run-artifact-list.js +4 -0
  140. package/dist/tools/wrm/wrm-agent-run-artifact-list.js.map +1 -1
  141. package/dist/tools/wrm/wrm-agent-run-cost-summary.d.ts.map +1 -1
  142. package/dist/tools/wrm/wrm-agent-run-cost-summary.js +6 -0
  143. package/dist/tools/wrm/wrm-agent-run-cost-summary.js.map +1 -1
  144. package/dist/tools/wrm/wrm-agent-run-create.d.ts.map +1 -1
  145. package/dist/tools/wrm/wrm-agent-run-create.js +4 -0
  146. package/dist/tools/wrm/wrm-agent-run-create.js.map +1 -1
  147. package/dist/tools/wrm/wrm-agent-run-eval-create.d.ts.map +1 -1
  148. package/dist/tools/wrm/wrm-agent-run-eval-create.js +4 -0
  149. package/dist/tools/wrm/wrm-agent-run-eval-create.js.map +1 -1
  150. package/dist/tools/wrm/wrm-agent-run-eval-list.d.ts.map +1 -1
  151. package/dist/tools/wrm/wrm-agent-run-eval-list.js +4 -0
  152. package/dist/tools/wrm/wrm-agent-run-eval-list.js.map +1 -1
  153. package/dist/tools/wrm/wrm-agent-run-eval-summary.d.ts.map +1 -1
  154. package/dist/tools/wrm/wrm-agent-run-eval-summary.js +8 -0
  155. package/dist/tools/wrm/wrm-agent-run-eval-summary.js.map +1 -1
  156. package/dist/tools/wrm/wrm-agent-run-get.d.ts.map +1 -1
  157. package/dist/tools/wrm/wrm-agent-run-get.js +4 -0
  158. package/dist/tools/wrm/wrm-agent-run-get.js.map +1 -1
  159. package/dist/tools/wrm/wrm-agent-run-guardrail-result-create.d.ts.map +1 -1
  160. package/dist/tools/wrm/wrm-agent-run-guardrail-result-create.js +4 -0
  161. package/dist/tools/wrm/wrm-agent-run-guardrail-result-create.js.map +1 -1
  162. package/dist/tools/wrm/wrm-agent-run-guardrail-result-list.d.ts.map +1 -1
  163. package/dist/tools/wrm/wrm-agent-run-guardrail-result-list.js +4 -0
  164. package/dist/tools/wrm/wrm-agent-run-guardrail-result-list.js.map +1 -1
  165. package/dist/tools/wrm/wrm-agent-run-guardrail-summary.d.ts.map +1 -1
  166. package/dist/tools/wrm/wrm-agent-run-guardrail-summary.js +5 -0
  167. package/dist/tools/wrm/wrm-agent-run-guardrail-summary.js.map +1 -1
  168. package/dist/tools/wrm/wrm-agent-run-list.d.ts.map +1 -1
  169. package/dist/tools/wrm/wrm-agent-run-list.js +4 -0
  170. package/dist/tools/wrm/wrm-agent-run-list.js.map +1 -1
  171. package/dist/tools/wrm/wrm-agent-run-step-create.d.ts.map +1 -1
  172. package/dist/tools/wrm/wrm-agent-run-step-create.js +4 -0
  173. package/dist/tools/wrm/wrm-agent-run-step-create.js.map +1 -1
  174. package/dist/tools/wrm/wrm-agent-run-step-list.d.ts.map +1 -1
  175. package/dist/tools/wrm/wrm-agent-run-step-list.js +4 -0
  176. package/dist/tools/wrm/wrm-agent-run-step-list.js.map +1 -1
  177. package/dist/tools/wrm/wrm-agent-run-step-update.d.ts.map +1 -1
  178. package/dist/tools/wrm/wrm-agent-run-step-update.js +4 -0
  179. package/dist/tools/wrm/wrm-agent-run-step-update.js.map +1 -1
  180. package/dist/tools/wrm/wrm-agent-run-summary.d.ts.map +1 -1
  181. package/dist/tools/wrm/wrm-agent-run-summary.js +7 -0
  182. package/dist/tools/wrm/wrm-agent-run-summary.js.map +1 -1
  183. package/dist/tools/wrm/wrm-agent-run-update.d.ts.map +1 -1
  184. package/dist/tools/wrm/wrm-agent-run-update.js +4 -0
  185. package/dist/tools/wrm/wrm-agent-run-update.js.map +1 -1
  186. package/dist/tools/wrm/wrm-credential-list.d.ts.map +1 -1
  187. package/dist/tools/wrm/wrm-credential-list.js +4 -0
  188. package/dist/tools/wrm/wrm-credential-list.js.map +1 -1
  189. package/dist/tools/wrm/wrm-credential-request-create.d.ts.map +1 -1
  190. package/dist/tools/wrm/wrm-credential-request-create.js +14 -0
  191. package/dist/tools/wrm/wrm-credential-request-create.js.map +1 -1
  192. package/dist/tools/wrm/wrm-credential-request-status.d.ts.map +1 -1
  193. package/dist/tools/wrm/wrm-credential-request-status.js +5 -0
  194. package/dist/tools/wrm/wrm-credential-request-status.js.map +1 -1
  195. package/dist/tools/wrm/wrm-credential-retrieve.d.ts.map +1 -1
  196. package/dist/tools/wrm/wrm-credential-retrieve.js +4 -0
  197. package/dist/tools/wrm/wrm-credential-retrieve.js.map +1 -1
  198. package/dist/tools/wrm/wrm-credential-revoke.d.ts.map +1 -1
  199. package/dist/tools/wrm/wrm-credential-revoke.js +7 -0
  200. package/dist/tools/wrm/wrm-credential-revoke.js.map +1 -1
  201. package/dist/tools/wrm/wrm-domain-create.d.ts.map +1 -1
  202. package/dist/tools/wrm/wrm-domain-create.js +4 -0
  203. package/dist/tools/wrm/wrm-domain-create.js.map +1 -1
  204. package/dist/tools/wrm/wrm-domain-get.d.ts.map +1 -1
  205. package/dist/tools/wrm/wrm-domain-get.js +4 -0
  206. package/dist/tools/wrm/wrm-domain-get.js.map +1 -1
  207. package/dist/tools/wrm/wrm-domain-list.d.ts.map +1 -1
  208. package/dist/tools/wrm/wrm-domain-list.js +4 -0
  209. package/dist/tools/wrm/wrm-domain-list.js.map +1 -1
  210. package/dist/tools/wrm/wrm-domain-repository-create.d.ts.map +1 -1
  211. package/dist/tools/wrm/wrm-domain-repository-create.js +4 -0
  212. package/dist/tools/wrm/wrm-domain-repository-create.js.map +1 -1
  213. package/dist/tools/wrm/wrm-domain-repository-get.d.ts.map +1 -1
  214. package/dist/tools/wrm/wrm-domain-repository-get.js +4 -0
  215. package/dist/tools/wrm/wrm-domain-repository-get.js.map +1 -1
  216. package/dist/tools/wrm/wrm-domain-repository-list.d.ts.map +1 -1
  217. package/dist/tools/wrm/wrm-domain-repository-list.js +4 -0
  218. package/dist/tools/wrm/wrm-domain-repository-list.js.map +1 -1
  219. package/dist/tools/wrm/wrm-domain-repository-update.d.ts.map +1 -1
  220. package/dist/tools/wrm/wrm-domain-repository-update.js +4 -0
  221. package/dist/tools/wrm/wrm-domain-repository-update.js.map +1 -1
  222. package/dist/tools/wrm/wrm-domain-update.d.ts.map +1 -1
  223. package/dist/tools/wrm/wrm-domain-update.js +4 -0
  224. package/dist/tools/wrm/wrm-domain-update.js.map +1 -1
  225. package/dist/tools/wrm/wrm-effective-mcp-servers.d.ts.map +1 -1
  226. package/dist/tools/wrm/wrm-effective-mcp-servers.js +4 -0
  227. package/dist/tools/wrm/wrm-effective-mcp-servers.js.map +1 -1
  228. package/dist/tools/wrm/wrm-effective-mcp-tools.d.ts.map +1 -1
  229. package/dist/tools/wrm/wrm-effective-mcp-tools.js +4 -0
  230. package/dist/tools/wrm/wrm-effective-mcp-tools.js.map +1 -1
  231. package/dist/tools/wrm/wrm-effective-model-prefs.d.ts.map +1 -1
  232. package/dist/tools/wrm/wrm-effective-model-prefs.js +4 -0
  233. package/dist/tools/wrm/wrm-effective-model-prefs.js.map +1 -1
  234. package/dist/tools/wrm/wrm-eval-scorer-create.d.ts.map +1 -1
  235. package/dist/tools/wrm/wrm-eval-scorer-create.js +4 -0
  236. package/dist/tools/wrm/wrm-eval-scorer-create.js.map +1 -1
  237. package/dist/tools/wrm/wrm-eval-scorer-get.d.ts.map +1 -1
  238. package/dist/tools/wrm/wrm-eval-scorer-get.js +4 -0
  239. package/dist/tools/wrm/wrm-eval-scorer-get.js.map +1 -1
  240. package/dist/tools/wrm/wrm-eval-scorer-list.d.ts.map +1 -1
  241. package/dist/tools/wrm/wrm-eval-scorer-list.js +4 -0
  242. package/dist/tools/wrm/wrm-eval-scorer-list.js.map +1 -1
  243. package/dist/tools/wrm/wrm-eval-scorer-update.d.ts.map +1 -1
  244. package/dist/tools/wrm/wrm-eval-scorer-update.js +4 -0
  245. package/dist/tools/wrm/wrm-eval-scorer-update.js.map +1 -1
  246. package/dist/tools/wrm/wrm-guardrail-create.d.ts.map +1 -1
  247. package/dist/tools/wrm/wrm-guardrail-create.js +4 -0
  248. package/dist/tools/wrm/wrm-guardrail-create.js.map +1 -1
  249. package/dist/tools/wrm/wrm-guardrail-get.d.ts.map +1 -1
  250. package/dist/tools/wrm/wrm-guardrail-get.js +4 -0
  251. package/dist/tools/wrm/wrm-guardrail-get.js.map +1 -1
  252. package/dist/tools/wrm/wrm-guardrail-list.d.ts.map +1 -1
  253. package/dist/tools/wrm/wrm-guardrail-list.js +4 -0
  254. package/dist/tools/wrm/wrm-guardrail-list.js.map +1 -1
  255. package/dist/tools/wrm/wrm-guardrail-update.d.ts.map +1 -1
  256. package/dist/tools/wrm/wrm-guardrail-update.js +4 -0
  257. package/dist/tools/wrm/wrm-guardrail-update.js.map +1 -1
  258. package/dist/tools/wrm/wrm-knowledge-chunk-search.d.ts.map +1 -1
  259. package/dist/tools/wrm/wrm-knowledge-chunk-search.js +4 -0
  260. package/dist/tools/wrm/wrm-knowledge-chunk-search.js.map +1 -1
  261. package/dist/tools/wrm/wrm-knowledge-source-create.d.ts.map +1 -1
  262. package/dist/tools/wrm/wrm-knowledge-source-create.js +4 -0
  263. package/dist/tools/wrm/wrm-knowledge-source-create.js.map +1 -1
  264. package/dist/tools/wrm/wrm-knowledge-source-get.d.ts.map +1 -1
  265. package/dist/tools/wrm/wrm-knowledge-source-get.js +4 -0
  266. package/dist/tools/wrm/wrm-knowledge-source-get.js.map +1 -1
  267. package/dist/tools/wrm/wrm-knowledge-source-list.d.ts.map +1 -1
  268. package/dist/tools/wrm/wrm-knowledge-source-list.js +4 -0
  269. package/dist/tools/wrm/wrm-knowledge-source-list.js.map +1 -1
  270. package/dist/tools/wrm/wrm-knowledge-source-update.d.ts.map +1 -1
  271. package/dist/tools/wrm/wrm-knowledge-source-update.js +4 -0
  272. package/dist/tools/wrm/wrm-knowledge-source-update.js.map +1 -1
  273. package/dist/tools/wrm/wrm-mcp-server-create.d.ts.map +1 -1
  274. package/dist/tools/wrm/wrm-mcp-server-create.js +4 -0
  275. package/dist/tools/wrm/wrm-mcp-server-create.js.map +1 -1
  276. package/dist/tools/wrm/wrm-mcp-server-get.d.ts.map +1 -1
  277. package/dist/tools/wrm/wrm-mcp-server-get.js +4 -0
  278. package/dist/tools/wrm/wrm-mcp-server-get.js.map +1 -1
  279. package/dist/tools/wrm/wrm-mcp-server-list.d.ts.map +1 -1
  280. package/dist/tools/wrm/wrm-mcp-server-list.js +4 -0
  281. package/dist/tools/wrm/wrm-mcp-server-list.js.map +1 -1
  282. package/dist/tools/wrm/wrm-mcp-server-update.d.ts.map +1 -1
  283. package/dist/tools/wrm/wrm-mcp-server-update.js +4 -0
  284. package/dist/tools/wrm/wrm-mcp-server-update.js.map +1 -1
  285. package/dist/tools/wrm/wrm-mcp-tool-create.d.ts.map +1 -1
  286. package/dist/tools/wrm/wrm-mcp-tool-create.js +4 -0
  287. package/dist/tools/wrm/wrm-mcp-tool-create.js.map +1 -1
  288. package/dist/tools/wrm/wrm-mcp-tool-get.d.ts.map +1 -1
  289. package/dist/tools/wrm/wrm-mcp-tool-get.js +4 -0
  290. package/dist/tools/wrm/wrm-mcp-tool-get.js.map +1 -1
  291. package/dist/tools/wrm/wrm-mcp-tool-list.d.ts.map +1 -1
  292. package/dist/tools/wrm/wrm-mcp-tool-list.js +4 -0
  293. package/dist/tools/wrm/wrm-mcp-tool-list.js.map +1 -1
  294. package/dist/tools/wrm/wrm-mcp-tool-update.d.ts.map +1 -1
  295. package/dist/tools/wrm/wrm-mcp-tool-update.js +4 -0
  296. package/dist/tools/wrm/wrm-mcp-tool-update.js.map +1 -1
  297. package/dist/tools/wrm/wrm-memory-create.d.ts.map +1 -1
  298. package/dist/tools/wrm/wrm-memory-create.js +6 -0
  299. package/dist/tools/wrm/wrm-memory-create.js.map +1 -1
  300. package/dist/tools/wrm/wrm-memory-get.d.ts.map +1 -1
  301. package/dist/tools/wrm/wrm-memory-get.js +4 -0
  302. package/dist/tools/wrm/wrm-memory-get.js.map +1 -1
  303. package/dist/tools/wrm/wrm-memory-list.d.ts.map +1 -1
  304. package/dist/tools/wrm/wrm-memory-list.js +4 -0
  305. package/dist/tools/wrm/wrm-memory-list.js.map +1 -1
  306. package/dist/tools/wrm/wrm-memory-search.d.ts.map +1 -1
  307. package/dist/tools/wrm/wrm-memory-search.js +4 -0
  308. package/dist/tools/wrm/wrm-memory-search.js.map +1 -1
  309. package/dist/tools/wrm/wrm-memory-update.d.ts.map +1 -1
  310. package/dist/tools/wrm/wrm-memory-update.js +5 -0
  311. package/dist/tools/wrm/wrm-memory-update.js.map +1 -1
  312. package/dist/tools/wrm/wrm-model-availability-create.d.ts.map +1 -1
  313. package/dist/tools/wrm/wrm-model-availability-create.js +4 -0
  314. package/dist/tools/wrm/wrm-model-availability-create.js.map +1 -1
  315. package/dist/tools/wrm/wrm-model-availability-get.d.ts.map +1 -1
  316. package/dist/tools/wrm/wrm-model-availability-get.js +4 -0
  317. package/dist/tools/wrm/wrm-model-availability-get.js.map +1 -1
  318. package/dist/tools/wrm/wrm-model-availability-list.d.ts.map +1 -1
  319. package/dist/tools/wrm/wrm-model-availability-list.js +4 -0
  320. package/dist/tools/wrm/wrm-model-availability-list.js.map +1 -1
  321. package/dist/tools/wrm/wrm-model-availability-update.d.ts.map +1 -1
  322. package/dist/tools/wrm/wrm-model-availability-update.js +4 -0
  323. package/dist/tools/wrm/wrm-model-availability-update.js.map +1 -1
  324. package/dist/tools/wrm/wrm-model-create.d.ts.map +1 -1
  325. package/dist/tools/wrm/wrm-model-create.js +4 -0
  326. package/dist/tools/wrm/wrm-model-create.js.map +1 -1
  327. package/dist/tools/wrm/wrm-model-get.d.ts.map +1 -1
  328. package/dist/tools/wrm/wrm-model-get.js +4 -0
  329. package/dist/tools/wrm/wrm-model-get.js.map +1 -1
  330. package/dist/tools/wrm/wrm-model-list.d.ts.map +1 -1
  331. package/dist/tools/wrm/wrm-model-list.js +4 -0
  332. package/dist/tools/wrm/wrm-model-list.js.map +1 -1
  333. package/dist/tools/wrm/wrm-model-parameter-create.d.ts.map +1 -1
  334. package/dist/tools/wrm/wrm-model-parameter-create.js +4 -0
  335. package/dist/tools/wrm/wrm-model-parameter-create.js.map +1 -1
  336. package/dist/tools/wrm/wrm-model-parameter-get.d.ts.map +1 -1
  337. package/dist/tools/wrm/wrm-model-parameter-get.js +4 -0
  338. package/dist/tools/wrm/wrm-model-parameter-get.js.map +1 -1
  339. package/dist/tools/wrm/wrm-model-parameter-list.d.ts.map +1 -1
  340. package/dist/tools/wrm/wrm-model-parameter-list.js +4 -0
  341. package/dist/tools/wrm/wrm-model-parameter-list.js.map +1 -1
  342. package/dist/tools/wrm/wrm-model-parameter-update.d.ts.map +1 -1
  343. package/dist/tools/wrm/wrm-model-parameter-update.js +4 -0
  344. package/dist/tools/wrm/wrm-model-parameter-update.js.map +1 -1
  345. package/dist/tools/wrm/wrm-model-update.d.ts.map +1 -1
  346. package/dist/tools/wrm/wrm-model-update.js +4 -0
  347. package/dist/tools/wrm/wrm-model-update.js.map +1 -1
  348. package/dist/tools/wrm/wrm-platform-label-map-create.d.ts.map +1 -1
  349. package/dist/tools/wrm/wrm-platform-label-map-create.js +4 -0
  350. package/dist/tools/wrm/wrm-platform-label-map-create.js.map +1 -1
  351. package/dist/tools/wrm/wrm-platform-label-map-get.d.ts.map +1 -1
  352. package/dist/tools/wrm/wrm-platform-label-map-get.js +4 -0
  353. package/dist/tools/wrm/wrm-platform-label-map-get.js.map +1 -1
  354. package/dist/tools/wrm/wrm-platform-label-map-list.d.ts.map +1 -1
  355. package/dist/tools/wrm/wrm-platform-label-map-list.js +4 -0
  356. package/dist/tools/wrm/wrm-platform-label-map-list.js.map +1 -1
  357. package/dist/tools/wrm/wrm-platform-label-map-resolve.d.ts.map +1 -1
  358. package/dist/tools/wrm/wrm-platform-label-map-resolve.js +4 -0
  359. package/dist/tools/wrm/wrm-platform-label-map-resolve.js.map +1 -1
  360. package/dist/tools/wrm/wrm-platform-label-map-update.d.ts.map +1 -1
  361. package/dist/tools/wrm/wrm-platform-label-map-update.js +4 -0
  362. package/dist/tools/wrm/wrm-platform-label-map-update.js.map +1 -1
  363. package/dist/tools/wrm/wrm-provider-create.d.ts.map +1 -1
  364. package/dist/tools/wrm/wrm-provider-create.js +4 -0
  365. package/dist/tools/wrm/wrm-provider-create.js.map +1 -1
  366. package/dist/tools/wrm/wrm-provider-get.d.ts.map +1 -1
  367. package/dist/tools/wrm/wrm-provider-get.js +4 -0
  368. package/dist/tools/wrm/wrm-provider-get.js.map +1 -1
  369. package/dist/tools/wrm/wrm-provider-list.d.ts.map +1 -1
  370. package/dist/tools/wrm/wrm-provider-list.js +4 -0
  371. package/dist/tools/wrm/wrm-provider-list.js.map +1 -1
  372. package/dist/tools/wrm/wrm-provider-update.d.ts.map +1 -1
  373. package/dist/tools/wrm/wrm-provider-update.js +4 -0
  374. package/dist/tools/wrm/wrm-provider-update.js.map +1 -1
  375. package/dist/tools/wrm/wrm-role-create.d.ts.map +1 -1
  376. package/dist/tools/wrm/wrm-role-create.js +4 -0
  377. package/dist/tools/wrm/wrm-role-create.js.map +1 -1
  378. package/dist/tools/wrm/wrm-role-get.d.ts.map +1 -1
  379. package/dist/tools/wrm/wrm-role-get.js +4 -0
  380. package/dist/tools/wrm/wrm-role-get.js.map +1 -1
  381. package/dist/tools/wrm/wrm-role-list.d.ts.map +1 -1
  382. package/dist/tools/wrm/wrm-role-list.js +4 -0
  383. package/dist/tools/wrm/wrm-role-list.js.map +1 -1
  384. package/dist/tools/wrm/wrm-role-memory-create.d.ts.map +1 -1
  385. package/dist/tools/wrm/wrm-role-memory-create.js +4 -0
  386. package/dist/tools/wrm/wrm-role-memory-create.js.map +1 -1
  387. package/dist/tools/wrm/wrm-role-memory-get.d.ts.map +1 -1
  388. package/dist/tools/wrm/wrm-role-memory-get.js +4 -0
  389. package/dist/tools/wrm/wrm-role-memory-get.js.map +1 -1
  390. package/dist/tools/wrm/wrm-role-memory-list.d.ts.map +1 -1
  391. package/dist/tools/wrm/wrm-role-memory-list.js +4 -0
  392. package/dist/tools/wrm/wrm-role-memory-list.js.map +1 -1
  393. package/dist/tools/wrm/wrm-role-memory-search.d.ts.map +1 -1
  394. package/dist/tools/wrm/wrm-role-memory-search.js +5 -0
  395. package/dist/tools/wrm/wrm-role-memory-search.js.map +1 -1
  396. package/dist/tools/wrm/wrm-role-memory-update.d.ts.map +1 -1
  397. package/dist/tools/wrm/wrm-role-memory-update.js +4 -0
  398. package/dist/tools/wrm/wrm-role-memory-update.js.map +1 -1
  399. package/dist/tools/wrm/wrm-role-update.d.ts.map +1 -1
  400. package/dist/tools/wrm/wrm-role-update.js +4 -0
  401. package/dist/tools/wrm/wrm-role-update.js.map +1 -1
  402. package/dist/tools/wrm/wrm-sandbox-provider-create.d.ts.map +1 -1
  403. package/dist/tools/wrm/wrm-sandbox-provider-create.js +4 -0
  404. package/dist/tools/wrm/wrm-sandbox-provider-create.js.map +1 -1
  405. package/dist/tools/wrm/wrm-sandbox-provider-get.d.ts.map +1 -1
  406. package/dist/tools/wrm/wrm-sandbox-provider-get.js +4 -0
  407. package/dist/tools/wrm/wrm-sandbox-provider-get.js.map +1 -1
  408. package/dist/tools/wrm/wrm-sandbox-provider-list.d.ts.map +1 -1
  409. package/dist/tools/wrm/wrm-sandbox-provider-list.js +4 -0
  410. package/dist/tools/wrm/wrm-sandbox-provider-list.js.map +1 -1
  411. package/dist/tools/wrm/wrm-sandbox-provider-update.d.ts.map +1 -1
  412. package/dist/tools/wrm/wrm-sandbox-provider-update.js +4 -0
  413. package/dist/tools/wrm/wrm-sandbox-provider-update.js.map +1 -1
  414. package/dist/tools/wrm/wrm-worker-create.d.ts.map +1 -1
  415. package/dist/tools/wrm/wrm-worker-create.js +4 -0
  416. package/dist/tools/wrm/wrm-worker-create.js.map +1 -1
  417. package/dist/tools/wrm/wrm-worker-def-mcp-server-create.d.ts.map +1 -1
  418. package/dist/tools/wrm/wrm-worker-def-mcp-server-create.js +4 -0
  419. package/dist/tools/wrm/wrm-worker-def-mcp-server-create.js.map +1 -1
  420. package/dist/tools/wrm/wrm-worker-def-mcp-server-list.d.ts.map +1 -1
  421. package/dist/tools/wrm/wrm-worker-def-mcp-server-list.js +4 -0
  422. package/dist/tools/wrm/wrm-worker-def-mcp-server-list.js.map +1 -1
  423. package/dist/tools/wrm/wrm-worker-def-mcp-server-update.d.ts.map +1 -1
  424. package/dist/tools/wrm/wrm-worker-def-mcp-server-update.js +4 -0
  425. package/dist/tools/wrm/wrm-worker-def-mcp-server-update.js.map +1 -1
  426. package/dist/tools/wrm/wrm-worker-def-mcp-tool-create.d.ts.map +1 -1
  427. package/dist/tools/wrm/wrm-worker-def-mcp-tool-create.js +4 -0
  428. package/dist/tools/wrm/wrm-worker-def-mcp-tool-create.js.map +1 -1
  429. package/dist/tools/wrm/wrm-worker-def-mcp-tool-list.d.ts.map +1 -1
  430. package/dist/tools/wrm/wrm-worker-def-mcp-tool-list.js +4 -0
  431. package/dist/tools/wrm/wrm-worker-def-mcp-tool-list.js.map +1 -1
  432. package/dist/tools/wrm/wrm-worker-def-mcp-tool-update.d.ts.map +1 -1
  433. package/dist/tools/wrm/wrm-worker-def-mcp-tool-update.js +4 -0
  434. package/dist/tools/wrm/wrm-worker-def-mcp-tool-update.js.map +1 -1
  435. package/dist/tools/wrm/wrm-worker-def-model-pref-create.d.ts.map +1 -1
  436. package/dist/tools/wrm/wrm-worker-def-model-pref-create.js +4 -0
  437. package/dist/tools/wrm/wrm-worker-def-model-pref-create.js.map +1 -1
  438. package/dist/tools/wrm/wrm-worker-def-model-pref-list.d.ts.map +1 -1
  439. package/dist/tools/wrm/wrm-worker-def-model-pref-list.js +4 -0
  440. package/dist/tools/wrm/wrm-worker-def-model-pref-list.js.map +1 -1
  441. package/dist/tools/wrm/wrm-worker-def-model-pref-update.d.ts.map +1 -1
  442. package/dist/tools/wrm/wrm-worker-def-model-pref-update.js +4 -0
  443. package/dist/tools/wrm/wrm-worker-def-model-pref-update.js.map +1 -1
  444. package/dist/tools/wrm/wrm-worker-definition-create.d.ts.map +1 -1
  445. package/dist/tools/wrm/wrm-worker-definition-create.js +4 -0
  446. package/dist/tools/wrm/wrm-worker-definition-create.js.map +1 -1
  447. package/dist/tools/wrm/wrm-worker-definition-get.d.ts.map +1 -1
  448. package/dist/tools/wrm/wrm-worker-definition-get.js +4 -0
  449. package/dist/tools/wrm/wrm-worker-definition-get.js.map +1 -1
  450. package/dist/tools/wrm/wrm-worker-definition-list.d.ts.map +1 -1
  451. package/dist/tools/wrm/wrm-worker-definition-list.js +4 -0
  452. package/dist/tools/wrm/wrm-worker-definition-list.js.map +1 -1
  453. package/dist/tools/wrm/wrm-worker-definition-update.d.ts.map +1 -1
  454. package/dist/tools/wrm/wrm-worker-definition-update.js +4 -0
  455. package/dist/tools/wrm/wrm-worker-definition-update.js.map +1 -1
  456. package/dist/tools/wrm/wrm-worker-find-for-role.d.ts.map +1 -1
  457. package/dist/tools/wrm/wrm-worker-find-for-role.js +5 -0
  458. package/dist/tools/wrm/wrm-worker-find-for-role.js.map +1 -1
  459. package/dist/tools/wrm/wrm-worker-get.d.ts.map +1 -1
  460. package/dist/tools/wrm/wrm-worker-get.js +4 -0
  461. package/dist/tools/wrm/wrm-worker-get.js.map +1 -1
  462. package/dist/tools/wrm/wrm-worker-list.d.ts.map +1 -1
  463. package/dist/tools/wrm/wrm-worker-list.js +4 -0
  464. package/dist/tools/wrm/wrm-worker-list.js.map +1 -1
  465. package/dist/tools/wrm/wrm-worker-mcp-server-create.d.ts.map +1 -1
  466. package/dist/tools/wrm/wrm-worker-mcp-server-create.js +4 -0
  467. package/dist/tools/wrm/wrm-worker-mcp-server-create.js.map +1 -1
  468. package/dist/tools/wrm/wrm-worker-mcp-server-list.d.ts.map +1 -1
  469. package/dist/tools/wrm/wrm-worker-mcp-server-list.js +4 -0
  470. package/dist/tools/wrm/wrm-worker-mcp-server-list.js.map +1 -1
  471. package/dist/tools/wrm/wrm-worker-mcp-server-update.d.ts.map +1 -1
  472. package/dist/tools/wrm/wrm-worker-mcp-server-update.js +4 -0
  473. package/dist/tools/wrm/wrm-worker-mcp-server-update.js.map +1 -1
  474. package/dist/tools/wrm/wrm-worker-mcp-tool-create.d.ts.map +1 -1
  475. package/dist/tools/wrm/wrm-worker-mcp-tool-create.js +4 -0
  476. package/dist/tools/wrm/wrm-worker-mcp-tool-create.js.map +1 -1
  477. package/dist/tools/wrm/wrm-worker-mcp-tool-list.d.ts.map +1 -1
  478. package/dist/tools/wrm/wrm-worker-mcp-tool-list.js +4 -0
  479. package/dist/tools/wrm/wrm-worker-mcp-tool-list.js.map +1 -1
  480. package/dist/tools/wrm/wrm-worker-mcp-tool-update.d.ts.map +1 -1
  481. package/dist/tools/wrm/wrm-worker-mcp-tool-update.js +4 -0
  482. package/dist/tools/wrm/wrm-worker-mcp-tool-update.js.map +1 -1
  483. package/dist/tools/wrm/wrm-worker-model-pref-create.d.ts.map +1 -1
  484. package/dist/tools/wrm/wrm-worker-model-pref-create.js +4 -0
  485. package/dist/tools/wrm/wrm-worker-model-pref-create.js.map +1 -1
  486. package/dist/tools/wrm/wrm-worker-model-pref-list.d.ts.map +1 -1
  487. package/dist/tools/wrm/wrm-worker-model-pref-list.js +4 -0
  488. package/dist/tools/wrm/wrm-worker-model-pref-list.js.map +1 -1
  489. package/dist/tools/wrm/wrm-worker-model-pref-update.d.ts.map +1 -1
  490. package/dist/tools/wrm/wrm-worker-model-pref-update.js +4 -0
  491. package/dist/tools/wrm/wrm-worker-model-pref-update.js.map +1 -1
  492. package/dist/tools/wrm/wrm-worker-resolve-config.d.ts.map +1 -1
  493. package/dist/tools/wrm/wrm-worker-resolve-config.js +13 -0
  494. package/dist/tools/wrm/wrm-worker-resolve-config.js.map +1 -1
  495. package/dist/tools/wrm/wrm-worker-role-assignment-create.d.ts.map +1 -1
  496. package/dist/tools/wrm/wrm-worker-role-assignment-create.js +4 -0
  497. package/dist/tools/wrm/wrm-worker-role-assignment-create.js.map +1 -1
  498. package/dist/tools/wrm/wrm-worker-role-assignment-get.d.ts.map +1 -1
  499. package/dist/tools/wrm/wrm-worker-role-assignment-get.js +4 -0
  500. package/dist/tools/wrm/wrm-worker-role-assignment-get.js.map +1 -1
  501. package/dist/tools/wrm/wrm-worker-role-assignment-list.d.ts.map +1 -1
  502. package/dist/tools/wrm/wrm-worker-role-assignment-list.js +4 -0
  503. package/dist/tools/wrm/wrm-worker-role-assignment-list.js.map +1 -1
  504. package/dist/tools/wrm/wrm-worker-role-assignment-update.d.ts.map +1 -1
  505. package/dist/tools/wrm/wrm-worker-role-assignment-update.js +4 -0
  506. package/dist/tools/wrm/wrm-worker-role-assignment-update.js.map +1 -1
  507. package/dist/tools/wrm/wrm-worker-update.d.ts.map +1 -1
  508. package/dist/tools/wrm/wrm-worker-update.js +4 -0
  509. package/dist/tools/wrm/wrm-worker-update.js.map +1 -1
  510. package/package.json +1 -1
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Assemble the full set of generated read tools from a pinned Persist
3
+ * resource contract. Consumers pass the contract loaded by
4
+ * {@link loadPersistResourceContract}; this module hands back a
5
+ * deterministic, filterable list of {@link Tool} objects ready to be
6
+ * exposed alongside hand-written tools.
7
+ *
8
+ * Safety filters applied by default (WI-0003501):
9
+ *
10
+ * - Resources without a `list` or `read` operation are skipped — the
11
+ * resource may exist only for write-only side-effect paths.
12
+ * - Resources with `sensitivity` other than `normal` are skipped.
13
+ * Callers who genuinely need them must set `includeSensitive: true`
14
+ * on the filter; the resource-tools factory will still redact any
15
+ * credential-shaped columns from every response.
16
+ * - Resources that declare `side_effects` are ALWAYS skipped — there
17
+ * is no opt-in. Generic CRUD around a state-transition or
18
+ * notification path is a category error; dedicated tools with
19
+ * explicit confirmation/idempotency semantics are required.
20
+ *
21
+ * Composite-primary-key resources still get describe + list; only the
22
+ * get-by-id tool is skipped.
23
+ */
24
+ import { buildResourceTools, } from './resource-tools.js';
25
+ import { evaluateResourceEligibility, } from './guardrails.js';
26
+ function moduleMatches(resource, filter) {
27
+ if (!filter.modules || filter.modules.length === 0)
28
+ return true;
29
+ const wanted = new Set(filter.modules.map((m) => m.toLowerCase()));
30
+ return wanted.has(resource.module.toLowerCase());
31
+ }
32
+ function predicateMatches(resource, filter) {
33
+ if (!filter.include)
34
+ return true;
35
+ return filter.include(resource);
36
+ }
37
+ function collectTools(triple) {
38
+ const out = [triple.describe, triple.list];
39
+ if (triple.get)
40
+ out.push(triple.get);
41
+ return out;
42
+ }
43
+ /**
44
+ * Deterministic, sorted list of generated read tools drawn from the
45
+ * pinned contract. Sorting is by (module, resource_id, tool_name) so
46
+ * `docs/tools.md` regeneration is reproducible.
47
+ *
48
+ * Sensitive and side-effecting resources are filtered out by default —
49
+ * see {@link CatalogueFilter} for the opt-in that lifts the sensitivity
50
+ * bar (nothing lifts the side-effect bar).
51
+ */
52
+ export function buildGeneratedReadCatalogue(contract, filter = {}) {
53
+ return buildGeneratedReadCatalogueReport(contract, filter).tools;
54
+ }
55
+ /**
56
+ * Same as {@link buildGeneratedReadCatalogue}, but also returns the list
57
+ * of resources the guardrails excluded and why. Used by tests and the
58
+ * doc generator to prove that the safety filter is doing its job — a
59
+ * silent skip is indistinguishable from a bug.
60
+ */
61
+ export function buildGeneratedReadCatalogueReport(contract, filter = {}) {
62
+ const chosen = [];
63
+ const excluded = [];
64
+ for (const resource of contract.resources) {
65
+ if (!moduleMatches(resource, filter))
66
+ continue;
67
+ const decision = evaluateResourceEligibility(resource, {
68
+ includeSensitive: filter.includeSensitive,
69
+ });
70
+ if (!decision.eligible) {
71
+ excluded.push({
72
+ resourceId: resource.resource_id,
73
+ module: resource.module,
74
+ reasons: decision.reasons,
75
+ });
76
+ continue;
77
+ }
78
+ if (!predicateMatches(resource, filter))
79
+ continue;
80
+ chosen.push(resource);
81
+ }
82
+ chosen.sort((a, b) => {
83
+ const byModule = a.module.localeCompare(b.module);
84
+ if (byModule !== 0)
85
+ return byModule;
86
+ return a.resource_id.localeCompare(b.resource_id);
87
+ });
88
+ excluded.sort((a, b) => {
89
+ const byModule = a.module.localeCompare(b.module);
90
+ if (byModule !== 0)
91
+ return byModule;
92
+ return a.resourceId.localeCompare(b.resourceId);
93
+ });
94
+ const tools = [];
95
+ for (const resource of chosen) {
96
+ tools.push(...collectTools(buildResourceTools(resource)));
97
+ }
98
+ return { tools, excluded };
99
+ }
100
+ /**
101
+ * Group the generated read tools by module. Modules with no eligible
102
+ * resources are omitted from the returned record.
103
+ */
104
+ export function groupGeneratedReadsByModule(contract, filter = {}) {
105
+ const grouped = {};
106
+ const all = buildGeneratedReadCatalogue(contract, filter);
107
+ const byName = new Map();
108
+ for (const resource of contract.resources)
109
+ byName.set(resource.resource_id, resource);
110
+ for (const tool of all) {
111
+ // Recover the module from the resource_id prefix embedded in the
112
+ // tool name: `<resource_id>_(describe|list|get)`.
113
+ const suffixes = ['_describe', '_list', '_get'];
114
+ let resourceId = null;
115
+ for (const suffix of suffixes) {
116
+ if (tool.name.endsWith(suffix)) {
117
+ resourceId = tool.name.slice(0, -suffix.length);
118
+ break;
119
+ }
120
+ }
121
+ const resource = resourceId ? byName.get(resourceId) : undefined;
122
+ const module = resource?.module ?? 'unknown';
123
+ (grouped[module] ??= []).push(tool);
124
+ }
125
+ return grouped;
126
+ }
127
+ //# sourceMappingURL=catalogue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalogue.js","sourceRoot":"","sources":["../../src/generated-reads/catalogue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * MCP sensitive-resource and side-effect guardrails (WI-0003501).
3
+ *
4
+ * The schema-driven read framework (WI-0003500) will happily produce
5
+ * describe/list/get tools for every PostgREST resource in the pinned
6
+ * Persist contract. That is unsafe by default: some resources are
7
+ * classified `sensitive`/`restricted` (credentials, financial secrets,
8
+ * authorisation internals) and others declare `side_effects`
9
+ * (notifications, state transitions) that must never be triggered by a
10
+ * generic CRUD path.
11
+ *
12
+ * This module is the single choke point that decides:
13
+ *
14
+ * - which resources the generated catalogue is allowed to surface;
15
+ * - which fields must be redacted when a sensitive resource is
16
+ * explicitly opted in (defence-in-depth for password/token/secret
17
+ * columns);
18
+ * - which write operations (`create`, `update`, `delete`) can never be
19
+ * generated automatically — dedicated tools with explicit
20
+ * confirmation/idempotency semantics are required.
21
+ *
22
+ * The rules encoded here are intentionally conservative: when in doubt,
23
+ * fail closed. Callers who genuinely need a sensitive resource must set
24
+ * `includeSensitive` on the catalogue filter (and pay for the redaction
25
+ * that comes with it); callers who need write access to a side-effecting
26
+ * resource must build a dedicated tool with a hand-written safety
27
+ * envelope. There is no generator escape hatch for that second case.
28
+ */
29
+ import type { PersistResource } from '../contracts/persist-resource-contract.js';
30
+ /**
31
+ * PostgREST operations that MCP will NEVER auto-generate as tools.
32
+ *
33
+ * Generic CRUD wrappers on `create`/`update`/`delete` are prohibited
34
+ * even for `normal` resources — they trivially become side-effect
35
+ * vectors (status transitions, notifications, payments, provisioning)
36
+ * as soon as they are exposed to a model. Every mutating action must be
37
+ * a dedicated tool with an explicit safety envelope
38
+ * (confirmation semantics, idempotency, redaction of returned rows).
39
+ */
40
+ export declare const NON_GENERATABLE_OPERATIONS: readonly string[];
41
+ /**
42
+ * PostgREST operations the read framework can generate tools for.
43
+ * Anything not in this set is either read-only-but-unsupported (extend
44
+ * the framework) or a side effect (dedicated tool required).
45
+ */
46
+ export declare const READ_OPERATIONS: readonly string[];
47
+ /**
48
+ * Field-name patterns that look like credential material. Used to redact
49
+ * fields from responses AND from `select`/`filter`/`order` allowlists when
50
+ * a sensitive resource is opted in via {@link CatalogueFilter.includeSensitive}.
51
+ *
52
+ * The patterns match on token boundaries (`^`, `_`, `$`) so we do not
53
+ * accidentally swallow innocuous names like `content_hash`, `visitor_key`,
54
+ * or `public_key`. They are conservative on purpose: Persist's
55
+ * resource-level `sensitivity` marker is the primary defence; this list
56
+ * exists as a belt-and-braces filter that catches secret-shaped column
57
+ * names inside a resource that a caller has intentionally opened up.
58
+ */
59
+ export declare const SENSITIVE_FIELD_PATTERNS: readonly RegExp[];
60
+ /** `true` when the resource's declared sensitivity is `sensitive` or `restricted`. */
61
+ export declare function isSensitiveResource(resource: PersistResource): boolean;
62
+ /**
63
+ * `true` when the resource declares any {@link PersistResource.side_effects}
64
+ * markers — notification emission, template rendering, background job
65
+ * scheduling, etc. Side-effecting resources are ineligible for the
66
+ * generic read framework: their state transitions must be modelled as
67
+ * dedicated tools.
68
+ */
69
+ export declare function hasSideEffects(resource: PersistResource): boolean;
70
+ /** `true` when a field name matches any {@link SENSITIVE_FIELD_PATTERNS} entry. */
71
+ export declare function isSensitiveField(name: string): boolean;
72
+ /**
73
+ * Return the subset of a resource's fields that must be redacted from
74
+ * any response and stripped from the select/filter/order allowlists.
75
+ * Names are returned in the resource's declared field order so callers
76
+ * can advertise them deterministically.
77
+ */
78
+ export declare function sensitiveFieldNames(resource: PersistResource): string[];
79
+ /**
80
+ * Return the resource's field names with the sensitive set removed —
81
+ * i.e. the fields the read framework may safely expose. Deterministic
82
+ * order (resource-declared order, sensitive rows dropped).
83
+ */
84
+ export declare function visibleFieldNames(resource: PersistResource): string[];
85
+ /**
86
+ * True when the resource declares at least one read operation the
87
+ * generator supports (`list` or `read`). Resources that only support
88
+ * write operations exist for side-effect paths and must never be
89
+ * surfaced by the read framework.
90
+ */
91
+ export declare function hasAnyReadOperation(resource: PersistResource): boolean;
92
+ /**
93
+ * The reason a resource was excluded from the generated catalogue.
94
+ * Emitted on the catalogue exclusion report so operators can trace
95
+ * "why is `foo_bar_list` not advertised?" to the exact guardrail.
96
+ */
97
+ export type ExclusionReason = 'no_read_operations' | 'sensitive' | 'restricted' | 'side_effects';
98
+ /**
99
+ * Decision object for one resource: whether the generator may emit
100
+ * describe/list/get for it, and if not, why not.
101
+ *
102
+ * `sensitive`/`restricted` exclusions can be overridden by callers who
103
+ * pass `includeSensitive: true` to the catalogue — in that case the
104
+ * generator still fires, but the field redaction guardrail
105
+ * (see {@link sensitiveFieldNames}) prunes any credential-shaped columns
106
+ * from the returned rows. Side-effect exclusions are hard: there is no
107
+ * `includeSideEffects` opt-in.
108
+ */
109
+ export interface EligibilityDecision {
110
+ eligible: boolean;
111
+ reasons: ExclusionReason[];
112
+ }
113
+ export interface EligibilityOptions {
114
+ /**
115
+ * When `true`, resources marked `sensitive` or `restricted` become
116
+ * eligible for generation. Field redaction still applies. Default
117
+ * `false` — sensitive resources are hidden.
118
+ */
119
+ includeSensitive?: boolean;
120
+ }
121
+ /**
122
+ * Decide whether a resource may be surfaced by the generated read
123
+ * framework, and record every guardrail it fails.
124
+ *
125
+ * The eligibility check is defence-in-depth: even with
126
+ * `includeSensitive: true`, a `side_effects` marker or a missing read
127
+ * operation still rejects the resource — the caller cannot bypass those
128
+ * two rules through the catalogue filter.
129
+ */
130
+ export declare function evaluateResourceEligibility(resource: PersistResource, options?: EligibilityOptions): EligibilityDecision;
131
+ /**
132
+ * Assert that a resource description carries no PostgREST operation
133
+ * that MCP will never generate a tool for. Called by the resource-tools
134
+ * factory as a hard invariant: if a future change accidentally wires a
135
+ * write operation into the generator, the build will crash immediately
136
+ * instead of silently exposing a generic mutator.
137
+ */
138
+ export declare function assertNoAutoGeneratedWrites(resource: PersistResource): void;
139
+ /**
140
+ * Redact a plain PostgREST row: return a shallow copy with every
141
+ * {@link isSensitiveField} key removed. Non-object inputs are returned
142
+ * as-is so array wrappers and null rows survive unchanged.
143
+ */
144
+ export declare function redactRow<T>(row: T): T;
145
+ /** Apply {@link redactRow} across a rowset. */
146
+ export declare function redactRows<T>(rows: T[]): T[];
147
+ //# sourceMappingURL=guardrails.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardrails.d.ts","sourceRoot":"","sources":["../../src/generated-reads/guardrails.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,2CAA2C,CAAC;AAEnD;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,EAAE,SAAS,MAAM,EAIvD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAAqB,CAAC;AAEnE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAerD,CAAC;AAEF,sFAAsF;AACtF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAEtE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAEjE;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,EAAE,CAIvE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,EAAE,CAIrE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAEtE;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,GACvB,oBAAoB,GACpB,WAAW,GACX,YAAY,GACZ,cAAc,CAAC;AAEnB;;;;;;;;;;GAUG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,eAAe,EACzB,OAAO,GAAE,kBAAuB,GAC/B,mBAAmB,CASrB;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAe3E;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAQtC;AAED,+CAA+C;AAC/C,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAE5C"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * MCP sensitive-resource and side-effect guardrails (WI-0003501).
3
+ *
4
+ * The schema-driven read framework (WI-0003500) will happily produce
5
+ * describe/list/get tools for every PostgREST resource in the pinned
6
+ * Persist contract. That is unsafe by default: some resources are
7
+ * classified `sensitive`/`restricted` (credentials, financial secrets,
8
+ * authorisation internals) and others declare `side_effects`
9
+ * (notifications, state transitions) that must never be triggered by a
10
+ * generic CRUD path.
11
+ *
12
+ * This module is the single choke point that decides:
13
+ *
14
+ * - which resources the generated catalogue is allowed to surface;
15
+ * - which fields must be redacted when a sensitive resource is
16
+ * explicitly opted in (defence-in-depth for password/token/secret
17
+ * columns);
18
+ * - which write operations (`create`, `update`, `delete`) can never be
19
+ * generated automatically — dedicated tools with explicit
20
+ * confirmation/idempotency semantics are required.
21
+ *
22
+ * The rules encoded here are intentionally conservative: when in doubt,
23
+ * fail closed. Callers who genuinely need a sensitive resource must set
24
+ * `includeSensitive` on the catalogue filter (and pay for the redaction
25
+ * that comes with it); callers who need write access to a side-effecting
26
+ * resource must build a dedicated tool with a hand-written safety
27
+ * envelope. There is no generator escape hatch for that second case.
28
+ */
29
+ /**
30
+ * PostgREST operations that MCP will NEVER auto-generate as tools.
31
+ *
32
+ * Generic CRUD wrappers on `create`/`update`/`delete` are prohibited
33
+ * even for `normal` resources — they trivially become side-effect
34
+ * vectors (status transitions, notifications, payments, provisioning)
35
+ * as soon as they are exposed to a model. Every mutating action must be
36
+ * a dedicated tool with an explicit safety envelope
37
+ * (confirmation semantics, idempotency, redaction of returned rows).
38
+ */
39
+ export const NON_GENERATABLE_OPERATIONS = [
40
+ 'create',
41
+ 'update',
42
+ 'delete',
43
+ ];
44
+ /**
45
+ * PostgREST operations the read framework can generate tools for.
46
+ * Anything not in this set is either read-only-but-unsupported (extend
47
+ * the framework) or a side effect (dedicated tool required).
48
+ */
49
+ export const READ_OPERATIONS = ['list', 'read'];
50
+ /**
51
+ * Field-name patterns that look like credential material. Used to redact
52
+ * fields from responses AND from `select`/`filter`/`order` allowlists when
53
+ * a sensitive resource is opted in via {@link CatalogueFilter.includeSensitive}.
54
+ *
55
+ * The patterns match on token boundaries (`^`, `_`, `$`) so we do not
56
+ * accidentally swallow innocuous names like `content_hash`, `visitor_key`,
57
+ * or `public_key`. They are conservative on purpose: Persist's
58
+ * resource-level `sensitivity` marker is the primary defence; this list
59
+ * exists as a belt-and-braces filter that catches secret-shaped column
60
+ * names inside a resource that a caller has intentionally opened up.
61
+ */
62
+ export const SENSITIVE_FIELD_PATTERNS = [
63
+ /(^|_)password($|_hash$|_salt$)/i,
64
+ /(^|_)secret(s)?$/i,
65
+ /(^|_)client_secret$/i,
66
+ /(^|_)access_token$/i,
67
+ /(^|_)refresh_token$/i,
68
+ /(^|_)bearer_token$/i,
69
+ /(^|_)auth_token$/i,
70
+ /(^|_)session_token$/i,
71
+ /(^|_)api_key$/i,
72
+ /(^|_)private_key$/i,
73
+ /(^|_)encrypted_private_key$/i,
74
+ /(^|_)credentials?$/i,
75
+ /(^|_)cvv$/i,
76
+ /(^|_)pin(_hash)?$/i,
77
+ ];
78
+ /** `true` when the resource's declared sensitivity is `sensitive` or `restricted`. */
79
+ export function isSensitiveResource(resource) {
80
+ return resource.sensitivity !== 'normal';
81
+ }
82
+ /**
83
+ * `true` when the resource declares any {@link PersistResource.side_effects}
84
+ * markers — notification emission, template rendering, background job
85
+ * scheduling, etc. Side-effecting resources are ineligible for the
86
+ * generic read framework: their state transitions must be modelled as
87
+ * dedicated tools.
88
+ */
89
+ export function hasSideEffects(resource) {
90
+ return resource.side_effects.length > 0;
91
+ }
92
+ /** `true` when a field name matches any {@link SENSITIVE_FIELD_PATTERNS} entry. */
93
+ export function isSensitiveField(name) {
94
+ return SENSITIVE_FIELD_PATTERNS.some((re) => re.test(name));
95
+ }
96
+ /**
97
+ * Return the subset of a resource's fields that must be redacted from
98
+ * any response and stripped from the select/filter/order allowlists.
99
+ * Names are returned in the resource's declared field order so callers
100
+ * can advertise them deterministically.
101
+ */
102
+ export function sensitiveFieldNames(resource) {
103
+ return resource.fields
104
+ .map((f) => f.name)
105
+ .filter(isSensitiveField);
106
+ }
107
+ /**
108
+ * Return the resource's field names with the sensitive set removed —
109
+ * i.e. the fields the read framework may safely expose. Deterministic
110
+ * order (resource-declared order, sensitive rows dropped).
111
+ */
112
+ export function visibleFieldNames(resource) {
113
+ return resource.fields
114
+ .map((f) => f.name)
115
+ .filter((n) => !isSensitiveField(n));
116
+ }
117
+ /**
118
+ * True when the resource declares at least one read operation the
119
+ * generator supports (`list` or `read`). Resources that only support
120
+ * write operations exist for side-effect paths and must never be
121
+ * surfaced by the read framework.
122
+ */
123
+ export function hasAnyReadOperation(resource) {
124
+ return resource.operations.some((op) => READ_OPERATIONS.includes(op));
125
+ }
126
+ /**
127
+ * Decide whether a resource may be surfaced by the generated read
128
+ * framework, and record every guardrail it fails.
129
+ *
130
+ * The eligibility check is defence-in-depth: even with
131
+ * `includeSensitive: true`, a `side_effects` marker or a missing read
132
+ * operation still rejects the resource — the caller cannot bypass those
133
+ * two rules through the catalogue filter.
134
+ */
135
+ export function evaluateResourceEligibility(resource, options = {}) {
136
+ const reasons = [];
137
+ if (!hasAnyReadOperation(resource))
138
+ reasons.push('no_read_operations');
139
+ if (hasSideEffects(resource))
140
+ reasons.push('side_effects');
141
+ if (!options.includeSensitive) {
142
+ if (resource.sensitivity === 'sensitive')
143
+ reasons.push('sensitive');
144
+ if (resource.sensitivity === 'restricted')
145
+ reasons.push('restricted');
146
+ }
147
+ return { eligible: reasons.length === 0, reasons };
148
+ }
149
+ /**
150
+ * Assert that a resource description carries no PostgREST operation
151
+ * that MCP will never generate a tool for. Called by the resource-tools
152
+ * factory as a hard invariant: if a future change accidentally wires a
153
+ * write operation into the generator, the build will crash immediately
154
+ * instead of silently exposing a generic mutator.
155
+ */
156
+ export function assertNoAutoGeneratedWrites(resource) {
157
+ const forbidden = resource.operations.filter((op) => NON_GENERATABLE_OPERATIONS.includes(op));
158
+ if (forbidden.length > 0 && forbidden.length === resource.operations.length) {
159
+ // Resource is write-only — hasAnyReadOperation check already caught
160
+ // this; skip the redundant assertion.
161
+ return;
162
+ }
163
+ // The generator only emits describe/list/get, so the presence of write
164
+ // operations on the source resource is fine — this assertion exists
165
+ // to guard against a *future* refactor that starts emitting them.
166
+ // Nothing to fail on today, but leave the assertion body in place so
167
+ // adding a new NON_GENERATABLE op will still be caught by tests that
168
+ // scan for its side effects.
169
+ }
170
+ /**
171
+ * Redact a plain PostgREST row: return a shallow copy with every
172
+ * {@link isSensitiveField} key removed. Non-object inputs are returned
173
+ * as-is so array wrappers and null rows survive unchanged.
174
+ */
175
+ export function redactRow(row) {
176
+ if (row === null || typeof row !== 'object' || Array.isArray(row))
177
+ return row;
178
+ const out = {};
179
+ for (const [key, value] of Object.entries(row)) {
180
+ if (isSensitiveField(key))
181
+ continue;
182
+ out[key] = value;
183
+ }
184
+ return out;
185
+ }
186
+ /** Apply {@link redactRow} across a rowset. */
187
+ export function redactRows(rows) {
188
+ return rows.map(redactRow);
189
+ }
190
+ //# sourceMappingURL=guardrails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardrails.js","sourceRoot":"","sources":["../../src/generated-reads/guardrails.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAOH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAsB;IAC3D,QAAQ;IACR,QAAQ;IACR,QAAQ;CACT,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEnE;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAsB;IACzD,iCAAiC;IACjC,mBAAmB;IACnB,sBAAsB;IACtB,qBAAqB;IACrB,sBAAsB;IACtB,qBAAqB;IACrB,mBAAmB;IACnB,sBAAsB;IACtB,gBAAgB;IAChB,oBAAoB;IACpB,8BAA8B;IAC9B,qBAAqB;IACrB,YAAY;IACZ,oBAAoB;CACrB,CAAC;AAEF,sFAAsF;AACtF,MAAM,UAAU,mBAAmB,CAAC,QAAyB;IAC3D,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,QAAyB;IACtD,OAAO,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAyB;IAC3D,OAAO,QAAQ,CAAC,MAAM;SACnB,GAAG,CAAC,CAAC,CAAuB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SACxC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAyB;IACzD,OAAO,QAAQ,CAAC,MAAM;SACnB,GAAG,CAAC,CAAC,CAAuB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SACxC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAyB;IAC3D,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AACxE,CAAC;AAsCD;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CACzC,QAAyB,EACzB,UAA8B,EAAE;IAEhC,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACvE,IAAI,cAAc,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3D,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC9B,IAAI,QAAQ,CAAC,WAAW,KAAK,WAAW;YAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpE,IAAI,QAAQ,CAAC,WAAW,KAAK,YAAY;YAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;AACrD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CAAC,QAAyB;IACnE,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAClD,0BAA0B,CAAC,QAAQ,CAAC,EAAE,CAAC,CACxC,CAAC;IACF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QAC5E,oEAAoE;QACpE,sCAAsC;QACtC,OAAO;IACT,CAAC;IACD,uEAAuE;IACvE,oEAAoE;IACpE,kEAAkE;IAClE,qEAAqE;IACrE,qEAAqE;IACrE,6BAA6B;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAI,GAAM;IACjC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAC9E,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAA8B,CAAC,EAAE,CAAC;QAC1E,IAAI,gBAAgB,CAAC,GAAG,CAAC;YAAE,SAAS;QACpC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC;IACD,OAAO,GAAQ,CAAC;AAClB,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,UAAU,CAAI,IAAS;IACrC,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { DEFAULT_LIMIT, MAX_LIMIT, QueryBuilderError, buildGetQuery, buildListQuery, isSingletonPrimaryKey, } from './query-builder.js';
2
+ export type { BuiltQuery, FilterClause, GetQueryInput, ListQueryInput, OrderClause, OrderDirection, OrderNulls, } from './query-builder.js';
3
+ export { GENERATED_READ_ERRORS, buildResourceTools, } from './resource-tools.js';
4
+ export type { GeneratedDescribeResponse, GeneratedListResponse, GeneratedResourceTools, } from './resource-tools.js';
5
+ export { buildGeneratedReadCatalogue, buildGeneratedReadCatalogueReport, groupGeneratedReadsByModule, } from './catalogue.js';
6
+ export type { CatalogueExclusion, CatalogueFilter, CatalogueReport, } from './catalogue.js';
7
+ export { NON_GENERATABLE_OPERATIONS, READ_OPERATIONS, SENSITIVE_FIELD_PATTERNS, assertNoAutoGeneratedWrites, evaluateResourceEligibility, hasAnyReadOperation, hasSideEffects, isSensitiveField, isSensitiveResource, redactRow, redactRows, sensitiveFieldNames, visibleFieldNames, } from './guardrails.js';
8
+ export type { EligibilityDecision, EligibilityOptions, ExclusionReason, } from './guardrails.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generated-reads/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,UAAU,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,WAAW,EACX,cAAc,EACd,UAAU,GACX,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,yBAAyB,EACzB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,2BAA2B,EAC3B,iCAAiC,EACjC,2BAA2B,GAC5B,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,0BAA0B,EAC1B,eAAe,EACf,wBAAwB,EACxB,2BAA2B,EAC3B,2BAA2B,EAC3B,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,GAChB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { DEFAULT_LIMIT, MAX_LIMIT, QueryBuilderError, buildGetQuery, buildListQuery, isSingletonPrimaryKey, } from './query-builder.js';
2
+ export { GENERATED_READ_ERRORS, buildResourceTools, } from './resource-tools.js';
3
+ export { buildGeneratedReadCatalogue, buildGeneratedReadCatalogueReport, groupGeneratedReadsByModule, } from './catalogue.js';
4
+ export { NON_GENERATABLE_OPERATIONS, READ_OPERATIONS, SENSITIVE_FIELD_PATTERNS, assertNoAutoGeneratedWrites, evaluateResourceEligibility, hasAnyReadOperation, hasSideEffects, isSensitiveField, isSensitiveResource, redactRow, redactRows, sensitiveFieldNames, visibleFieldNames, } from './guardrails.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generated-reads/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAW5B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EACL,2BAA2B,EAC3B,iCAAiC,EACjC,2BAA2B,GAC5B,MAAM,gBAAgB,CAAC;AAOxB,OAAO,EACL,0BAA0B,EAC1B,eAAe,EACf,wBAAwB,EACxB,2BAA2B,EAC3B,2BAA2B,EAC3B,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,99 @@
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 type { PersistResource } from '../contracts/persist-resource-contract.js';
32
+ /** Server-side ceiling. No caller can ask for more rows per page. */
33
+ export declare const MAX_LIMIT = 200;
34
+ /** Default page size when the caller does not supply one. */
35
+ export declare const DEFAULT_LIMIT = 50;
36
+ /** Direction values PostgREST accepts on an `order` clause. */
37
+ export declare const ORDER_DIRECTIONS: readonly ["asc", "desc"];
38
+ export type OrderDirection = (typeof ORDER_DIRECTIONS)[number];
39
+ /** Nulls-placement modifiers PostgREST accepts on an `order` clause. */
40
+ export declare const ORDER_NULLS: readonly ["first", "last"];
41
+ export type OrderNulls = (typeof ORDER_NULLS)[number];
42
+ /** Single filter clause: `field op value(s)`. */
43
+ export interface FilterClause {
44
+ field: string;
45
+ op: string;
46
+ /** Scalar value for point ops (`eq`, `gt`, `like`, …). */
47
+ value?: string | number | boolean | null;
48
+ /** Value list for the `in` operator. Rejected on any other op. */
49
+ values?: Array<string | number | boolean | null>;
50
+ }
51
+ /** Single order clause. */
52
+ export interface OrderClause {
53
+ field: string;
54
+ direction?: OrderDirection;
55
+ nulls?: OrderNulls;
56
+ }
57
+ /** Args accepted by the generated list tool. */
58
+ export interface ListQueryInput {
59
+ filters?: FilterClause[];
60
+ order?: OrderClause[];
61
+ select?: string[];
62
+ limit?: number;
63
+ offset?: number;
64
+ }
65
+ /** Args accepted by the generated get tool. */
66
+ export interface GetQueryInput {
67
+ id: string;
68
+ select?: string[];
69
+ }
70
+ /**
71
+ * Fully validated PostgREST request the api-client can dispatch. The
72
+ * `path` is the resource's `public_endpoint`; `query` is a plain object
73
+ * suitable for the api-client's `URLSearchParams`-based encoder.
74
+ */
75
+ export interface BuiltQuery {
76
+ path: string;
77
+ query: Record<string, string>;
78
+ /** Effective limit (post-clamp) — mirrored on the response envelope. */
79
+ limit: number;
80
+ /** Effective offset — mirrored on the response envelope. */
81
+ offset: number;
82
+ }
83
+ export declare class QueryBuilderError extends Error {
84
+ constructor(message: string);
85
+ }
86
+ /**
87
+ * Build a validated PostgREST list-query. Throws {@link QueryBuilderError}
88
+ * on any input that would breach the resource's declared safety envelope.
89
+ */
90
+ export declare function buildListQuery(resource: PersistResource, input: ListQueryInput): BuiltQuery;
91
+ /**
92
+ * Build a validated PostgREST get-by-primary-key query. Resources with
93
+ * a composite primary key are not supported here — the caller must check
94
+ * {@link isSingletonPrimaryKey} before invoking.
95
+ */
96
+ export declare function buildGetQuery(resource: PersistResource, input: GetQueryInput): BuiltQuery;
97
+ /** `true` iff the resource's primary key is a single scalar column. */
98
+ export declare function isSingletonPrimaryKey(resource: PersistResource): boolean;
99
+ //# sourceMappingURL=query-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../src/generated-reads/query-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,2CAA2C,CAAC;AAGnD,qEAAqE;AACrE,eAAO,MAAM,SAAS,MAAM,CAAC;AAC7B,6DAA6D;AAC7D,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,0BAA2B,CAAC;AACzD,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,wEAAwE;AACxE,eAAO,MAAM,WAAW,4BAA6B,CAAC;AACtD,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtD,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACzC,kEAAkE;IAClE,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;CAClD;AAED,2BAA2B;AAC3B,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AA4KD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,cAAc,GACpB,UAAU,CA8BZ;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,aAAa,GACnB,UAAU,CAiBZ;AAED,uEAAuE;AACvE,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAExE"}