@shipfox/api-agent 12.0.0 → 13.1.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 (136) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +29 -0
  3. package/dist/config.d.ts +6 -2
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +72 -7
  6. package/dist/config.js.map +1 -1
  7. package/dist/core/errors.d.ts +4 -0
  8. package/dist/core/errors.d.ts.map +1 -1
  9. package/dist/core/errors.js +6 -0
  10. package/dist/core/errors.js.map +1 -1
  11. package/dist/core/index.d.ts +2 -1
  12. package/dist/core/index.d.ts.map +1 -1
  13. package/dist/core/index.js +2 -1
  14. package/dist/core/index.js.map +1 -1
  15. package/dist/core/model-provider-catalog.d.ts +5 -2
  16. package/dist/core/model-provider-catalog.d.ts.map +1 -1
  17. package/dist/core/model-provider-catalog.js +33 -1
  18. package/dist/core/model-provider-catalog.js.map +1 -1
  19. package/dist/core/resolve-agent-config.d.ts +4 -2
  20. package/dist/core/resolve-agent-config.d.ts.map +1 -1
  21. package/dist/core/resolve-agent-config.js +86 -31
  22. package/dist/core/resolve-agent-config.js.map +1 -1
  23. package/dist/core/resolve-runtime-credentials.d.ts +6 -2
  24. package/dist/core/resolve-runtime-credentials.d.ts.map +1 -1
  25. package/dist/core/resolve-runtime-credentials.js +59 -3
  26. package/dist/core/resolve-runtime-credentials.js.map +1 -1
  27. package/dist/core/validation-catalog.d.ts +2 -1
  28. package/dist/core/validation-catalog.d.ts.map +1 -1
  29. package/dist/core/validation-catalog.js +65 -17
  30. package/dist/core/validation-catalog.js.map +1 -1
  31. package/dist/core/workspace-agent-defaults-resolver.d.ts +2 -1
  32. package/dist/core/workspace-agent-defaults-resolver.d.ts.map +1 -1
  33. package/dist/core/workspace-agent-defaults-resolver.js +4 -2
  34. package/dist/core/workspace-agent-defaults-resolver.js.map +1 -1
  35. package/dist/core/workspace-provider-policy.d.ts +7 -0
  36. package/dist/core/workspace-provider-policy.d.ts.map +1 -0
  37. package/dist/core/workspace-provider-policy.js +10 -0
  38. package/dist/core/workspace-provider-policy.js.map +1 -0
  39. package/dist/db/db.d.ts +10 -10
  40. package/dist/db/schema/agent-workspace-settings.d.ts +1 -1
  41. package/dist/db/schema/model-provider-configs.d.ts +4 -4
  42. package/dist/index.d.ts +3 -1
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +15 -4
  45. package/dist/index.js.map +1 -1
  46. package/dist/metrics/instance.d.ts +4 -4
  47. package/dist/presentation/e2eRoutes/create-model-provider.d.ts +2 -1
  48. package/dist/presentation/e2eRoutes/create-model-provider.d.ts.map +1 -1
  49. package/dist/presentation/e2eRoutes/create-model-provider.js +7 -1
  50. package/dist/presentation/e2eRoutes/create-model-provider.js.map +1 -1
  51. package/dist/presentation/e2eRoutes/index.d.ts +2 -1
  52. package/dist/presentation/e2eRoutes/index.d.ts.map +1 -1
  53. package/dist/presentation/e2eRoutes/index.js +4 -2
  54. package/dist/presentation/e2eRoutes/index.js.map +1 -1
  55. package/dist/presentation/inter-module.d.ts +3 -0
  56. package/dist/presentation/inter-module.d.ts.map +1 -1
  57. package/dist/presentation/inter-module.js +22 -6
  58. package/dist/presentation/inter-module.js.map +1 -1
  59. package/dist/presentation/routes/create-custom-model-provider.d.ts +2 -1
  60. package/dist/presentation/routes/create-custom-model-provider.d.ts.map +1 -1
  61. package/dist/presentation/routes/create-custom-model-provider.js +5 -2
  62. package/dist/presentation/routes/create-custom-model-provider.js.map +1 -1
  63. package/dist/presentation/routes/delete-model-provider-config.d.ts +2 -1
  64. package/dist/presentation/routes/delete-model-provider-config.d.ts.map +1 -1
  65. package/dist/presentation/routes/delete-model-provider-config.js +7 -2
  66. package/dist/presentation/routes/delete-model-provider-config.js.map +1 -1
  67. package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.d.ts +2 -1
  68. package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.d.ts.map +1 -1
  69. package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.js +5 -2
  70. package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.js.map +1 -1
  71. package/dist/presentation/routes/discover-custom-model-provider-models.d.ts +2 -0
  72. package/dist/presentation/routes/discover-custom-model-provider-models.d.ts.map +1 -1
  73. package/dist/presentation/routes/discover-custom-model-provider-models.js +29 -23
  74. package/dist/presentation/routes/discover-custom-model-provider-models.js.map +1 -1
  75. package/dist/presentation/routes/errors.d.ts.map +1 -1
  76. package/dist/presentation/routes/errors.js +10 -1
  77. package/dist/presentation/routes/errors.js.map +1 -1
  78. package/dist/presentation/routes/index.d.ts +5 -1
  79. package/dist/presentation/routes/index.d.ts.map +1 -1
  80. package/dist/presentation/routes/index.js +21 -14
  81. package/dist/presentation/routes/index.js.map +1 -1
  82. package/dist/presentation/routes/list-model-provider-catalog.d.ts +5 -0
  83. package/dist/presentation/routes/list-model-provider-catalog.d.ts.map +1 -1
  84. package/dist/presentation/routes/list-model-provider-catalog.js +21 -13
  85. package/dist/presentation/routes/list-model-provider-catalog.js.map +1 -1
  86. package/dist/presentation/routes/set-default-model-provider.d.ts +2 -0
  87. package/dist/presentation/routes/set-default-model-provider.d.ts.map +1 -1
  88. package/dist/presentation/routes/set-default-model-provider.js +44 -38
  89. package/dist/presentation/routes/set-default-model-provider.js.map +1 -1
  90. package/dist/presentation/routes/update-custom-model-provider.d.ts +2 -1
  91. package/dist/presentation/routes/update-custom-model-provider.d.ts.map +1 -1
  92. package/dist/presentation/routes/update-custom-model-provider.js +5 -2
  93. package/dist/presentation/routes/update-custom-model-provider.js.map +1 -1
  94. package/dist/presentation/routes/update-model-provider-default-model.d.ts +2 -0
  95. package/dist/presentation/routes/update-model-provider-default-model.d.ts.map +1 -1
  96. package/dist/presentation/routes/update-model-provider-default-model.js +35 -29
  97. package/dist/presentation/routes/update-model-provider-default-model.js.map +1 -1
  98. package/dist/presentation/routes/upsert-model-provider-config.d.ts +2 -1
  99. package/dist/presentation/routes/upsert-model-provider-config.d.ts.map +1 -1
  100. package/dist/presentation/routes/upsert-model-provider-config.js +5 -2
  101. package/dist/presentation/routes/upsert-model-provider-config.js.map +1 -1
  102. package/dist/tsconfig.test.tsbuildinfo +1 -1
  103. package/package.json +6 -6
  104. package/src/config.test.ts +165 -4
  105. package/src/config.ts +94 -9
  106. package/src/core/errors.ts +7 -0
  107. package/src/core/index.ts +5 -0
  108. package/src/core/model-provider-catalog.test.ts +30 -0
  109. package/src/core/model-provider-catalog.ts +41 -1
  110. package/src/core/resolve-agent-config.test.ts +92 -0
  111. package/src/core/resolve-agent-config.ts +152 -43
  112. package/src/core/resolve-runtime-credentials.test.ts +169 -1
  113. package/src/core/resolve-runtime-credentials.ts +68 -3
  114. package/src/core/validation-catalog.test.ts +54 -0
  115. package/src/core/validation-catalog.ts +124 -19
  116. package/src/core/workspace-agent-defaults-resolver.ts +7 -2
  117. package/src/core/workspace-provider-policy.ts +19 -0
  118. package/src/index.ts +25 -4
  119. package/src/presentation/e2eRoutes/create-model-provider.ts +11 -1
  120. package/src/presentation/e2eRoutes/index.ts +9 -2
  121. package/src/presentation/inter-module.test.ts +51 -0
  122. package/src/presentation/inter-module.ts +38 -6
  123. package/src/presentation/routes/create-custom-model-provider.ts +10 -2
  124. package/src/presentation/routes/delete-model-provider-config.ts +12 -2
  125. package/src/presentation/routes/discover-custom-model-provider-models-by-slug.ts +7 -1
  126. package/src/presentation/routes/discover-custom-model-provider-models.ts +30 -18
  127. package/src/presentation/routes/errors.ts +11 -0
  128. package/src/presentation/routes/index.ts +32 -14
  129. package/src/presentation/routes/list-model-provider-catalog.ts +32 -11
  130. package/src/presentation/routes/model-provider-catalog.test.ts +49 -1
  131. package/src/presentation/routes/model-provider-config.test.ts +62 -1
  132. package/src/presentation/routes/set-default-model-provider.ts +42 -31
  133. package/src/presentation/routes/update-custom-model-provider.ts +10 -2
  134. package/src/presentation/routes/update-model-provider-default-model.ts +37 -26
  135. package/src/presentation/routes/upsert-model-provider-config.ts +10 -2
  136. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-agent-defaults-resolver.d.ts","sourceRoot":"","sources":["../../src/core/workspace-agent-defaults-resolver.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAA+B,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAGnG,wBAAsB,oCAAoC,CACxD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,CAAC,CA6BhC"}
