@shipfox/api-agent 4.0.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +48 -0
  3. package/dist/core/custom-model-provider-config-service.d.ts +4 -0
  4. package/dist/core/custom-model-provider-config-service.d.ts.map +1 -1
  5. package/dist/core/custom-model-provider-config-service.js +19 -16
  6. package/dist/core/custom-model-provider-config-service.js.map +1 -1
  7. package/dist/core/model-provider-config-service.d.ts +4 -0
  8. package/dist/core/model-provider-config-service.d.ts.map +1 -1
  9. package/dist/core/model-provider-config-service.js +10 -8
  10. package/dist/core/model-provider-config-service.js.map +1 -1
  11. package/dist/core/resolve-runtime-credentials.d.ts +6 -2
  12. package/dist/core/resolve-runtime-credentials.d.ts.map +1 -1
  13. package/dist/core/resolve-runtime-credentials.js +10 -5
  14. package/dist/core/resolve-runtime-credentials.js.map +1 -1
  15. package/dist/core/secrets-client.d.ts +4 -0
  16. package/dist/core/secrets-client.d.ts.map +1 -0
  17. package/dist/core/secrets-client.js +6 -0
  18. package/dist/core/secrets-client.js.map +1 -0
  19. package/dist/index.d.ts +4 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +19 -13
  22. package/dist/index.js.map +1 -1
  23. package/dist/presentation/e2eRoutes/create-model-provider.d.ts +2 -1
  24. package/dist/presentation/e2eRoutes/create-model-provider.d.ts.map +1 -1
  25. package/dist/presentation/e2eRoutes/create-model-provider.js +46 -45
  26. package/dist/presentation/e2eRoutes/create-model-provider.js.map +1 -1
  27. package/dist/presentation/e2eRoutes/index.d.ts +2 -0
  28. package/dist/presentation/e2eRoutes/index.d.ts.map +1 -1
  29. package/dist/presentation/e2eRoutes/index.js +9 -6
  30. package/dist/presentation/e2eRoutes/index.js.map +1 -1
  31. package/dist/presentation/index.d.ts +1 -1
  32. package/dist/presentation/index.d.ts.map +1 -1
  33. package/dist/presentation/index.js +1 -1
  34. package/dist/presentation/index.js.map +1 -1
  35. package/dist/presentation/inter-module.d.ts +7 -0
  36. package/dist/presentation/inter-module.d.ts.map +1 -0
  37. package/dist/presentation/inter-module.js +45 -0
  38. package/dist/presentation/inter-module.js.map +1 -0
  39. package/dist/presentation/routes/create-custom-model-provider.d.ts +2 -1
  40. package/dist/presentation/routes/create-custom-model-provider.d.ts.map +1 -1
  41. package/dist/presentation/routes/create-custom-model-provider.js +39 -35
  42. package/dist/presentation/routes/create-custom-model-provider.js.map +1 -1
  43. package/dist/presentation/routes/delete-model-provider-config.d.ts +2 -1
  44. package/dist/presentation/routes/delete-model-provider-config.d.ts.map +1 -1
  45. package/dist/presentation/routes/delete-model-provider-config.js +33 -29
  46. package/dist/presentation/routes/delete-model-provider-config.js.map +1 -1
  47. package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.d.ts +2 -1
  48. package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.d.ts.map +1 -1
  49. package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.js +32 -28
  50. package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.js.map +1 -1
  51. package/dist/presentation/routes/errors.d.ts.map +1 -1
  52. package/dist/presentation/routes/errors.js +13 -12
  53. package/dist/presentation/routes/errors.js.map +1 -1
  54. package/dist/presentation/routes/index.d.ts +2 -0
  55. package/dist/presentation/routes/index.d.ts.map +1 -1
  56. package/dist/presentation/routes/index.js +32 -29
  57. package/dist/presentation/routes/index.js.map +1 -1
  58. package/dist/presentation/routes/update-custom-model-provider.d.ts +2 -1
  59. package/dist/presentation/routes/update-custom-model-provider.d.ts.map +1 -1
  60. package/dist/presentation/routes/update-custom-model-provider.js +41 -37
  61. package/dist/presentation/routes/update-custom-model-provider.js.map +1 -1
  62. package/dist/presentation/routes/upsert-model-provider-config.d.ts +2 -1
  63. package/dist/presentation/routes/upsert-model-provider-config.d.ts.map +1 -1
  64. package/dist/presentation/routes/upsert-model-provider-config.js +46 -42
  65. package/dist/presentation/routes/upsert-model-provider-config.js.map +1 -1
  66. package/dist/tsconfig.test.tsbuildinfo +1 -1
  67. package/package.json +30 -61
  68. package/src/core/custom-model-provider-config-service.ts +50 -34
  69. package/src/core/model-provider-config-service.test.ts +1 -3
  70. package/src/core/model-provider-config-service.ts +18 -15
  71. package/src/core/resolve-runtime-credentials.test.ts +3 -3
  72. package/src/core/resolve-runtime-credentials.ts +22 -8
  73. package/src/core/secrets-client.ts +13 -0
  74. package/src/index.ts +13 -8
  75. package/src/presentation/e2eRoutes/create-model-provider.ts +41 -39
  76. package/src/presentation/e2eRoutes/index.ts +6 -4
  77. package/src/presentation/index.ts +1 -1
  78. package/src/presentation/inter-module.ts +78 -0
  79. package/src/presentation/routes/create-custom-model-provider.ts +36 -30
  80. package/src/presentation/routes/delete-model-provider-config.ts +25 -22
  81. package/src/presentation/routes/discover-custom-model-provider-models-by-slug.ts +31 -25
  82. package/src/presentation/routes/errors.ts +11 -11
  83. package/src/presentation/routes/index.ts +32 -27
  84. package/src/presentation/routes/model-provider-config.test.ts +1 -1
  85. package/src/presentation/routes/update-custom-model-provider.ts +40 -34
  86. package/src/presentation/routes/upsert-model-provider-config.ts +43 -37
  87. package/test/fixtures/secrets-client.ts +80 -0
  88. package/test/globalSetup.ts +0 -9
  89. package/test/setup.ts +8 -0
  90. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/resolve-runtime-credentials.ts"],"sourcesContent":["import {\n type AgentRuntimeCredentialsResponseDto,\n type AgentThinking,\n getModelProviderEntry,\n type Harness,\n type ModelProviderRef,\n modelProviderCredentialKeysMatch,\n type SupportedModelProviderId,\n} from '@shipfox/api-agent-dto';\nimport {getSecretsByNamespace, SecretDecryptionError} from '@shipfox/api-secrets';\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';\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 getCredentialBag?: typeof getSecretsByNamespace | undefined;\n}\n\nexport async function resolveRuntimeCredentials(\n params: ResolveRuntimeCredentialsParams,\n options?: ResolveRuntimeCredentialsOptions,\n): Promise<AgentRuntimeCredentialsResponseDto> {\n const runtimeConfig = options?.runtimeConfig ?? config;\n const getCredentialBag = options?.getCredentialBag ?? getSecretsByNamespace;\n const providerConfig = await getModelProviderConfig({\n workspaceId: params.workspaceId,\n providerId: params.provider,\n });\n\n if (providerConfig) {\n try {\n const values = await getCredentialBag({\n workspaceId: params.workspaceId,\n namespace: agentSystemNamespace(params.provider),\n });\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 (error instanceof SecretDecryptionError) {\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":["getModelProviderEntry","modelProviderCredentialKeysMatch","getSecretsByNamespace","SecretDecryptionError","config","getModelProviderConfig","agentRuntimeConfigResolvedCount","agentSystemNamespace","storeValuesToCustomRuntimeCredentials","storeValuesToRuntimeCredentials","ModelProviderConfigNotFoundError","resolveRuntimeCredentials","params","options","runtimeConfig","getCredentialBag","providerConfig","workspaceId","providerId","provider","values","namespace","kind","credentials","add","source","outcome","toResponse","error","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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"}
