permdock 0.4.0 → 0.6.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 (515) hide show
  1. package/README.md +37 -35
  2. package/dist/{schema-Bol6gqXA.js → 2020-C9VN-x8c.js} +5 -130
  3. package/dist/a2a/index.d.ts +6 -6
  4. package/dist/a2a/index.js +14 -17
  5. package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
  6. package/dist/adoption-scan-DCYe60Pi.js +107 -0
  7. package/dist/agent/index.d.ts +3 -0
  8. package/dist/agent/index.js +1 -0
  9. package/dist/ai-sdk/index.d.ts +18 -35
  10. package/dist/ai-sdk/index.js +37 -23
  11. package/dist/{app-data-CV8pqqMi.js → app-data-MuyzVqX8.js} +2 -1
  12. package/dist/approval-header-CJACtHkv.js +23 -0
  13. package/dist/approval-prompt-Dg5LeAcT.js +62 -0
  14. package/dist/approval-prompt-DvSSPQJX.d.ts +57 -0
  15. package/dist/approvals/index.d.ts +5 -3
  16. package/dist/approvals/index.js +8 -5
  17. package/dist/approvals-p1PGoVjb.js +995 -0
  18. package/dist/arazzo-41WuzHou.js +36 -0
  19. package/dist/{arazzo-C4BcskbX.js → arazzo-CaUVBn7D.js} +20 -14
  20. package/dist/args-IIolxxKA.js +197 -0
  21. package/dist/astro/index.d.ts +43 -0
  22. package/dist/astro/index.js +27 -0
  23. package/dist/audience-DabClFLQ.js +55 -0
  24. package/dist/auth-DRLEizbL.js +178 -0
  25. package/dist/authzen/index.d.ts +26 -6
  26. package/dist/authzen/index.js +94 -79
  27. package/dist/automation-BNM3TtDo.d.ts +114 -0
  28. package/dist/automation-DVjOckjV.js +157 -0
  29. package/dist/better-auth/index.d.ts +8 -6
  30. package/dist/better-auth/index.js +9 -8
  31. package/dist/better-supabase/index.d.ts +357 -30
  32. package/dist/better-supabase/index.js +936 -194
  33. package/dist/{bind-kk-uyCwH.js → bind-CAvgUuKs.js} +14 -10
  34. package/dist/{bind-BzqG8SMb.d.ts → bind-DOyrv6zi.d.ts} +12 -10
  35. package/dist/body-CH5of8Ne.js +10 -0
  36. package/dist/body-text-QcXok_SI.js +52 -0
  37. package/dist/{build-instance-DIIV9DbC.js → build-instance-Bu_eDqYw.js} +4 -3
  38. package/dist/{canonical-json-CFKyFOke.js → canonical-json-BC8_nMTw.js} +5 -3
  39. package/dist/{capability-CksyCWDH.d.ts → capability-Drg-1YhL.d.ts} +44 -25
  40. package/dist/{capability-txATtKV4.js → capability-N1K9IpqS.js} +68 -42
  41. package/dist/casbin-Cr7RLtA3.js +30 -0
  42. package/dist/casbin-Dyu2gnUD.js +234 -0
  43. package/dist/casl-64gpT-8x.js +24 -0
  44. package/dist/casl-DjEDhTCP.js +299 -0
  45. package/dist/catalog/index.d.ts +74 -2
  46. package/dist/catalog/index.js +51 -2
  47. package/dist/catalog-BoWglDPI.js +1 -0
  48. package/dist/catalog-DZVbrF-z.js +52 -0
  49. package/dist/{catalog-tZUyOfOv.js → catalog-HD2gf5mY.js} +51 -6
  50. package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-Cdn7-0pQ.js} +45 -23
  51. package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
  52. package/dist/chat/index.d.ts +2 -0
  53. package/dist/chat/index.js +224 -0
  54. package/dist/chat-sdk/index.d.ts +87 -0
  55. package/dist/chat-sdk/index.js +197 -0
  56. package/dist/claims-map-7oQ3ue4X.js +13 -0
  57. package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
  58. package/dist/claude-agent/index.d.ts +7 -14
  59. package/dist/claude-agent/index.js +24 -27
  60. package/dist/clerk/index.d.ts +9 -8
  61. package/dist/clerk/index.js +9 -14
  62. package/dist/cli/bin.js +36 -17
  63. package/dist/cli/index.d.ts +19 -5
  64. package/dist/cli/index.js +164 -4
  65. package/dist/cloud/index.d.ts +102 -63
  66. package/dist/cloud/index.js +239 -340
  67. package/dist/cloud-ytQ3uviA.js +87 -0
  68. package/dist/codemod-5mpSpnUY.js +37 -0
  69. package/dist/codemod-ua2hHy7w.js +2084 -0
  70. package/dist/collect-Ci6akVwH.js +55 -0
  71. package/dist/collect-D7eQDffE.js +1 -0
  72. package/dist/{collect-2SrB7lfk.js → collect-mLTY4nwb.js} +75 -11
  73. package/dist/command-L8EstFNm.js +6 -0
  74. package/dist/compile/index.d.ts +1 -1
  75. package/dist/compile/index.js +1 -2
  76. package/dist/{compile-CtTP7eur.d.ts → compile-1bsAezL0.d.ts} +5 -3
  77. package/dist/{compile-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
  78. package/dist/completion-BTFrHZhX.js +143 -0
  79. package/dist/config-Bj2Ixq3d.js +26 -0
  80. package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
  81. package/dist/{config-report--Xb9APJS.js → config-report-DSpsLpCE.js} +15 -5
  82. package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
  83. package/dist/{context-DieZVJXu.js → context-B_u3_bDJ.js} +2 -2
  84. package/dist/convex/index.d.ts +11 -10
  85. package/dist/convex/index.js +6 -4
  86. package/dist/create-B30OMUOJ.d.ts +107 -0
  87. package/dist/create-CBMmFie-.d.ts +138 -0
  88. package/dist/create-CGm28gyI.js +130 -0
  89. package/dist/create-CQWIpUG-.js +403 -0
  90. package/dist/{create-BBO24vj6.js → create-DCF2SvoT.js} +31 -32
  91. package/dist/create-D_NmPOdH.d.ts +110 -0
  92. package/dist/{credential-kue0qpbm.js → credential-BcoiejpY.js} +152 -31
  93. package/dist/credentials-DPyHmYz5.js +74 -0
  94. package/dist/delegation-j6-rc37o.js +286 -0
  95. package/dist/delivery/index.d.ts +5 -0
  96. package/dist/delivery/index.js +5 -0
  97. package/dist/delivery-DCAgNyCn.js +499 -0
  98. package/dist/delivery-event-xX4obB8F.js +40 -0
  99. package/dist/{denied-text-DfRk15uw.d.ts → denied-text-CiFQNuMV.d.ts} +5 -5
  100. package/dist/{describe-C3ldA9os.d.ts → describe-B5qgDvEW.d.ts} +2 -2
  101. package/dist/{describe-Cgkp7eP0.js → describe-BybMRY7A.js} +6 -2
  102. package/dist/device-BARQ8eYG.js +193 -0
  103. package/dist/{diff-rpqoe7Ag.js → diff-3jbx6Rm4.js} +60 -54
  104. package/dist/diff-CmuSD3vc.js +37 -0
  105. package/dist/doctor-3ZqNHX_G.js +44 -0
  106. package/dist/{doctor-owlv6ddh.js → doctor-BdZw53-k.js} +245 -50
  107. package/dist/drizzle/index.d.ts +5 -3
  108. package/dist/drizzle/index.js +2 -2
  109. package/dist/elysia/index.d.ts +16 -13
  110. package/dist/elysia/index.js +13 -12
  111. package/dist/env-DJZrPjRi.js +8 -0
  112. package/dist/errors-BDUwg2qC.js +27 -0
  113. package/dist/{errors-drnfxYtm.js → errors-BKy0EfhN.js} +5 -9
  114. package/dist/errors-BWXBMaKK.d.ts +11 -0
  115. package/dist/errors-CWTY6uih.js +143 -0
  116. package/dist/{errors-OD_4c__H.d.ts → errors-DH5QEGXh.d.ts} +2 -2
  117. package/dist/evaluate-CNClBvcj.js +1785 -0
  118. package/dist/evaluations-C_1vdSZc.d.ts +32 -0
  119. package/dist/{evaluations-C9YJsv3H.js → evaluations-beAooV0n.js} +145 -34
  120. package/dist/eve/index.d.ts +12 -16
  121. package/dist/eve/index.js +22 -28
  122. package/dist/event-time-CsegxXxB.js +23 -0
  123. package/dist/expiry-D4_YKRKD.js +52 -0
  124. package/dist/express/index.d.ts +13 -10
  125. package/dist/express/index.js +12 -11
  126. package/dist/fastify/index.d.ts +25 -22
  127. package/dist/fastify/index.js +13 -12
  128. package/dist/fetch-adapter-DD_gfmrC.js +120 -0
  129. package/dist/fetch-adapter-Dw0MTS3D.d.ts +31 -0
  130. package/dist/fields-OYG_JR78.js +203 -0
  131. package/dist/files-C5ZI27eV.js +124 -0
  132. package/dist/{fixtures-h2eG2OZV.js → fixtures-B7XrLeY7.js} +8 -7
  133. package/dist/flags-C3DktBDY.js +86 -0
  134. package/dist/{from-snapshot-7REQZe0H.js → from-snapshot-CTCMsFZk.js} +55 -52
  135. package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
  136. package/dist/{grantee-CXY-0C87.js → grantee-hxrUsbpM.js} +16 -6
  137. package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DbENBHLB.js} +5 -4
  138. package/dist/h3/index.d.ts +37 -0
  139. package/dist/h3/index.js +35 -0
  140. package/dist/headers-BIjfMaoC.js +8 -0
  141. package/dist/headers-CIbDTUTK.d.ts +7 -0
  142. package/dist/{helpers-C9YmyBIa.js → helpers-CBYVMjwh.js} +45 -38
  143. package/dist/hono/index.d.ts +12 -9
  144. package/dist/hono/index.js +13 -12
  145. package/dist/hosted-B46-5LYE.js +315 -0
  146. package/dist/hosted-BPk51-kX.d.ts +78 -0
  147. package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
  148. package/dist/http-DXJ37RDA.js +46 -0
  149. package/dist/{http-BEbdMZ05.js → http-ujKm0JXE.js} +1 -2
  150. package/dist/{import-UHk1N7vH.js → import-CNV7I2Dw.js} +25 -20
  151. package/dist/{import-BFIlhetD.js → import-wyqXUyjm.js} +190 -53
  152. package/dist/index-B8YjkEZ4.d.ts +210 -0
  153. package/dist/index-C-6Letxg.d.ts +431 -0
  154. package/dist/index-CaxrMD1A.d.ts +1 -0
  155. package/dist/{index-BwMe94Xq.d.ts → index-Ch8LpNDp.d.ts} +34 -16
  156. package/dist/index-Cp_ilKi1.d.ts +91 -0
  157. package/dist/index-CueFnxQc.d.ts +110 -0
  158. package/dist/index-DuWxc5dt.d.ts +909 -0
  159. package/dist/index.d.ts +19 -15
  160. package/dist/index.js +31 -21
  161. package/dist/init-DeMYsnYJ.js +96 -0
  162. package/dist/init-GG6Jh8HD.js +95 -0
  163. package/dist/{instance-options-plkrsAog.d.ts → instance-options-BsVpyGIk.d.ts} +2 -2
  164. package/dist/instance-snapshot-BOEhcqIF.js +601 -0
  165. package/dist/instant-BluqDvyS.js +19 -0
  166. package/dist/internals-Dk8A8fX3.js +17 -0
  167. package/dist/{json-schema-DBkdUuCO.js → json-schema-B-vAwlde.js} +45 -6
  168. package/dist/json-schema-CN_iLFH2.d.ts +40 -0
  169. package/dist/jwt/index.d.ts +18 -11
  170. package/dist/jwt/index.js +156 -135
  171. package/dist/{kernel-CB3LrIJM.js → kernel-D0NVb1cK.js} +52 -24
  172. package/dist/kysely/index.d.ts +5 -3
  173. package/dist/kysely/index.js +2 -2
  174. package/dist/load-BxEtwlBS.js +1 -0
  175. package/dist/{load-C3_oTHyO.js → load-DFS_ry0W.js} +22 -6
  176. package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
  177. package/dist/login-Dfe5RlYk.js +68 -0
  178. package/dist/login-imhuwvn3.js +254 -0
  179. package/dist/manifest-C8IzW3Do.js +42 -0
  180. package/dist/manifest-dvL2XEe1.js +370 -0
  181. package/dist/manifest-json-CAGzls-C.js +9 -0
  182. package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
  183. package/dist/manifest-schema-C0kK_8V0.js +399 -0
  184. package/dist/{map-claims-AVlBaJoa.js → map-claims-D3oRmTk0.js} +13 -10
  185. package/dist/{map-error-BE27PYkE.js → map-error-Dr70oA_3.js} +3 -3
  186. package/dist/{markers-CiwAOZtO.js → markers-C6joDI3o.js} +2 -1
  187. package/dist/mcp/index.d.ts +22 -12
  188. package/dist/mcp/index.js +57 -39
  189. package/dist/{migrate-BwlB5-Wk.js → migrate-CIq4-E9F.js} +53 -14
  190. package/dist/nest/index.d.ts +12 -9
  191. package/dist/nest/index.js +15 -14
  192. package/dist/next/index.d.ts +18 -21
  193. package/dist/next/index.js +13 -11
  194. package/dist/next/plugin.d.ts +1 -1
  195. package/dist/next/plugin.js +2 -2
  196. package/dist/node/index.d.ts +10 -10
  197. package/dist/node/index.js +7 -9
  198. package/dist/{ocsf-uYFXGVw2.js → ocsf-BFp-PZZA.js} +22 -11
  199. package/dist/openai/index.d.ts +9 -16
  200. package/dist/openai/index.js +17 -24
  201. package/dist/openapi/index.d.ts +3 -3
  202. package/dist/openapi/index.js +1 -1
  203. package/dist/{openapi-DBzHQbov.js → openapi-B7HZ0f-r.js} +8 -8
  204. package/dist/openapi-C4dDTVEd.js +138 -0
  205. package/dist/{openapi-BJdBmYDG.js → openapi-DD1SV-5-.js} +10 -9
  206. package/dist/operation-findings-DgATDpvh.js +36 -0
  207. package/dist/operations-X0VM7F3m.d.ts +59 -0
  208. package/dist/orpc/index.d.ts +13 -10
  209. package/dist/orpc/index.js +20 -15
  210. package/dist/otel/index.d.ts +3 -2
  211. package/dist/otel/index.js +30 -7
  212. package/dist/output-1im__-08.js +88 -0
  213. package/dist/output-files-B3IZJksC.js +1 -0
  214. package/dist/{output-files-CgIsvdSa.js → output-files-DhRBBE4n.js} +24 -26
  215. package/dist/{permission-keys-B26jeyUv.js → ownership-DqaJNJPn.js} +1045 -153
  216. package/dist/{package-root-DtNnpmUd.js → package-root-Dk_ETdkp.js} +1 -1
  217. package/dist/{parse-CVFQHk6c.js → parse-Cxq0WxrA.js} +2 -2
  218. package/dist/{parse-local-manifest-DvYUR0QL.d.ts → parse-local-manifest-5ODwqu8b.d.ts} +1 -1
  219. package/dist/{parse-local-manifest-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +1 -1
  220. package/dist/parse-request-D_tUXG6M.js +26 -0
  221. package/dist/paths-DXSHAMIa.js +42 -0
  222. package/dist/pdp/index.d.ts +7 -3
  223. package/dist/pdp/index.js +45 -26
  224. package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
  225. package/dist/peer-CRvC7Hg1.js +1 -0
  226. package/dist/permdock-BrAscV28.js +868 -0
  227. package/dist/permdock-SV8ZINYT.d.ts +502 -0
  228. package/dist/{permission-registry-BsblpB-z.js → permission-registry-Br4jSNVi.js} +3 -3
  229. package/dist/permissions-B-wCP5ZC.js +30 -0
  230. package/dist/{permissions-CCJ6lmxB.js → permissions-BPxlwVhN.js} +4 -3
  231. package/dist/{permissions-COH-KRgT.d.ts → permissions-u_KHg-sN.d.ts} +1 -2
  232. package/dist/policies-DP2nqRoF.js +295 -0
  233. package/dist/{policy-ur0BBK_e.d.ts → policy-77FSAq_V.d.ts} +2 -2
  234. package/dist/{hosted-CBHgkzDl.js → policy-DbM5YYtV.js} +17 -273
  235. package/dist/policy-from-catalog-C2gMa2Dj.js +450 -0
  236. package/dist/policy-module-CTlwMvLI.js +89 -0
  237. package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-n0uRTsW8.d.ts} +460 -632
  238. package/dist/postgrest-CEgRbefE.d.ts +100 -0
  239. package/dist/postgrest-DAjUkF9w.js +575 -0
  240. package/dist/{powersync-cZe4kzhL.js → powersync-BkWWCS1K.js} +23 -24
  241. package/dist/powersync-DISt6SUe.js +62 -0
  242. package/dist/powersync-MMJ2mI2q.js +1 -0
  243. package/dist/preset/index.d.ts +146 -0
  244. package/dist/preset/index.js +1 -0
  245. package/dist/preset-DZdU0tne.js +1768 -0
  246. package/dist/principal-source-pHneukrx.js +103 -0
  247. package/dist/prisma/index.d.ts +6 -3
  248. package/dist/prisma/index.js +2 -2
  249. package/dist/{problem-CnWraVhC.js → problem-CTviyH5L.js} +13 -23
  250. package/dist/{problem-details-rIIo8B2C.d.ts → problem-details-B45V5d2b.d.ts} +1 -1
  251. package/dist/{problem-details-DECUnXAn.js → problem-details-cn5X30gZ.js} +43 -40
  252. package/dist/problem-types-CJ2325SZ.js +5 -0
  253. package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
  254. package/dist/{protected-BN7BUdY1.js → protected-BlF0F6wL.js} +21 -4
  255. package/dist/{protected-B3_P7xuw.d.ts → protected-RFGpakN9.d.ts} +16 -8
  256. package/dist/{provider-Bi-0HNL3.js → provider-B1al-AZz.js} +2 -2
  257. package/dist/{provider-kwHC9CZD.d.ts → provider-DILL9oPK.d.ts} +1 -1
  258. package/dist/{provider-store-Ctt-81Ni.js → provider-store-DM6DNcta.js} +2 -2
  259. package/dist/pull-CvpINcMK.js +1 -0
  260. package/dist/pull-jEwbf80J.js +256 -0
  261. package/dist/push-BD4f15co.js +116 -0
  262. package/dist/pushed-policy-CqtxkV4G.js +238 -0
  263. package/dist/pushed-policy-DCW91KQU.d.ts +57 -0
  264. package/dist/react/index.d.ts +8 -8
  265. package/dist/react/index.js +6 -6
  266. package/dist/react/provider-client.d.ts +1 -1
  267. package/dist/react/provider-client.js +1 -2
  268. package/dist/react-native/index.d.ts +24 -72
  269. package/dist/react-native/index.js +29 -25
  270. package/dist/{refs-f3imMjNW.js → refs-K6eWUJ0H.js} +1 -1
  271. package/dist/{relation-walk-BXnlLtg2.js → relation-walk-3OyDBF0S.js} +2 -2
  272. package/dist/{relations-CvmSpG67.js → relations-BnCWnJGI.js} +3 -3
  273. package/dist/renames-CGj7YwcQ.js +175 -0
  274. package/dist/{replay-COpmZUfx.d.ts → replay-Bkm-Ne4l.d.ts} +1 -1
  275. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  276. package/dist/{request-context-BVM7aWNs.js → request-context-C81Pip9n.js} +3 -3
  277. package/dist/request-schema-CMreVuFM.js +148 -0
  278. package/dist/resend/index.d.ts +126 -0
  279. package/dist/resend/index.js +379 -0
  280. package/dist/{resource-relations-D1Un3pcz.js → resource-relations-D_jw0BFx.js} +1 -1
  281. package/dist/{retire-BFcxL6un.js → retire-CALjIQ7e.js} +2 -2
  282. package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
  283. package/dist/rls-BAqP4q66.js +336 -0
  284. package/dist/{rls-BEktUaqg.js → rls-DTvYd-lI.js} +288 -690
  285. package/dist/{role-builder-B4GbKM-i.js → role-builder-uWQZ4v84.js} +14 -207
  286. package/dist/{rpc-nYC3cR_u.js → rpc-VSl5ylaQ.js} +7 -7
  287. package/dist/run-CUKuz0A8.js +723 -0
  288. package/dist/run-DDwUaJDU.js +1 -0
  289. package/dist/run-ticket-DocwaTKn.d.ts +124 -0
  290. package/dist/run-ticket-sxFI6LAk.js +337 -0
  291. package/dist/{runtime-D_tMXnsq.js → runtime-D3VTAiCA.js} +1 -1
  292. package/dist/{saas-DtaA4JuW.js → saas-BCXRuXca.js} +16 -14
  293. package/dist/scan-qvOe0hS3.js +29 -0
  294. package/dist/{schema-DjQBcAP9.js → schema-B4v0Qrac.js} +102 -8
  295. package/dist/schema-yLuBWWsh.js +130 -0
  296. package/dist/scim/index.d.ts +2 -2
  297. package/dist/scim/index.js +1 -2
  298. package/dist/{scim-vFR1O5oG.js → scim-ClHtpyV3.js} +208 -76
  299. package/dist/{scopes-tvpa34ep.js → scopes-CUPSjo9q.js} +12 -7
  300. package/dist/server/index.d.ts +12 -143
  301. package/dist/server/index.js +12 -9
  302. package/dist/server-C3WXAHZj.js +453 -0
  303. package/dist/{server-types-DdqBwZN_.d.ts → server-types-CKQiCnON.d.ts} +51 -68
  304. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  305. package/dist/{shared-1uhI-e-b.js → shared-BAK8t4Uo.js} +20 -9
  306. package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
  307. package/dist/signals-D3NcTKUS.js +32 -0
  308. package/dist/sink-4-eQIRWf.d.ts +225 -0
  309. package/dist/sink-BEZSlMS_.js +957 -0
  310. package/dist/{skills-BZdRQkxs.js → skills-B6lVdD_W.js} +13 -6
  311. package/dist/skills-CTYwkl44.js +51 -0
  312. package/dist/snapshot-B7DkYg6g.js +269 -0
  313. package/dist/{snapshot-cache-Cod40D-X.js → snapshot-cache-DZHQ0KF6.js} +11 -5
  314. package/dist/{snapshot-cache-J5T7t_vD.d.ts → snapshot-cache-PXI-vGpY.d.ts} +7 -5
  315. package/dist/solid/index.d.ts +11 -12
  316. package/dist/solid/index.js +7 -7
  317. package/dist/solid-start/index.d.ts +52 -0
  318. package/dist/solid-start/index.js +49 -0
  319. package/dist/{sources-Dljy06zL.d.ts → sources-Xc4zkszI.d.ts} +7 -13
  320. package/dist/{sources-B1-b-R0t.js → sources-vs5dGOsS.js} +125 -119
  321. package/dist/{sql-t8teWOfo.js → sql-B5T1IL83.js} +13 -1
  322. package/dist/src-Cu2m75uo.js +1860 -0
  323. package/dist/ssf/index.d.ts +4 -4
  324. package/dist/ssf/index.js +384 -47
  325. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  326. package/dist/standard-webhooks-rbD7LS6h.d.ts +88 -0
  327. package/dist/storage-C2bWdvJH.js +132 -0
  328. package/dist/{store-ILkLUj_o.js → store-BDutJkDL.js} +40 -53
  329. package/dist/{store-options-CbUHDoSe.js → store-options-u0ycEe8s.js} +26 -21
  330. package/dist/{stores-Cxz_80g-.d.ts → stores-BUGNbJTt.d.ts} +7 -8
  331. package/dist/{stores-BHXdSbw9.js → stores-CGhM8BN_.js} +2 -2
  332. package/dist/{stream-Dwsg6WwE.d.ts → stream-CeCMJmBB.d.ts} +2 -2
  333. package/dist/{stream-BMui98KK.js → stream-CvdUS9V1.js} +9 -2
  334. package/dist/style-DiKWnAvn.js +1 -0
  335. package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
  336. package/dist/subject-BGoM5o8B.js +17 -0
  337. package/dist/supabase/index.d.ts +23 -106
  338. package/dist/supabase/index.js +5 -4
  339. package/dist/supabase/middleware.d.ts +7 -6
  340. package/dist/supabase/middleware.js +13 -11
  341. package/dist/supabase-By_frk3U.js +92 -0
  342. package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-BMoEhZir.js} +960 -64
  343. package/dist/supabase-hook-CCw5m35C.js +1 -0
  344. package/dist/{supabase-C1TWlnYt.js → supabase-x5JtR2tc.js} +99 -206
  345. package/dist/support-session-C6xJQYut.js +158 -0
  346. package/dist/svelte/Protected.svelte +4 -4
  347. package/dist/svelte/index.d.ts +7 -7
  348. package/dist/svelte/index.js +10 -10
  349. package/dist/svelte/runtime.d.ts +3 -3
  350. package/dist/svelte/runtime.js +3 -3
  351. package/dist/svelte/source.d.ts +7 -7
  352. package/dist/svelte/source.js +4 -4
  353. package/dist/sveltekit/index.d.ts +51 -0
  354. package/dist/sveltekit/index.js +27 -0
  355. package/dist/tanstack-start/index.d.ts +51 -0
  356. package/dist/tanstack-start/index.js +40 -0
  357. package/dist/target-Bw37TFNA.js +51 -0
  358. package/dist/{tenancy-DshjqY0n.js → tenancy-DN2QAx9z.js} +5 -5
  359. package/dist/terminal/index.d.ts +11 -9
  360. package/dist/terminal/index.js +23 -287
  361. package/dist/testing/index.d.ts +311 -38
  362. package/dist/testing/index.js +3475 -201
  363. package/dist/testing/saas/index.d.ts +9 -8
  364. package/dist/testing/saas/index.js +2 -2
  365. package/dist/testing/saas/permissions.d.ts +1 -1
  366. package/dist/testing/saas/permissions.js +1 -2
  367. package/dist/text-BMFRfBqc.js +8 -0
  368. package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
  369. package/dist/thenable-yD7SabqG.js +31 -0
  370. package/dist/time-DkWjdL98.js +71 -0
  371. package/dist/{token-Bx9qy30p.js → token-BLZcjQgt.js} +15 -6
  372. package/dist/{tool-refusal-CQ7OEia9.js → tool-refusal-CMLN5xhn.js} +2 -2
  373. package/dist/trpc/index.d.ts +12 -9
  374. package/dist/trpc/index.js +16 -14
  375. package/dist/types-8RnwUAvE.d.ts +107 -0
  376. package/dist/{store-9KO4BlkB.d.ts → types-B3_ooZgZ.d.ts} +100 -75
  377. package/dist/{types-Br9IXUBG.d.ts → types-BdtSDbBO.d.ts} +77 -17
  378. package/dist/types-BtHtcKMr.d.ts +157 -0
  379. package/dist/{types-CqrjB9o6.d.ts → types-BzzaHxt3.d.ts} +23 -11
  380. package/dist/types-C791HFu9.d.ts +332 -0
  381. package/dist/types-C863OQiR.d.ts +57 -0
  382. package/dist/{types-ByUo56un.d.ts → types-CVZSNocA.d.ts} +23 -22
  383. package/dist/{types-DHrmBJLH.d.ts → types-CX7AvRqP.d.ts} +7 -7
  384. package/dist/types-C_IiEs64.d.ts +65 -0
  385. package/dist/{types-7rJVLWe5.d.ts → types-Dfv0aTER.d.ts} +63 -11
  386. package/dist/types-DqzsnlSA.js +67 -0
  387. package/dist/{types-DpWfQdSh.d.ts → types-Druu9wLM.d.ts} +46 -11
  388. package/dist/{types-CIlTojhq.d.ts → types-_WhUP7ud.d.ts} +9 -6
  389. package/dist/{types-CUcFZfpU.d.ts → types-lUlG3TVd.d.ts} +2 -1
  390. package/dist/unplugin/index.d.ts +1 -1
  391. package/dist/unplugin/index.js +2 -2
  392. package/dist/usage-CRVl9V3t.js +32 -0
  393. package/dist/usage-CZpSQP6L.js +1 -0
  394. package/dist/{usage-CG9nOYZw.js → usage-SveTRTyr.js} +54 -11
  395. package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-DHUrAkku.d.ts} +1 -1
  396. package/dist/{validity-dVrUEPJt.js → validity-CZ7-y0Cj.js} +32 -15
  397. package/dist/{verifier-DMr_Zmb_.js → verifier-DHuh-okk.js} +18 -7
  398. package/dist/{verify-BztUB3GX.js → verify-BaAKx7t6.js} +645 -50
  399. package/dist/{version-BEogC-rB.js → version-CEbQ5UeM.js} +4 -3
  400. package/dist/version-DXkYUISx.js +1 -0
  401. package/dist/{views-CJsrBS1f.js → views-DTIIO-oQ.js} +22 -5
  402. package/dist/{permission-types-Dg39z9Kv.d.ts → vocabulary-CN8H_9UF.d.ts} +67 -2
  403. package/dist/vue/index.d.ts +9 -10
  404. package/dist/vue/index.js +8 -8
  405. package/dist/waiter-B986w1oK.d.ts +36 -0
  406. package/dist/waiter-BGUtGYoU.js +67 -0
  407. package/dist/watch--ovlPOc0.js +1 -0
  408. package/dist/{watch-zeucB7eF.js → watch-vea54PRw.js} +44 -5
  409. package/dist/webmcp/index.d.ts +2 -2
  410. package/dist/webmcp/index.js +3 -3
  411. package/dist/where-scope-C9vfEphl.js +306 -0
  412. package/dist/who-can-DWBAcaCQ.js +364 -0
  413. package/dist/wire-delegation-Cv3W2eaM.js +36 -0
  414. package/dist/wire-denial-C7PaVYEM.js +27 -0
  415. package/dist/workflow/index.d.ts +5 -0
  416. package/dist/workflow/index.js +223 -0
  417. package/dist/workflow-sdk/index.d.ts +56 -0
  418. package/dist/workflow-sdk/index.js +78 -0
  419. package/dist/{wrap-Cr93qqdP.d.ts → wrap-C5jC6sKI.d.ts} +2 -1
  420. package/dist/{wrap-DWsU_5Bd.js → wrap-gX61EtpB.js} +7 -6
  421. package/package.json +136 -37
  422. package/schemas/access-event-v1.json +118 -0
  423. package/schemas/approval-request-v1.json +34 -1
  424. package/schemas/approval-signature-v1.json +94 -0
  425. package/schemas/automation-event-v1.json +113 -0
  426. package/schemas/capability-v1.json +84 -0
  427. package/schemas/catalog-event-v1.json +87 -0
  428. package/schemas/catalog-v1.json +123 -12
  429. package/schemas/cli-commands-v1.json +164 -0
  430. package/schemas/cli-result-v1.json +96 -0
  431. package/schemas/cloud-api-v1.json +5407 -0
  432. package/schemas/connector-v1.json +408 -0
  433. package/schemas/credential-event-v1.json +81 -0
  434. package/schemas/credential-v1.json +134 -0
  435. package/schemas/decision-event-v1.json +288 -0
  436. package/schemas/delivery-event-v1.json +117 -0
  437. package/schemas/directory-event-v1.json +85 -0
  438. package/schemas/evidence-export-v1.json +54 -0
  439. package/schemas/membership-event-v1.json +93 -0
  440. package/schemas/policy-v1.json +68 -0
  441. package/schemas/pushed-policy-v1.json +236 -0
  442. package/schemas/run-v1.json +162 -0
  443. package/schemas/snapshot-v1.json +138 -0
  444. package/schemas/supabase-claims-v1.json +4 -4
  445. package/schemas/supabase-manifest-v1.json +5 -1
  446. package/schemas/support-session-v1.json +111 -0
  447. package/skills/permdock/SKILL.md +16 -12
  448. package/skills/permdock-agents/SKILL.md +40 -23
  449. package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
  450. package/skills/permdock-agents/references/runtimes.md +22 -18
  451. package/skills/permdock-approvals/SKILL.md +29 -13
  452. package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
  453. package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
  454. package/skills/permdock-audit/SKILL.md +3 -3
  455. package/skills/permdock-credentials/SKILL.md +5 -5
  456. package/skills/permdock-credentials/references/tokens-keys-links.md +14 -10
  457. package/skills/permdock-data/SKILL.md +6 -6
  458. package/skills/permdock-data/references/queries-and-rls.md +10 -9
  459. package/skills/permdock-data/references/relationships.md +3 -3
  460. package/skills/permdock-tenancy/SKILL.md +20 -7
  461. package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
  462. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
  463. package/skills/permdock-wire/SKILL.md +17 -11
  464. package/skills/permdock-wire/references/adapters.md +139 -51
  465. package/skills/permdock-wire/references/policy-options.md +5 -5
  466. package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
  467. package/dist/approvals-DZL76lKW.js +0 -240
  468. package/dist/arazzo-CD8d0WLb.js +0 -54
  469. package/dist/catalog-6yWAX6Ps.js +0 -2
  470. package/dist/catalog-WHG4kBq7.js +0 -48
  471. package/dist/cloud-C7bSDgX4.js +0 -50
  472. package/dist/cloud-PeBN3IEn.js +0 -118
  473. package/dist/collect-Bw2Jdq1q.js +0 -2
  474. package/dist/collect-CQx4hX4N.js +0 -83
  475. package/dist/commands-Cpip4ULx.js +0 -97
  476. package/dist/config-DLt6BvV7.js +0 -36
  477. package/dist/diff-Cnghh_Ip.js +0 -48
  478. package/dist/doctor-CuVJvhV_.js +0 -53
  479. package/dist/duration-xK2jGFVc.js +0 -25
  480. package/dist/errors-CWfoNg9N.js +0 -47
  481. package/dist/errors-DRnGZHzF.js +0 -30
  482. package/dist/expiry-BoBJ8Tvc.js +0 -7
  483. package/dist/fields-fwfXN01n.js +0 -1016
  484. package/dist/headers-BZSDieNT.js +0 -6
  485. package/dist/headers-Cf-zWvsO.d.ts +0 -6
  486. package/dist/ids-DC4V4CFu.js +0 -18
  487. package/dist/index-DgM7w96K.d.ts +0 -6
  488. package/dist/index-Dz7didpC.d.ts +0 -201
  489. package/dist/index-UdVQgq48.d.ts +0 -550
  490. package/dist/load-B_shHrmd.js +0 -2
  491. package/dist/manifest-BngWKryL.js +0 -770
  492. package/dist/may-use-BOn_dR_w.js +0 -78
  493. package/dist/openapi-DcQ1Kg40.js +0 -164
  494. package/dist/ownership-BgnbOJFT.js +0 -851
  495. package/dist/permdock-L26udHSk.js +0 -3646
  496. package/dist/powersync-BFSbSElQ.js +0 -62
  497. package/dist/powersync-DCDgZgfZ.js +0 -2
  498. package/dist/rls-55DQTuf5.js +0 -250
  499. package/dist/run-DMcNW_8T.js +0 -174
  500. package/dist/server-ZYEHtNHS.js +0 -268
  501. package/dist/sink-BTtmfPnE.js +0 -141
  502. package/dist/sink-CPN4zLfs.d.ts +0 -104
  503. package/dist/skills-Dle4ZoLF.js +0 -56
  504. package/dist/snapshot-Dc9CHPME.js +0 -1078
  505. package/dist/src-Bb7no-hS.js +0 -639
  506. package/dist/subject-C6dLxqHU.js +0 -24
  507. package/dist/supabase-Dbqr141s.js +0 -83
  508. package/dist/supabase-hook-BULg7Ut_.js +0 -2
  509. package/dist/thenable-QSmvt-vZ.js +0 -65
  510. package/dist/types-C0dee0Qf.d.ts +0 -197
  511. package/dist/types-DvupZE0w.d.ts +0 -9
  512. package/dist/usage-4G6t643F.js +0 -42
  513. package/dist/usage-iFLJ0-rr.js +0 -2
  514. package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
  515. package/dist/watch-C8TpsAl4.js +0 -2
