@shipfox/api-agent 12.0.0 → 13.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +29 -0
  3. package/dist/config.d.ts +6 -2
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +72 -7
  6. package/dist/config.js.map +1 -1
  7. package/dist/core/errors.d.ts +4 -0
  8. package/dist/core/errors.d.ts.map +1 -1
  9. package/dist/core/errors.js +6 -0
  10. package/dist/core/errors.js.map +1 -1
  11. package/dist/core/index.d.ts +2 -1
  12. package/dist/core/index.d.ts.map +1 -1
  13. package/dist/core/index.js +2 -1
  14. package/dist/core/index.js.map +1 -1
  15. package/dist/core/model-provider-catalog.d.ts +5 -2
  16. package/dist/core/model-provider-catalog.d.ts.map +1 -1
  17. package/dist/core/model-provider-catalog.js +33 -1
  18. package/dist/core/model-provider-catalog.js.map +1 -1
  19. package/dist/core/resolve-agent-config.d.ts +4 -2
  20. package/dist/core/resolve-agent-config.d.ts.map +1 -1
  21. package/dist/core/resolve-agent-config.js +86 -31
  22. package/dist/core/resolve-agent-config.js.map +1 -1
  23. package/dist/core/resolve-runtime-credentials.d.ts +6 -2
  24. package/dist/core/resolve-runtime-credentials.d.ts.map +1 -1
  25. package/dist/core/resolve-runtime-credentials.js +59 -3
  26. package/dist/core/resolve-runtime-credentials.js.map +1 -1
  27. package/dist/core/validation-catalog.d.ts +2 -1
  28. package/dist/core/validation-catalog.d.ts.map +1 -1
  29. package/dist/core/validation-catalog.js +65 -17
  30. package/dist/core/validation-catalog.js.map +1 -1
  31. package/dist/core/workspace-agent-defaults-resolver.d.ts +2 -1
  32. package/dist/core/workspace-agent-defaults-resolver.d.ts.map +1 -1
  33. package/dist/core/workspace-agent-defaults-resolver.js +4 -2
  34. package/dist/core/workspace-agent-defaults-resolver.js.map +1 -1
  35. package/dist/core/workspace-provider-policy.d.ts +7 -0
  36. package/dist/core/workspace-provider-policy.d.ts.map +1 -0
  37. package/dist/core/workspace-provider-policy.js +10 -0
  38. package/dist/core/workspace-provider-policy.js.map +1 -0
  39. package/dist/db/db.d.ts +10 -10
  40. package/dist/db/schema/agent-workspace-settings.d.ts +1 -1
  41. package/dist/db/schema/model-provider-configs.d.ts +4 -4
  42. package/dist/index.d.ts +3 -1
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +15 -4
  45. package/dist/index.js.map +1 -1
  46. package/dist/metrics/instance.d.ts +4 -4
  47. package/dist/presentation/e2eRoutes/create-model-provider.d.ts +2 -1
  48. package/dist/presentation/e2eRoutes/create-model-provider.d.ts.map +1 -1
  49. package/dist/presentation/e2eRoutes/create-model-provider.js +7 -1
  50. package/dist/presentation/e2eRoutes/create-model-provider.js.map +1 -1
  51. package/dist/presentation/e2eRoutes/index.d.ts +2 -1
  52. package/dist/presentation/e2eRoutes/index.d.ts.map +1 -1
  53. package/dist/presentation/e2eRoutes/index.js +4 -2
  54. package/dist/presentation/e2eRoutes/index.js.map +1 -1
  55. package/dist/presentation/inter-module.d.ts +3 -0
  56. package/dist/presentation/inter-module.d.ts.map +1 -1
  57. package/dist/presentation/inter-module.js +22 -6
  58. package/dist/presentation/inter-module.js.map +1 -1
  59. package/dist/presentation/routes/create-custom-model-provider.d.ts +2 -1
  60. package/dist/presentation/routes/create-custom-model-provider.d.ts.map +1 -1
  61. package/dist/presentation/routes/create-custom-model-provider.js +5 -2
  62. package/dist/presentation/routes/create-custom-model-provider.js.map +1 -1
  63. package/dist/presentation/routes/delete-model-provider-config.d.ts +2 -1
  64. package/dist/presentation/routes/delete-model-provider-config.d.ts.map +1 -1
  65. package/dist/presentation/routes/delete-model-provider-config.js +7 -2
  66. package/dist/presentation/routes/delete-model-provider-config.js.map +1 -1
  67. package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.d.ts +2 -1
  68. package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.d.ts.map +1 -1
  69. package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.js +5 -2
  70. package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.js.map +1 -1
  71. package/dist/presentation/routes/discover-custom-model-provider-models.d.ts +2 -0
  72. package/dist/presentation/routes/discover-custom-model-provider-models.d.ts.map +1 -1
  73. package/dist/presentation/routes/discover-custom-model-provider-models.js +29 -23
  74. package/dist/presentation/routes/discover-custom-model-provider-models.js.map +1 -1
  75. package/dist/presentation/routes/errors.d.ts.map +1 -1
  76. package/dist/presentation/routes/errors.js +10 -1
  77. package/dist/presentation/routes/errors.js.map +1 -1
  78. package/dist/presentation/routes/index.d.ts +5 -1
  79. package/dist/presentation/routes/index.d.ts.map +1 -1
  80. package/dist/presentation/routes/index.js +21 -14
  81. package/dist/presentation/routes/index.js.map +1 -1
  82. package/dist/presentation/routes/list-model-provider-catalog.d.ts +5 -0
  83. package/dist/presentation/routes/list-model-provider-catalog.d.ts.map +1 -1
  84. package/dist/presentation/routes/list-model-provider-catalog.js +21 -13
  85. package/dist/presentation/routes/list-model-provider-catalog.js.map +1 -1
  86. package/dist/presentation/routes/set-default-model-provider.d.ts +2 -0
  87. package/dist/presentation/routes/set-default-model-provider.d.ts.map +1 -1
  88. package/dist/presentation/routes/set-default-model-provider.js +44 -38
  89. package/dist/presentation/routes/set-default-model-provider.js.map +1 -1
  90. package/dist/presentation/routes/update-custom-model-provider.d.ts +2 -1
  91. package/dist/presentation/routes/update-custom-model-provider.d.ts.map +1 -1
  92. package/dist/presentation/routes/update-custom-model-provider.js +5 -2
  93. package/dist/presentation/routes/update-custom-model-provider.js.map +1 -1
  94. package/dist/presentation/routes/update-model-provider-default-model.d.ts +2 -0
  95. package/dist/presentation/routes/update-model-provider-default-model.d.ts.map +1 -1
  96. package/dist/presentation/routes/update-model-provider-default-model.js +35 -29
  97. package/dist/presentation/routes/update-model-provider-default-model.js.map +1 -1
  98. package/dist/presentation/routes/upsert-model-provider-config.d.ts +2 -1
  99. package/dist/presentation/routes/upsert-model-provider-config.d.ts.map +1 -1
  100. package/dist/presentation/routes/upsert-model-provider-config.js +5 -2
  101. package/dist/presentation/routes/upsert-model-provider-config.js.map +1 -1
  102. package/dist/tsconfig.test.tsbuildinfo +1 -1
  103. package/package.json +6 -6
  104. package/src/config.test.ts +165 -4
  105. package/src/config.ts +94 -9
  106. package/src/core/errors.ts +7 -0
  107. package/src/core/index.ts +5 -0
  108. package/src/core/model-provider-catalog.test.ts +30 -0
  109. package/src/core/model-provider-catalog.ts +41 -1
  110. package/src/core/resolve-agent-config.test.ts +92 -0
  111. package/src/core/resolve-agent-config.ts +152 -43
  112. package/src/core/resolve-runtime-credentials.test.ts +169 -1
  113. package/src/core/resolve-runtime-credentials.ts +68 -3
  114. package/src/core/validation-catalog.test.ts +54 -0
  115. package/src/core/validation-catalog.ts +124 -19
  116. package/src/core/workspace-agent-defaults-resolver.ts +7 -2
  117. package/src/core/workspace-provider-policy.ts +19 -0
  118. package/src/index.ts +25 -4
  119. package/src/presentation/e2eRoutes/create-model-provider.ts +11 -1
  120. package/src/presentation/e2eRoutes/index.ts +9 -2
  121. package/src/presentation/inter-module.test.ts +51 -0
  122. package/src/presentation/inter-module.ts +38 -6
  123. package/src/presentation/routes/create-custom-model-provider.ts +10 -2
  124. package/src/presentation/routes/delete-model-provider-config.ts +12 -2
  125. package/src/presentation/routes/discover-custom-model-provider-models-by-slug.ts +7 -1
  126. package/src/presentation/routes/discover-custom-model-provider-models.ts +30 -18
  127. package/src/presentation/routes/errors.ts +11 -0
  128. package/src/presentation/routes/index.ts +32 -14
  129. package/src/presentation/routes/list-model-provider-catalog.ts +32 -11
  130. package/src/presentation/routes/model-provider-catalog.test.ts +49 -1
  131. package/src/presentation/routes/model-provider-config.test.ts +62 -1
  132. package/src/presentation/routes/set-default-model-provider.ts +42 -31
  133. package/src/presentation/routes/update-custom-model-provider.ts +10 -2
  134. package/src/presentation/routes/update-model-provider-default-model.ts +37 -26
  135. package/src/presentation/routes/upsert-model-provider-config.ts +10 -2
  136. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1,2 +1,2 @@
1
1
  $ shipfox-swc
2
- Successfully compiled: 52 files with swc (349.46ms)
2
+ Successfully compiled: 53 files with swc (443.5ms)
package/CHANGELOG.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # @shipfox/api-agent
2
2
 
3
+ ## 13.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 0d3c2e3: Updates @shipfox/client-agent, @shipfox/client-onboarding, and @shipfox/client-workflows to show
8
+ managed inference providers without exposing workspace credential setup, keep workflow examples
9
+ limited to supported models, and explain managed-provider failures in workflow runs.
10
+ - 5c100d6: Adds support for injecting a managed hosted-inference model provider into agent configuration, with harness-compatible models and instance overrides taking precedence.
11
+ - ca91dc3: Adds managed-provider runtime credential resolution and lease-scoped wire fields for pi and Claude harnesses.
12
+ - 67aab38: Adds an instance policy that can restrict workspace model-provider configuration to an injected managed provider.
13
+
14
+ ### Patch Changes
15
+
16
+ - Updated dependencies [0d3c2e3]
17
+ - Updated dependencies [5c100d6]
18
+ - Updated dependencies [ca91dc3]
19
+ - Updated dependencies [67aab38]
20
+ - @shipfox/api-agent-dto@13.1.0
21
+
22
+ ## 12.2.0
23
+
24
+ ### Patch Changes
25
+
26
+ - @shipfox/node-opentelemetry@0.6.4
27
+ - @shipfox/api-agent-dto@12.2.0
28
+ - @shipfox/node-fastify@0.4.2
29
+ - @shipfox/node-module@1.0.6
30
+ - @shipfox/api-auth-context@12.2.0
31
+
3
32
  ## 12.0.0
4
33
 
5
34
  ### Minor Changes