1
+ {"version":3,"file":"workspace-agent-defaults-resolver.d.ts","sourceRoot":"","sources":["../../src/core/workspace-agent-defaults-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,oBAAoB,EAEpB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EAA+B,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAGnG,wBAAsB,oCAAoC,CACxD,WAAW,EAAE,MAAM,EACnB,eAAe,CAAC,EAAE,oBAAoB,GAAG,SAAS,EAClD,kBAAkB,CAAC,EAAE,wBAAwB,GAAG,SAAS,GACxD,OAAO,CAAC,qBAAqB,CAAC,CA+BhC"}
@@ -1,7 +1,7 @@
1
1
  import { config } from '#config.js';
2
2
  import { getAgentWorkspaceDefaultsSnapshot } from '#db/index.js';
3
3
  import { resolveAgentConfig } from './resolve-agent-config.js';
4
- export async function createWorkspaceAgentDefaultsResolver(workspaceId) {
4
+ export async function createWorkspaceAgentDefaultsResolver(workspaceId, managedProvider, workspaceProviders) {
5
5
  const snapshot = await getAgentWorkspaceDefaultsSnapshot(workspaceId);
6
6
  const workspaceProviderConfigs = new Map();
7
7
  for (const providerConfig of snapshot.providerConfigs){
@@ -18,7 +18,9 @@ export async function createWorkspaceAgentDefaultsResolver(workspaceId) {
18
18
  workspaceProviderConfigs,
19
19
  instanceDefaultProvider: config.AGENT_DEFAULT_PROVIDER,
20
20
  instanceDefaultModel: config.AGENT_DEFAULT_PROVIDER_MODEL,
21
- instanceDefaultThinking: config.AGENT_DEFAULT_PROVIDER_THINKING
21
+ instanceDefaultThinking: config.AGENT_DEFAULT_PROVIDER_THINKING,
22
+ managedProvider,
23
+ workspaceProviders
22
24
  };
23
25
  return (step)=>resolveAgentConfig(step, ctx);
24
26
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/workspace-agent-defaults-resolver.ts"],"sourcesContent":["import type {\n AgentThinking,\n ModelProviderRef,\n SupportedModelProviderId,\n} from '@shipfox/api-agent-dto';\nimport {config} from '#config.js';\nimport {getAgentWorkspaceDefaultsSnapshot} from '#db/index.js';\nimport type {AgentConfigResolutionContext, AgentDefaultsResolver} from './resolve-agent-config.js';\nimport {resolveAgentConfig} from './resolve-agent-config.js';\n\nexport async function createWorkspaceAgentDefaultsResolver(\n workspaceId: string,\n): Promise<AgentDefaultsResolver> {\n const snapshot = await getAgentWorkspaceDefaultsSnapshot(workspaceId);\n const workspaceProviderConfigs = new Map<\n ModelProviderRef,\n {\n kind: 'builtin' | 'custom';\n defaultModel: string | null;\n defaultThinking: AgentThinking;\n models: (typeof snapshot.providerConfigs)[number]['models'];\n }\n >();\n for (const providerConfig of snapshot.providerConfigs) {\n workspaceProviderConfigs.set(providerConfig.providerId, {\n kind: providerConfig.kind,\n defaultModel: providerConfig.defaultModel,\n defaultThinking: providerConfig.defaultThinking,\n models: providerConfig.models,\n });\n }\n const ctx: AgentConfigResolutionContext = {\n workspaceDefaultHarnessId: snapshot.defaultHarnessId ?? null,\n workspaceDefaultProviderId: snapshot.defaultProviderId ?? null,\n workspaceProviderConfigs,\n instanceDefaultProvider: config.AGENT_DEFAULT_PROVIDER as SupportedModelProviderId | undefined,\n instanceDefaultModel: config.AGENT_DEFAULT_PROVIDER_MODEL,\n instanceDefaultThinking: config.AGENT_DEFAULT_PROVIDER_THINKING as AgentThinking | undefined,\n };\n\n return (step) => resolveAgentConfig(step, ctx);\n}\n"],"names":["config","getAgentWorkspaceDefaultsSnapshot","resolveAgentConfig","createWorkspaceAgentDefaultsResolver","workspaceId","snapshot","workspaceProviderConfigs","Map","providerConfig","providerConfigs","set","providerId","kind","defaultModel","defaultThinking","models","ctx","workspaceDefaultHarnessId","defaultHarnessId","workspaceDefaultProviderId","defaultProviderId","instanceDefaultProvider","AGENT_DEFAULT_PROVIDER","instanceDefaultModel","AGENT_DEFAULT_PROVIDER_MODEL","instanceDefaultThinking","AGENT_DEFAULT_PROVIDER_THINKING","step"],"mappings":"AAKA,SAAQA,MAAM,QAAO,aAAa;AAClC,SAAQC,iCAAiC,QAAO,eAAe;AAE/D,SAAQC,kBAAkB,QAAO,4BAA4B;AAE7D,OAAO,eAAeC,qCACpBC,WAAmB;IAEnB,MAAMC,WAAW,MAAMJ,kCAAkCG;IACzD,MAAME,2BAA2B,IAAIC;IASrC,KAAK,MAAMC,kBAAkBH,SAASI,eAAe,CAAE;QACrDH,yBAAyBI,GAAG,CAACF,eAAeG,UAAU,EAAE;YACtDC,MAAMJ,eAAeI,IAAI;YACzBC,cAAcL,eAAeK,YAAY;YACzCC,iBAAiBN,eAAeM,eAAe;YAC/CC,QAAQP,eAAeO,MAAM;QAC/B;IACF;IACA,MAAMC,MAAoC;QACxCC,2BAA2BZ,SAASa,gBAAgB,IAAI;QACxDC,4BAA4Bd,SAASe,iBAAiB,IAAI;QAC1Dd;QACAe,yBAAyBrB,OAAOsB,sBAAsB;QACtDC,sBAAsBvB,OAAOwB,4BAA4B;QACzDC,yBAAyBzB,OAAO0B,+BAA+B;IACjE;IAEA,OAAO,CAACC,OAASzB,mBAAmByB,MAAMX;AAC5C"}
1
+ {"version":3,"sources":["../../src/core/workspace-agent-defaults-resolver.ts"],"sourcesContent":["import type {\n AgentThinking,\n ManagedModelProvider,\n ModelProviderRef,\n WorkspaceProvidersPolicy,\n} from '@shipfox/api-agent-dto';\nimport {config} from '#config.js';\nimport {getAgentWorkspaceDefaultsSnapshot} from '#db/index.js';\nimport type {AgentConfigResolutionContext, AgentDefaultsResolver} from './resolve-agent-config.js';\nimport {resolveAgentConfig} from './resolve-agent-config.js';\n\nexport async function createWorkspaceAgentDefaultsResolver(\n workspaceId: string,\n managedProvider?: ManagedModelProvider | undefined,\n workspaceProviders?: WorkspaceProvidersPolicy | undefined,\n): Promise<AgentDefaultsResolver> {\n const snapshot = await getAgentWorkspaceDefaultsSnapshot(workspaceId);\n const workspaceProviderConfigs = new Map<\n ModelProviderRef,\n {\n kind: 'builtin' | 'custom';\n defaultModel: string | null;\n defaultThinking: AgentThinking;\n models: (typeof snapshot.providerConfigs)[number]['models'];\n }\n >();\n for (const providerConfig of snapshot.providerConfigs) {\n workspaceProviderConfigs.set(providerConfig.providerId, {\n kind: providerConfig.kind,\n defaultModel: providerConfig.defaultModel,\n defaultThinking: providerConfig.defaultThinking,\n models: providerConfig.models,\n });\n }\n const ctx: AgentConfigResolutionContext = {\n workspaceDefaultHarnessId: snapshot.defaultHarnessId ?? null,\n workspaceDefaultProviderId: snapshot.defaultProviderId ?? null,\n workspaceProviderConfigs,\n instanceDefaultProvider: config.AGENT_DEFAULT_PROVIDER,\n instanceDefaultModel: config.AGENT_DEFAULT_PROVIDER_MODEL,\n instanceDefaultThinking: config.AGENT_DEFAULT_PROVIDER_THINKING as AgentThinking | undefined,\n managedProvider,\n workspaceProviders,\n };\n\n return (step) => resolveAgentConfig(step, ctx);\n}\n"],"names":["config","getAgentWorkspaceDefaultsSnapshot","resolveAgentConfig","createWorkspaceAgentDefaultsResolver","workspaceId","managedProvider","workspaceProviders","snapshot","workspaceProviderConfigs","Map","providerConfig","providerConfigs","set","providerId","kind","defaultModel","defaultThinking","models","ctx","workspaceDefaultHarnessId","defaultHarnessId","workspaceDefaultProviderId","defaultProviderId","instanceDefaultProvider","AGENT_DEFAULT_PROVIDER","instanceDefaultModel","AGENT_DEFAULT_PROVIDER_MODEL","instanceDefaultThinking","AGENT_DEFAULT_PROVIDER_THINKING","step"],"mappings":"AAMA,SAAQA,MAAM,QAAO,aAAa;AAClC,SAAQC,iCAAiC,QAAO,eAAe;AAE/D,SAAQC,kBAAkB,QAAO,4BAA4B;AAE7D,OAAO,eAAeC,qCACpBC,WAAmB,EACnBC,eAAkD,EAClDC,kBAAyD;IAEzD,MAAMC,WAAW,MAAMN,kCAAkCG;IACzD,MAAMI,2BAA2B,IAAIC;IASrC,KAAK,MAAMC,kBAAkBH,SAASI,eAAe,CAAE;QACrDH,yBAAyBI,GAAG,CAACF,eAAeG,UAAU,EAAE;YACtDC,MAAMJ,eAAeI,IAAI;YACzBC,cAAcL,eAAeK,YAAY;YACzCC,iBAAiBN,eAAeM,eAAe;YAC/CC,QAAQP,eAAeO,MAAM;QAC/B;IACF;IACA,MAAMC,MAAoC;QACxCC,2BAA2BZ,SAASa,gBAAgB,IAAI;QACxDC,4BAA4Bd,SAASe,iBAAiB,IAAI;QAC1Dd;QACAe,yBAAyBvB,OAAOwB,sBAAsB;QACtDC,sBAAsBzB,OAAO0B,4BAA4B;QACzDC,yBAAyB3B,OAAO4B,+BAA+B;QAC/DvB;QACAC;IACF;IAEA,OAAO,CAACuB,OAAS3B,mBAAmB2B,MAAMX;AAC5C"}
@@ -0,0 +1,7 @@
1
+ import type { WorkspaceProvidersPolicy } from '@shipfox/api-agent-dto';
2
+ export interface WorkspaceProviderPolicyOptions {
3
+ readonly workspaceProviders: WorkspaceProvidersPolicy;
4
+ readonly managedProviderId?: string | undefined;
5
+ }
6
+ export declare function assertWorkspaceProviderConfigurationEnabled(options: WorkspaceProviderPolicyOptions): void;
7
+ //# sourceMappingURL=workspace-provider-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-provider-policy.d.ts","sourceRoot":"","sources":["../../src/core/workspace-provider-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,wBAAwB,CAAC;AAGrE,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,kBAAkB,EAAE,wBAAwB,CAAC;IACtD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjD;AAED,wBAAgB,2CAA2C,CACzD,OAAO,EAAE,8BAA8B,GACtC,IAAI,CAQN"}
@@ -0,0 +1,10 @@
1
+ import { WorkspaceProvidersDisabledError } from './errors.js';
2
+ export function assertWorkspaceProviderConfigurationEnabled(options) {
3
+ if (options.workspaceProviders !== 'disabled') return;
4
+ if (options.managedProviderId === undefined) {
5
+ throw new Error('workspace provider configuration is disabled but no managed provider is registered');
6
+ }
7
+ throw new WorkspaceProvidersDisabledError(options.managedProviderId);
8
+ }
9
+
10
+ //# sourceMappingURL=workspace-provider-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/workspace-provider-policy.ts"],"sourcesContent":["import type {WorkspaceProvidersPolicy} from '@shipfox/api-agent-dto';\nimport {WorkspaceProvidersDisabledError} from './errors.js';\n\nexport interface WorkspaceProviderPolicyOptions {\n readonly workspaceProviders: WorkspaceProvidersPolicy;\n readonly managedProviderId?: string | undefined;\n}\n\nexport function assertWorkspaceProviderConfigurationEnabled(\n options: WorkspaceProviderPolicyOptions,\n): void {\n if (options.workspaceProviders !== 'disabled') return;\n if (options.managedProviderId === undefined) {\n throw new Error(\n 'workspace provider configuration is disabled but no managed provider is registered',\n );\n }\n throw new WorkspaceProvidersDisabledError(options.managedProviderId);\n}\n"],"names":["WorkspaceProvidersDisabledError","assertWorkspaceProviderConfigurationEnabled","options","workspaceProviders","managedProviderId","undefined","Error"],"mappings":"AACA,SAAQA,+BAA+B,QAAO,cAAc;AAO5D,OAAO,SAASC,4CACdC,OAAuC;IAEvC,IAAIA,QAAQC,kBAAkB,KAAK,YAAY;IAC/C,IAAID,QAAQE,iBAAiB,KAAKC,WAAW;QAC3C,MAAM,IAAIC,MACR;IAEJ;IACA,MAAM,IAAIN,gCAAgCE,QAAQE,iBAAiB;AACrE"}
package/dist/db/db.d.ts CHANGED
@@ -60,7 +60,7 @@ export declare const schema: {
60
60
  tableName: "model_provider_configs";
61
61
  dataType: "string";
62
62
  columnType: "PgEnumColumn";
63
- data: "custom" | "builtin";
63
+ data: "builtin" | "custom";
64
64
  driverParam: string;
65
65
  notNull: true;
66
66
  hasDefault: true;
@@ -94,7 +94,7 @@ export declare const schema: {
94
94
  tableName: "model_provider_configs";
95
95
  dataType: "string";
96
96
  columnType: "PgText";
97
- data: "openai-completions" | "openai-responses" | "anthropic-messages" | "google-generative-ai";
97
+ data: "anthropic-messages" | "google-generative-ai" | "openai-completions" | "openai-responses";
98
98
  driverParam: string;
99
99
  notNull: false;
100
100
  hasDefault: false;
@@ -106,7 +106,7 @@ export declare const schema: {
106
106
  identity: undefined;
107
107
  generated: undefined;
108
108
  }, {}, {
109
- $type: "openai-completions" | "openai-responses" | "anthropic-messages" | "google-generative-ai";
109
+ $type: "anthropic-messages" | "google-generative-ai" | "openai-completions" | "openai-responses";
110
110
  }>;
111
111
  baseUrl: import("drizzle-orm/pg-core").PgColumn<{
112
112
  name: "base_url";
@@ -288,7 +288,7 @@ export declare const schema: {
288
288
  generated: undefined;
289
289
  }, {}, {}>;
290
290
  };
291
- dialect: "pg";
291
+ dialect: 'pg';
292
292
  }>;
293
293
  agentWorkspaceSettings: import("drizzle-orm/pg-core").PgTableWithColumns<{
294
294
  name: "workspace_settings";
@@ -380,7 +380,7 @@ export declare const schema: {
380
380
  generated: undefined;
381
381
  }, {}, {}>;
382
382
  };
383
- dialect: "pg";
383
+ dialect: 'pg';
384
384
  }>;
385
385
  };
386
386
  export declare function db(): NodePgDatabase<{
@@ -444,7 +444,7 @@ export declare function db(): NodePgDatabase<{
444
444
  tableName: "model_provider_configs";
445
445
  dataType: "string";
446
446
  columnType: "PgEnumColumn";
447
- data: "custom" | "builtin";
447
+ data: "builtin" | "custom";
448
448
  driverParam: string;
449
449
  notNull: true;
450
450
  hasDefault: true;
@@ -478,7 +478,7 @@ export declare function db(): NodePgDatabase<{
478
478
  tableName: "model_provider_configs";
479
479
  dataType: "string";
480
480
  columnType: "PgText";
481
- data: "openai-completions" | "openai-responses" | "anthropic-messages" | "google-generative-ai";
481
+ data: "anthropic-messages" | "google-generative-ai" | "openai-completions" | "openai-responses";
482
482
  driverParam: string;
483
483
  notNull: false;
484
484
  hasDefault: false;
@@ -490,7 +490,7 @@ export declare function db(): NodePgDatabase<{
490
490
  identity: undefined;
491
491
  generated: undefined;
492
492
  }, {}, {
493
- $type: "openai-completions" | "openai-responses" | "anthropic-messages" | "google-generative-ai";
493
+ $type: "anthropic-messages" | "google-generative-ai" | "openai-completions" | "openai-responses";
494
494
  }>;
495
495
  baseUrl: import("drizzle-orm/pg-core").PgColumn<{
496
496
  name: "base_url";
@@ -672,7 +672,7 @@ export declare function db(): NodePgDatabase<{
672
672
  generated: undefined;
673
673
  }, {}, {}>;
674
674
  };
675
- dialect: "pg";
675
+ dialect: 'pg';
676
676
  }>;
677
677
  agentWorkspaceSettings: import("drizzle-orm/pg-core").PgTableWithColumns<{
678
678
  name: "workspace_settings";
@@ -764,7 +764,7 @@ export declare function db(): NodePgDatabase<{
764
764
  generated: undefined;
765
765
  }, {}, {}>;
766
766
  };
767
- dialect: "pg";
767
+ dialect: 'pg';
768
768
  }>;
769
769
  }>;
770
770
  export declare function closeDb(): void;
@@ -89,7 +89,7 @@ export declare const agentWorkspaceSettings: import("drizzle-orm/pg-core").PgTab
89
89
  generated: undefined;
90
90
  }, {}, {}>;
91
91
  };
92
- dialect: "pg";
92
+ dialect: 'pg';
93
93
  }>;