package/README.md CHANGED
@@ -70,6 +70,7 @@ Server-only. Roles are data; conditions are a portable JSON tree.
70
70
  ```ts
71
71
  // src/policy.ts
72
72
  import { allow, definePolicy, principal, relation, role } from "permdock";
73
+
73
74
  import { permissions, roles } from "./permissions";
74
75
 
75
76
  const member = role(roles.member, [
@@ -93,7 +94,7 @@ export const policy = definePolicy(
93
94
  {
94
95
  roles: [member, admin],
95
96
  scopes: { tenant: { key: "orgId" } },
96
- principal: (user: User | null) =>
97
+ subject: (user: User | null) =>
97
98
  user && {
98
99
  id: user.id,
99
100
  roles: user.roles,
@@ -110,9 +111,9 @@ export const policy = definePolicy(
110
111
  ### 3. Decide
111
112
 
112
113
  ```ts
113
- import { createPermDock } from "permdock";
114
+ import { getPermDock } from "permdock";
114
115
 
115
- const permdock = await createPermDock(policy, user); // frozen, request-scoped, never throws
116
+ const permdock = await getPermDock(policy, user); // frozen, request-scoped; getPermDockSync when every input is synchronous
116
117
  permdock.can(permissions.post.update, post); // boolean
117
118
  permdock.decide(permissions.post.delete, post); // { outcome: 'granted' | 'denied' | 'approval-required', ... }
