@shipfox/api-agent 2.0.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 (274) hide show
  1. package/.turbo/turbo-build.log +2 -0
  2. package/.turbo/turbo-type$colon$emit.log +1 -0
  3. package/.turbo/turbo-type.log +1 -0
  4. package/CHANGELOG.md +105 -0
  5. package/LICENSE +21 -0
  6. package/dist/config.d.ts +13 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +60 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/core/credential-fingerprints.d.ts +10 -0
  11. package/dist/core/credential-fingerprints.d.ts.map +1 -0
  12. package/dist/core/credential-fingerprints.js +65 -0
  13. package/dist/core/credential-fingerprints.js.map +1 -0
  14. package/dist/core/custom-model-provider-config-service.d.ts +26 -0
  15. package/dist/core/custom-model-provider-config-service.d.ts.map +1 -0
  16. package/dist/core/custom-model-provider-config-service.js +390 -0
  17. package/dist/core/custom-model-provider-config-service.js.map +1 -0
  18. package/dist/core/custom-provider-url.d.ts +4 -0
  19. package/dist/core/custom-provider-url.d.ts.map +1 -0
  20. package/dist/core/custom-provider-url.js +23 -0
  21. package/dist/core/custom-provider-url.js.map +1 -0
  22. package/dist/core/discover-custom-model-provider-models.d.ts +3 -0
  23. package/dist/core/discover-custom-model-provider-models.d.ts.map +1 -0
  24. package/dist/core/discover-custom-model-provider-models.js +122 -0
  25. package/dist/core/discover-custom-model-provider-models.js.map +1 -0
  26. package/dist/core/entities/agent-workspace-settings.d.ts +9 -0
  27. package/dist/core/entities/agent-workspace-settings.d.ts.map +1 -0
  28. package/dist/core/entities/agent-workspace-settings.js +3 -0
  29. package/dist/core/entities/agent-workspace-settings.js.map +1 -0
  30. package/dist/core/entities/model-provider-config.d.ts +19 -0
  31. package/dist/core/entities/model-provider-config.d.ts.map +1 -0
  32. package/dist/core/entities/model-provider-config.js +3 -0
  33. package/dist/core/entities/model-provider-config.js.map +1 -0
  34. package/dist/core/errors.d.ts +62 -0
  35. package/dist/core/errors.d.ts.map +1 -0
  36. package/dist/core/errors.js +80 -0
  37. package/dist/core/errors.js.map +1 -0
  38. package/dist/core/harness/claude.d.ts +6 -0
  39. package/dist/core/harness/claude.d.ts.map +1 -0
  40. package/dist/core/harness/claude.js +104 -0
  41. package/dist/core/harness/claude.js.map +1 -0
  42. package/dist/core/harness/index.d.ts +4 -0
  43. package/dist/core/harness/index.d.ts.map +1 -0
  44. package/dist/core/harness/index.js +5 -0
  45. package/dist/core/harness/index.js.map +1 -0
  46. package/dist/core/harness/pi.d.ts +6 -0
  47. package/dist/core/harness/pi.d.ts.map +1 -0
  48. package/dist/core/harness/pi.js +16 -0
  49. package/dist/core/harness/pi.js.map +1 -0
  50. package/dist/core/harness/registry.d.ts +22 -0
  51. package/dist/core/harness/registry.d.ts.map +1 -0
  52. package/dist/core/harness/registry.js +46 -0
  53. package/dist/core/harness/registry.js.map +1 -0
  54. package/dist/core/index.d.ts +12 -0
  55. package/dist/core/index.d.ts.map +1 -0
  56. package/dist/core/index.js +11 -0
  57. package/dist/core/index.js.map +1 -0
  58. package/dist/core/model-provider-catalog.d.ts +3 -0
  59. package/dist/core/model-provider-catalog.d.ts.map +1 -0
  60. package/dist/core/model-provider-catalog.js +25 -0
  61. package/dist/core/model-provider-catalog.js.map +1 -0
  62. package/dist/core/model-provider-config-service.d.ts +32 -0
  63. package/dist/core/model-provider-config-service.d.ts.map +1 -0
  64. package/dist/core/model-provider-config-service.js +133 -0
  65. package/dist/core/model-provider-config-service.js.map +1 -0
  66. package/dist/core/model-provider-validation.d.ts +31 -0
  67. package/dist/core/model-provider-validation.d.ts.map +1 -0
  68. package/dist/core/model-provider-validation.js +220 -0
  69. package/dist/core/model-provider-validation.js.map +1 -0
  70. package/dist/core/resolve-agent-config.d.ts +32 -0
  71. package/dist/core/resolve-agent-config.d.ts.map +1 -0
  72. package/dist/core/resolve-agent-config.js +143 -0
  73. package/dist/core/resolve-agent-config.js.map +1 -0
  74. package/dist/core/resolve-runtime-credentials.d.ts +21 -0
  75. package/dist/core/resolve-runtime-credentials.d.ts.map +1 -0
  76. package/dist/core/resolve-runtime-credentials.js +101 -0
  77. package/dist/core/resolve-runtime-credentials.js.map +1 -0
  78. package/dist/core/workspace-agent-defaults-resolver.d.ts +3 -0
  79. package/dist/core/workspace-agent-defaults-resolver.d.ts.map +1 -0
  80. package/dist/core/workspace-agent-defaults-resolver.js +26 -0
  81. package/dist/core/workspace-agent-defaults-resolver.js.map +1 -0
  82. package/dist/db/agent-defaults-snapshot.d.ts +9 -0
  83. package/dist/db/agent-defaults-snapshot.d.ts.map +1 -0
  84. package/dist/db/agent-defaults-snapshot.js +24 -0
  85. package/dist/db/agent-defaults-snapshot.js.map +1 -0
  86. package/dist/db/agent-workspace-settings.d.ts +12 -0
  87. package/dist/db/agent-workspace-settings.d.ts.map +1 -0
  88. package/dist/db/agent-workspace-settings.js +53 -0
  89. package/dist/db/agent-workspace-settings.js.map +1 -0
  90. package/dist/db/db.d.ts +771 -0
  91. package/dist/db/db.d.ts.map +1 -0
  92. package/dist/db/db.js +20 -0
  93. package/dist/db/db.js.map +1 -0
  94. package/dist/db/index.d.ts +9 -0
  95. package/dist/db/index.d.ts.map +1 -0
  96. package/dist/db/index.js +11 -0
  97. package/dist/db/index.js.map +1 -0
  98. package/dist/db/model-provider-configs.d.ts +38 -0
  99. package/dist/db/model-provider-configs.d.ts.map +1 -0
  100. package/dist/db/model-provider-configs.js +159 -0
  101. package/dist/db/model-provider-configs.js.map +1 -0
  102. package/dist/db/schema/agent-workspace-settings.d.ts +97 -0
  103. package/dist/db/schema/agent-workspace-settings.d.ts.map +1 -0
  104. package/dist/db/schema/agent-workspace-settings.js +26 -0
  105. package/dist/db/schema/agent-workspace-settings.js.map +1 -0
  106. package/dist/db/schema/common.d.ts +2 -0
  107. package/dist/db/schema/common.d.ts.map +1 -0
  108. package/dist/db/schema/common.js +4 -0
  109. package/dist/db/schema/common.js.map +1 -0
  110. package/dist/db/schema/model-provider-configs.d.ts +296 -0
  111. package/dist/db/schema/model-provider-configs.d.ts.map +1 -0
  112. package/dist/db/schema/model-provider-configs.js +52 -0
  113. package/dist/db/schema/model-provider-configs.js.map +1 -0
  114. package/dist/index.d.ts +5 -0
  115. package/dist/index.d.ts.map +1 -0
  116. package/dist/index.js +18 -0
  117. package/dist/index.js.map +1 -0
  118. package/dist/metrics/index.d.ts +2 -0
  119. package/dist/metrics/index.d.ts.map +1 -0
  120. package/dist/metrics/index.js +3 -0
  121. package/dist/metrics/index.js.map +1 -0
  122. package/dist/metrics/instance.d.ts +10 -0
  123. package/dist/metrics/instance.d.ts.map +1 -0
  124. package/dist/metrics/instance.js +10 -0
  125. package/dist/metrics/instance.js.map +1 -0
  126. package/dist/presentation/dto/index.d.ts +2 -0
  127. package/dist/presentation/dto/index.d.ts.map +1 -0
  128. package/dist/presentation/dto/index.js +3 -0
  129. package/dist/presentation/dto/index.js.map +1 -0
  130. package/dist/presentation/dto/model-provider-config.d.ts +6 -0
  131. package/dist/presentation/dto/model-provider-config.d.ts.map +1 -0
  132. package/dist/presentation/dto/model-provider-config.js +32 -0
  133. package/dist/presentation/dto/model-provider-config.js.map +1 -0
  134. package/dist/presentation/e2eRoutes/create-model-provider.d.ts +2 -0
  135. package/dist/presentation/e2eRoutes/create-model-provider.d.ts.map +1 -0
  136. package/dist/presentation/e2eRoutes/create-model-provider.js +66 -0
  137. package/dist/presentation/e2eRoutes/create-model-provider.js.map +1 -0
  138. package/dist/presentation/e2eRoutes/index.d.ts +3 -0
  139. package/dist/presentation/e2eRoutes/index.d.ts.map +1 -0
  140. package/dist/presentation/e2eRoutes/index.js +9 -0
  141. package/dist/presentation/e2eRoutes/index.js.map +1 -0
  142. package/dist/presentation/index.d.ts +2 -0
  143. package/dist/presentation/index.d.ts.map +1 -0
  144. package/dist/presentation/index.js +3 -0
  145. package/dist/presentation/index.js.map +1 -0
  146. package/dist/presentation/routes/create-custom-model-provider.d.ts +2 -0
  147. package/dist/presentation/routes/create-custom-model-provider.d.ts.map +1 -0
  148. package/dist/presentation/routes/create-custom-model-provider.js +45 -0
  149. package/dist/presentation/routes/create-custom-model-provider.js.map +1 -0
  150. package/dist/presentation/routes/delete-model-provider-config.d.ts +2 -0
  151. package/dist/presentation/routes/delete-model-provider-config.d.ts.map +1 -0
  152. package/dist/presentation/routes/delete-model-provider-config.js +38 -0
  153. package/dist/presentation/routes/delete-model-provider-config.js.map +1 -0
  154. package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.d.ts +2 -0
  155. package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.d.ts.map +1 -0
  156. package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.js +37 -0
  157. package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.js.map +1 -0
  158. package/dist/presentation/routes/discover-custom-model-provider-models.d.ts +2 -0
  159. package/dist/presentation/routes/discover-custom-model-provider-models.d.ts.map +1 -0
  160. package/dist/presentation/routes/discover-custom-model-provider-models.js +31 -0
  161. package/dist/presentation/routes/discover-custom-model-provider-models.js.map +1 -0
  162. package/dist/presentation/routes/errors.d.ts +2 -0
  163. package/dist/presentation/routes/errors.d.ts.map +1 -0
  164. package/dist/presentation/routes/errors.js +112 -0
  165. package/dist/presentation/routes/errors.js.map +1 -0
  166. package/dist/presentation/routes/index.d.ts +3 -0
  167. package/dist/presentation/routes/index.d.ts.map +1 -0
  168. package/dist/presentation/routes/index.js +39 -0
  169. package/dist/presentation/routes/index.js.map +1 -0
  170. package/dist/presentation/routes/list-model-provider-catalog.d.ts +2 -0
  171. package/dist/presentation/routes/list-model-provider-catalog.d.ts.map +1 -0
  172. package/dist/presentation/routes/list-model-provider-catalog.js +18 -0
  173. package/dist/presentation/routes/list-model-provider-catalog.js.map +1 -0
  174. package/dist/presentation/routes/list-model-provider-configs.d.ts +2 -0
  175. package/dist/presentation/routes/list-model-provider-configs.d.ts.map +1 -0
  176. package/dist/presentation/routes/list-model-provider-configs.js +37 -0
  177. package/dist/presentation/routes/list-model-provider-configs.js.map +1 -0
  178. package/dist/presentation/routes/set-default-harness.d.ts +2 -0
  179. package/dist/presentation/routes/set-default-harness.d.ts.map +1 -0
  180. package/dist/presentation/routes/set-default-harness.js +38 -0
  181. package/dist/presentation/routes/set-default-harness.js.map +1 -0
  182. package/dist/presentation/routes/set-default-model-provider.d.ts +2 -0
  183. package/dist/presentation/routes/set-default-model-provider.d.ts.map +1 -0
  184. package/dist/presentation/routes/set-default-model-provider.js +48 -0
  185. package/dist/presentation/routes/set-default-model-provider.js.map +1 -0
  186. package/dist/presentation/routes/update-custom-model-provider.d.ts +2 -0
  187. package/dist/presentation/routes/update-custom-model-provider.d.ts.map +1 -0
  188. package/dist/presentation/routes/update-custom-model-provider.js +47 -0
  189. package/dist/presentation/routes/update-custom-model-provider.js.map +1 -0
  190. package/dist/presentation/routes/update-model-provider-default-model.d.ts +2 -0
  191. package/dist/presentation/routes/update-model-provider-default-model.d.ts.map +1 -0
  192. package/dist/presentation/routes/update-model-provider-default-model.js +38 -0
  193. package/dist/presentation/routes/update-model-provider-default-model.js.map +1 -0
  194. package/dist/presentation/routes/upsert-model-provider-config.d.ts +2 -0
  195. package/dist/presentation/routes/upsert-model-provider-config.d.ts.map +1 -0
  196. package/dist/presentation/routes/upsert-model-provider-config.js +52 -0
  197. package/dist/presentation/routes/upsert-model-provider-config.js.map +1 -0
  198. package/dist/tsconfig.test.tsbuildinfo +1 -0
  199. package/drizzle/0000_daffy_leopardon.sql +28 -0
  200. package/drizzle/0001_default_harness.sql +1 -0
  201. package/drizzle/meta/0000_snapshot.json +199 -0
  202. package/drizzle/meta/0001_snapshot.json +205 -0
  203. package/drizzle/meta/_journal.json +20 -0
  204. package/drizzle.config.ts +7 -0
  205. package/package.json +109 -0
  206. package/src/config.test.ts +118 -0
  207. package/src/config.ts +75 -0
  208. package/src/core/catalog-registry.test.ts +48 -0
  209. package/src/core/credential-fingerprints.test.ts +34 -0
  210. package/src/core/credential-fingerprints.ts +84 -0
  211. package/src/core/custom-model-provider-config-service.ts +537 -0
  212. package/src/core/custom-provider-url.ts +24 -0
  213. package/src/core/discover-custom-model-provider-models.ts +147 -0
  214. package/src/core/entities/agent-workspace-settings.ts +9 -0
  215. package/src/core/entities/model-provider-config.ts +25 -0
  216. package/src/core/errors.ts +139 -0
  217. package/src/core/harness/claude.ts +75 -0
  218. package/src/core/harness/index.ts +19 -0
  219. package/src/core/harness/pi.ts +18 -0
  220. package/src/core/harness/registry.test.ts +281 -0
  221. package/src/core/harness/registry.ts +108 -0
  222. package/src/core/index.ts +56 -0
  223. package/src/core/model-provider-catalog.ts +33 -0
  224. package/src/core/model-provider-config-service.test.ts +940 -0
  225. package/src/core/model-provider-config-service.ts +207 -0
  226. package/src/core/model-provider-validation.test.ts +354 -0
  227. package/src/core/model-provider-validation.ts +276 -0
  228. package/src/core/resolve-agent-config.test.ts +441 -0
  229. package/src/core/resolve-agent-config.ts +272 -0
  230. package/src/core/resolve-runtime-credentials.test.ts +316 -0
  231. package/src/core/resolve-runtime-credentials.ts +147 -0
  232. package/src/core/workspace-agent-defaults-resolver.ts +42 -0
  233. package/src/db/agent-defaults-snapshot.ts +49 -0
  234. package/src/db/agent-workspace-settings.test.ts +111 -0
  235. package/src/db/agent-workspace-settings.ts +92 -0
  236. package/src/db/db.ts +20 -0
  237. package/src/db/index.ts +29 -0
  238. package/src/db/model-provider-configs.test.ts +281 -0
  239. package/src/db/model-provider-configs.ts +230 -0
  240. package/src/db/schema/agent-workspace-settings.ts +27 -0
  241. package/src/db/schema/common.ts +3 -0
  242. package/src/db/schema/model-provider-configs.ts +80 -0
  243. package/src/index.ts +43 -0
  244. package/src/metrics/index.ts +1 -0
  245. package/src/metrics/instance.ts +18 -0
  246. package/src/presentation/dto/index.ts +5 -0
  247. package/src/presentation/dto/model-provider-config.ts +41 -0
  248. package/src/presentation/e2eRoutes/create-model-provider.test.ts +47 -0
  249. package/src/presentation/e2eRoutes/create-model-provider.ts +61 -0
  250. package/src/presentation/e2eRoutes/index.ts +7 -0
  251. package/src/presentation/index.ts +1 -0
  252. package/src/presentation/routes/create-custom-model-provider.ts +45 -0
  253. package/src/presentation/routes/delete-model-provider-config.ts +31 -0
  254. package/src/presentation/routes/discover-custom-model-provider-models-by-slug.ts +42 -0
  255. package/src/presentation/routes/discover-custom-model-provider-models.ts +29 -0
  256. package/src/presentation/routes/errors.ts +122 -0
  257. package/src/presentation/routes/index.ts +37 -0
  258. package/src/presentation/routes/list-model-provider-catalog.ts +15 -0
  259. package/src/presentation/routes/list-model-provider-configs.ts +33 -0
  260. package/src/presentation/routes/model-provider-catalog.test.ts +73 -0
  261. package/src/presentation/routes/model-provider-config.test.ts +807 -0
  262. package/src/presentation/routes/set-default-harness.ts +33 -0
  263. package/src/presentation/routes/set-default-model-provider.ts +47 -0
  264. package/src/presentation/routes/update-custom-model-provider.ts +50 -0
  265. package/src/presentation/routes/update-model-provider-default-model.ts +40 -0
  266. package/src/presentation/routes/upsert-model-provider-config.ts +53 -0
  267. package/test/env.ts +8 -0
  268. package/test/globalSetup.ts +25 -0
  269. package/test/setup.ts +17 -0
  270. package/tsconfig.build.json +9 -0
  271. package/tsconfig.build.tsbuildinfo +1 -0
  272. package/tsconfig.json +3 -0
  273. package/tsconfig.test.json +8 -0
  274. package/vitest.config.ts +11 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/presentation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,IAAI,MAAM,EAAC,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { agentRoutes as routes } from './routes/index.js';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/presentation/index.ts"],"sourcesContent":["export {agentRoutes as routes} from './routes/index.js';\n"],"names":["agentRoutes","routes"],"mappings":"AAAA,SAAQA,eAAeC,MAAM,QAAO,oBAAoB"}