94
94
  export type AgentWorkspaceSettingsDb = typeof agentWorkspaceSettings.$inferSelect;
95
95
  export type AgentWorkspaceSettingsCreateDb = typeof agentWorkspaceSettings.$inferInsert;
@@ -60,7 +60,7 @@ export declare const modelProviderConfigs: import("drizzle-orm/pg-core").PgTable
60
60
  tableName: "model_provider_configs";
61
61
  dataType: "string";
62
62
  columnType: "PgEnumColumn";
63
- data: "custom" | "builtin";
63
+ data: "builtin" | "custom";
64
64
  driverParam: string;
65
65
  notNull: true;
66
66
  hasDefault: true;
@@ -94,7 +94,7 @@ export declare const modelProviderConfigs: import("drizzle-orm/pg-core").PgTable
94
94
  tableName: "model_provider_configs";
95
95
  dataType: "string";
96
96
  columnType: "PgText";
97
- data: "openai-completions" | "openai-responses" | "anthropic-messages" | "google-generative-ai";
97
+ data: "anthropic-messages" | "google-generative-ai" | "openai-completions" | "openai-responses";
98
98
  driverParam: string;
99
99
  notNull: false;
100
100
  hasDefault: false;
@@ -106,7 +106,7 @@ export declare const modelProviderConfigs: import("drizzle-orm/pg-core").PgTable
106
106
  identity: undefined;
107
107
  generated: undefined;
108
108
  }, {}, {
109
- $type: "openai-completions" | "openai-responses" | "anthropic-messages" | "google-generative-ai";
109
+ $type: "anthropic-messages" | "google-generative-ai" | "openai-completions" | "openai-responses";
110
110
  }>;
111
111
  baseUrl: import("drizzle-orm/pg-core").PgColumn<{
112
112
  name: "base_url";
@@ -288,7 +288,7 @@ export declare const modelProviderConfigs: import("drizzle-orm/pg-core").PgTable
288
288
  generated: undefined;
289
289
  }, {}, {}>;
290
290
  };
291
- dialect: "pg";
291
+ dialect: 'pg';
292
292
  }>;
293
293
  export type ModelProviderConfigDb = typeof modelProviderConfigs.$inferSelect;
294
294
  export type ModelProviderConfigCreateDb = typeof modelProviderConfigs.$inferInsert;
package/dist/index.d.ts CHANGED
@@ -1,8 +1,10 @@
1
+ import type { ManagedModelProvider } from '@shipfox/api-agent-dto';
1
2
  import type { ShipfoxModule } from '@shipfox/node-module';
2
3
  import type { AgentSecretsClient } from '#core/secrets-client.js';
3
- export { type AgentConfigResolutionContext, type AgentDefaultsResolver, type AgentWorkspaceSettings, buildModelProviderCatalog, type ContextualAgentConfig, catalogDefaultAgentResolver, createCustomModelProviderConfig, createWorkspaceAgentDefaultsResolver, deleteModelProviderConfig, getModelProviderCredentialKeys, getModelProviderEntry, InvalidAgentModelError, InvalidCredentialFieldsError, isReservedModelProviderId, listSupportedModelProviders, type ModelProviderConfig, ModelProviderConfigNotFoundError, ModelProviderValidationError, ModelProviderValidationUnavailableError, modelProviderCredentialKeysMatch, type ResolvedAgentConfig, type ResolveRuntimeCredentialsParams, resolveAgentConfig, resolveRuntimeCredentials, testAndSaveModelProviderConfig, UnsupportedModelProviderError, updateCustomModelProviderConfig, } from '#core/index.js';
4
+ export { type AgentConfigResolutionContext, type AgentDefaultsResolver, type AgentWorkspaceSettings, buildModelProviderCatalog, type ContextualAgentConfig, catalogDefaultAgentResolver, createCustomModelProviderConfig, createWorkspaceAgentDefaultsResolver, deleteModelProviderConfig, getModelProviderCredentialKeys, getModelProviderEntry, InvalidAgentModelError, InvalidCredentialFieldsError, isReservedModelProviderId, listSupportedModelProviders, type ModelProviderConfig, ModelProviderConfigNotFoundError, ModelProviderValidationError, ModelProviderValidationUnavailableError, modelProviderCredentialKeysMatch, type ResolvedAgentConfig, type ResolveRuntimeCredentialsParams, resolveAgentConfig, resolveRuntimeCredentials, testAndSaveModelProviderConfig, UnsupportedModelProviderError, updateCustomModelProviderConfig, WorkspaceProvidersDisabledError, } from '#core/index.js';
4
5
  export { getAgentWorkspaceSettings, getModelProviderConfig, listModelProviderConfigs, setDefaultModelProvider, upsertModelProviderConfig, } from '#db/index.js';
5
6
  export declare function createAgentModule(params: {
6
7
  secrets: AgentSecretsClient;
8
+ managedProvider?: ManagedModelProvider | undefined;
7
9
  }): ShipfoxModule;
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAMhE,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,yBAAyB,EACzB,KAAK,qBAAqB,EAC1B,2BAA2B,EAC3B,+BAA+B,EAC/B,oCAAoC,EACpC,yBAAyB,EACzB,8BAA8B,EAC9B,qBAAqB,EACrB,sBAAsB,EACtB,4BAA4B,EAC5B,yBAAyB,EACzB,2BAA2B,EAC3B,KAAK,mBAAmB,EACxB,gCAAgC,EAChC,4BAA4B,EAC5B,uCAAuC,EACvC,gCAAgC,EAChC,KAAK,mBAAmB,EACxB,KAAK,+BAA+B,EACpC,kBAAkB,EAClB,yBAAyB,EACzB,8BAA8B,EAC9B,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AAEtB,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IAAC,OAAO,EAAE,kBAAkB,CAAA;CAAC,GAAG,aAAa,CAQtF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAMhE,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,yBAAyB,EACzB,KAAK,qBAAqB,EAC1B,2BAA2B,EAC3B,+BAA+B,EAC/B,oCAAoC,EACpC,yBAAyB,EACzB,8BAA8B,EAC9B,qBAAqB,EACrB,sBAAsB,EACtB,4BAA4B,EAC5B,yBAAyB,EACzB,2BAA2B,EAC3B,KAAK,mBAAmB,EACxB,gCAAgC,EAChC,4BAA4B,EAC5B,uCAAuC,EACvC,gCAAgC,EAChC,KAAK,mBAAmB,EACxB,KAAK,+BAA+B,EACpC,kBAAkB,EAClB,yBAAyB,EACzB,8BAA8B,EAC9B,6BAA6B,EAC7B,+BAA+B,EAC/B,+BAA+B,GAChC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AAEtB,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,eAAe,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;CACpD,GAAG,aAAa,CAuBhB"}
package/dist/index.js CHANGED
@@ -1,10 +1,12 @@
1
+ import { assertAgentConfig, workspaceProvidersPolicy } from '#config.js';
1
2
  import { db, migrationsPath } from '#db/index.js';
2
3
  import { createAgentE2eRoutes } from '#presentation/e2eRoutes/index.js';
3
4
  import { createAgentInterModulePresentation } from '#presentation/inter-module.js';
4
5
  import { createAgentRoutes } from '#presentation/routes/index.js';
5
- export { buildModelProviderCatalog, catalogDefaultAgentResolver, createCustomModelProviderConfig, createWorkspaceAgentDefaultsResolver, deleteModelProviderConfig, getModelProviderCredentialKeys, getModelProviderEntry, InvalidAgentModelError, InvalidCredentialFieldsError, isReservedModelProviderId, listSupportedModelProviders, ModelProviderConfigNotFoundError, ModelProviderValidationError, ModelProviderValidationUnavailableError, modelProviderCredentialKeysMatch, resolveAgentConfig, resolveRuntimeCredentials, testAndSaveModelProviderConfig, UnsupportedModelProviderError, updateCustomModelProviderConfig } from '#core/index.js';
6
+ export { buildModelProviderCatalog, catalogDefaultAgentResolver, createCustomModelProviderConfig, createWorkspaceAgentDefaultsResolver, deleteModelProviderConfig, getModelProviderCredentialKeys, getModelProviderEntry, InvalidAgentModelError, InvalidCredentialFieldsError, isReservedModelProviderId, listSupportedModelProviders, ModelProviderConfigNotFoundError, ModelProviderValidationError, ModelProviderValidationUnavailableError, modelProviderCredentialKeysMatch, resolveAgentConfig, resolveRuntimeCredentials, testAndSaveModelProviderConfig, UnsupportedModelProviderError, updateCustomModelProviderConfig, WorkspaceProvidersDisabledError } from '#core/index.js';
6
7
  export { getAgentWorkspaceSettings, getModelProviderConfig, listModelProviderConfigs, setDefaultModelProvider, upsertModelProviderConfig } from '#db/index.js';