118
119
  permdock.explain(permissions.post.delete, post); // the decision plus a trace naming the deny that won
@@ -132,7 +133,7 @@ import { PermDockProvider, Protected, usePermission } from "permdock/react";
132
133
  <Protected
133
134
  permission={permissions.post.update}
134
135
  data={post}
135
- fallback={<Locked />}
136
+ denied={<Locked />}
136
137
  >
137
138
  <EditButton />
138
139
  </Protected>
@@ -149,15 +150,13 @@ The same hook names exist in React Native, Vue, Svelte and Solid. Read [building
149
150
  // src/permdock/server.ts
150
151
  import { createPermDock } from "permdock/next";
151
152
 
152
- export const { getPermDock, requireAccess, permdockHandler } = createPermDock(
153
- policy,
154
- {
153
+ export const { getPermDock, requirePermission, permdockHandler } =
154
+ createPermDock(policy, {
155
155
  subject: async () => getUser(await cookies()),
156
- },
157
- );
156
+ });
158
157
 
159
158
  // in a page or Server Action
160
- await requireAccess({ permission: permissions.post.update, data: post }); // forbidden() / unauthorized() on a denial
159
+ await requirePermission(permissions.post.update, post); // forbidden() / unauthorized() on a denial
161
160
  ```
162
161
 
163
162
  ### Hono
@@ -167,10 +166,10 @@ Express, Fastify, Elysia, Nest, Node, tRPC and oRPC have the same shape.
167
166
  ```ts
168
167
  import { createPermDock } from "permdock/hono";
169
168
 
170
- export const { permdock, protect } = createPermDock(policy, {
169
+ export const { middleware, protect } = createPermDock(policy, {
171
170
  subject: (c) => c.get("user"),
172
171
  });
173
- app.use(permdock());
172
+ app.use(middleware());
174
173
  app.delete(
175
174
  "/posts/:id",
176
175
  protect(permissions.post.delete, (c) => loadPost(c.req.param("id"))),
@@ -204,6 +203,7 @@ protectServer(server).registerTool(
204
203
  The Claude Agent SDK, Eve, the OpenAI Agents SDK, WebMCP and A2A have their own entries with the same tool map.
205
204
 
206
205
  ```ts
206
+ import { defineOperations } from "permdock";
207
207
  import { createPermDock } from "permdock/ai-sdk";
208
208
 
209
209
  const { toolApproval } = createPermDock(policy, {
@@ -212,12 +212,12 @@ const { toolApproval } = createPermDock(policy, {
212
212
  id: runtimeContext.agentId,
213
213
  kind: "ai-sdk",
214
214
  }),
215
- tools: {
215
+ operations: defineOperations(permissions, {
216
216
  delete_post: {
217
217
  permission: permissions.post.delete,
218
218
  data: (args) => loadPost(args.id),
219
219
  },
220
- },
220
+ }),
221
221
  });
222
222
  generateText({ model, tools, toolApproval }); // granted → approved, denied → denied, approval-required → user-approval
223
223
  ```
@@ -226,7 +226,7 @@ generateText({ model, tools, toolApproval }); // granted → approved, denied
226
226
 
227
227
  ```bash
228
228
  permdock rls generate --target drizzle --dialect supabase # roles × grants → policies
229
- permdock rls verify --db $DATABASE_URL # can() vs database parity
229
+ printf %s "$DATABASE_URL" | permdock rls verify --db-url-stdin # can() vs database parity
230
230
  ```
231
231
 
232
232
  ## Agents and approvals
@@ -253,8 +253,8 @@ allow(permissions.payout.release, {
253
253
  approval: {
254
254
  by: roles.finance,
255
255
  quorum: 2, // two distinct finance approvers
256
- ttl: "30m",
257
- escalation: { after: "10m", to: roles.cfo },
256
+ ttl: 1800, // seconds: 30 minutes
257
+ escalation: { after: 600, to: roles.cfo },
258
258
  },
259
259
  });
260
260
  ```
@@ -284,28 +284,30 @@ PermDock adopts the permission keys, SQL helpers, tokens and stored custom roles
284
284
 
285
285
  Any Standard Schema validator: Zod, Valibot, ArkType, Effect Schema. One import path per target:
286
286
 
287
- | Group | Entries |
288
- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
289
- | UI | `permdock/react` · `permdock/react-native` · `permdock/vue` · `permdock/svelte` · `permdock/solid` |
290
- | Full-stack | `permdock/next` |
291
- | HTTP | `permdock/server` · `permdock/hono` · `permdock/express` · `permdock/fastify` · `permdock/elysia` · `permdock/nest` · `permdock/node` |
292
- | Terminal | `permdock/terminal` for your own CLI (not the `permdock` binary) |
293
- | RPC | `permdock/trpc` · `permdock/orpc` |
294
- | Agents | `permdock/mcp` · `permdock/ai-sdk` · `permdock/claude-agent` · `permdock/eve` · `permdock/openai` · `permdock/webmcp` · `permdock/a2a` |
295
- | Decision plane | `permdock/authzen` · `permdock/approvals` · `permdock/cloud` · `permdock/scim` · `permdock/ssf` · `permdock/openapi` · `permdock/otel` · `permdock/pdp` |
296
- | Data | `permdock/drizzle` · `permdock/prisma` · `permdock/kysely` · `permdock rls` · `permdock powersync` |
297
- | Auth and providers | `permdock/jwt` · `permdock/supabase` · `permdock/supabase/middleware` · `permdock/better-supabase` · `permdock/better-auth` · `permdock/clerk` · `permdock/convex` |
298
- | Build | `permdock/next/plugin` · `permdock/unplugin` |
299
- | Testing | `permdock/testing` |
300
-
301
- React Router, TanStack Start, SvelteKit and Nuxt loaders call `getSnapshot(request)` from `permdock/server` and send `snapshotHeaders(snapshot)`. Astro and Effect use these entries plus `permdock/unplugin`. The full matrix with example apps and related standards is on the [adapters page](https://permdock.com/docs/adapters).
287
+ | Group | Entries |
288
+ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
289
+ | UI | `permdock/react` · `permdock/react-native` · `permdock/vue` · `permdock/svelte` · `permdock/solid` |
290
+ | Full-stack | `permdock/next` · `permdock/sveltekit` · `permdock/astro` · `permdock/solid-start` · `permdock/tanstack-start` |
291
+ | HTTP | `permdock/server` · `permdock/hono` · `permdock/h3` · `permdock/express` · `permdock/fastify` · `permdock/elysia` · `permdock/nest` · `permdock/node` |
292
+ | Terminal | `permdock/terminal` for your own CLI (not the `permdock` binary) |
293
+ | RPC | `permdock/trpc` · `permdock/orpc` |
294
+ | Agents | `permdock/agent` · `permdock/mcp` · `permdock/ai-sdk` · `permdock/claude-agent` · `permdock/eve` · `permdock/openai` · `permdock/webmcp` · `permdock/a2a` |
295
+ | Messaging | `permdock/delivery` · `permdock/resend` · `permdock/chat` · `permdock/chat-sdk` |
296
+ | Decision plane | `permdock/authzen` · `permdock/approvals` · `permdock/workflow` · `permdock/workflow-sdk` · `permdock/cloud` · `permdock/scim` · `permdock/ssf` · `permdock/openapi` · `permdock/otel` · `permdock/pdp` |
297
+ | Data | `permdock/drizzle` · `permdock/prisma` · `permdock/kysely` · `permdock rls` · `permdock powersync` |
298
+ | Auth and providers | `permdock/jwt` · `permdock/supabase` · `permdock/supabase/middleware` · `permdock/better-supabase` · `permdock/better-auth` · `permdock/clerk` · `permdock/convex` |
299
+ | Build | `permdock/next/plugin` · `permdock/unplugin` |
300
+ | Testing | `permdock/testing` |
301
+
302
+ React Router loaders call `getSnapshot(request)` from `permdock/server` and send `snapshotHeaders(snapshot)`; Nitro and Nuxt server routes use `permdock/h3`. Effect uses these entries plus `permdock/unplugin`. The full matrix with example apps and related standards is on the [adapters page](https://permdock.com/docs/adapters).
302
303
 
303
304
  ## Secure by default
304
305
 
305
306
  - Fail-closed: an unknown, invalid or thrown check denies, and `can()` never throws.
306
307
  - Deny overrides allow, an unknown reference is a type error, and evaluation is prototype-safe with no eval.
307
308
  - `service_role` is never emitted, a model-supplied subject is never trusted, and an agent with no delegation is denied.
308
- - No one approves their own request by default, there is never a default tenant, and data is validated against the resource schema unless the caller marks a row it loaded `trusted: true`.
309
+ - No one approves their own request by default, a delegate is held to the same rule as the person they cover, there is never a default tenant, and data is validated against the resource schema unless the caller marks a row it loaded `trusted: true`.
310
+ - A user or service API key expires unless the tenant sets `allowNoExpiry`. A feed key (`pdfeed_`) does not expire; rotation replaces the secret and keeps the id, and the key is bound to one resource.
309
311
  - Authentication stays upstream: PermDock consumes verified sessions, JWKS-verified JWTs (`permdock/jwt`, with `jose` as an optional peer), provider claims and MCP `authInfo`. Core never verifies a token. User-editable fields never become claims: `subjectFromBetterAuth` copies `additionalFields` only through a `schema`. Read [authentication](https://permdock.com/docs/concepts/authentication).
310
312
  - Every decision runs in-process. [PermDock Cloud](https://permdock.com/docs/adapters/cloud) adds a decision log, an approval inbox, a hosted AuthZEN endpoint and a SCIM relay, behind interfaces this package ships with in-process defaults.
311
313
 
@@ -319,10 +321,10 @@ Other TypeScript permission libraries (CASL, permix, Kilpi, `@zap-studio/permit`
319
321
 
320
322
  ```bash
321
323
  npx skills add ScaleDockHQ/PermDock # the permdock, permdock-wire, permdock-audit and topic skills
322
- permdock skills # the same skills, offline, from node_modules/permdock/skills
324
+ permdock skills install # the same skills, offline, from node_modules/permdock/skills
323
325
  ```
324
326
 
325
- Claude Code users can add the plugin marketplace instead: `/plugin marketplace add ScaleDockHQ/permdock`. Every docs page is served as Markdown, with `llms.txt`, `llms-full.txt` and a docs MCP server at `https://permdock.com/mcp`. Read [for AI agents](https://permdock.com/docs/for-ai-agents).
327
+ Claude Code users can add the plugin marketplace instead: `/plugin marketplace add ScaleDockHQ/permdock`. Every docs page is served as Markdown, with `llms.txt`, `llms-full.txt` and a docs MCP server at `https://permdock.com/docs/mcp`. Read [for AI agents](https://permdock.com/docs/for-ai-agents).
326
328
 
327
329
  ## License
328
330
 
@@ -1,10 +1,5 @@
1
- import { r as isRecord } from "./compact-CAf557ZB.js";
2
- import { t as packageRoot } from "./package-root-DtNnpmUd.js";
3
- import { t as DRAFT_PINS } from "./pins-8ILTftC9.js";
4
- import { readFileSync } from "node:fs";
5
- import { join } from "node:path";
6
1
  //#region \0rolldown/runtime.js
7
- var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
2
+ var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod, mod.exports), cb = null), mod.exports);
8
3
  //#endregion
9
4
  //#region ../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/code.js
10
5
  var require_code$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
@@ -6678,8 +6673,8 @@ var require_json_schema_2020_12 = /* @__PURE__ */ __commonJSMin(((exports) => {
6678
6673
  exports.default = addMetaSchema2020;
6679
6674
  }));
6680
6675
  //#endregion
6681
- //#region src/cli/openapi/schema.ts
6682
- var import__2020 = (/* @__PURE__ */ __commonJSMin(((exports, module) => {
6676
+ //#region ../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/2020.js
6677
+ var require__2020 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
6683
6678
  Object.defineProperty(exports, "__esModule", { value: true });
6684
6679
  exports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv2020 = void 0;
6685
6680
  const core_1 = require_core$2();
@@ -6775,126 +6770,6 @@ var import__2020 = (/* @__PURE__ */ __commonJSMin(((exports, module) => {
6775
6770
  return ref_error_1.default;
6776
6771
  }
6777
6772
  });
6778
- })))();
6779
- function schemaDir() {
6780
- return join(packageRoot(), "schemas", "openapi");
6781
- }
6782
- const validators = /* @__PURE__ */ new Map();
6783
- /** Parses a bundled schema file; throws on anything but a JSON object. */
6784
- function parseSchema(text, file) {
6785
- const parsed = JSON.parse(text.replaceAll("\"$dynamicRef\": \"#meta\"", "\"$ref\": \"#/$defs/schema\""));
6786
- if (!isRecord(parsed)) throw new TypeError(`PermDock CLI: ${file} is not a JSON Schema`);
6787
- return parsed;
6788
- }
6789
- function schemaFile(file) {
6790
- return parseSchema(readFileSync(join(schemaDir(), file), "utf8"), file);
6791
- }
6792
- function child(parent, ...path) {
6793
- let node = parent;
6794
- for (const key of path) {
6795
- const next = node[key];
6796
- if (!isRecord(next)) throw new TypeError(`PermDock CLI: OpenAPI schema has no ${path.join(".")}`);
6797
- node = next;
6798
- }
6799
- return node;
6800
- }
6801
- const STRINGS = {
6802
- type: "array",
6803
- items: { type: "string" }
6804
- };
6805
- /**
6806
- * No official 3.3 schema exists: the 3.2 schema plus the pinned draft's
6807
- * Security Profiles (a `profile` scheme type and
6808
- * `components.securityProfileRequirements`). Mutates and returns `schema`.
6809
- */
6810
- function patchOas33(schema) {
6811
- schema["$id"] = `https://permdock.com/schemas/openapi/oas-3.3/${DRAFT_PINS.oas}`;
6812
- child(schema, "properties", "openapi")["pattern"] = String.raw`^3\.3\.\d+(-.+)?$`;
6813
- const defs = child(schema, "$defs");
6814
- const scheme = child(defs, "security-scheme");
6815
- const type = child(scheme, "properties", "type");
6816
- type["enum"] = [...Array.isArray(type["enum"]) ? type["enum"] : [], "profile"];
6817
- scheme["allOf"] = [...Array.isArray(scheme["allOf"]) ? scheme["allOf"] : [], {
6818
- if: { properties: { type: { const: "profile" } } },
6819
- then: {
6820
- properties: { profileMetadata: {
6821
- type: "object",
6822
- required: ["name"],
6823
- properties: {
6824
- name: { type: "string" },
6825
- supportedParametersSchema: { type: ["string", "object"] },
6826
- supportedOperations: {},
6827
- servers: {
6828
- type: "array",
6829
- items: {
6830
- type: "object",
6831
- required: ["url"],
6832
- properties: {
6833
- name: { type: "string" },
6834
- url: { type: "string" }
6835
- }
6836
- }
6837
- }
6838
- }
6839
- } },
6840
- required: ["profileMetadata"]
6841
- }
6842
- }];
6843
- child(defs, "components", "properties")["securityProfileRequirements"] = {
6844
- type: "object",
6845
- additionalProperties: {
6846
- type: "object",
6847
- required: ["securityScheme", "scopes"],
6848
- properties: {
6849
- securityScheme: { $ref: "#/$defs/reference" },
6850
- token_endpoint_auth_methods: STRINGS,
6851
- grant_types: STRINGS,
6852
- scopes: STRINGS
6853
- }
6854
- }
6855
- };
6856
- return schema;
6857
- }
6858
- function validatorFor(file) {
6859
- const cached = validators.get(file);
6860
- if (cached !== void 0) return cached;
6861
- const compiled = new import__2020.Ajv2020({
6862
- strict: false,
6863
- allErrors: false,
6864
- validateFormats: false
6865
- }).compile(file === "oas-3.3.json" ? patchOas33(schemaFile("oas-3.2.json")) : schemaFile(file));
6866
- validators.set(file, compiled);
6867
- return compiled;
6868
- }
6869
- function describeErrors(errors) {
6870
- return (errors ?? []).slice(0, 5).map((error) => ` ${error.instancePath || "/"} ${error.message ?? ""}`).join("\n");
6871
- }
6872
- /** Validates an OpenAPI 3.1 or 3.2 document against the official JSON Schema, and 3.3 against the pinned patch of 3.2. */
6873
- function validateOpenapi(document) {
6874
- const version = isRecord(document) ? document["openapi"] : void 0;
6875
- const match = typeof version === "string" ? /^3\.([123])\.\d+$/u.exec(version) : null;
6876
- if (match === null) return {
6877
- ok: false,
6878
- error: "expected an OpenAPI 3.1, 3.2 or 3.3 document"
6879
- };
6880
- const minor = match[1] === "1" ? "3.1" : match[1] === "2" ? "3.2" : "3.3";
6881
- const validate = validatorFor(`oas-${minor}.json`);
6882
- if (!validate(document)) return {
6883
- ok: false,
6884
- error: `document is not valid OpenAPI ${minor}:\n${describeErrors(validate.errors)}`
6885
- };
6886
- return {
6887
- ok: true,
6888
- version: minor
6889
- };
6890
- }
6891
- /** Validates an Overlay 1.1 document against the official JSON Schema. */
6892
- function validateOverlay(document) {
6893
- const validate = validatorFor("overlay-1.1.json");
6894
- return validate(document) ? { ok: true } : {
6895
- ok: false,
6896
- error: `document is not a valid Overlay 1.1:\n${describeErrors(validate.errors)}`
6897
- };
6898
- }
6773
+ }));
6899
6774
  //#endregion
6900
- export { validateOverlay as n, validateOpenapi as t };
6775
+ export { require__2020 as t };
@@ -1,8 +1,8 @@
1
- import { E as Policy, Or as Principal, br as AuthorizationDetail } from "../policy-types-sp9P1iIV.js";
2
- import { d as Permission } from "../permission-types-Dg39z9Kv.js";
3
- import { f as ApprovalStore } from "../types-Br9IXUBG.js";
4
- import { a as ProblemDetails } from "../errors-OD_4c__H.js";
5
- import { t as InstanceOptions } from "../instance-options-plkrsAog.js";
1
+ import { T as Policy, Yn as AuthorizationDetail, rr as Principal } from "../policy-types-n0uRTsW8.js";
2
+ import { w as Permission } from "../vocabulary-CN8H_9UF.js";
3
+ import { m as ApprovalStore } from "../types-BdtSDbBO.js";
4
+ import { a as ProblemDetails } from "../errors-DH5QEGXh.js";
5
+ import { t as InstanceOptions } from "../instance-options-BsVpyGIk.js";
6
6
  //#region src/a2a/types.d.ts
7
7
  type A2aAuth = {
8
8
  readonly clientId?: string;
@@ -166,6 +166,6 @@ type A2aPermDock = {
166
166
  };
167
167
  //#endregion
168
168
  //#region src/a2a/create.d.ts
169
- export declare function createPermDock<TUser, TPrincipal extends Principal = Principal>(policy: Policy<TUser, TPrincipal>, options: A2aPermDockOptions<TUser>): A2aPermDock;
169
+ export declare function createPermDock<TUser, TPrincipal extends Principal = Principal>(policy: Policy<TUser, TPrincipal>, given: A2aPermDockOptions<TUser>): A2aPermDock;
170
170
  //#endregion
171
171
  export type { A2aAgentCard, A2aAgentCardSignature, A2aAuth, A2aCardInfo, A2aPermDock, A2aPermDockOptions, A2aSecurityRequirement, A2aSecurityScheme, A2aSkill, A2aSkillConfig, A2aTaskOutcome, A2aWireSecurityScheme };
package/dist/a2a/index.js CHANGED
@@ -1,14 +1,14 @@
1
1
  import { t as compact } from "../compact-CAf557ZB.js";
2
2
  import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
3
- import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-drnfxYtm.js";
4
- import { t as canonicalJson } from "../canonical-json-CFKyFOke.js";
5
- import { t as bytesToBase64Url } from "../sha256-BO0swRXL.js";
6
- import { a as scopesReaching, i as hasScope, r as challengeScope } from "../permdock-L26udHSk.js";
3
+ import { o as statusProblem } from "../problem-details-cn5X30gZ.js";
4
+ import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-BKy0EfhN.js";
5
+ import { t as canonicalJson } from "../canonical-json-BC8_nMTw.js";
6
+ import { t as bytesToBase64Url } from "../sha256-D9ihqmvd.js";
7
7
  import { n as resourceRef } from "../resource-ref-CaS9yVPi.js";
8
- import { t as mayUse } from "../may-use-BOn_dR_w.js";
9
- import { f as wwwAuthenticate, r as bearerChallenge } from "../problem-CnWraVhC.js";
10
- import { r as instanceOptions } from "../build-instance-DIIV9DbC.js";
11
- import { n as createAgentKernel } from "../kernel-CB3LrIJM.js";
8
+ import { a as hasScope, c as withApp, i as challengeScope, o as scopesReaching } from "../permdock-BrAscV28.js";
9
+ import { f as wwwAuthenticate, r as bearerChallenge } from "../problem-CTviyH5L.js";
10
+ import { r as instanceOptions } from "../build-instance-Bu_eDqYw.js";
11
+ import { n as createAgentKernel } from "../kernel-D0NVb1cK.js";
12
12
  import { t as delegationFrom } from "../delegation-input-FTxMK3ji.js";
13
13
  //#region src/a2a/create.ts
14
14
  function firstScheme(options) {
@@ -146,23 +146,20 @@ async function signCard(card, signPayload) {
146
146
  function missingScope(permission, scope) {
147
147
  return {
148
148
  ok: false,
149
- status: 401,
149
+ status: 403,
150
150
  state: "failed",
151
- problem: {
152
- type: "https://permdock.com/problems/unauthenticated",
153
- title: "Insufficient scope",
154
- status: 401,
155
- detail: `insufficient_scope: ${scope}`,
151
+ problem: statusProblem(403, `insufficient_scope: ${scope}`, {
156
152
  permission: permission.key,
157
153
  scope
158
- },
154
+ }),
159
155
  wwwAuthenticate: bearerChallenge({
160
156
  error: "insufficient_scope",
161
157
  scopes: [scope]
162
158
  })
163
159
  };
164
160
  }
165
- function createPermDock(policy, options) {
161
+ function createPermDock(policy, given) {
162
+ const options = withApp(policy, given);
166
163
  for (const [id, config] of Object.entries(options.skills)) if (config.permission.kind === "instance" && config.data === void 0) throw new TypeError(`PermDock: A2A skill '${id}' checks ${config.permission.key} on a row and needs a data loader; the task body is never used as the row`);
167
164
  const kernel = createAgentKernel(policy, compact({
168
165
  subject: options.subject,
@@ -183,7 +180,7 @@ function createPermDock(policy, options) {
183
180
  }
184
181
  const scheme = firstScheme(options);
185
182
  const skills = [];
186
- for (const [id, config] of Object.entries(options.skills)) if (mayUse(permdock, config.permission)) skills.push(skillOf(id, config, scheme));
183
+ for (const [id, config] of Object.entries(options.skills)) if (permdock.mayUse(config.permission)) skills.push(skillOf(id, config, scheme));
187
184
  return cardOf(options, skills);
188
185
  };
189
186
  const protectSkill = (selector) => async (task, auth) => {
@@ -1,4 +1,4 @@
1
- import { n as isActor } from "./subject-C6dLxqHU.js";
1
+ import { n as isActor } from "./subject-BGoM5o8B.js";
2
2
  //#region src/core/adapter-context.ts
3
3
  /** Resolves an adapter `tenant` option against its framework context; a throw is no tenant. */
4
4
  async function tenantScope(option, context) {
@@ -0,0 +1,107 @@
1
+ import { r as listSourceFiles } from "./files-D_JIzUrP.js";
2
+ import { t as DOCS_BASE } from "./manifest-dvL2XEe1.js";
3
+ import { readFileSync } from "node:fs";
4
+ import { relative } from "node:path";
5
+ //#region src/cli/adoption-scan.ts
6
+ /** Authorization checks written before PermDock, by the shape they usually take. */
7
+ const LEGACY_PATTERNS = [
8
+ {
9
+ name: "role comparison",
10
+ pattern: /\brole\s*[!=]==?\s*['"`]/u
11
+ },
12
+ {
13
+ name: "roles.includes",
14
+ pattern: /\broles?\.(?:includes|some|has)\(/u
15
+ },
16
+ {
17
+ name: "isAdmin flag",
18
+ pattern: /\bis(?:Admin|Owner|SuperUser|Staff)\b/u
19
+ },
20
+ {
21
+ name: "hasRole / hasPermission",
22
+ pattern: /\b(?:has|check|require)(?:Role|Permission|Access)s?\(/u
23
+ },
24
+ {
25
+ name: "CASL ability",
26
+ pattern: /\bability\.(?:can|cannot)\(/u
27
+ },
28
+ {
29
+ name: "Clerk has()",
30
+ pattern: /\bhas\(\s*\{\s*(?:role|permission)\s*:/u
31
+ },
32
+ {
33
+ name: "JWT role claim",
34
+ pattern: /\[['"](?:role|roles|user_role)['"]\]/u
35
+ }
36
+ ];
37
+ /**
38
+ * Lines that look like an authorization check written without PermDock:
39
+ * the work left before a permission can be enforced. It reads source text
40
+ * only and runs nothing; a finding is a place to look, not a verdict.
41
+ */
42
+ function scanLegacy(options) {
43
+ const custom = (options.patterns ?? []).map((source) => ({
44
+ name: "custom",
45
+ pattern: new RegExp(source, "u")
46
+ }));
47
+ const patterns = [...LEGACY_PATTERNS, ...custom];
48
+ const findings = [];
49
+ for (const file of listSourceFiles(options.cwd, options.srcPath)) {
50
+ const lines = readFileSync(file, "utf8").split("\n");
51
+ for (const [index, line] of lines.entries()) {
52
+ if (/permdock/iu.test(line)) continue;
53
+ const hit = patterns.find((item) => item.pattern.test(line));
54
+ if (hit !== void 0) findings.push({
55
+ file: relative(options.cwd, file),
56
+ line: index + 1,
57
+ kind: hit.name,
58
+ text: line.trim().slice(0, 160)
59
+ });
60
+ }
61
+ }
62
+ return findings;
63
+ }
64
+ function runAdoptionScan(options) {
65
+ let findings;
66
+ try {
67
+ findings = scanLegacy(options);
68
+ } catch (error) {
69
+ return {
70
+ code: 2,
71
+ output: `permdock scan: ${error instanceof Error ? error.message : String(error)}\n`
72
+ };
73
+ }
74
+ const located = findings.map((finding) => ({
75
+ code: "legacy-check",
76
+ severity: "info",
77
+ message: `${finding.kind}: ${finding.text}`,
78
+ file: finding.file,
79
+ line: finding.line,
80
+ docs: `${DOCS_BASE}/scan`
81
+ }));
82
+ if (options.json === true) return {
83
+ code: 0,
84
+ output: `${JSON.stringify(findings, null, 2)}\n`,
85
+ findings: located
86
+ };
87
+ if (findings.length === 0) return {
88
+ code: 0,
89
+ output: "No legacy authorization checks found.\n",
90
+ findings: []
91
+ };
92
+ const byKind = /* @__PURE__ */ new Map();
93
+ for (const finding of findings) byKind.set(finding.kind, (byKind.get(finding.kind) ?? 0) + 1);
94
+ return {
95
+ code: 0,
96
+ output: `${[
97
+ ...findings.map((finding) => `${finding.file}:${finding.line} ${finding.kind} ${finding.text}`),
98
+ "",
99
+ `${findings.length} checks to move to PermDock: ${[...byKind].map(([kind, count]) => `${count} ${kind}`).join(", ")}.`,
100
+ "Run them beside PermDock with shadowMode before enforcing (https://permdock.com/docs/getting-started/existing-apps).",
101
+ ...byKind.has("CASL ability") ? ["CASL rules import as roles: permdock casl import --rules <file> --out <file> (https://permdock.com/docs/cli/casl)."] : []
102
+ ].join("\n")}\n`,
103
+ findings: located
104
+ };
105
+ }
106
+ //#endregion
107
+ export { runAdoptionScan };
@@ -0,0 +1,3 @@
1
+ import { n as DeniedTextEvent, t as DeniedText } from "../denied-text-CiFQNuMV.js";
2
+ import { a as createPermDock, c as ModelMap, i as OperationVerdict, l as ToolBinding, n as AgentPermDockOptions, o as AgentAdapterOptions, r as GatewayOptions, s as DecideToolOptions, t as AgentPermDock, u as ToolMap } from "../create-CBMmFie-.js";
3
+ export { type AgentAdapterOptions, type AgentPermDock, type AgentPermDockOptions, type DecideToolOptions, type DeniedText, type DeniedTextEvent, type GatewayOptions, type ModelMap, type OperationVerdict, type ToolBinding, type ToolMap, createPermDock };
@@ -0,0 +1 @@
1
+ export { n as createPermDock } from "../create-CGm28gyI.js";
@@ -1,40 +1,14 @@
1
- import { E as Policy, Or as Principal, wr as Delegation } from "../policy-types-sp9P1iIV.js";
2
- import { d as Permission } from "../permission-types-Dg39z9Kv.js";
3
- import { f as ApprovalStore } from "../types-Br9IXUBG.js";
4
- import { t as InstanceOptions } from "../instance-options-plkrsAog.js";
5
- import { n as OnDeniedText, t as DeniedTextEvent } from "../denied-text-DfRk15uw.js";
6
- import { t as RequestContext } from "../request-context-C2_1lchh.js";
7
- import { t as ToolMap } from "../types-DvupZE0w.js";
8
- import { n as PermDockWrap } from "../wrap-Cr93qqdP.js";
1
+ import { T as Policy, j as PolicyVocabulary, rr as Principal } from "../policy-types-n0uRTsW8.js";
2
+ import { w as Permission } from "../vocabulary-CN8H_9UF.js";
3
+ import { n as DeniedTextEvent, t as DeniedText } from "../denied-text-CiFQNuMV.js";
4
+ import { o as AgentAdapterOptions, t as AgentPermDock } from "../create-CBMmFie-.js";
9
5
  //#region src/ai-sdk/create.d.ts
10
6
  type AiSdkContext = {
11
7
  readonly runtimeContext?: unknown;
12
8
  readonly permdockApproval?: string;
13
9
  readonly [key: string]: unknown;
14
10
  };
15
- type AiSdkPermDockOptions<TUser = unknown> = InstanceOptions & {
16
- readonly subject: (context: AiSdkContext) => TUser | Promise<TUser>;
17
- readonly actor?: (context: AiSdkContext) => unknown;
18
- readonly delegation?: (context: AiSdkContext) => Delegation | undefined | Promise<Delegation | undefined>;
19
- readonly tenant?: string | ((context: AiSdkContext) => string | undefined | Promise<string | undefined>);
20
- readonly tools: ToolMap;
21
- readonly store?: ApprovalStore;
22
- /**
23
- * Tools the `tools` map does not bind to a permission. `'deny'` (default):
24
- * the middleware hides them and `toolApproval` denies them. `'allow'`: they
25
- * pass through both, to the application's own `toolApproval`.
26
- */
27
- readonly unmapped?: "deny" | "allow";
28
- /**
29
- * Request values merged into `subject.context`, under `policy.context`.
30
- * Only values the server derived belong here, never model output.
31
- */
32
- readonly context?: (context: AiSdkContext) => RequestContext | undefined | Promise<RequestContext | undefined>;
33
- /** Wraps each instance; build it with `wrapPermDock` to cover derived instances. */
34
- readonly wrap?: PermDockWrap;
35
- /** Replaces the denial reason or approval summary text; nothing else. */
36
- readonly onDenied?: OnDeniedText;
37
- };
11
+ type AiSdkPermDockOptions<TUser = unknown> = AgentAdapterOptions<AiSdkContext, TUser>;
38
12
  /** What an AI SDK tool approval function may return; `undefined` is `not-applicable`. */
39
13
  type ToolApprovalResult = ToolApprovalStatus | undefined | "not-applicable" | "denied" | "user-approval" | {
40
14
  readonly type: "not-applicable";
@@ -80,14 +54,19 @@ type CallParams = {
80
54
  }[];
81
55
  readonly toolChoice?: unknown;
82
56
  };
57
+ /** The part of `LanguageModelV4` the model gate reads. */
58
+ type CallModel = {
59
+ readonly modelId?: unknown;
60
+ };
83
61
  /** Structural `LanguageModelMiddleware` (specification `v4`) from `ai`. */
84
62
  type LanguageModelMiddleware = {
85
63
  readonly specificationVersion: "v4";
86
64
  readonly transformParams: <TParams extends CallParams>(options: {
87
65
  readonly params: TParams;
66
+ readonly model?: CallModel;
88
67
  }) => Promise<TParams>;
89
68
  };
90
- type AiSdkPermDock = {
69
+ type AiSdkPermDock<V extends PolicyVocabulary = PolicyVocabulary> = AgentPermDock<AiSdkContext, V> & {
91
70
  readonly toolApproval: (call: ToolApprovalCall) => Promise<ToolApprovalStatus>;
92
71
  /**
93
72
  * PermDock's `toolApproval` followed by the application's own: `app` is
@@ -98,10 +77,14 @@ type AiSdkPermDock = {
98
77
  * come first.
99
78
  */
100
79
  readonly composeToolApproval: (app: AppToolApproval) => (call: ToolApprovalCall) => Promise<ToolApprovalResult>;
101
- /** Hides tools the subject in `context` can never use, before the model sees them. */
80
+ /**
81
+ * Hides tools the subject in `context` can never use, before the model
82
+ * sees them. With `models`, a call to a model the subject is not granted
83
+ * throws `PermDockDeniedError` before the provider is called.
84
+ */
102
85
  readonly capabilityMiddleware: (context: AiSdkContext) => LanguageModelMiddleware;
103
86
  readonly needsApproval: (permission: Permission) => (input: unknown, options?: NeedsApprovalOptions) => Promise<boolean>;
104
87
  };
105
- export declare function createPermDock<TUser, TPrincipal extends Principal = Principal>(policy: Policy<TUser, TPrincipal>, options: AiSdkPermDockOptions<TUser>): AiSdkPermDock;
88
+ export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, given: AiSdkPermDockOptions<TUser>): AiSdkPermDock<V>;
106
89
  //#endregion
107
- export type { AiSdkContext, AiSdkPermDock, AiSdkPermDockOptions, AppToolApproval, DeniedTextEvent, LanguageModelMiddleware, NeedsApprovalOptions, OnDeniedText, ToolApprovalCall, ToolApprovalResult, ToolApprovalStatus };
90
+ export type { AiSdkContext, AiSdkPermDock, AiSdkPermDockOptions, AppToolApproval, DeniedText, DeniedTextEvent, LanguageModelMiddleware, NeedsApprovalOptions, ToolApprovalCall, ToolApprovalResult, ToolApprovalStatus };