@@ -0,0 +1,2 @@
1
+ export declare const createCustomModelProviderRoute: import("@shipfox/node-fastify").RouteDefinition;
2
+ //# sourceMappingURL=create-custom-model-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-custom-model-provider.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/create-custom-model-provider.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,8BAA8B,iDAiCzC,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { createCustomModelProviderBodySchema, customModelProviderConfigDtoSchema } from '@shipfox/api-agent-dto';
2
+ import { requireWorkspaceAccess } from '@shipfox/api-auth-context';
3
+ import { defineRoute } from '@shipfox/node-fastify';
4
+ import { z } from 'zod';
5
+ import { createCustomModelProviderConfig } from '#core/index.js';
6
+ import { toCustomModelProviderConfigDto } from '#presentation/dto/index.js';
7
+ import { translateModelProviderRouteError } from './errors.js';
8
+ export const createCustomModelProviderRoute = defineRoute({
9
+ method: 'POST',
10
+ path: '/custom-model-providers',
11
+ description: 'Create a custom model provider configuration for a workspace',
12
+ schema: {
13
+ params: z.object({
14
+ workspaceId: z.string().uuid()
15
+ }),
16
+ body: createCustomModelProviderBodySchema,
17
+ response: {
18
+ 200: customModelProviderConfigDtoSchema
19
+ }
20
+ },
21
+ errorHandler: translateModelProviderRouteError,
22
+ handler: async (request, reply)=>{
23
+ const { workspaceId } = request.params;
24
+ const abortController = new AbortController();
25
+ let responseFinished = false;
26
+ reply.raw.on('finish', ()=>{
27
+ responseFinished = true;
28
+ });
29
+ reply.raw.on('close', ()=>{
30
+ if (!responseFinished) abortController.abort();
31
+ });
32
+ requireWorkspaceAccess({
33
+ request,
34
+ workspaceId
35
+ });
36
+ const config = await createCustomModelProviderConfig({
37
+ workspaceId,
38
+ body: request.body,
39
+ signal: abortController.signal
40
+ });
41
+ return toCustomModelProviderConfigDto(config);
42
+ }
43
+ });
44
+
45
+ //# sourceMappingURL=create-custom-model-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/presentation/routes/create-custom-model-provider.ts"],"sourcesContent":["import {\n createCustomModelProviderBodySchema,\n customModelProviderConfigDtoSchema,\n} from '@shipfox/api-agent-dto';\nimport {requireWorkspaceAccess} from '@shipfox/api-auth-context';\nimport {defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {createCustomModelProviderConfig} from '#core/index.js';\nimport {toCustomModelProviderConfigDto} from '#presentation/dto/index.js';\nimport {translateModelProviderRouteError} from './errors.js';\n\nexport const createCustomModelProviderRoute = defineRoute({\n method: 'POST',\n path: '/custom-model-providers',\n description: 'Create a custom model provider configuration for a workspace',\n schema: {\n params: z.object({workspaceId: z.string().uuid()}),\n body: createCustomModelProviderBodySchema,\n response: {\n 200: customModelProviderConfigDtoSchema,\n },\n },\n errorHandler: translateModelProviderRouteError,\n handler: async (request, reply) => {\n const {workspaceId} = request.params;\n const abortController = new AbortController();\n let responseFinished = false;\n reply.raw.on('finish', () => {\n responseFinished = true;\n });\n reply.raw.on('close', () => {\n if (!responseFinished) abortController.abort();\n });\n\n requireWorkspaceAccess({request, workspaceId});\n\n const config = await createCustomModelProviderConfig({\n workspaceId,\n body: request.body,\n signal: abortController.signal,\n });\n\n return toCustomModelProviderConfigDto(config);\n },\n});\n"],"names":["createCustomModelProviderBodySchema","customModelProviderConfigDtoSchema","requireWorkspaceAccess","defineRoute","z","createCustomModelProviderConfig","toCustomModelProviderConfigDto","translateModelProviderRouteError","createCustomModelProviderRoute","method","path","description","schema","params","object","workspaceId","string","uuid","body","response","errorHandler","handler","request","reply","abortController","AbortController","responseFinished","raw","on","abort","config","signal"],"mappings":"AAAA,SACEA,mCAAmC,EACnCC,kCAAkC,QAC7B,yBAAyB;AAChC,SAAQC,sBAAsB,QAAO,4BAA4B;AACjE,SAAQC,WAAW,QAAO,wBAAwB;AAClD,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,+BAA+B,QAAO,iBAAiB;AAC/D,SAAQC,8BAA8B,QAAO,6BAA6B;AAC1E,SAAQC,gCAAgC,QAAO,cAAc;AAE7D,OAAO,MAAMC,iCAAiCL,YAAY;IACxDM,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNC,QAAQT,EAAEU,MAAM,CAAC;YAACC,aAAaX,EAAEY,MAAM,GAAGC,IAAI;QAAE;QAChDC,MAAMlB;QACNmB,UAAU;YACR,KAAKlB;QACP;IACF;IACAmB,cAAcb;IACdc,SAAS,OAAOC,SAASC;QACvB,MAAM,EAACR,WAAW,EAAC,GAAGO,QAAQT,MAAM;QACpC,MAAMW,kBAAkB,IAAIC;QAC5B,IAAIC,mBAAmB;QACvBH,MAAMI,GAAG,CAACC,EAAE,CAAC,UAAU;YACrBF,mBAAmB;QACrB;QACAH,MAAMI,GAAG,CAACC,EAAE,CAAC,SAAS;YACpB,IAAI,CAACF,kBAAkBF,gBAAgBK,KAAK;QAC9C;QAEA3B,uBAAuB;YAACoB;YAASP;QAAW;QAE5C,MAAMe,SAAS,MAAMzB,gCAAgC;YACnDU;YACAG,MAAMI,QAAQJ,IAAI;YAClBa,QAAQP,gBAAgBO,MAAM;QAChC;QAEA,OAAOzB,+BAA+BwB;IACxC;AACF,GAAG"}
@@ -0,0 +1,2 @@
1
+ export declare const deleteModelProviderConfigRoute: import("@shipfox/node-fastify").RouteDefinition;
2
+ //# sourceMappingURL=delete-model-provider-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-model-provider-config.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/delete-model-provider-config.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,8BAA8B,iDAwBzC,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { modelProviderRefSchema } from '@shipfox/api-agent-dto';
2
+ import { requireWorkspaceAccess } from '@shipfox/api-auth-context';
3
+ import { ClientError, defineRoute } from '@shipfox/node-fastify';
4
+ import { z } from 'zod';
5
+ import { deleteModelProviderConfig } from '#core/index.js';
6
+ export const deleteModelProviderConfigRoute = defineRoute({
7
+ method: 'DELETE',
8
+ path: '/model-providers/:providerId',
9
+ description: 'Delete a model provider configuration for a workspace',
10
+ schema: {
11
+ params: z.object({
12
+ workspaceId: z.string().uuid(),
13
+ providerId: modelProviderRefSchema
14
+ }),
15
+ response: {
16
+ 204: z.void()
17
+ }
18
+ },
19
+ handler: async (request, reply)=>{
20
+ const { workspaceId, providerId } = request.params;
21
+ requireWorkspaceAccess({
22
+ request,
23
+ workspaceId
24
+ });
25
+ const deleted = await deleteModelProviderConfig({
26
+ workspaceId,
27
+ providerId
28
+ });
29
+ if (!deleted) {
30
+ throw new ClientError('Model provider configuration not found', 'not-found', {
31
+ status: 404
32
+ });
33
+ }
34
+ reply.code(204);
35
+ }
36
+ });
37
+
38
+ //# sourceMappingURL=delete-model-provider-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/presentation/routes/delete-model-provider-config.ts"],"sourcesContent":["import {modelProviderRefSchema} from '@shipfox/api-agent-dto';\nimport {requireWorkspaceAccess} from '@shipfox/api-auth-context';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {deleteModelProviderConfig} from '#core/index.js';\n\nexport const deleteModelProviderConfigRoute = defineRoute({\n method: 'DELETE',\n path: '/model-providers/:providerId',\n description: 'Delete a model provider configuration for a workspace',\n schema: {\n params: z.object({\n workspaceId: z.string().uuid(),\n providerId: modelProviderRefSchema,\n }),\n response: {\n 204: z.void(),\n },\n },\n handler: async (request, reply) => {\n const {workspaceId, providerId} = request.params;\n requireWorkspaceAccess({request, workspaceId});\n\n const deleted = await deleteModelProviderConfig({workspaceId, providerId});\n if (!deleted) {\n throw new ClientError('Model provider configuration not found', 'not-found', {status: 404});\n }\n\n reply.code(204);\n },\n});\n"],"names":["modelProviderRefSchema","requireWorkspaceAccess","ClientError","defineRoute","z","deleteModelProviderConfig","deleteModelProviderConfigRoute","method","path","description","schema","params","object","workspaceId","string","uuid","providerId","response","void","handler","request","reply","deleted","status","code"],"mappings":"AAAA,SAAQA,sBAAsB,QAAO,yBAAyB;AAC9D,SAAQC,sBAAsB,QAAO,4BAA4B;AACjE,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,yBAAyB,QAAO,iBAAiB;AAEzD,OAAO,MAAMC,iCAAiCH,YAAY;IACxDI,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNC,QAAQP,EAAEQ,MAAM,CAAC;YACfC,aAAaT,EAAEU,MAAM,GAAGC,IAAI;YAC5BC,YAAYhB;QACd;QACAiB,UAAU;YACR,KAAKb,EAAEc,IAAI;QACb;IACF;IACAC,SAAS,OAAOC,SAASC;QACvB,MAAM,EAACR,WAAW,EAAEG,UAAU,EAAC,GAAGI,QAAQT,MAAM;QAChDV,uBAAuB;YAACmB;YAASP;QAAW;QAE5C,MAAMS,UAAU,MAAMjB,0BAA0B;YAACQ;YAAaG;QAAU;QACxE,IAAI,CAACM,SAAS;YACZ,MAAM,IAAIpB,YAAY,0CAA0C,aAAa;gBAACqB,QAAQ;YAAG;QAC3F;QAEAF,MAAMG,IAAI,CAAC;IACb;AACF,GAAG"}
@@ -0,0 +1,2 @@
1
+ export declare const discoverCustomModelProviderModelsBySlugRoute: import("@shipfox/node-fastify").RouteDefinition;
2
+ //# sourceMappingURL=discover-custom-model-provider-models-by-slug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover-custom-model-provider-models-by-slug.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/discover-custom-model-provider-models-by-slug.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,4CAA4C,iDA2BvD,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { discoverCustomModelProviderModelsBySlugBodySchema, discoverCustomModelProviderModelsResponseSchema, modelProviderRefSchema } from '@shipfox/api-agent-dto';
2
+ import { requireWorkspaceAccess } from '@shipfox/api-auth-context';
3
+ import { defineRoute } from '@shipfox/node-fastify';
4
+ import { z } from 'zod';
5
+ import { discoverCustomModelProviderModels, resolveCustomModelProviderDiscoveryParams } from '#core/index.js';
6
+ import { translateModelProviderRouteError } from './errors.js';
7
+ export const discoverCustomModelProviderModelsBySlugRoute = defineRoute({
8
+ method: 'POST',
9
+ path: '/custom-model-providers/:slug/discover-models',
10
+ description: 'Discover models for a stored custom model provider configuration',
11
+ schema: {
12
+ params: z.object({
13
+ workspaceId: z.string().uuid(),
14
+ slug: modelProviderRefSchema
15
+ }),
16
+ body: discoverCustomModelProviderModelsBySlugBodySchema,
17
+ response: {
18
+ 200: discoverCustomModelProviderModelsResponseSchema
19
+ }
20
+ },
21
+ errorHandler: translateModelProviderRouteError,
22
+ handler: async (request)=>{
23
+ const { workspaceId, slug } = request.params;
24
+ requireWorkspaceAccess({
25
+ request,
26
+ workspaceId
27
+ });
28
+ const discoveryParams = await resolveCustomModelProviderDiscoveryParams({
29
+ workspaceId,
30
+ providerId: slug,
31
+ body: request.body ?? {}
32
+ });
33
+ return await discoverCustomModelProviderModels(discoveryParams);
34
+ }
35
+ });
36
+
37
+ //# sourceMappingURL=discover-custom-model-provider-models-by-slug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/presentation/routes/discover-custom-model-provider-models-by-slug.ts"],"sourcesContent":["import {\n discoverCustomModelProviderModelsBySlugBodySchema,\n discoverCustomModelProviderModelsResponseSchema,\n modelProviderRefSchema,\n} from '@shipfox/api-agent-dto';\nimport {requireWorkspaceAccess} from '@shipfox/api-auth-context';\nimport {defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {\n discoverCustomModelProviderModels,\n resolveCustomModelProviderDiscoveryParams,\n} from '#core/index.js';\nimport {translateModelProviderRouteError} from './errors.js';\n\nexport const discoverCustomModelProviderModelsBySlugRoute = defineRoute({\n method: 'POST',\n path: '/custom-model-providers/:slug/discover-models',\n description: 'Discover models for a stored custom model provider configuration',\n schema: {\n params: z.object({\n workspaceId: z.string().uuid(),\n slug: modelProviderRefSchema,\n }),\n body: discoverCustomModelProviderModelsBySlugBodySchema,\n response: {\n 200: discoverCustomModelProviderModelsResponseSchema,\n },\n },\n errorHandler: translateModelProviderRouteError,\n handler: async (request) => {\n const {workspaceId, slug} = request.params;\n requireWorkspaceAccess({request, workspaceId});\n\n const discoveryParams = await resolveCustomModelProviderDiscoveryParams({\n workspaceId,\n providerId: slug,\n body: request.body ?? {},\n });\n\n return await discoverCustomModelProviderModels(discoveryParams);\n },\n});\n"],"names":["discoverCustomModelProviderModelsBySlugBodySchema","discoverCustomModelProviderModelsResponseSchema","modelProviderRefSchema","requireWorkspaceAccess","defineRoute","z","discoverCustomModelProviderModels","resolveCustomModelProviderDiscoveryParams","translateModelProviderRouteError","discoverCustomModelProviderModelsBySlugRoute","method","path","description","schema","params","object","workspaceId","string","uuid","slug","body","response","errorHandler","handler","request","discoveryParams","providerId"],"mappings":"AAAA,SACEA,iDAAiD,EACjDC,+CAA+C,EAC/CC,sBAAsB,QACjB,yBAAyB;AAChC,SAAQC,sBAAsB,QAAO,4BAA4B;AACjE,SAAQC,WAAW,QAAO,wBAAwB;AAClD,SAAQC,CAAC,QAAO,MAAM;AACtB,SACEC,iCAAiC,EACjCC,yCAAyC,QACpC,iBAAiB;AACxB,SAAQC,gCAAgC,QAAO,cAAc;AAE7D,OAAO,MAAMC,+CAA+CL,YAAY;IACtEM,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNC,QAAQT,EAAEU,MAAM,CAAC;YACfC,aAAaX,EAAEY,MAAM,GAAGC,IAAI;YAC5BC,MAAMjB;QACR;QACAkB,MAAMpB;QACNqB,UAAU;YACR,KAAKpB;QACP;IACF;IACAqB,cAAcd;IACde,SAAS,OAAOC;QACd,MAAM,EAACR,WAAW,EAAEG,IAAI,EAAC,GAAGK,QAAQV,MAAM;QAC1CX,uBAAuB;YAACqB;YAASR;QAAW;QAE5C,MAAMS,kBAAkB,MAAMlB,0CAA0C;YACtES;YACAU,YAAYP;YACZC,MAAMI,QAAQJ,IAAI,IAAI,CAAC;QACzB;QAEA,OAAO,MAAMd,kCAAkCmB;IACjD;AACF,GAAG"}
@@ -0,0 +1,2 @@
1
+ export declare const discoverCustomModelProviderModelsRoute: import("@shipfox/node-fastify").RouteDefinition;
2
+ //# sourceMappingURL=discover-custom-model-provider-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover-custom-model-provider-models.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/discover-custom-model-provider-models.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,sCAAsC,iDAkBjD,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { discoverCustomModelProviderModelsBodySchema, discoverCustomModelProviderModelsResponseSchema } from '@shipfox/api-agent-dto';
2
+ import { requireWorkspaceAccess } from '@shipfox/api-auth-context';
3
+ import { defineRoute } from '@shipfox/node-fastify';
4
+ import { z } from 'zod';
5
+ import { discoverCustomModelProviderModels } from '#core/index.js';
6
+ import { translateModelProviderRouteError } from './errors.js';
7
+ export const discoverCustomModelProviderModelsRoute = defineRoute({
8
+ method: 'POST',
9
+ path: '/custom-model-providers/discover-models',
10
+ description: 'Discover models exposed by a custom model provider endpoint',
11
+ schema: {
12
+ params: z.object({
13
+ workspaceId: z.string().uuid()
14
+ }),
15
+ body: discoverCustomModelProviderModelsBodySchema,
16
+ response: {
17
+ 200: discoverCustomModelProviderModelsResponseSchema
18
+ }
19
+ },
20
+ errorHandler: translateModelProviderRouteError,
21
+ handler: async (request)=>{
22
+ const { workspaceId } = request.params;
23
+ requireWorkspaceAccess({
24
+ request,
25
+ workspaceId
26
+ });
27
+ return await discoverCustomModelProviderModels(request.body);
28
+ }
29
+ });
30
+
31
+ //# sourceMappingURL=discover-custom-model-provider-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/presentation/routes/discover-custom-model-provider-models.ts"],"sourcesContent":["import {\n discoverCustomModelProviderModelsBodySchema,\n discoverCustomModelProviderModelsResponseSchema,\n} from '@shipfox/api-agent-dto';\nimport {requireWorkspaceAccess} from '@shipfox/api-auth-context';\nimport {defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {discoverCustomModelProviderModels} from '#core/index.js';\nimport {translateModelProviderRouteError} from './errors.js';\n\nexport const discoverCustomModelProviderModelsRoute = defineRoute({\n method: 'POST',\n path: '/custom-model-providers/discover-models',\n description: 'Discover models exposed by a custom model provider endpoint',\n schema: {\n params: z.object({workspaceId: z.string().uuid()}),\n body: discoverCustomModelProviderModelsBodySchema,\n response: {\n 200: discoverCustomModelProviderModelsResponseSchema,\n },\n },\n errorHandler: translateModelProviderRouteError,\n handler: async (request) => {\n const {workspaceId} = request.params;\n requireWorkspaceAccess({request, workspaceId});\n\n return await discoverCustomModelProviderModels(request.body);\n },\n});\n"],"names":["discoverCustomModelProviderModelsBodySchema","discoverCustomModelProviderModelsResponseSchema","requireWorkspaceAccess","defineRoute","z","discoverCustomModelProviderModels","translateModelProviderRouteError","discoverCustomModelProviderModelsRoute","method","path","description","schema","params","object","workspaceId","string","uuid","body","response","errorHandler","handler","request"],"mappings":"AAAA,SACEA,2CAA2C,EAC3CC,+CAA+C,QAC1C,yBAAyB;AAChC,SAAQC,sBAAsB,QAAO,4BAA4B;AACjE,SAAQC,WAAW,QAAO,wBAAwB;AAClD,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,iCAAiC,QAAO,iBAAiB;AACjE,SAAQC,gCAAgC,QAAO,cAAc;AAE7D,OAAO,MAAMC,yCAAyCJ,YAAY;IAChEK,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNC,QAAQR,EAAES,MAAM,CAAC;YAACC,aAAaV,EAAEW,MAAM,GAAGC,IAAI;QAAE;QAChDC,MAAMjB;QACNkB,UAAU;YACR,KAAKjB;QACP;IACF;IACAkB,cAAcb;IACdc,SAAS,OAAOC;QACd,MAAM,EAACP,WAAW,EAAC,GAAGO,QAAQT,MAAM;QACpCV,uBAAuB;YAACmB;YAASP;QAAW;QAE5C,OAAO,MAAMT,kCAAkCgB,QAAQJ,IAAI;IAC7D;AACF,GAAG"}
@@ -0,0 +1,2 @@
1
+ export declare function translateModelProviderRouteError(error: unknown): never;
2
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/errors.ts"],"names":[],"mappings":"AAgBA,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAyGtE"}
@@ -0,0 +1,112 @@
1
+ import { getModelProviderCredentialKeys } from '@shipfox/api-agent-dto';
2
+ import { SecretValueTooLargeError, WorkspaceSecretCapExceededError } from '@shipfox/api-secrets';
3
+ import { EgressDeniedError } from '@shipfox/node-egress-guard';
4
+ import { ClientError } from '@shipfox/node-fastify';
5
+ import { CustomModelProviderConfigNotFoundError, CustomModelProviderSlugCollisionError, CustomModelProviderStoredSecretBaseUrlChangeError, InvalidAgentModelError, InvalidCredentialFieldsError, InvalidCustomModelProviderHeaderKeepError, ModelProviderConfigNotFoundError, ModelProviderValidationError, UnsupportedModelProviderError } from '#core/index.js';
6
+ export function translateModelProviderRouteError(error) {
7
+ if (error instanceof ModelProviderValidationError) {
8
+ throw new ClientError(error.sanitizedMessage, 'provider-validation-failed', {
9
+ status: 422,
10
+ details: {
11
+ provider_id: error.providerId,
12
+ message: error.sanitizedMessage
13
+ }
14
+ });
15
+ }
16
+ if (error instanceof EgressDeniedError) {
17
+ throw new ClientError('Egress denied', 'egress-denied', {
18
+ status: 400,
19
+ details: {
20
+ reason: error.reason,
21
+ target: error.target
22
+ }
23
+ });
24
+ }
25
+ if (error instanceof CustomModelProviderSlugCollisionError) {
26
+ throw new ClientError('Custom model provider slug already exists', 'slug-collision', {
27
+ status: 409,
28
+ details: {
29
+ provider_id: error.providerId
30
+ }
31
+ });
32
+ }
33
+ if (error instanceof CustomModelProviderConfigNotFoundError) {
34
+ throw new ClientError('Custom model provider configuration not found', 'not-found', {
35
+ status: 404,
36
+ details: {
37
+ provider_id: error.providerId
38
+ }
39
+ });
40
+ }
41
+ if (error instanceof InvalidCustomModelProviderHeaderKeepError) {
42
+ throw new ClientError('Invalid kept secret header', 'invalid-header-keep', {
43
+ status: 422,
44
+ details: {
45
+ provider_id: error.providerId,
46
+ name: error.headerName
47
+ }
48
+ });
49
+ }
50
+ if (error instanceof CustomModelProviderStoredSecretBaseUrlChangeError) {
51
+ throw new ClientError('Stored custom model provider secrets cannot be reused with a changed base URL', 'stored-secret-base-url-changed', {
52
+ status: 422,
53
+ details: {
54
+ provider_id: error.providerId
55
+ }
56
+ });
57
+ }
58
+ if (error instanceof InvalidCredentialFieldsError) {
59
+ throw new ClientError('Invalid credential fields', 'invalid-credential-fields', {
60
+ status: 422,
61
+ details: {
62
+ provider_id: error.providerId,
63
+ expected_keys: getModelProviderCredentialKeys(error.providerId) ?? []
64
+ }
65
+ });
66
+ }
67
+ if (error instanceof InvalidAgentModelError) {
68
+ throw new ClientError('Invalid agent model', 'invalid-agent-model', {
69
+ status: 422,
70
+ details: {
71
+ harness: error.harness,
72
+ provider_id: error.providerId,
73
+ model: error.model
74
+ }
75
+ });
76
+ }
77
+ if (error instanceof UnsupportedModelProviderError) {
78
+ throw new ClientError('Provider is not supported', 'provider-unsupported', {
79
+ status: 422,
80
+ details: {
81
+ provider_id: error.providerId
82
+ }
83
+ });
84
+ }
85
+ if (error instanceof ModelProviderConfigNotFoundError) {
86
+ throw new ClientError('Provider is not configured', 'provider-not-configured', {
87
+ status: 422,
88
+ details: {
89
+ provider_id: error.providerId
90
+ }
91
+ });
92
+ }
93
+ if (error instanceof WorkspaceSecretCapExceededError) {
94
+ throw new ClientError('Workspace secret cap exceeded', 'workspace-secret-cap-exceeded', {
95
+ status: 409,
96
+ details: {
97
+ cap: error.cap
98
+ }
99
+ });
100
+ }
101
+ if (error instanceof SecretValueTooLargeError) {
102
+ throw new ClientError(error.message, 'value-too-large', {
103
+ status: 400,
104
+ details: {
105
+ max_bytes: error.maxBytes
106
+ }
107
+ });
108
+ }
109
+ throw error;
110
+ }
111
+
112
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/presentation/routes/errors.ts"],"sourcesContent":["import {getModelProviderCredentialKeys} from '@shipfox/api-agent-dto';\nimport {SecretValueTooLargeError, WorkspaceSecretCapExceededError} from '@shipfox/api-secrets';\nimport {EgressDeniedError} from '@shipfox/node-egress-guard';\nimport {ClientError} from '@shipfox/node-fastify';\nimport {\n CustomModelProviderConfigNotFoundError,\n CustomModelProviderSlugCollisionError,\n CustomModelProviderStoredSecretBaseUrlChangeError,\n InvalidAgentModelError,\n InvalidCredentialFieldsError,\n InvalidCustomModelProviderHeaderKeepError,\n ModelProviderConfigNotFoundError,\n ModelProviderValidationError,\n UnsupportedModelProviderError,\n} from '#core/index.js';\n\nexport function translateModelProviderRouteError(error: unknown): never {\n if (error instanceof ModelProviderValidationError) {\n throw new ClientError(error.sanitizedMessage, 'provider-validation-failed', {\n status: 422,\n details: {\n provider_id: error.providerId,\n message: error.sanitizedMessage,\n },\n });\n }\n\n if (error instanceof EgressDeniedError) {\n throw new ClientError('Egress denied', 'egress-denied', {\n status: 400,\n details: {\n reason: error.reason,\n target: error.target,\n },\n });\n }\n\n if (error instanceof CustomModelProviderSlugCollisionError) {\n throw new ClientError('Custom model provider slug already exists', 'slug-collision', {\n status: 409,\n details: {provider_id: error.providerId},\n });\n }\n\n if (error instanceof CustomModelProviderConfigNotFoundError) {\n throw new ClientError('Custom model provider configuration not found', 'not-found', {\n status: 404,\n details: {provider_id: error.providerId},\n });\n }\n\n if (error instanceof InvalidCustomModelProviderHeaderKeepError) {\n throw new ClientError('Invalid kept secret header', 'invalid-header-keep', {\n status: 422,\n details: {provider_id: error.providerId, name: error.headerName},\n });\n }\n\n if (error instanceof CustomModelProviderStoredSecretBaseUrlChangeError) {\n throw new ClientError(\n 'Stored custom model provider secrets cannot be reused with a changed base URL',\n 'stored-secret-base-url-changed',\n {\n status: 422,\n details: {provider_id: error.providerId},\n },\n );\n }\n\n if (error instanceof InvalidCredentialFieldsError) {\n throw new ClientError('Invalid credential fields', 'invalid-credential-fields', {\n status: 422,\n details: {\n provider_id: error.providerId,\n expected_keys: getModelProviderCredentialKeys(error.providerId) ?? [],\n },\n });\n }\n\n if (error instanceof InvalidAgentModelError) {\n throw new ClientError('Invalid agent model', 'invalid-agent-model', {\n status: 422,\n details: {\n harness: error.harness,\n provider_id: error.providerId,\n model: error.model,\n },\n });\n }\n\n if (error instanceof UnsupportedModelProviderError) {\n throw new ClientError('Provider is not supported', 'provider-unsupported', {\n status: 422,\n details: {provider_id: error.providerId},\n });\n }\n\n if (error instanceof ModelProviderConfigNotFoundError) {\n throw new ClientError('Provider is not configured', 'provider-not-configured', {\n status: 422,\n details: {\n provider_id: error.providerId,\n },\n });\n }\n\n if (error instanceof WorkspaceSecretCapExceededError) {\n throw new ClientError('Workspace secret cap exceeded', 'workspace-secret-cap-exceeded', {\n status: 409,\n details: {cap: error.cap},\n });\n }\n\n if (error instanceof SecretValueTooLargeError) {\n throw new ClientError(error.message, 'value-too-large', {\n status: 400,\n details: {max_bytes: error.maxBytes},\n });\n }\n\n throw error;\n}\n"],"names":["getModelProviderCredentialKeys","SecretValueTooLargeError","WorkspaceSecretCapExceededError","EgressDeniedError","ClientError","CustomModelProviderConfigNotFoundError","CustomModelProviderSlugCollisionError","CustomModelProviderStoredSecretBaseUrlChangeError","InvalidAgentModelError","InvalidCredentialFieldsError","InvalidCustomModelProviderHeaderKeepError","ModelProviderConfigNotFoundError","ModelProviderValidationError","UnsupportedModelProviderError","translateModelProviderRouteError","error","sanitizedMessage","status","details","provider_id","providerId","message","reason","target","name","headerName","expected_keys","harness","model","cap","max_bytes","maxBytes"],"mappings":"AAAA,SAAQA,8BAA8B,QAAO,yBAAyB;AACtE,SAAQC,wBAAwB,EAAEC,+BAA+B,QAAO,uBAAuB;AAC/F,SAAQC,iBAAiB,QAAO,6BAA6B;AAC7D,SAAQC,WAAW,QAAO,wBAAwB;AAClD,SACEC,sCAAsC,EACtCC,qCAAqC,EACrCC,iDAAiD,EACjDC,sBAAsB,EACtBC,4BAA4B,EAC5BC,yCAAyC,EACzCC,gCAAgC,EAChCC,4BAA4B,EAC5BC,6BAA6B,QACxB,iBAAiB;AAExB,OAAO,SAASC,iCAAiCC,KAAc;IAC7D,IAAIA,iBAAiBH,8BAA8B;QACjD,MAAM,IAAIR,YAAYW,MAAMC,gBAAgB,EAAE,8BAA8B;YAC1EC,QAAQ;YACRC,SAAS;gBACPC,aAAaJ,MAAMK,UAAU;gBAC7BC,SAASN,MAAMC,gBAAgB;YACjC;QACF;IACF;IAEA,IAAID,iBAAiBZ,mBAAmB;QACtC,MAAM,IAAIC,YAAY,iBAAiB,iBAAiB;YACtDa,QAAQ;YACRC,SAAS;gBACPI,QAAQP,MAAMO,MAAM;gBACpBC,QAAQR,MAAMQ,MAAM;YACtB;QACF;IACF;IAEA,IAAIR,iBAAiBT,uCAAuC;QAC1D,MAAM,IAAIF,YAAY,6CAA6C,kBAAkB;YACnFa,QAAQ;YACRC,SAAS;gBAACC,aAAaJ,MAAMK,UAAU;YAAA;QACzC;IACF;IAEA,IAAIL,iBAAiBV,wCAAwC;QAC3D,MAAM,IAAID,YAAY,iDAAiD,aAAa;YAClFa,QAAQ;YACRC,SAAS;gBAACC,aAAaJ,MAAMK,UAAU;YAAA;QACzC;IACF;IAEA,IAAIL,iBAAiBL,2CAA2C;QAC9D,MAAM,IAAIN,YAAY,8BAA8B,uBAAuB;YACzEa,QAAQ;YACRC,SAAS;gBAACC,aAAaJ,MAAMK,UAAU;gBAAEI,MAAMT,MAAMU,UAAU;YAAA;QACjE;IACF;IAEA,IAAIV,iBAAiBR,mDAAmD;QACtE,MAAM,IAAIH,YACR,iFACA,kCACA;YACEa,QAAQ;YACRC,SAAS;gBAACC,aAAaJ,MAAMK,UAAU;YAAA;QACzC;IAEJ;IAEA,IAAIL,iBAAiBN,8BAA8B;QACjD,MAAM,IAAIL,YAAY,6BAA6B,6BAA6B;YAC9Ea,QAAQ;YACRC,SAAS;gBACPC,aAAaJ,MAAMK,UAAU;gBAC7BM,eAAe1B,+BAA+Be,MAAMK,UAAU,KAAK,EAAE;YACvE;QACF;IACF;IAEA,IAAIL,iBAAiBP,wBAAwB;QAC3C,MAAM,IAAIJ,YAAY,uBAAuB,uBAAuB;YAClEa,QAAQ;YACRC,SAAS;gBACPS,SAASZ,MAAMY,OAAO;gBACtBR,aAAaJ,MAAMK,UAAU;gBAC7BQ,OAAOb,MAAMa,KAAK;YACpB;QACF;IACF;IAEA,IAAIb,iBAAiBF,+BAA+B;QAClD,MAAM,IAAIT,YAAY,6BAA6B,wBAAwB;YACzEa,QAAQ;YACRC,SAAS;gBAACC,aAAaJ,MAAMK,UAAU;YAAA;QACzC;IACF;IAEA,IAAIL,iBAAiBJ,kCAAkC;QACrD,MAAM,IAAIP,YAAY,8BAA8B,2BAA2B;YAC7Ea,QAAQ;YACRC,SAAS;gBACPC,aAAaJ,MAAMK,UAAU;YAC/B;QACF;IACF;IAEA,IAAIL,iBAAiBb,iCAAiC;QACpD,MAAM,IAAIE,YAAY,iCAAiC,iCAAiC;YACtFa,QAAQ;YACRC,SAAS;gBAACW,KAAKd,MAAMc,GAAG;YAAA;QAC1B;IACF;IAEA,IAAId,iBAAiBd,0BAA0B;QAC7C,MAAM,IAAIG,YAAYW,MAAMM,OAAO,EAAE,mBAAmB;YACtDJ,QAAQ;YACRC,SAAS;gBAACY,WAAWf,MAAMgB,QAAQ;YAAA;QACrC;IACF;IAEA,MAAMhB;AACR"}
@@ -0,0 +1,3 @@
1
+ import type { RouteGroup } from '@shipfox/node-fastify';
2
+ export declare const agentRoutes: RouteGroup[];
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAC;AAatD,eAAO,MAAM,WAAW,EAAE,UAAU,EAsBnC,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { AUTH_USER } from '@shipfox/api-auth-context';
2
+ import { createCustomModelProviderRoute } from './create-custom-model-provider.js';
3
+ import { deleteModelProviderConfigRoute } from './delete-model-provider-config.js';
4
+ import { discoverCustomModelProviderModelsRoute } from './discover-custom-model-provider-models.js';
5
+ import { discoverCustomModelProviderModelsBySlugRoute } from './discover-custom-model-provider-models-by-slug.js';
6
+ import { listModelProviderCatalogRoute } from './list-model-provider-catalog.js';
7
+ import { listModelProviderConfigsRoute } from './list-model-provider-configs.js';
8
+ import { setDefaultHarnessRoute } from './set-default-harness.js';
9
+ import { setDefaultModelProviderRoute } from './set-default-model-provider.js';
10
+ import { updateCustomModelProviderRoute } from './update-custom-model-provider.js';
11
+ import { updateModelProviderDefaultModelRoute } from './update-model-provider-default-model.js';
12
+ import { upsertModelProviderConfigRoute } from './upsert-model-provider-config.js';
13
+ export const agentRoutes = [
14
+ {
15
+ prefix: '/workspaces/:workspaceId/agent',
16
+ auth: AUTH_USER,
17
+ routes: [
18
+ listModelProviderConfigsRoute,
19
+ createCustomModelProviderRoute,
20
+ discoverCustomModelProviderModelsRoute,
21
+ discoverCustomModelProviderModelsBySlugRoute,
22
+ updateCustomModelProviderRoute,
23
+ upsertModelProviderConfigRoute,
24
+ updateModelProviderDefaultModelRoute,
25
+ deleteModelProviderConfigRoute,
26
+ setDefaultHarnessRoute,
27
+ setDefaultModelProviderRoute
28
+ ]
29
+ },
30
+ {
31
+ prefix: '/agent',
32
+ auth: AUTH_USER,
33
+ routes: [
34
+ listModelProviderCatalogRoute
35
+ ]
36
+ }
37
+ ];
38
+
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/presentation/routes/index.ts"],"sourcesContent":["import {AUTH_USER} from '@shipfox/api-auth-context';\nimport type {RouteGroup} from '@shipfox/node-fastify';\nimport {createCustomModelProviderRoute} from './create-custom-model-provider.js';\nimport {deleteModelProviderConfigRoute} from './delete-model-provider-config.js';\nimport {discoverCustomModelProviderModelsRoute} from './discover-custom-model-provider-models.js';\nimport {discoverCustomModelProviderModelsBySlugRoute} from './discover-custom-model-provider-models-by-slug.js';\nimport {listModelProviderCatalogRoute} from './list-model-provider-catalog.js';\nimport {listModelProviderConfigsRoute} from './list-model-provider-configs.js';\nimport {setDefaultHarnessRoute} from './set-default-harness.js';\nimport {setDefaultModelProviderRoute} from './set-default-model-provider.js';\nimport {updateCustomModelProviderRoute} from './update-custom-model-provider.js';\nimport {updateModelProviderDefaultModelRoute} from './update-model-provider-default-model.js';\nimport {upsertModelProviderConfigRoute} from './upsert-model-provider-config.js';\n\nexport const agentRoutes: RouteGroup[] = [\n {\n prefix: '/workspaces/:workspaceId/agent',\n auth: AUTH_USER,\n routes: [\n listModelProviderConfigsRoute,\n createCustomModelProviderRoute,\n discoverCustomModelProviderModelsRoute,\n discoverCustomModelProviderModelsBySlugRoute,\n updateCustomModelProviderRoute,\n upsertModelProviderConfigRoute,\n updateModelProviderDefaultModelRoute,\n deleteModelProviderConfigRoute,\n setDefaultHarnessRoute,\n setDefaultModelProviderRoute,\n ],\n },\n {\n prefix: '/agent',\n auth: AUTH_USER,\n routes: [listModelProviderCatalogRoute],\n },\n];\n"],"names":["AUTH_USER","createCustomModelProviderRoute","deleteModelProviderConfigRoute","discoverCustomModelProviderModelsRoute","discoverCustomModelProviderModelsBySlugRoute","listModelProviderCatalogRoute","listModelProviderConfigsRoute","setDefaultHarnessRoute","setDefaultModelProviderRoute","updateCustomModelProviderRoute","updateModelProviderDefaultModelRoute","upsertModelProviderConfigRoute","agentRoutes","prefix","auth","routes"],"mappings":"AAAA,SAAQA,SAAS,QAAO,4BAA4B;AAEpD,SAAQC,8BAA8B,QAAO,oCAAoC;AACjF,SAAQC,8BAA8B,QAAO,oCAAoC;AACjF,SAAQC,sCAAsC,QAAO,6CAA6C;AAClG,SAAQC,4CAA4C,QAAO,qDAAqD;AAChH,SAAQC,6BAA6B,QAAO,mCAAmC;AAC/E,SAAQC,6BAA6B,QAAO,mCAAmC;AAC/E,SAAQC,sBAAsB,QAAO,2BAA2B;AAChE,SAAQC,4BAA4B,QAAO,kCAAkC;AAC7E,SAAQC,8BAA8B,QAAO,oCAAoC;AACjF,SAAQC,oCAAoC,QAAO,2CAA2C;AAC9F,SAAQC,8BAA8B,QAAO,oCAAoC;AAEjF,OAAO,MAAMC,cAA4B;IACvC;QACEC,QAAQ;QACRC,MAAMd;QACNe,QAAQ;YACNT;YACAL;YACAE;YACAC;YACAK;YACAE;YACAD;YACAR;YACAK;YACAC;SACD;IACH;IACA;QACEK,QAAQ;QACRC,MAAMd;QACNe,QAAQ;YAACV;SAA8B;IACzC;CACD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const listModelProviderCatalogRoute: import("@shipfox/node-fastify").RouteDefinition;
2
+ //# sourceMappingURL=list-model-provider-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-model-provider-catalog.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/list-model-provider-catalog.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,6BAA6B,iDAUxC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { modelProviderCatalogResponseSchema } from '@shipfox/api-agent-dto';
2
+ import { defineRoute } from '@shipfox/node-fastify';
3
+ import { buildModelProviderCatalog } from '#core/index.js';
4
+ export const listModelProviderCatalogRoute = defineRoute({
5
+ method: 'GET',
6
+ path: '/model-provider-catalog',
7
+ description: 'List available model providers and models',
8
+ schema: {
9
+ response: {
10
+ 200: modelProviderCatalogResponseSchema
11
+ }
12
+ },
13
+ handler: ()=>({
14
+ providers: buildModelProviderCatalog()
15
+ })
16
+ });
17
+
18
+ //# sourceMappingURL=list-model-provider-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/presentation/routes/list-model-provider-catalog.ts"],"sourcesContent":["import {modelProviderCatalogResponseSchema} from '@shipfox/api-agent-dto';\nimport {defineRoute} from '@shipfox/node-fastify';\nimport {buildModelProviderCatalog} from '#core/index.js';\n\nexport const listModelProviderCatalogRoute = defineRoute({\n method: 'GET',\n path: '/model-provider-catalog',\n description: 'List available model providers and models',\n schema: {\n response: {\n 200: modelProviderCatalogResponseSchema,\n },\n },\n handler: () => ({providers: buildModelProviderCatalog()}),\n});\n"],"names":["modelProviderCatalogResponseSchema","defineRoute","buildModelProviderCatalog","listModelProviderCatalogRoute","method","path","description","schema","response","handler","providers"],"mappings":"AAAA,SAAQA,kCAAkC,QAAO,yBAAyB;AAC1E,SAAQC,WAAW,QAAO,wBAAwB;AAClD,SAAQC,yBAAyB,QAAO,iBAAiB;AAEzD,OAAO,MAAMC,gCAAgCF,YAAY;IACvDG,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNC,UAAU;YACR,KAAKR;QACP;IACF;IACAS,SAAS,IAAO,CAAA;YAACC,WAAWR;QAA2B,CAAA;AACzD,GAAG"}
@@ -0,0 +1,2 @@
1
+ export declare const listModelProviderConfigsRoute: import("@shipfox/node-fastify").RouteDefinition;
2
+ //# sourceMappingURL=list-model-provider-configs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-model-provider-configs.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/list-model-provider-configs.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,6BAA6B,iDAyBxC,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { listModelProviderConfigsResponseSchema } from '@shipfox/api-agent-dto';
2
+ import { requireWorkspaceAccess } from '@shipfox/api-auth-context';
3
+ import { defineRoute } from '@shipfox/node-fastify';
4
+ import { z } from 'zod';
5
+ import { getAgentWorkspaceSettings, listModelProviderConfigs } from '#db/index.js';
6
+ import { toModelProviderConfigResponseDto } from '#presentation/dto/index.js';
7
+ export const listModelProviderConfigsRoute = defineRoute({
8
+ method: 'GET',
9
+ path: '/model-providers',
10
+ description: 'List model provider configurations for a workspace',
11
+ schema: {
12
+ params: z.object({
13
+ workspaceId: z.string().uuid()
14
+ }),
15
+ response: {
16
+ 200: listModelProviderConfigsResponseSchema
17
+ }
18
+ },
19
+ handler: async (request)=>{
20
+ const { workspaceId } = request.params;
21
+ requireWorkspaceAccess({
22
+ request,
23
+ workspaceId
24
+ });
25
+ const [configs, settings] = await Promise.all([
26
+ listModelProviderConfigs(workspaceId),
27
+ getAgentWorkspaceSettings(workspaceId)
28
+ ]);
29
+ return {
30
+ configs: configs.map(toModelProviderConfigResponseDto),
31
+ default_harness_id: settings?.defaultHarnessId ?? null,
32
+ default_provider_id: settings?.defaultProviderId ?? null
33
+ };
34
+ }
35
+ });
36
+
37
+ //# sourceMappingURL=list-model-provider-configs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/presentation/routes/list-model-provider-configs.ts"],"sourcesContent":["import {listModelProviderConfigsResponseSchema} from '@shipfox/api-agent-dto';\nimport {requireWorkspaceAccess} from '@shipfox/api-auth-context';\nimport {defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {getAgentWorkspaceSettings, listModelProviderConfigs} from '#db/index.js';\nimport {toModelProviderConfigResponseDto} from '#presentation/dto/index.js';\n\nexport const listModelProviderConfigsRoute = defineRoute({\n method: 'GET',\n path: '/model-providers',\n description: 'List model provider configurations for a workspace',\n schema: {\n params: z.object({workspaceId: z.string().uuid()}),\n response: {\n 200: listModelProviderConfigsResponseSchema,\n },\n },\n handler: async (request) => {\n const {workspaceId} = request.params;\n requireWorkspaceAccess({request, workspaceId});\n\n const [configs, settings] = await Promise.all([\n listModelProviderConfigs(workspaceId),\n getAgentWorkspaceSettings(workspaceId),\n ]);\n\n return {\n configs: configs.map(toModelProviderConfigResponseDto),\n default_harness_id: settings?.defaultHarnessId ?? null,\n default_provider_id: settings?.defaultProviderId ?? null,\n };\n },\n});\n"],"names":["listModelProviderConfigsResponseSchema","requireWorkspaceAccess","defineRoute","z","getAgentWorkspaceSettings","listModelProviderConfigs","toModelProviderConfigResponseDto","listModelProviderConfigsRoute","method","path","description","schema","params","object","workspaceId","string","uuid","response","handler","request","configs","settings","Promise","all","map","default_harness_id","defaultHarnessId","default_provider_id","defaultProviderId"],"mappings":"AAAA,SAAQA,sCAAsC,QAAO,yBAAyB;AAC9E,SAAQC,sBAAsB,QAAO,4BAA4B;AACjE,SAAQC,WAAW,QAAO,wBAAwB;AAClD,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,yBAAyB,EAAEC,wBAAwB,QAAO,eAAe;AACjF,SAAQC,gCAAgC,QAAO,6BAA6B;AAE5E,OAAO,MAAMC,gCAAgCL,YAAY;IACvDM,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNC,QAAQT,EAAEU,MAAM,CAAC;YAACC,aAAaX,EAAEY,MAAM,GAAGC,IAAI;QAAE;QAChDC,UAAU;YACR,KAAKjB;QACP;IACF;IACAkB,SAAS,OAAOC;QACd,MAAM,EAACL,WAAW,EAAC,GAAGK,QAAQP,MAAM;QACpCX,uBAAuB;YAACkB;YAASL;QAAW;QAE5C,MAAM,CAACM,SAASC,SAAS,GAAG,MAAMC,QAAQC,GAAG,CAAC;YAC5ClB,yBAAyBS;YACzBV,0BAA0BU;SAC3B;QAED,OAAO;YACLM,SAASA,QAAQI,GAAG,CAAClB;YACrBmB,oBAAoBJ,UAAUK,oBAAoB;YAClDC,qBAAqBN,UAAUO,qBAAqB;QACtD;IACF;AACF,GAAG"}
@@ -0,0 +1,2 @@
1
+ export declare const setDefaultHarnessRoute: import("@shipfox/node-fastify").RouteDefinition;
2
+ //# sourceMappingURL=set-default-harness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-default-harness.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/set-default-harness.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,sBAAsB,iDA0BjC,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { setDefaultHarnessBodySchema, setDefaultHarnessResponseSchema } from '@shipfox/api-agent-dto';
2
+ import { requireWorkspaceAccess } from '@shipfox/api-auth-context';
3
+ import { defineRoute } from '@shipfox/node-fastify';
4
+ import { z } from 'zod';
5
+ import { setDefaultHarness } from '#db/index.js';
6
+ export const setDefaultHarnessRoute = defineRoute({
7
+ method: 'PUT',
8
+ path: '/default-harness',
9
+ description: 'Set the default agent harness for a workspace',
10
+ schema: {
11
+ params: z.object({
12
+ workspaceId: z.string().uuid()
13
+ }),
14
+ body: setDefaultHarnessBodySchema,
15
+ response: {
16
+ 200: setDefaultHarnessResponseSchema
17
+ }
18
+ },
19
+ handler: async (request)=>{
20
+ const { workspaceId } = request.params;
21
+ requireWorkspaceAccess({
22
+ request,
23
+ workspaceId
24
+ });
25
+ const settings = await setDefaultHarness({
26
+ workspaceId,
27
+ harnessId: request.body.harness_id
28
+ });
29
+ if (settings.defaultHarnessId === null) {
30
+ throw new Error('Default harness upsert returned a null harness');
31
+ }
32
+ return {
33
+ default_harness_id: settings.defaultHarnessId
34
+ };
35
+ }
36
+ });
37
+
38
+ //# sourceMappingURL=set-default-harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/presentation/routes/set-default-harness.ts"],"sourcesContent":["import {setDefaultHarnessBodySchema, setDefaultHarnessResponseSchema} from '@shipfox/api-agent-dto';\nimport {requireWorkspaceAccess} from '@shipfox/api-auth-context';\nimport {defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {setDefaultHarness} from '#db/index.js';\n\nexport const setDefaultHarnessRoute = defineRoute({\n method: 'PUT',\n path: '/default-harness',\n description: 'Set the default agent harness for a workspace',\n schema: {\n params: z.object({workspaceId: z.string().uuid()}),\n body: setDefaultHarnessBodySchema,\n response: {\n 200: setDefaultHarnessResponseSchema,\n },\n },\n handler: async (request) => {\n const {workspaceId} = request.params;\n requireWorkspaceAccess({request, workspaceId});\n\n const settings = await setDefaultHarness({\n workspaceId,\n harnessId: request.body.harness_id,\n });\n\n if (settings.defaultHarnessId === null) {\n throw new Error('Default harness upsert returned a null harness');\n }\n\n return {default_harness_id: settings.defaultHarnessId};\n },\n});\n"],"names":["setDefaultHarnessBodySchema","setDefaultHarnessResponseSchema","requireWorkspaceAccess","defineRoute","z","setDefaultHarness","setDefaultHarnessRoute","method","path","description","schema","params","object","workspaceId","string","uuid","body","response","handler","request","settings","harnessId","harness_id","defaultHarnessId","Error","default_harness_id"],"mappings":"AAAA,SAAQA,2BAA2B,EAAEC,+BAA+B,QAAO,yBAAyB;AACpG,SAAQC,sBAAsB,QAAO,4BAA4B;AACjE,SAAQC,WAAW,QAAO,wBAAwB;AAClD,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,iBAAiB,QAAO,eAAe;AAE/C,OAAO,MAAMC,yBAAyBH,YAAY;IAChDI,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNC,QAAQP,EAAEQ,MAAM,CAAC;YAACC,aAAaT,EAAEU,MAAM,GAAGC,IAAI;QAAE;QAChDC,MAAMhB;QACNiB,UAAU;YACR,KAAKhB;QACP;IACF;IACAiB,SAAS,OAAOC;QACd,MAAM,EAACN,WAAW,EAAC,GAAGM,QAAQR,MAAM;QACpCT,uBAAuB;YAACiB;YAASN;QAAW;QAE5C,MAAMO,WAAW,MAAMf,kBAAkB;YACvCQ;YACAQ,WAAWF,QAAQH,IAAI,CAACM,UAAU;QACpC;QAEA,IAAIF,SAASG,gBAAgB,KAAK,MAAM;YACtC,MAAM,IAAIC,MAAM;QAClB;QAEA,OAAO;YAACC,oBAAoBL,SAASG,gBAAgB;QAAA;IACvD;AACF,GAAG"}
@@ -0,0 +1,2 @@
1
+ export declare const setDefaultModelProviderRoute: import("@shipfox/node-fastify").RouteDefinition;
2
+ //# sourceMappingURL=set-default-model-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-default-model-provider.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/set-default-model-provider.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,4BAA4B,iDAkCvC,CAAC"}