@shipfox/api-agent 7.1.0 → 9.0.1
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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +55 -0
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/core/credential-fingerprints.js +1 -1
- package/dist/core/credential-fingerprints.js.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/model-provider-config-service.d.ts.map +1 -1
- package/dist/core/model-provider-config-service.js +2 -1
- package/dist/core/model-provider-config-service.js.map +1 -1
- package/dist/core/model-provider-policy.d.ts +7 -0
- package/dist/core/model-provider-policy.d.ts.map +1 -0
- package/dist/core/model-provider-policy.js +23 -0
- package/dist/core/model-provider-policy.js.map +1 -0
- package/dist/core/model-provider-validation.d.ts +1 -1
- package/dist/core/model-provider-validation.d.ts.map +1 -1
- package/dist/core/model-provider-validation.js +1 -1
- package/dist/core/model-provider-validation.js.map +1 -1
- package/dist/core/resolve-agent-config.d.ts.map +1 -1
- package/dist/core/resolve-agent-config.js +2 -1
- package/dist/core/resolve-agent-config.js.map +1 -1
- package/dist/core/resolve-runtime-credentials.d.ts +1 -1
- package/dist/core/resolve-runtime-credentials.d.ts.map +1 -1
- package/dist/core/resolve-runtime-credentials.js +1 -1
- package/dist/core/resolve-runtime-credentials.js.map +1 -1
- package/dist/core/validation-catalog.d.ts +4 -0
- package/dist/core/validation-catalog.d.ts.map +1 -0
- package/dist/core/validation-catalog.js +24 -0
- package/dist/core/validation-catalog.js.map +1 -0
- package/dist/db/schema/model-provider-configs.d.ts.map +1 -1
- package/dist/db/schema/model-provider-configs.js +5 -4
- package/dist/db/schema/model-provider-configs.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/presentation/e2eRoutes/create-model-provider.d.ts.map +1 -1
- package/dist/presentation/e2eRoutes/create-model-provider.js +2 -1
- package/dist/presentation/e2eRoutes/create-model-provider.js.map +1 -1
- package/dist/presentation/inter-module.d.ts.map +1 -1
- package/dist/presentation/inter-module.js +2 -0
- package/dist/presentation/inter-module.js.map +1 -1
- package/dist/presentation/routes/errors.js +1 -1
- package/dist/presentation/routes/errors.js.map +1 -1
- package/dist/presentation/routes/set-default-model-provider.js +2 -1
- package/dist/presentation/routes/set-default-model-provider.js.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/drizzle/0000_daffy_leopardon.sql +5 -5
- package/drizzle/meta/0000_snapshot.json +10 -10
- package/drizzle/meta/0001_snapshot.json +10 -10
- package/package.json +17 -18
- package/src/config.ts +1 -1
- package/src/core/catalog-registry.test.ts +8 -1
- package/src/core/credential-fingerprints.ts +1 -1
- package/src/core/index.ts +7 -0
- package/src/core/model-provider-config-service.ts +1 -2
- package/src/core/model-provider-policy.ts +35 -0
- package/src/core/model-provider-validation.ts +6 -6
- package/src/core/resolve-agent-config.ts +1 -1
- package/src/core/resolve-runtime-credentials.ts +7 -8
- package/src/core/validation-catalog.ts +27 -0
- package/src/db/schema/model-provider-configs.ts +4 -4
- package/src/index.ts +6 -1
- package/src/presentation/e2eRoutes/create-model-provider.ts +2 -1
- package/src/presentation/inter-module.ts +2 -0
- package/src/presentation/routes/errors.ts +1 -1
- package/src/presentation/routes/set-default-model-provider.ts +1 -1
- package/test/globalSetup.ts +1 -1
- package/tsconfig.build.tsbuildinfo +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/resolve-runtime-credentials.ts"],"sourcesContent":["import {\n
|
|
1
|
+
{"version":3,"sources":["../../src/core/resolve-runtime-credentials.ts"],"sourcesContent":["import type {\n AgentRuntimeCredentialsResponseDto,\n AgentThinking,\n Harness,\n ModelProviderRef,\n SupportedModelProviderId,\n} from '@shipfox/api-agent-dto';\nimport {secretsInterModuleContract} from '@shipfox/api-secrets-dto/inter-module';\nimport {isInterModuleKnownError} from '@shipfox/inter-module';\nimport {config} from '#config.js';\nimport {getModelProviderConfig} from '#db/index.js';\nimport {agentRuntimeConfigResolvedCount} from '#metrics/index.js';\nimport {\n agentSystemNamespace,\n storeValuesToCustomRuntimeCredentials,\n storeValuesToRuntimeCredentials,\n} from './credential-fingerprints.js';\nimport type {ModelProviderConfig} from './entities/model-provider-config.js';\nimport {ModelProviderConfigNotFoundError} from './errors.js';\nimport {getModelProviderEntry, modelProviderCredentialKeysMatch} from './model-provider-policy.js';\nimport {type AgentSecretsClient, requireAgentSecretsClient} from './secrets-client.js';\n\nexport interface ResolveRuntimeCredentialsParams {\n workspaceId: string;\n harness: Harness;\n provider: ModelProviderRef;\n model: string;\n thinking: AgentThinking;\n}\n\ninterface RuntimeCredentialsConfig {\n AGENT_DEFAULT_PROVIDER?: SupportedModelProviderId | undefined;\n AGENT_DEFAULT_PROVIDER_API_KEY?: string | undefined;\n}\n\ninterface ResolveRuntimeCredentialsOptions {\n runtimeConfig?: RuntimeCredentialsConfig | undefined;\n secrets?: AgentSecretsClient | undefined;\n getCredentialBag?:\n | ((params: {workspaceId: string; namespace: string}) => Promise<Record<string, string>>)\n | undefined;\n}\n\nexport async function resolveRuntimeCredentials(\n params: ResolveRuntimeCredentialsParams,\n options?: ResolveRuntimeCredentialsOptions,\n): Promise<AgentRuntimeCredentialsResponseDto> {\n const runtimeConfig = options?.runtimeConfig ?? config;\n const secrets = options?.secrets;\n const providerConfig = await getModelProviderConfig({\n workspaceId: params.workspaceId,\n providerId: params.provider,\n });\n\n if (providerConfig) {\n try {\n const values = options?.getCredentialBag\n ? await options.getCredentialBag({\n workspaceId: params.workspaceId,\n namespace: agentSystemNamespace(params.provider),\n })\n : (\n await requireAgentSecretsClient(secrets).getSecretsByNamespace({\n workspaceId: params.workspaceId,\n namespace: agentSystemNamespace(params.provider),\n })\n ).values;\n if (providerConfig.kind === 'custom') {\n const credentials = storeValuesToCustomRuntimeCredentials(values);\n agentRuntimeConfigResolvedCount.add(1, {source: 'workspace', outcome: 'resolved'});\n return toResponse(params, credentials, providerConfig);\n }\n\n const providerId = params.provider as SupportedModelProviderId;\n const credentials = storeValuesToRuntimeCredentials(providerId, values);\n if (!modelProviderCredentialKeysMatch(providerId, credentials)) {\n throw new ModelProviderConfigNotFoundError(params.workspaceId, params.provider);\n }\n agentRuntimeConfigResolvedCount.add(1, {source: 'workspace', outcome: 'resolved'});\n return toResponse(params, credentials, providerConfig);\n } catch (error) {\n if (\n isInterModuleKnownError(secretsInterModuleContract.methods.getSecretsByNamespace, error)\n ) {\n agentRuntimeConfigResolvedCount.add(1, {\n source: 'workspace',\n outcome: 'decryption_failed',\n });\n }\n throw error;\n }\n }\n\n const instanceCredentials = instanceFallbackCredentials(params.provider, runtimeConfig);\n if (instanceCredentials) {\n agentRuntimeConfigResolvedCount.add(1, {source: 'instance', outcome: 'resolved'});\n return toResponse(params, instanceCredentials);\n }\n\n agentRuntimeConfigResolvedCount.add(1, {\n source: params.provider === runtimeConfig.AGENT_DEFAULT_PROVIDER ? 'instance' : 'workspace',\n outcome: 'unavailable',\n });\n throw new ModelProviderConfigNotFoundError(params.workspaceId, params.provider);\n}\n\nexport function getInstanceDefaultModelProviderApiKeyField(\n providerId: ModelProviderRef,\n): 'api_key' | undefined {\n const credentialFields =\n getModelProviderEntry(providerId as SupportedModelProviderId)?.credential_fields ?? [];\n const field = credentialFields[0];\n if (credentialFields.length !== 1 || field?.key !== 'api_key' || !field.secret) {\n return undefined;\n }\n return 'api_key';\n}\n\nfunction instanceFallbackCredentials(\n providerId: ModelProviderRef,\n runtimeConfig: RuntimeCredentialsConfig,\n): Record<string, string> | undefined {\n const instanceApiKey = runtimeConfig.AGENT_DEFAULT_PROVIDER_API_KEY;\n if (providerId !== runtimeConfig.AGENT_DEFAULT_PROVIDER || !instanceApiKey) return undefined;\n\n const fieldKey = getInstanceDefaultModelProviderApiKeyField(providerId);\n if (!fieldKey) return undefined;\n\n return {[fieldKey]: instanceApiKey};\n}\n\nfunction toResponse(\n params: ResolveRuntimeCredentialsParams,\n credentials: Record<string, string>,\n providerConfig?: ModelProviderConfig | undefined,\n): AgentRuntimeCredentialsResponseDto {\n const response: AgentRuntimeCredentialsResponseDto = {\n harness: params.harness,\n provider_id: params.provider,\n model: params.model,\n thinking: params.thinking,\n credentials,\n };\n\n if (providerConfig?.kind === 'custom') {\n response.custom_provider = {\n api: providerConfig.api ?? 'openai-responses',\n base_url: providerConfig.baseUrl ?? '',\n headers: providerConfig.headers ?? [],\n secret_header_names: Object.keys(credentials)\n .filter((key) => key.startsWith('header:'))\n .map((key) => key.slice('header:'.length))\n .sort(),\n models: providerConfig.models ?? [],\n requires_api_key: providerConfig.requiresApiKey,\n };\n }\n\n return response;\n}\n"],"names":["secretsInterModuleContract","isInterModuleKnownError","config","getModelProviderConfig","agentRuntimeConfigResolvedCount","agentSystemNamespace","storeValuesToCustomRuntimeCredentials","storeValuesToRuntimeCredentials","ModelProviderConfigNotFoundError","getModelProviderEntry","modelProviderCredentialKeysMatch","requireAgentSecretsClient","resolveRuntimeCredentials","params","options","runtimeConfig","secrets","providerConfig","workspaceId","providerId","provider","values","getCredentialBag","namespace","getSecretsByNamespace","kind","credentials","add","source","outcome","toResponse","error","methods","instanceCredentials","instanceFallbackCredentials","AGENT_DEFAULT_PROVIDER","getInstanceDefaultModelProviderApiKeyField","credentialFields","credential_fields","field","length","key","secret","undefined","instanceApiKey","AGENT_DEFAULT_PROVIDER_API_KEY","fieldKey","response","harness","provider_id","model","thinking","custom_provider","api","base_url","baseUrl","headers","secret_header_names","Object","keys","filter","startsWith","map","slice","sort","models","requires_api_key","requiresApiKey"],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AgentValidationCatalog } from '@shipfox/api-agent-dto/inter-module';
|
|
2
|
+
/** Produces the versioned, JSON-safe policy snapshot consumed by Definitions. */
|
|
3
|
+
export declare function getAgentValidationCatalog(): AgentValidationCatalog;
|
|
4
|
+
//# sourceMappingURL=validation-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-catalog.d.ts","sourceRoot":"","sources":["../../src/core/validation-catalog.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAIhF,iFAAiF;AACjF,wBAAgB,yBAAyB,IAAI,sBAAsB,CAgBlE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { listEnabledHarnessTools, listHarnessDescriptors, MODEL_PROVIDER_IDS } from '@shipfox/api-agent-dto';
|
|
2
|
+
import { harnessToolDeploymentConfig } from '#config.js';
|
|
3
|
+
import { getModelProviderEntry } from './model-provider-policy.js';
|
|
4
|
+
/** Produces the versioned, JSON-safe policy snapshot consumed by Definitions. */ export function getAgentValidationCatalog() {
|
|
5
|
+
return {
|
|
6
|
+
version: 1,
|
|
7
|
+
providers: MODEL_PROVIDER_IDS.map((id)=>({
|
|
8
|
+
id,
|
|
9
|
+
support_status: getModelProviderEntry(id)?.support_status ?? 'unsupported'
|
|
10
|
+
})),
|
|
11
|
+
harnesses: listHarnessDescriptors().map((harness)=>({
|
|
12
|
+
id: harness.id,
|
|
13
|
+
supported_provider_ids: [
|
|
14
|
+
...harness.supportedProviderIds
|
|
15
|
+
],
|
|
16
|
+
thinking_levels: [
|
|
17
|
+
...harness.thinkingLevels
|
|
18
|
+
],
|
|
19
|
+
effective_tools: listEnabledHarnessTools(harness.id, harnessToolDeploymentConfig).map((tool)=>tool.name)
|
|
20
|
+
}))
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=validation-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/validation-catalog.ts"],"sourcesContent":["import {\n listEnabledHarnessTools,\n listHarnessDescriptors,\n MODEL_PROVIDER_IDS,\n} from '@shipfox/api-agent-dto';\nimport type {AgentValidationCatalog} from '@shipfox/api-agent-dto/inter-module';\nimport {harnessToolDeploymentConfig} from '#config.js';\nimport {getModelProviderEntry} from './model-provider-policy.js';\n\n/** Produces the versioned, JSON-safe policy snapshot consumed by Definitions. */\nexport function getAgentValidationCatalog(): AgentValidationCatalog {\n return {\n version: 1,\n providers: MODEL_PROVIDER_IDS.map((id) => ({\n id,\n support_status: getModelProviderEntry(id)?.support_status ?? 'unsupported',\n })),\n harnesses: listHarnessDescriptors().map((harness) => ({\n id: harness.id,\n supported_provider_ids: [...harness.supportedProviderIds],\n thinking_levels: [...harness.thinkingLevels],\n effective_tools: listEnabledHarnessTools(harness.id, harnessToolDeploymentConfig).map(\n (tool) => tool.name,\n ),\n })),\n };\n}\n"],"names":["listEnabledHarnessTools","listHarnessDescriptors","MODEL_PROVIDER_IDS","harnessToolDeploymentConfig","getModelProviderEntry","getAgentValidationCatalog","version","providers","map","id","support_status","harnesses","harness","supported_provider_ids","supportedProviderIds","thinking_levels","thinkingLevels","effective_tools","tool","name"],"mappings":"AAAA,SACEA,uBAAuB,EACvBC,sBAAsB,EACtBC,kBAAkB,QACb,yBAAyB;AAEhC,SAAQC,2BAA2B,QAAO,aAAa;AACvD,SAAQC,qBAAqB,QAAO,6BAA6B;AAEjE,+EAA+E,GAC/E,OAAO,SAASC;IACd,OAAO;QACLC,SAAS;QACTC,WAAWL,mBAAmBM,GAAG,CAAC,CAACC,KAAQ,CAAA;gBACzCA;gBACAC,gBAAgBN,sBAAsBK,KAAKC,kBAAkB;YAC/D,CAAA;QACAC,WAAWV,yBAAyBO,GAAG,CAAC,CAACI,UAAa,CAAA;gBACpDH,IAAIG,QAAQH,EAAE;gBACdI,wBAAwB;uBAAID,QAAQE,oBAAoB;iBAAC;gBACzDC,iBAAiB;uBAAIH,QAAQI,cAAc;iBAAC;gBAC5CC,iBAAiBjB,wBAAwBY,QAAQH,EAAE,EAAEN,6BAA6BK,GAAG,CACnF,CAACU,OAASA,KAAKC,IAAI;YAEvB,CAAA;IACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-provider-configs.d.ts","sourceRoot":"","sources":["../../../src/db/schema/model-provider-configs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model-provider-configs.d.ts","sourceRoot":"","sources":["../../../src/db/schema/model-provider-configs.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,yCAAyC,CAAC;AAGjF,eAAO,MAAM,2BAA2B,6DAGtC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6BhC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,OAAO,oBAAoB,CAAC,YAAY,CAAC;AAC7E,MAAM,MAAM,2BAA2B,GAAG,OAAO,oBAAoB,CAAC,YAAY,CAAC;AAEnF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,qBAAqB,GAAG,mBAAmB,CAkBrF"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { uuidv7PrimaryKey } from '@shipfox/node-drizzle';
|
|
2
2
|
import { sql } from 'drizzle-orm';
|
|
3
|
-
import { boolean, check, jsonb, pgEnum,
|
|
4
|
-
|
|
3
|
+
import { boolean, check, jsonb, pgEnum, text, timestamp, uniqueIndex, uuid } from 'drizzle-orm/pg-core';
|
|
4
|
+
import { pgTable } from './common.js';
|
|
5
|
+
export const modelProviderConfigKindEnum = pgEnum('agent_model_provider_config_kind', [
|
|
5
6
|
'builtin',
|
|
6
7
|
'custom'
|
|
7
8
|
]);
|
|
@@ -26,8 +27,8 @@ export const modelProviderConfigs = pgTable('model_provider_configs', {
|
|
|
26
27
|
withTimezone: true
|
|
27
28
|
}).notNull().defaultNow()
|
|
28
29
|
}, (table)=>[
|
|
29
|
-
uniqueIndex('
|
|
30
|
-
check('
|
|
30
|
+
uniqueIndex('agent_model_provider_configs_workspace_provider_unique').on(table.workspaceId, table.providerId),
|
|
31
|
+
check('agent_model_provider_configs_custom_required_fields', sql`${table.kind} <> 'custom' OR (${table.api} IS NOT NULL AND ${table.baseUrl} IS NOT NULL AND ${table.models} IS NOT NULL AND ${table.displayName} IS NOT NULL)`)
|
|
31
32
|
]);
|
|
32
33
|
export function toModelProviderConfig(row) {
|
|
33
34
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/db/schema/model-provider-configs.ts"],"sourcesContent":["import type {\n AgentThinking,\n CustomAgentModelDto,\n CustomModelProviderHeaderDto,\n ModelProviderApi,\n ModelProviderRef,\n} from '@shipfox/api-agent-dto';\nimport {uuidv7PrimaryKey} from '@shipfox/node-drizzle';\nimport {sql} from 'drizzle-orm';\nimport {\n boolean,\n check,\n jsonb,\n pgEnum,\n
|
|
1
|
+
{"version":3,"sources":["../../../src/db/schema/model-provider-configs.ts"],"sourcesContent":["import type {\n AgentThinking,\n CustomAgentModelDto,\n CustomModelProviderHeaderDto,\n ModelProviderApi,\n ModelProviderRef,\n} from '@shipfox/api-agent-dto';\nimport {uuidv7PrimaryKey} from '@shipfox/node-drizzle';\nimport {sql} from 'drizzle-orm';\nimport {\n boolean,\n check,\n jsonb,\n pgEnum,\n text,\n timestamp,\n uniqueIndex,\n uuid,\n} from 'drizzle-orm/pg-core';\nimport type {ModelProviderConfig} from '#core/entities/model-provider-config.js';\nimport {pgTable} from './common.js';\n\nexport const modelProviderConfigKindEnum = pgEnum('agent_model_provider_config_kind', [\n 'builtin',\n 'custom',\n]);\n\nexport const modelProviderConfigs = pgTable(\n 'model_provider_configs',\n {\n id: uuidv7PrimaryKey(),\n workspaceId: uuid('workspace_id').notNull(),\n providerId: text('provider_id').notNull(),\n kind: modelProviderConfigKindEnum('kind').notNull().default('builtin'),\n displayName: text('display_name'),\n api: text('api').$type<ModelProviderApi>(),\n baseUrl: text('base_url'),\n headers: jsonb('headers').$type<CustomModelProviderHeaderDto[]>(),\n secretHeaderNames: jsonb('secret_header_names').$type<string[]>(),\n models: jsonb('models').$type<CustomAgentModelDto[]>(),\n requiresApiKey: boolean('requires_api_key').notNull().default(false),\n defaultModel: text('default_model'),\n defaultThinking: text('default_thinking').notNull(),\n createdAt: timestamp('created_at', {withTimezone: true}).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', {withTimezone: true}).notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('agent_model_provider_configs_workspace_provider_unique').on(\n table.workspaceId,\n table.providerId,\n ),\n check(\n 'agent_model_provider_configs_custom_required_fields',\n sql`${table.kind} <> 'custom' OR (${table.api} IS NOT NULL AND ${table.baseUrl} IS NOT NULL AND ${table.models} IS NOT NULL AND ${table.displayName} IS NOT NULL)`,\n ),\n ],\n);\n\nexport type ModelProviderConfigDb = typeof modelProviderConfigs.$inferSelect;\nexport type ModelProviderConfigCreateDb = typeof modelProviderConfigs.$inferInsert;\n\nexport function toModelProviderConfig(row: ModelProviderConfigDb): ModelProviderConfig {\n return {\n id: row.id,\n workspaceId: row.workspaceId,\n providerId: row.providerId as ModelProviderRef,\n kind: row.kind,\n displayName: row.displayName,\n api: row.api,\n baseUrl: row.baseUrl,\n headers: row.headers,\n secretHeaderNames: row.secretHeaderNames,\n models: row.models,\n requiresApiKey: row.requiresApiKey,\n defaultModel: row.defaultModel,\n defaultThinking: row.defaultThinking as AgentThinking,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n}\n"],"names":["uuidv7PrimaryKey","sql","boolean","check","jsonb","pgEnum","text","timestamp","uniqueIndex","uuid","pgTable","modelProviderConfigKindEnum","modelProviderConfigs","id","workspaceId","notNull","providerId","kind","default","displayName","api","$type","baseUrl","headers","secretHeaderNames","models","requiresApiKey","defaultModel","defaultThinking","createdAt","withTimezone","defaultNow","updatedAt","table","on","toModelProviderConfig","row"],"mappings":"AAOA,SAAQA,gBAAgB,QAAO,wBAAwB;AACvD,SAAQC,GAAG,QAAO,cAAc;AAChC,SACEC,OAAO,EACPC,KAAK,EACLC,KAAK,EACLC,MAAM,EACNC,IAAI,EACJC,SAAS,EACTC,WAAW,EACXC,IAAI,QACC,sBAAsB;AAE7B,SAAQC,OAAO,QAAO,cAAc;AAEpC,OAAO,MAAMC,8BAA8BN,OAAO,oCAAoC;IACpF;IACA;CACD,EAAE;AAEH,OAAO,MAAMO,uBAAuBF,QAClC,0BACA;IACEG,IAAIb;IACJc,aAAaL,KAAK,gBAAgBM,OAAO;IACzCC,YAAYV,KAAK,eAAeS,OAAO;IACvCE,MAAMN,4BAA4B,QAAQI,OAAO,GAAGG,OAAO,CAAC;IAC5DC,aAAab,KAAK;IAClBc,KAAKd,KAAK,OAAOe,KAAK;IACtBC,SAAShB,KAAK;IACdiB,SAASnB,MAAM,WAAWiB,KAAK;IAC/BG,mBAAmBpB,MAAM,uBAAuBiB,KAAK;IACrDI,QAAQrB,MAAM,UAAUiB,KAAK;IAC7BK,gBAAgBxB,QAAQ,oBAAoBa,OAAO,GAAGG,OAAO,CAAC;IAC9DS,cAAcrB,KAAK;IACnBsB,iBAAiBtB,KAAK,oBAAoBS,OAAO;IACjDc,WAAWtB,UAAU,cAAc;QAACuB,cAAc;IAAI,GAAGf,OAAO,GAAGgB,UAAU;IAC7EC,WAAWzB,UAAU,cAAc;QAACuB,cAAc;IAAI,GAAGf,OAAO,GAAGgB,UAAU;AAC/E,GACA,CAACE,QAAU;QACTzB,YAAY,0DAA0D0B,EAAE,CACtED,MAAMnB,WAAW,EACjBmB,MAAMjB,UAAU;QAElBb,MACE,uDACAF,GAAG,CAAC,EAAEgC,MAAMhB,IAAI,CAAC,iBAAiB,EAAEgB,MAAMb,GAAG,CAAC,iBAAiB,EAAEa,MAAMX,OAAO,CAAC,iBAAiB,EAAEW,MAAMR,MAAM,CAAC,iBAAiB,EAAEQ,MAAMd,WAAW,CAAC,aAAa,CAAC;KAErK,EACD;AAKF,OAAO,SAASgB,sBAAsBC,GAA0B;IAC9D,OAAO;QACLvB,IAAIuB,IAAIvB,EAAE;QACVC,aAAasB,IAAItB,WAAW;QAC5BE,YAAYoB,IAAIpB,UAAU;QAC1BC,MAAMmB,IAAInB,IAAI;QACdE,aAAaiB,IAAIjB,WAAW;QAC5BC,KAAKgB,IAAIhB,GAAG;QACZE,SAASc,IAAId,OAAO;QACpBC,SAASa,IAAIb,OAAO;QACpBC,mBAAmBY,IAAIZ,iBAAiB;QACxCC,QAAQW,IAAIX,MAAM;QAClBC,gBAAgBU,IAAIV,cAAc;QAClCC,cAAcS,IAAIT,YAAY;QAC9BC,iBAAiBQ,IAAIR,eAAe;QACpCC,WAAWO,IAAIP,SAAS;QACxBG,WAAWI,IAAIJ,SAAS;IAC1B;AACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ShipfoxModule } from '@shipfox/node-module';
|
|
2
2
|
import type { AgentSecretsClient } from '#core/secrets-client.js';
|
|
3
|
-
export { type AgentConfigResolutionContext, type AgentDefaultsResolver, type AgentWorkspaceSettings, buildModelProviderCatalog, type ContextualAgentConfig, catalogDefaultAgentResolver, createCustomModelProviderConfig, createWorkspaceAgentDefaultsResolver, deleteModelProviderConfig, InvalidAgentModelError, InvalidCredentialFieldsError, type ModelProviderConfig, ModelProviderConfigNotFoundError, ModelProviderValidationError, ModelProviderValidationUnavailableError, type ResolvedAgentConfig, type ResolveRuntimeCredentialsParams, resolveAgentConfig, resolveRuntimeCredentials, testAndSaveModelProviderConfig, UnsupportedModelProviderError, updateCustomModelProviderConfig, } from '#core/index.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
4
|
export { getAgentWorkspaceSettings, getModelProviderConfig, listModelProviderConfigs, setDefaultModelProvider, upsertModelProviderConfig, } from '#db/index.js';
|
|
5
5
|
export declare function createAgentModule(params: {
|
|
6
6
|
secrets: AgentSecretsClient;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,sBAAsB,EACtB,4BAA4B,EAC5B,KAAK,mBAAmB,EACxB,gCAAgC,EAChC,4BAA4B,EAC5B,uCAAuC,EACvC,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,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"}
|
package/dist/index.js
CHANGED
|
@@ -2,14 +2,15 @@ import { db, migrationsPath } from '#db/index.js';
|
|
|
2
2
|
import { createAgentE2eRoutes } from '#presentation/e2eRoutes/index.js';
|
|
3
3
|
import { createAgentInterModulePresentation } from '#presentation/inter-module.js';
|
|
4
4
|
import { createAgentRoutes } from '#presentation/routes/index.js';
|
|
5
|
-
export { buildModelProviderCatalog, catalogDefaultAgentResolver, createCustomModelProviderConfig, createWorkspaceAgentDefaultsResolver, deleteModelProviderConfig, InvalidAgentModelError, InvalidCredentialFieldsError, ModelProviderConfigNotFoundError, ModelProviderValidationError, ModelProviderValidationUnavailableError, resolveAgentConfig, resolveRuntimeCredentials, testAndSaveModelProviderConfig, UnsupportedModelProviderError, updateCustomModelProviderConfig } from '#core/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
6
|
export { getAgentWorkspaceSettings, getModelProviderConfig, listModelProviderConfigs, setDefaultModelProvider, upsertModelProviderConfig } from '#db/index.js';
|
|
7
7
|
export function createAgentModule(params) {
|
|
8
8
|
return {
|
|
9
9
|
name: 'agent',
|
|
10
10
|
database: {
|
|
11
11
|
db,
|
|
12
|
-
migrationsPath
|
|
12
|
+
migrationsPath,
|
|
13
|
+
databaseNamespace: 'agent'
|
|
13
14
|
},
|
|
14
15
|
routes: createAgentRoutes(params.secrets),
|
|
15
16
|
e2eRoutes: [
|
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 InvalidAgentModelError,\n InvalidCredentialFieldsError,\n type ModelProviderConfig,\n ModelProviderConfigNotFoundError,\n ModelProviderValidationError,\n ModelProviderValidationUnavailableError,\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},\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","InvalidAgentModelError","InvalidCredentialFieldsError","ModelProviderConfigNotFoundError","ModelProviderValidationError","ModelProviderValidationUnavailableError","resolveAgentConfig","resolveRuntimeCredentials","testAndSaveModelProviderConfig","UnsupportedModelProviderError","updateCustomModelProviderConfig","getAgentWorkspaceSettings","getModelProviderConfig","listModelProviderConfigs","setDefaultModelProvider","upsertModelProviderConfig","createAgentModule","params","name","database","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,sBAAsB,EACtBC,4BAA4B,
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-model-provider.d.ts","sourceRoot":"","sources":["../../../src/presentation/e2eRoutes/create-model-provider.ts"],"names":[],"mappings":"
|
|
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,8 +1,9 @@
|
|
|
1
|
-
import { DEFAULT_AGENT_THINKING
|
|
1
|
+
import { DEFAULT_AGENT_THINKING } from '@shipfox/api-agent-dto';
|
|
2
2
|
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 { getModelProviderEntry } from '#core/model-provider-policy.js';
|
|
6
7
|
import { upsertModelProviderConfig } from '#db/index.js';
|
|
7
8
|
const createE2eModelProviderBodySchema = z.object({
|
|
8
9
|
workspace_id: z.string().uuid(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/presentation/e2eRoutes/create-model-provider.ts"],"sourcesContent":["import {DEFAULT_AGENT_THINKING
|
|
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 +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;
|
|
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"}
|
|
@@ -4,9 +4,11 @@ import { createInterModuleKnownError, defineInterModulePresentation, isInterModu
|
|
|
4
4
|
import { InvalidAgentModelError, ModelProviderConfigNotFoundError, UnsupportedHarnessProviderError, UnsupportedHarnessThinkingError, UnsupportedModelProviderError } 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
|
+
import { getAgentValidationCatalog } from '#core/validation-catalog.js';
|
|
7
8
|
import { createWorkspaceAgentDefaultsResolver } from '#core/workspace-agent-defaults-resolver.js';
|
|
8
9
|
export function createAgentInterModulePresentation(params) {
|
|
9
10
|
return defineInterModulePresentation(agentInterModuleContract, {
|
|
11
|
+
getValidationCatalog: ()=>getAgentValidationCatalog(),
|
|
10
12
|
resolveAgentConfig: async ({ workspaceId, config })=>{
|
|
11
13
|
try {
|
|
12
14
|
const resolve = workspaceId === null ? resolveAgentConfig : await createWorkspaceAgentDefaultsResolver(workspaceId);
|
|
@@ -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 {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 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","createWorkspaceAgentDefaultsResolver","createAgentInterModulePresentation","params","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,oCAAoC,QAAO,6CAA6C;AAEhG,OAAO,SAASC,mCAAmCC,MAElD;IACC,
|
|
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,9 +1,9 @@
|
|
|
1
|
-
import { getModelProviderCredentialKeys } from '@shipfox/api-agent-dto';
|
|
2
1
|
import { secretsInterModuleContract } from '@shipfox/api-secrets-dto/inter-module';
|
|
3
2
|
import { isInterModuleKnownError } from '@shipfox/inter-module';
|
|
4
3
|
import { EgressDeniedError } from '@shipfox/node-egress-guard';
|
|
5
4
|
import { ClientError } from '@shipfox/node-fastify';
|
|
6
5
|
import { CustomModelProviderConfigNotFoundError, CustomModelProviderSlugCollisionError, CustomModelProviderStoredSecretBaseUrlChangeError, InvalidAgentModelError, InvalidCredentialFieldsError, InvalidCustomModelProviderHeaderKeepError, ModelProviderConfigNotFoundError, ModelProviderValidationError, UnsupportedModelProviderError } from '#core/index.js';
|
|
6
|
+
import { getModelProviderCredentialKeys } from '#core/model-provider-policy.js';
|
|
7
7
|
export function translateModelProviderRouteError(error) {
|
|
8
8
|
if (error instanceof ModelProviderValidationError) {
|
|
9
9
|
throw new ClientError(error.sanitizedMessage, 'provider-validation-failed', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/presentation/routes/errors.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../../src/presentation/routes/errors.ts"],"sourcesContent":["import {secretsInterModuleContract} from '@shipfox/api-secrets-dto/inter-module';\nimport {isInterModuleKnownError} from '@shipfox/inter-module';\nimport {EgressDeniedError} from '@shipfox/node-egress-guard';\nimport {ClientError} from '@shipfox/node-fastify';\nimport {\n CustomModelProviderConfigNotFoundError,\n CustomModelProviderSlugCollisionError,\n CustomModelProviderStoredSecretBaseUrlChangeError,\n InvalidAgentModelError,\n InvalidCredentialFieldsError,\n InvalidCustomModelProviderHeaderKeepError,\n ModelProviderConfigNotFoundError,\n ModelProviderValidationError,\n UnsupportedModelProviderError,\n} from '#core/index.js';\nimport {getModelProviderCredentialKeys} from '#core/model-provider-policy.js';\n\nexport function translateModelProviderRouteError(error: unknown): never {\n if (error instanceof ModelProviderValidationError) {\n throw new ClientError(error.sanitizedMessage, 'provider-validation-failed', {\n status: 422,\n details: {\n provider_id: error.providerId,\n message: error.sanitizedMessage,\n },\n });\n }\n\n if (error instanceof EgressDeniedError) {\n throw new ClientError('Egress denied', 'egress-denied', {\n status: 400,\n details: {\n reason: error.reason,\n target: error.target,\n },\n });\n }\n\n if (error instanceof CustomModelProviderSlugCollisionError) {\n throw new ClientError('Custom model provider slug already exists', 'slug-collision', {\n status: 409,\n details: {provider_id: error.providerId},\n });\n }\n\n if (error instanceof CustomModelProviderConfigNotFoundError) {\n throw new ClientError('Custom model provider configuration not found', 'not-found', {\n status: 404,\n details: {provider_id: error.providerId},\n });\n }\n\n if (error instanceof InvalidCustomModelProviderHeaderKeepError) {\n throw new ClientError('Invalid kept secret header', 'invalid-header-keep', {\n status: 422,\n details: {provider_id: error.providerId, name: error.headerName},\n });\n }\n\n if (error instanceof CustomModelProviderStoredSecretBaseUrlChangeError) {\n throw new ClientError(\n 'Stored custom model provider secrets cannot be reused with a changed base URL',\n 'stored-secret-base-url-changed',\n {\n status: 422,\n details: {provider_id: error.providerId},\n },\n );\n }\n\n if (error instanceof InvalidCredentialFieldsError) {\n throw new ClientError('Invalid credential fields', 'invalid-credential-fields', {\n status: 422,\n details: {\n provider_id: error.providerId,\n expected_keys: getModelProviderCredentialKeys(error.providerId) ?? [],\n },\n });\n }\n\n if (error instanceof InvalidAgentModelError) {\n throw new ClientError('Invalid agent model', 'invalid-agent-model', {\n status: 422,\n details: {\n harness: error.harness,\n provider_id: error.providerId,\n model: error.model,\n },\n });\n }\n\n if (error instanceof UnsupportedModelProviderError) {\n throw new ClientError('Provider is not supported', 'provider-unsupported', {\n status: 422,\n details: {provider_id: error.providerId},\n });\n }\n\n if (error instanceof ModelProviderConfigNotFoundError) {\n throw new ClientError('Provider is not configured', 'provider-not-configured', {\n status: 422,\n details: {\n provider_id: error.providerId,\n },\n });\n }\n\n if (isInterModuleKnownError(secretsInterModuleContract.methods.setSecrets, error)) {\n if (error.code === 'workspace-secret-cap-exceeded') {\n throw new ClientError('Workspace secret cap exceeded', 'workspace-secret-cap-exceeded', {\n status: 409,\n details: {cap: error.details.cap},\n });\n }\n throw new ClientError('Secret value is too large', 'value-too-large', {\n status: 400,\n details: {max_bytes: error.details.maxBytes},\n });\n }\n\n throw error;\n}\n"],"names":["secretsInterModuleContract","isInterModuleKnownError","EgressDeniedError","ClientError","CustomModelProviderConfigNotFoundError","CustomModelProviderSlugCollisionError","CustomModelProviderStoredSecretBaseUrlChangeError","InvalidAgentModelError","InvalidCredentialFieldsError","InvalidCustomModelProviderHeaderKeepError","ModelProviderConfigNotFoundError","ModelProviderValidationError","UnsupportedModelProviderError","getModelProviderCredentialKeys","translateModelProviderRouteError","error","sanitizedMessage","status","details","provider_id","providerId","message","reason","target","name","headerName","expected_keys","harness","model","methods","setSecrets","code","cap","max_bytes","maxBytes"],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { setDefaultModelProviderBodySchema, setDefaultModelProviderResponseSchema } from '@shipfox/api-agent-dto';
|
|
2
2
|
import { requireWorkspaceAccess } from '@shipfox/api-auth-context';
|
|
3
3
|
import { defineRoute } from '@shipfox/node-fastify';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { UnsupportedModelProviderError } from '#core/index.js';
|
|
6
|
+
import { getModelProviderEntry } from '#core/model-provider-policy.js';
|
|
6
7
|
import { getModelProviderConfig, setDefaultModelProvider } from '#db/index.js';
|
|
7
8
|
import { translateModelProviderRouteError } from './errors.js';
|
|
8
9
|
export const setDefaultModelProviderRoute = defineRoute({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/presentation/routes/set-default-model-provider.ts"],"sourcesContent":["import {\n
|
|
1
|
+
{"version":3,"sources":["../../../src/presentation/routes/set-default-model-provider.ts"],"sourcesContent":["import {\n setDefaultModelProviderBodySchema,\n setDefaultModelProviderResponseSchema,\n} from '@shipfox/api-agent-dto';\nimport {requireWorkspaceAccess} from '@shipfox/api-auth-context';\nimport {defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {UnsupportedModelProviderError} from '#core/index.js';\nimport {getModelProviderEntry} from '#core/model-provider-policy.js';\nimport {getModelProviderConfig, setDefaultModelProvider} from '#db/index.js';\nimport {translateModelProviderRouteError} from './errors.js';\n\nexport const setDefaultModelProviderRoute = defineRoute({\n method: 'PUT',\n path: '/default-model-provider',\n description: 'Set the default model provider for a workspace',\n schema: {\n params: z.object({workspaceId: z.string().uuid()}),\n body: setDefaultModelProviderBodySchema,\n response: {\n 200: setDefaultModelProviderResponseSchema,\n },\n },\n errorHandler: translateModelProviderRouteError,\n handler: async (request) => {\n const {workspaceId} = request.params;\n requireWorkspaceAccess({request, workspaceId});\n\n const existingConfig = await getModelProviderConfig({\n workspaceId,\n providerId: request.body.provider_id,\n });\n if (existingConfig?.kind !== 'custom') {\n const entry = getModelProviderEntry(request.body.provider_id);\n if (entry === undefined || entry.support_status !== 'supported') {\n throw new UnsupportedModelProviderError(request.body.provider_id);\n }\n }\n\n const settings = await setDefaultModelProvider({\n workspaceId,\n providerId: request.body.provider_id,\n });\n\n return {default_provider_id: settings.defaultProviderId};\n },\n});\n"],"names":["setDefaultModelProviderBodySchema","setDefaultModelProviderResponseSchema","requireWorkspaceAccess","defineRoute","z","UnsupportedModelProviderError","getModelProviderEntry","getModelProviderConfig","setDefaultModelProvider","translateModelProviderRouteError","setDefaultModelProviderRoute","method","path","description","schema","params","object","workspaceId","string","uuid","body","response","errorHandler","handler","request","existingConfig","providerId","provider_id","kind","entry","undefined","support_status","settings","default_provider_id","defaultProviderId"],"mappings":"AAAA,SACEA,iCAAiC,EACjCC,qCAAqC,QAChC,yBAAyB;AAChC,SAAQC,sBAAsB,QAAO,4BAA4B;AACjE,SAAQC,WAAW,QAAO,wBAAwB;AAClD,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,6BAA6B,QAAO,iBAAiB;AAC7D,SAAQC,qBAAqB,QAAO,iCAAiC;AACrE,SAAQC,sBAAsB,EAAEC,uBAAuB,QAAO,eAAe;AAC7E,SAAQC,gCAAgC,QAAO,cAAc;AAE7D,OAAO,MAAMC,+BAA+BP,YAAY;IACtDQ,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNC,QAAQX,EAAEY,MAAM,CAAC;YAACC,aAAab,EAAEc,MAAM,GAAGC,IAAI;QAAE;QAChDC,MAAMpB;QACNqB,UAAU;YACR,KAAKpB;QACP;IACF;IACAqB,cAAcb;IACdc,SAAS,OAAOC;QACd,MAAM,EAACP,WAAW,EAAC,GAAGO,QAAQT,MAAM;QACpCb,uBAAuB;YAACsB;YAASP;QAAW;QAE5C,MAAMQ,iBAAiB,MAAMlB,uBAAuB;YAClDU;YACAS,YAAYF,QAAQJ,IAAI,CAACO,WAAW;QACtC;QACA,IAAIF,gBAAgBG,SAAS,UAAU;YACrC,MAAMC,QAAQvB,sBAAsBkB,QAAQJ,IAAI,CAACO,WAAW;YAC5D,IAAIE,UAAUC,aAAaD,MAAME,cAAc,KAAK,aAAa;gBAC/D,MAAM,IAAI1B,8BAA8BmB,QAAQJ,IAAI,CAACO,WAAW;YAClE;QACF;QAEA,MAAMK,WAAW,MAAMxB,wBAAwB;YAC7CS;YACAS,YAAYF,QAAQJ,IAAI,CAACO,WAAW;QACtC;QAEA,OAAO;YAACM,qBAAqBD,SAASE,iBAAiB;QAAA;IACzD;AACF,GAAG"}
|