@homeflare/alchemy 0.43.0 → 0.45.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 (612) hide show
  1. package/README.md +10 -1
  2. package/dist/caddy/index.js +35 -1
  3. package/dist/caddy/index.js.map +3 -3
  4. package/dist/launchd/index.js +35 -1
  5. package/dist/launchd/index.js.map +3 -3
  6. package/dist/linux/index.js +35 -1
  7. package/dist/linux/index.js.map +3 -3
  8. package/dist/litellm/access-group-form.d.ts +26 -0
  9. package/dist/litellm/access-group-form.d.ts.map +1 -0
  10. package/dist/litellm/access-group-operations.d.ts +37 -0
  11. package/dist/litellm/access-group-operations.d.ts.map +1 -0
  12. package/dist/litellm/access-group-types.d.ts +49 -0
  13. package/dist/litellm/access-group-types.d.ts.map +1 -0
  14. package/dist/litellm/access-group.d.ts +55 -0
  15. package/dist/litellm/access-group.d.ts.map +1 -0
  16. package/dist/litellm/credential-errors.d.ts +131 -0
  17. package/dist/litellm/credential-errors.d.ts.map +1 -0
  18. package/dist/litellm/credential-form.d.ts +79 -0
  19. package/dist/litellm/credential-form.d.ts.map +1 -0
  20. package/dist/litellm/credential-operations.d.ts +84 -0
  21. package/dist/litellm/credential-operations.d.ts.map +1 -0
  22. package/dist/litellm/credential-rewrite.d.ts +6 -0
  23. package/dist/litellm/credential-rewrite.d.ts.map +1 -0
  24. package/dist/litellm/credential-types.d.ts +87 -0
  25. package/dist/litellm/credential-types.d.ts.map +1 -0
  26. package/dist/litellm/credential-values.d.ts +53 -0
  27. package/dist/litellm/credential-values.d.ts.map +1 -0
  28. package/dist/litellm/credential.d.ts +83 -0
  29. package/dist/litellm/credential.d.ts.map +1 -0
  30. package/dist/litellm/fake-access-group-litellm.d.ts +34 -0
  31. package/dist/litellm/fake-access-group-litellm.d.ts.map +1 -0
  32. package/dist/litellm/fake-credential-litellm.d.ts +54 -0
  33. package/dist/litellm/fake-credential-litellm.d.ts.map +1 -0
  34. package/dist/litellm/fake-keys.d.ts +53 -0
  35. package/dist/litellm/fake-keys.d.ts.map +1 -0
  36. package/dist/litellm/fake-litellm.d.ts +4 -1
  37. package/dist/litellm/fake-litellm.d.ts.map +1 -1
  38. package/dist/litellm/fake-mcp-litellm.d.ts +67 -0
  39. package/dist/litellm/fake-mcp-litellm.d.ts.map +1 -0
  40. package/dist/litellm/fake-model-litellm-post-update.d.ts +49 -0
  41. package/dist/litellm/fake-model-litellm-post-update.d.ts.map +1 -0
  42. package/dist/litellm/fake-model-litellm.d.ts +48 -0
  43. package/dist/litellm/fake-model-litellm.d.ts.map +1 -0
  44. package/dist/litellm/fake-policy-attachment-litellm.d.ts +33 -0
  45. package/dist/litellm/fake-policy-attachment-litellm.d.ts.map +1 -0
  46. package/dist/litellm/fake-policy-litellm.d.ts +32 -0
  47. package/dist/litellm/fake-policy-litellm.d.ts.map +1 -0
  48. package/dist/litellm/fake-registry-base.d.ts +42 -0
  49. package/dist/litellm/fake-registry-base.d.ts.map +1 -0
  50. package/dist/litellm/fake-stack.d.ts +8 -1
  51. package/dist/litellm/fake-stack.d.ts.map +1 -1
  52. package/dist/litellm/fake-team-litellm.d.ts +47 -0
  53. package/dist/litellm/fake-team-litellm.d.ts.map +1 -0
  54. package/dist/litellm/fake-tool-litellm.d.ts +28 -0
  55. package/dist/litellm/fake-tool-litellm.d.ts.map +1 -0
  56. package/dist/litellm/fake-toolset-litellm.d.ts +29 -0
  57. package/dist/litellm/fake-toolset-litellm.d.ts.map +1 -0
  58. package/dist/litellm/index.d.ts +18 -0
  59. package/dist/litellm/index.d.ts.map +1 -1
  60. package/dist/litellm/index.js +3078 -2
  61. package/dist/litellm/index.js.map +65 -4
  62. package/dist/litellm/key-errors.d.ts +169 -0
  63. package/dist/litellm/key-errors.d.ts.map +1 -0
  64. package/dist/litellm/key-form.d.ts +119 -0
  65. package/dist/litellm/key-form.d.ts.map +1 -0
  66. package/dist/litellm/key-harness.d.ts +41 -0
  67. package/dist/litellm/key-harness.d.ts.map +1 -0
  68. package/dist/litellm/key-metadata-errors.d.ts +30 -0
  69. package/dist/litellm/key-metadata-errors.d.ts.map +1 -0
  70. package/dist/litellm/key-metadata.d.ts +22 -0
  71. package/dist/litellm/key-metadata.d.ts.map +1 -0
  72. package/dist/litellm/key-operations.d.ts +63 -0
  73. package/dist/litellm/key-operations.d.ts.map +1 -0
  74. package/dist/litellm/key-secret.d.ts +33 -0
  75. package/dist/litellm/key-secret.d.ts.map +1 -0
  76. package/dist/litellm/key.d.ts +78 -0
  77. package/dist/litellm/key.d.ts.map +1 -0
  78. package/dist/litellm/mcp-server-credential.d.ts +50 -0
  79. package/dist/litellm/mcp-server-credential.d.ts.map +1 -0
  80. package/dist/litellm/mcp-server-errors.d.ts +101 -0
  81. package/dist/litellm/mcp-server-errors.d.ts.map +1 -0
  82. package/dist/litellm/mcp-server-form.d.ts +56 -0
  83. package/dist/litellm/mcp-server-form.d.ts.map +1 -0
  84. package/dist/litellm/mcp-server-locate.d.ts +26 -0
  85. package/dist/litellm/mcp-server-locate.d.ts.map +1 -0
  86. package/dist/litellm/mcp-server-operations.d.ts +63 -0
  87. package/dist/litellm/mcp-server-operations.d.ts.map +1 -0
  88. package/dist/litellm/mcp-server-shadow.d.ts +24 -0
  89. package/dist/litellm/mcp-server-shadow.d.ts.map +1 -0
  90. package/dist/litellm/mcp-server-types.d.ts +118 -0
  91. package/dist/litellm/mcp-server-types.d.ts.map +1 -0
  92. package/dist/litellm/mcp-server-url.d.ts +11 -0
  93. package/dist/litellm/mcp-server-url.d.ts.map +1 -0
  94. package/dist/litellm/mcp-server.d.ts +95 -0
  95. package/dist/litellm/mcp-server.d.ts.map +1 -0
  96. package/dist/litellm/model-claim.d.ts +24 -0
  97. package/dist/litellm/model-claim.d.ts.map +1 -0
  98. package/dist/litellm/model-credential.d.ts +12 -0
  99. package/dist/litellm/model-credential.d.ts.map +1 -0
  100. package/dist/litellm/model-errors.d.ts +119 -0
  101. package/dist/litellm/model-errors.d.ts.map +1 -0
  102. package/dist/litellm/model-form.d.ts +78 -0
  103. package/dist/litellm/model-form.d.ts.map +1 -0
  104. package/dist/litellm/model-locate.d.ts +13 -0
  105. package/dist/litellm/model-locate.d.ts.map +1 -0
  106. package/dist/litellm/model-operations.d.ts +59 -0
  107. package/dist/litellm/model-operations.d.ts.map +1 -0
  108. package/dist/litellm/model-types.d.ts +91 -0
  109. package/dist/litellm/model-types.d.ts.map +1 -0
  110. package/dist/litellm/model.d.ts +88 -0
  111. package/dist/litellm/model.d.ts.map +1 -0
  112. package/dist/litellm/policy-attachment-form.d.ts +19 -0
  113. package/dist/litellm/policy-attachment-form.d.ts.map +1 -0
  114. package/dist/litellm/policy-attachment-operations.d.ts +31 -0
  115. package/dist/litellm/policy-attachment-operations.d.ts.map +1 -0
  116. package/dist/litellm/policy-attachment-types.d.ts +48 -0
  117. package/dist/litellm/policy-attachment-types.d.ts.map +1 -0
  118. package/dist/litellm/policy-attachment.d.ts +61 -0
  119. package/dist/litellm/policy-attachment.d.ts.map +1 -0
  120. package/dist/litellm/policy-form.d.ts +22 -0
  121. package/dist/litellm/policy-form.d.ts.map +1 -0
  122. package/dist/litellm/policy-operations.d.ts +42 -0
  123. package/dist/litellm/policy-operations.d.ts.map +1 -0
  124. package/dist/litellm/policy-types.d.ts +57 -0
  125. package/dist/litellm/policy-types.d.ts.map +1 -0
  126. package/dist/litellm/policy.d.ts +65 -0
  127. package/dist/litellm/policy.d.ts.map +1 -0
  128. package/dist/litellm/providers.d.ts +1 -1
  129. package/dist/litellm/providers.d.ts.map +1 -1
  130. package/dist/litellm/registry-errors.d.ts +62 -0
  131. package/dist/litellm/registry-errors.d.ts.map +1 -0
  132. package/dist/litellm/registry-support.d.ts +42 -0
  133. package/dist/litellm/registry-support.d.ts.map +1 -0
  134. package/dist/litellm/team-form.d.ts +26 -0
  135. package/dist/litellm/team-form.d.ts.map +1 -0
  136. package/dist/litellm/team-members.d.ts +10 -0
  137. package/dist/litellm/team-members.d.ts.map +1 -0
  138. package/dist/litellm/team-operations.d.ts +38 -0
  139. package/dist/litellm/team-operations.d.ts.map +1 -0
  140. package/dist/litellm/team-permission.d.ts +35 -0
  141. package/dist/litellm/team-permission.d.ts.map +1 -0
  142. package/dist/litellm/team-types.d.ts +101 -0
  143. package/dist/litellm/team-types.d.ts.map +1 -0
  144. package/dist/litellm/team.d.ts +67 -0
  145. package/dist/litellm/team.d.ts.map +1 -0
  146. package/dist/litellm/tool-policy-form.d.ts +21 -0
  147. package/dist/litellm/tool-policy-form.d.ts.map +1 -0
  148. package/dist/litellm/tool-policy-operations.d.ts +30 -0
  149. package/dist/litellm/tool-policy-operations.d.ts.map +1 -0
  150. package/dist/litellm/tool-policy-types.d.ts +46 -0
  151. package/dist/litellm/tool-policy-types.d.ts.map +1 -0
  152. package/dist/litellm/tool-policy.d.ts +62 -0
  153. package/dist/litellm/tool-policy.d.ts.map +1 -0
  154. package/dist/litellm/toolset-form.d.ts +20 -0
  155. package/dist/litellm/toolset-form.d.ts.map +1 -0
  156. package/dist/litellm/toolset-operations.d.ts +39 -0
  157. package/dist/litellm/toolset-operations.d.ts.map +1 -0
  158. package/dist/litellm/toolset-types.d.ts +46 -0
  159. package/dist/litellm/toolset-types.d.ts.map +1 -0
  160. package/dist/litellm/toolset.d.ts +55 -0
  161. package/dist/litellm/toolset.d.ts.map +1 -0
  162. package/dist/openbao/index.js +35 -1
  163. package/dist/openbao/index.js.map +3 -3
  164. package/dist/ownership/rows.d.ts +11 -0
  165. package/dist/ownership/rows.d.ts.map +1 -1
  166. package/dist/postgres/connection.d.ts +14 -2
  167. package/dist/postgres/connection.d.ts.map +1 -1
  168. package/dist/postgres/database-sql.d.ts +27 -8
  169. package/dist/postgres/database-sql.d.ts.map +1 -1
  170. package/dist/postgres/fake-grants-parse.d.ts +37 -0
  171. package/dist/postgres/fake-grants-parse.d.ts.map +1 -0
  172. package/dist/postgres/fake-grants-read.d.ts +61 -0
  173. package/dist/postgres/fake-grants-read.d.ts.map +1 -0
  174. package/dist/postgres/fake-grants-sql.d.ts +46 -0
  175. package/dist/postgres/fake-grants-sql.d.ts.map +1 -0
  176. package/dist/postgres/fake-grants-write.d.ts +29 -0
  177. package/dist/postgres/fake-grants-write.d.ts.map +1 -0
  178. package/dist/postgres/fake-role-sql.d.ts +41 -0
  179. package/dist/postgres/fake-role-sql.d.ts.map +1 -0
  180. package/dist/postgres/fake-schema-sql.d.ts +42 -0
  181. package/dist/postgres/fake-schema-sql.d.ts.map +1 -0
  182. package/dist/postgres/fake-sql-parse.d.ts +23 -0
  183. package/dist/postgres/fake-sql-parse.d.ts.map +1 -0
  184. package/dist/postgres/fake-sql-quote.d.ts +12 -0
  185. package/dist/postgres/fake-sql-quote.d.ts.map +1 -0
  186. package/dist/postgres/fake-sql.d.ts +42 -0
  187. package/dist/postgres/fake-sql.d.ts.map +1 -1
  188. package/dist/postgres/grants-attrs.d.ts +115 -0
  189. package/dist/postgres/grants-attrs.d.ts.map +1 -0
  190. package/dist/postgres/grants-declare.d.ts +88 -0
  191. package/dist/postgres/grants-declare.d.ts.map +1 -0
  192. package/dist/postgres/grants-diff.d.ts +25 -0
  193. package/dist/postgres/grants-diff.d.ts.map +1 -0
  194. package/dist/postgres/grants-errors.d.ts +137 -0
  195. package/dist/postgres/grants-errors.d.ts.map +1 -0
  196. package/dist/postgres/grants-existence.d.ts +14 -0
  197. package/dist/postgres/grants-existence.d.ts.map +1 -0
  198. package/dist/postgres/grants-ops.d.ts +65 -0
  199. package/dist/postgres/grants-ops.d.ts.map +1 -0
  200. package/dist/postgres/grants-ownership.d.ts +18 -0
  201. package/dist/postgres/grants-ownership.d.ts.map +1 -0
  202. package/dist/postgres/grants-plan-restore.d.ts +22 -0
  203. package/dist/postgres/grants-plan-restore.d.ts.map +1 -0
  204. package/dist/postgres/grants-plan.d.ts +65 -0
  205. package/dist/postgres/grants-plan.d.ts.map +1 -0
  206. package/dist/postgres/grants-read-defaults.d.ts +17 -0
  207. package/dist/postgres/grants-read-defaults.d.ts.map +1 -0
  208. package/dist/postgres/grants-read.d.ts +77 -0
  209. package/dist/postgres/grants-read.d.ts.map +1 -0
  210. package/dist/postgres/grants-refuse.d.ts +25 -0
  211. package/dist/postgres/grants-refuse.d.ts.map +1 -0
  212. package/dist/postgres/grants-sql.d.ts +42 -0
  213. package/dist/postgres/grants-sql.d.ts.map +1 -0
  214. package/dist/postgres/grants-words.d.ts +29 -0
  215. package/dist/postgres/grants-words.d.ts.map +1 -0
  216. package/dist/postgres/grants.d.ts +37 -0
  217. package/dist/postgres/grants.d.ts.map +1 -0
  218. package/dist/postgres/index.d.ts +31 -6
  219. package/dist/postgres/index.d.ts.map +1 -1
  220. package/dist/postgres/index.js +1998 -37
  221. package/dist/postgres/index.js.map +46 -7
  222. package/dist/postgres/installed-classifier.d.ts +13 -0
  223. package/dist/postgres/installed-classifier.d.ts.map +1 -0
  224. package/dist/postgres/providers.d.ts +16 -8
  225. package/dist/postgres/providers.d.ts.map +1 -1
  226. package/dist/postgres/psql-executor.d.ts +4 -0
  227. package/dist/postgres/psql-executor.d.ts.map +1 -1
  228. package/dist/postgres/role-attrs.d.ts +112 -0
  229. package/dist/postgres/role-attrs.d.ts.map +1 -0
  230. package/dist/postgres/role-diff.d.ts +22 -0
  231. package/dist/postgres/role-diff.d.ts.map +1 -0
  232. package/dist/postgres/role-errors.d.ts +132 -0
  233. package/dist/postgres/role-errors.d.ts.map +1 -0
  234. package/dist/postgres/role-membership-sql.d.ts +78 -0
  235. package/dist/postgres/role-membership-sql.d.ts.map +1 -0
  236. package/dist/postgres/role-provider.d.ts +11 -0
  237. package/dist/postgres/role-provider.d.ts.map +1 -0
  238. package/dist/postgres/role-scram.d.ts +8 -0
  239. package/dist/postgres/role-scram.d.ts.map +1 -0
  240. package/dist/postgres/role-secrets.d.ts +38 -0
  241. package/dist/postgres/role-secrets.d.ts.map +1 -0
  242. package/dist/postgres/role-sql.d.ts +68 -0
  243. package/dist/postgres/role-sql.d.ts.map +1 -0
  244. package/dist/postgres/role.d.ts +57 -0
  245. package/dist/postgres/role.d.ts.map +1 -0
  246. package/dist/postgres/schema-assert.d.ts +50 -0
  247. package/dist/postgres/schema-assert.d.ts.map +1 -0
  248. package/dist/postgres/schema-attrs.d.ts +51 -0
  249. package/dist/postgres/schema-attrs.d.ts.map +1 -0
  250. package/dist/postgres/schema-delete.d.ts +28 -0
  251. package/dist/postgres/schema-delete.d.ts.map +1 -0
  252. package/dist/postgres/schema-diff.d.ts +14 -0
  253. package/dist/postgres/schema-diff.d.ts.map +1 -0
  254. package/dist/postgres/schema-errors.d.ts +139 -0
  255. package/dist/postgres/schema-errors.d.ts.map +1 -0
  256. package/dist/postgres/schema-identity.d.ts +8 -0
  257. package/dist/postgres/schema-identity.d.ts.map +1 -0
  258. package/dist/postgres/schema-reconcile.d.ts +12 -0
  259. package/dist/postgres/schema-reconcile.d.ts.map +1 -0
  260. package/dist/postgres/schema-sql.d.ts +45 -0
  261. package/dist/postgres/schema-sql.d.ts.map +1 -0
  262. package/dist/postgres/schema-test-kit.d.ts +67 -0
  263. package/dist/postgres/schema-test-kit.d.ts.map +1 -0
  264. package/dist/postgres/schema.d.ts +54 -0
  265. package/dist/postgres/schema.d.ts.map +1 -0
  266. package/dist/proxmox/index.js +35 -1
  267. package/dist/proxmox/index.js.map +3 -3
  268. package/dist/release/fake-engine.d.ts +10 -0
  269. package/dist/release/fake-engine.d.ts.map +1 -1
  270. package/dist/release/index.js +35 -1
  271. package/dist/release/index.js.map +3 -3
  272. package/dist/valkey/acl-attrs.d.ts +94 -0
  273. package/dist/valkey/acl-attrs.d.ts.map +1 -0
  274. package/dist/valkey/acl-compare.d.ts +28 -0
  275. package/dist/valkey/acl-compare.d.ts.map +1 -0
  276. package/dist/valkey/acl-connection.d.ts +6 -0
  277. package/dist/valkey/acl-connection.d.ts.map +1 -0
  278. package/dist/valkey/acl-form.d.ts +62 -0
  279. package/dist/valkey/acl-form.d.ts.map +1 -0
  280. package/dist/valkey/acl-managed.d.ts +4 -0
  281. package/dist/valkey/acl-managed.d.ts.map +1 -0
  282. package/dist/valkey/acl-ops.d.ts +37 -0
  283. package/dist/valkey/acl-ops.d.ts.map +1 -0
  284. package/dist/valkey/acl-profiles.d.ts +53 -0
  285. package/dist/valkey/acl-profiles.d.ts.map +1 -0
  286. package/dist/valkey/acl-reconcile.d.ts +26 -0
  287. package/dist/valkey/acl-reconcile.d.ts.map +1 -0
  288. package/dist/valkey/acl.d.ts +24 -0
  289. package/dist/valkey/acl.d.ts.map +1 -0
  290. package/dist/valkey/connection-service.d.ts +22 -0
  291. package/dist/valkey/connection-service.d.ts.map +1 -0
  292. package/dist/valkey/connection.d.ts +59 -0
  293. package/dist/valkey/connection.d.ts.map +1 -0
  294. package/dist/valkey/errors.d.ts +165 -0
  295. package/dist/valkey/errors.d.ts.map +1 -0
  296. package/dist/valkey/fake-acl.d.ts +29 -0
  297. package/dist/valkey/fake-acl.d.ts.map +1 -0
  298. package/dist/valkey/fake-valkey.d.ts +35 -0
  299. package/dist/valkey/fake-valkey.d.ts.map +1 -0
  300. package/dist/valkey/handler-test-fixture.d.ts +20 -0
  301. package/dist/valkey/handler-test-fixture.d.ts.map +1 -0
  302. package/dist/valkey/index.d.ts +18 -0
  303. package/dist/valkey/index.d.ts.map +1 -0
  304. package/dist/valkey/index.js +964 -0
  305. package/dist/valkey/index.js.map +27 -0
  306. package/dist/valkey/instance-attrs.d.ts +46 -0
  307. package/dist/valkey/instance-attrs.d.ts.map +1 -0
  308. package/dist/valkey/instance-form.d.ts +22 -0
  309. package/dist/valkey/instance-form.d.ts.map +1 -0
  310. package/dist/valkey/instance.d.ts +48 -0
  311. package/dist/valkey/instance.d.ts.map +1 -0
  312. package/dist/valkey/provider-socket-fixture.d.ts +8 -0
  313. package/dist/valkey/provider-socket-fixture.d.ts.map +1 -0
  314. package/dist/valkey/providers.d.ts +16 -0
  315. package/dist/valkey/providers.d.ts.map +1 -0
  316. package/dist/valkey/resp.d.ts +38 -0
  317. package/dist/valkey/resp.d.ts.map +1 -0
  318. package/dist/valkey/transport-error.d.ts +36 -0
  319. package/dist/valkey/transport-error.d.ts.map +1 -0
  320. package/dist/valkey/transport.d.ts +50 -0
  321. package/dist/valkey/transport.d.ts.map +1 -0
  322. package/docs/litellm-access-group.md +105 -0
  323. package/docs/litellm-credential.md +60 -0
  324. package/docs/litellm-key-metadata.md +56 -0
  325. package/docs/litellm-key.md +194 -0
  326. package/docs/litellm-mcp.md +187 -0
  327. package/docs/litellm-model.md +111 -0
  328. package/docs/litellm-policy-attachment.md +86 -0
  329. package/docs/litellm-policy.md +103 -0
  330. package/docs/litellm-team.md +117 -0
  331. package/docs/litellm-tool-policy.md +90 -0
  332. package/docs/litellm-toolset.md +92 -0
  333. package/docs/litellm.md +16 -9
  334. package/docs/peers.md +15 -6
  335. package/docs/postgres-grants-example.md +55 -0
  336. package/docs/postgres-grants.md +157 -0
  337. package/docs/postgres-role.md +126 -0
  338. package/docs/postgres-schema.md +139 -0
  339. package/docs/postgres.md +20 -3
  340. package/docs/valkey-transport.md +29 -0
  341. package/docs/valkey.md +187 -0
  342. package/package.json +6 -2
  343. package/src/ceph/ceph-argv.test.ts +1 -1
  344. package/src/launchd/sudo-allowlist.test.ts +2 -2
  345. package/src/linux/sudo-allowlist.test.ts +3 -3
  346. package/src/linux/sudo-runner.test.ts +2 -2
  347. package/src/litellm/access-group-form.ts +105 -0
  348. package/src/litellm/access-group-operations.ts +92 -0
  349. package/src/litellm/access-group-types.ts +49 -0
  350. package/src/litellm/access-group.test.ts +197 -0
  351. package/src/litellm/access-group.ts +151 -0
  352. package/src/litellm/credential-errors.ts +183 -0
  353. package/src/litellm/credential-form.test.ts +151 -0
  354. package/src/litellm/credential-form.ts +211 -0
  355. package/src/litellm/credential-guards.test.ts +241 -0
  356. package/src/litellm/credential-operations.ts +208 -0
  357. package/src/litellm/credential-recovery.test.ts +93 -0
  358. package/src/litellm/credential-rewrite.test.ts +164 -0
  359. package/src/litellm/credential-rewrite.ts +50 -0
  360. package/src/litellm/credential-types.ts +117 -0
  361. package/src/litellm/credential-values.ts +94 -0
  362. package/src/litellm/credential.test.ts +218 -0
  363. package/src/litellm/credential.ts +227 -0
  364. package/src/litellm/fake-access-group-litellm.ts +127 -0
  365. package/src/litellm/fake-credential-litellm.ts +216 -0
  366. package/src/litellm/fake-keys.ts +190 -0
  367. package/src/litellm/fake-litellm.ts +19 -9
  368. package/src/litellm/fake-mcp-litellm.ts +214 -0
  369. package/src/litellm/fake-model-litellm-post-update.ts +103 -0
  370. package/src/litellm/fake-model-litellm.ts +233 -0
  371. package/src/litellm/fake-policy-attachment-litellm.ts +97 -0
  372. package/src/litellm/fake-policy-litellm.ts +186 -0
  373. package/src/litellm/fake-registry-base.ts +69 -0
  374. package/src/litellm/fake-stack.ts +17 -1
  375. package/src/litellm/fake-team-litellm.ts +229 -0
  376. package/src/litellm/fake-tool-litellm.ts +88 -0
  377. package/src/litellm/fake-toolset-litellm.ts +110 -0
  378. package/src/litellm/index.ts +140 -0
  379. package/src/litellm/key-delete.test.ts +212 -0
  380. package/src/litellm/key-errors.ts +241 -0
  381. package/src/litellm/key-form.ts +200 -0
  382. package/src/litellm/key-harness.ts +121 -0
  383. package/src/litellm/key-metadata-errors.ts +49 -0
  384. package/src/litellm/key-metadata.test.ts +156 -0
  385. package/src/litellm/key-metadata.ts +74 -0
  386. package/src/litellm/key-operations.ts +184 -0
  387. package/src/litellm/key-rotation.test.ts +110 -0
  388. package/src/litellm/key-scope.test.ts +135 -0
  389. package/src/litellm/key-secret.test.ts +248 -0
  390. package/src/litellm/key-secret.ts +137 -0
  391. package/src/litellm/key-transport.test.ts +166 -0
  392. package/src/litellm/key.test.ts +231 -0
  393. package/src/litellm/key.ts +213 -0
  394. package/src/litellm/mcp-server-adopt.test.ts +86 -0
  395. package/src/litellm/mcp-server-alias.test.ts +184 -0
  396. package/src/litellm/mcp-server-credential.ts +85 -0
  397. package/src/litellm/mcp-server-errors.ts +141 -0
  398. package/src/litellm/mcp-server-exports.test.ts +15 -0
  399. package/src/litellm/mcp-server-form.test.ts +241 -0
  400. package/src/litellm/mcp-server-form.ts +233 -0
  401. package/src/litellm/mcp-server-handlers.test.ts +150 -0
  402. package/src/litellm/mcp-server-locate.ts +66 -0
  403. package/src/litellm/mcp-server-operations.ts +111 -0
  404. package/src/litellm/mcp-server-registry.test.ts +146 -0
  405. package/src/litellm/mcp-server-retype.test.ts +114 -0
  406. package/src/litellm/mcp-server-shadow.test.ts +91 -0
  407. package/src/litellm/mcp-server-shadow.ts +45 -0
  408. package/src/litellm/mcp-server-tools.test.ts +85 -0
  409. package/src/litellm/mcp-server-types.ts +143 -0
  410. package/src/litellm/mcp-server-url.ts +66 -0
  411. package/src/litellm/mcp-server.test.ts +213 -0
  412. package/src/litellm/mcp-server.ts +225 -0
  413. package/src/litellm/model-claim.ts +69 -0
  414. package/src/litellm/model-credential.ts +45 -0
  415. package/src/litellm/model-errors.ts +168 -0
  416. package/src/litellm/model-foreign-row.test.ts +173 -0
  417. package/src/litellm/model-form.test.ts +228 -0
  418. package/src/litellm/model-form.ts +223 -0
  419. package/src/litellm/model-locate.test.ts +128 -0
  420. package/src/litellm/model-locate.ts +67 -0
  421. package/src/litellm/model-operations.test.ts +93 -0
  422. package/src/litellm/model-operations.ts +146 -0
  423. package/src/litellm/model-params-preserve.test.ts +119 -0
  424. package/src/litellm/model-recovery.test.ts +57 -0
  425. package/src/litellm/model-types.ts +112 -0
  426. package/src/litellm/model.test.ts +222 -0
  427. package/src/litellm/model.ts +237 -0
  428. package/src/litellm/policy-attachment-form.ts +103 -0
  429. package/src/litellm/policy-attachment-operations.ts +74 -0
  430. package/src/litellm/policy-attachment-types.ts +48 -0
  431. package/src/litellm/policy-attachment.test.ts +198 -0
  432. package/src/litellm/policy-attachment.ts +178 -0
  433. package/src/litellm/policy-form.ts +122 -0
  434. package/src/litellm/policy-operations.ts +112 -0
  435. package/src/litellm/policy-types.ts +58 -0
  436. package/src/litellm/policy.test.ts +214 -0
  437. package/src/litellm/policy.ts +146 -0
  438. package/src/litellm/providers.ts +24 -3
  439. package/src/litellm/registry-errors.ts +88 -0
  440. package/src/litellm/registry-exports.test.ts +66 -0
  441. package/src/litellm/registry-support.ts +109 -0
  442. package/src/litellm/team-form.ts +140 -0
  443. package/src/litellm/team-members.test.ts +150 -0
  444. package/src/litellm/team-members.ts +58 -0
  445. package/src/litellm/team-operations.ts +90 -0
  446. package/src/litellm/team-permission.ts +159 -0
  447. package/src/litellm/team-read.test.ts +89 -0
  448. package/src/litellm/team-types.ts +106 -0
  449. package/src/litellm/team.test.ts +206 -0
  450. package/src/litellm/team.ts +159 -0
  451. package/src/litellm/tool-policy-form.ts +94 -0
  452. package/src/litellm/tool-policy-operations.ts +58 -0
  453. package/src/litellm/tool-policy-types.ts +48 -0
  454. package/src/litellm/tool-policy.test.ts +172 -0
  455. package/src/litellm/tool-policy.ts +125 -0
  456. package/src/litellm/toolset-form.ts +104 -0
  457. package/src/litellm/toolset-operations.ts +90 -0
  458. package/src/litellm/toolset-types.ts +47 -0
  459. package/src/litellm/toolset.test.ts +198 -0
  460. package/src/litellm/toolset.ts +151 -0
  461. package/src/ownership/ownership.test.ts +33 -1
  462. package/src/ownership/rows.ts +53 -0
  463. package/src/postgres/connection.ts +42 -7
  464. package/src/postgres/database-bigint-serialization.test.ts +1 -0
  465. package/src/postgres/database-refusals.test.ts +2 -2
  466. package/src/postgres/database-sql.ts +36 -9
  467. package/src/postgres/fake-grants-parse.ts +189 -0
  468. package/src/postgres/fake-grants-read.ts +250 -0
  469. package/src/postgres/fake-grants-sql.ts +207 -0
  470. package/src/postgres/fake-grants-write.ts +90 -0
  471. package/src/postgres/fake-role-sql.ts +240 -0
  472. package/src/postgres/fake-schema-semantics.test.ts +36 -0
  473. package/src/postgres/fake-schema-sql.ts +146 -0
  474. package/src/postgres/fake-sql-parse.ts +86 -0
  475. package/src/postgres/fake-sql-quote.ts +36 -0
  476. package/src/postgres/fake-sql.ts +166 -46
  477. package/src/postgres/fixtures/pg-REL_18_6-acl.h.txt +147 -0
  478. package/src/postgres/fixtures/pg-REL_18_6-aclexplode-func.txt +31 -0
  479. package/src/postgres/fixtures/pg-REL_18_6-alter-default-privileges-synopsis.txt +82 -0
  480. package/src/postgres/fixtures/pg-REL_18_6-alter_role.sgml.txt +44 -0
  481. package/src/postgres/fixtures/pg-REL_18_6-create_role.sgml.txt +26 -0
  482. package/src/postgres/fixtures/pg-REL_18_6-grant-synopsis.txt +95 -0
  483. package/src/postgres/fixtures/pg-REL_18_6-pg_attribute.h.txt +24 -0
  484. package/src/postgres/fixtures/pg-REL_18_6-pg_auth_members.h.txt +62 -0
  485. package/src/postgres/fixtures/pg-REL_18_6-pg_authid.h.txt +70 -0
  486. package/src/postgres/fixtures/pg-REL_18_6-pg_class.h.txt +33 -0
  487. package/src/postgres/fixtures/pg-REL_18_6-pg_default_acl.h.txt +81 -0
  488. package/src/postgres/fixtures/pg-REL_18_6-pg_namespace.h.txt +28 -0
  489. package/src/postgres/fixtures/pg-REL_18_6-revoke-synopsis.txt +124 -0
  490. package/src/postgres/grants-acl.test.ts +61 -0
  491. package/src/postgres/grants-attrs.ts +185 -0
  492. package/src/postgres/grants-database.test.ts +158 -0
  493. package/src/postgres/grants-declare.ts +172 -0
  494. package/src/postgres/grants-delete-proof.test.ts +154 -0
  495. package/src/postgres/grants-diff.ts +101 -0
  496. package/src/postgres/grants-errors.ts +215 -0
  497. package/src/postgres/grants-existence-guards.test.ts +113 -0
  498. package/src/postgres/grants-existence.ts +101 -0
  499. package/src/postgres/grants-lifecycle-guards.test.ts +208 -0
  500. package/src/postgres/grants-lifecycle-repair.test.ts +208 -0
  501. package/src/postgres/grants-lifecycle.test.ts +181 -0
  502. package/src/postgres/grants-ops.ts +229 -0
  503. package/src/postgres/grants-owner-revoke.test.ts +121 -0
  504. package/src/postgres/grants-ownership.ts +49 -0
  505. package/src/postgres/grants-plan-collateral.test.ts +202 -0
  506. package/src/postgres/grants-plan-diff.test.ts +204 -0
  507. package/src/postgres/grants-plan-restore.ts +43 -0
  508. package/src/postgres/grants-plan-revocations.test.ts +69 -0
  509. package/src/postgres/grants-plan.test.ts +148 -0
  510. package/src/postgres/grants-plan.ts +245 -0
  511. package/src/postgres/grants-provenance.test.ts +134 -0
  512. package/src/postgres/grants-psql-lifecycle.test.ts +105 -0
  513. package/src/postgres/grants-read-absent.test.ts +91 -0
  514. package/src/postgres/grants-read-defaults.ts +51 -0
  515. package/src/postgres/grants-read.ts +250 -0
  516. package/src/postgres/grants-refusals.test.ts +136 -0
  517. package/src/postgres/grants-refuse.ts +119 -0
  518. package/src/postgres/grants-relkind-wire.test.ts +111 -0
  519. package/src/postgres/grants-repair-plan.test.ts +201 -0
  520. package/src/postgres/grants-sql.test.ts +128 -0
  521. package/src/postgres/grants-sql.ts +144 -0
  522. package/src/postgres/grants-words.ts +34 -0
  523. package/src/postgres/grants.ts +110 -0
  524. package/src/postgres/index.ts +129 -5
  525. package/src/postgres/installed-classifier.ts +36 -0
  526. package/src/postgres/providers.ts +33 -9
  527. package/src/postgres/psql-executor-escaping.test.ts +67 -0
  528. package/src/postgres/psql-executor.test.ts +63 -2
  529. package/src/postgres/psql-executor.ts +74 -34
  530. package/src/postgres/role-adopt.test.ts +98 -0
  531. package/src/postgres/role-attrs.ts +137 -0
  532. package/src/postgres/role-diff.ts +93 -0
  533. package/src/postgres/role-errors.ts +206 -0
  534. package/src/postgres/role-guard.test.ts +60 -0
  535. package/src/postgres/role-identity.test.ts +197 -0
  536. package/src/postgres/role-lifecycle.test.ts +228 -0
  537. package/src/postgres/role-membership-options.test.ts +73 -0
  538. package/src/postgres/role-membership-repair.test.ts +153 -0
  539. package/src/postgres/role-membership-sql.ts +223 -0
  540. package/src/postgres/role-password-ascii.test.ts +53 -0
  541. package/src/postgres/role-password-transports.test.ts +123 -0
  542. package/src/postgres/role-password.test.ts +158 -0
  543. package/src/postgres/role-privilege.test.ts +107 -0
  544. package/src/postgres/role-provenance.test.ts +200 -0
  545. package/src/postgres/role-provider.ts +105 -0
  546. package/src/postgres/role-refusals.test.ts +225 -0
  547. package/src/postgres/role-scram.test.ts +38 -0
  548. package/src/postgres/role-scram.ts +40 -0
  549. package/src/postgres/role-secrets.ts +61 -0
  550. package/src/postgres/role-sql.ts +213 -0
  551. package/src/postgres/role-valid-until.test.ts +68 -0
  552. package/src/postgres/role.ts +226 -0
  553. package/src/postgres/schema-assert.ts +139 -0
  554. package/src/postgres/schema-attrs.ts +71 -0
  555. package/src/postgres/schema-delete-proofs.test.ts +192 -0
  556. package/src/postgres/schema-delete.ts +96 -0
  557. package/src/postgres/schema-diff.ts +44 -0
  558. package/src/postgres/schema-drop-2bp01.test.ts +146 -0
  559. package/src/postgres/schema-errors.ts +209 -0
  560. package/src/postgres/schema-handlers.test.ts +193 -0
  561. package/src/postgres/schema-identity.ts +39 -0
  562. package/src/postgres/schema-lifecycle.test.ts +246 -0
  563. package/src/postgres/schema-race.test.ts +70 -0
  564. package/src/postgres/schema-reconcile.ts +100 -0
  565. package/src/postgres/schema-refusals.test.ts +144 -0
  566. package/src/postgres/schema-socket.test.ts +162 -0
  567. package/src/postgres/schema-sql.ts +130 -0
  568. package/src/postgres/schema-takeover.test.ts +149 -0
  569. package/src/postgres/schema-test-kit.ts +85 -0
  570. package/src/postgres/schema.ts +130 -0
  571. package/src/release/binary-alias.test.ts +3 -3
  572. package/src/release/binary-claims.test.ts +3 -3
  573. package/src/release/binary-directory-umask.test.ts +65 -0
  574. package/src/release/fake-engine.ts +15 -0
  575. package/src/valkey/acl-attrs.ts +98 -0
  576. package/src/valkey/acl-compare.ts +57 -0
  577. package/src/valkey/acl-connection.ts +13 -0
  578. package/src/valkey/acl-delete.test.ts +127 -0
  579. package/src/valkey/acl-form.ts +239 -0
  580. package/src/valkey/acl-managed.ts +13 -0
  581. package/src/valkey/acl-ops.ts +122 -0
  582. package/src/valkey/acl-ownership.test.ts +118 -0
  583. package/src/valkey/acl-prefix.test.ts +38 -0
  584. package/src/valkey/acl-profiles.ts +81 -0
  585. package/src/valkey/acl-reconcile.ts +180 -0
  586. package/src/valkey/acl-reserved.test.ts +69 -0
  587. package/src/valkey/acl-revocation.test.ts +94 -0
  588. package/src/valkey/acl-seat-prefix.test.ts +111 -0
  589. package/src/valkey/acl-validation.test.ts +54 -0
  590. package/src/valkey/acl.test.ts +215 -0
  591. package/src/valkey/acl.ts +169 -0
  592. package/src/valkey/connection-service.ts +46 -0
  593. package/src/valkey/connection.ts +180 -0
  594. package/src/valkey/errors.ts +239 -0
  595. package/src/valkey/fake-acl.ts +128 -0
  596. package/src/valkey/fake-valkey.ts +224 -0
  597. package/src/valkey/handler-test-fixture.ts +43 -0
  598. package/src/valkey/handlers.test.ts +205 -0
  599. package/src/valkey/index.ts +54 -0
  600. package/src/valkey/instance-attrs.ts +48 -0
  601. package/src/valkey/instance-form.ts +104 -0
  602. package/src/valkey/instance.test.ts +108 -0
  603. package/src/valkey/instance.ts +160 -0
  604. package/src/valkey/provider-socket-fixture.ts +71 -0
  605. package/src/valkey/providers.test.ts +129 -0
  606. package/src/valkey/providers.ts +21 -0
  607. package/src/valkey/resp.ts +212 -0
  608. package/src/valkey/transport-bounds.test.ts +150 -0
  609. package/src/valkey/transport-error.ts +37 -0
  610. package/src/valkey/transport.test.ts +158 -0
  611. package/src/valkey/transport.ts +109 -0
  612. package/src/valkey/upstream-bounds.test.ts +14 -0
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Whether a stateless `LiteLLM.Model` reconcile may write the live row it found.
3
+ *
4
+ * ⛔ A ROW WITH NO SEAL IS NOT YET THIS GENERATION'S. `output` is undefined on a create and on a
5
+ * `replacing` row Apply committed before reconcile (Apply.ts), and a probe result carries
6
+ * `paramsSeal: ''`. Either way the live row may belong to someone else.
7
+ * ★ TWO ROWS THAT LOOK THE SAME AND ARE NOT. A deterministic id this declaration would create is
8
+ * ours by construction. An older generation's `attr.id` (ownership/rows.ts) is our own serving
9
+ * deployment from before this replacement — recording it here makes destroy() delete it. A
10
+ * declared id needs `--adopt` on a create or an unfinished generation; an unpinned row with any
11
+ * other id is adopted only on a create (ownership/adopt.ts).
12
+ */
13
+ import * as Effect from 'effect/Effect';
14
+ import { LitellmModelForeignRowError, LitellmModelPriorGenerationError } from './model-errors.ts';
15
+ import type { ModelAttributes, ModelProps } from './model-types.ts';
16
+ export declare const claimStatelessRow: (args: {
17
+ readonly fqn: string;
18
+ readonly instanceId: string;
19
+ readonly output: ModelAttributes | undefined;
20
+ readonly news: ModelProps;
21
+ readonly beforeId: string;
22
+ readonly wanted: string;
23
+ }) => Effect.Effect<void, LitellmModelPriorGenerationError | LitellmModelForeignRowError>;
24
+ //# sourceMappingURL=model-claim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-claim.d.ts","sourceRoot":"","sources":["../../src/litellm/model-claim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAKxC,OAAO,EAAE,2BAA2B,EAAE,gCAAgC,EAAE,MAAM,mBAAmB,CAAC;AAClG,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEpE,eAAO,MAAM,iBAAiB,SAAU;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,gCAAgC,GAAG,2BAA2B,CAyClF,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { ModelProps } from './model-types.ts';
2
+ /**
3
+ * The declared `litellm_params` as the reference form names them — the input to the seal. `model`
4
+ * and `api_base` are what the proxy routes on; `api_key` is the reference LiteLLM resolves in its
5
+ * own environment. No value, ever: there is no lookup and no environment here.
6
+ */
7
+ export declare const declaredValues: (props: ModelProps) => Record<string, string>;
8
+ /** `scrypt:<salt>:<digest>` of declared values, for `paramsSeal`. ⛔ Never a secret value. */
9
+ export declare const sealFromValues: (values: Record<string, string>) => string;
10
+ /** Whether the declaration's values are the ones `sealed` was made from. */
11
+ export declare const sealState: (props: ModelProps, sealed: string) => 'match' | 'stale';
12
+ //# sourceMappingURL=model-credential.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-credential.d.ts","sourceRoot":"","sources":["../../src/litellm/model-credential.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,cAAc,UAAW,UAAU,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAKvE,CAAC;AAEF,6FAA6F;AAC7F,eAAO,MAAM,cAAc,WAAY,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,MAAsB,CAAC;AAEvF,4EAA4E;AAC5E,eAAO,MAAM,SAAS,UAAW,UAAU,UAAU,MAAM,KAAG,OAAO,GAAG,OACR,CAAC"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * The typed refusals `LiteLLM.Model` raises on top of `@distilled.cloud/litellm`'s own SDK errors.
3
+ *
4
+ * ⛔ NO MESSAGE HERE MAY CARRY A CREDENTIAL: only names, ids, field names and the NAME of an
5
+ * environment variable, exactly like mcp-server-errors.ts.
6
+ */
7
+ import type { BadRequest, NotFound } from '@distilled.cloud/litellm/Errors';
8
+ import type * as models from '@distilled.cloud/litellm/model_management';
9
+ declare const LitellmModelInvalidError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
10
+ readonly _tag: "LitellmModelInvalidError";
11
+ } & Readonly<A>;
12
+ /** A declaration the resource refuses before any request: a combination nobody meant. */
13
+ export declare class LitellmModelInvalidError extends LitellmModelInvalidError_base<{
14
+ readonly modelName: string;
15
+ readonly problem: string;
16
+ }> {
17
+ get message(): string;
18
+ }
19
+ declare const LitellmModelAmbiguousNameError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
20
+ readonly _tag: "LitellmModelAmbiguousNameError";
21
+ } & Readonly<A>;
22
+ /**
23
+ * More than one live deployment carries the declared `model_name`, so adopt-by-name cannot say
24
+ * which one is meant — LiteLLM runs several deployments under one group name on purpose. Declare
25
+ * `id` to pick one; nothing is adopted, updated or deleted on a guess.
26
+ */
27
+ export declare class LitellmModelAmbiguousNameError extends LitellmModelAmbiguousNameError_base<{
28
+ readonly modelName: string;
29
+ readonly ids: readonly string[];
30
+ }> {
31
+ get message(): string;
32
+ }
33
+ declare const LitellmModelUnreadableError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
34
+ readonly _tag: "LitellmModelUnreadableError";
35
+ } & Readonly<A>;
36
+ /** `GET /model/info` answered something that is not a list of deployments. */
37
+ export declare class LitellmModelUnreadableError extends LitellmModelUnreadableError_base<{
38
+ readonly reason: string;
39
+ }> {
40
+ get message(): string;
41
+ }
42
+ declare const LitellmModelAbsentAfterWriteError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
43
+ readonly _tag: "LitellmModelAbsentAfterWriteError";
44
+ } & Readonly<A>;
45
+ /**
46
+ * A create or update returned no error, yet no read answers a deployment with the id it was written
47
+ * under: not in the list, and not by the id it would carry.
48
+ */
49
+ export declare class LitellmModelAbsentAfterWriteError extends LitellmModelAbsentAfterWriteError_base<{
50
+ readonly modelName: string;
51
+ readonly id: string;
52
+ }> {
53
+ get message(): string;
54
+ }
55
+ declare const LitellmModelNotConvergedError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
56
+ readonly _tag: "LitellmModelNotConvergedError";
57
+ } & Readonly<A>;
58
+ /**
59
+ * The write returned no error but the deployment still differs from the declaration. The PATCH
60
+ * merge writes the keys it was sent (`update_db_model` at v1.103.0); a field the read-back still
61
+ * shows different is refused here instead of being reported as converged.
62
+ */
63
+ export declare class LitellmModelNotConvergedError extends LitellmModelNotConvergedError_base<{
64
+ readonly modelName: string;
65
+ readonly id: string;
66
+ readonly fields: readonly string[];
67
+ }> {
68
+ get message(): string;
69
+ }
70
+ declare const LitellmModelForeignRowError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
71
+ readonly _tag: "LitellmModelForeignRowError";
72
+ } & Readonly<A>;
73
+ /**
74
+ * A reconcile with no state found a live row under the declared name whose id is not the one this
75
+ * declaration would create, and nothing vouchsafes it: writing over it would take over another
76
+ * owner's deployment. `replace` says whether this generation is a replace's new identity (a changed
77
+ * declared id), which `--adopt` does not cover — the object must be removed first.
78
+ */
79
+ export declare class LitellmModelForeignRowError extends LitellmModelForeignRowError_base<{
80
+ readonly modelName: string;
81
+ readonly id: string;
82
+ readonly replace: boolean;
83
+ }> {
84
+ get message(): string;
85
+ }
86
+ declare const LitellmModelPriorGenerationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
87
+ readonly _tag: "LitellmModelPriorGenerationError";
88
+ } & Readonly<A>;
89
+ /**
90
+ * The row a reconcile found is served from the proxy's config file (`model_info.db_model: false`),
91
+ * not from the database, so the DB API cannot manage it. Remove it from the config file first.
92
+ */
93
+ /**
94
+ * The live row a stateless reconcile found is an OLDER generation of this FQN's own state chain
95
+ * (`attr.id` walked through `old`). It is still the serving deployment: the replacement that
96
+ * followed it never committed. Taking the row over would store that id on the new generation, and
97
+ * `destroy()` then deletes the old generation by the same id.
98
+ * ⛔ THE RECOVERY IS STATE, NOT THE ROW. `alchemy state rm` deletes the state record and leaves the
99
+ * deployment; deleting the live row takes the serving model out of its group.
100
+ */
101
+ export declare class LitellmModelPriorGenerationError extends LitellmModelPriorGenerationError_base<{
102
+ readonly modelName: string;
103
+ readonly id: string;
104
+ readonly fqn: string;
105
+ }> {
106
+ get message(): string;
107
+ }
108
+ declare const LitellmModelConfigFileRowError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
109
+ readonly _tag: "LitellmModelConfigFileRowError";
110
+ } & Readonly<A>;
111
+ export declare class LitellmModelConfigFileRowError extends LitellmModelConfigFileRowError_base<{
112
+ readonly modelName: string;
113
+ readonly id: string;
114
+ }> {
115
+ get message(): string;
116
+ }
117
+ export type ModelError = models.AddNewModelModelNewPostError | models.DeleteModelModelDeletePostError | models.GetModelInfoV1ModelInfoError | models.PatchModelModelModelIdUpdatePatchError | BadRequest | NotFound | LitellmModelInvalidError | LitellmModelAmbiguousNameError | LitellmModelUnreadableError | LitellmModelAbsentAfterWriteError | LitellmModelNotConvergedError | LitellmModelForeignRowError | LitellmModelPriorGenerationError | LitellmModelConfigFileRowError;
118
+ export {};
119
+ //# sourceMappingURL=model-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-errors.d.ts","sourceRoot":"","sources":["../../src/litellm/model-errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,KAAK,KAAK,MAAM,MAAM,2CAA2C,CAAC;;;;AAGzE,yFAAyF;AACzF,qBAAa,wBAAyB,SAAQ,8BAA6C;IACzF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF;;;;AAED;;;;GAIG;AACH,qBAAa,8BAA+B,SAAQ,oCAElD;IACA,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAK7B;CACF;;;;AAED,8EAA8E;AAC9E,qBAAa,2BAA4B,SAAQ,iCAAgD;IAC/F,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF;;;;AAED;;;GAGG;AACH,qBAAa,iCAAkC,SAAQ,uCAErD;IACA,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAK7B;CACF;;;;AAED;;;;GAIG;AACH,qBAAa,6BAA8B,SAAQ,mCAEjD;IACA,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAK7B;CACF;;;;AAED;;;;;GAKG;AACH,qBAAa,2BAA4B,SAAQ,iCAAgD;IAC/F,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAQ7B;CACF;;;;AAED;;;GAGG;AACH;;;;;;;GAOG;AACH,qBAAa,gCAAiC,SAAQ,sCAEpD;IACA,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAQ7B;CACF;;;;AAED,qBAAa,8BAA+B,SAAQ,oCAElD;IACA,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAM7B;CACF;AAED,MAAM,MAAM,UAAU,GAClB,MAAM,CAAC,4BAA4B,GACnC,MAAM,CAAC,+BAA+B,GACtC,MAAM,CAAC,4BAA4B,GACnC,MAAM,CAAC,sCAAsC,GAC7C,UAAU,GACV,QAAQ,GACR,wBAAwB,GACxB,8BAA8B,GAC9B,2BAA2B,GAC3B,iCAAiC,GACjC,6BAA6B,GAC7B,2BAA2B,GAC3B,gCAAgC,GAChC,8BAA8B,CAAC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Refusals, wire bodies, the read shape and the comparison for `LiteLLM.Model`, testable without
3
+ * a server. Credential handling is model-credential.ts's; the URL rules are mcp-server-url.ts's.
4
+ *
5
+ * ⛔ WHAT IS COMPARED, WITH ENCRYPTION IN MIND. LiteLLM stores `litellm_params` encrypted when the
6
+ * proxy runs with a database master key (`prisma_client.py`, `encrypt_value`, tag v1.103.0) and
7
+ * answers a row whose `litellm_params` are decrypted, with `api_key` stripped (measured at
8
+ * v1.103.0) — `/v2/model/info`'s docstring still says api keys and api_base are left out. So:
9
+ * - `model_name`, `model_info.id`, `mode`, `base_model` and `access_groups` are compared from
10
+ * the fields the read returns.
11
+ * - `model`, `api_base` and `api_key` are compared through a DIGEST of the DECLARED values
12
+ * (`declaredDigest`), carried in attributes as `paramsSeal`, never a digest of the live row.
13
+ * A plan therefore reports drift when the declaration changes and stays quiet when the proxy
14
+ * hides a field it was told before — the false-drift answer the encrypted row leaves no other
15
+ * way to. A field the proxy DOES return (`model`) is additionally compared when the read
16
+ * carries it; the seal is what decides when the read says nothing.
17
+ * ⛔ A LIVE `api_key` IS NEVER OVERWRITTEN BY AN ADOPTED ROW'S NOTHING. `apiKey` omitted on an
18
+ * adopted row sends no `api_key` and the live reference is kept; `differing` reports no drift
19
+ * for it. Declaring `apiKey` is what moves the row onto `os.environ/NAME`.
20
+ * ⛔ EVERYTHING AN EXISTING ROW NEEDS GOES TO ONE PATCH `/model/{model_id}/update`. At the tag
21
+ * the SDK was generated from (OpenAPI 1.103.0), POST `/model/update`'s `update_model` REBUILDS
22
+ * `litellm_params` from the parsed request model and REPLACES the column: a key the model does
23
+ * not declare (`extra_headers`, `weight`, `order`) is DELETED from the stored row, and a
24
+ * non-`None` pydantic default (`false` on the five flags in `LEAVE_ALONE_PARAMS`) overwrites
25
+ * it — measured on a throwaway 1.103.0 proxy, and the reason a params POST is never sent. The
26
+ * PATCH route's `update_db_model` instead MERGES: sent keys land, the rest of the row is
27
+ * preserved, and a JSON `null` keeps the stored value. So one PATCH carries the managed
28
+ * `litellm_params` (with `null` for those five flags), the `model_name` when it changed, and
29
+ * the `model_info` fields — `access_groups`, `mode`, `base_model`, and the row's own `id`, so
30
+ * an adopt-by-id re-affirms the row it pinned. `model_name` is sent only when it changed,
31
+ * because a same-name write would collide with another deployment in the group (model.ts).
32
+ */
33
+ import type * as models from '@distilled.cloud/litellm/model_management';
34
+ import { type ModelAttributes, type ModelProps } from './model-types.ts';
35
+ /** The first reason a declaration is refused, or `undefined`. Pure: no environment, no server. */
36
+ export declare const firstProblem: (props: ModelProps) => string | undefined;
37
+ /** The digest of the DECLARED values, for `paramsSeal`. Pure: no environment, no lookup. */
38
+ export declare const declaredDigest: (props: ModelProps) => string;
39
+ /**
40
+ * Wire names of the fields where the live row and the declaration disagree.
41
+ *
42
+ * `model` is compared only when the read carries it (an encrypted row omits it); the seal decides
43
+ * otherwise, and model.ts's diff turns a changed seal into an update. `model_name` mismatch on a
44
+ * pinned id is identity drift — replace in model.ts, update here only when the name changed and
45
+ * the id stayed.
46
+ */
47
+ export declare const differing: (live: ModelAttributes, props: ModelProps) => readonly string[];
48
+ /**
49
+ * One row of `/model/info`, as attributes. ⛔ Copies no `litellm_params` field but `model`, and
50
+ * only when the read returns an OBJECT: the fields a row hides (`api_key` is stripped at
51
+ * v1.103.0) are never mistaken for declared values — `api_base` and any `api_key` are never
52
+ * copied at all. `dbModel` records `model_info.db_model` (false = served from the proxy's config
53
+ * file), defaulting to true when the read omits it. The digest is the caller's (model.ts fills
54
+ * `paramsSeal` from state, a row cannot supply one).
55
+ */
56
+ export declare const toAttributes: (row: Record<string, unknown>) => ModelAttributes;
57
+ /** A create names the group and pins the id it asked for on `model_info` of the POST body. */
58
+ export declare const createBody: (props: ModelProps, modelId: string) => models.AddNewModelModelNewPostRequest;
59
+ /**
60
+ * PATCH `/model/{model_id}/update`: everything an existing row needs, in the ONE write a
61
+ * converge fires (model.ts). `update_db_model` MERGES (v1.103.0, measured), so:
62
+ * - `litellm_params` carries the managed keys (with `null` for the five non-`None` defaults
63
+ * this resource does not own); the merge keeps every stored key the declaration does not
64
+ * own (`extra_headers`, `weight`, `order`), which is exactly what POST `/model/update`
65
+ * would DELETE by rebuilding the column.
66
+ * - `model_info` carries `access_groups` (always present: an omitted list is "no groups" and
67
+ * must be able to clear), `mode` and `base_model` only when declared, and the row's own
68
+ * `id`, so an adopt-by-id re-affirms the row it pinned.
69
+ * - `model_name` only when it changed: a same-name write would collide with a sibling
70
+ * deployment in the group (model.ts). Not a seal stamp: a matching row records `paramsSeal`
71
+ * locally (model.ts).
72
+ *
73
+ * ⚠️ `Record`, then a widening cast, for the same reason as {@link modelInfoOf}: the generated
74
+ * 1.103.0 `LitellmTypesRouterModelInfo` declares neither `access_groups` nor `mode`, while the
75
+ * vendor model allows both (`extra="allow"`) and the read answers both.
76
+ */
77
+ export declare const patchBody: (props: ModelProps, live: ModelAttributes) => Record<string, unknown>;
78
+ //# sourceMappingURL=model-form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-form.d.ts","sourceRoot":"","sources":["../../src/litellm/model-form.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,KAAK,KAAK,MAAM,MAAM,2CAA2C,CAAC;AACzE,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,UAAU,EAGhB,MAAM,kBAAkB,CAAC;AAI1B,kGAAkG;AAClG,eAAO,MAAM,YAAY,UAAW,UAAU,KAAG,MAAM,GAAG,SA+BzD,CAAC;AAEF,4FAA4F;AAC5F,eAAO,MAAM,cAAc,UAAW,UAAU,KAAG,MAA+C,CAAC;AAKnG;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,SAAU,eAAe,SAAS,UAAU,KAAG,SAAS,MAAM,EAUnF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,QAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,eAoB3D,CAAC;AAqDF,8FAA8F;AAC9F,eAAO,MAAM,UAAU,UACd,UAAU,WACR,MAAM,KACd,MAAM,CAAC,8BAOT,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,SAAS,UAAW,UAAU,QAAQ,eAAe,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAQ1F,CAAC"}
@@ -0,0 +1,13 @@
1
+ import * as Effect from 'effect/Effect';
2
+ import { LitellmModelAmbiguousNameError } from './model-errors.ts';
3
+ import type { ModelAttributes, ModelProps } from './model-types.ts';
4
+ /**
5
+ * The live row among the LISTED ones, or `undefined`. A pinned id (from state, else declared) wins;
6
+ * otherwise the name decides, and an ambiguous name is refused.
7
+ */
8
+ export declare const locate: (rows: readonly ModelAttributes[], props: ModelProps, output: ModelAttributes | undefined) => Effect.Effect<never, LitellmModelAmbiguousNameError, never> | Effect.Effect<ModelAttributes | undefined, never, never>;
9
+ /** The id a create asks for: the recorded one, else the declared one, else a deterministic name. */
10
+ export declare const wantedId: (id: string, instanceId: string, props: ModelProps, output: ModelAttributes | undefined) => Effect.Effect<string, never, import("alchemy").InstanceId | import("alchemy").Stack | import("alchemy").Stage>;
11
+ /** The live row this declaration means, from the list, else from the table by the id it would use. */
12
+ export declare const findLive: (id: string, instanceId: string, props: ModelProps, output: ModelAttributes | undefined) => Effect.Effect<ModelAttributes | undefined, import("@distilled.cloud/caddy").BadRequest | LitellmModelAmbiguousNameError | import("./model-errors.ts").LitellmModelUnreadableError | import("@distilled.cloud/litellm/model_management").GetModelInfoV1ModelInfoError, import("alchemy").InstanceId | import("alchemy").Stack | import("alchemy").Stage | import("@distilled.cloud/litellm/Protocol").LitellmOpContext>;
13
+ //# sourceMappingURL=model-locate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-locate.d.ts","sourceRoot":"","sources":["../../src/litellm/model-locate.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,MAAM,SACX,SAAS,eAAe,EAAE,SACzB,UAAU,UACT,eAAe,GAAG,SAAS,2HAapC,CAAC;AAEF,oGAAoG;AACpG,eAAO,MAAM,QAAQ,OACf,MAAM,cACE,MAAM,SACX,UAAU,UACT,eAAe,GAAG,SAAS,mHAMyC,CAAC;AAE/E,sGAAsG;AACtG,eAAO,MAAM,QAAQ,OACf,MAAM,cACE,MAAM,SACX,UAAU,UACT,eAAe,GAAG,SAAS,2ZAMjC,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * The five LiteLLM `/model/*` calls `LiteLLM.Model` uses, through the SDK's typed operations in
3
+ * `@distilled.cloud/litellm/model_management` (LiteLLM 1.103.0; names verified in the generated
4
+ * source, never guessed):
5
+ *
6
+ * list `getModelInfoV1ModelInfo` GET /model/info
7
+ * read `getModelInfoV1ModelInfo` GET /model/info?litellm_model_id={id}
8
+ * create `addNewModelModelNewPost` POST /model/new
9
+ * patch `patchModelModelModelIdUpdatePatch` PATCH /model/{model_id}/update
10
+ * delete `deleteModelModelDeletePost` POST /model/delete
11
+ *
12
+ * The SDK is generated from LiteLLM OpenAPI **1.103.0** (`model_management.ts`'s header). At that
13
+ * tag, and at v1.100.0, `model_info_v1` raises HTTP 400 when the router has no such deployment
14
+ * (`proxy_server.py`, "Model id = … not found on litellm proxy"), not 404. The same 400 is also
15
+ * "no rights" or a bad filter. The PATCH route's `update_db_model` MERGES: `litellm_params`,
16
+ * `model_name` and `model_info` (`access_groups`, `mode`, `base_model`) all land without
17
+ * rebuilding the column, which is the one write `LiteLLM.Model` converges with (model-form.ts).
18
+ * POST `/model/update` REBUILDS `litellm_params` and deletes stored keys the request model does
19
+ * not declare, so this resource never sends it.
20
+ *
21
+ * ⛔ LIST-FIRST READS. One GET of the whole list answers a group, an id and absence unambiguously,
22
+ * the way `budget-operations.ts` reads. The by-id read is the same route with the
23
+ * `litellm_model_id` filter, used only where the list cannot decide (a write-back on a row the
24
+ * list may not show yet).
25
+ * ⛔ NO MESSAGE SNIFFING (S21). The by-id read's 400 is undeclared on the generated operation, so
26
+ * it decodes at run time as the shared `BadRequest` (`HTTP_STATUS_MAP`). `catchTag` matches the
27
+ * tag — the same match `deleteModel` uses — so a later declared class with that tag is still
28
+ * seen. A 400 is absence only when a re-list also lacks the id. A 404 is the same absence.
29
+ * Any other failure propagates.
30
+ * ⛔ THE ROW'S PARAMS ARE NEVER READ INTO STATE: `toAttributes` (model-form.ts) copies `model`
31
+ * only when `litellm_params` is an object, and never `api_base` or `api_key` — the v1.103.0
32
+ * read answers params DECRYPTED but STRIPS `api_key` (measured). What was declared is
33
+ * remembered as a digest instead.
34
+ * ⚠️ Unlike pass-through endpoints, each deployment is its own DB row: no semaphore.
35
+ */
36
+ import * as models from '@distilled.cloud/litellm/model_management';
37
+ import type { BadRequest } from '@distilled.cloud/litellm/Errors';
38
+ import * as Effect from 'effect/Effect';
39
+ import { type LitellmOpContext } from './operations.ts';
40
+ import type { ModelAttributes } from './model-types.ts';
41
+ import { LitellmModelUnreadableError } from './model-errors.ts';
42
+ /** Every deployment row, config-file ones included. This is the read that locates and diffs. */
43
+ export declare const listModels: () => Effect.Effect<readonly ModelAttributes[], models.GetModelInfoV1ModelInfoError | LitellmModelUnreadableError, LitellmOpContext>;
44
+ export declare const readModelRow: (modelId: string) => Effect.Effect<ModelAttributes | undefined, BadRequest | LitellmModelUnreadableError | models.GetModelInfoV1ModelInfoError, LitellmOpContext>;
45
+ /** POST /model/new. The answer carries no usable row (the fake answers `{}`), so the id asked for is the one tracked. */
46
+ export declare const createModel: (body: models.AddNewModelModelNewPostRequest) => Effect.Effect<void, models.AddNewModelModelNewPostError, import("@distilled.cloud/litellm/Credentials").Credentials>;
47
+ /**
48
+ * PATCH `/model/{model_id}/update`. The ONE write a converge of an existing row fires: its merge
49
+ * carries `litellm_params`, `model_name` and `model_info` together (model-form.ts).
50
+ */
51
+ export declare const patchModel: (body: Record<string, unknown>) => Effect.Effect<void, models.PatchModelModelModelIdUpdatePatchError, import("@distilled.cloud/litellm/Credentials").Credentials>;
52
+ /**
53
+ * Idempotent BY THIS FUNCTION, not by the vendor. A `BadRequest` re-lists and is swallowed only
54
+ * when the id is genuinely absent — the same delete can also be refused for lack of rights or a
55
+ * disconnected DB, which leaves the row live and must never be reported as done
56
+ * (budget-operations.ts's rule; never the message text, S21).
57
+ */
58
+ export declare const deleteModel: (modelId: string) => Effect.Effect<void, import("@distilled.cloud/caddy").BadGateway | models.BadRequest | import("@distilled.cloud/caddy").ConfigError | import("@distilled.cloud/caddy").GatewayTimeout | import("effect/unstable/http/HttpClientError").HttpClientError | import("@distilled.cloud/caddy").InternalServerError | LitellmModelUnreadableError | import("@distilled.cloud/litellm/Errors").LitellmParseError | import("@distilled.cloud/caddy").ServiceUnavailable | import("@distilled.cloud/caddy").TooManyRequests | import("@distilled.cloud/caddy").Unauthorized | import("@distilled.cloud/litellm/Errors").UnknownLitellmError | models.UnprocessableEntity, LitellmOpContext>;
59
+ //# sourceMappingURL=model-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-operations.d.ts","sourceRoot":"","sources":["../../src/litellm/model-operations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,KAAK,MAAM,MAAM,2CAA2C,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,iCAAiC,CAAC;AAC5E,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,KAAK,gBAAgB,EAAgB,MAAM,iBAAiB,CAAC;AAEtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAmChE,gGAAgG;AAChG,eAAO,MAAM,UAAU,QAAO,MAAM,CAAC,MAAM,CACzC,SAAS,eAAe,EAAE,EAC1B,MAAM,CAAC,4BAA4B,GAAG,2BAA2B,EACjE,gBAAgB,CACgE,CAAC;AAenF,eAAO,MAAM,YAAY,YAAa,MAAM,iJAgBzC,CAAC;AAEJ,yHAAyH;AACzH,eAAO,MAAM,WAAW,SAAU,MAAM,CAAC,8BAA8B,yHACC,CAAC;AAEzE;;;GAGG;AACH,eAAO,MAAM,UAAU,SAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,mIAKjC,CAAC;AAExB;;;;;GAKG;AACH,eAAO,MAAM,WAAW,YAAa,MAAM,spBAUxC,CAAC"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * What a `LiteLLM.Model` declares (props) and what is remembered about it (attributes).
3
+ *
4
+ * ⛔ NO CREDENTIAL VALUE IS A PROP OR AN ATTRIBUTE (S25). Alchemy persists props AND attributes
5
+ * unencrypted (`StateEncoding.ts` writes a `Redacted` value's inner string beside its tag,
6
+ * measured on alchemy 2.0.0-beta.79), so `apiKey` is `{ fromEnv: 'NAME' }`: the NAME is stored,
7
+ * the value lives only in the deploying process and on the wire, and it is sent in LiteLLM's own
8
+ * reference form `os.environ/NAME` — so the PROXY reads it from ITS environment at call time and
9
+ * the proxy's own DB row never carries a literal either. A `Redacted` prop would still land in
10
+ * state as plaintext (mcp-server-types.ts's reasoning, same store).
11
+ * ⛔ THE LIVE ROW'S `litellm_params` ARE NEVER MIRRORED INTO ATTRIBUTES. At v1.103.0 the read
12
+ * answers the stored params DECRYPTED but STRIPS `api_key` (measured on a live 1.103.0 proxy),
13
+ * and anything mirrored would land in state as plaintext — Alchemy persists attributes
14
+ * unencrypted. So a read compares only the visible fields the proxy returns, and this
15
+ * resource's own attributes carry a DIGEST of the DECLARED values (`paramsSeal`), never the
16
+ * values: that is how a plan notices a declared credential moved when the read cannot show it.
17
+ * ⚠️ NOT MODELLED, on purpose: the rest of `litellm_params` (rpm/tpm, timeouts, fallbacks,
18
+ * wildcard routing params, `mock_response`, vertex/aws credential blobs, …), cost fields on
19
+ * `model_info` beyond what the read returns, `teams`, and the config-file-only rows
20
+ * (`db_model: false`) — a reconcile that finds one REFUSES it (model-errors.ts): the DB
21
+ * API cannot manage what the proxy serves from its config file.
22
+ */
23
+ import type { FromEnv } from '../secrets/write-only.ts';
24
+ /**
25
+ * The LiteLLM-SDK path of the deployment: a provider prefix, then the upstream model, such as
26
+ * `xai/grok-4.7` or `cloudflare/@cf/meta/llama-3.1-8b-instruct`. Required: LiteLLM needs it to
27
+ * pick the provider handler, and an unprefixed name is ambiguous.
28
+ */
29
+ export type ModelLiteLLMPath = string;
30
+ export interface ModelProps {
31
+ /**
32
+ * The group name callers use (`/chat/completions` `model: …`), one group = one or more
33
+ * deployments. This is also how an existing row is ADOPTED: the live row whose `model_name`
34
+ * equals it. ⛔ Renaming a group changes nothing upstream — LiteLLM keys deployments by id —
35
+ * so a changed `modelName` with no pinned `id` is a REPLACE: the new group gets a fresh id, and
36
+ * the old row survives under the default `RemovalPolicy.retain()` (opt in to `destroy()` to
37
+ * delete it). A pinned `id` is that row: the same deployment is renamed in place
38
+ * (`patchBody` sends `model_name`), and keys routing to the old name miss.
39
+ */
40
+ readonly modelName: string;
41
+ /**
42
+ * Pins the live row (adopts by id) or chooses the id a create asks for. Without it, a live row
43
+ * is found by `modelName` and a new one gets a deterministic physical name. A group name is
44
+ * shared by several deployments on a live proxy: one id selects exactly one.
45
+ */
46
+ readonly id?: string;
47
+ /** The LiteLLM-SDK path, provider prefix included (`xai/grok-4.7`, `cloudflare/@cf/...`). */
48
+ readonly model: string;
49
+ /**
50
+ * The upstream base URL, when the deployment needs one. ⛔ Refused if it carries userinfo, a
51
+ * fragment or a secret-looking query parameter (`?token=…`): the URL is a prop, so it lands in
52
+ * state. Declare the credential as `apiKey` instead.
53
+ */
54
+ readonly apiBase?: string;
55
+ /**
56
+ * The upstream credential, by the NAME of the environment variable that holds it — sent to the
57
+ * proxy as LiteLLM's own reference form `os.environ/NAME`, never a literal value. Omitted
58
+ * leaves the live credential exactly as the proxy holds it (an adopted row is never blanked).
59
+ */
60
+ readonly apiKey?: FromEnv;
61
+ /** The deployment's capabilities, `mode` in LiteLLM's model_info — `chat`, `embedding`, …. */
62
+ readonly mode?: string;
63
+ /** The upstream model this one masquerades as, for cost/prompt mapping. */
64
+ readonly baseModel?: string;
65
+ /** Access groups this deployment belongs to. Always compared (as a set), default empty. */
66
+ readonly accessGroups?: readonly string[];
67
+ }
68
+ export interface ModelAttributes {
69
+ readonly id: string;
70
+ readonly modelName: string;
71
+ /** Whether the row is served from the database (`model_info.db_model`); false = config-file row. */
72
+ readonly dbModel: boolean;
73
+ /** The provider-prefixed path as the live row carries it (null when the read omits it). */
74
+ readonly model: string | null;
75
+ readonly mode: string | null;
76
+ readonly baseModel: string | null;
77
+ readonly accessGroups: readonly string[];
78
+ /**
79
+ * Digest of the DECLARED params this write would send (`scrypt:<salt>:<digest>`), or `''`.
80
+ * ⛔ Never the values, never a digest of the LIVE row. This is how a plan notices that the
81
+ * environment variable behind `apiKey` rotated: the read strips `api_key`, so the seal is the
82
+ * only signal a declared credential moved (model-form.ts's `declaredDigest`).
83
+ */
84
+ readonly paramsSeal: string;
85
+ }
86
+ /** Whether a value is not a string with something in it. Takes `unknown`: a declaration can say anything. */
87
+ export declare const isBlank: (value: unknown) => boolean;
88
+ export declare const MODES: readonly string[];
89
+ /** Whether `model` carries a provider prefix, LiteLLM's `litellm.utils.get_llm_provider` rule. */
90
+ export declare const hasProviderPrefix: (model: string) => boolean;
91
+ //# sourceMappingURL=model-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-types.d.ts","sourceRoot":"","sources":["../../src/litellm/model-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAExD;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,UAAU;IACzB;;;;;;;;OAQG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,6FAA6F;IAC7F,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,8FAA8F;IAC9F,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,2FAA2F;IAC3F,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,oGAAoG;IACpG,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,2FAA2F;IAC3F,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,6GAA6G;AAC7G,eAAO,MAAM,OAAO,UAAW,OAAO,KAAG,OACS,CAAC;AAEnD,eAAO,MAAM,KAAK,EAAE,SAAS,MAAM,EAelC,CAAC;AAEF,kGAAkG;AAClG,eAAO,MAAM,iBAAiB,UAAW,MAAM,KAAG,OAAwC,CAAC"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * `LiteLLM.Model` — one deployment row of LiteLLM's model registry (`/model/info`), an upstream
3
+ * model the proxy's router serves under a group name. A group name can carry SEVERAL deployments
4
+ * (that is LiteLLM's load balancing); this resource owns exactly one row.
5
+ *
6
+ * ★ ADOPT BY NAME. `modelName` finds the live row whose group name matches; declare `id` to pin one
7
+ * instead. A live row with no state is `Unowned`, so it needs `--adopt`. A name matching more
8
+ * than one listed row is refused, never guessed at (`LitellmModelAmbiguousNameError`).
9
+ * ★ `defaultRemovalPolicy: 'retain'` — a deployment's removal takes it out of its routing group for
10
+ * every key that reaches it. Opt in with `.pipe(RemovalPolicy.destroy())`.
11
+ * ⛔ THE CREDENTIAL IS `{ fromEnv: 'NAME' }`, NEVER A VALUE (S25): it is sent in LiteLLM's own
12
+ * reference form `os.environ/NAME` and the proxy resolves it in its own environment — nothing
13
+ * here reads `process.env` (model-credential.ts), so a value could never be sealed truthfully.
14
+ * A row's stored params come back DECRYPTED at v1.103.0 but with `api_key` STRIPPED (measured),
15
+ * so a plan compares the visible fields plus a digest of the DECLARED values (`paramsSeal`) —
16
+ * never the values themselves, which belong in the proxy's DB only (model-form.ts).
17
+ * ⚠️ A RENAME IS A NEW GROUP when the id is not pinned: the old row survives under 'retain', the
18
+ * new group gets a fresh deterministic id. With a pinned id the SAME row is renamed — the caller
19
+ * chose the row (model-types.ts).
20
+ * ⚠️ UNMEASURED AT 1.103.0, guarded by a read back: whether `/model/new` honours a supplied
21
+ * `model_info.id`. The answer is an untyped body, so the id ASKED FOR is the one tracked
22
+ * (model-operations.ts); a proxy that issued its own id fails loudly
23
+ * (`LitellmModelAbsentAfterWriteError`) instead of recording a row it cannot identify.
24
+ */
25
+ import { Resource } from 'alchemy';
26
+ import type { Input } from 'alchemy/Input';
27
+ import * as Provider from 'alchemy/Provider';
28
+ import * as Effect from 'effect/Effect';
29
+ import { LitellmModelAbsentAfterWriteError, LitellmModelConfigFileRowError, LitellmModelInvalidError, LitellmModelNotConvergedError } from './model-errors.ts';
30
+ import type { ModelAttributes, ModelProps } from './model-types.ts';
31
+ export type { ModelAttributes, ModelProps };
32
+ export type { ModelError } from './model-errors.ts';
33
+ export interface LiteLLMModel extends Resource<'LiteLLM.Model', ModelProps, ModelAttributes> {
34
+ }
35
+ export declare const LiteLLMModel: import("alchemy").ResourceClass<LiteLLMModel>;
36
+ export declare const isLiteLLMModel: (value: unknown) => value is LiteLLMModel;
37
+ type Args<P> = {
38
+ fqn: string;
39
+ id: string;
40
+ instanceId: string;
41
+ output: ModelAttributes | undefined;
42
+ } & P;
43
+ /** ⛔ TEST-ONLY EXPORT. Not on index.ts's barrel. */
44
+ export declare const modelHandlers: {
45
+ /**
46
+ * ⛔ WITH NO `output` THIS IS ALCHEMY'S ADOPTION PROBE, AND THE ONLY PLAN-TIME HOOK A NEW MODEL
47
+ * GETS — so the refusals run here too, as a defect (mcp-server.ts: the cold-start probe must
48
+ * fail the plan, and a recovery read must degrade to "nothing recovered", which only a defect
49
+ * does). The v1.103.0 read answers params decrypted with `api_key` stripped, so this refusal
50
+ * is the declaration's (`firstProblem`), before Apply commits props into unencrypted state.
51
+ */
52
+ read: ({ id, instanceId, olds, output }: Args<{
53
+ olds: ModelProps;
54
+ }>) => Effect.Effect<ModelAttributes | undefined, import("@distilled.cloud/caddy").BadRequest | import("./model-errors.ts").LitellmModelAmbiguousNameError | import("./model-errors.ts").LitellmModelUnreadableError | import("@distilled.cloud/litellm/model_management").GetModelInfoV1ModelInfoError, import("alchemy").InstanceId | import("alchemy").Stack | import("alchemy").Stage | import("@distilled.cloud/litellm/Protocol").LitellmOpContext>;
55
+ diff: ({ instanceId, news, output, }: {
56
+ instanceId: string;
57
+ news: Input<ModelProps>;
58
+ output: ModelAttributes | undefined;
59
+ }) => Effect.Effect<{
60
+ readonly action: 'replace';
61
+ readonly deleteFirst: false;
62
+ } | {
63
+ readonly deleteFirst?: never;
64
+ readonly action: 'noop';
65
+ } | {
66
+ readonly deleteFirst?: never;
67
+ readonly action: 'update';
68
+ } | undefined, LitellmModelInvalidError, never>;
69
+ reconcile: ({ fqn, id, instanceId, news, output }: Args<{
70
+ news: ModelProps;
71
+ }>) => Effect.Effect<{
72
+ id: string;
73
+ modelName: string;
74
+ dbModel: boolean;
75
+ model: string | null;
76
+ mode: string | null;
77
+ baseModel: string | null;
78
+ accessGroups: readonly string[];
79
+ paramsSeal: string;
80
+ }, import("@distilled.cloud/caddy").BadGateway | import("@distilled.cloud/caddy").BadRequest | import("@distilled.cloud/caddy").ConfigError | import("@distilled.cloud/caddy").GatewayTimeout | import("effect/unstable/http/HttpClientError").HttpClientError | import("@distilled.cloud/caddy").InternalServerError | LitellmModelAbsentAfterWriteError | import("./model-errors.ts").LitellmModelAmbiguousNameError | LitellmModelConfigFileRowError | import("./model-errors.ts").LitellmModelForeignRowError | LitellmModelInvalidError | LitellmModelNotConvergedError | import("./model-errors.ts").LitellmModelPriorGenerationError | import("./model-errors.ts").LitellmModelUnreadableError | import("@distilled.cloud/litellm/Errors").LitellmParseError | import("@distilled.cloud/caddy").ServiceUnavailable | import("@distilled.cloud/caddy").TooManyRequests | import("@distilled.cloud/caddy").Unauthorized | import("@distilled.cloud/litellm/Errors").UnknownLitellmError | import("@distilled.cloud/litellm/model_management").UnprocessableEntity, import("alchemy").InstanceId | import("alchemy").Stack | import("alchemy").Stage | import("@distilled.cloud/litellm/Protocol").LitellmOpContext>;
81
+ delete: ({ output }: {
82
+ output: ModelAttributes;
83
+ }) => Effect.Effect<void, import("@distilled.cloud/caddy").BadGateway | import("@distilled.cloud/litellm/model_management").BadRequest | import("@distilled.cloud/caddy").ConfigError | import("@distilled.cloud/caddy").GatewayTimeout | import("effect/unstable/http/HttpClientError").HttpClientError | import("@distilled.cloud/caddy").InternalServerError | import("./model-errors.ts").LitellmModelUnreadableError | import("@distilled.cloud/litellm/Errors").LitellmParseError | import("@distilled.cloud/caddy").ServiceUnavailable | import("@distilled.cloud/caddy").TooManyRequests | import("@distilled.cloud/caddy").Unauthorized | import("@distilled.cloud/litellm/Errors").UnknownLitellmError | import("@distilled.cloud/litellm/model_management").UnprocessableEntity, import("@distilled.cloud/litellm/Protocol").LitellmOpContext>;
84
+ /** ⛔ EMPTY: adoption is an explicit act (`--adopt`), and no ownership mark exists to filter by. */
85
+ list: () => Effect.Effect<never[], never, never>;
86
+ };
87
+ export declare const LiteLLMModelProvider: () => import("effect/Layer").Layer<Provider.Provider<LiteLLMModel>, never, import("alchemy").Stack | import("alchemy").Stage | import("@distilled.cloud/litellm/Protocol").LitellmOpContext>;
88
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/litellm/model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,EACL,iCAAiC,EACjC,8BAA8B,EAC9B,wBAAwB,EACxB,6BAA6B,EAC9B,MAAM,mBAAmB,CAAC;AAY3B,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEpE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,WAAW,YAAa,SAAQ,QAAQ,CAAC,eAAe,EAAE,UAAU,EAAE,eAAe,CAAC;CAAG;AAE/F,eAAO,MAAM,YAAY,+CAEvB,CAAC;AAEH,eAAO,MAAM,cAAc,UAAW,OAAO,KAAG,KAAK,IAAI,YACe,CAAC;AASzE,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;CACrC,GAAG,CAAC,CAAC;AAEN,oDAAoD;AACpD,eAAO,MAAM,aAAa;IACxB;;;;;;OAMG;IACH,IAAI,qCAAqC,IAAI,CAAC;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC;IA4BnE,IAAI,kCAID;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACxB,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;KACrC;yBASsB,SAAS;;;;yBAYb,MAAM;;;yBACN,QAAQ;;IAG3B,SAAS,0CAA0C,IAAI,CAAC;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC;;;;;;;;;;IAiF7E,MAAM,eAAe;QAAE,MAAM,EAAE,eAAe,CAAA;KAAE;IAEhD,mGAAmG;IACnG,IAAI;CACL,CAAC;AAEF,eAAO,MAAM,oBAAoB,8LACuD,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Wire bodies, comparison and refusals for `LiteLLM.PolicyAttachment`, testable without a server.
3
+ *
4
+ * ★ TWO ATTACHMENTS ARE "THE SAME" WHEN EVERY FIELD IS: the policy, the scope, the four selector SETS
5
+ * and the priority. That is the only identity an attachment has (policy-attachment-types.ts), and
6
+ * it is what adoption and the read back both use.
7
+ */
8
+ import type * as policies from '@distilled.cloud/litellm/policy_engine';
9
+ import type { PolicyAttachmentAttributes, PolicyAttachmentProps } from './policy-attachment-types.ts';
10
+ /** The first reason a declaration is refused, or `undefined`. Runs before any request. */
11
+ export declare const firstProblem: (props: PolicyAttachmentProps) => string | undefined;
12
+ /** One attachment row. `undefined` is "not an attachment", and so is a config-file one. */
13
+ export declare const toAttributes: (value: unknown) => PolicyAttachmentAttributes | undefined;
14
+ /** Whether a live row is defined in config.yaml (its synthetic id is `config-<n>`): out of reach of the API. */
15
+ export declare const isConfigRow: (value: unknown) => boolean;
16
+ /** Wire names of the fields where live and declared disagree. Empty means "the same attachment". */
17
+ export declare const differing: (live: PolicyAttachmentAttributes, props: PolicyAttachmentProps) => readonly string[];
18
+ export declare const createBody: (props: PolicyAttachmentProps) => policies.CreatePolicyAttachmentPoliciesAttachmentsPostRequest;
19
+ //# sourceMappingURL=policy-attachment-form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-attachment-form.d.ts","sourceRoot":"","sources":["../../src/litellm/policy-attachment-form.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,KAAK,QAAQ,MAAM,wCAAwC,CAAC;AAYxE,OAAO,KAAK,EACV,0BAA0B,EAC1B,qBAAqB,EACtB,MAAM,8BAA8B,CAAC;AAItC,0FAA0F;AAC1F,eAAO,MAAM,YAAY,UAAW,qBAAqB,KAAG,MAAM,GAAG,SA2BpE,CAAC;AAEF,2FAA2F;AAC3F,eAAO,MAAM,YAAY,UAAW,OAAO,KAAG,0BAA0B,GAAG,SAgB1E,CAAC;AAEF,gHAAgH;AAChH,eAAO,MAAM,WAAW,UAAW,OAAO,KAAG,OACO,CAAC;AAErD,oGAAoG;AACpG,eAAO,MAAM,SAAS,SACd,0BAA0B,SACzB,qBAAqB,KAC3B,SAAS,MAAM,EAOjB,CAAC;AAEF,eAAO,MAAM,UAAU,UACd,qBAAqB,KAC3B,QAAQ,CAAC,oDAQV,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * The three LiteLLM `/policies/attachments*` calls `LiteLLM.PolicyAttachment` uses, through the SDK's
3
+ * typed operations in `@distilled.cloud/litellm/policy_engine` (LiteLLM 1.103.0):
4
+ *
5
+ * list `listPolicyAttachmentsPoliciesAttachmentsListGet` GET /policies/attachments/list
6
+ * create `createPolicyAttachmentPoliciesAttachmentsPost` POST /policies/attachments
7
+ * delete `deletePolicyAttachmentPoliciesAttachmentsAttachmentIdDelete` DELETE /policies/attachments/{id}
8
+ *
9
+ * ★ THERE IS NO UPDATE OPERATION, because the API has none (policy-attachment-types.ts). The by-id
10
+ * `GET` is not used either: the list carries every field and answers absence without a 404.
11
+ * ★ THE LIST MERGES IN CONFIG-FILE ATTACHMENTS (`definition_location: "config"`, ids `config-<n>`),
12
+ * which the API cannot delete. `listAttachments` returns database rows only.
13
+ * ⚠️ MOST FAILURES ARE A PLAIN 500 (`policy_endpoints.py` wraps everything in `except Exception` and
14
+ * answers `HTTPException(500, detail=str(e))`), and the SDK retries 5xx with backoff. The two
15
+ * answers that are not: a policy with no production version is a 404, and a concrete team, key or model
16
+ * selector that resolves to nothing is a 400 (`PolicyValidator.find_invalid_scope_entries`), so a
17
+ * `teams` entry must exist BEFORE its attachment: declare it as `team.teamAlias`. Wildcard patterns
18
+ * are let through, and may match nothing today.
19
+ * ★ DELETE IS IDEMPOTENT BY A REAL READ: a failed DELETE (a missing id is a 404) is swallowed only when
20
+ * the list no longer has the id; otherwise the ORIGINAL error is re-raised.
21
+ */
22
+ import * as policies from '@distilled.cloud/litellm/policy_engine';
23
+ import * as Effect from 'effect/Effect';
24
+ import type { PolicyAttachmentAttributes } from './policy-attachment-types.ts';
25
+ import { LitellmRegistryUnreadableError } from './registry-errors.ts';
26
+ /** Every DATABASE attachment. Config-file ones are dropped here, once. */
27
+ export declare const listAttachments: () => Effect.Effect<readonly PolicyAttachmentAttributes[], LitellmRegistryUnreadableError | policies.LitellmOpError, import("@distilled.cloud/litellm/Credentials").Credentials>;
28
+ /** The created row, which carries the id LiteLLM issued. `undefined` when the answer is not one. */
29
+ export declare const createAttachment: (body: policies.CreatePolicyAttachmentPoliciesAttachmentsPostRequest) => Effect.Effect<PolicyAttachmentAttributes | undefined, policies.CreatePolicyAttachmentPoliciesAttachmentsPostError, import("@distilled.cloud/litellm/Credentials").Credentials>;
30
+ export declare const deleteAttachment: (attachmentId: string) => Effect.Effect<void, policies.DeletePolicyAttachmentPoliciesAttachmentsAttachmentIdDeleteError, import("@distilled.cloud/litellm/Credentials").Credentials>;
31
+ //# sourceMappingURL=policy-attachment-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-attachment-operations.d.ts","sourceRoot":"","sources":["../../src/litellm/policy-attachment-operations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,QAAQ,MAAM,wCAAwC,CAAC;AACnE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAQtE,0EAA0E;AAC1E,eAAO,MAAM,eAAe,kLAWzB,CAAC;AAEJ,oGAAoG;AACpG,eAAO,MAAM,gBAAgB,SACrB,QAAQ,CAAC,oDAAoD,mLAIlE,CAAC;AAEJ,eAAO,MAAM,gBAAgB,iBAAkB,MAAM,+JAiBlD,CAAC"}