package/dist/config.d.ts CHANGED
@@ -1,7 +1,9 @@
1
+ import { type ManagedModelProvider, type WorkspaceProvidersPolicy } from '@shipfox/api-agent-dto';
1
2
  export declare const config: Readonly<{
2
- AGENT_DEFAULT_PROVIDER: "anthropic" | "ant-ling" | "azure-openai-responses" | "openai" | "deepseek" | "nvidia" | "google" | "mistral" | "groq" | "cerebras" | "cloudflare-ai-gateway" | "cloudflare-workers-ai" | "xai" | "openrouter" | "vercel-ai-gateway" | "zai" | "zai-coding-cn" | "opencode" | "opencode-go" | "huggingface" | "fireworks" | "together" | "kimi-coding" | "qwen-token-plan" | "qwen-token-plan-cn" | "minimax" | "minimax-cn" | "moonshotai" | "moonshotai-cn" | "xiaomi" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-sgp" | undefined;
3
+ AGENT_WORKSPACE_PROVIDERS: "disabled" | "enabled";
4
+ AGENT_DEFAULT_PROVIDER: string | undefined;
3
5
  AGENT_DEFAULT_PROVIDER_MODEL: string | undefined;
4
- AGENT_DEFAULT_PROVIDER_THINKING: "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max" | undefined;
6
+ AGENT_DEFAULT_PROVIDER_THINKING: "high" | "low" | "max" | "medium" | "minimal" | "off" | "xhigh" | undefined;
5
7
  AGENT_DEFAULT_PROVIDER_API_KEY: string | undefined;
6
8
  AGENT_PROVIDER_VALIDATION_TIMEOUT_MS: number;
7
9
  AGENT_CUSTOM_PROVIDER_ALLOW_PRIVATE_NETWORKS: boolean;
@@ -9,5 +11,7 @@ export declare const config: Readonly<{
9
11
  AGENT_PI_ENABLED_TOOL_PACKAGES: string;
10
12
  AGENT_PI_WEB_SEARCH_ENABLED: boolean;
11
13
  } & import("@shipfox/config").CleanedEnvAccessors>;
14
+ export declare const workspaceProvidersPolicy: WorkspaceProvidersPolicy;
12
15
  export declare const harnessToolDeploymentConfig: import("@shipfox/api-agent-dto").HarnessToolDeploymentConfig;
16
+ export declare function assertAgentConfig(managedProvider?: ManagedModelProvider): void;
13
17
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,MAAM;;;;;;;;;;kDAuCjB,CAAC;AAIH,eAAO,MAAM,2BAA2B,8DAGtC,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,oBAAoB,EAIzB,KAAK,wBAAwB,EAC9B,MAAM,wBAAwB,CAAC;AAQhC,eAAO,MAAM,MAAM;;;;;;;;;;;kDA2CjB,CAAC;AAEH,eAAO,MAAM,wBAAwB,EACC,wBAAwB,CAAC;AAE/D,eAAO,MAAM,2BAA2B,8DAGtC,CAAC;AAEH,wBAAgB,iBAAiB,CAAC,eAAe,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAuC9E"}
package/dist/config.js CHANGED
@@ -1,11 +1,20 @@
1
- import { agentThinkingSchema, buildHarnessToolDeploymentConfig, SUPPORTED_MODEL_PROVIDER_IDS } from '@shipfox/api-agent-dto';
1
+ import { agentThinkingSchema, buildHarnessToolDeploymentConfig, isReservedModelProviderId, managedModelApiSchema, modelProviderRefSchema, SUPPORTED_MODEL_PROVIDER_IDS } from '@shipfox/api-agent-dto';
2
2
  import { bool, createConfig, num, str } from '@shipfox/config';
3
+ import { WorkspaceProvidersDisabledError } from '#core/errors.js';
3
4
  import { getModelProviderEntry } from '#core/model-provider-policy.js';
4
5
  const AGENT_THINKING_CHOICES = agentThinkingSchema.options;
6
+ const SUPPORTED_PROVIDER_IDS_DESCRIPTION = SUPPORTED_MODEL_PROVIDER_IDS.join(', ');
5
7
  export const config = createConfig({
8
+ AGENT_WORKSPACE_PROVIDERS: str({
9
+ desc: 'Controls whether workspaces can configure model providers. Use enabled to preserve the default workspace provider behavior, or disabled when the injected managed provider is the only provider for this instance.',
10
+ choices: [
11
+ 'enabled',
12
+ 'disabled'
13
+ ],
14
+ default: 'enabled'
15
+ }),
6
16
  AGENT_DEFAULT_PROVIDER: str({
7
- desc: 'Instance-wide default model provider ID used when a workflow and workspace do not choose one. Optional. Use one of the supported model provider IDs from the model provider catalog.',
8
- choices: SUPPORTED_MODEL_PROVIDER_IDS,
17
+ desc: `Instance-wide default model provider ID used when a workflow and workspace do not choose one. Optional. Use one of the supported model catalog IDs (${SUPPORTED_PROVIDER_IDS_DESCRIPTION}) or the injected managed provider.`,
9
18
  default: undefined
10
19
  }),
11
20
  AGENT_DEFAULT_PROVIDER_MODEL: str({
@@ -42,20 +51,76 @@ export const config = createConfig({
42
51
  default: true
43
52
  })
44
53
  });
45
- assertInstanceDefaultModelProviderApiKeyConfig();
54
+ export const workspaceProvidersPolicy = config.AGENT_WORKSPACE_PROVIDERS;
46
55
  export const harnessToolDeploymentConfig = buildHarnessToolDeploymentConfig({
47
56
  piEnabledToolPackages: config.AGENT_PI_ENABLED_TOOL_PACKAGES,
48
57
  piWebSearchEnabled: config.AGENT_PI_WEB_SEARCH_ENABLED
49
58
  });
50
- function assertInstanceDefaultModelProviderApiKeyConfig() {
59
+ export function assertAgentConfig(managedProvider) {
60
+ if (managedProvider !== undefined) assertManagedProvider(managedProvider);
61
+ if (workspaceProvidersPolicy === 'disabled') {
62
+ if (managedProvider === undefined) {
63
+ throw new Error('AGENT_WORKSPACE_PROVIDERS=disabled requires an injected managed model provider.');
64
+ }
65
+ if (config.AGENT_DEFAULT_PROVIDER !== undefined && config.AGENT_DEFAULT_PROVIDER !== managedProvider.id) {
66
+ throw new WorkspaceProvidersDisabledError(managedProvider.id);
67
+ }
68
+ }
69
+ const defaultProvider = config.AGENT_DEFAULT_PROVIDER;
70
+ if (defaultProvider !== undefined && !isRegisteredProvider(defaultProvider, managedProvider)) {
71
+ throw new Error(`AGENT_DEFAULT_PROVIDER must name a supported registered provider: ${defaultProvider}.`);
72
+ }
51
73
  if (!config.AGENT_DEFAULT_PROVIDER_API_KEY) return;
52
- if (!config.AGENT_DEFAULT_PROVIDER) {
74
+ if (!defaultProvider) {
53
75
  throw new Error('AGENT_DEFAULT_PROVIDER_API_KEY requires AGENT_DEFAULT_PROVIDER to be set.');
54
76
  }
55
- const credentialFields = getModelProviderEntry(config.AGENT_DEFAULT_PROVIDER)?.credential_fields ?? [];
77
+ if (managedProvider?.id === defaultProvider) {
78
+ throw new Error('AGENT_DEFAULT_PROVIDER_API_KEY cannot be used with a managed model provider.');
79
+ }
80
+ const credentialFields = getModelProviderEntry(defaultProvider)?.credential_fields ?? [];
56
81
  const field = credentialFields[0];
57
82
  if (credentialFields.length === 1 && field?.key === 'api_key' && field.secret) return;
58
83
  throw new Error('AGENT_DEFAULT_PROVIDER_API_KEY requires AGENT_DEFAULT_PROVIDER to use exactly one secret api_key credential field.');
59
84
  }
85
+ function isRegisteredProvider(providerId, managedProvider) {
86
+ if (managedProvider?.id === providerId) return true;
87
+ return getModelProviderEntry(providerId)?.support_status === 'supported';
88
+ }
89
+ function assertManagedProvider(provider) {
90
+ if (!modelProviderRefSchema.safeParse(provider.id).success) {
91
+ throw new Error(`Managed model provider ID must be a valid provider slug: ${provider.id}.`);
92
+ }
93
+ if (isReservedModelProviderId(provider.id)) {
94
+ throw new Error(`Managed model provider ID is reserved: ${provider.id}.`);
95
+ }
96
+ if (provider.label.length === 0) {
97
+ throw new Error(`Managed model provider label must not be empty: ${provider.id}.`);
98
+ }
99
+ if (provider.models.length === 0) {
100
+ throw new Error(`Managed model provider must define at least one model: ${provider.id}.`);
101
+ }
102
+ const modelIds = new Set();
103
+ for (const model of provider.models){
104
+ if (model.id.length === 0 || model.label.length === 0) {
105
+ throw new Error(`Managed model provider models must have IDs and labels: ${provider.id}.`);
106
+ }
107
+ if (modelIds.has(model.id)) {
108
+ throw new Error(`Managed model provider models must have unique IDs: ${provider.id}.`);
109
+ }
110
+ modelIds.add(model.id);
111
+ if (!managedModelApiSchema.safeParse(model.api).success) {
112
+ throw new Error(`Managed model provider model API is invalid: ${provider.id}/${model.id}.`);
113
+ }
114
+ }
115
+ if (!modelIds.has(provider.defaultModel)) {
116
+ throw new Error(`Managed model provider default model is not registered: ${provider.id}.`);
117
+ }
118
+ if (provider.defaultThinking !== undefined && !agentThinkingSchema.safeParse(provider.defaultThinking).success) {
119
+ throw new Error(`Managed model provider default thinking is invalid: ${provider.id}.`);
120
+ }
121
+ if (typeof provider.resolveCredentials !== 'function') {
122
+ throw new Error(`Managed model provider must resolve credentials: ${provider.id}.`);
123
+ }
124
+ }
60
125
 
61
126
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config.ts"],"sourcesContent":["import {\n agentThinkingSchema,\n buildHarnessToolDeploymentConfig,\n SUPPORTED_MODEL_PROVIDER_IDS,\n type SupportedModelProviderId,\n} from '@shipfox/api-agent-dto';\nimport {bool, createConfig, num, str} from '@shipfox/config';\nimport {getModelProviderEntry} from '#core/model-provider-policy.js';\n\nconst AGENT_THINKING_CHOICES = agentThinkingSchema.options;\n\nexport const config = createConfig({\n AGENT_DEFAULT_PROVIDER: str({\n desc: 'Instance-wide default model provider ID used when a workflow and workspace do not choose one. Optional. Use one of the supported model provider IDs from the model provider catalog.',\n choices: SUPPORTED_MODEL_PROVIDER_IDS,\n default: undefined,\n }),\n AGENT_DEFAULT_PROVIDER_MODEL: str({\n desc: 'Instance-wide default model ID used when the resolved provider matches AGENT_DEFAULT_PROVIDER and no workflow or workspace model is set. Optional. Use a model ID supported by that provider.',\n default: undefined,\n }),\n AGENT_DEFAULT_PROVIDER_THINKING: str({\n desc: 'Instance-wide default thinking effort used when the resolved provider matches AGENT_DEFAULT_PROVIDER and no workflow or workspace thinking effort is set. Optional. Accepted values are off, minimal, low, medium, high, and xhigh.',\n choices: AGENT_THINKING_CHOICES,\n default: undefined,\n }),\n AGENT_DEFAULT_PROVIDER_API_KEY: str({\n desc: 'API key for the instance default provider. Optional. Must belong to AGENT_DEFAULT_PROVIDER. If you change the default provider, change this key too. Instance defaults support API-key-only providers.',\n default: undefined,\n }),\n AGENT_PROVIDER_VALIDATION_TIMEOUT_MS: num({\n desc: 'Maximum time in milliseconds to wait for the live provider test request when saving credentials.',\n default: 10000,\n }),\n AGENT_CUSTOM_PROVIDER_ALLOW_PRIVATE_NETWORKS: bool({\n desc: 'Allows custom model providers to use private, loopback, link-local, metadata, and .internal network targets. Keep this true for local development and self-hosted private networks. Set it to false on cloud instances.',\n default: true,\n }),\n AGENT_CUSTOM_PROVIDER_HOST_DENYLIST: str({\n desc: 'Comma-separated hosts and IP ranges that custom model providers may not call. Accepts exact hosts, suffix patterns such as .internal.example or *.internal.example, IP literals, and CIDR blocks such as 10.0.0.0/8.',\n default: '',\n }),\n AGENT_PI_ENABLED_TOOL_PACKAGES: str({\n desc: 'Comma-separated optional Pi tool packages enabled for this deployment. Defaults to pi-web-access so Pi web access is available. Set it to an empty value to enable only Pi built-in tools. Accepted values: pi-web-access.',\n default: 'pi-web-access',\n }),\n AGENT_PI_WEB_SEARCH_ENABLED: bool({\n desc: 'Enables Pi web search tools when pi-web-access is enabled. Set it to false to disable web_search and get_search_content while keeping fetch_content available.',\n default: true,\n }),\n});\n\nassertInstanceDefaultModelProviderApiKeyConfig();\n\nexport const harnessToolDeploymentConfig = buildHarnessToolDeploymentConfig({\n piEnabledToolPackages: config.AGENT_PI_ENABLED_TOOL_PACKAGES,\n piWebSearchEnabled: config.AGENT_PI_WEB_SEARCH_ENABLED,\n});\n\nfunction assertInstanceDefaultModelProviderApiKeyConfig(): void {\n if (!config.AGENT_DEFAULT_PROVIDER_API_KEY) return;\n if (!config.AGENT_DEFAULT_PROVIDER) {\n throw new Error('AGENT_DEFAULT_PROVIDER_API_KEY requires AGENT_DEFAULT_PROVIDER to be set.');\n }\n\n const credentialFields =\n getModelProviderEntry(config.AGENT_DEFAULT_PROVIDER as SupportedModelProviderId)\n ?.credential_fields ?? [];\n const field = credentialFields[0];\n if (credentialFields.length === 1 && field?.key === 'api_key' && field.secret) return;\n\n throw new Error(\n 'AGENT_DEFAULT_PROVIDER_API_KEY requires AGENT_DEFAULT_PROVIDER to use exactly one secret api_key credential field.',\n );\n}\n"],"names":["agentThinkingSchema","buildHarnessToolDeploymentConfig","SUPPORTED_MODEL_PROVIDER_IDS","bool","createConfig","num","str","getModelProviderEntry","AGENT_THINKING_CHOICES","options","config","AGENT_DEFAULT_PROVIDER","desc","choices","default","undefined","AGENT_DEFAULT_PROVIDER_MODEL","AGENT_DEFAULT_PROVIDER_THINKING","AGENT_DEFAULT_PROVIDER_API_KEY","AGENT_PROVIDER_VALIDATION_TIMEOUT_MS","AGENT_CUSTOM_PROVIDER_ALLOW_PRIVATE_NETWORKS","AGENT_CUSTOM_PROVIDER_HOST_DENYLIST","AGENT_PI_ENABLED_TOOL_PACKAGES","AGENT_PI_WEB_SEARCH_ENABLED","assertInstanceDefaultModelProviderApiKeyConfig","harnessToolDeploymentConfig","piEnabledToolPackages","piWebSearchEnabled","Error","credentialFields","credential_fields","field","length","key","secret"],"mappings":"AAAA,SACEA,mBAAmB,EACnBC,gCAAgC,EAChCC,4BAA4B,QAEvB,yBAAyB;AAChC,SAAQC,IAAI,EAAEC,YAAY,EAAEC,GAAG,EAAEC,GAAG,QAAO,kBAAkB;AAC7D,SAAQC,qBAAqB,QAAO,iCAAiC;AAErE,MAAMC,yBAAyBR,oBAAoBS,OAAO;AAE1D,OAAO,MAAMC,SAASN,aAAa;IACjCO,wBAAwBL,IAAI;QAC1BM,MAAM;QACNC,SAASX;QACTY,SAASC;IACX;IACAC,8BAA8BV,IAAI;QAChCM,MAAM;QACNE,SAASC;IACX;IACAE,iCAAiCX,IAAI;QACnCM,MAAM;QACNC,SAASL;QACTM,SAASC;IACX;IACAG,gCAAgCZ,IAAI;QAClCM,MAAM;QACNE,SAASC;IACX;IACAI,sCAAsCd,IAAI;QACxCO,MAAM;QACNE,SAAS;IACX;IACAM,8CAA8CjB,KAAK;QACjDS,MAAM;QACNE,SAAS;IACX;IACAO,qCAAqCf,IAAI;QACvCM,MAAM;QACNE,SAAS;IACX;IACAQ,gCAAgChB,IAAI;QAClCM,MAAM;QACNE,SAAS;IACX;IACAS,6BAA6BpB,KAAK;QAChCS,MAAM;QACNE,SAAS;IACX;AACF,GAAG;AAEHU;AAEA,OAAO,MAAMC,8BAA8BxB,iCAAiC;IAC1EyB,uBAAuBhB,OAAOY,8BAA8B;IAC5DK,oBAAoBjB,OAAOa,2BAA2B;AACxD,GAAG;AAEH,SAASC;IACP,IAAI,CAACd,OAAOQ,8BAA8B,EAAE;IAC5C,IAAI,CAACR,OAAOC,sBAAsB,EAAE;QAClC,MAAM,IAAIiB,MAAM;IAClB;IAEA,MAAMC,mBACJtB,sBAAsBG,OAAOC,sBAAsB,GAC/CmB,qBAAqB,EAAE;IAC7B,MAAMC,QAAQF,gBAAgB,CAAC,EAAE;IACjC,IAAIA,iBAAiBG,MAAM,KAAK,KAAKD,OAAOE,QAAQ,aAAaF,MAAMG,MAAM,EAAE;IAE/E,MAAM,IAAIN,MACR;AAEJ"}
1
+ {"version":3,"sources":["../src/config.ts"],"sourcesContent":["import {\n agentThinkingSchema,\n buildHarnessToolDeploymentConfig,\n isReservedModelProviderId,\n type ManagedModelProvider,\n managedModelApiSchema,\n modelProviderRefSchema,\n SUPPORTED_MODEL_PROVIDER_IDS,\n type WorkspaceProvidersPolicy,\n} from '@shipfox/api-agent-dto';\nimport {bool, createConfig, num, str} from '@shipfox/config';\nimport {WorkspaceProvidersDisabledError} from '#core/errors.js';\nimport {getModelProviderEntry} from '#core/model-provider-policy.js';\n\nconst AGENT_THINKING_CHOICES = agentThinkingSchema.options;\nconst SUPPORTED_PROVIDER_IDS_DESCRIPTION = SUPPORTED_MODEL_PROVIDER_IDS.join(', ');\n\nexport const config = createConfig({\n AGENT_WORKSPACE_PROVIDERS: str({\n desc: 'Controls whether workspaces can configure model providers. Use enabled to preserve the default workspace provider behavior, or disabled when the injected managed provider is the only provider for this instance.',\n choices: ['enabled', 'disabled'],\n default: 'enabled',\n }),\n AGENT_DEFAULT_PROVIDER: str({\n desc: `Instance-wide default model provider ID used when a workflow and workspace do not choose one. Optional. Use one of the supported model catalog IDs (${SUPPORTED_PROVIDER_IDS_DESCRIPTION}) or the injected managed provider.`,\n default: undefined,\n }),\n AGENT_DEFAULT_PROVIDER_MODEL: str({\n desc: 'Instance-wide default model ID used when the resolved provider matches AGENT_DEFAULT_PROVIDER and no workflow or workspace model is set. Optional. Use a model ID supported by that provider.',\n default: undefined,\n }),\n AGENT_DEFAULT_PROVIDER_THINKING: str({\n desc: 'Instance-wide default thinking effort used when the resolved provider matches AGENT_DEFAULT_PROVIDER and no workflow or workspace thinking effort is set. Optional. Accepted values are off, minimal, low, medium, high, and xhigh.',\n choices: AGENT_THINKING_CHOICES,\n default: undefined,\n }),\n AGENT_DEFAULT_PROVIDER_API_KEY: str({\n desc: 'API key for the instance default provider. Optional. Must belong to AGENT_DEFAULT_PROVIDER. If you change the default provider, change this key too. Instance defaults support API-key-only providers.',\n default: undefined,\n }),\n AGENT_PROVIDER_VALIDATION_TIMEOUT_MS: num({\n desc: 'Maximum time in milliseconds to wait for the live provider test request when saving credentials.',\n default: 10000,\n }),\n AGENT_CUSTOM_PROVIDER_ALLOW_PRIVATE_NETWORKS: bool({\n desc: 'Allows custom model providers to use private, loopback, link-local, metadata, and .internal network targets. Keep this true for local development and self-hosted private networks. Set it to false on cloud instances.',\n default: true,\n }),\n AGENT_CUSTOM_PROVIDER_HOST_DENYLIST: str({\n desc: 'Comma-separated hosts and IP ranges that custom model providers may not call. Accepts exact hosts, suffix patterns such as .internal.example or *.internal.example, IP literals, and CIDR blocks such as 10.0.0.0/8.',\n default: '',\n }),\n AGENT_PI_ENABLED_TOOL_PACKAGES: str({\n desc: 'Comma-separated optional Pi tool packages enabled for this deployment. Defaults to pi-web-access so Pi web access is available. Set it to an empty value to enable only Pi built-in tools. Accepted values: pi-web-access.',\n default: 'pi-web-access',\n }),\n AGENT_PI_WEB_SEARCH_ENABLED: bool({\n desc: 'Enables Pi web search tools when pi-web-access is enabled. Set it to false to disable web_search and get_search_content while keeping fetch_content available.',\n default: true,\n }),\n});\n\nexport const workspaceProvidersPolicy =\n config.AGENT_WORKSPACE_PROVIDERS as WorkspaceProvidersPolicy;\n\nexport const harnessToolDeploymentConfig = buildHarnessToolDeploymentConfig({\n piEnabledToolPackages: config.AGENT_PI_ENABLED_TOOL_PACKAGES,\n piWebSearchEnabled: config.AGENT_PI_WEB_SEARCH_ENABLED,\n});\n\nexport function assertAgentConfig(managedProvider?: ManagedModelProvider): void {\n if (managedProvider !== undefined) assertManagedProvider(managedProvider);\n\n if (workspaceProvidersPolicy === 'disabled') {\n if (managedProvider === undefined) {\n throw new Error(\n 'AGENT_WORKSPACE_PROVIDERS=disabled requires an injected managed model provider.',\n );\n }\n if (\n config.AGENT_DEFAULT_PROVIDER !== undefined &&\n config.AGENT_DEFAULT_PROVIDER !== managedProvider.id\n ) {\n throw new WorkspaceProvidersDisabledError(managedProvider.id);\n }\n }\n\n const defaultProvider = config.AGENT_DEFAULT_PROVIDER;\n if (defaultProvider !== undefined && !isRegisteredProvider(defaultProvider, managedProvider)) {\n throw new Error(\n `AGENT_DEFAULT_PROVIDER must name a supported registered provider: ${defaultProvider}.`,\n );\n }\n\n if (!config.AGENT_DEFAULT_PROVIDER_API_KEY) return;\n if (!defaultProvider) {\n throw new Error('AGENT_DEFAULT_PROVIDER_API_KEY requires AGENT_DEFAULT_PROVIDER to be set.');\n }\n if (managedProvider?.id === defaultProvider) {\n throw new Error('AGENT_DEFAULT_PROVIDER_API_KEY cannot be used with a managed model provider.');\n }\n\n const credentialFields = getModelProviderEntry(defaultProvider)?.credential_fields ?? [];\n const field = credentialFields[0];\n if (credentialFields.length === 1 && field?.key === 'api_key' && field.secret) return;\n\n throw new Error(\n 'AGENT_DEFAULT_PROVIDER_API_KEY requires AGENT_DEFAULT_PROVIDER to use exactly one secret api_key credential field.',\n );\n}\n\nfunction isRegisteredProvider(\n providerId: string,\n managedProvider: ManagedModelProvider | undefined,\n): boolean {\n if (managedProvider?.id === providerId) return true;\n return getModelProviderEntry(providerId)?.support_status === 'supported';\n}\n\nfunction assertManagedProvider(provider: ManagedModelProvider): void {\n if (!modelProviderRefSchema.safeParse(provider.id).success) {\n throw new Error(`Managed model provider ID must be a valid provider slug: ${provider.id}.`);\n }\n if (isReservedModelProviderId(provider.id)) {\n throw new Error(`Managed model provider ID is reserved: ${provider.id}.`);\n }\n if (provider.label.length === 0) {\n throw new Error(`Managed model provider label must not be empty: ${provider.id}.`);\n }\n if (provider.models.length === 0) {\n throw new Error(`Managed model provider must define at least one model: ${provider.id}.`);\n }\n\n const modelIds = new Set<string>();\n for (const model of provider.models) {\n if (model.id.length === 0 || model.label.length === 0) {\n throw new Error(`Managed model provider models must have IDs and labels: ${provider.id}.`);\n }\n if (modelIds.has(model.id)) {\n throw new Error(`Managed model provider models must have unique IDs: ${provider.id}.`);\n }\n modelIds.add(model.id);\n if (!managedModelApiSchema.safeParse(model.api).success) {\n throw new Error(`Managed model provider model API is invalid: ${provider.id}/${model.id}.`);\n }\n }\n\n if (!modelIds.has(provider.defaultModel)) {\n throw new Error(`Managed model provider default model is not registered: ${provider.id}.`);\n }\n if (\n provider.defaultThinking !== undefined &&\n !agentThinkingSchema.safeParse(provider.defaultThinking).success\n ) {\n throw new Error(`Managed model provider default thinking is invalid: ${provider.id}.`);\n }\n if (typeof provider.resolveCredentials !== 'function') {\n throw new Error(`Managed model provider must resolve credentials: ${provider.id}.`);\n }\n}\n"],"names":["agentThinkingSchema","buildHarnessToolDeploymentConfig","isReservedModelProviderId","managedModelApiSchema","modelProviderRefSchema","SUPPORTED_MODEL_PROVIDER_IDS","bool","createConfig","num","str","WorkspaceProvidersDisabledError","getModelProviderEntry","AGENT_THINKING_CHOICES","options","SUPPORTED_PROVIDER_IDS_DESCRIPTION","join","config","AGENT_WORKSPACE_PROVIDERS","desc","choices","default","AGENT_DEFAULT_PROVIDER","undefined","AGENT_DEFAULT_PROVIDER_MODEL","AGENT_DEFAULT_PROVIDER_THINKING","AGENT_DEFAULT_PROVIDER_API_KEY","AGENT_PROVIDER_VALIDATION_TIMEOUT_MS","AGENT_CUSTOM_PROVIDER_ALLOW_PRIVATE_NETWORKS","AGENT_CUSTOM_PROVIDER_HOST_DENYLIST","AGENT_PI_ENABLED_TOOL_PACKAGES","AGENT_PI_WEB_SEARCH_ENABLED","workspaceProvidersPolicy","harnessToolDeploymentConfig","piEnabledToolPackages","piWebSearchEnabled","assertAgentConfig","managedProvider","assertManagedProvider","Error","id","defaultProvider","isRegisteredProvider","credentialFields","credential_fields","field","length","key","secret","providerId","support_status","provider","safeParse","success","label","models","modelIds","Set","model","has","add","api","defaultModel","defaultThinking","resolveCredentials"],"mappings":"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"}
@@ -13,6 +13,10 @@ export declare class UnsupportedModelProviderError extends Error {
13
13
  readonly providerId: string;
14
14
  constructor(providerId: string);
15
15
  }
16
+ export declare class WorkspaceProvidersDisabledError extends Error {
17
+ readonly managedProviderId: string;
18
+ constructor(managedProviderId: string);
19
+ }
16
20
  export declare class UnsupportedHarnessProviderError extends Error {
17
21
  readonly harness: Harness;
18
22
  readonly providerId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,OAAO,EACP,gBAAgB,EAChB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAEhC,qBAAa,4BAA6B,SAAQ,KAAK;aAEnC,UAAU,EAAE,gBAAgB;aAC5B,gBAAgB,EAAE,MAAM;gBADxB,UAAU,EAAE,gBAAgB,EAC5B,gBAAgB,EAAE,MAAM;CAK3C;AAED,qBAAa,gCAAiC,SAAQ,KAAK;aAEvC,WAAW,EAAE,MAAM;aACnB,UAAU,EAAE,MAAM;gBADlB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM;CAKrC;AAED,qBAAa,6BAA8B,SAAQ,KAAK;aAC1B,UAAU,EAAE,MAAM;gBAAlB,UAAU,EAAE,MAAM;CAI/C;AAED,qBAAa,+BAAgC,SAAQ,KAAK;aAEtC,OAAO,EAAE,OAAO;aAChB,UAAU,EAAE,MAAM;aAClB,oBAAoB,EAAE,SAAS,MAAM,EAAE;gBAFvC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,oBAAoB,EAAE,SAAS,MAAM,EAAE;CAO1D;AAED,qBAAa,+BAAgC,SAAQ,KAAK;aAEtC,OAAO,EAAE,OAAO;aAChB,QAAQ,EAAE,MAAM;aAChB,eAAe,EAAE,SAAS,aAAa,EAAE;gBAFzC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,SAAS,aAAa,EAAE;CAO5D;AAED,qBAAa,4BAA6B,SAAQ,KAAK;aACzB,UAAU,EAAE,wBAAwB;gBAApC,UAAU,EAAE,wBAAwB;CAIjE;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,UAAU,EAAE,gBAAgB,CAAC;IAC7C,SAAgB,KAAK,EAAE,MAAM,CAAC;gBAElB,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM;gBAC3C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM;CAmB1E;AAED,qBAAa,uCAAwC,SAAQ,KAAK;aACpC,UAAU,EAAE,wBAAwB;gBAApC,UAAU,EAAE,wBAAwB;CAIjE;AAED,qBAAa,qCAAsC,SAAQ,KAAK;aAE5C,WAAW,EAAE,MAAM;aACnB,UAAU,EAAE,gBAAgB;gBAD5B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,gBAAgB;CAK/C;AAED,qBAAa,sCAAuC,SAAQ,KAAK;aAE7C,WAAW,EAAE,MAAM;aACnB,UAAU,EAAE,gBAAgB;gBAD5B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,gBAAgB;CAK/C;AAED,qBAAa,yCAA0C,SAAQ,KAAK;aAEhD,UAAU,EAAE,gBAAgB;aAC5B,UAAU,EAAE,MAAM;gBADlB,UAAU,EAAE,gBAAgB,EAC5B,UAAU,EAAE,MAAM;CAKrC;AAED,qBAAa,iDAAkD,SAAQ,KAAK;aAC9C,UAAU,EAAE,gBAAgB;gBAA5B,UAAU,EAAE,gBAAgB;CAMzD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,OAAO,EACP,gBAAgB,EAChB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAEhC,qBAAa,4BAA6B,SAAQ,KAAK;aAEnC,UAAU,EAAE,gBAAgB;aAC5B,gBAAgB,EAAE,MAAM;IAF1C,YACkB,UAAU,EAAE,gBAAgB,EAC5B,gBAAgB,EAAE,MAAM,EAIzC;CACF;AAED,qBAAa,gCAAiC,SAAQ,KAAK;aAEvC,WAAW,EAAE,MAAM;aACnB,UAAU,EAAE,MAAM;IAFpC,YACkB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAInC;CACF;AAED,qBAAa,6BAA8B,SAAQ,KAAK;aAC1B,UAAU,EAAE,MAAM;IAA9C,YAA4B,UAAU,EAAE,MAAM,EAG7C;CACF;AAED,qBAAa,+BAAgC,SAAQ,KAAK;aAC5B,iBAAiB,EAAE,MAAM;IAArD,YAA4B,iBAAiB,EAAE,MAAM,EAGpD;CACF;AAED,qBAAa,+BAAgC,SAAQ,KAAK;aAEtC,OAAO,EAAE,OAAO;aAChB,UAAU,EAAE,MAAM;aAClB,oBAAoB,EAAE,SAAS,MAAM,EAAE;IAHzD,YACkB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,oBAAoB,EAAE,SAAS,MAAM,EAAE,EAMxD;CACF;AAED,qBAAa,+BAAgC,SAAQ,KAAK;aAEtC,OAAO,EAAE,OAAO;aAChB,QAAQ,EAAE,MAAM;aAChB,eAAe,EAAE,SAAS,aAAa,EAAE;IAH3D,YACkB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,SAAS,aAAa,EAAE,EAM1D;CACF;AAED,qBAAa,4BAA6B,SAAQ,KAAK;aACzB,UAAU,EAAE,wBAAwB;IAAhE,YAA4B,UAAU,EAAE,wBAAwB,EAG/D;CACF;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,UAAU,EAAE,gBAAgB,CAAC;IAC7C,SAAgB,KAAK,EAAE,MAAM,CAAC;IAE9B,YAAY,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE;IACzD,YAAY,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE;CAmB5E;AAED,qBAAa,uCAAwC,SAAQ,KAAK;aACpC,UAAU,EAAE,wBAAwB;IAAhE,YAA4B,UAAU,EAAE,wBAAwB,EAG/D;CACF;AAED,qBAAa,qCAAsC,SAAQ,KAAK;aAE5C,WAAW,EAAE,MAAM;aACnB,UAAU,EAAE,gBAAgB;IAF9C,YACkB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,gBAAgB,EAI7C;CACF;AAED,qBAAa,sCAAuC,SAAQ,KAAK;aAE7C,WAAW,EAAE,MAAM;aACnB,UAAU,EAAE,gBAAgB;IAF9C,YACkB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,gBAAgB,EAI7C;CACF;AAED,qBAAa,yCAA0C,SAAQ,KAAK;aAEhD,UAAU,EAAE,gBAAgB;aAC5B,UAAU,EAAE,MAAM;IAFpC,YACkB,UAAU,EAAE,gBAAgB,EAC5B,UAAU,EAAE,MAAM,EAInC;CACF;AAED,qBAAa,iDAAkD,SAAQ,KAAK;aAC9C,UAAU,EAAE,gBAAgB;IAAxD,YAA4B,UAAU,EAAE,gBAAgB,EAKvD;CACF"}
@@ -16,6 +16,12 @@ export class UnsupportedModelProviderError extends Error {
16
16
  this.name = 'UnsupportedModelProviderError';
17
17
  }
18
18
  }
19
+ export class WorkspaceProvidersDisabledError extends Error {
20
+ constructor(managedProviderId){
21
+ super(`This instance only supports provider \`${managedProviderId}\`.`), this.managedProviderId = managedProviderId;
22
+ this.name = 'WorkspaceProvidersDisabledError';
23
+ }
24
+ }
19
25
  export class UnsupportedHarnessProviderError extends Error {
20
26
  constructor(harness, providerId, supportedProviderIds){
21
27
  super(`Harness ${harness} does not support model provider ${providerId}. Supported providers: ${supportedProviderIds.join(', ')}`), this.harness = harness, this.providerId = providerId, this.supportedProviderIds = supportedProviderIds;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/errors.ts"],"sourcesContent":["import type {\n AgentThinking,\n Harness,\n ModelProviderRef,\n SupportedModelProviderId,\n} from '@shipfox/api-agent-dto';\n\nexport class ModelProviderValidationError extends Error {\n constructor(\n public readonly providerId: ModelProviderRef,\n public readonly sanitizedMessage: string,\n ) {\n super(`Model provider validation failed for ${providerId}: ${sanitizedMessage}`);\n this.name = 'ModelProviderValidationError';\n }\n}\n\nexport class ModelProviderConfigNotFoundError extends Error {\n constructor(\n public readonly workspaceId: string,\n public readonly providerId: string,\n ) {\n super(`Model provider config not found: ${workspaceId}/${providerId}`);\n this.name = 'ModelProviderConfigNotFoundError';\n }\n}\n\nexport class UnsupportedModelProviderError extends Error {\n constructor(public readonly providerId: string) {\n super(`Unsupported model provider: ${providerId}`);\n this.name = 'UnsupportedModelProviderError';\n }\n}\n\nexport class UnsupportedHarnessProviderError extends Error {\n constructor(\n public readonly harness: Harness,\n public readonly providerId: string,\n public readonly supportedProviderIds: readonly string[],\n ) {\n super(\n `Harness ${harness} does not support model provider ${providerId}. Supported providers: ${supportedProviderIds.join(', ')}`,\n );\n this.name = 'UnsupportedHarnessProviderError';\n }\n}\n\nexport class UnsupportedHarnessThinkingError extends Error {\n constructor(\n public readonly harness: Harness,\n public readonly thinking: string,\n public readonly supportedLevels: readonly AgentThinking[],\n ) {\n super(\n `Harness ${harness} does not support thinking ${thinking}. Supported levels: ${supportedLevels.join(', ')}`,\n );\n this.name = 'UnsupportedHarnessThinkingError';\n }\n}\n\nexport class InvalidCredentialFieldsError extends Error {\n constructor(public readonly providerId: SupportedModelProviderId) {\n super(`Invalid credential fields for model provider: ${providerId}`);\n this.name = 'InvalidCredentialFieldsError';\n }\n}\n\nexport class InvalidAgentModelError extends Error {\n public readonly harness: Harness;\n public readonly providerId: ModelProviderRef;\n public readonly model: string;\n\n constructor(providerId: ModelProviderRef, model: string);\n constructor(harness: Harness, providerId: ModelProviderRef, model: string);\n constructor(\n harnessOrProviderId: Harness | ModelProviderRef,\n providerIdOrModel: ModelProviderRef | string,\n model?: string,\n ) {\n const harness = model === undefined ? 'pi' : (harnessOrProviderId as Harness);\n const providerId =\n model === undefined\n ? (harnessOrProviderId as ModelProviderRef)\n : (providerIdOrModel as ModelProviderRef);\n const resolvedModel = model ?? (providerIdOrModel as string);\n\n super(`Model is not available for harness ${harness}: ${providerId}/${resolvedModel}`);\n this.name = 'InvalidAgentModelError';\n this.harness = harness;\n this.providerId = providerId;\n this.model = resolvedModel;\n }\n}\n\nexport class ModelProviderValidationUnavailableError extends Error {\n constructor(public readonly providerId: SupportedModelProviderId) {\n super(`Model provider validation is not available for model provider: ${providerId}`);\n this.name = 'ModelProviderValidationUnavailableError';\n }\n}\n\nexport class CustomModelProviderSlugCollisionError extends Error {\n constructor(\n public readonly workspaceId: string,\n public readonly providerId: ModelProviderRef,\n ) {\n super(`Custom model provider slug already exists: ${workspaceId}/${providerId}`);\n this.name = 'CustomModelProviderSlugCollisionError';\n }\n}\n\nexport class CustomModelProviderConfigNotFoundError extends Error {\n constructor(\n public readonly workspaceId: string,\n public readonly providerId: ModelProviderRef,\n ) {\n super(`Custom model provider config not found: ${workspaceId}/${providerId}`);\n this.name = 'CustomModelProviderConfigNotFoundError';\n }\n}\n\nexport class InvalidCustomModelProviderHeaderKeepError extends Error {\n constructor(\n public readonly providerId: ModelProviderRef,\n public readonly headerName: string,\n ) {\n super(`Custom model provider secret header cannot be kept: ${providerId}/${headerName}`);\n this.name = 'InvalidCustomModelProviderHeaderKeepError';\n }\n}\n\nexport class CustomModelProviderStoredSecretBaseUrlChangeError extends Error {\n constructor(public readonly providerId: ModelProviderRef) {\n super(\n `Stored custom model provider secrets cannot be reused with a changed base URL: ${providerId}`,\n );\n this.name = 'CustomModelProviderStoredSecretBaseUrlChangeError';\n }\n}\n"],"names":["ModelProviderValidationError","Error","providerId","sanitizedMessage","name","ModelProviderConfigNotFoundError","workspaceId","UnsupportedModelProviderError","UnsupportedHarnessProviderError","harness","supportedProviderIds","join","UnsupportedHarnessThinkingError","thinking","supportedLevels","InvalidCredentialFieldsError","InvalidAgentModelError","harnessOrProviderId","providerIdOrModel","model","undefined","resolvedModel","ModelProviderValidationUnavailableError","CustomModelProviderSlugCollisionError","CustomModelProviderConfigNotFoundError","InvalidCustomModelProviderHeaderKeepError","headerName","CustomModelProviderStoredSecretBaseUrlChangeError"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/core/errors.ts"],"sourcesContent":["import type {\n AgentThinking,\n Harness,\n ModelProviderRef,\n SupportedModelProviderId,\n} from '@shipfox/api-agent-dto';\n\nexport class ModelProviderValidationError extends Error {\n constructor(\n public readonly providerId: ModelProviderRef,\n public readonly sanitizedMessage: string,\n ) {\n super(`Model provider validation failed for ${providerId}: ${sanitizedMessage}`);\n this.name = 'ModelProviderValidationError';\n }\n}\n\nexport class ModelProviderConfigNotFoundError extends Error {\n constructor(\n public readonly workspaceId: string,\n public readonly providerId: string,\n ) {\n super(`Model provider config not found: ${workspaceId}/${providerId}`);\n this.name = 'ModelProviderConfigNotFoundError';\n }\n}\n\nexport class UnsupportedModelProviderError extends Error {\n constructor(public readonly providerId: string) {\n super(`Unsupported model provider: ${providerId}`);\n this.name = 'UnsupportedModelProviderError';\n }\n}\n\nexport class WorkspaceProvidersDisabledError extends Error {\n constructor(public readonly managedProviderId: string) {\n super(`This instance only supports provider \\`${managedProviderId}\\`.`);\n this.name = 'WorkspaceProvidersDisabledError';\n }\n}\n\nexport class UnsupportedHarnessProviderError extends Error {\n constructor(\n public readonly harness: Harness,\n public readonly providerId: string,\n public readonly supportedProviderIds: readonly string[],\n ) {\n super(\n `Harness ${harness} does not support model provider ${providerId}. Supported providers: ${supportedProviderIds.join(', ')}`,\n );\n this.name = 'UnsupportedHarnessProviderError';\n }\n}\n\nexport class UnsupportedHarnessThinkingError extends Error {\n constructor(\n public readonly harness: Harness,\n public readonly thinking: string,\n public readonly supportedLevels: readonly AgentThinking[],\n ) {\n super(\n `Harness ${harness} does not support thinking ${thinking}. Supported levels: ${supportedLevels.join(', ')}`,\n );\n this.name = 'UnsupportedHarnessThinkingError';\n }\n}\n\nexport class InvalidCredentialFieldsError extends Error {\n constructor(public readonly providerId: SupportedModelProviderId) {\n super(`Invalid credential fields for model provider: ${providerId}`);\n this.name = 'InvalidCredentialFieldsError';\n }\n}\n\nexport class InvalidAgentModelError extends Error {\n public readonly harness: Harness;\n public readonly providerId: ModelProviderRef;\n public readonly model: string;\n\n constructor(providerId: ModelProviderRef, model: string);\n constructor(harness: Harness, providerId: ModelProviderRef, model: string);\n constructor(\n harnessOrProviderId: Harness | ModelProviderRef,\n providerIdOrModel: ModelProviderRef | string,\n model?: string,\n ) {\n const harness = model === undefined ? 'pi' : (harnessOrProviderId as Harness);\n const providerId =\n model === undefined\n ? (harnessOrProviderId as ModelProviderRef)\n : (providerIdOrModel as ModelProviderRef);\n const resolvedModel = model ?? (providerIdOrModel as string);\n\n super(`Model is not available for harness ${harness}: ${providerId}/${resolvedModel}`);\n this.name = 'InvalidAgentModelError';\n this.harness = harness;\n this.providerId = providerId;\n this.model = resolvedModel;\n }\n}\n\nexport class ModelProviderValidationUnavailableError extends Error {\n constructor(public readonly providerId: SupportedModelProviderId) {\n super(`Model provider validation is not available for model provider: ${providerId}`);\n this.name = 'ModelProviderValidationUnavailableError';\n }\n}\n\nexport class CustomModelProviderSlugCollisionError extends Error {\n constructor(\n public readonly workspaceId: string,\n public readonly providerId: ModelProviderRef,\n ) {\n super(`Custom model provider slug already exists: ${workspaceId}/${providerId}`);\n this.name = 'CustomModelProviderSlugCollisionError';\n }\n}\n\nexport class CustomModelProviderConfigNotFoundError extends Error {\n constructor(\n public readonly workspaceId: string,\n public readonly providerId: ModelProviderRef,\n ) {\n super(`Custom model provider config not found: ${workspaceId}/${providerId}`);\n this.name = 'CustomModelProviderConfigNotFoundError';\n }\n}\n\nexport class InvalidCustomModelProviderHeaderKeepError extends Error {\n constructor(\n public readonly providerId: ModelProviderRef,\n public readonly headerName: string,\n ) {\n super(`Custom model provider secret header cannot be kept: ${providerId}/${headerName}`);\n this.name = 'InvalidCustomModelProviderHeaderKeepError';\n }\n}\n\nexport class CustomModelProviderStoredSecretBaseUrlChangeError extends Error {\n constructor(public readonly providerId: ModelProviderRef) {\n super(\n `Stored custom model provider secrets cannot be reused with a changed base URL: ${providerId}`,\n );\n this.name = 'CustomModelProviderStoredSecretBaseUrlChangeError';\n }\n}\n"],"names":["ModelProviderValidationError","Error","providerId","sanitizedMessage","name","ModelProviderConfigNotFoundError","workspaceId","UnsupportedModelProviderError","WorkspaceProvidersDisabledError","managedProviderId","UnsupportedHarnessProviderError","harness","supportedProviderIds","join","UnsupportedHarnessThinkingError","thinking","supportedLevels","InvalidCredentialFieldsError","InvalidAgentModelError","harnessOrProviderId","providerIdOrModel","model","undefined","resolvedModel","ModelProviderValidationUnavailableError","CustomModelProviderSlugCollisionError","CustomModelProviderConfigNotFoundError","InvalidCustomModelProviderHeaderKeepError","headerName","CustomModelProviderStoredSecretBaseUrlChangeError"],"mappings":"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"}
@@ -2,7 +2,7 @@ export { createCustomModelProviderConfig, resolveCustomModelProviderDiscoveryPar
2
2
  export { discoverCustomModelProviderModels } from './discover-custom-model-provider-models.js';
3
3
  export type { AgentWorkspaceSettings } from './entities/agent-workspace-settings.js';
4
4
  export type { ModelProviderConfig } from './entities/model-provider-config.js';
5
- export { CustomModelProviderConfigNotFoundError, CustomModelProviderSlugCollisionError, CustomModelProviderStoredSecretBaseUrlChangeError, InvalidAgentModelError, InvalidCredentialFieldsError, InvalidCustomModelProviderHeaderKeepError, ModelProviderConfigNotFoundError, ModelProviderValidationError, ModelProviderValidationUnavailableError, UnsupportedHarnessProviderError, UnsupportedHarnessThinkingError, UnsupportedModelProviderError, } from './errors.js';
5
+ export { CustomModelProviderConfigNotFoundError, CustomModelProviderSlugCollisionError, CustomModelProviderStoredSecretBaseUrlChangeError, InvalidAgentModelError, InvalidCredentialFieldsError, InvalidCustomModelProviderHeaderKeepError, ModelProviderConfigNotFoundError, ModelProviderValidationError, ModelProviderValidationUnavailableError, UnsupportedHarnessProviderError, UnsupportedHarnessThinkingError, UnsupportedModelProviderError, WorkspaceProvidersDisabledError, } from './errors.js';
6
6
  export { getHarnessDescriptor, getHarnessToolDescriptor, type HarnessDescriptor, type HarnessToolDeploymentConfig, type HarnessToolDescriptor, type HarnessToolPackageName, harnessSupportsProvider, harnessSupportsTool, listEnabledHarnessTools, listHarnessDescriptors, listHarnessProviderModels, listHarnessTools, probeHarnessProviderCredentials, } from './harness/index.js';
7
7
  export { buildModelProviderCatalog } from './model-provider-catalog.js';
8
8
  export { deleteModelProviderConfig, testAndSaveModelProviderConfig, updateModelProviderConfigDefaultModel, } from './model-provider-config-service.js';
@@ -10,4 +10,5 @@ export { getModelProviderCredentialKeys, getModelProviderEntry, isReservedModelP
10
10
  export { type AgentConfigResolutionContext, type AgentDefaultsResolver, type ContextualAgentConfig, catalogDefaultAgentResolver, type ResolvedAgentConfig, resolveAgentConfig, } from './resolve-agent-config.js';
11
11
  export { type ResolveRuntimeCredentialsParams, resolveRuntimeCredentials, } from './resolve-runtime-credentials.js';
12
12
  export { createWorkspaceAgentDefaultsResolver } from './workspace-agent-defaults-resolver.js';
13
+ export { assertWorkspaceProviderConfigurationEnabled, type WorkspaceProviderPolicyOptions, } from './workspace-provider-policy.js';
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,EAC/B,yCAAyC,EACzC,+BAA+B,GAChC,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAC,iCAAiC,EAAC,MAAM,4CAA4C,CAAC;AAC7F,YAAY,EAAC,sBAAsB,EAAC,MAAM,wCAAwC,CAAC;AACnF,YAAY,EAAC,mBAAmB,EAAC,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EACL,sCAAsC,EACtC,qCAAqC,EACrC,iDAAiD,EACjD,sBAAsB,EACtB,4BAA4B,EAC5B,yCAAyC,EACzC,gCAAgC,EAChC,4BAA4B,EAC5B,uCAAuC,EACvC,+BAA+B,EAC/B,+BAA+B,EAC/B,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,EAChC,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,+BAA+B,GAChC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,yBAAyB,EAAC,MAAM,6BAA6B,CAAC;AACtE,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,qCAAqC,GACtC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,8BAA8B,EAC9B,qBAAqB,EACrB,yBAAyB,EACzB,2BAA2B,EAC3B,gCAAgC,GACjC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,2BAA2B,EAC3B,KAAK,mBAAmB,EACxB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,+BAA+B,EACpC,yBAAyB,GAC1B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAC,oCAAoC,EAAC,MAAM,wCAAwC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,EAC/B,yCAAyC,EACzC,+BAA+B,GAChC,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAC,iCAAiC,EAAC,MAAM,4CAA4C,CAAC;AAC7F,YAAY,EAAC,sBAAsB,EAAC,MAAM,wCAAwC,CAAC;AACnF,YAAY,EAAC,mBAAmB,EAAC,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EACL,sCAAsC,EACtC,qCAAqC,EACrC,iDAAiD,EACjD,sBAAsB,EACtB,4BAA4B,EAC5B,yCAAyC,EACzC,gCAAgC,EAChC,4BAA4B,EAC5B,uCAAuC,EACvC,+BAA+B,EAC/B,+BAA+B,EAC/B,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,EAChC,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,+BAA+B,GAChC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,yBAAyB,EAAC,MAAM,6BAA6B,CAAC;AACtE,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,qCAAqC,GACtC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,8BAA8B,EAC9B,qBAAqB,EACrB,yBAAyB,EACzB,2BAA2B,EAC3B,gCAAgC,GACjC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,2BAA2B,EAC3B,KAAK,mBAAmB,EACxB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,+BAA+B,EACpC,yBAAyB,GAC1B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAC,oCAAoC,EAAC,MAAM,wCAAwC,CAAC;AAC5F,OAAO,EACL,2CAA2C,EAC3C,KAAK,8BAA8B,GACpC,MAAM,gCAAgC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export { createCustomModelProviderConfig, resolveCustomModelProviderDiscoveryParams, updateCustomModelProviderConfig } from './custom-model-provider-config-service.js';
2
2
  export { discoverCustomModelProviderModels } from './discover-custom-model-provider-models.js';
3
- export { CustomModelProviderConfigNotFoundError, CustomModelProviderSlugCollisionError, CustomModelProviderStoredSecretBaseUrlChangeError, InvalidAgentModelError, InvalidCredentialFieldsError, InvalidCustomModelProviderHeaderKeepError, ModelProviderConfigNotFoundError, ModelProviderValidationError, ModelProviderValidationUnavailableError, UnsupportedHarnessProviderError, UnsupportedHarnessThinkingError, UnsupportedModelProviderError } from './errors.js';
3
+ export { CustomModelProviderConfigNotFoundError, CustomModelProviderSlugCollisionError, CustomModelProviderStoredSecretBaseUrlChangeError, InvalidAgentModelError, InvalidCredentialFieldsError, InvalidCustomModelProviderHeaderKeepError, ModelProviderConfigNotFoundError, ModelProviderValidationError, ModelProviderValidationUnavailableError, UnsupportedHarnessProviderError, UnsupportedHarnessThinkingError, UnsupportedModelProviderError, WorkspaceProvidersDisabledError } from './errors.js';
4
4
  export { getHarnessDescriptor, getHarnessToolDescriptor, harnessSupportsProvider, harnessSupportsTool, listEnabledHarnessTools, listHarnessDescriptors, listHarnessProviderModels, listHarnessTools, probeHarnessProviderCredentials } from './harness/index.js';
5
5
  export { buildModelProviderCatalog } from './model-provider-catalog.js';
6
6
  export { deleteModelProviderConfig, testAndSaveModelProviderConfig, updateModelProviderConfigDefaultModel } from './model-provider-config-service.js';
@@ -8,5 +8,6 @@ export { getModelProviderCredentialKeys, getModelProviderEntry, isReservedModelP
8
8
  export { catalogDefaultAgentResolver, resolveAgentConfig } from './resolve-agent-config.js';
9
9
  export { resolveRuntimeCredentials } from './resolve-runtime-credentials.js';
10
10
  export { createWorkspaceAgentDefaultsResolver } from './workspace-agent-defaults-resolver.js';
11
+ export { assertWorkspaceProviderConfigurationEnabled } from './workspace-provider-policy.js';
11
12
 
12
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/index.ts"],"sourcesContent":["export {\n createCustomModelProviderConfig,\n resolveCustomModelProviderDiscoveryParams,\n updateCustomModelProviderConfig,\n} from './custom-model-provider-config-service.js';\nexport {discoverCustomModelProviderModels} from './discover-custom-model-provider-models.js';\nexport type {AgentWorkspaceSettings} from './entities/agent-workspace-settings.js';\nexport type {ModelProviderConfig} from './entities/model-provider-config.js';\nexport {\n CustomModelProviderConfigNotFoundError,\n CustomModelProviderSlugCollisionError,\n CustomModelProviderStoredSecretBaseUrlChangeError,\n InvalidAgentModelError,\n InvalidCredentialFieldsError,\n InvalidCustomModelProviderHeaderKeepError,\n ModelProviderConfigNotFoundError,\n ModelProviderValidationError,\n ModelProviderValidationUnavailableError,\n UnsupportedHarnessProviderError,\n UnsupportedHarnessThinkingError,\n UnsupportedModelProviderError,\n} from './errors.js';\nexport {\n getHarnessDescriptor,\n getHarnessToolDescriptor,\n type HarnessDescriptor,\n type HarnessToolDeploymentConfig,\n type HarnessToolDescriptor,\n type HarnessToolPackageName,\n harnessSupportsProvider,\n harnessSupportsTool,\n listEnabledHarnessTools,\n listHarnessDescriptors,\n listHarnessProviderModels,\n listHarnessTools,\n probeHarnessProviderCredentials,\n} from './harness/index.js';\nexport {buildModelProviderCatalog} from './model-provider-catalog.js';\nexport {\n deleteModelProviderConfig,\n testAndSaveModelProviderConfig,\n updateModelProviderConfigDefaultModel,\n} from './model-provider-config-service.js';\nexport {\n getModelProviderCredentialKeys,\n getModelProviderEntry,\n isReservedModelProviderId,\n listSupportedModelProviders,\n modelProviderCredentialKeysMatch,\n} from './model-provider-policy.js';\nexport {\n type AgentConfigResolutionContext,\n type AgentDefaultsResolver,\n type ContextualAgentConfig,\n catalogDefaultAgentResolver,\n type ResolvedAgentConfig,\n resolveAgentConfig,\n} from './resolve-agent-config.js';\nexport {\n type ResolveRuntimeCredentialsParams,\n resolveRuntimeCredentials,\n} from './resolve-runtime-credentials.js';\nexport {createWorkspaceAgentDefaultsResolver} from './workspace-agent-defaults-resolver.js';\n"],"names":["createCustomModelProviderConfig","resolveCustomModelProviderDiscoveryParams","updateCustomModelProviderConfig","discoverCustomModelProviderModels","CustomModelProviderConfigNotFoundError","CustomModelProviderSlugCollisionError","CustomModelProviderStoredSecretBaseUrlChangeError","InvalidAgentModelError","InvalidCredentialFieldsError","InvalidCustomModelProviderHeaderKeepError","ModelProviderConfigNotFoundError","ModelProviderValidationError","ModelProviderValidationUnavailableError","UnsupportedHarnessProviderError","UnsupportedHarnessThinkingError","UnsupportedModelProviderError","getHarnessDescriptor","getHarnessToolDescriptor","harnessSupportsProvider","harnessSupportsTool","listEnabledHarnessTools","listHarnessDescriptors","listHarnessProviderModels","listHarnessTools","probeHarnessProviderCredentials","buildModelProviderCatalog","deleteModelProviderConfig","testAndSaveModelProviderConfig","updateModelProviderConfigDefaultModel","getModelProviderCredentialKeys","getModelProviderEntry","isReservedModelProviderId","listSupportedModelProviders","modelProviderCredentialKeysMatch","catalogDefaultAgentResolver","resolveAgentConfig","resolveRuntimeCredentials","createWorkspaceAgentDefaultsResolver"],"mappings":"AAAA,SACEA,+BAA+B,EAC/BC,yCAAyC,EACzCC,+BAA+B,QAC1B,4CAA4C;AACnD,SAAQC,iCAAiC,QAAO,6CAA6C;AAG7F,SACEC,sCAAsC,EACtCC,qCAAqC,EACrCC,iDAAiD,EACjDC,sBAAsB,EACtBC,4BAA4B,EAC5BC,yCAAyC,EACzCC,gCAAgC,EAChCC,4BAA4B,EAC5BC,uCAAuC,EACvCC,+BAA+B,EAC/BC,+BAA+B,EAC/BC,6BAA6B,QACxB,cAAc;AACrB,SACEC,oBAAoB,EACpBC,wBAAwB,EAKxBC,uBAAuB,EACvBC,mBAAmB,EACnBC,uBAAuB,EACvBC,sBAAsB,EACtBC,yBAAyB,EACzBC,gBAAgB,EAChBC,+BAA+B,QAC1B,qBAAqB;AAC5B,SAAQC,yBAAyB,QAAO,8BAA8B;AACtE,SACEC,yBAAyB,EACzBC,8BAA8B,EAC9BC,qCAAqC,QAChC,qCAAqC;AAC5C,SACEC,8BAA8B,EAC9BC,qBAAqB,EACrBC,yBAAyB,EACzBC,2BAA2B,EAC3BC,gCAAgC,QAC3B,6BAA6B;AACpC,SAIEC,2BAA2B,EAE3BC,kBAAkB,QACb,4BAA4B;AACnC,SAEEC,yBAAyB,QACpB,mCAAmC;AAC1C,SAAQC,oCAAoC,QAAO,yCAAyC"}
1
+ {"version":3,"sources":["../../src/core/index.ts"],"sourcesContent":["export {\n createCustomModelProviderConfig,\n resolveCustomModelProviderDiscoveryParams,\n updateCustomModelProviderConfig,\n} from './custom-model-provider-config-service.js';\nexport {discoverCustomModelProviderModels} from './discover-custom-model-provider-models.js';\nexport type {AgentWorkspaceSettings} from './entities/agent-workspace-settings.js';\nexport type {ModelProviderConfig} from './entities/model-provider-config.js';\nexport {\n CustomModelProviderConfigNotFoundError,\n CustomModelProviderSlugCollisionError,\n CustomModelProviderStoredSecretBaseUrlChangeError,\n InvalidAgentModelError,\n InvalidCredentialFieldsError,\n InvalidCustomModelProviderHeaderKeepError,\n ModelProviderConfigNotFoundError,\n ModelProviderValidationError,\n ModelProviderValidationUnavailableError,\n UnsupportedHarnessProviderError,\n UnsupportedHarnessThinkingError,\n UnsupportedModelProviderError,\n WorkspaceProvidersDisabledError,\n} from './errors.js';\nexport {\n getHarnessDescriptor,\n getHarnessToolDescriptor,\n type HarnessDescriptor,\n type HarnessToolDeploymentConfig,\n type HarnessToolDescriptor,\n type HarnessToolPackageName,\n harnessSupportsProvider,\n harnessSupportsTool,\n listEnabledHarnessTools,\n listHarnessDescriptors,\n listHarnessProviderModels,\n listHarnessTools,\n probeHarnessProviderCredentials,\n} from './harness/index.js';\nexport {buildModelProviderCatalog} from './model-provider-catalog.js';\nexport {\n deleteModelProviderConfig,\n testAndSaveModelProviderConfig,\n updateModelProviderConfigDefaultModel,\n} from './model-provider-config-service.js';\nexport {\n getModelProviderCredentialKeys,\n getModelProviderEntry,\n isReservedModelProviderId,\n listSupportedModelProviders,\n modelProviderCredentialKeysMatch,\n} from './model-provider-policy.js';\nexport {\n type AgentConfigResolutionContext,\n type AgentDefaultsResolver,\n type ContextualAgentConfig,\n catalogDefaultAgentResolver,\n type ResolvedAgentConfig,\n resolveAgentConfig,\n} from './resolve-agent-config.js';\nexport {\n type ResolveRuntimeCredentialsParams,\n resolveRuntimeCredentials,\n} from './resolve-runtime-credentials.js';\nexport {createWorkspaceAgentDefaultsResolver} from './workspace-agent-defaults-resolver.js';\nexport {\n assertWorkspaceProviderConfigurationEnabled,\n type WorkspaceProviderPolicyOptions,\n} from './workspace-provider-policy.js';\n"],"names":["createCustomModelProviderConfig","resolveCustomModelProviderDiscoveryParams","updateCustomModelProviderConfig","discoverCustomModelProviderModels","CustomModelProviderConfigNotFoundError","CustomModelProviderSlugCollisionError","CustomModelProviderStoredSecretBaseUrlChangeError","InvalidAgentModelError","InvalidCredentialFieldsError","InvalidCustomModelProviderHeaderKeepError","ModelProviderConfigNotFoundError","ModelProviderValidationError","ModelProviderValidationUnavailableError","UnsupportedHarnessProviderError","UnsupportedHarnessThinkingError","UnsupportedModelProviderError","WorkspaceProvidersDisabledError","getHarnessDescriptor","getHarnessToolDescriptor","harnessSupportsProvider","harnessSupportsTool","listEnabledHarnessTools","listHarnessDescriptors","listHarnessProviderModels","listHarnessTools","probeHarnessProviderCredentials","buildModelProviderCatalog","deleteModelProviderConfig","testAndSaveModelProviderConfig","updateModelProviderConfigDefaultModel","getModelProviderCredentialKeys","getModelProviderEntry","isReservedModelProviderId","listSupportedModelProviders","modelProviderCredentialKeysMatch","catalogDefaultAgentResolver","resolveAgentConfig","resolveRuntimeCredentials","createWorkspaceAgentDefaultsResolver","assertWorkspaceProviderConfigurationEnabled"],"mappings":"AAAA,SACEA,+BAA+B,EAC/BC,yCAAyC,EACzCC,+BAA+B,QAC1B,4CAA4C;AACnD,SAAQC,iCAAiC,QAAO,6CAA6C;AAG7F,SACEC,sCAAsC,EACtCC,qCAAqC,EACrCC,iDAAiD,EACjDC,sBAAsB,EACtBC,4BAA4B,EAC5BC,yCAAyC,EACzCC,gCAAgC,EAChCC,4BAA4B,EAC5BC,uCAAuC,EACvCC,+BAA+B,EAC/BC,+BAA+B,EAC/BC,6BAA6B,EAC7BC,+BAA+B,QAC1B,cAAc;AACrB,SACEC,oBAAoB,EACpBC,wBAAwB,EAKxBC,uBAAuB,EACvBC,mBAAmB,EACnBC,uBAAuB,EACvBC,sBAAsB,EACtBC,yBAAyB,EACzBC,gBAAgB,EAChBC,+BAA+B,QAC1B,qBAAqB;AAC5B,SAAQC,yBAAyB,QAAO,8BAA8B;AACtE,SACEC,yBAAyB,EACzBC,8BAA8B,EAC9BC,qCAAqC,QAChC,qCAAqC;AAC5C,SACEC,8BAA8B,EAC9BC,qBAAqB,EACrBC,yBAAyB,EACzBC,2BAA2B,EAC3BC,gCAAgC,QAC3B,6BAA6B;AACpC,SAIEC,2BAA2B,EAE3BC,kBAAkB,QACb,4BAA4B;AACnC,SAEEC,yBAAyB,QACpB,mCAAmC;AAC1C,SAAQC,oCAAoC,QAAO,yCAAyC;AAC5F,SACEC,2CAA2C,QAEtC,iCAAiC"}
@@ -1,3 +1,6 @@
1
- import { type ModelProviderCatalogEntryDto } from '@shipfox/api-agent-dto';
2
- export declare function buildModelProviderCatalog(): readonly ModelProviderCatalogEntryDto[];
1
+ import { type ManagedModelProvider, type ModelProviderCatalogEntryDto, type WorkspaceProvidersPolicy } from '@shipfox/api-agent-dto';
2
+ export declare function buildModelProviderCatalog(options?: {
3
+ managedProvider?: ManagedModelProvider | undefined;
4
+ workspaceProviders?: WorkspaceProvidersPolicy | undefined;
5
+ }): readonly ModelProviderCatalogEntryDto[];
3
6
  //# sourceMappingURL=model-provider-catalog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-provider-catalog.d.ts","sourceRoot":"","sources":["../../src/core/model-provider-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,4BAA4B,EAElC,MAAM,wBAAwB,CAAC;AAKhC,wBAAgB,yBAAyB,IAAI,SAAS,4BAA4B,EAAE,CAanF"}
1
+ {"version":3,"file":"model-provider-catalog.d.ts","sourceRoot":"","sources":["../../src/core/model-provider-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,4BAA4B,EAEjC,KAAK,wBAAwB,EAC9B,MAAM,wBAAwB,CAAC;AAKhC,wBAAgB,yBAAyB,CACvC,OAAO,GAAE;IACP,eAAe,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACnD,kBAAkB,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;CACtD,GACL,SAAS,4BAA4B,EAAE,CAezC"}
@@ -1,7 +1,24 @@
1
1
  import { MODEL_PROVIDER_CATALOG_SEED, modelProviderCatalogEntrySchema } from '@shipfox/api-agent-dto';
2
2
  import { listPiProviderModels } from './harness/pi.js';
3
3
  let cachedCatalog;
4
- export function buildModelProviderCatalog() {
4
+ export function buildModelProviderCatalog(options = {}) {
5
+ const workspaceProviders = options.workspaceProviders ?? 'enabled';
6
+ if (workspaceProviders === 'disabled') {
7
+ if (options.managedProvider === undefined) {
8
+ throw new Error('workspace provider configuration is disabled but no managed provider is registered');
9
+ }
10
+ return Object.freeze([
11
+ toManagedProviderCatalogEntry(options.managedProvider)
12
+ ]);
13
+ }
14
+ const catalog = getCatalog();
15
+ if (options.managedProvider === undefined) return catalog;
16
+ return Object.freeze([
17
+ ...catalog,
18
+ toManagedProviderCatalogEntry(options.managedProvider)
19
+ ]);
20
+ }
21
+ function getCatalog() {
5
22
  if (cachedCatalog) return cachedCatalog;
6
23
  const catalog = modelProviderCatalogEntrySchema.array().parse(MODEL_PROVIDER_CATALOG_SEED.map((entry)=>({
7
24
  ...entry,
@@ -13,6 +30,21 @@ export function buildModelProviderCatalog() {
13
30
  cachedCatalog = deepFreeze(catalog);
14
31
  return cachedCatalog;
15
32
  }
33
+ function toManagedProviderCatalogEntry(managedProvider) {
34
+ return deepFreeze(modelProviderCatalogEntrySchema.parse({
35
+ id: managedProvider.id,
36
+ label: managedProvider.label,
37
+ support_status: 'supported',
38
+ default_model: managedProvider.defaultModel,
39
+ credential_fields: [],
40
+ unsupported_reason: null,
41
+ models: managedProvider.models.map(({ id, label, api })=>({
42
+ id,
43
+ label,
44
+ api
45
+ }))
46
+ }));
47
+ }
16
48
  function deepFreeze(value) {
17
49
  if (Array.isArray(value)) {
18
50
  for (const item of value)deepFreeze(item);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/model-provider-catalog.ts"],"sourcesContent":["import {\n MODEL_PROVIDER_CATALOG_SEED,\n type ModelProviderCatalogEntryDto,\n modelProviderCatalogEntrySchema,\n} from '@shipfox/api-agent-dto';\nimport {listPiProviderModels} from './harness/pi.js';\n\nlet cachedCatalog: readonly ModelProviderCatalogEntryDto[] | undefined;\n\nexport function buildModelProviderCatalog(): readonly ModelProviderCatalogEntryDto[] {\n if (cachedCatalog) return cachedCatalog;\n\n const catalog = modelProviderCatalogEntrySchema.array().parse(\n MODEL_PROVIDER_CATALOG_SEED.map((entry) => ({\n ...entry,\n credential_fields: entry.credential_fields.map((field) => ({...field})),\n models: entry.support_status === 'supported' ? listPiProviderModels(entry.id) : [],\n })),\n );\n\n cachedCatalog = deepFreeze(catalog);\n return cachedCatalog;\n}\n\nfunction deepFreeze<T>(value: T): T {\n if (Array.isArray(value)) {\n for (const item of value) deepFreeze(item);\n } else if (value !== null && typeof value === 'object') {\n for (const item of Object.values(value)) deepFreeze(item);\n }\n\n return Object.freeze(value);\n}\n"],"names":["MODEL_PROVIDER_CATALOG_SEED","modelProviderCatalogEntrySchema","listPiProviderModels","cachedCatalog","buildModelProviderCatalog","catalog","array","parse","map","entry","credential_fields","field","models","support_status","id","deepFreeze","value","Array","isArray","item","Object","values","freeze"],"mappings":"AAAA,SACEA,2BAA2B,EAE3BC,+BAA+B,QAC1B,yBAAyB;AAChC,SAAQC,oBAAoB,QAAO,kBAAkB;AAErD,IAAIC;AAEJ,OAAO,SAASC;IACd,IAAID,eAAe,OAAOA;IAE1B,MAAME,UAAUJ,gCAAgCK,KAAK,GAAGC,KAAK,CAC3DP,4BAA4BQ,GAAG,CAAC,CAACC,QAAW,CAAA;YAC1C,GAAGA,KAAK;YACRC,mBAAmBD,MAAMC,iBAAiB,CAACF,GAAG,CAAC,CAACG,QAAW,CAAA;oBAAC,GAAGA,KAAK;gBAAA,CAAA;YACpEC,QAAQH,MAAMI,cAAc,KAAK,cAAcX,qBAAqBO,MAAMK,EAAE,IAAI,EAAE;QACpF,CAAA;IAGFX,gBAAgBY,WAAWV;IAC3B,OAAOF;AACT;AAEA,SAASY,WAAcC,KAAQ;IAC7B,IAAIC,MAAMC,OAAO,CAACF,QAAQ;QACxB,KAAK,MAAMG,QAAQH,MAAOD,WAAWI;IACvC,OAAO,IAAIH,UAAU,QAAQ,OAAOA,UAAU,UAAU;QACtD,KAAK,MAAMG,QAAQC,OAAOC,MAAM,CAACL,OAAQD,WAAWI;IACtD;IAEA,OAAOC,OAAOE,MAAM,CAACN;AACvB"}
1
+ {"version":3,"sources":["../../src/core/model-provider-catalog.ts"],"sourcesContent":["import {\n type ManagedModelProvider,\n MODEL_PROVIDER_CATALOG_SEED,\n type ModelProviderCatalogEntryDto,\n modelProviderCatalogEntrySchema,\n type WorkspaceProvidersPolicy,\n} from '@shipfox/api-agent-dto';\nimport {listPiProviderModels} from './harness/pi.js';\n\nlet cachedCatalog: readonly ModelProviderCatalogEntryDto[] | undefined;\n\nexport function buildModelProviderCatalog(\n options: {\n managedProvider?: ManagedModelProvider | undefined;\n workspaceProviders?: WorkspaceProvidersPolicy | undefined;\n } = {},\n): readonly ModelProviderCatalogEntryDto[] {\n const workspaceProviders = options.workspaceProviders ?? 'enabled';\n if (workspaceProviders === 'disabled') {\n if (options.managedProvider === undefined) {\n throw new Error(\n 'workspace provider configuration is disabled but no managed provider is registered',\n );\n }\n return Object.freeze([toManagedProviderCatalogEntry(options.managedProvider)]);\n }\n\n const catalog = getCatalog();\n if (options.managedProvider === undefined) return catalog;\n\n return Object.freeze([...catalog, toManagedProviderCatalogEntry(options.managedProvider)]);\n}\n\nfunction getCatalog(): readonly ModelProviderCatalogEntryDto[] {\n if (cachedCatalog) return cachedCatalog;\n\n const catalog = modelProviderCatalogEntrySchema.array().parse(\n MODEL_PROVIDER_CATALOG_SEED.map((entry) => ({\n ...entry,\n credential_fields: entry.credential_fields.map((field) => ({...field})),\n models: entry.support_status === 'supported' ? listPiProviderModels(entry.id) : [],\n })),\n );\n\n cachedCatalog = deepFreeze(catalog);\n return cachedCatalog;\n}\n\nfunction toManagedProviderCatalogEntry(\n managedProvider: ManagedModelProvider,\n): ModelProviderCatalogEntryDto {\n return deepFreeze(\n modelProviderCatalogEntrySchema.parse({\n id: managedProvider.id,\n label: managedProvider.label,\n support_status: 'supported',\n default_model: managedProvider.defaultModel,\n credential_fields: [],\n unsupported_reason: null,\n models: managedProvider.models.map(({id, label, api}) => ({id, label, api})),\n }),\n );\n}\n\nfunction deepFreeze<T>(value: T): T {\n if (Array.isArray(value)) {\n for (const item of value) deepFreeze(item);\n } else if (value !== null && typeof value === 'object') {\n for (const item of Object.values(value)) deepFreeze(item);\n }\n\n return Object.freeze(value);\n}\n"],"names":["MODEL_PROVIDER_CATALOG_SEED","modelProviderCatalogEntrySchema","listPiProviderModels","cachedCatalog","buildModelProviderCatalog","options","workspaceProviders","managedProvider","undefined","Error","Object","freeze","toManagedProviderCatalogEntry","catalog","getCatalog","array","parse","map","entry","credential_fields","field","models","support_status","id","deepFreeze","label","default_model","defaultModel","unsupported_reason","api","value","Array","isArray","item","values"],"mappings":"AAAA,SAEEA,2BAA2B,EAE3BC,+BAA+B,QAE1B,yBAAyB;AAChC,SAAQC,oBAAoB,QAAO,kBAAkB;AAErD,IAAIC;AAEJ,OAAO,SAASC,0BACdC,UAGI,CAAC,CAAC;IAEN,MAAMC,qBAAqBD,QAAQC,kBAAkB,IAAI;IACzD,IAAIA,uBAAuB,YAAY;QACrC,IAAID,QAAQE,eAAe,KAAKC,WAAW;YACzC,MAAM,IAAIC,MACR;QAEJ;QACA,OAAOC,OAAOC,MAAM,CAAC;YAACC,8BAA8BP,QAAQE,eAAe;SAAE;IAC/E;IAEA,MAAMM,UAAUC;IAChB,IAAIT,QAAQE,eAAe,KAAKC,WAAW,OAAOK;IAElD,OAAOH,OAAOC,MAAM,CAAC;WAAIE;QAASD,8BAA8BP,QAAQE,eAAe;KAAE;AAC3F;AAEA,SAASO;IACP,IAAIX,eAAe,OAAOA;IAE1B,MAAMU,UAAUZ,gCAAgCc,KAAK,GAAGC,KAAK,CAC3DhB,4BAA4BiB,GAAG,CAAC,CAACC,QAAW,CAAA;YAC1C,GAAGA,KAAK;YACRC,mBAAmBD,MAAMC,iBAAiB,CAACF,GAAG,CAAC,CAACG,QAAW,CAAA;oBAAC,GAAGA,KAAK;gBAAA,CAAA;YACpEC,QAAQH,MAAMI,cAAc,KAAK,cAAcpB,qBAAqBgB,MAAMK,EAAE,IAAI,EAAE;QACpF,CAAA;IAGFpB,gBAAgBqB,WAAWX;IAC3B,OAAOV;AACT;AAEA,SAASS,8BACPL,eAAqC;IAErC,OAAOiB,WACLvB,gCAAgCe,KAAK,CAAC;QACpCO,IAAIhB,gBAAgBgB,EAAE;QACtBE,OAAOlB,gBAAgBkB,KAAK;QAC5BH,gBAAgB;QAChBI,eAAenB,gBAAgBoB,YAAY;QAC3CR,mBAAmB,EAAE;QACrBS,oBAAoB;QACpBP,QAAQd,gBAAgBc,MAAM,CAACJ,GAAG,CAAC,CAAC,EAACM,EAAE,EAAEE,KAAK,EAAEI,GAAG,EAAC,GAAM,CAAA;gBAACN;gBAAIE;gBAAOI;YAAG,CAAA;IAC3E;AAEJ;AAEA,SAASL,WAAcM,KAAQ;IAC7B,IAAIC,MAAMC,OAAO,CAACF,QAAQ;QACxB,KAAK,MAAMG,QAAQH,MAAON,WAAWS;IACvC,OAAO,IAAIH,UAAU,QAAQ,OAAOA,UAAU,UAAU;QACtD,KAAK,MAAMG,QAAQvB,OAAOwB,MAAM,CAACJ,OAAQN,WAAWS;IACtD;IAEA,OAAOvB,OAAOC,MAAM,CAACmB;AACvB"}
@@ -1,4 +1,4 @@
1
- import { type AgentThinking, type CustomAgentModelDto, type Harness, type ModelProviderRef, type SupportedModelProviderId } from '@shipfox/api-agent-dto';
1
+ import { type AgentThinking, type CustomAgentModelDto, type Harness, type ManagedModelProvider, type ModelProviderRef, type WorkspaceProvidersPolicy } from '@shipfox/api-agent-dto';
2
2
  export interface ContextualAgentConfig {
3
3
  readonly harness?: Harness | undefined;
4
4
  readonly provider?: string | undefined;
@@ -17,9 +17,11 @@ export interface AgentConfigResolutionContext {
17
17
  readonly workspaceDefaultHarnessId?: Harness | null | undefined;
18
18
  readonly workspaceDefaultProviderId?: ModelProviderRef | null | undefined;
19
19
  readonly workspaceProviderConfigs?: ReadonlyMap<ModelProviderRef, WorkspaceProviderDefaults>;
20
- readonly instanceDefaultProvider?: SupportedModelProviderId | undefined;
20
+ readonly instanceDefaultProvider?: ModelProviderRef | undefined;
21
21
  readonly instanceDefaultModel?: string | undefined;
22
22
  readonly instanceDefaultThinking?: AgentThinking | undefined;
23
+ readonly managedProvider?: ManagedModelProvider | undefined;
24
+ readonly workspaceProviders?: WorkspaceProvidersPolicy | undefined;
23
25
  }
24
26
  interface WorkspaceProviderDefaults {
25
27
  readonly kind?: 'builtin' | 'custom' | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-agent-config.d.ts","sourceRoot":"","sources":["../../src/core/resolve-agent-config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,mBAAmB,EAGxB,KAAK,OAAO,EACZ,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC9B,MAAM,wBAAwB,CAAC;AAUhC,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,qBAAqB,KAAK,mBAAmB,CAAC;AAEzF,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,0BAA0B,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1E,QAAQ,CAAC,wBAAwB,CAAC,EAAE,WAAW,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,CAAC;IAC7F,QAAQ,CAAC,uBAAuB,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACxE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,uBAAuB,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC9D;AAED,UAAU,yBAAyB;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,mBAAmB,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;CACrE;AAID,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,qBAAqB,EAC3B,GAAG,GAAE,4BAAiC,GACrC,mBAAmB,CAcrB;AAED,eAAO,MAAM,2BAA2B,EAAE,qBAChB,CAAC"}
1
+ {"version":3,"file":"resolve-agent-config.d.ts","sourceRoot":"","sources":["../../src/core/resolve-agent-config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,mBAAmB,EAGxB,KAAK,OAAO,EAEZ,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC9B,MAAM,wBAAwB,CAAC;AAWhC,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,qBAAqB,KAAK,mBAAmB,CAAC;AAEzF,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,0BAA0B,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1E,QAAQ,CAAC,wBAAwB,CAAC,EAAE,WAAW,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,CAAC;IAC7F,QAAQ,CAAC,uBAAuB,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,uBAAuB,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC7D,QAAQ,CAAC,eAAe,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC5D,QAAQ,CAAC,kBAAkB,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;CACpE;AAED,UAAU,yBAAyB;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,mBAAmB,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;CACrE;AAaD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,qBAAqB,EAC3B,GAAG,GAAE,4BAAiC,GACrC,mBAAmB,CAcrB;AAED,eAAO,MAAM,2BAA2B,EAAE,qBAChB,CAAC"}