1
+ {"version":3,"sources":["../../src/core/resolve-runtime-credentials.ts"],"sourcesContent":["import {\n type AgentRuntimeCredentialsResponseDto,\n type AgentThinking,\n getModelProviderEntry,\n type Harness,\n type ModelProviderRef,\n modelProviderCredentialKeysMatch,\n type 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 {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":["getModelProviderEntry","modelProviderCredentialKeysMatch","secretsInterModuleContract","isInterModuleKnownError","config","getModelProviderConfig","agentRuntimeConfigResolvedCount","agentSystemNamespace","storeValuesToCustomRuntimeCredentials","storeValuesToRuntimeCredentials","ModelProviderConfigNotFoundError","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":"AAAA,SAGEA,qBAAqB,EAGrBC,gCAAgC,QAE3B,yBAAyB;AAChC,SAAQC,0BAA0B,QAAO,wCAAwC;AACjF,SAAQC,uBAAuB,QAAO,wBAAwB;AAC9D,SAAQC,MAAM,QAAO,aAAa;AAClC,SAAQC,sBAAsB,QAAO,eAAe;AACpD,SAAQC,+BAA+B,QAAO,oBAAoB;AAClE,SACEC,oBAAoB,EACpBC,qCAAqC,EACrCC,+BAA+B,QAC1B,+BAA+B;AAEtC,SAAQC,gCAAgC,QAAO,cAAc;AAC7D,SAAiCC,yBAAyB,QAAO,sBAAsB;AAuBvF,OAAO,eAAeC,0BACpBC,MAAuC,EACvCC,OAA0C;IAE1C,MAAMC,gBAAgBD,SAASC,iBAAiBX;IAChD,MAAMY,UAAUF,SAASE;IACzB,MAAMC,iBAAiB,MAAMZ,uBAAuB;QAClDa,aAAaL,OAAOK,WAAW;QAC/BC,YAAYN,OAAOO,QAAQ;IAC7B;IAEA,IAAIH,gBAAgB;QAClB,IAAI;YACF,MAAMI,SAASP,SAASQ,mBACpB,MAAMR,QAAQQ,gBAAgB,CAAC;gBAC7BJ,aAAaL,OAAOK,WAAW;gBAC/BK,WAAWhB,qBAAqBM,OAAOO,QAAQ;YACjD,KACA,AACE,CAAA,MAAMT,0BAA0BK,SAASQ,qBAAqB,CAAC;gBAC7DN,aAAaL,OAAOK,WAAW;gBAC/BK,WAAWhB,qBAAqBM,OAAOO,QAAQ;YACjD,EAAC,EACDC,MAAM;YACZ,IAAIJ,eAAeQ,IAAI,KAAK,UAAU;gBACpC,MAAMC,cAAclB,sCAAsCa;gBAC1Df,gCAAgCqB,GAAG,CAAC,GAAG;oBAACC,QAAQ;oBAAaC,SAAS;gBAAU;gBAChF,OAAOC,WAAWjB,QAAQa,aAAaT;YACzC;YAEA,MAAME,aAAaN,OAAOO,QAAQ;YAClC,MAAMM,cAAcjB,gCAAgCU,YAAYE;YAChE,IAAI,CAACpB,iCAAiCkB,YAAYO,cAAc;gBAC9D,MAAM,IAAIhB,iCAAiCG,OAAOK,WAAW,EAAEL,OAAOO,QAAQ;YAChF;YACAd,gCAAgCqB,GAAG,CAAC,GAAG;gBAACC,QAAQ;gBAAaC,SAAS;YAAU;YAChF,OAAOC,WAAWjB,QAAQa,aAAaT;QACzC,EAAE,OAAOc,OAAO;YACd,IACE5B,wBAAwBD,2BAA2B8B,OAAO,CAACR,qBAAqB,EAAEO,QAClF;gBACAzB,gCAAgCqB,GAAG,CAAC,GAAG;oBACrCC,QAAQ;oBACRC,SAAS;gBACX;YACF;YACA,MAAME;QACR;IACF;IAEA,MAAME,sBAAsBC,4BAA4BrB,OAAOO,QAAQ,EAAEL;IACzE,IAAIkB,qBAAqB;QACvB3B,gCAAgCqB,GAAG,CAAC,GAAG;YAACC,QAAQ;YAAYC,SAAS;QAAU;QAC/E,OAAOC,WAAWjB,QAAQoB;IAC5B;IAEA3B,gCAAgCqB,GAAG,CAAC,GAAG;QACrCC,QAAQf,OAAOO,QAAQ,KAAKL,cAAcoB,sBAAsB,GAAG,aAAa;QAChFN,SAAS;IACX;IACA,MAAM,IAAInB,iCAAiCG,OAAOK,WAAW,EAAEL,OAAOO,QAAQ;AAChF;AAEA,OAAO,SAASgB,2CACdjB,UAA4B;IAE5B,MAAMkB,mBACJrC,sBAAsBmB,aAAyCmB,qBAAqB,EAAE;IACxF,MAAMC,QAAQF,gBAAgB,CAAC,EAAE;IACjC,IAAIA,iBAAiBG,MAAM,KAAK,KAAKD,OAAOE,QAAQ,aAAa,CAACF,MAAMG,MAAM,EAAE;QAC9E,OAAOC;IACT;IACA,OAAO;AACT;AAEA,SAAST,4BACPf,UAA4B,EAC5BJ,aAAuC;IAEvC,MAAM6B,iBAAiB7B,cAAc8B,8BAA8B;IACnE,IAAI1B,eAAeJ,cAAcoB,sBAAsB,IAAI,CAACS,gBAAgB,OAAOD;IAEnF,MAAMG,WAAWV,2CAA2CjB;IAC5D,IAAI,CAAC2B,UAAU,OAAOH;IAEtB,OAAO;QAAC,CAACG,SAAS,EAAEF;IAAc;AACpC;AAEA,SAASd,WACPjB,MAAuC,EACvCa,WAAmC,EACnCT,cAAgD;IAEhD,MAAM8B,WAA+C;QACnDC,SAASnC,OAAOmC,OAAO;QACvBC,aAAapC,OAAOO,QAAQ;QAC5B8B,OAAOrC,OAAOqC,KAAK;QACnBC,UAAUtC,OAAOsC,QAAQ;QACzBzB;IACF;IAEA,IAAIT,gBAAgBQ,SAAS,UAAU;QACrCsB,SAASK,eAAe,GAAG;YACzBC,KAAKpC,eAAeoC,GAAG,IAAI;YAC3BC,UAAUrC,eAAesC,OAAO,IAAI;YACpCC,SAASvC,eAAeuC,OAAO,IAAI,EAAE;YACrCC,qBAAqBC,OAAOC,IAAI,CAACjC,aAC9BkC,MAAM,CAAC,CAACnB,MAAQA,IAAIoB,UAAU,CAAC,YAC/BC,GAAG,CAAC,CAACrB,MAAQA,IAAIsB,KAAK,CAAC,UAAUvB,MAAM,GACvCwB,IAAI;YACPC,QAAQhD,eAAegD,MAAM,IAAI,EAAE;YACnCC,kBAAkBjD,eAAekD,cAAc;QACjD;IACF;IAEA,OAAOpB;AACT"}
@@ -0,0 +1,4 @@
1
+ import type { SecretsInterModuleClient } from '@shipfox/api-secrets-dto/inter-module';
2
+ export type AgentSecretsClient = Pick<SecretsInterModuleClient, 'deleteSecrets' | 'getSecretsByNamespace' | 'setSecrets'>;
3
+ export declare function requireAgentSecretsClient(secrets: AgentSecretsClient | undefined): AgentSecretsClient;
4
+ //# sourceMappingURL=secrets-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets-client.d.ts","sourceRoot":"","sources":["../../src/core/secrets-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAEpF,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,wBAAwB,EACxB,eAAe,GAAG,uBAAuB,GAAG,YAAY,CACzD,CAAC;AAEF,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,kBAAkB,GAAG,SAAS,GACtC,kBAAkB,CAGpB"}
@@ -0,0 +1,6 @@
1
+ export function requireAgentSecretsClient(secrets) {
2
+ if (secrets) return secrets;
3
+ throw new Error('Agent Secrets client is not configured.');
4
+ }
5
+
6
+ //# sourceMappingURL=secrets-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/secrets-client.ts"],"sourcesContent":["import type {SecretsInterModuleClient} from '@shipfox/api-secrets-dto/inter-module';\n\nexport type AgentSecretsClient = Pick<\n SecretsInterModuleClient,\n 'deleteSecrets' | 'getSecretsByNamespace' | 'setSecrets'\n>;\n\nexport function requireAgentSecretsClient(\n secrets: AgentSecretsClient | undefined,\n): AgentSecretsClient {\n if (secrets) return secrets;\n throw new Error('Agent Secrets client is not configured.');\n}\n"],"names":["requireAgentSecretsClient","secrets","Error"],"mappings":"AAOA,OAAO,SAASA,0BACdC,OAAuC;IAEvC,IAAIA,SAAS,OAAOA;IACpB,MAAM,IAAIC,MAAM;AAClB"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,8 @@
1
1
  import type { ShipfoxModule } from '@shipfox/node-module';
2
+ import type { AgentSecretsClient } from '#core/secrets-client.js';
2
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
4
  export { getAgentWorkspaceSettings, getModelProviderConfig, listModelProviderConfigs, setDefaultModelProvider, upsertModelProviderConfig, } from '#db/index.js';
4
- export declare const agentModule: ShipfoxModule;
5
+ export declare function createAgentModule(params: {
6
+ secrets: AgentSecretsClient;
7
+ }): ShipfoxModule;
5
8
  //# 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;AAKxD,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,eAAO,MAAM,WAAW,EAAE,aAKzB,CAAC"}
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"}
package/dist/index.js CHANGED
@@ -1,18 +1,24 @@
1
1
  import { db, migrationsPath } from '#db/index.js';
2
- import { agentE2eRoutes } from '#presentation/e2eRoutes/index.js';
3
- import { routes } from '#presentation/index.js';
2
+ import { createAgentE2eRoutes } from '#presentation/e2eRoutes/index.js';
3
+ import { createAgentInterModulePresentation } from '#presentation/inter-module.js';
4
+ import { createAgentRoutes } from '#presentation/routes/index.js';
4
5
  export { buildModelProviderCatalog, catalogDefaultAgentResolver, createCustomModelProviderConfig, createWorkspaceAgentDefaultsResolver, deleteModelProviderConfig, InvalidAgentModelError, InvalidCredentialFieldsError, ModelProviderConfigNotFoundError, ModelProviderValidationError, ModelProviderValidationUnavailableError, resolveAgentConfig, resolveRuntimeCredentials, testAndSaveModelProviderConfig, UnsupportedModelProviderError, updateCustomModelProviderConfig } from '#core/index.js';
5
6
  export { getAgentWorkspaceSettings, getModelProviderConfig, listModelProviderConfigs, setDefaultModelProvider, upsertModelProviderConfig } from '#db/index.js';
6
- export const agentModule = {
7
- name: 'agent',
8
- database: {
9
- db,
10
- migrationsPath
11
- },
12
- routes,
13
- e2eRoutes: [
14
- agentE2eRoutes
15
- ]
16
- };
7
+ export function createAgentModule(params) {
8
+ return {
9
+ name: 'agent',
10
+ database: {
11
+ db,
12
+ migrationsPath
13
+ },
14
+ routes: createAgentRoutes(params.secrets),
15
+ e2eRoutes: [
16
+ createAgentE2eRoutes(params.secrets)
17
+ ],
18
+ interModulePresentations: [
19
+ createAgentInterModulePresentation(params)
20
+ ]
21
+ };
22
+ }
17
23
 
18
24
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type {ShipfoxModule} from '@shipfox/node-module';\nimport {db, migrationsPath} from '#db/index.js';\nimport {agentE2eRoutes} from '#presentation/e2eRoutes/index.js';\nimport {routes} from '#presentation/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 const agentModule: ShipfoxModule = {\n name: 'agent',\n database: {db, migrationsPath},\n routes,\n e2eRoutes: [agentE2eRoutes],\n};\n"],"names":["db","migrationsPath","agentE2eRoutes","routes","buildModelProviderCatalog","catalogDefaultAgentResolver","createCustomModelProviderConfig","createWorkspaceAgentDefaultsResolver","deleteModelProviderConfig","InvalidAgentModelError","InvalidCredentialFieldsError","ModelProviderConfigNotFoundError","ModelProviderValidationError","ModelProviderValidationUnavailableError","resolveAgentConfig","resolveRuntimeCredentials","testAndSaveModelProviderConfig","UnsupportedModelProviderError","updateCustomModelProviderConfig","getAgentWorkspaceSettings","getModelProviderConfig","listModelProviderConfigs","setDefaultModelProvider","upsertModelProviderConfig","agentModule","name","database","e2eRoutes"],"mappings":"AACA,SAAQA,EAAE,EAAEC,cAAc,QAAO,eAAe;AAChD,SAAQC,cAAc,QAAO,mCAAmC;AAChE,SAAQC,MAAM,QAAO,yBAAyB;AAE9C,SAIEC,yBAAyB,EAEzBC,2BAA2B,EAC3BC,+BAA+B,EAC/BC,oCAAoC,EACpCC,yBAAyB,EACzBC,sBAAsB,EACtBC,4BAA4B,EAE5BC,gCAAgC,EAChCC,4BAA4B,EAC5BC,uCAAuC,EAGvCC,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,MAAMC,cAA6B;IACxCC,MAAM;IACNC,UAAU;QAAC1B;QAAIC;IAAc;IAC7BE;IACAwB,WAAW;QAACzB;KAAe;AAC7B,EAAE"}
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,EAE5BC,gCAAgC,EAChCC,4BAA4B,EAC5BC,uCAAuC,EAGvCC,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;YAAC5B;YAAIC;QAAc;QAC7B4B,QAAQzB,kBAAkBsB,OAAOI,OAAO;QACxCC,WAAW;YAAC7B,qBAAqBwB,OAAOI,OAAO;SAAE;QACjDE,0BAA0B;YAAC7B,mCAAmCuB;SAAQ;IACxE;AACF"}
@@ -1,2 +1,3 @@
1
- export declare const createE2eModelProviderRoute: import("@shipfox/node-fastify").RouteDefinition;
1
+ import type { AgentSecretsClient } from '#core/secrets-client.js';
2
+ export declare function createE2eModelProviderRoute(secrets: AgentSecretsClient): import("@shipfox/node-fastify").RouteDefinition;
2
3
  //# 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":"AAoBA,eAAO,MAAM,2BAA2B,iDAwCtC,CAAC"}
1
+ {"version":3,"file":"create-model-provider.d.ts","sourceRoot":"","sources":["../../../src/presentation/e2eRoutes/create-model-provider.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAehE,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,kBAAkB,mDA0CtE"}
@@ -1,5 +1,4 @@
1
1
  import { DEFAULT_AGENT_THINKING, getModelProviderEntry } from '@shipfox/api-agent-dto';
2
- import { setSecrets } from '@shipfox/api-secrets';
3
2
  import { ClientError, defineRoute } from '@shipfox/node-fastify';
4
3
  import { z } from 'zod';
5
4
  import { agentSystemNamespace } from '#core/credential-fingerprints.js';
@@ -15,52 +14,54 @@ const createE2eModelProviderBodySchema = z.object({
15
14
  const createE2eModelProviderResponseSchema = z.object({
16
15
  provider_id: z.literal('anthropic')
17
16
  });
18
- export const createE2eModelProviderRoute = defineRoute({
19
- method: 'POST',
20
- path: '/model-provider',
21
- description: 'Create an Anthropic model provider config for E2E tests.',
22
- schema: {
23
- body: createE2eModelProviderBodySchema,
24
- response: {
25
- 201: createE2eModelProviderResponseSchema
26
- }
27
- },
28
- handler: async (request, reply)=>{
29
- const entry = getModelProviderEntry(request.body.provider_id);
30
- if (entry === undefined || entry.default_model === null) {
31
- throw new ClientError('Unsupported E2E model provider', 'unsupported-model-provider', {
32
- status: 400
33
- });
34
- }
35
- const defaultModel = request.body.default_model ?? entry.default_model;
36
- const supportedModels = listHarnessProviderModels('claude', request.body.provider_id);
37
- if (!supportedModels.some((model)=>model.id === defaultModel)) {
38
- throw new ClientError('Unsupported Anthropic default model', 'unsupported-model', {
39
- status: 400,
40
- details: {
41
- default_model: defaultModel
17
+ export function createE2eModelProviderRoute(secrets) {
18
+ return defineRoute({
19
+ method: 'POST',
20
+ path: '/model-provider',
21
+ description: 'Create an Anthropic model provider config for E2E tests.',
22
+ schema: {
23
+ body: createE2eModelProviderBodySchema,
24
+ response: {
25
+ 201: createE2eModelProviderResponseSchema
26
+ }
27
+ },
28
+ handler: async (request, reply)=>{
29
+ const entry = getModelProviderEntry(request.body.provider_id);
30
+ if (entry === undefined || entry.default_model === null) {
31
+ throw new ClientError('Unsupported E2E model provider', 'unsupported-model-provider', {
32
+ status: 400
33
+ });
34
+ }
35
+ const defaultModel = request.body.default_model ?? entry.default_model;
36
+ const supportedModels = listHarnessProviderModels('claude', request.body.provider_id);
37
+ if (!supportedModels.some((model)=>model.id === defaultModel)) {
38
+ throw new ClientError('Unsupported Anthropic default model', 'unsupported-model', {
39
+ status: 400,
40
+ details: {
41
+ default_model: defaultModel
42
+ }
43
+ });
44
+ }
45
+ await secrets.setSecrets({
46
+ workspaceId: request.body.workspace_id,
47
+ namespace: agentSystemNamespace(request.body.provider_id),
48
+ values: {
49
+ API_KEY: request.body.api_key
42
50
  }
43
51
  });
52
+ await upsertModelProviderConfig({
53
+ workspaceId: request.body.workspace_id,
54
+ providerId: request.body.provider_id,
55
+ defaultModel,
56
+ defaultThinking: DEFAULT_AGENT_THINKING,
57
+ setAsDefault: request.body.set_as_default
58
+ });
59
+ reply.code(201);
60
+ return {
61
+ provider_id: request.body.provider_id
62
+ };
44
63
  }
45
- await setSecrets({
46
- workspaceId: request.body.workspace_id,
47
- namespace: agentSystemNamespace(request.body.provider_id),
48
- values: {
49
- API_KEY: request.body.api_key
50
- }
51
- });
52
- await upsertModelProviderConfig({
53
- workspaceId: request.body.workspace_id,
54
- providerId: request.body.provider_id,
55
- defaultModel,
56
- defaultThinking: DEFAULT_AGENT_THINKING,
57
- setAsDefault: request.body.set_as_default
58
- });
59
- reply.code(201);
60
- return {
61
- provider_id: request.body.provider_id
62
- };
63
- }
64
- });
64
+ });
65
+ }
65
66
 
66
67
  //# sourceMappingURL=create-model-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/presentation/e2eRoutes/create-model-provider.ts"],"sourcesContent":["import {DEFAULT_AGENT_THINKING, getModelProviderEntry} from '@shipfox/api-agent-dto';\nimport {setSecrets} from '@shipfox/api-secrets';\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 {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 const createE2eModelProviderRoute = 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 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"],"names":["DEFAULT_AGENT_THINKING","getModelProviderEntry","setSecrets","ClientError","defineRoute","z","agentSystemNamespace","listHarnessProviderModels","upsertModelProviderConfig","createE2eModelProviderBodySchema","object","workspace_id","string","uuid","provider_id","literal","api_key","min","default_model","optional","set_as_default","boolean","createE2eModelProviderResponseSchema","createE2eModelProviderRoute","method","path","description","schema","body","response","handler","request","reply","entry","undefined","status","defaultModel","supportedModels","some","model","id","details","workspaceId","namespace","values","API_KEY","providerId","defaultThinking","setAsDefault","code"],"mappings":"AAAA,SAAQA,sBAAsB,EAAEC,qBAAqB,QAAO,yBAAyB;AACrF,SAAQC,UAAU,QAAO,uBAAuB;AAChD,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,oBAAoB,QAAO,mCAAmC;AACtE,SAAQC,yBAAyB,QAAO,4BAA4B;AACpE,SAAQC,yBAAyB,QAAO,eAAe;AAEvD,MAAMC,mCAAmCJ,EAAEK,MAAM,CAAC;IAChDC,cAAcN,EAAEO,MAAM,GAAGC,IAAI;IAC7BC,aAAaT,EAAEU,OAAO,CAAC;IACvBC,SAASX,EAAEO,MAAM,GAAGK,GAAG,CAAC;IACxBC,eAAeb,EAAEO,MAAM,GAAGK,GAAG,CAAC,GAAGE,QAAQ;IACzCC,gBAAgBf,EAAEgB,OAAO,GAAGF,QAAQ;AACtC;AAEA,MAAMG,uCAAuCjB,EAAEK,MAAM,CAAC;IACpDI,aAAaT,EAAEU,OAAO,CAAC;AACzB;AAEA,OAAO,MAAMQ,8BAA8BnB,YAAY;IACrDoB,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNC,MAAMnB;QACNoB,UAAU;YAAC,KAAKP;QAAoC;IACtD;IACAQ,SAAS,OAAOC,SAASC;QACvB,MAAMC,QAAQhC,sBAAsB8B,QAAQH,IAAI,CAACd,WAAW;QAC5D,IAAImB,UAAUC,aAAaD,MAAMf,aAAa,KAAK,MAAM;YACvD,MAAM,IAAIf,YAAY,kCAAkC,8BAA8B;gBACpFgC,QAAQ;YACV;QACF;QACA,MAAMC,eAAeL,QAAQH,IAAI,CAACV,aAAa,IAAIe,MAAMf,aAAa;QACtE,MAAMmB,kBAAkB9B,0BAA0B,UAAUwB,QAAQH,IAAI,CAACd,WAAW;QACpF,IAAI,CAACuB,gBAAgBC,IAAI,CAAC,CAACC,QAAUA,MAAMC,EAAE,KAAKJ,eAAe;YAC/D,MAAM,IAAIjC,YAAY,uCAAuC,qBAAqB;gBAChFgC,QAAQ;gBACRM,SAAS;oBAACvB,eAAekB;gBAAY;YACvC;QACF;QAEA,MAAMlC,WAAW;YACfwC,aAAaX,QAAQH,IAAI,CAACjB,YAAY;YACtCgC,WAAWrC,qBAAqByB,QAAQH,IAAI,CAACd,WAAW;YACxD8B,QAAQ;gBAACC,SAASd,QAAQH,IAAI,CAACZ,OAAO;YAAA;QACxC;QACA,MAAMR,0BAA0B;YAC9BkC,aAAaX,QAAQH,IAAI,CAACjB,YAAY;YACtCmC,YAAYf,QAAQH,IAAI,CAACd,WAAW;YACpCsB;YACAW,iBAAiB/C;YACjBgD,cAAcjB,QAAQH,IAAI,CAACR,cAAc;QAC3C;QAEAY,MAAMiB,IAAI,CAAC;QACX,OAAO;YAACnC,aAAaiB,QAAQH,IAAI,CAACd,WAAW;QAAA;IAC/C;AACF,GAAG"}
1
+ {"version":3,"sources":["../../../src/presentation/e2eRoutes/create-model-provider.ts"],"sourcesContent":["import {DEFAULT_AGENT_THINKING, getModelProviderEntry} 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 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","getModelProviderEntry","ClientError","defineRoute","z","agentSystemNamespace","listHarnessProviderModels","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,EAAEC,qBAAqB,QAAO,yBAAyB;AACrF,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,oBAAoB,QAAO,mCAAmC;AACtE,SAAQC,yBAAyB,QAAO,4BAA4B;AAEpE,SAAQC,yBAAyB,QAAO,eAAe;AAEvD,MAAMC,mCAAmCJ,EAAEK,MAAM,CAAC;IAChDC,cAAcN,EAAEO,MAAM,GAAGC,IAAI;IAC7BC,aAAaT,EAAEU,OAAO,CAAC;IACvBC,SAASX,EAAEO,MAAM,GAAGK,GAAG,CAAC;IACxBC,eAAeb,EAAEO,MAAM,GAAGK,GAAG,CAAC,GAAGE,QAAQ;IACzCC,gBAAgBf,EAAEgB,OAAO,GAAGF,QAAQ;AACtC;AAEA,MAAMG,uCAAuCjB,EAAEK,MAAM,CAAC;IACpDI,aAAaT,EAAEU,OAAO,CAAC;AACzB;AAEA,OAAO,SAASQ,4BAA4BC,OAA2B;IACrE,OAAOpB,YAAY;QACjBqB,QAAQ;QACRC,MAAM;QACNC,aAAa;QACbC,QAAQ;YACNC,MAAMpB;YACNqB,UAAU;gBAAC,KAAKR;YAAoC;QACtD;QACAS,SAAS,OAAOC,SAASC;YACvB,MAAMC,QAAQhC,sBAAsB8B,QAAQH,IAAI,CAACf,WAAW;YAC5D,IAAIoB,UAAUC,aAAaD,MAAMhB,aAAa,KAAK,MAAM;gBACvD,MAAM,IAAIf,YAAY,kCAAkC,8BAA8B;oBACpFiC,QAAQ;gBACV;YACF;YACA,MAAMC,eAAeL,QAAQH,IAAI,CAACX,aAAa,IAAIgB,MAAMhB,aAAa;YACtE,MAAMoB,kBAAkB/B,0BAA0B,UAAUyB,QAAQH,IAAI,CAACf,WAAW;YACpF,IAAI,CAACwB,gBAAgBC,IAAI,CAAC,CAACC,QAAUA,MAAMC,EAAE,KAAKJ,eAAe;gBAC/D,MAAM,IAAIlC,YAAY,uCAAuC,qBAAqB;oBAChFiC,QAAQ;oBACRM,SAAS;wBAACxB,eAAemB;oBAAY;gBACvC;YACF;YAEA,MAAMb,QAAQmB,UAAU,CAAC;gBACvBC,aAAaZ,QAAQH,IAAI,CAAClB,YAAY;gBACtCkC,WAAWvC,qBAAqB0B,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,3 +1,5 @@
1
1
  import type { RouteGroup } from '@shipfox/node-fastify';
2
+ import type { AgentSecretsClient } from '#core/secrets-client.js';
3
+ export declare function createAgentE2eRoutes(secrets: AgentSecretsClient): RouteGroup;
2
4
  export declare const agentE2eRoutes: RouteGroup;
3
5
  //# 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;AAGtD,eAAO,MAAM,cAAc,EAAE,UAG5B,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;AAGhE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,GAAG,UAAU,CAE5E;AAED,eAAO,MAAM,cAAc,YAAmE,CAAC"}
@@ -1,9 +1,12 @@
1
1
  import { createE2eModelProviderRoute } from './create-model-provider.js';
2
- export const agentE2eRoutes = {
3
- prefix: '/agent',
4
- routes: [
5
- createE2eModelProviderRoute
6
- ]
7
- };
2
+ export function createAgentE2eRoutes(secrets) {
3
+ return {
4
+ prefix: '/agent',
5
+ routes: [
6
+ createE2eModelProviderRoute(secrets)
7
+ ]
8
+ };
9
+ }
10
+ export const agentE2eRoutes = createAgentE2eRoutes(undefined);
8
11
 
9
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/presentation/e2eRoutes/index.ts"],"sourcesContent":["import type {RouteGroup} from '@shipfox/node-fastify';\nimport {createE2eModelProviderRoute} from './create-model-provider.js';\n\nexport const agentE2eRoutes: RouteGroup = {\n prefix: '/agent',\n routes: [createE2eModelProviderRoute],\n};\n"],"names":["createE2eModelProviderRoute","agentE2eRoutes","prefix","routes"],"mappings":"AACA,SAAQA,2BAA2B,QAAO,6BAA6B;AAEvE,OAAO,MAAMC,iBAA6B;IACxCC,QAAQ;IACRC,QAAQ;QAACH;KAA4B;AACvC,EAAE"}
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,2 +1,2 @@
1
- export { agentRoutes as routes } from './routes/index.js';
1
+ export { agentRoutes as routes, createAgentRoutes } from './routes/index.js';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/presentation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,IAAI,MAAM,EAAC,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/presentation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,IAAI,MAAM,EAAE,iBAAiB,EAAC,MAAM,mBAAmB,CAAC"}
@@ -1,3 +1,3 @@
1
- export { agentRoutes as routes } from './routes/index.js';
1
+ export { agentRoutes as routes, createAgentRoutes } from './routes/index.js';
2
2
 
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/presentation/index.ts"],"sourcesContent":["export {agentRoutes as routes} from './routes/index.js';\n"],"names":["agentRoutes","routes"],"mappings":"AAAA,SAAQA,eAAeC,MAAM,QAAO,oBAAoB"}
1
+ {"version":3,"sources":["../../src/presentation/index.ts"],"sourcesContent":["export {agentRoutes as routes, createAgentRoutes} from './routes/index.js';\n"],"names":["agentRoutes","routes","createAgentRoutes"],"mappings":"AAAA,SAAQA,eAAeC,MAAM,EAAEC,iBAAiB,QAAO,oBAAoB"}
@@ -0,0 +1,7 @@
1
+ import { agentInterModuleContract } from '@shipfox/api-agent-dto/inter-module';
2
+ import { type InterModulePresentation } from '@shipfox/inter-module';
3
+ import type { AgentSecretsClient } from '#core/secrets-client.js';
4
+ export declare function createAgentInterModulePresentation(params: {
5
+ secrets: AgentSecretsClient;
6
+ }): InterModulePresentation<typeof agentInterModuleContract>;
7
+ //# sourceMappingURL=inter-module.d.ts.map
@@ -0,0 +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;AAGhE,wBAAgB,kCAAkC,CAAC,MAAM,EAAE;IACzD,OAAO,EAAE,kBAAkB,CAAC;CAC7B,GAAG,uBAAuB,CAAC,OAAO,wBAAwB,CAAC,CAqB3D"}
@@ -0,0 +1,45 @@
1
+ import { agentInterModuleContract } from '@shipfox/api-agent-dto/inter-module';
2
+ import { secretsInterModuleContract } from '@shipfox/api-secrets-dto/inter-module';
3
+ import { createInterModuleKnownError, defineInterModulePresentation, isInterModuleKnownError } from '@shipfox/inter-module';
4
+ import { InvalidAgentModelError, ModelProviderConfigNotFoundError, UnsupportedHarnessProviderError, UnsupportedHarnessThinkingError, UnsupportedModelProviderError } from '#core/errors.js';
5
+ import { resolveAgentConfig } from '#core/resolve-agent-config.js';
6
+ import { resolveRuntimeCredentials } from '#core/resolve-runtime-credentials.js';
7
+ import { createWorkspaceAgentDefaultsResolver } from '#core/workspace-agent-defaults-resolver.js';
8
+ export function createAgentInterModulePresentation(params) {
9
+ return defineInterModulePresentation(agentInterModuleContract, {
10
+ resolveAgentConfig: async ({ workspaceId, config })=>{
11
+ try {
12
+ const resolve = workspaceId === null ? resolveAgentConfig : await createWorkspaceAgentDefaultsResolver(workspaceId);
13
+ return await resolve(config);
14
+ } catch (error) {
15
+ throw toResolveAgentConfigKnownError(error);
16
+ }
17
+ },
18
+ resolveRuntimeCredentials: async (input)=>{
19
+ try {
20
+ return await resolveRuntimeCredentials(input, {
21
+ secrets: params.secrets
22
+ });
23
+ } catch (error) {
24
+ throw toResolveRuntimeCredentialsKnownError(error);
25
+ }
26
+ }
27
+ });
28
+ }
29
+ function toResolveAgentConfigKnownError(error) {
30
+ if (error instanceof InvalidAgentModelError || error instanceof UnsupportedHarnessProviderError || error instanceof UnsupportedHarnessThinkingError || error instanceof UnsupportedModelProviderError) {
31
+ return createInterModuleKnownError(agentInterModuleContract.methods.resolveAgentConfig, 'agent-config-invalid', {});
32
+ }
33
+ return error;
34
+ }
35
+ function toResolveRuntimeCredentialsKnownError(error) {
36
+ if (error instanceof ModelProviderConfigNotFoundError) {
37
+ return createInterModuleKnownError(agentInterModuleContract.methods.resolveRuntimeCredentials, 'model-provider-not-configured', {});
38
+ }
39
+ if (isInterModuleKnownError(secretsInterModuleContract.methods.getSecretsByNamespace, error)) {
40
+ return createInterModuleKnownError(agentInterModuleContract.methods.resolveRuntimeCredentials, 'model-provider-credentials-invalid', {});
41
+ }
42
+ return error;
43
+ }
44
+
45
+ //# sourceMappingURL=inter-module.js.map
@@ -0,0 +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,OAAOX,8BAA8BH,0BAA0B;QAC7DU,oBAAoB,OAAO,EAACK,WAAW,EAAEC,MAAM,EAAC;YAC9C,IAAI;gBACF,MAAMC,UACJF,gBAAgB,OACZL,qBACA,MAAME,qCAAqCG;gBACjD,OAAO,MAAME,QAAQD;YACvB,EAAE,OAAOE,OAAO;gBACd,MAAMC,+BAA+BD;YACvC;QACF;QACAP,2BAA2B,OAAOS;YAChC,IAAI;gBACF,OAAO,MAAMT,0BAA0BS,OAAO;oBAACC,SAASP,OAAOO,OAAO;gBAAA;YACxE,EAAE,OAAOH,OAAO;gBACd,MAAMI,sCAAsCJ;YAC9C;QACF;IACF;AACF;AAEA,SAASC,+BAA+BD,KAAc;IACpD,IACEA,iBAAiBb,0BACjBa,iBAAiBX,mCACjBW,iBAAiBV,mCACjBU,iBAAiBT,+BACjB;QACA,OAAOP,4BACLF,yBAAyBuB,OAAO,CAACb,kBAAkB,EACnD,wBACA,CAAC;IAEL;IACA,OAAOQ;AACT;AAEA,SAASI,sCAAsCJ,KAAc;IAC3D,IAAIA,iBAAiBZ,kCAAkC;QACrD,OAAOJ,4BACLF,yBAAyBuB,OAAO,CAACZ,yBAAyB,EAC1D,iCACA,CAAC;IAEL;IACA,IAAIP,wBAAwBH,2BAA2BsB,OAAO,CAACC,qBAAqB,EAAEN,QAAQ;QAC5F,OAAOhB,4BACLF,yBAAyBuB,OAAO,CAACZ,yBAAyB,EAC1D,sCACA,CAAC;IAEL;IACA,OAAOO;AACT"}
@@ -1,2 +1,3 @@
1
- export declare const createCustomModelProviderRoute: import("@shipfox/node-fastify").RouteDefinition;
1
+ import type { AgentSecretsClient } from '#core/secrets-client.js';
2
+ export declare function createCustomModelProviderRoute(secrets: AgentSecretsClient): import("@shipfox/node-fastify").RouteDefinition;
2
3
  //# 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":"AAWA,eAAO,MAAM,8BAA8B,iDAiCzC,CAAC"}
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"}
@@ -5,41 +5,45 @@ import { z } from 'zod';
5
5
  import { createCustomModelProviderConfig } from '#core/index.js';
6
6
  import { toCustomModelProviderConfigDto } from '#presentation/dto/index.js';
7
7
  import { translateModelProviderRouteError } from './errors.js';
8
- export const createCustomModelProviderRoute = defineRoute({
9
- method: 'POST',
10
- path: '/custom-model-providers',
11
- description: 'Create a custom model provider configuration for a workspace',
12
- schema: {
13
- params: z.object({
14
- workspaceId: z.string().uuid()
15
- }),
16
- body: createCustomModelProviderBodySchema,
17
- response: {
18
- 200: customModelProviderConfigDtoSchema
8
+ export function createCustomModelProviderRoute(secrets) {
9
+ return defineRoute({
10
+ method: 'POST',
11
+ path: '/custom-model-providers',
12
+ description: 'Create a custom model provider configuration for a workspace',
13
+ schema: {
14
+ params: z.object({
15
+ workspaceId: z.string().uuid()
16
+ }),
17
+ body: createCustomModelProviderBodySchema,
18
+ response: {
19
+ 200: customModelProviderConfigDtoSchema
20
+ }
21
+ },
22
+ errorHandler: translateModelProviderRouteError,
23
+ handler: async (request, reply)=>{
24
+ const { workspaceId } = request.params;
25
+ const abortController = new AbortController();
26
+ let responseFinished = false;
27
+ reply.raw.on('finish', ()=>{
28
+ responseFinished = true;
29
+ });
30
+ reply.raw.on('close', ()=>{
31
+ if (!responseFinished) abortController.abort();
32
+ });
33
+ requireWorkspaceAccess({
34
+ request,
35
+ workspaceId
36
+ });
37
+ const config = await createCustomModelProviderConfig({
38
+ workspaceId,
39
+ body: request.body,
40
+ signal: abortController.signal
41
+ }, {
42
+ secrets
43
+ });
44
+ return toCustomModelProviderConfigDto(config);
19
45
  }
20
- },
21
- errorHandler: translateModelProviderRouteError,
22
- handler: async (request, reply)=>{
23
- const { workspaceId } = request.params;
24
- const abortController = new AbortController();
25
- let responseFinished = false;
26
- reply.raw.on('finish', ()=>{
27
- responseFinished = true;
28
- });
29
- reply.raw.on('close', ()=>{
30
- if (!responseFinished) abortController.abort();
31
- });
32
- requireWorkspaceAccess({
33
- request,
34
- workspaceId
35
- });
36
- const config = await createCustomModelProviderConfig({
37
- workspaceId,
38
- body: request.body,
39
- signal: abortController.signal
40
- });
41
- return toCustomModelProviderConfigDto(config);
42
- }
43
- });
46
+ });
47
+ }
44
48
 
45
49
  //# sourceMappingURL=create-custom-model-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/presentation/routes/create-custom-model-provider.ts"],"sourcesContent":["import {\n createCustomModelProviderBodySchema,\n customModelProviderConfigDtoSchema,\n} from '@shipfox/api-agent-dto';\nimport {requireWorkspaceAccess} from '@shipfox/api-auth-context';\nimport {defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {createCustomModelProviderConfig} from '#core/index.js';\nimport {toCustomModelProviderConfigDto} from '#presentation/dto/index.js';\nimport {translateModelProviderRouteError} from './errors.js';\n\nexport const createCustomModelProviderRoute = defineRoute({\n method: 'POST',\n path: '/custom-model-providers',\n description: 'Create a custom model provider configuration for a workspace',\n schema: {\n params: z.object({workspaceId: z.string().uuid()}),\n body: createCustomModelProviderBodySchema,\n response: {\n 200: customModelProviderConfigDtoSchema,\n },\n },\n errorHandler: translateModelProviderRouteError,\n handler: async (request, reply) => {\n const {workspaceId} = request.params;\n const abortController = new AbortController();\n let responseFinished = false;\n reply.raw.on('finish', () => {\n responseFinished = true;\n });\n reply.raw.on('close', () => {\n if (!responseFinished) abortController.abort();\n });\n\n requireWorkspaceAccess({request, workspaceId});\n\n const config = await createCustomModelProviderConfig({\n workspaceId,\n body: request.body,\n signal: abortController.signal,\n });\n\n return toCustomModelProviderConfigDto(config);\n },\n});\n"],"names":["createCustomModelProviderBodySchema","customModelProviderConfigDtoSchema","requireWorkspaceAccess","defineRoute","z","createCustomModelProviderConfig","toCustomModelProviderConfigDto","translateModelProviderRouteError","createCustomModelProviderRoute","method","path","description","schema","params","object","workspaceId","string","uuid","body","response","errorHandler","handler","request","reply","abortController","AbortController","responseFinished","raw","on","abort","config","signal"],"mappings":"AAAA,SACEA,mCAAmC,EACnCC,kCAAkC,QAC7B,yBAAyB;AAChC,SAAQC,sBAAsB,QAAO,4BAA4B;AACjE,SAAQC,WAAW,QAAO,wBAAwB;AAClD,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,+BAA+B,QAAO,iBAAiB;AAC/D,SAAQC,8BAA8B,QAAO,6BAA6B;AAC1E,SAAQC,gCAAgC,QAAO,cAAc;AAE7D,OAAO,MAAMC,iCAAiCL,YAAY;IACxDM,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNC,QAAQT,EAAEU,MAAM,CAAC;YAACC,aAAaX,EAAEY,MAAM,GAAGC,IAAI;QAAE;QAChDC,MAAMlB;QACNmB,UAAU;YACR,KAAKlB;QACP;IACF;IACAmB,cAAcb;IACdc,SAAS,OAAOC,SAASC;QACvB,MAAM,EAACR,WAAW,EAAC,GAAGO,QAAQT,MAAM;QACpC,MAAMW,kBAAkB,IAAIC;QAC5B,IAAIC,mBAAmB;QACvBH,MAAMI,GAAG,CAACC,EAAE,CAAC,UAAU;YACrBF,mBAAmB;QACrB;QACAH,MAAMI,GAAG,CAACC,EAAE,CAAC,SAAS;YACpB,IAAI,CAACF,kBAAkBF,gBAAgBK,KAAK;QAC9C;QAEA3B,uBAAuB;YAACoB;YAASP;QAAW;QAE5C,MAAMe,SAAS,MAAMzB,gCAAgC;YACnDU;YACAG,MAAMI,QAAQJ,IAAI;YAClBa,QAAQP,gBAAgBO,MAAM;QAChC;QAEA,OAAOzB,+BAA+BwB;IACxC;AACF,GAAG"}
1
+ {"version":3,"sources":["../../../src/presentation/routes/create-custom-model-provider.ts"],"sourcesContent":["import {\n createCustomModelProviderBodySchema,\n customModelProviderConfigDtoSchema,\n} from '@shipfox/api-agent-dto';\nimport {requireWorkspaceAccess} from '@shipfox/api-auth-context';\nimport {defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {createCustomModelProviderConfig} from '#core/index.js';\nimport type {AgentSecretsClient} from '#core/secrets-client.js';\nimport {toCustomModelProviderConfigDto} from '#presentation/dto/index.js';\nimport {translateModelProviderRouteError} from './errors.js';\n\nexport function createCustomModelProviderRoute(secrets: AgentSecretsClient) {\n return defineRoute({\n method: 'POST',\n path: '/custom-model-providers',\n description: 'Create a custom model provider configuration for a workspace',\n schema: {\n params: z.object({workspaceId: z.string().uuid()}),\n body: createCustomModelProviderBodySchema,\n response: {\n 200: customModelProviderConfigDtoSchema,\n },\n },\n errorHandler: translateModelProviderRouteError,\n handler: async (request, reply) => {\n const {workspaceId} = request.params;\n const abortController = new AbortController();\n let responseFinished = false;\n reply.raw.on('finish', () => {\n responseFinished = true;\n });\n reply.raw.on('close', () => {\n if (!responseFinished) abortController.abort();\n });\n\n requireWorkspaceAccess({request, workspaceId});\n\n const config = await createCustomModelProviderConfig(\n {\n workspaceId,\n body: request.body,\n signal: abortController.signal,\n },\n {secrets},\n );\n\n return toCustomModelProviderConfigDto(config);\n },\n });\n}\n"],"names":["createCustomModelProviderBodySchema","customModelProviderConfigDtoSchema","requireWorkspaceAccess","defineRoute","z","createCustomModelProviderConfig","toCustomModelProviderConfigDto","translateModelProviderRouteError","createCustomModelProviderRoute","secrets","method","path","description","schema","params","object","workspaceId","string","uuid","body","response","errorHandler","handler","request","reply","abortController","AbortController","responseFinished","raw","on","abort","config","signal"],"mappings":"AAAA,SACEA,mCAAmC,EACnCC,kCAAkC,QAC7B,yBAAyB;AAChC,SAAQC,sBAAsB,QAAO,4BAA4B;AACjE,SAAQC,WAAW,QAAO,wBAAwB;AAClD,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,+BAA+B,QAAO,iBAAiB;AAE/D,SAAQC,8BAA8B,QAAO,6BAA6B;AAC1E,SAAQC,gCAAgC,QAAO,cAAc;AAE7D,OAAO,SAASC,+BAA+BC,OAA2B;IACxE,OAAON,YAAY;QACjBO,QAAQ;QACRC,MAAM;QACNC,aAAa;QACbC,QAAQ;YACNC,QAAQV,EAAEW,MAAM,CAAC;gBAACC,aAAaZ,EAAEa,MAAM,GAAGC,IAAI;YAAE;YAChDC,MAAMnB;YACNoB,UAAU;gBACR,KAAKnB;YACP;QACF;QACAoB,cAAcd;QACde,SAAS,OAAOC,SAASC;YACvB,MAAM,EAACR,WAAW,EAAC,GAAGO,QAAQT,MAAM;YACpC,MAAMW,kBAAkB,IAAIC;YAC5B,IAAIC,mBAAmB;YACvBH,MAAMI,GAAG,CAACC,EAAE,CAAC,UAAU;gBACrBF,mBAAmB;YACrB;YACAH,MAAMI,GAAG,CAACC,EAAE,CAAC,SAAS;gBACpB,IAAI,CAACF,kBAAkBF,gBAAgBK,KAAK;YAC9C;YAEA5B,uBAAuB;gBAACqB;gBAASP;YAAW;YAE5C,MAAMe,SAAS,MAAM1B,gCACnB;gBACEW;gBACAG,MAAMI,QAAQJ,IAAI;gBAClBa,QAAQP,gBAAgBO,MAAM;YAChC,GACA;gBAACvB;YAAO;YAGV,OAAOH,+BAA+ByB;QACxC;IACF;AACF"}
@@ -1,2 +1,3 @@
1
- export declare const deleteModelProviderConfigRoute: import("@shipfox/node-fastify").RouteDefinition;
1
+ import type { AgentSecretsClient } from '#core/secrets-client.js';
2
+ export declare function createDeleteModelProviderConfigRoute(secrets: AgentSecretsClient): import("@shipfox/node-fastify").RouteDefinition;
2
3
  //# sourceMappingURL=delete-model-provider-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delete-model-provider-config.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/delete-model-provider-config.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,8BAA8B,iDAwBzC,CAAC"}
1
+ {"version":3,"file":"delete-model-provider-config.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/delete-model-provider-config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAEhE,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,kBAAkB,mDA0B/E"}