@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,2 @@
1
+ $ shipfox-swc
2
+ Successfully compiled: 48 files with swc (64.93ms)
@@ -0,0 +1 @@
1
+ $ shipfox-tsc-emit
@@ -0,0 +1 @@
1
+ $ shipfox-tsc-check
package/CHANGELOG.md ADDED
@@ -0,0 +1,105 @@
1
+ # @shipfox/api-agent
2
+
3
+ ## 2.0.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 1b0d344: Publishes the complete API runtime closure with packed-consumer-safe internal imports and records its exact package set in application releases.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [0cd6dd4]
12
+ - Updated dependencies [1b0d344]
13
+ - Updated dependencies [521e006]
14
+ - @shipfox/node-module@0.2.0
15
+ - @shipfox/api-agent-dto@2.0.0
16
+ - @shipfox/api-auth-context@2.0.0
17
+ - @shipfox/api-secrets@2.0.0
18
+ - @shipfox/node-egress-guard@0.1.0
19
+ - @shipfox/config@1.2.1
20
+ - @shipfox/node-drizzle@0.2.1
21
+ - @shipfox/node-fastify@0.2.1
22
+ - @shipfox/node-opentelemetry@0.5.0
23
+ - @shipfox/node-postgres@0.4.1
24
+ - @shipfox/redact@0.2.1
25
+
26
+ ## 0.1.2
27
+
28
+ ### Patch Changes
29
+
30
+ - @shipfox/api-secrets@0.1.2
31
+ - @shipfox/node-module@0.1.2
32
+
33
+ ## 0.1.1
34
+
35
+ ### Patch Changes
36
+
37
+ - Updated dependencies [ec75cd5]
38
+ - Updated dependencies [68b8d03]
39
+ - Updated dependencies [6a1fb54]
40
+ - @shipfox/node-drizzle@0.2.0
41
+ - @shipfox/redact@0.2.0
42
+ - @shipfox/node-postgres@0.4.0
43
+ - @shipfox/api-secrets@0.1.1
44
+ - @shipfox/node-module@0.1.1
45
+
46
+ ## 0.1.0
47
+
48
+ ### Minor Changes
49
+
50
+ - 0a6318f: Adds backend model provider storage with workspace defaults and Pi catalog registry validation.
51
+ - 067a260: Adds workspace model provider settings for configuring, testing, defaulting, and deleting provider credentials.
52
+ - 5bcdbf4: Adds harness-native agent tool catalogs with deployment-aware Pi optional tool package config.
53
+
54
+ ### Patch Changes
55
+
56
+ - 5cdfc69: Adds a reusable custom-model-provider egress guard with instance config for private-network and host-denylist policy.
57
+ - b1f57d1: Moves agent model provider credentials onto the shared secrets store while keeping provider config metadata and runtime resolution behavior intact.
58
+ - 97162dd: Resolves model provider, model, and thinking defaults at workflow run creation using workspace and instance configuration.
59
+ - aca162b: Add workspace model provider management routes: list provider catalog, list workspace provider configs, test-and-save (upsert) a provider configuration, hard-delete a configuration (clearing the workspace default when needed), and set the workspace default provider. Routes carry per-route error translation and never expose stored credentials.
60
+ - 82d22e4: Make the workspace-membership gate stateless. `requireWorkspaceAccess` now lives in `@shipfox/api-auth-context` and authorizes a request purely from the verified session-token claims, replacing the `requireMembership` gate in `@shipfox/api-workspaces` that read the workspace row from the database on every workspace-scoped request. Membership and role already travel in the token, so the check needs no database access.
61
+
62
+ This removes the per-request database read and severs the runtime dependency on `@shipfox/api-workspaces` from feature modules that only needed the membership gate (integration providers, secrets, projects, agent, runners). Workspace existence and `active`-status enforcement, which no code path currently exercises, moves off the hot path; enforce it at token issuance when workspace suspension is introduced.
63
+
64
+ - Updated dependencies [067a260]
65
+ - Updated dependencies [34ba284]
66
+ - Updated dependencies [3b45d86]
67
+ - Updated dependencies [5707d6d]
68
+ - Updated dependencies [b9c3f32]
69
+ - Updated dependencies [a81b68c]
70
+ - Updated dependencies [c0a883c]
71
+ - Updated dependencies [72ce351]
72
+ - Updated dependencies [e47f8da]
73
+ - Updated dependencies [de54da2]
74
+ - Updated dependencies [7b175f5]
75
+ - Updated dependencies [7ca4c65]
76
+ - Updated dependencies [5bcdbf4]
77
+ - Updated dependencies [ae7a63c]
78
+ - Updated dependencies [f92122b]
79
+ - Updated dependencies [360d06d]
80
+ - Updated dependencies [f8f339a]
81
+ - Updated dependencies [857fd73]
82
+ - Updated dependencies [aca162b]
83
+ - Updated dependencies [75520ff]
84
+ - Updated dependencies [f66f606]
85
+ - Updated dependencies [e51d464]
86
+ - Updated dependencies [d6d4862]
87
+ - Updated dependencies [c0a883c]
88
+ - Updated dependencies [6077301]
89
+ - Updated dependencies [3bea87f]
90
+ - Updated dependencies [82d22e4]
91
+ - Updated dependencies [6181819]
92
+ - Updated dependencies [3ddde91]
93
+ - Updated dependencies [282e66a]
94
+ - Updated dependencies [9c149d1]
95
+ - @shipfox/api-agent-dto@0.1.0
96
+ - @shipfox/node-fastify@0.2.0
97
+ - @shipfox/api-secrets@0.1.0
98
+ - @shipfox/node-drizzle@0.1.0
99
+ - @shipfox/api-auth-context@0.1.0
100
+ - @shipfox/node-opentelemetry@0.4.2
101
+ - @shipfox/node-postgres@0.3.2
102
+ - @shipfox/node-module@0.1.0
103
+ - @shipfox/redact@0.1.0
104
+ - @shipfox/config@1.2.0
105
+ - @shipfox/node-egress-guard@0.0.0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Shipfox
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,13 @@
1
+ export declare const config: Readonly<{
2
+ AGENT_DEFAULT_PROVIDER: "anthropic" | "ant-ling" | "azure-openai-responses" | "openai" | "deepseek" | "nvidia" | "google" | "mistral" | "groq" | "cerebras" | "cloudflare-ai-gateway" | "cloudflare-workers-ai" | "xai" | "openrouter" | "vercel-ai-gateway" | "zai" | "zai-coding-cn" | "opencode" | "opencode-go" | "huggingface" | "fireworks" | "together" | "kimi-coding" | "minimax" | "minimax-cn" | "moonshotai" | "moonshotai-cn" | "xiaomi" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-sgp" | undefined;
3
+ AGENT_DEFAULT_PROVIDER_MODEL: string | undefined;
4
+ AGENT_DEFAULT_PROVIDER_THINKING: "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max" | undefined;
5
+ AGENT_DEFAULT_PROVIDER_API_KEY: string | undefined;
6
+ AGENT_PROVIDER_VALIDATION_TIMEOUT_MS: number;
7
+ AGENT_CUSTOM_PROVIDER_ALLOW_PRIVATE_NETWORKS: boolean;
8
+ AGENT_CUSTOM_PROVIDER_HOST_DENYLIST: string;
9
+ AGENT_PI_ENABLED_TOOL_PACKAGES: string;
10
+ AGENT_PI_WEB_SEARCH_ENABLED: boolean;
11
+ } & import("@shipfox/config").CleanedEnvAccessors>;
12
+ export declare const harnessToolDeploymentConfig: import("@shipfox/api-agent-dto").HarnessToolDeploymentConfig;
13
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,MAAM;;;;;;;;;;kDAuCjB,CAAC;AAIH,eAAO,MAAM,2BAA2B,8DAGtC,CAAC"}
package/dist/config.js ADDED
@@ -0,0 +1,60 @@
1
+ import { agentThinkingSchema, buildHarnessToolDeploymentConfig, getModelProviderEntry, SUPPORTED_MODEL_PROVIDER_IDS } from '@shipfox/api-agent-dto';
2
+ import { bool, createConfig, num, str } from '@shipfox/config';
3
+ const AGENT_THINKING_CHOICES = agentThinkingSchema.options;
4
+ export const config = createConfig({
5
+ AGENT_DEFAULT_PROVIDER: str({
6
+ desc: 'Instance-wide default model provider ID used when a workflow and workspace do not choose one. Optional. Use one of the supported model provider IDs from the model provider catalog.',
7
+ choices: SUPPORTED_MODEL_PROVIDER_IDS,
8
+ default: undefined
9
+ }),
10
+ AGENT_DEFAULT_PROVIDER_MODEL: str({
11
+ desc: 'Instance-wide default model ID used when the resolved provider matches AGENT_DEFAULT_PROVIDER and no workflow or workspace model is set. Optional. Use a model ID supported by that provider.',
12
+ default: undefined
13
+ }),
14
+ AGENT_DEFAULT_PROVIDER_THINKING: str({
15
+ desc: 'Instance-wide default thinking effort used when the resolved provider matches AGENT_DEFAULT_PROVIDER and no workflow or workspace thinking effort is set. Optional. Accepted values are off, minimal, low, medium, high, and xhigh.',
16
+ choices: AGENT_THINKING_CHOICES,
17
+ default: undefined
18
+ }),
19
+ AGENT_DEFAULT_PROVIDER_API_KEY: str({
20
+ desc: 'API key for the instance default provider. Optional. Must belong to AGENT_DEFAULT_PROVIDER. If you change the default provider, change this key too. Instance defaults support API-key-only providers.',
21
+ default: undefined
22
+ }),
23
+ AGENT_PROVIDER_VALIDATION_TIMEOUT_MS: num({
24
+ desc: 'Maximum time in milliseconds to wait for the live provider test request when saving credentials.',
25
+ default: 10000
26
+ }),
27
+ AGENT_CUSTOM_PROVIDER_ALLOW_PRIVATE_NETWORKS: bool({
28
+ desc: 'Allows custom model providers to use private, loopback, link-local, metadata, and .internal network targets. Keep this true for local development and self-hosted private networks. Set it to false on cloud instances.',
29
+ default: true
30
+ }),
31
+ AGENT_CUSTOM_PROVIDER_HOST_DENYLIST: str({
32
+ desc: 'Comma-separated hosts and IP ranges that custom model providers may not call. Accepts exact hosts, suffix patterns such as .internal.example or *.internal.example, IP literals, and CIDR blocks such as 10.0.0.0/8.',
33
+ default: ''
34
+ }),
35
+ AGENT_PI_ENABLED_TOOL_PACKAGES: str({
36
+ desc: 'Comma-separated optional Pi tool packages enabled for this deployment. Defaults to pi-web-access so Pi web access is available. Set it to an empty value to enable only Pi built-in tools. Accepted values: pi-web-access.',
37
+ default: 'pi-web-access'
38
+ }),
39
+ AGENT_PI_WEB_SEARCH_ENABLED: bool({
40
+ desc: 'Enables Pi web search tools when pi-web-access is enabled. Set it to false to disable web_search and get_search_content while keeping fetch_content available.',
41
+ default: true
42
+ })
43
+ });
44
+ assertInstanceDefaultModelProviderApiKeyConfig();
45
+ export const harnessToolDeploymentConfig = buildHarnessToolDeploymentConfig({
46
+ piEnabledToolPackages: config.AGENT_PI_ENABLED_TOOL_PACKAGES,
47
+ piWebSearchEnabled: config.AGENT_PI_WEB_SEARCH_ENABLED
48
+ });
49
+ function assertInstanceDefaultModelProviderApiKeyConfig() {
50
+ if (!config.AGENT_DEFAULT_PROVIDER_API_KEY) return;
51
+ if (!config.AGENT_DEFAULT_PROVIDER) {
52
+ throw new Error('AGENT_DEFAULT_PROVIDER_API_KEY requires AGENT_DEFAULT_PROVIDER to be set.');
53
+ }
54
+ const credentialFields = getModelProviderEntry(config.AGENT_DEFAULT_PROVIDER)?.credential_fields ?? [];
55
+ const field = credentialFields[0];
56
+ if (credentialFields.length === 1 && field?.key === 'api_key' && field.secret) return;
57
+ throw new Error('AGENT_DEFAULT_PROVIDER_API_KEY requires AGENT_DEFAULT_PROVIDER to use exactly one secret api_key credential field.');
58
+ }
59
+
60
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config.ts"],"sourcesContent":["import {\n agentThinkingSchema,\n buildHarnessToolDeploymentConfig,\n getModelProviderEntry,\n SUPPORTED_MODEL_PROVIDER_IDS,\n type SupportedModelProviderId,\n} from '@shipfox/api-agent-dto';\nimport {bool, createConfig, num, str} from '@shipfox/config';\n\nconst AGENT_THINKING_CHOICES = agentThinkingSchema.options;\n\nexport const config = createConfig({\n AGENT_DEFAULT_PROVIDER: str({\n desc: 'Instance-wide default model provider ID used when a workflow and workspace do not choose one. Optional. Use one of the supported model provider IDs from the model provider catalog.',\n choices: SUPPORTED_MODEL_PROVIDER_IDS,\n default: undefined,\n }),\n AGENT_DEFAULT_PROVIDER_MODEL: str({\n desc: 'Instance-wide default model ID used when the resolved provider matches AGENT_DEFAULT_PROVIDER and no workflow or workspace model is set. Optional. Use a model ID supported by that provider.',\n default: undefined,\n }),\n AGENT_DEFAULT_PROVIDER_THINKING: str({\n desc: 'Instance-wide default thinking effort used when the resolved provider matches AGENT_DEFAULT_PROVIDER and no workflow or workspace thinking effort is set. Optional. Accepted values are off, minimal, low, medium, high, and xhigh.',\n choices: AGENT_THINKING_CHOICES,\n default: undefined,\n }),\n AGENT_DEFAULT_PROVIDER_API_KEY: str({\n desc: 'API key for the instance default provider. Optional. Must belong to AGENT_DEFAULT_PROVIDER. If you change the default provider, change this key too. Instance defaults support API-key-only providers.',\n default: undefined,\n }),\n AGENT_PROVIDER_VALIDATION_TIMEOUT_MS: num({\n desc: 'Maximum time in milliseconds to wait for the live provider test request when saving credentials.',\n default: 10000,\n }),\n AGENT_CUSTOM_PROVIDER_ALLOW_PRIVATE_NETWORKS: bool({\n desc: 'Allows custom model providers to use private, loopback, link-local, metadata, and .internal network targets. Keep this true for local development and self-hosted private networks. Set it to false on cloud instances.',\n default: true,\n }),\n AGENT_CUSTOM_PROVIDER_HOST_DENYLIST: str({\n desc: 'Comma-separated hosts and IP ranges that custom model providers may not call. Accepts exact hosts, suffix patterns such as .internal.example or *.internal.example, IP literals, and CIDR blocks such as 10.0.0.0/8.',\n default: '',\n }),\n AGENT_PI_ENABLED_TOOL_PACKAGES: str({\n desc: 'Comma-separated optional Pi tool packages enabled for this deployment. Defaults to pi-web-access so Pi web access is available. Set it to an empty value to enable only Pi built-in tools. Accepted values: pi-web-access.',\n default: 'pi-web-access',\n }),\n AGENT_PI_WEB_SEARCH_ENABLED: bool({\n desc: 'Enables Pi web search tools when pi-web-access is enabled. Set it to false to disable web_search and get_search_content while keeping fetch_content available.',\n default: true,\n }),\n});\n\nassertInstanceDefaultModelProviderApiKeyConfig();\n\nexport const harnessToolDeploymentConfig = buildHarnessToolDeploymentConfig({\n piEnabledToolPackages: config.AGENT_PI_ENABLED_TOOL_PACKAGES,\n piWebSearchEnabled: config.AGENT_PI_WEB_SEARCH_ENABLED,\n});\n\nfunction assertInstanceDefaultModelProviderApiKeyConfig(): void {\n if (!config.AGENT_DEFAULT_PROVIDER_API_KEY) return;\n if (!config.AGENT_DEFAULT_PROVIDER) {\n throw new Error('AGENT_DEFAULT_PROVIDER_API_KEY requires AGENT_DEFAULT_PROVIDER to be set.');\n }\n\n const credentialFields =\n getModelProviderEntry(config.AGENT_DEFAULT_PROVIDER as SupportedModelProviderId)\n ?.credential_fields ?? [];\n const field = credentialFields[0];\n if (credentialFields.length === 1 && field?.key === 'api_key' && field.secret) return;\n\n throw new Error(\n 'AGENT_DEFAULT_PROVIDER_API_KEY requires AGENT_DEFAULT_PROVIDER to use exactly one secret api_key credential field.',\n );\n}\n"],"names":["agentThinkingSchema","buildHarnessToolDeploymentConfig","getModelProviderEntry","SUPPORTED_MODEL_PROVIDER_IDS","bool","createConfig","num","str","AGENT_THINKING_CHOICES","options","config","AGENT_DEFAULT_PROVIDER","desc","choices","default","undefined","AGENT_DEFAULT_PROVIDER_MODEL","AGENT_DEFAULT_PROVIDER_THINKING","AGENT_DEFAULT_PROVIDER_API_KEY","AGENT_PROVIDER_VALIDATION_TIMEOUT_MS","AGENT_CUSTOM_PROVIDER_ALLOW_PRIVATE_NETWORKS","AGENT_CUSTOM_PROVIDER_HOST_DENYLIST","AGENT_PI_ENABLED_TOOL_PACKAGES","AGENT_PI_WEB_SEARCH_ENABLED","assertInstanceDefaultModelProviderApiKeyConfig","harnessToolDeploymentConfig","piEnabledToolPackages","piWebSearchEnabled","Error","credentialFields","credential_fields","field","length","key","secret"],"mappings":"AAAA,SACEA,mBAAmB,EACnBC,gCAAgC,EAChCC,qBAAqB,EACrBC,4BAA4B,QAEvB,yBAAyB;AAChC,SAAQC,IAAI,EAAEC,YAAY,EAAEC,GAAG,EAAEC,GAAG,QAAO,kBAAkB;AAE7D,MAAMC,yBAAyBR,oBAAoBS,OAAO;AAE1D,OAAO,MAAMC,SAASL,aAAa;IACjCM,wBAAwBJ,IAAI;QAC1BK,MAAM;QACNC,SAASV;QACTW,SAASC;IACX;IACAC,8BAA8BT,IAAI;QAChCK,MAAM;QACNE,SAASC;IACX;IACAE,iCAAiCV,IAAI;QACnCK,MAAM;QACNC,SAASL;QACTM,SAASC;IACX;IACAG,gCAAgCX,IAAI;QAClCK,MAAM;QACNE,SAASC;IACX;IACAI,sCAAsCb,IAAI;QACxCM,MAAM;QACNE,SAAS;IACX;IACAM,8CAA8ChB,KAAK;QACjDQ,MAAM;QACNE,SAAS;IACX;IACAO,qCAAqCd,IAAI;QACvCK,MAAM;QACNE,SAAS;IACX;IACAQ,gCAAgCf,IAAI;QAClCK,MAAM;QACNE,SAAS;IACX;IACAS,6BAA6BnB,KAAK;QAChCQ,MAAM;QACNE,SAAS;IACX;AACF,GAAG;AAEHU;AAEA,OAAO,MAAMC,8BAA8BxB,iCAAiC;IAC1EyB,uBAAuBhB,OAAOY,8BAA8B;IAC5DK,oBAAoBjB,OAAOa,2BAA2B;AACxD,GAAG;AAEH,SAASC;IACP,IAAI,CAACd,OAAOQ,8BAA8B,EAAE;IAC5C,IAAI,CAACR,OAAOC,sBAAsB,EAAE;QAClC,MAAM,IAAIiB,MAAM;IAClB;IAEA,MAAMC,mBACJ3B,sBAAsBQ,OAAOC,sBAAsB,GAC/CmB,qBAAqB,EAAE;IAC7B,MAAMC,QAAQF,gBAAgB,CAAC,EAAE;IACjC,IAAIA,iBAAiBG,MAAM,KAAK,KAAKD,OAAOE,QAAQ,aAAaF,MAAMG,MAAM,EAAE;IAE/E,MAAM,IAAIN,MACR;AAEJ"}
@@ -0,0 +1,10 @@
1
+ import type { SupportedModelProviderId } from '@shipfox/api-agent-dto';
2
+ export declare function agentSystemNamespace(providerId: string): string;
3
+ export declare function toStoreKey(fieldKey: string): string;
4
+ export declare function customCredentialToStoreKey(fieldKey: string): string;
5
+ export declare function customStoreKeyToRuntimeKey(storeKey: string): string;
6
+ export declare function customCredentialsToStoreValues(credentials: Record<string, string>): Record<string, string>;
7
+ export declare function storeValuesToCustomRuntimeCredentials(values: Record<string, string>): Record<string, string>;
8
+ export declare function credentialsToStoreValues(providerId: SupportedModelProviderId, credentials: Record<string, string>): Record<string, string>;
9
+ export declare function storeValuesToRuntimeCredentials(providerId: SupportedModelProviderId, values: Record<string, string>): Record<string, string>;
10
+ //# sourceMappingURL=credential-fingerprints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-fingerprints.d.ts","sourceRoot":"","sources":["../../src/core/credential-fingerprints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,wBAAwB,CAAC;AAIrE,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKnE;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOnE;AAED,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIxB;AAED,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIxB;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,wBAAwB,EACpC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxB;AAED,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,wBAAwB,EACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxB"}
@@ -0,0 +1,65 @@
1
+ import { getModelProviderEntry } from '@shipfox/api-agent-dto';
2
+ import { UnsupportedModelProviderError } from './errors.js';
3
+ export function agentSystemNamespace(providerId) {
4
+ return `system/agent/model-provider/${providerId}`;
5
+ }
6
+ export function toStoreKey(fieldKey) {
7
+ return fieldKey.toUpperCase();
8
+ }
9
+ export function customCredentialToStoreKey(fieldKey) {
10
+ if (fieldKey === 'api_key') return 'API_KEY';
11
+ if (fieldKey.startsWith('header:')) return `HEADER_${encodeStoreKey(fieldKey.slice('header:'.length))}`;
12
+ return `CREDENTIAL_${encodeStoreKey(fieldKey)}`;
13
+ }
14
+ export function customStoreKeyToRuntimeKey(storeKey) {
15
+ if (storeKey === 'API_KEY') return 'api_key';
16
+ if (storeKey.startsWith('HEADER_')) return `header:${decodeStoreKey(storeKey.slice('HEADER_'.length))}`;
17
+ if (storeKey.startsWith('CREDENTIAL_')) return decodeStoreKey(storeKey.slice('CREDENTIAL_'.length));
18
+ return storeKey.toLowerCase();
19
+ }
20
+ export function customCredentialsToStoreValues(credentials) {
21
+ return Object.fromEntries(Object.entries(credentials).map(([key, value])=>[
22
+ customCredentialToStoreKey(key),
23
+ value
24
+ ]));
25
+ }
26
+ export function storeValuesToCustomRuntimeCredentials(values) {
27
+ return Object.fromEntries(Object.entries(values).map(([key, value])=>[
28
+ customStoreKeyToRuntimeKey(key),
29
+ value
30
+ ]));
31
+ }
32
+ export function credentialsToStoreValues(providerId, credentials) {
33
+ const entry = getSupportedModelProviderEntry(providerId);
34
+ return Object.fromEntries(entry.credential_fields.map((field)=>[
35
+ toStoreKey(field.key),
36
+ credentials[field.key] ?? ''
37
+ ]));
38
+ }
39
+ export function storeValuesToRuntimeCredentials(providerId, values) {
40
+ const entry = getSupportedModelProviderEntry(providerId);
41
+ return Object.fromEntries(entry.credential_fields.flatMap((field)=>{
42
+ const value = values[toStoreKey(field.key)];
43
+ return value === undefined ? [] : [
44
+ [
45
+ field.key,
46
+ value
47
+ ]
48
+ ];
49
+ }));
50
+ }
51
+ function getSupportedModelProviderEntry(providerId) {
52
+ const entry = getModelProviderEntry(providerId);
53
+ if (entry === undefined || entry.support_status !== 'supported') {
54
+ throw new UnsupportedModelProviderError(providerId);
55
+ }
56
+ return entry;
57
+ }
58
+ function encodeStoreKey(value) {
59
+ return Buffer.from(value, 'utf8').toString('hex').toUpperCase();
60
+ }
61
+ function decodeStoreKey(value) {
62
+ return Buffer.from(value, 'hex').toString('utf8');
63
+ }
64
+
65
+ //# sourceMappingURL=credential-fingerprints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/credential-fingerprints.ts"],"sourcesContent":["import type {SupportedModelProviderId} from '@shipfox/api-agent-dto';\nimport {getModelProviderEntry} from '@shipfox/api-agent-dto';\nimport {UnsupportedModelProviderError} from './errors.js';\n\nexport function agentSystemNamespace(providerId: string): string {\n return `system/agent/model-provider/${providerId}`;\n}\n\nexport function toStoreKey(fieldKey: string): string {\n return fieldKey.toUpperCase();\n}\n\nexport function customCredentialToStoreKey(fieldKey: string): string {\n if (fieldKey === 'api_key') return 'API_KEY';\n if (fieldKey.startsWith('header:'))\n return `HEADER_${encodeStoreKey(fieldKey.slice('header:'.length))}`;\n return `CREDENTIAL_${encodeStoreKey(fieldKey)}`;\n}\n\nexport function customStoreKeyToRuntimeKey(storeKey: string): string {\n if (storeKey === 'API_KEY') return 'api_key';\n if (storeKey.startsWith('HEADER_'))\n return `header:${decodeStoreKey(storeKey.slice('HEADER_'.length))}`;\n if (storeKey.startsWith('CREDENTIAL_'))\n return decodeStoreKey(storeKey.slice('CREDENTIAL_'.length));\n return storeKey.toLowerCase();\n}\n\nexport function customCredentialsToStoreValues(\n credentials: Record<string, string>,\n): Record<string, string> {\n return Object.fromEntries(\n Object.entries(credentials).map(([key, value]) => [customCredentialToStoreKey(key), value]),\n );\n}\n\nexport function storeValuesToCustomRuntimeCredentials(\n values: Record<string, string>,\n): Record<string, string> {\n return Object.fromEntries(\n Object.entries(values).map(([key, value]) => [customStoreKeyToRuntimeKey(key), value]),\n );\n}\n\nexport function credentialsToStoreValues(\n providerId: SupportedModelProviderId,\n credentials: Record<string, string>,\n): Record<string, string> {\n const entry = getSupportedModelProviderEntry(providerId);\n\n return Object.fromEntries(\n entry.credential_fields.map((field) => [toStoreKey(field.key), credentials[field.key] ?? '']),\n );\n}\n\nexport function storeValuesToRuntimeCredentials(\n providerId: SupportedModelProviderId,\n values: Record<string, string>,\n): Record<string, string> {\n const entry = getSupportedModelProviderEntry(providerId);\n\n return Object.fromEntries(\n entry.credential_fields.flatMap((field) => {\n const value = values[toStoreKey(field.key)];\n return value === undefined ? [] : [[field.key, value]];\n }),\n );\n}\n\nfunction getSupportedModelProviderEntry(providerId: SupportedModelProviderId) {\n const entry = getModelProviderEntry(providerId);\n if (entry === undefined || entry.support_status !== 'supported') {\n throw new UnsupportedModelProviderError(providerId);\n }\n return entry;\n}\n\nfunction encodeStoreKey(value: string): string {\n return Buffer.from(value, 'utf8').toString('hex').toUpperCase();\n}\n\nfunction decodeStoreKey(value: string): string {\n return Buffer.from(value, 'hex').toString('utf8');\n}\n"],"names":["getModelProviderEntry","UnsupportedModelProviderError","agentSystemNamespace","providerId","toStoreKey","fieldKey","toUpperCase","customCredentialToStoreKey","startsWith","encodeStoreKey","slice","length","customStoreKeyToRuntimeKey","storeKey","decodeStoreKey","toLowerCase","customCredentialsToStoreValues","credentials","Object","fromEntries","entries","map","key","value","storeValuesToCustomRuntimeCredentials","values","credentialsToStoreValues","entry","getSupportedModelProviderEntry","credential_fields","field","storeValuesToRuntimeCredentials","flatMap","undefined","support_status","Buffer","from","toString"],"mappings":"AACA,SAAQA,qBAAqB,QAAO,yBAAyB;AAC7D,SAAQC,6BAA6B,QAAO,cAAc;AAE1D,OAAO,SAASC,qBAAqBC,UAAkB;IACrD,OAAO,CAAC,4BAA4B,EAAEA,YAAY;AACpD;AAEA,OAAO,SAASC,WAAWC,QAAgB;IACzC,OAAOA,SAASC,WAAW;AAC7B;AAEA,OAAO,SAASC,2BAA2BF,QAAgB;IACzD,IAAIA,aAAa,WAAW,OAAO;IACnC,IAAIA,SAASG,UAAU,CAAC,YACtB,OAAO,CAAC,OAAO,EAAEC,eAAeJ,SAASK,KAAK,CAAC,UAAUC,MAAM,IAAI;IACrE,OAAO,CAAC,WAAW,EAAEF,eAAeJ,WAAW;AACjD;AAEA,OAAO,SAASO,2BAA2BC,QAAgB;IACzD,IAAIA,aAAa,WAAW,OAAO;IACnC,IAAIA,SAASL,UAAU,CAAC,YACtB,OAAO,CAAC,OAAO,EAAEM,eAAeD,SAASH,KAAK,CAAC,UAAUC,MAAM,IAAI;IACrE,IAAIE,SAASL,UAAU,CAAC,gBACtB,OAAOM,eAAeD,SAASH,KAAK,CAAC,cAAcC,MAAM;IAC3D,OAAOE,SAASE,WAAW;AAC7B;AAEA,OAAO,SAASC,+BACdC,WAAmC;IAEnC,OAAOC,OAAOC,WAAW,CACvBD,OAAOE,OAAO,CAACH,aAAaI,GAAG,CAAC,CAAC,CAACC,KAAKC,MAAM,GAAK;YAAChB,2BAA2Be;YAAMC;SAAM;AAE9F;AAEA,OAAO,SAASC,sCACdC,MAA8B;IAE9B,OAAOP,OAAOC,WAAW,CACvBD,OAAOE,OAAO,CAACK,QAAQJ,GAAG,CAAC,CAAC,CAACC,KAAKC,MAAM,GAAK;YAACX,2BAA2BU;YAAMC;SAAM;AAEzF;AAEA,OAAO,SAASG,yBACdvB,UAAoC,EACpCc,WAAmC;IAEnC,MAAMU,QAAQC,+BAA+BzB;IAE7C,OAAOe,OAAOC,WAAW,CACvBQ,MAAME,iBAAiB,CAACR,GAAG,CAAC,CAACS,QAAU;YAAC1B,WAAW0B,MAAMR,GAAG;YAAGL,WAAW,CAACa,MAAMR,GAAG,CAAC,IAAI;SAAG;AAEhG;AAEA,OAAO,SAASS,gCACd5B,UAAoC,EACpCsB,MAA8B;IAE9B,MAAME,QAAQC,+BAA+BzB;IAE7C,OAAOe,OAAOC,WAAW,CACvBQ,MAAME,iBAAiB,CAACG,OAAO,CAAC,CAACF;QAC/B,MAAMP,QAAQE,MAAM,CAACrB,WAAW0B,MAAMR,GAAG,EAAE;QAC3C,OAAOC,UAAUU,YAAY,EAAE,GAAG;YAAC;gBAACH,MAAMR,GAAG;gBAAEC;aAAM;SAAC;IACxD;AAEJ;AAEA,SAASK,+BAA+BzB,UAAoC;IAC1E,MAAMwB,QAAQ3B,sBAAsBG;IACpC,IAAIwB,UAAUM,aAAaN,MAAMO,cAAc,KAAK,aAAa;QAC/D,MAAM,IAAIjC,8BAA8BE;IAC1C;IACA,OAAOwB;AACT;AAEA,SAASlB,eAAec,KAAa;IACnC,OAAOY,OAAOC,IAAI,CAACb,OAAO,QAAQc,QAAQ,CAAC,OAAO/B,WAAW;AAC/D;AAEA,SAASQ,eAAeS,KAAa;IACnC,OAAOY,OAAOC,IAAI,CAACb,OAAO,OAAOc,QAAQ,CAAC;AAC5C"}
@@ -0,0 +1,26 @@
1
+ import { type CreateCustomModelProviderBodyDto, type DiscoverCustomModelProviderModelsBodyDto, type DiscoverCustomModelProviderModelsBySlugBodyDto, type ModelProviderRef, type UpdateCustomModelProviderBodyDto } from '@shipfox/api-agent-dto';
2
+ import type { ModelProviderConfig } from './entities/model-provider-config.js';
3
+ import { probeCustomModelProviderCredentials } from './model-provider-validation.js';
4
+ export interface CreateCustomModelProviderConfigParams {
5
+ workspaceId: string;
6
+ body: CreateCustomModelProviderBodyDto;
7
+ setAsDefault?: boolean | undefined;
8
+ signal?: AbortSignal | undefined;
9
+ }
10
+ export interface UpdateCustomModelProviderConfigParams {
11
+ workspaceId: string;
12
+ providerId: ModelProviderRef;
13
+ body: UpdateCustomModelProviderBodyDto;
14
+ signal?: AbortSignal | undefined;
15
+ }
16
+ export interface CustomModelProviderConfigServiceOptions {
17
+ probe?: typeof probeCustomModelProviderCredentials | undefined;
18
+ }
19
+ export declare function createCustomModelProviderConfig(params: CreateCustomModelProviderConfigParams, options?: CustomModelProviderConfigServiceOptions): Promise<ModelProviderConfig>;
20
+ export declare function updateCustomModelProviderConfig(params: UpdateCustomModelProviderConfigParams, options?: CustomModelProviderConfigServiceOptions): Promise<ModelProviderConfig>;
21
+ export declare function resolveCustomModelProviderDiscoveryParams(params: {
22
+ workspaceId: string;
23
+ providerId: ModelProviderRef;
24
+ body: DiscoverCustomModelProviderModelsBySlugBodyDto;
25
+ }): Promise<DiscoverCustomModelProviderModelsBodyDto>;
26
+ //# sourceMappingURL=custom-model-provider-config-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-model-provider-config-service.d.ts","sourceRoot":"","sources":["../../src/core/custom-model-provider-config-service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gCAAgC,EAKrC,KAAK,wCAAwC,EAC7C,KAAK,8CAA8C,EACnD,KAAK,gBAAgB,EACrB,KAAK,gCAAgC,EAEtC,MAAM,wBAAwB,CAAC;AAgBhC,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,qCAAqC,CAAC;AAQ7E,OAAO,EAEL,mCAAmC,EAEpC,MAAM,gCAAgC,CAAC;AAExC,MAAM,WAAW,qCAAqC;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,gCAAgC,CAAC;IACvC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,qCAAqC;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,IAAI,EAAE,gCAAgC,CAAC;IACvC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,uCAAuC;IACtD,KAAK,CAAC,EAAE,OAAO,mCAAmC,GAAG,SAAS,CAAC;CAChE;AASD,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,qCAAqC,EAC7C,OAAO,GAAE,uCAA4C,GACpD,OAAO,CAAC,mBAAmB,CAAC,CAyE9B;AAED,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,qCAAqC,EAC7C,OAAO,GAAE,uCAA4C,GACpD,OAAO,CAAC,mBAAmB,CAAC,CAoG9B;AAED,wBAAsB,yCAAyC,CAAC,MAAM,EAAE;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,IAAI,EAAE,8CAA8C,CAAC;CACtD,GAAG,OAAO,CAAC,wCAAwC,CAAC,CA2BpD"}