7
8
  export function createAgentModule(params) {
9
+ assertAgentConfig(params.managedProvider);
8
10
  return {
9
11
  name: 'agent',
10
12
  database: {
@@ -12,12 +14,21 @@ export function createAgentModule(params) {
12
14
  migrationsPath,
13
15
  databaseNamespace: 'agent'
14
16
  },
15
- routes: createAgentRoutes(params.secrets),
17
+ routes: createAgentRoutes(params.secrets, {
18
+ managedProvider: params.managedProvider,
19
+ workspaceProviders: workspaceProvidersPolicy
20
+ }),
16
21
  e2eRoutes: [
17
- createAgentE2eRoutes(params.secrets)
22
+ createAgentE2eRoutes(params.secrets, {
23
+ managedProviderId: params.managedProvider?.id,
24
+ workspaceProviders: workspaceProvidersPolicy
25
+ })
18
26
  ],
19
27
  interModulePresentations: [
20
- createAgentInterModulePresentation(params)
28
+ createAgentInterModulePresentation({
29
+ ...params,
30
+ workspaceProviders: workspaceProvidersPolicy
31
+ })
21
32
  ]
22
33
  };
23
34
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type {ShipfoxModule} from '@shipfox/node-module';\nimport type {AgentSecretsClient} from '#core/secrets-client.js';\nimport {db, migrationsPath} from '#db/index.js';\nimport {createAgentE2eRoutes} from '#presentation/e2eRoutes/index.js';\nimport {createAgentInterModulePresentation} from '#presentation/inter-module.js';\nimport {createAgentRoutes} from '#presentation/routes/index.js';\n\nexport {\n type AgentConfigResolutionContext,\n type AgentDefaultsResolver,\n type AgentWorkspaceSettings,\n buildModelProviderCatalog,\n type ContextualAgentConfig,\n catalogDefaultAgentResolver,\n createCustomModelProviderConfig,\n createWorkspaceAgentDefaultsResolver,\n deleteModelProviderConfig,\n getModelProviderCredentialKeys,\n getModelProviderEntry,\n InvalidAgentModelError,\n InvalidCredentialFieldsError,\n isReservedModelProviderId,\n listSupportedModelProviders,\n type ModelProviderConfig,\n ModelProviderConfigNotFoundError,\n ModelProviderValidationError,\n ModelProviderValidationUnavailableError,\n modelProviderCredentialKeysMatch,\n type ResolvedAgentConfig,\n type ResolveRuntimeCredentialsParams,\n resolveAgentConfig,\n resolveRuntimeCredentials,\n testAndSaveModelProviderConfig,\n UnsupportedModelProviderError,\n updateCustomModelProviderConfig,\n} from '#core/index.js';\nexport {\n getAgentWorkspaceSettings,\n getModelProviderConfig,\n listModelProviderConfigs,\n setDefaultModelProvider,\n upsertModelProviderConfig,\n} from '#db/index.js';\n\nexport function createAgentModule(params: {secrets: AgentSecretsClient}): ShipfoxModule {\n return {\n name: 'agent',\n database: {db, migrationsPath, databaseNamespace: 'agent'},\n routes: createAgentRoutes(params.secrets),\n e2eRoutes: [createAgentE2eRoutes(params.secrets)],\n interModulePresentations: [createAgentInterModulePresentation(params)],\n };\n}\n"],"names":["db","migrationsPath","createAgentE2eRoutes","createAgentInterModulePresentation","createAgentRoutes","buildModelProviderCatalog","catalogDefaultAgentResolver","createCustomModelProviderConfig","createWorkspaceAgentDefaultsResolver","deleteModelProviderConfig","getModelProviderCredentialKeys","getModelProviderEntry","InvalidAgentModelError","InvalidCredentialFieldsError","isReservedModelProviderId","listSupportedModelProviders","ModelProviderConfigNotFoundError","ModelProviderValidationError","ModelProviderValidationUnavailableError","modelProviderCredentialKeysMatch","resolveAgentConfig","resolveRuntimeCredentials","testAndSaveModelProviderConfig","UnsupportedModelProviderError","updateCustomModelProviderConfig","getAgentWorkspaceSettings","getModelProviderConfig","listModelProviderConfigs","setDefaultModelProvider","upsertModelProviderConfig","createAgentModule","params","name","database","databaseNamespace","routes","secrets","e2eRoutes","interModulePresentations"],"mappings":"AAEA,SAAQA,EAAE,EAAEC,cAAc,QAAO,eAAe;AAChD,SAAQC,oBAAoB,QAAO,mCAAmC;AACtE,SAAQC,kCAAkC,QAAO,gCAAgC;AACjF,SAAQC,iBAAiB,QAAO,gCAAgC;AAEhE,SAIEC,yBAAyB,EAEzBC,2BAA2B,EAC3BC,+BAA+B,EAC/BC,oCAAoC,EACpCC,yBAAyB,EACzBC,8BAA8B,EAC9BC,qBAAqB,EACrBC,sBAAsB,EACtBC,4BAA4B,EAC5BC,yBAAyB,EACzBC,2BAA2B,EAE3BC,gCAAgC,EAChCC,4BAA4B,EAC5BC,uCAAuC,EACvCC,gCAAgC,EAGhCC,kBAAkB,EAClBC,yBAAyB,EACzBC,8BAA8B,EAC9BC,6BAA6B,EAC7BC,+BAA+B,QAC1B,iBAAiB;AACxB,SACEC,yBAAyB,EACzBC,sBAAsB,EACtBC,wBAAwB,EACxBC,uBAAuB,EACvBC,yBAAyB,QACpB,eAAe;AAEtB,OAAO,SAASC,kBAAkBC,MAAqC;IACrE,OAAO;QACLC,MAAM;QACNC,UAAU;YAACjC;YAAIC;YAAgBiC,mBAAmB;QAAO;QACzDC,QAAQ/B,kBAAkB2B,OAAOK,OAAO;QACxCC,WAAW;YAACnC,qBAAqB6B,OAAOK,OAAO;SAAE;QACjDE,0BAA0B;YAACnC,mCAAmC4B;SAAQ;IACxE;AACF"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type {ManagedModelProvider} from '@shipfox/api-agent-dto';\nimport type {ShipfoxModule} from '@shipfox/node-module';\nimport {assertAgentConfig, workspaceProvidersPolicy} from '#config.js';\nimport type {AgentSecretsClient} from '#core/secrets-client.js';\nimport {db, migrationsPath} from '#db/index.js';\nimport {createAgentE2eRoutes} from '#presentation/e2eRoutes/index.js';\nimport {createAgentInterModulePresentation} from '#presentation/inter-module.js';\nimport {createAgentRoutes} from '#presentation/routes/index.js';\n\nexport {\n type AgentConfigResolutionContext,\n type AgentDefaultsResolver,\n type AgentWorkspaceSettings,\n buildModelProviderCatalog,\n type ContextualAgentConfig,\n catalogDefaultAgentResolver,\n createCustomModelProviderConfig,\n createWorkspaceAgentDefaultsResolver,\n deleteModelProviderConfig,\n getModelProviderCredentialKeys,\n getModelProviderEntry,\n InvalidAgentModelError,\n InvalidCredentialFieldsError,\n isReservedModelProviderId,\n listSupportedModelProviders,\n type ModelProviderConfig,\n ModelProviderConfigNotFoundError,\n ModelProviderValidationError,\n ModelProviderValidationUnavailableError,\n modelProviderCredentialKeysMatch,\n type ResolvedAgentConfig,\n type ResolveRuntimeCredentialsParams,\n resolveAgentConfig,\n resolveRuntimeCredentials,\n testAndSaveModelProviderConfig,\n UnsupportedModelProviderError,\n updateCustomModelProviderConfig,\n WorkspaceProvidersDisabledError,\n} from '#core/index.js';\nexport {\n getAgentWorkspaceSettings,\n getModelProviderConfig,\n listModelProviderConfigs,\n setDefaultModelProvider,\n upsertModelProviderConfig,\n} from '#db/index.js';\n\nexport function createAgentModule(params: {\n secrets: AgentSecretsClient;\n managedProvider?: ManagedModelProvider | undefined;\n}): ShipfoxModule {\n assertAgentConfig(params.managedProvider);\n\n return {\n name: 'agent',\n database: {db, migrationsPath, databaseNamespace: 'agent'},\n routes: createAgentRoutes(params.secrets, {\n managedProvider: params.managedProvider,\n workspaceProviders: workspaceProvidersPolicy,\n }),\n e2eRoutes: [\n createAgentE2eRoutes(params.secrets, {\n managedProviderId: params.managedProvider?.id,\n workspaceProviders: workspaceProvidersPolicy,\n }),\n ],\n interModulePresentations: [\n createAgentInterModulePresentation({\n ...params,\n workspaceProviders: workspaceProvidersPolicy,\n }),\n ],\n };\n}\n"],"names":["assertAgentConfig","workspaceProvidersPolicy","db","migrationsPath","createAgentE2eRoutes","createAgentInterModulePresentation","createAgentRoutes","buildModelProviderCatalog","catalogDefaultAgentResolver","createCustomModelProviderConfig","createWorkspaceAgentDefaultsResolver","deleteModelProviderConfig","getModelProviderCredentialKeys","getModelProviderEntry","InvalidAgentModelError","InvalidCredentialFieldsError","isReservedModelProviderId","listSupportedModelProviders","ModelProviderConfigNotFoundError","ModelProviderValidationError","ModelProviderValidationUnavailableError","modelProviderCredentialKeysMatch","resolveAgentConfig","resolveRuntimeCredentials","testAndSaveModelProviderConfig","UnsupportedModelProviderError","updateCustomModelProviderConfig","WorkspaceProvidersDisabledError","getAgentWorkspaceSettings","getModelProviderConfig","listModelProviderConfigs","setDefaultModelProvider","upsertModelProviderConfig","createAgentModule","params","managedProvider","name","database","databaseNamespace","routes","secrets","workspaceProviders","e2eRoutes","managedProviderId","id","interModulePresentations"],"mappings":"AAEA,SAAQA,iBAAiB,EAAEC,wBAAwB,QAAO,aAAa;AAEvE,SAAQC,EAAE,EAAEC,cAAc,QAAO,eAAe;AAChD,SAAQC,oBAAoB,QAAO,mCAAmC;AACtE,SAAQC,kCAAkC,QAAO,gCAAgC;AACjF,SAAQC,iBAAiB,QAAO,gCAAgC;AAEhE,SAIEC,yBAAyB,EAEzBC,2BAA2B,EAC3BC,+BAA+B,EAC/BC,oCAAoC,EACpCC,yBAAyB,EACzBC,8BAA8B,EAC9BC,qBAAqB,EACrBC,sBAAsB,EACtBC,4BAA4B,EAC5BC,yBAAyB,EACzBC,2BAA2B,EAE3BC,gCAAgC,EAChCC,4BAA4B,EAC5BC,uCAAuC,EACvCC,gCAAgC,EAGhCC,kBAAkB,EAClBC,yBAAyB,EACzBC,8BAA8B,EAC9BC,6BAA6B,EAC7BC,+BAA+B,EAC/BC,+BAA+B,QAC1B,iBAAiB;AACxB,SACEC,yBAAyB,EACzBC,sBAAsB,EACtBC,wBAAwB,EACxBC,uBAAuB,EACvBC,yBAAyB,QACpB,eAAe;AAEtB,OAAO,SAASC,kBAAkBC,MAGjC;IACClC,kBAAkBkC,OAAOC,eAAe;IAExC,OAAO;QACLC,MAAM;QACNC,UAAU;YAACnC;YAAIC;YAAgBmC,mBAAmB;QAAO;QACzDC,QAAQjC,kBAAkB4B,OAAOM,OAAO,EAAE;YACxCL,iBAAiBD,OAAOC,eAAe;YACvCM,oBAAoBxC;QACtB;QACAyC,WAAW;YACTtC,qBAAqB8B,OAAOM,OAAO,EAAE;gBACnCG,mBAAmBT,OAAOC,eAAe,EAAES;gBAC3CH,oBAAoBxC;YACtB;SACD;QACD4C,0BAA0B;YACxBxC,mCAAmC;gBACjC,GAAG6B,MAAM;gBACTO,oBAAoBxC;YACtB;SACD;IACH;AACF"}
@@ -1,10 +1,10 @@
1
1
  import type { SupportedModelProviderId } from '@shipfox/api-agent-dto';
2
2
  export declare const modelProviderValidationCount: import("@shipfox/node-opentelemetry").Counter<{
3
- model_provider: SupportedModelProviderId | "custom";
4
- outcome: "succeeded" | "failed";
3
+ model_provider: SupportedModelProviderId | 'custom';
4
+ outcome: 'succeeded' | 'failed';
5
5
  }>;
6
6
  export declare const agentRuntimeConfigResolvedCount: import("@shipfox/node-opentelemetry").Counter<{
7
- source: "workspace" | "instance";
8
- outcome: "resolved" | "unavailable" | "decryption_failed";
7
+ source: 'workspace' | 'instance';
8
+ outcome: 'resolved' | 'unavailable' | 'decryption_failed';
9
9
  }>;
10
10
  //# sourceMappingURL=instance.d.ts.map
@@ -1,3 +1,4 @@
1
+ import { type WorkspaceProviderPolicyOptions } from '#core/index.js';
1
2
  import type { AgentSecretsClient } from '#core/secrets-client.js';
2
- export declare function createE2eModelProviderRoute(secrets: AgentSecretsClient): import("@shipfox/node-fastify").RouteDefinition;
3
+ export declare function createE2eModelProviderRoute(secrets: AgentSecretsClient, workspaceProviderPolicy?: WorkspaceProviderPolicyOptions): import("@shipfox/node-fastify").RouteDefinition;
3
4
  //# sourceMappingURL=create-model-provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-model-provider.d.ts","sourceRoot":"","sources":["../../../src/presentation/e2eRoutes/create-model-provider.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAehE,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,kBAAkB,mDA0CtE"}
1
+ {"version":3,"file":"create-model-provider.d.ts","sourceRoot":"","sources":["../../../src/presentation/e2eRoutes/create-model-provider.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAgBhE,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,kBAAkB,EAC3B,uBAAuB,GAAE,8BAAgE,mDA6C1F"}
@@ -3,8 +3,10 @@ import { ClientError, defineRoute } from '@shipfox/node-fastify';
3
3
  import { z } from 'zod';
4
4
  import { agentSystemNamespace } from '#core/credential-fingerprints.js';
5
5
  import { listHarnessProviderModels } from '#core/harness/registry.js';
6
+ import { assertWorkspaceProviderConfigurationEnabled } from '#core/index.js';
6
7
  import { getModelProviderEntry } from '#core/model-provider-policy.js';
7
8
  import { upsertModelProviderConfig } from '#db/index.js';
9
+ import { translateModelProviderRouteError } from '#presentation/routes/errors.js';
8
10
  const createE2eModelProviderBodySchema = z.object({
9
11
  workspace_id: z.string().uuid(),
10
12
  provider_id: z.literal('anthropic'),
@@ -15,7 +17,9 @@ const createE2eModelProviderBodySchema = z.object({
15
17
  const createE2eModelProviderResponseSchema = z.object({
16
18
  provider_id: z.literal('anthropic')
17
19
  });
18
- export function createE2eModelProviderRoute(secrets) {
20
+ export function createE2eModelProviderRoute(secrets, workspaceProviderPolicy = {
21
+ workspaceProviders: 'enabled'
22
+ }) {
19
23
  return defineRoute({
20
24
  method: 'POST',
21
25
  path: '/model-provider',
@@ -26,7 +30,9 @@ export function createE2eModelProviderRoute(secrets) {
26
30
  201: createE2eModelProviderResponseSchema
27
31
  }
28
32
  },
33
+ errorHandler: translateModelProviderRouteError,
29
34
  handler: async (request, reply)=>{
35
+ assertWorkspaceProviderConfigurationEnabled(workspaceProviderPolicy);
30
36
  const entry = getModelProviderEntry(request.body.provider_id);
31
37
  if (entry === undefined || entry.default_model === null) {
32
38
  throw new ClientError('Unsupported E2E model provider', 'unsupported-model-provider', {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/presentation/e2eRoutes/create-model-provider.ts"],"sourcesContent":["import {DEFAULT_AGENT_THINKING} from '@shipfox/api-agent-dto';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {agentSystemNamespace} from '#core/credential-fingerprints.js';\nimport {listHarnessProviderModels} from '#core/harness/registry.js';\nimport {getModelProviderEntry} from '#core/model-provider-policy.js';\nimport type {AgentSecretsClient} from '#core/secrets-client.js';\nimport {upsertModelProviderConfig} from '#db/index.js';\n\nconst createE2eModelProviderBodySchema = z.object({\n workspace_id: z.string().uuid(),\n provider_id: z.literal('anthropic'),\n api_key: z.string().min(1),\n default_model: z.string().min(1).optional(),\n set_as_default: z.boolean().optional(),\n});\n\nconst createE2eModelProviderResponseSchema = z.object({\n provider_id: z.literal('anthropic'),\n});\n\nexport function createE2eModelProviderRoute(secrets: AgentSecretsClient) {\n return defineRoute({\n method: 'POST',\n path: '/model-provider',\n description: 'Create an Anthropic model provider config for E2E tests.',\n schema: {\n body: createE2eModelProviderBodySchema,\n response: {201: createE2eModelProviderResponseSchema},\n },\n handler: async (request, reply) => {\n const entry = getModelProviderEntry(request.body.provider_id);\n if (entry === undefined || entry.default_model === null) {\n throw new ClientError('Unsupported E2E model provider', 'unsupported-model-provider', {\n status: 400,\n });\n }\n const defaultModel = request.body.default_model ?? entry.default_model;\n const supportedModels = listHarnessProviderModels('claude', request.body.provider_id);\n if (!supportedModels.some((model) => model.id === defaultModel)) {\n throw new ClientError('Unsupported Anthropic default model', 'unsupported-model', {\n status: 400,\n details: {default_model: defaultModel},\n });\n }\n\n await secrets.setSecrets({\n workspaceId: request.body.workspace_id,\n namespace: agentSystemNamespace(request.body.provider_id),\n values: {API_KEY: request.body.api_key},\n });\n await upsertModelProviderConfig({\n workspaceId: request.body.workspace_id,\n providerId: request.body.provider_id,\n defaultModel,\n defaultThinking: DEFAULT_AGENT_THINKING,\n setAsDefault: request.body.set_as_default,\n });\n\n reply.code(201);\n return {provider_id: request.body.provider_id};\n },\n });\n}\n"],"names":["DEFAULT_AGENT_THINKING","ClientError","defineRoute","z","agentSystemNamespace","listHarnessProviderModels","getModelProviderEntry","upsertModelProviderConfig","createE2eModelProviderBodySchema","object","workspace_id","string","uuid","provider_id","literal","api_key","min","default_model","optional","set_as_default","boolean","createE2eModelProviderResponseSchema","createE2eModelProviderRoute","secrets","method","path","description","schema","body","response","handler","request","reply","entry","undefined","status","defaultModel","supportedModels","some","model","id","details","setSecrets","workspaceId","namespace","values","API_KEY","providerId","defaultThinking","setAsDefault","code"],"mappings":"AAAA,SAAQA,sBAAsB,QAAO,yBAAyB;AAC9D,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,oBAAoB,QAAO,mCAAmC;AACtE,SAAQC,yBAAyB,QAAO,4BAA4B;AACpE,SAAQC,qBAAqB,QAAO,iCAAiC;AAErE,SAAQC,yBAAyB,QAAO,eAAe;AAEvD,MAAMC,mCAAmCL,EAAEM,MAAM,CAAC;IAChDC,cAAcP,EAAEQ,MAAM,GAAGC,IAAI;IAC7BC,aAAaV,EAAEW,OAAO,CAAC;IACvBC,SAASZ,EAAEQ,MAAM,GAAGK,GAAG,CAAC;IACxBC,eAAed,EAAEQ,MAAM,GAAGK,GAAG,CAAC,GAAGE,QAAQ;IACzCC,gBAAgBhB,EAAEiB,OAAO,GAAGF,QAAQ;AACtC;AAEA,MAAMG,uCAAuClB,EAAEM,MAAM,CAAC;IACpDI,aAAaV,EAAEW,OAAO,CAAC;AACzB;AAEA,OAAO,SAASQ,4BAA4BC,OAA2B;IACrE,OAAOrB,YAAY;QACjBsB,QAAQ;QACRC,MAAM;QACNC,aAAa;QACbC,QAAQ;YACNC,MAAMpB;YACNqB,UAAU;gBAAC,KAAKR;YAAoC;QACtD;QACAS,SAAS,OAAOC,SAASC;YACvB,MAAMC,QAAQ3B,sBAAsByB,QAAQH,IAAI,CAACf,WAAW;YAC5D,IAAIoB,UAAUC,aAAaD,MAAMhB,aAAa,KAAK,MAAM;gBACvD,MAAM,IAAIhB,YAAY,kCAAkC,8BAA8B;oBACpFkC,QAAQ;gBACV;YACF;YACA,MAAMC,eAAeL,QAAQH,IAAI,CAACX,aAAa,IAAIgB,MAAMhB,aAAa;YACtE,MAAMoB,kBAAkBhC,0BAA0B,UAAU0B,QAAQH,IAAI,CAACf,WAAW;YACpF,IAAI,CAACwB,gBAAgBC,IAAI,CAAC,CAACC,QAAUA,MAAMC,EAAE,KAAKJ,eAAe;gBAC/D,MAAM,IAAInC,YAAY,uCAAuC,qBAAqB;oBAChFkC,QAAQ;oBACRM,SAAS;wBAACxB,eAAemB;oBAAY;gBACvC;YACF;YAEA,MAAMb,QAAQmB,UAAU,CAAC;gBACvBC,aAAaZ,QAAQH,IAAI,CAAClB,YAAY;gBACtCkC,WAAWxC,qBAAqB2B,QAAQH,IAAI,CAACf,WAAW;gBACxDgC,QAAQ;oBAACC,SAASf,QAAQH,IAAI,CAACb,OAAO;gBAAA;YACxC;YACA,MAAMR,0BAA0B;gBAC9BoC,aAAaZ,QAAQH,IAAI,CAAClB,YAAY;gBACtCqC,YAAYhB,QAAQH,IAAI,CAACf,WAAW;gBACpCuB;gBACAY,iBAAiBhD;gBACjBiD,cAAclB,QAAQH,IAAI,CAACT,cAAc;YAC3C;YAEAa,MAAMkB,IAAI,CAAC;YACX,OAAO;gBAACrC,aAAakB,QAAQH,IAAI,CAACf,WAAW;YAAA;QAC/C;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/presentation/e2eRoutes/create-model-provider.ts"],"sourcesContent":["import {DEFAULT_AGENT_THINKING} from '@shipfox/api-agent-dto';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {agentSystemNamespace} from '#core/credential-fingerprints.js';\nimport {listHarnessProviderModels} from '#core/harness/registry.js';\nimport {\n assertWorkspaceProviderConfigurationEnabled,\n type WorkspaceProviderPolicyOptions,\n} from '#core/index.js';\nimport {getModelProviderEntry} from '#core/model-provider-policy.js';\nimport type {AgentSecretsClient} from '#core/secrets-client.js';\nimport {upsertModelProviderConfig} from '#db/index.js';\nimport {translateModelProviderRouteError} from '#presentation/routes/errors.js';\n\nconst createE2eModelProviderBodySchema = z.object({\n workspace_id: z.string().uuid(),\n provider_id: z.literal('anthropic'),\n api_key: z.string().min(1),\n default_model: z.string().min(1).optional(),\n set_as_default: z.boolean().optional(),\n});\n\nconst createE2eModelProviderResponseSchema = z.object({\n provider_id: z.literal('anthropic'),\n});\n\nexport function createE2eModelProviderRoute(\n secrets: AgentSecretsClient,\n workspaceProviderPolicy: WorkspaceProviderPolicyOptions = {workspaceProviders: 'enabled'},\n) {\n return defineRoute({\n method: 'POST',\n path: '/model-provider',\n description: 'Create an Anthropic model provider config for E2E tests.',\n schema: {\n body: createE2eModelProviderBodySchema,\n response: {201: createE2eModelProviderResponseSchema},\n },\n errorHandler: translateModelProviderRouteError,\n handler: async (request, reply) => {\n assertWorkspaceProviderConfigurationEnabled(workspaceProviderPolicy);\n const entry = getModelProviderEntry(request.body.provider_id);\n if (entry === undefined || entry.default_model === null) {\n throw new ClientError('Unsupported E2E model provider', 'unsupported-model-provider', {\n status: 400,\n });\n }\n const defaultModel = request.body.default_model ?? entry.default_model;\n const supportedModels = listHarnessProviderModels('claude', request.body.provider_id);\n if (!supportedModels.some((model) => model.id === defaultModel)) {\n throw new ClientError('Unsupported Anthropic default model', 'unsupported-model', {\n status: 400,\n details: {default_model: defaultModel},\n });\n }\n\n await secrets.setSecrets({\n workspaceId: request.body.workspace_id,\n namespace: agentSystemNamespace(request.body.provider_id),\n values: {API_KEY: request.body.api_key},\n });\n await upsertModelProviderConfig({\n workspaceId: request.body.workspace_id,\n providerId: request.body.provider_id,\n defaultModel,\n defaultThinking: DEFAULT_AGENT_THINKING,\n setAsDefault: request.body.set_as_default,\n });\n\n reply.code(201);\n return {provider_id: request.body.provider_id};\n },\n });\n}\n"],"names":["DEFAULT_AGENT_THINKING","ClientError","defineRoute","z","agentSystemNamespace","listHarnessProviderModels","assertWorkspaceProviderConfigurationEnabled","getModelProviderEntry","upsertModelProviderConfig","translateModelProviderRouteError","createE2eModelProviderBodySchema","object","workspace_id","string","uuid","provider_id","literal","api_key","min","default_model","optional","set_as_default","boolean","createE2eModelProviderResponseSchema","createE2eModelProviderRoute","secrets","workspaceProviderPolicy","workspaceProviders","method","path","description","schema","body","response","errorHandler","handler","request","reply","entry","undefined","status","defaultModel","supportedModels","some","model","id","details","setSecrets","workspaceId","namespace","values","API_KEY","providerId","defaultThinking","setAsDefault","code"],"mappings":"AAAA,SAAQA,sBAAsB,QAAO,yBAAyB;AAC9D,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,oBAAoB,QAAO,mCAAmC;AACtE,SAAQC,yBAAyB,QAAO,4BAA4B;AACpE,SACEC,2CAA2C,QAEtC,iBAAiB;AACxB,SAAQC,qBAAqB,QAAO,iCAAiC;AAErE,SAAQC,yBAAyB,QAAO,eAAe;AACvD,SAAQC,gCAAgC,QAAO,iCAAiC;AAEhF,MAAMC,mCAAmCP,EAAEQ,MAAM,CAAC;IAChDC,cAAcT,EAAEU,MAAM,GAAGC,IAAI;IAC7BC,aAAaZ,EAAEa,OAAO,CAAC;IACvBC,SAASd,EAAEU,MAAM,GAAGK,GAAG,CAAC;IACxBC,eAAehB,EAAEU,MAAM,GAAGK,GAAG,CAAC,GAAGE,QAAQ;IACzCC,gBAAgBlB,EAAEmB,OAAO,GAAGF,QAAQ;AACtC;AAEA,MAAMG,uCAAuCpB,EAAEQ,MAAM,CAAC;IACpDI,aAAaZ,EAAEa,OAAO,CAAC;AACzB;AAEA,OAAO,SAASQ,4BACdC,OAA2B,EAC3BC,0BAA0D;IAACC,oBAAoB;AAAS,CAAC;IAEzF,OAAOzB,YAAY;QACjB0B,QAAQ;QACRC,MAAM;QACNC,aAAa;QACbC,QAAQ;YACNC,MAAMtB;YACNuB,UAAU;gBAAC,KAAKV;YAAoC;QACtD;QACAW,cAAczB;QACd0B,SAAS,OAAOC,SAASC;YACvB/B,4CAA4CoB;YAC5C,MAAMY,QAAQ/B,sBAAsB6B,QAAQJ,IAAI,CAACjB,WAAW;YAC5D,IAAIuB,UAAUC,aAAaD,MAAMnB,aAAa,KAAK,MAAM;gBACvD,MAAM,IAAIlB,YAAY,kCAAkC,8BAA8B;oBACpFuC,QAAQ;gBACV;YACF;YACA,MAAMC,eAAeL,QAAQJ,IAAI,CAACb,aAAa,IAAImB,MAAMnB,aAAa;YACtE,MAAMuB,kBAAkBrC,0BAA0B,UAAU+B,QAAQJ,IAAI,CAACjB,WAAW;YACpF,IAAI,CAAC2B,gBAAgBC,IAAI,CAAC,CAACC,QAAUA,MAAMC,EAAE,KAAKJ,eAAe;gBAC/D,MAAM,IAAIxC,YAAY,uCAAuC,qBAAqB;oBAChFuC,QAAQ;oBACRM,SAAS;wBAAC3B,eAAesB;oBAAY;gBACvC;YACF;YAEA,MAAMhB,QAAQsB,UAAU,CAAC;gBACvBC,aAAaZ,QAAQJ,IAAI,CAACpB,YAAY;gBACtCqC,WAAW7C,qBAAqBgC,QAAQJ,IAAI,CAACjB,WAAW;gBACxDmC,QAAQ;oBAACC,SAASf,QAAQJ,IAAI,CAACf,OAAO;gBAAA;YACxC;YACA,MAAMT,0BAA0B;gBAC9BwC,aAAaZ,QAAQJ,IAAI,CAACpB,YAAY;gBACtCwC,YAAYhB,QAAQJ,IAAI,CAACjB,WAAW;gBACpC0B;gBACAY,iBAAiBrD;gBACjBsD,cAAclB,QAAQJ,IAAI,CAACX,cAAc;YAC3C;YAEAgB,MAAMkB,IAAI,CAAC;YACX,OAAO;gBAACxC,aAAaqB,QAAQJ,IAAI,CAACjB,WAAW;YAAA;QAC/C;IACF;AACF"}
@@ -1,5 +1,6 @@
1
1
  import type { RouteGroup } from '@shipfox/node-fastify';
2
2
  import type { AgentSecretsClient } from '#core/secrets-client.js';
3
- export declare function createAgentE2eRoutes(secrets: AgentSecretsClient): RouteGroup;
3
+ import type { WorkspaceProviderPolicyOptions } from '#core/workspace-provider-policy.js';
4
+ export declare function createAgentE2eRoutes(secrets: AgentSecretsClient, workspaceProviderPolicy?: WorkspaceProviderPolicyOptions): RouteGroup;
4
5
  export declare const agentE2eRoutes: RouteGroup;
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/presentation/e2eRoutes/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAGhE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,GAAG,UAAU,CAE5E;AAED,eAAO,MAAM,cAAc,YAAmE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/presentation/e2eRoutes/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAC,8BAA8B,EAAC,MAAM,oCAAoC,CAAC;AAGvF,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,kBAAkB,EAC3B,uBAAuB,GAAE,8BAAgE,GACxF,UAAU,CAKZ;AAED,eAAO,MAAM,cAAc,YAAmE,CAAC"}
@@ -1,9 +1,11 @@
1
1
  import { createE2eModelProviderRoute } from './create-model-provider.js';
2
- export function createAgentE2eRoutes(secrets) {
2
+ export function createAgentE2eRoutes(secrets, workspaceProviderPolicy = {
3
+ workspaceProviders: 'enabled'
4
+ }) {
3
5
  return {
4
6
  prefix: '/agent',
5
7
  routes: [
6
- createE2eModelProviderRoute(secrets)
8
+ createE2eModelProviderRoute(secrets, workspaceProviderPolicy)
7
9
  ]
8
10
  };
9
11
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/presentation/e2eRoutes/index.ts"],"sourcesContent":["import type {RouteGroup} from '@shipfox/node-fastify';\nimport type {AgentSecretsClient} from '#core/secrets-client.js';\nimport {createE2eModelProviderRoute} from './create-model-provider.js';\n\nexport function createAgentE2eRoutes(secrets: AgentSecretsClient): RouteGroup {\n return {prefix: '/agent', routes: [createE2eModelProviderRoute(secrets)]};\n}\n\nexport const agentE2eRoutes = createAgentE2eRoutes(undefined as unknown as AgentSecretsClient);\n"],"names":["createE2eModelProviderRoute","createAgentE2eRoutes","secrets","prefix","routes","agentE2eRoutes","undefined"],"mappings":"AAEA,SAAQA,2BAA2B,QAAO,6BAA6B;AAEvE,OAAO,SAASC,qBAAqBC,OAA2B;IAC9D,OAAO;QAACC,QAAQ;QAAUC,QAAQ;YAACJ,4BAA4BE;SAAS;IAAA;AAC1E;AAEA,OAAO,MAAMG,iBAAiBJ,qBAAqBK,WAA4C"}
1
+ {"version":3,"sources":["../../../src/presentation/e2eRoutes/index.ts"],"sourcesContent":["import type {RouteGroup} from '@shipfox/node-fastify';\nimport type {AgentSecretsClient} from '#core/secrets-client.js';\nimport type {WorkspaceProviderPolicyOptions} from '#core/workspace-provider-policy.js';\nimport {createE2eModelProviderRoute} from './create-model-provider.js';\n\nexport function createAgentE2eRoutes(\n secrets: AgentSecretsClient,\n workspaceProviderPolicy: WorkspaceProviderPolicyOptions = {workspaceProviders: 'enabled'},\n): RouteGroup {\n return {\n prefix: '/agent',\n routes: [createE2eModelProviderRoute(secrets, workspaceProviderPolicy)],\n };\n}\n\nexport const agentE2eRoutes = createAgentE2eRoutes(undefined as unknown as AgentSecretsClient);\n"],"names":["createE2eModelProviderRoute","createAgentE2eRoutes","secrets","workspaceProviderPolicy","workspaceProviders","prefix","routes","agentE2eRoutes","undefined"],"mappings":"AAGA,SAAQA,2BAA2B,QAAO,6BAA6B;AAEvE,OAAO,SAASC,qBACdC,OAA2B,EAC3BC,0BAA0D;IAACC,oBAAoB;AAAS,CAAC;IAEzF,OAAO;QACLC,QAAQ;QACRC,QAAQ;YAACN,4BAA4BE,SAASC;SAAyB;IACzE;AACF;AAEA,OAAO,MAAMI,iBAAiBN,qBAAqBO,WAA4C"}
@@ -1,7 +1,10 @@
1
+ import type { ManagedModelProvider, WorkspaceProvidersPolicy } from '@shipfox/api-agent-dto';
1
2
  import { agentInterModuleContract } from '@shipfox/api-agent-dto/inter-module';
2
3
  import { type InterModulePresentation } from '@shipfox/inter-module';
3
4
  import type { AgentSecretsClient } from '#core/secrets-client.js';
4
5
  export declare function createAgentInterModulePresentation(params: {
5
6
  secrets: AgentSecretsClient;
7
+ managedProvider?: ManagedModelProvider | undefined;
8
+ workspaceProviders?: WorkspaceProvidersPolicy | undefined;
6
9
  }): InterModulePresentation<typeof agentInterModuleContract>;
7
10
  //# sourceMappingURL=inter-module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inter-module.d.ts","sourceRoot":"","sources":["../../src/presentation/inter-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,wBAAwB,EAAC,MAAM,qCAAqC,CAAC;AAE7E,OAAO,EAGL,KAAK,uBAAuB,EAE7B,MAAM,uBAAuB,CAAC;AAU/B,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAIhE,wBAAgB,kCAAkC,CAAC,MAAM,EAAE;IACzD,OAAO,EAAE,kBAAkB,CAAC;CAC7B,GAAG,uBAAuB,CAAC,OAAO,wBAAwB,CAAC,CAsB3D"}
1
+ {"version":3,"file":"inter-module.d.ts","sourceRoot":"","sources":["../../src/presentation/inter-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,oBAAoB,EAAE,wBAAwB,EAAC,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAC,wBAAwB,EAAC,MAAM,qCAAqC,CAAC;AAE7E,OAAO,EAGL,KAAK,uBAAuB,EAE7B,MAAM,uBAAuB,CAAC;AAW/B,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAIhE,wBAAgB,kCAAkC,CAAC,MAAM,EAAE;IACzD,OAAO,EAAE,kBAAkB,CAAC;IAC5B,eAAe,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACnD,kBAAkB,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;CAC3D,GAAG,uBAAuB,CAAC,OAAO,wBAAwB,CAAC,CAmC3D"}
@@ -1,17 +1,20 @@
1
1
  import { agentInterModuleContract } from '@shipfox/api-agent-dto/inter-module';
2
2
  import { secretsInterModuleContract } from '@shipfox/api-secrets-dto/inter-module';
3
3
  import { createInterModuleKnownError, defineInterModulePresentation, isInterModuleKnownError } from '@shipfox/inter-module';
4
- import { InvalidAgentModelError, ModelProviderConfigNotFoundError, UnsupportedHarnessProviderError, UnsupportedHarnessThinkingError, UnsupportedModelProviderError } from '#core/errors.js';
4
+ import { InvalidAgentModelError, ModelProviderConfigNotFoundError, UnsupportedHarnessProviderError, UnsupportedHarnessThinkingError, UnsupportedModelProviderError, WorkspaceProvidersDisabledError } from '#core/errors.js';
5
5
  import { resolveAgentConfig } from '#core/resolve-agent-config.js';
6
6
  import { resolveRuntimeCredentials } from '#core/resolve-runtime-credentials.js';
7
7
  import { getAgentValidationCatalog } from '#core/validation-catalog.js';
8
8
  import { createWorkspaceAgentDefaultsResolver } from '#core/workspace-agent-defaults-resolver.js';
9
9
  export function createAgentInterModulePresentation(params) {
10
10
  return defineInterModulePresentation(agentInterModuleContract, {
11
- getValidationCatalog: ()=>getAgentValidationCatalog(),
11
+ getValidationCatalog: ()=>getAgentValidationCatalog(params.managedProvider, params.workspaceProviders),
12
12
  resolveAgentConfig: async ({ workspaceId, config })=>{
13
13
  try {
14
- const resolve = workspaceId === null ? resolveAgentConfig : await createWorkspaceAgentDefaultsResolver(workspaceId);
14
+ const resolve = workspaceId === null ? (step)=>resolveAgentConfig(step, {
15
+ managedProvider: params.managedProvider,
16
+ workspaceProviders: params.workspaceProviders
17
+ }) : await createWorkspaceAgentDefaultsResolver(workspaceId, params.managedProvider, params.workspaceProviders);
15
18
  return await resolve(config);
16
19
  } catch (error) {
17
20
  throw toResolveAgentConfigKnownError(error);
@@ -20,7 +23,9 @@ export function createAgentInterModulePresentation(params) {
20
23
  resolveRuntimeCredentials: async (input)=>{
21
24
  try {
22
25
  return await resolveRuntimeCredentials(input, {
23
- secrets: params.secrets
26
+ managedProvider: params.managedProvider,
27
+ secrets: params.secrets,
28
+ workspaceProviders: params.workspaceProviders
24
29
  });
25
30
  } catch (error) {
26
31
  throw toResolveRuntimeCredentialsKnownError(error);
@@ -29,12 +34,23 @@ export function createAgentInterModulePresentation(params) {
29
34
  });
30
35
  }
31
36
  function toResolveAgentConfigKnownError(error) {
32
- if (error instanceof InvalidAgentModelError || error instanceof UnsupportedHarnessProviderError || error instanceof UnsupportedHarnessThinkingError || error instanceof UnsupportedModelProviderError) {
33
- return createInterModuleKnownError(agentInterModuleContract.methods.resolveAgentConfig, 'agent-config-invalid', {});
37
+ if (error instanceof InvalidAgentModelError || error instanceof UnsupportedHarnessProviderError || error instanceof UnsupportedHarnessThinkingError || error instanceof UnsupportedModelProviderError || error instanceof WorkspaceProvidersDisabledError) {
38
+ return createInterModuleKnownError(agentInterModuleContract.methods.resolveAgentConfig, 'agent-config-invalid', {
39
+ ...error instanceof WorkspaceProvidersDisabledError ? {
40
+ message: error.message,
41
+ managed_provider_id: error.managedProviderId
42
+ } : {}
43
+ });
34
44
  }
35
45
  return error;
36
46
  }
37
47
  function toResolveRuntimeCredentialsKnownError(error) {
48
+ if (error instanceof WorkspaceProvidersDisabledError) {
49
+ return createInterModuleKnownError(agentInterModuleContract.methods.resolveRuntimeCredentials, 'workspace-providers-disabled', {
50
+ message: error.message,
51
+ managed_provider_id: error.managedProviderId
52
+ });
53
+ }
38
54
  if (error instanceof ModelProviderConfigNotFoundError) {
39
55
  return createInterModuleKnownError(agentInterModuleContract.methods.resolveRuntimeCredentials, 'model-provider-not-configured', {});
40
56
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/presentation/inter-module.ts"],"sourcesContent":["import {agentInterModuleContract} from '@shipfox/api-agent-dto/inter-module';\nimport {secretsInterModuleContract} from '@shipfox/api-secrets-dto/inter-module';\nimport {\n createInterModuleKnownError,\n defineInterModulePresentation,\n type InterModulePresentation,\n isInterModuleKnownError,\n} from '@shipfox/inter-module';\nimport {\n InvalidAgentModelError,\n ModelProviderConfigNotFoundError,\n UnsupportedHarnessProviderError,\n UnsupportedHarnessThinkingError,\n UnsupportedModelProviderError,\n} from '#core/errors.js';\nimport {resolveAgentConfig} from '#core/resolve-agent-config.js';\nimport {resolveRuntimeCredentials} from '#core/resolve-runtime-credentials.js';\nimport type {AgentSecretsClient} from '#core/secrets-client.js';\nimport {getAgentValidationCatalog} from '#core/validation-catalog.js';\nimport {createWorkspaceAgentDefaultsResolver} from '#core/workspace-agent-defaults-resolver.js';\n\nexport function createAgentInterModulePresentation(params: {\n secrets: AgentSecretsClient;\n}): InterModulePresentation<typeof agentInterModuleContract> {\n return defineInterModulePresentation(agentInterModuleContract, {\n getValidationCatalog: () => getAgentValidationCatalog(),\n resolveAgentConfig: async ({workspaceId, config}) => {\n try {\n const resolve =\n workspaceId === null\n ? resolveAgentConfig\n : await createWorkspaceAgentDefaultsResolver(workspaceId);\n return await resolve(config);\n } catch (error) {\n throw toResolveAgentConfigKnownError(error);\n }\n },\n resolveRuntimeCredentials: async (input) => {\n try {\n return await resolveRuntimeCredentials(input, {secrets: params.secrets});\n } catch (error) {\n throw toResolveRuntimeCredentialsKnownError(error);\n }\n },\n });\n}\n\nfunction toResolveAgentConfigKnownError(error: unknown): unknown {\n if (\n error instanceof InvalidAgentModelError ||\n error instanceof UnsupportedHarnessProviderError ||\n error instanceof UnsupportedHarnessThinkingError ||\n error instanceof UnsupportedModelProviderError\n ) {\n return createInterModuleKnownError(\n agentInterModuleContract.methods.resolveAgentConfig,\n 'agent-config-invalid',\n {},\n );\n }\n return error;\n}\n\nfunction toResolveRuntimeCredentialsKnownError(error: unknown): unknown {\n if (error instanceof ModelProviderConfigNotFoundError) {\n return createInterModuleKnownError(\n agentInterModuleContract.methods.resolveRuntimeCredentials,\n 'model-provider-not-configured',\n {},\n );\n }\n if (isInterModuleKnownError(secretsInterModuleContract.methods.getSecretsByNamespace, error)) {\n return createInterModuleKnownError(\n agentInterModuleContract.methods.resolveRuntimeCredentials,\n 'model-provider-credentials-invalid',\n {},\n );\n }\n return error;\n}\n"],"names":["agentInterModuleContract","secretsInterModuleContract","createInterModuleKnownError","defineInterModulePresentation","isInterModuleKnownError","InvalidAgentModelError","ModelProviderConfigNotFoundError","UnsupportedHarnessProviderError","UnsupportedHarnessThinkingError","UnsupportedModelProviderError","resolveAgentConfig","resolveRuntimeCredentials","getAgentValidationCatalog","createWorkspaceAgentDefaultsResolver","createAgentInterModulePresentation","params","getValidationCatalog","workspaceId","config","resolve","error","toResolveAgentConfigKnownError","input","secrets","toResolveRuntimeCredentialsKnownError","methods","getSecretsByNamespace"],"mappings":"AAAA,SAAQA,wBAAwB,QAAO,sCAAsC;AAC7E,SAAQC,0BAA0B,QAAO,wCAAwC;AACjF,SACEC,2BAA2B,EAC3BC,6BAA6B,EAE7BC,uBAAuB,QAClB,wBAAwB;AAC/B,SACEC,sBAAsB,EACtBC,gCAAgC,EAChCC,+BAA+B,EAC/BC,+BAA+B,EAC/BC,6BAA6B,QACxB,kBAAkB;AACzB,SAAQC,kBAAkB,QAAO,gCAAgC;AACjE,SAAQC,yBAAyB,QAAO,uCAAuC;AAE/E,SAAQC,yBAAyB,QAAO,8BAA8B;AACtE,SAAQC,oCAAoC,QAAO,6CAA6C;AAEhG,OAAO,SAASC,mCAAmCC,MAElD;IACC,OAAOZ,8BAA8BH,0BAA0B;QAC7DgB,sBAAsB,IAAMJ;QAC5BF,oBAAoB,OAAO,EAACO,WAAW,EAAEC,MAAM,EAAC;YAC9C,IAAI;gBACF,MAAMC,UACJF,gBAAgB,OACZP,qBACA,MAAMG,qCAAqCI;gBACjD,OAAO,MAAME,QAAQD;YACvB,EAAE,OAAOE,OAAO;gBACd,MAAMC,+BAA+BD;YACvC;QACF;QACAT,2BAA2B,OAAOW;YAChC,IAAI;gBACF,OAAO,MAAMX,0BAA0BW,OAAO;oBAACC,SAASR,OAAOQ,OAAO;gBAAA;YACxE,EAAE,OAAOH,OAAO;gBACd,MAAMI,sCAAsCJ;YAC9C;QACF;IACF;AACF;AAEA,SAASC,+BAA+BD,KAAc;IACpD,IACEA,iBAAiBf,0BACjBe,iBAAiBb,mCACjBa,iBAAiBZ,mCACjBY,iBAAiBX,+BACjB;QACA,OAAOP,4BACLF,yBAAyByB,OAAO,CAACf,kBAAkB,EACnD,wBACA,CAAC;IAEL;IACA,OAAOU;AACT;AAEA,SAASI,sCAAsCJ,KAAc;IAC3D,IAAIA,iBAAiBd,kCAAkC;QACrD,OAAOJ,4BACLF,yBAAyByB,OAAO,CAACd,yBAAyB,EAC1D,iCACA,CAAC;IAEL;IACA,IAAIP,wBAAwBH,2BAA2BwB,OAAO,CAACC,qBAAqB,EAAEN,QAAQ;QAC5F,OAAOlB,4BACLF,yBAAyByB,OAAO,CAACd,yBAAyB,EAC1D,sCACA,CAAC;IAEL;IACA,OAAOS;AACT"}
1
+ {"version":3,"sources":["../../src/presentation/inter-module.ts"],"sourcesContent":["import type {ManagedModelProvider, WorkspaceProvidersPolicy} from '@shipfox/api-agent-dto';\nimport {agentInterModuleContract} from '@shipfox/api-agent-dto/inter-module';\nimport {secretsInterModuleContract} from '@shipfox/api-secrets-dto/inter-module';\nimport {\n createInterModuleKnownError,\n defineInterModulePresentation,\n type InterModulePresentation,\n isInterModuleKnownError,\n} from '@shipfox/inter-module';\nimport {\n InvalidAgentModelError,\n ModelProviderConfigNotFoundError,\n UnsupportedHarnessProviderError,\n UnsupportedHarnessThinkingError,\n UnsupportedModelProviderError,\n WorkspaceProvidersDisabledError,\n} from '#core/errors.js';\nimport {resolveAgentConfig} from '#core/resolve-agent-config.js';\nimport {resolveRuntimeCredentials} from '#core/resolve-runtime-credentials.js';\nimport type {AgentSecretsClient} from '#core/secrets-client.js';\nimport {getAgentValidationCatalog} from '#core/validation-catalog.js';\nimport {createWorkspaceAgentDefaultsResolver} from '#core/workspace-agent-defaults-resolver.js';\n\nexport function createAgentInterModulePresentation(params: {\n secrets: AgentSecretsClient;\n managedProvider?: ManagedModelProvider | undefined;\n workspaceProviders?: WorkspaceProvidersPolicy | undefined;\n}): InterModulePresentation<typeof agentInterModuleContract> {\n return defineInterModulePresentation(agentInterModuleContract, {\n getValidationCatalog: () =>\n getAgentValidationCatalog(params.managedProvider, params.workspaceProviders),\n resolveAgentConfig: async ({workspaceId, config}) => {\n try {\n const resolve =\n workspaceId === null\n ? (step: Parameters<typeof resolveAgentConfig>[0]) =>\n resolveAgentConfig(step, {\n managedProvider: params.managedProvider,\n workspaceProviders: params.workspaceProviders,\n })\n : await createWorkspaceAgentDefaultsResolver(\n workspaceId,\n params.managedProvider,\n params.workspaceProviders,\n );\n return await resolve(config);\n } catch (error) {\n throw toResolveAgentConfigKnownError(error);\n }\n },\n resolveRuntimeCredentials: async (input) => {\n try {\n return await resolveRuntimeCredentials(input, {\n managedProvider: params.managedProvider,\n secrets: params.secrets,\n workspaceProviders: params.workspaceProviders,\n });\n } catch (error) {\n throw toResolveRuntimeCredentialsKnownError(error);\n }\n },\n });\n}\n\nfunction toResolveAgentConfigKnownError(error: unknown): unknown {\n if (\n error instanceof InvalidAgentModelError ||\n error instanceof UnsupportedHarnessProviderError ||\n error instanceof UnsupportedHarnessThinkingError ||\n error instanceof UnsupportedModelProviderError ||\n error instanceof WorkspaceProvidersDisabledError\n ) {\n return createInterModuleKnownError(\n agentInterModuleContract.methods.resolveAgentConfig,\n 'agent-config-invalid',\n {\n ...(error instanceof WorkspaceProvidersDisabledError\n ? {message: error.message, managed_provider_id: error.managedProviderId}\n : {}),\n },\n );\n }\n return error;\n}\n\nfunction toResolveRuntimeCredentialsKnownError(error: unknown): unknown {\n if (error instanceof WorkspaceProvidersDisabledError) {\n return createInterModuleKnownError(\n agentInterModuleContract.methods.resolveRuntimeCredentials,\n 'workspace-providers-disabled',\n {\n message: error.message,\n managed_provider_id: error.managedProviderId,\n },\n );\n }\n if (error instanceof ModelProviderConfigNotFoundError) {\n return createInterModuleKnownError(\n agentInterModuleContract.methods.resolveRuntimeCredentials,\n 'model-provider-not-configured',\n {},\n );\n }\n if (isInterModuleKnownError(secretsInterModuleContract.methods.getSecretsByNamespace, error)) {\n return createInterModuleKnownError(\n agentInterModuleContract.methods.resolveRuntimeCredentials,\n 'model-provider-credentials-invalid',\n {},\n );\n }\n return error;\n}\n"],"names":["agentInterModuleContract","secretsInterModuleContract","createInterModuleKnownError","defineInterModulePresentation","isInterModuleKnownError","InvalidAgentModelError","ModelProviderConfigNotFoundError","UnsupportedHarnessProviderError","UnsupportedHarnessThinkingError","UnsupportedModelProviderError","WorkspaceProvidersDisabledError","resolveAgentConfig","resolveRuntimeCredentials","getAgentValidationCatalog","createWorkspaceAgentDefaultsResolver","createAgentInterModulePresentation","params","getValidationCatalog","managedProvider","workspaceProviders","workspaceId","config","resolve","step","error","toResolveAgentConfigKnownError","input","secrets","toResolveRuntimeCredentialsKnownError","methods","message","managed_provider_id","managedProviderId","getSecretsByNamespace"],"mappings":"AACA,SAAQA,wBAAwB,QAAO,sCAAsC;AAC7E,SAAQC,0BAA0B,QAAO,wCAAwC;AACjF,SACEC,2BAA2B,EAC3BC,6BAA6B,EAE7BC,uBAAuB,QAClB,wBAAwB;AAC/B,SACEC,sBAAsB,EACtBC,gCAAgC,EAChCC,+BAA+B,EAC/BC,+BAA+B,EAC/BC,6BAA6B,EAC7BC,+BAA+B,QAC1B,kBAAkB;AACzB,SAAQC,kBAAkB,QAAO,gCAAgC;AACjE,SAAQC,yBAAyB,QAAO,uCAAuC;AAE/E,SAAQC,yBAAyB,QAAO,8BAA8B;AACtE,SAAQC,oCAAoC,QAAO,6CAA6C;AAEhG,OAAO,SAASC,mCAAmCC,MAIlD;IACC,OAAOb,8BAA8BH,0BAA0B;QAC7DiB,sBAAsB,IACpBJ,0BAA0BG,OAAOE,eAAe,EAAEF,OAAOG,kBAAkB;QAC7ER,oBAAoB,OAAO,EAACS,WAAW,EAAEC,MAAM,EAAC;YAC9C,IAAI;gBACF,MAAMC,UACJF,gBAAgB,OACZ,CAACG,OACCZ,mBAAmBY,MAAM;wBACvBL,iBAAiBF,OAAOE,eAAe;wBACvCC,oBAAoBH,OAAOG,kBAAkB;oBAC/C,KACF,MAAML,qCACJM,aACAJ,OAAOE,eAAe,EACtBF,OAAOG,kBAAkB;gBAEjC,OAAO,MAAMG,QAAQD;YACvB,EAAE,OAAOG,OAAO;gBACd,MAAMC,+BAA+BD;YACvC;QACF;QACAZ,2BAA2B,OAAOc;YAChC,IAAI;gBACF,OAAO,MAAMd,0BAA0Bc,OAAO;oBAC5CR,iBAAiBF,OAAOE,eAAe;oBACvCS,SAASX,OAAOW,OAAO;oBACvBR,oBAAoBH,OAAOG,kBAAkB;gBAC/C;YACF,EAAE,OAAOK,OAAO;gBACd,MAAMI,sCAAsCJ;YAC9C;QACF;IACF;AACF;AAEA,SAASC,+BAA+BD,KAAc;IACpD,IACEA,iBAAiBnB,0BACjBmB,iBAAiBjB,mCACjBiB,iBAAiBhB,mCACjBgB,iBAAiBf,iCACjBe,iBAAiBd,iCACjB;QACA,OAAOR,4BACLF,yBAAyB6B,OAAO,CAAClB,kBAAkB,EACnD,wBACA;YACE,GAAIa,iBAAiBd,kCACjB;gBAACoB,SAASN,MAAMM,OAAO;gBAAEC,qBAAqBP,MAAMQ,iBAAiB;YAAA,IACrE,CAAC,CAAC;QACR;IAEJ;IACA,OAAOR;AACT;AAEA,SAASI,sCAAsCJ,KAAc;IAC3D,IAAIA,iBAAiBd,iCAAiC;QACpD,OAAOR,4BACLF,yBAAyB6B,OAAO,CAACjB,yBAAyB,EAC1D,gCACA;YACEkB,SAASN,MAAMM,OAAO;YACtBC,qBAAqBP,MAAMQ,iBAAiB;QAC9C;IAEJ;IACA,IAAIR,iBAAiBlB,kCAAkC;QACrD,OAAOJ,4BACLF,yBAAyB6B,OAAO,CAACjB,yBAAyB,EAC1D,iCACA,CAAC;IAEL;IACA,IAAIR,wBAAwBH,2BAA2B4B,OAAO,CAACI,qBAAqB,EAAET,QAAQ;QAC5F,OAAOtB,4BACLF,yBAAyB6B,OAAO,CAACjB,yBAAyB,EAC1D,sCACA,CAAC;IAEL;IACA,OAAOY;AACT"}
@@ -1,3 +1,4 @@
1
1
  import type { AgentSecretsClient } from '#core/secrets-client.js';
2
- export declare function createCustomModelProviderRoute(secrets: AgentSecretsClient): import("@shipfox/node-fastify").RouteDefinition;
2
+ import type { WorkspaceProviderPolicyOptions } from '#core/workspace-provider-policy.js';
3
+ export declare function createCustomModelProviderRoute(secrets: AgentSecretsClient, workspaceProviderPolicy?: WorkspaceProviderPolicyOptions): import("@shipfox/node-fastify").RouteDefinition;
3
4
  //# sourceMappingURL=create-custom-model-provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-custom-model-provider.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/create-custom-model-provider.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAIhE,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,kBAAkB,mDAsCzE"}
1
+ {"version":3,"file":"create-custom-model-provider.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/create-custom-model-provider.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAC,8BAA8B,EAAC,MAAM,oCAAoC,CAAC;AAIvF,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,kBAAkB,EAC3B,uBAAuB,GAAE,8BAAgE,mDAwC1F"}
@@ -2,10 +2,12 @@ import { createCustomModelProviderBodySchema, customModelProviderConfigDtoSchema
2
2
  import { requireWorkspaceAccess } from '@shipfox/api-auth-context';
3
3
  import { defineRoute } from '@shipfox/node-fastify';
4
4
  import { z } from 'zod';
5
- import { createCustomModelProviderConfig } from '#core/index.js';
5
+ import { assertWorkspaceProviderConfigurationEnabled, createCustomModelProviderConfig } from '#core/index.js';
6
6
  import { toCustomModelProviderConfigDto } from '#presentation/dto/index.js';
7
7
  import { translateModelProviderRouteError } from './errors.js';
8
- export function createCustomModelProviderRoute(secrets) {
8
+ export function createCustomModelProviderRoute(secrets, workspaceProviderPolicy = {
9
+ workspaceProviders: 'enabled'
10
+ }) {
9
11
  return defineRoute({
10
12
  method: 'POST',
11
13
  path: '/custom-model-providers',
@@ -34,6 +36,7 @@ export function createCustomModelProviderRoute(secrets) {
34
36
  request,
35
37
  workspaceId
36
38
  });
39
+ assertWorkspaceProviderConfigurationEnabled(workspaceProviderPolicy);
37
40
  const config = await createCustomModelProviderConfig({
38
41
  workspaceId,
39
42
  body: request.body,