@shipfox/api-agent 11.0.0 → 12.2.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.
@@ -1,2 +1,2 @@
1
1
  $ shipfox-swc
2
- Successfully compiled: 52 files with swc (536.06ms)
2
+ Successfully compiled: 52 files with swc (599.65ms)
package/CHANGELOG.md CHANGED
@@ -1,5 +1,41 @@
1
1
  # @shipfox/api-agent
2
2
 
3
+ ## 12.2.0
4
+
5
+ ### Patch Changes
6
+
7
+ - @shipfox/node-opentelemetry@0.6.4
8
+ - @shipfox/api-agent-dto@12.2.0
9
+ - @shipfox/node-fastify@0.4.2
10
+ - @shipfox/node-module@1.0.6
11
+ - @shipfox/api-auth-context@12.2.0
12
+
13
+ ## 12.0.0
14
+
15
+ ### Minor Changes
16
+
17
+ - ee2ce67: Accept a `${{ }}` interpolation in an agent step's `thinking` field. The schema
18
+ still offers the per-harness enum for editor completion, and the dispatcher
19
+ checks the resolved value against the harness levels. An unsupported
20
+ resolved level fails the step.
21
+
22
+ ### Patch Changes
23
+
24
+ - 28daafe: Validate literal agent model and provider values during workflow authoring.
25
+ - Updated dependencies [ee2ce67]
26
+ - Updated dependencies [f78740d]
27
+ - Updated dependencies [28daafe]
28
+ - Updated dependencies [f13e8bb]
29
+ - @shipfox/api-agent-dto@12.0.0
30
+ - @shipfox/inter-module@0.2.3
31
+ - @shipfox/node-fastify@0.4.1
32
+ - @shipfox/node-module@1.0.5
33
+ - @shipfox/redact@0.2.6
34
+ - @shipfox/node-postgres@0.5.0
35
+ - @shipfox/api-auth-context@12.0.0
36
+ - @shipfox/api-secrets-dto@12.0.0
37
+ - @shipfox/node-drizzle@0.3.5
38
+
3
39
  ## 11.0.0
4
40
 
5
41
  ### Patch Changes
package/dist/config.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export declare const config: Readonly<{
2
- AGENT_DEFAULT_PROVIDER: "anthropic" | "ant-ling" | "azure-openai-responses" | "openai" | "deepseek" | "nvidia" | "google" | "mistral" | "groq" | "cerebras" | "cloudflare-ai-gateway" | "cloudflare-workers-ai" | "xai" | "openrouter" | "vercel-ai-gateway" | "zai" | "zai-coding-cn" | "opencode" | "opencode-go" | "huggingface" | "fireworks" | "together" | "kimi-coding" | "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;
2
+ AGENT_DEFAULT_PROVIDER: "ant-ling" | "anthropic" | "azure-openai-responses" | "cerebras" | "cloudflare-ai-gateway" | "cloudflare-workers-ai" | "deepseek" | "fireworks" | "google" | "groq" | "huggingface" | "kimi-coding" | "minimax" | "minimax-cn" | "mistral" | "moonshotai" | "moonshotai-cn" | "nvidia" | "openai" | "opencode" | "opencode-go" | "openrouter" | "qwen-token-plan" | "qwen-token-plan-cn" | "together" | "vercel-ai-gateway" | "xai" | "xiaomi" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-sgp" | "zai" | "zai-coding-cn" | undefined;
3
3
  AGENT_DEFAULT_PROVIDER_MODEL: string | undefined;
4
- AGENT_DEFAULT_PROVIDER_THINKING: "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max" | undefined;
4
+ AGENT_DEFAULT_PROVIDER_THINKING: "high" | "low" | "max" | "medium" | "minimal" | "off" | "xhigh" | undefined;
5
5
  AGENT_DEFAULT_PROVIDER_API_KEY: string | undefined;
6
6
  AGENT_PROVIDER_VALIDATION_TIMEOUT_MS: number;
7
7
  AGENT_CUSTOM_PROVIDER_ALLOW_PRIVATE_NETWORKS: boolean;
@@ -21,9 +21,9 @@ export declare class UnsupportedHarnessProviderError extends Error {
21
21
  }
22
22
  export declare class UnsupportedHarnessThinkingError extends Error {
23
23
  readonly harness: Harness;
24
- readonly thinking: AgentThinking;
24
+ readonly thinking: string;
25
25
  readonly supportedLevels: readonly AgentThinking[];
26
- constructor(harness: Harness, thinking: AgentThinking, supportedLevels: readonly AgentThinking[]);
26
+ constructor(harness: Harness, thinking: string, supportedLevels: readonly AgentThinking[]);
27
27
  }
28
28
  export declare class InvalidCredentialFieldsError extends Error {
29
29
  readonly providerId: SupportedModelProviderId;
@@ -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,aAAa;aACvB,eAAe,EAAE,SAAS,aAAa,EAAE;gBAFzC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,aAAa,EACvB,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;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"}
@@ -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: AgentThinking,\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 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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"}
@@ -3,7 +3,8 @@ export interface ContextualAgentConfig {
3
3
  readonly harness?: Harness | undefined;
4
4
  readonly provider?: string | undefined;
5
5
  readonly model?: string | undefined;
6
- readonly thinking?: AgentThinking | undefined;
6
+ /** A resolved template can carry any string. `resolveThinking` validates it. */
7
+ readonly thinking?: string | undefined;
7
8
  }
8
9
  export interface ResolvedAgentConfig {
9
10
  readonly harness: Harness;
@@ -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,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC/C;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,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"}
@@ -125,10 +125,11 @@ function resolveThinking(params) {
125
125
  const thinkingSchema = agentThinkingByHarness[params.harness];
126
126
  const descriptor = getHarnessDescriptor(params.harness);
127
127
  if (params.step.thinking !== undefined) {
128
- if (!thinkingSchema.safeParse(params.step.thinking).success) {
128
+ const parsed = thinkingSchema.safeParse(params.step.thinking);
129
+ if (!parsed.success) {
129
130
  throw new UnsupportedHarnessThinkingError(params.harness, params.step.thinking, descriptor.thinkingLevels);
130
131
  }
131
- return params.step.thinking;
132
+ return parsed.data;
132
133
  }
133
134
  const candidates = [
134
135
  params.workspaceProviderConfig?.defaultThinking,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/resolve-agent-config.ts"],"sourcesContent":["import {\n type AgentThinking,\n agentThinkingByHarness,\n type CustomAgentModelDto,\n DEFAULT_HARNESS,\n getHarnessDescriptor,\n type Harness,\n type ModelProviderRef,\n type SupportedModelProviderId,\n} from '@shipfox/api-agent-dto';\nimport {\n InvalidAgentModelError,\n UnsupportedHarnessProviderError,\n UnsupportedHarnessThinkingError,\n UnsupportedModelProviderError,\n} from './errors.js';\nimport {listHarnessProviderModels} from './harness/index.js';\nimport {getModelProviderEntry} from './model-provider-policy.js';\n\nexport interface ContextualAgentConfig {\n readonly harness?: Harness | undefined;\n readonly provider?: string | undefined;\n readonly model?: string | undefined;\n readonly thinking?: AgentThinking | undefined;\n}\n\nexport interface ResolvedAgentConfig {\n readonly harness: Harness;\n readonly provider: ModelProviderRef;\n readonly model: string;\n readonly thinking: AgentThinking;\n}\n\nexport type AgentDefaultsResolver = (step: ContextualAgentConfig) => ResolvedAgentConfig;\n\nexport interface AgentConfigResolutionContext {\n readonly workspaceDefaultHarnessId?: Harness | null | undefined;\n readonly workspaceDefaultProviderId?: ModelProviderRef | null | undefined;\n readonly workspaceProviderConfigs?: ReadonlyMap<ModelProviderRef, WorkspaceProviderDefaults>;\n readonly instanceDefaultProvider?: SupportedModelProviderId | undefined;\n readonly instanceDefaultModel?: string | undefined;\n readonly instanceDefaultThinking?: AgentThinking | undefined;\n}\n\ninterface WorkspaceProviderDefaults {\n readonly kind?: 'builtin' | 'custom' | undefined;\n readonly defaultModel: string | null;\n readonly defaultThinking: AgentThinking;\n readonly models?: readonly CustomAgentModelDto[] | null | undefined;\n}\n\ntype ModelCandidateResolver = () => string | null | undefined;\n\nexport function resolveAgentConfig(\n step: ContextualAgentConfig,\n ctx: AgentConfigResolutionContext = {},\n): ResolvedAgentConfig {\n const harness = step.harness ?? ctx.workspaceDefaultHarnessId ?? DEFAULT_HARNESS;\n const provider = resolveProvider(step, ctx, harness);\n const workspaceProviderConfig = ctx.workspaceProviderConfigs?.get(provider);\n const model = resolveModel({\n step,\n ctx,\n harness,\n provider,\n workspaceProviderConfig,\n });\n const thinking = resolveThinking({step, ctx, harness, provider, workspaceProviderConfig});\n\n return {harness, provider, model, thinking};\n}\n\nexport const catalogDefaultAgentResolver: AgentDefaultsResolver = (step) =>\n resolveAgentConfig(step);\n\nfunction resolveProvider(\n step: ContextualAgentConfig,\n ctx: AgentConfigResolutionContext,\n harness: Harness,\n): ModelProviderRef {\n const descriptor = getHarnessDescriptor(harness);\n if (step.provider !== undefined) {\n const provider = resolveSupportedProvider(step.provider, ctx);\n if (!isHarnessCompatible(harness, provider, ctx.workspaceProviderConfigs?.get(provider))) {\n throw new UnsupportedHarnessProviderError(\n harness,\n step.provider,\n descriptor.supportedProviderIds,\n );\n }\n return provider;\n }\n\n const candidates = [\n ctx.workspaceDefaultProviderId,\n ctx.instanceDefaultProvider,\n descriptor.defaultProviderId,\n ];\n for (const candidate of candidates) {\n if (candidate === undefined || candidate === null) continue;\n\n const workspaceProviderConfig = ctx.workspaceProviderConfigs?.get(candidate);\n if (!isHarnessCompatible(harness, candidate, workspaceProviderConfig)) continue;\n\n return resolveSupportedProvider(candidate, ctx);\n }\n\n return descriptor.defaultProviderId;\n}\n\nfunction resolveSupportedProvider(\n provider: string,\n ctx: AgentConfigResolutionContext,\n): ModelProviderRef {\n const workspaceProviderConfig = ctx.workspaceProviderConfigs?.get(provider);\n if (workspaceProviderConfig?.kind === 'custom') return provider;\n\n const entry = getModelProviderEntry(provider);\n if (entry === undefined || entry.support_status !== 'supported') {\n throw new UnsupportedModelProviderError(provider);\n }\n return provider as SupportedModelProviderId;\n}\n\nfunction resolveModel(params: {\n step: ContextualAgentConfig;\n ctx: AgentConfigResolutionContext;\n harness: Harness;\n provider: ModelProviderRef;\n workspaceProviderConfig: WorkspaceProviderDefaults | undefined;\n}): string {\n if (params.step.model !== undefined) {\n validateModel(\n params.harness,\n params.provider,\n params.step.model,\n params.workspaceProviderConfig,\n );\n return params.step.model;\n }\n\n const candidates: ModelCandidateResolver[] = [() => params.workspaceProviderConfig?.defaultModel];\n if (params.workspaceProviderConfig?.kind === 'custom') {\n candidates.push(() => customDefaultModel(params.workspaceProviderConfig));\n } else {\n candidates.push(\n () => instanceDefaultModel(params.provider, params.ctx),\n () => catalogDefaultModel(params.harness, params.provider),\n );\n }\n\n for (const resolveCandidate of candidates) {\n const candidate = resolveCandidate();\n if (candidate === undefined || candidate === null) continue;\n if (\n modelIsAvailable(params.harness, params.provider, candidate, params.workspaceProviderConfig)\n ) {\n return candidate;\n }\n }\n\n throw new InvalidAgentModelError(params.harness, params.provider, '');\n}\n\nfunction catalogDefaultModel(harness: Harness, provider: ModelProviderRef): string {\n const catalogModels = listProviderModels(harness, provider);\n const entry = getModelProviderEntry(provider);\n if (entry === undefined || entry.support_status !== 'supported') {\n throw new UnsupportedModelProviderError(provider);\n }\n if (\n entry.default_model !== null &&\n catalogModels.some((candidate) => candidate.id === entry.default_model)\n ) {\n return entry.default_model;\n }\n\n const firstModel = catalogModels[0];\n if (firstModel === undefined) throw new InvalidAgentModelError(harness, provider, '');\n return firstModel.id;\n}\n\nfunction instanceDefaultModel(\n provider: ModelProviderRef,\n ctx: AgentConfigResolutionContext,\n): string | undefined {\n return provider === ctx.instanceDefaultProvider ? ctx.instanceDefaultModel : undefined;\n}\n\nfunction instanceDefaultThinking(\n provider: ModelProviderRef,\n ctx: AgentConfigResolutionContext,\n): AgentThinking | undefined {\n return provider === ctx.instanceDefaultProvider ? ctx.instanceDefaultThinking : undefined;\n}\n\nfunction customDefaultModel(\n workspaceProviderConfig: WorkspaceProviderDefaults | undefined,\n): string | undefined {\n if (workspaceProviderConfig?.kind !== 'custom') return undefined;\n return workspaceProviderConfig.models?.[0]?.id;\n}\n\nfunction validateModel(\n harness: Harness,\n provider: ModelProviderRef,\n model: string,\n workspaceProviderConfig: WorkspaceProviderDefaults | undefined,\n): void {\n if (modelIsAvailable(harness, provider, model, workspaceProviderConfig)) return;\n throw new InvalidAgentModelError(harness, provider, model);\n}\n\nfunction modelIsAvailable(\n harness: Harness,\n provider: ModelProviderRef,\n model: string,\n workspaceProviderConfig: WorkspaceProviderDefaults | undefined,\n): boolean {\n if (workspaceProviderConfig?.kind === 'custom') {\n return workspaceProviderConfig.models?.some((candidate) => candidate.id === model) ?? false;\n }\n\n return listProviderModels(harness, provider).some((candidate) => candidate.id === model);\n}\n\nfunction listProviderModels(harness: Harness, provider: ModelProviderRef): readonly {id: string}[] {\n return listHarnessProviderModels(harness, provider);\n}\n\nfunction isHarnessCompatible(\n harness: Harness,\n provider: ModelProviderRef,\n workspaceProviderConfig: WorkspaceProviderDefaults | undefined,\n): boolean {\n if (workspaceProviderConfig?.kind === 'custom') return harness === 'pi';\n\n return getHarnessDescriptor(harness).supportedProviderIds.includes(provider);\n}\n\nfunction resolveThinking(params: {\n step: ContextualAgentConfig;\n ctx: AgentConfigResolutionContext;\n harness: Harness;\n provider: ModelProviderRef;\n workspaceProviderConfig: WorkspaceProviderDefaults | undefined;\n}): AgentThinking {\n const thinkingSchema = agentThinkingByHarness[params.harness];\n const descriptor = getHarnessDescriptor(params.harness);\n\n if (params.step.thinking !== undefined) {\n if (!thinkingSchema.safeParse(params.step.thinking).success) {\n throw new UnsupportedHarnessThinkingError(\n params.harness,\n params.step.thinking,\n descriptor.thinkingLevels,\n );\n }\n return params.step.thinking;\n }\n\n const candidates = [\n params.workspaceProviderConfig?.defaultThinking,\n instanceDefaultThinking(params.provider, params.ctx),\n descriptor.defaultThinking,\n ];\n for (const candidate of candidates) {\n if (candidate !== undefined && thinkingSchema.safeParse(candidate).success) return candidate;\n }\n\n return descriptor.defaultThinking;\n}\n"],"names":["agentThinkingByHarness","DEFAULT_HARNESS","getHarnessDescriptor","InvalidAgentModelError","UnsupportedHarnessProviderError","UnsupportedHarnessThinkingError","UnsupportedModelProviderError","listHarnessProviderModels","getModelProviderEntry","resolveAgentConfig","step","ctx","harness","workspaceDefaultHarnessId","provider","resolveProvider","workspaceProviderConfig","workspaceProviderConfigs","get","model","resolveModel","thinking","resolveThinking","catalogDefaultAgentResolver","descriptor","undefined","resolveSupportedProvider","isHarnessCompatible","supportedProviderIds","candidates","workspaceDefaultProviderId","instanceDefaultProvider","defaultProviderId","candidate","kind","entry","support_status","params","validateModel","defaultModel","push","customDefaultModel","instanceDefaultModel","catalogDefaultModel","resolveCandidate","modelIsAvailable","catalogModels","listProviderModels","default_model","some","id","firstModel","instanceDefaultThinking","models","includes","thinkingSchema","safeParse","success","thinkingLevels","defaultThinking"],"mappings":"AAAA,SAEEA,sBAAsB,EAEtBC,eAAe,EACfC,oBAAoB,QAIf,yBAAyB;AAChC,SACEC,sBAAsB,EACtBC,+BAA+B,EAC/BC,+BAA+B,EAC/BC,6BAA6B,QACxB,cAAc;AACrB,SAAQC,yBAAyB,QAAO,qBAAqB;AAC7D,SAAQC,qBAAqB,QAAO,6BAA6B;AAoCjE,OAAO,SAASC,mBACdC,IAA2B,EAC3BC,MAAoC,CAAC,CAAC;IAEtC,MAAMC,UAAUF,KAAKE,OAAO,IAAID,IAAIE,yBAAyB,IAAIZ;IACjE,MAAMa,WAAWC,gBAAgBL,MAAMC,KAAKC;IAC5C,MAAMI,0BAA0BL,IAAIM,wBAAwB,EAAEC,IAAIJ;IAClE,MAAMK,QAAQC,aAAa;QACzBV;QACAC;QACAC;QACAE;QACAE;IACF;IACA,MAAMK,WAAWC,gBAAgB;QAACZ;QAAMC;QAAKC;QAASE;QAAUE;IAAuB;IAEvF,OAAO;QAACJ;QAASE;QAAUK;QAAOE;IAAQ;AAC5C;AAEA,OAAO,MAAME,8BAAqD,CAACb,OACjED,mBAAmBC,MAAM;AAE3B,SAASK,gBACPL,IAA2B,EAC3BC,GAAiC,EACjCC,OAAgB;IAEhB,MAAMY,aAAatB,qBAAqBU;IACxC,IAAIF,KAAKI,QAAQ,KAAKW,WAAW;QAC/B,MAAMX,WAAWY,yBAAyBhB,KAAKI,QAAQ,EAAEH;QACzD,IAAI,CAACgB,oBAAoBf,SAASE,UAAUH,IAAIM,wBAAwB,EAAEC,IAAIJ,YAAY;YACxF,MAAM,IAAIV,gCACRQ,SACAF,KAAKI,QAAQ,EACbU,WAAWI,oBAAoB;QAEnC;QACA,OAAOd;IACT;IAEA,MAAMe,aAAa;QACjBlB,IAAImB,0BAA0B;QAC9BnB,IAAIoB,uBAAuB;QAC3BP,WAAWQ,iBAAiB;KAC7B;IACD,KAAK,MAAMC,aAAaJ,WAAY;QAClC,IAAII,cAAcR,aAAaQ,cAAc,MAAM;QAEnD,MAAMjB,0BAA0BL,IAAIM,wBAAwB,EAAEC,IAAIe;QAClE,IAAI,CAACN,oBAAoBf,SAASqB,WAAWjB,0BAA0B;QAEvE,OAAOU,yBAAyBO,WAAWtB;IAC7C;IAEA,OAAOa,WAAWQ,iBAAiB;AACrC;AAEA,SAASN,yBACPZ,QAAgB,EAChBH,GAAiC;IAEjC,MAAMK,0BAA0BL,IAAIM,wBAAwB,EAAEC,IAAIJ;IAClE,IAAIE,yBAAyBkB,SAAS,UAAU,OAAOpB;IAEvD,MAAMqB,QAAQ3B,sBAAsBM;IACpC,IAAIqB,UAAUV,aAAaU,MAAMC,cAAc,KAAK,aAAa;QAC/D,MAAM,IAAI9B,8BAA8BQ;IAC1C;IACA,OAAOA;AACT;AAEA,SAASM,aAAaiB,MAMrB;IACC,IAAIA,OAAO3B,IAAI,CAACS,KAAK,KAAKM,WAAW;QACnCa,cACED,OAAOzB,OAAO,EACdyB,OAAOvB,QAAQ,EACfuB,OAAO3B,IAAI,CAACS,KAAK,EACjBkB,OAAOrB,uBAAuB;QAEhC,OAAOqB,OAAO3B,IAAI,CAACS,KAAK;IAC1B;IAEA,MAAMU,aAAuC;QAAC,IAAMQ,OAAOrB,uBAAuB,EAAEuB;KAAa;IACjG,IAAIF,OAAOrB,uBAAuB,EAAEkB,SAAS,UAAU;QACrDL,WAAWW,IAAI,CAAC,IAAMC,mBAAmBJ,OAAOrB,uBAAuB;IACzE,OAAO;QACLa,WAAWW,IAAI,CACb,IAAME,qBAAqBL,OAAOvB,QAAQ,EAAEuB,OAAO1B,GAAG,GACtD,IAAMgC,oBAAoBN,OAAOzB,OAAO,EAAEyB,OAAOvB,QAAQ;IAE7D;IAEA,KAAK,MAAM8B,oBAAoBf,WAAY;QACzC,MAAMI,YAAYW;QAClB,IAAIX,cAAcR,aAAaQ,cAAc,MAAM;QACnD,IACEY,iBAAiBR,OAAOzB,OAAO,EAAEyB,OAAOvB,QAAQ,EAAEmB,WAAWI,OAAOrB,uBAAuB,GAC3F;YACA,OAAOiB;QACT;IACF;IAEA,MAAM,IAAI9B,uBAAuBkC,OAAOzB,OAAO,EAAEyB,OAAOvB,QAAQ,EAAE;AACpE;AAEA,SAAS6B,oBAAoB/B,OAAgB,EAAEE,QAA0B;IACvE,MAAMgC,gBAAgBC,mBAAmBnC,SAASE;IAClD,MAAMqB,QAAQ3B,sBAAsBM;IACpC,IAAIqB,UAAUV,aAAaU,MAAMC,cAAc,KAAK,aAAa;QAC/D,MAAM,IAAI9B,8BAA8BQ;IAC1C;IACA,IACEqB,MAAMa,aAAa,KAAK,QACxBF,cAAcG,IAAI,CAAC,CAAChB,YAAcA,UAAUiB,EAAE,KAAKf,MAAMa,aAAa,GACtE;QACA,OAAOb,MAAMa,aAAa;IAC5B;IAEA,MAAMG,aAAaL,aAAa,CAAC,EAAE;IACnC,IAAIK,eAAe1B,WAAW,MAAM,IAAItB,uBAAuBS,SAASE,UAAU;IAClF,OAAOqC,WAAWD,EAAE;AACtB;AAEA,SAASR,qBACP5B,QAA0B,EAC1BH,GAAiC;IAEjC,OAAOG,aAAaH,IAAIoB,uBAAuB,GAAGpB,IAAI+B,oBAAoB,GAAGjB;AAC/E;AAEA,SAAS2B,wBACPtC,QAA0B,EAC1BH,GAAiC;IAEjC,OAAOG,aAAaH,IAAIoB,uBAAuB,GAAGpB,IAAIyC,uBAAuB,GAAG3B;AAClF;AAEA,SAASgB,mBACPzB,uBAA8D;IAE9D,IAAIA,yBAAyBkB,SAAS,UAAU,OAAOT;IACvD,OAAOT,wBAAwBqC,MAAM,EAAE,CAAC,EAAE,EAAEH;AAC9C;AAEA,SAASZ,cACP1B,OAAgB,EAChBE,QAA0B,EAC1BK,KAAa,EACbH,uBAA8D;IAE9D,IAAI6B,iBAAiBjC,SAASE,UAAUK,OAAOH,0BAA0B;IACzE,MAAM,IAAIb,uBAAuBS,SAASE,UAAUK;AACtD;AAEA,SAAS0B,iBACPjC,OAAgB,EAChBE,QAA0B,EAC1BK,KAAa,EACbH,uBAA8D;IAE9D,IAAIA,yBAAyBkB,SAAS,UAAU;QAC9C,OAAOlB,wBAAwBqC,MAAM,EAAEJ,KAAK,CAAChB,YAAcA,UAAUiB,EAAE,KAAK/B,UAAU;IACxF;IAEA,OAAO4B,mBAAmBnC,SAASE,UAAUmC,IAAI,CAAC,CAAChB,YAAcA,UAAUiB,EAAE,KAAK/B;AACpF;AAEA,SAAS4B,mBAAmBnC,OAAgB,EAAEE,QAA0B;IACtE,OAAOP,0BAA0BK,SAASE;AAC5C;AAEA,SAASa,oBACPf,OAAgB,EAChBE,QAA0B,EAC1BE,uBAA8D;IAE9D,IAAIA,yBAAyBkB,SAAS,UAAU,OAAOtB,YAAY;IAEnE,OAAOV,qBAAqBU,SAASgB,oBAAoB,CAAC0B,QAAQ,CAACxC;AACrE;AAEA,SAASQ,gBAAgBe,MAMxB;IACC,MAAMkB,iBAAiBvD,sBAAsB,CAACqC,OAAOzB,OAAO,CAAC;IAC7D,MAAMY,aAAatB,qBAAqBmC,OAAOzB,OAAO;IAEtD,IAAIyB,OAAO3B,IAAI,CAACW,QAAQ,KAAKI,WAAW;QACtC,IAAI,CAAC8B,eAAeC,SAAS,CAACnB,OAAO3B,IAAI,CAACW,QAAQ,EAAEoC,OAAO,EAAE;YAC3D,MAAM,IAAIpD,gCACRgC,OAAOzB,OAAO,EACdyB,OAAO3B,IAAI,CAACW,QAAQ,EACpBG,WAAWkC,cAAc;QAE7B;QACA,OAAOrB,OAAO3B,IAAI,CAACW,QAAQ;IAC7B;IAEA,MAAMQ,aAAa;QACjBQ,OAAOrB,uBAAuB,EAAE2C;QAChCP,wBAAwBf,OAAOvB,QAAQ,EAAEuB,OAAO1B,GAAG;QACnDa,WAAWmC,eAAe;KAC3B;IACD,KAAK,MAAM1B,aAAaJ,WAAY;QAClC,IAAII,cAAcR,aAAa8B,eAAeC,SAAS,CAACvB,WAAWwB,OAAO,EAAE,OAAOxB;IACrF;IAEA,OAAOT,WAAWmC,eAAe;AACnC"}
1
+ {"version":3,"sources":["../../src/core/resolve-agent-config.ts"],"sourcesContent":["import {\n type AgentThinking,\n agentThinkingByHarness,\n type CustomAgentModelDto,\n DEFAULT_HARNESS,\n getHarnessDescriptor,\n type Harness,\n type ModelProviderRef,\n type SupportedModelProviderId,\n} from '@shipfox/api-agent-dto';\nimport {\n InvalidAgentModelError,\n UnsupportedHarnessProviderError,\n UnsupportedHarnessThinkingError,\n UnsupportedModelProviderError,\n} from './errors.js';\nimport {listHarnessProviderModels} from './harness/index.js';\nimport {getModelProviderEntry} from './model-provider-policy.js';\n\nexport interface ContextualAgentConfig {\n readonly harness?: Harness | undefined;\n readonly provider?: string | undefined;\n readonly model?: string | undefined;\n /** A resolved template can carry any string. `resolveThinking` validates it. */\n readonly thinking?: string | undefined;\n}\n\nexport interface ResolvedAgentConfig {\n readonly harness: Harness;\n readonly provider: ModelProviderRef;\n readonly model: string;\n readonly thinking: AgentThinking;\n}\n\nexport type AgentDefaultsResolver = (step: ContextualAgentConfig) => ResolvedAgentConfig;\n\nexport interface AgentConfigResolutionContext {\n readonly workspaceDefaultHarnessId?: Harness | null | undefined;\n readonly workspaceDefaultProviderId?: ModelProviderRef | null | undefined;\n readonly workspaceProviderConfigs?: ReadonlyMap<ModelProviderRef, WorkspaceProviderDefaults>;\n readonly instanceDefaultProvider?: SupportedModelProviderId | undefined;\n readonly instanceDefaultModel?: string | undefined;\n readonly instanceDefaultThinking?: AgentThinking | undefined;\n}\n\ninterface WorkspaceProviderDefaults {\n readonly kind?: 'builtin' | 'custom' | undefined;\n readonly defaultModel: string | null;\n readonly defaultThinking: AgentThinking;\n readonly models?: readonly CustomAgentModelDto[] | null | undefined;\n}\n\ntype ModelCandidateResolver = () => string | null | undefined;\n\nexport function resolveAgentConfig(\n step: ContextualAgentConfig,\n ctx: AgentConfigResolutionContext = {},\n): ResolvedAgentConfig {\n const harness = step.harness ?? ctx.workspaceDefaultHarnessId ?? DEFAULT_HARNESS;\n const provider = resolveProvider(step, ctx, harness);\n const workspaceProviderConfig = ctx.workspaceProviderConfigs?.get(provider);\n const model = resolveModel({\n step,\n ctx,\n harness,\n provider,\n workspaceProviderConfig,\n });\n const thinking = resolveThinking({step, ctx, harness, provider, workspaceProviderConfig});\n\n return {harness, provider, model, thinking};\n}\n\nexport const catalogDefaultAgentResolver: AgentDefaultsResolver = (step) =>\n resolveAgentConfig(step);\n\nfunction resolveProvider(\n step: ContextualAgentConfig,\n ctx: AgentConfigResolutionContext,\n harness: Harness,\n): ModelProviderRef {\n const descriptor = getHarnessDescriptor(harness);\n if (step.provider !== undefined) {\n const provider = resolveSupportedProvider(step.provider, ctx);\n if (!isHarnessCompatible(harness, provider, ctx.workspaceProviderConfigs?.get(provider))) {\n throw new UnsupportedHarnessProviderError(\n harness,\n step.provider,\n descriptor.supportedProviderIds,\n );\n }\n return provider;\n }\n\n const candidates = [\n ctx.workspaceDefaultProviderId,\n ctx.instanceDefaultProvider,\n descriptor.defaultProviderId,\n ];\n for (const candidate of candidates) {\n if (candidate === undefined || candidate === null) continue;\n\n const workspaceProviderConfig = ctx.workspaceProviderConfigs?.get(candidate);\n if (!isHarnessCompatible(harness, candidate, workspaceProviderConfig)) continue;\n\n return resolveSupportedProvider(candidate, ctx);\n }\n\n return descriptor.defaultProviderId;\n}\n\nfunction resolveSupportedProvider(\n provider: string,\n ctx: AgentConfigResolutionContext,\n): ModelProviderRef {\n const workspaceProviderConfig = ctx.workspaceProviderConfigs?.get(provider);\n if (workspaceProviderConfig?.kind === 'custom') return provider;\n\n const entry = getModelProviderEntry(provider);\n if (entry === undefined || entry.support_status !== 'supported') {\n throw new UnsupportedModelProviderError(provider);\n }\n return provider as SupportedModelProviderId;\n}\n\nfunction resolveModel(params: {\n step: ContextualAgentConfig;\n ctx: AgentConfigResolutionContext;\n harness: Harness;\n provider: ModelProviderRef;\n workspaceProviderConfig: WorkspaceProviderDefaults | undefined;\n}): string {\n if (params.step.model !== undefined) {\n validateModel(\n params.harness,\n params.provider,\n params.step.model,\n params.workspaceProviderConfig,\n );\n return params.step.model;\n }\n\n const candidates: ModelCandidateResolver[] = [() => params.workspaceProviderConfig?.defaultModel];\n if (params.workspaceProviderConfig?.kind === 'custom') {\n candidates.push(() => customDefaultModel(params.workspaceProviderConfig));\n } else {\n candidates.push(\n () => instanceDefaultModel(params.provider, params.ctx),\n () => catalogDefaultModel(params.harness, params.provider),\n );\n }\n\n for (const resolveCandidate of candidates) {\n const candidate = resolveCandidate();\n if (candidate === undefined || candidate === null) continue;\n if (\n modelIsAvailable(params.harness, params.provider, candidate, params.workspaceProviderConfig)\n ) {\n return candidate;\n }\n }\n\n throw new InvalidAgentModelError(params.harness, params.provider, '');\n}\n\nfunction catalogDefaultModel(harness: Harness, provider: ModelProviderRef): string {\n const catalogModels = listProviderModels(harness, provider);\n const entry = getModelProviderEntry(provider);\n if (entry === undefined || entry.support_status !== 'supported') {\n throw new UnsupportedModelProviderError(provider);\n }\n if (\n entry.default_model !== null &&\n catalogModels.some((candidate) => candidate.id === entry.default_model)\n ) {\n return entry.default_model;\n }\n\n const firstModel = catalogModels[0];\n if (firstModel === undefined) throw new InvalidAgentModelError(harness, provider, '');\n return firstModel.id;\n}\n\nfunction instanceDefaultModel(\n provider: ModelProviderRef,\n ctx: AgentConfigResolutionContext,\n): string | undefined {\n return provider === ctx.instanceDefaultProvider ? ctx.instanceDefaultModel : undefined;\n}\n\nfunction instanceDefaultThinking(\n provider: ModelProviderRef,\n ctx: AgentConfigResolutionContext,\n): AgentThinking | undefined {\n return provider === ctx.instanceDefaultProvider ? ctx.instanceDefaultThinking : undefined;\n}\n\nfunction customDefaultModel(\n workspaceProviderConfig: WorkspaceProviderDefaults | undefined,\n): string | undefined {\n if (workspaceProviderConfig?.kind !== 'custom') return undefined;\n return workspaceProviderConfig.models?.[0]?.id;\n}\n\nfunction validateModel(\n harness: Harness,\n provider: ModelProviderRef,\n model: string,\n workspaceProviderConfig: WorkspaceProviderDefaults | undefined,\n): void {\n if (modelIsAvailable(harness, provider, model, workspaceProviderConfig)) return;\n throw new InvalidAgentModelError(harness, provider, model);\n}\n\nfunction modelIsAvailable(\n harness: Harness,\n provider: ModelProviderRef,\n model: string,\n workspaceProviderConfig: WorkspaceProviderDefaults | undefined,\n): boolean {\n if (workspaceProviderConfig?.kind === 'custom') {\n return workspaceProviderConfig.models?.some((candidate) => candidate.id === model) ?? false;\n }\n\n return listProviderModels(harness, provider).some((candidate) => candidate.id === model);\n}\n\nfunction listProviderModels(harness: Harness, provider: ModelProviderRef): readonly {id: string}[] {\n return listHarnessProviderModels(harness, provider);\n}\n\nfunction isHarnessCompatible(\n harness: Harness,\n provider: ModelProviderRef,\n workspaceProviderConfig: WorkspaceProviderDefaults | undefined,\n): boolean {\n if (workspaceProviderConfig?.kind === 'custom') return harness === 'pi';\n\n return getHarnessDescriptor(harness).supportedProviderIds.includes(provider);\n}\n\nfunction resolveThinking(params: {\n step: ContextualAgentConfig;\n ctx: AgentConfigResolutionContext;\n harness: Harness;\n provider: ModelProviderRef;\n workspaceProviderConfig: WorkspaceProviderDefaults | undefined;\n}): AgentThinking {\n const thinkingSchema = agentThinkingByHarness[params.harness];\n const descriptor = getHarnessDescriptor(params.harness);\n\n if (params.step.thinking !== undefined) {\n const parsed = thinkingSchema.safeParse(params.step.thinking);\n if (!parsed.success) {\n throw new UnsupportedHarnessThinkingError(\n params.harness,\n params.step.thinking,\n descriptor.thinkingLevels,\n );\n }\n return parsed.data;\n }\n\n const candidates = [\n params.workspaceProviderConfig?.defaultThinking,\n instanceDefaultThinking(params.provider, params.ctx),\n descriptor.defaultThinking,\n ];\n for (const candidate of candidates) {\n if (candidate !== undefined && thinkingSchema.safeParse(candidate).success) return candidate;\n }\n\n return descriptor.defaultThinking;\n}\n"],"names":["agentThinkingByHarness","DEFAULT_HARNESS","getHarnessDescriptor","InvalidAgentModelError","UnsupportedHarnessProviderError","UnsupportedHarnessThinkingError","UnsupportedModelProviderError","listHarnessProviderModels","getModelProviderEntry","resolveAgentConfig","step","ctx","harness","workspaceDefaultHarnessId","provider","resolveProvider","workspaceProviderConfig","workspaceProviderConfigs","get","model","resolveModel","thinking","resolveThinking","catalogDefaultAgentResolver","descriptor","undefined","resolveSupportedProvider","isHarnessCompatible","supportedProviderIds","candidates","workspaceDefaultProviderId","instanceDefaultProvider","defaultProviderId","candidate","kind","entry","support_status","params","validateModel","defaultModel","push","customDefaultModel","instanceDefaultModel","catalogDefaultModel","resolveCandidate","modelIsAvailable","catalogModels","listProviderModels","default_model","some","id","firstModel","instanceDefaultThinking","models","includes","thinkingSchema","parsed","safeParse","success","thinkingLevels","data","defaultThinking"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validation-catalog.d.ts","sourceRoot":"","sources":["../../src/core/validation-catalog.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAIhF,iFAAiF;AACjF,wBAAgB,yBAAyB,IAAI,sBAAsB,CAgBlE"}
1
+ {"version":3,"file":"validation-catalog.d.ts","sourceRoot":"","sources":["../../src/core/validation-catalog.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAKhF,iFAAiF;AACjF,wBAAgB,yBAAyB,IAAI,sBAAsB,CAsBlE"}
@@ -1,5 +1,6 @@
1
1
  import { listEnabledHarnessTools, listHarnessDescriptors, MODEL_PROVIDER_IDS } from '@shipfox/api-agent-dto';
2
2
  import { harnessToolDeploymentConfig } from '#config.js';
3
+ import { listHarnessProviderModels } from './harness/index.js';
3
4
  import { getModelProviderEntry } from './model-provider-policy.js';
4
5
  /** Produces the versioned, JSON-safe policy snapshot consumed by Definitions. */ export function getAgentValidationCatalog() {
5
6
  return {
@@ -13,6 +14,10 @@ import { getModelProviderEntry } from './model-provider-policy.js';
13
14
  supported_provider_ids: [
14
15
  ...harness.supportedProviderIds
15
16
  ],
17
+ model_ids_by_provider: Object.fromEntries(harness.supportedProviderIds.map((providerId)=>[
18
+ providerId,
19
+ listHarnessProviderModels(harness.id, providerId).map((model)=>model.id)
20
+ ])),
16
21
  thinking_levels: [
17
22
  ...harness.thinkingLevels
18
23
  ],
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/validation-catalog.ts"],"sourcesContent":["import {\n listEnabledHarnessTools,\n listHarnessDescriptors,\n MODEL_PROVIDER_IDS,\n} from '@shipfox/api-agent-dto';\nimport type {AgentValidationCatalog} from '@shipfox/api-agent-dto/inter-module';\nimport {harnessToolDeploymentConfig} from '#config.js';\nimport {getModelProviderEntry} from './model-provider-policy.js';\n\n/** Produces the versioned, JSON-safe policy snapshot consumed by Definitions. */\nexport function getAgentValidationCatalog(): AgentValidationCatalog {\n return {\n version: 1,\n providers: MODEL_PROVIDER_IDS.map((id) => ({\n id,\n support_status: getModelProviderEntry(id)?.support_status ?? 'unsupported',\n })),\n harnesses: listHarnessDescriptors().map((harness) => ({\n id: harness.id,\n supported_provider_ids: [...harness.supportedProviderIds],\n thinking_levels: [...harness.thinkingLevels],\n effective_tools: listEnabledHarnessTools(harness.id, harnessToolDeploymentConfig).map(\n (tool) => tool.name,\n ),\n })),\n };\n}\n"],"names":["listEnabledHarnessTools","listHarnessDescriptors","MODEL_PROVIDER_IDS","harnessToolDeploymentConfig","getModelProviderEntry","getAgentValidationCatalog","version","providers","map","id","support_status","harnesses","harness","supported_provider_ids","supportedProviderIds","thinking_levels","thinkingLevels","effective_tools","tool","name"],"mappings":"AAAA,SACEA,uBAAuB,EACvBC,sBAAsB,EACtBC,kBAAkB,QACb,yBAAyB;AAEhC,SAAQC,2BAA2B,QAAO,aAAa;AACvD,SAAQC,qBAAqB,QAAO,6BAA6B;AAEjE,+EAA+E,GAC/E,OAAO,SAASC;IACd,OAAO;QACLC,SAAS;QACTC,WAAWL,mBAAmBM,GAAG,CAAC,CAACC,KAAQ,CAAA;gBACzCA;gBACAC,gBAAgBN,sBAAsBK,KAAKC,kBAAkB;YAC/D,CAAA;QACAC,WAAWV,yBAAyBO,GAAG,CAAC,CAACI,UAAa,CAAA;gBACpDH,IAAIG,QAAQH,EAAE;gBACdI,wBAAwB;uBAAID,QAAQE,oBAAoB;iBAAC;gBACzDC,iBAAiB;uBAAIH,QAAQI,cAAc;iBAAC;gBAC5CC,iBAAiBjB,wBAAwBY,QAAQH,EAAE,EAAEN,6BAA6BK,GAAG,CACnF,CAACU,OAASA,KAAKC,IAAI;YAEvB,CAAA;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/core/validation-catalog.ts"],"sourcesContent":["import {\n listEnabledHarnessTools,\n listHarnessDescriptors,\n MODEL_PROVIDER_IDS,\n} from '@shipfox/api-agent-dto';\nimport type {AgentValidationCatalog} from '@shipfox/api-agent-dto/inter-module';\nimport {harnessToolDeploymentConfig} from '#config.js';\nimport {listHarnessProviderModels} from './harness/index.js';\nimport {getModelProviderEntry} from './model-provider-policy.js';\n\n/** Produces the versioned, JSON-safe policy snapshot consumed by Definitions. */\nexport function getAgentValidationCatalog(): AgentValidationCatalog {\n return {\n version: 1,\n providers: MODEL_PROVIDER_IDS.map((id) => ({\n id,\n support_status: getModelProviderEntry(id)?.support_status ?? 'unsupported',\n })),\n harnesses: listHarnessDescriptors().map((harness) => ({\n id: harness.id,\n supported_provider_ids: [...harness.supportedProviderIds],\n model_ids_by_provider: Object.fromEntries(\n harness.supportedProviderIds.map((providerId) => [\n providerId,\n listHarnessProviderModels(harness.id, providerId).map((model) => model.id),\n ]),\n ),\n thinking_levels: [...harness.thinkingLevels],\n effective_tools: listEnabledHarnessTools(harness.id, harnessToolDeploymentConfig).map(\n (tool) => tool.name,\n ),\n })),\n };\n}\n"],"names":["listEnabledHarnessTools","listHarnessDescriptors","MODEL_PROVIDER_IDS","harnessToolDeploymentConfig","listHarnessProviderModels","getModelProviderEntry","getAgentValidationCatalog","version","providers","map","id","support_status","harnesses","harness","supported_provider_ids","supportedProviderIds","model_ids_by_provider","Object","fromEntries","providerId","model","thinking_levels","thinkingLevels","effective_tools","tool","name"],"mappings":"AAAA,SACEA,uBAAuB,EACvBC,sBAAsB,EACtBC,kBAAkB,QACb,yBAAyB;AAEhC,SAAQC,2BAA2B,QAAO,aAAa;AACvD,SAAQC,yBAAyB,QAAO,qBAAqB;AAC7D,SAAQC,qBAAqB,QAAO,6BAA6B;AAEjE,+EAA+E,GAC/E,OAAO,SAASC;IACd,OAAO;QACLC,SAAS;QACTC,WAAWN,mBAAmBO,GAAG,CAAC,CAACC,KAAQ,CAAA;gBACzCA;gBACAC,gBAAgBN,sBAAsBK,KAAKC,kBAAkB;YAC/D,CAAA;QACAC,WAAWX,yBAAyBQ,GAAG,CAAC,CAACI,UAAa,CAAA;gBACpDH,IAAIG,QAAQH,EAAE;gBACdI,wBAAwB;uBAAID,QAAQE,oBAAoB;iBAAC;gBACzDC,uBAAuBC,OAAOC,WAAW,CACvCL,QAAQE,oBAAoB,CAACN,GAAG,CAAC,CAACU,aAAe;wBAC/CA;wBACAf,0BAA0BS,QAAQH,EAAE,EAAES,YAAYV,GAAG,CAAC,CAACW,QAAUA,MAAMV,EAAE;qBAC1E;gBAEHW,iBAAiB;uBAAIR,QAAQS,cAAc;iBAAC;gBAC5CC,iBAAiBvB,wBAAwBa,QAAQH,EAAE,EAAEP,6BAA6BM,GAAG,CACnF,CAACe,OAASA,KAAKC,IAAI;YAEvB,CAAA;IACF;AACF"}
package/dist/db/db.d.ts CHANGED
@@ -60,7 +60,7 @@ export declare const schema: {
60
60
  tableName: "model_provider_configs";
61
61
  dataType: "string";
62
62
  columnType: "PgEnumColumn";
63
- data: "custom" | "builtin";
63
+ data: "builtin" | "custom";
64
64
  driverParam: string;
65
65
  notNull: true;
66
66
  hasDefault: true;
@@ -94,7 +94,7 @@ export declare const schema: {
94
94
  tableName: "model_provider_configs";
95
95
  dataType: "string";
96
96
  columnType: "PgText";
97
- data: "openai-completions" | "openai-responses" | "anthropic-messages" | "google-generative-ai";
97
+ data: "anthropic-messages" | "google-generative-ai" | "openai-completions" | "openai-responses";
98
98
  driverParam: string;
99
99
  notNull: false;
100
100
  hasDefault: false;
@@ -106,7 +106,7 @@ export declare const schema: {
106
106
  identity: undefined;
107
107
  generated: undefined;
108
108
  }, {}, {
109
- $type: "openai-completions" | "openai-responses" | "anthropic-messages" | "google-generative-ai";
109
+ $type: "anthropic-messages" | "google-generative-ai" | "openai-completions" | "openai-responses";
110
110
  }>;
111
111
  baseUrl: import("drizzle-orm/pg-core").PgColumn<{
112
112
  name: "base_url";
@@ -288,7 +288,7 @@ export declare const schema: {
288
288
  generated: undefined;
289
289
  }, {}, {}>;
290
290
  };
291
- dialect: "pg";
291
+ dialect: 'pg';
292
292
  }>;
293
293
  agentWorkspaceSettings: import("drizzle-orm/pg-core").PgTableWithColumns<{
294
294
  name: "workspace_settings";
@@ -380,7 +380,7 @@ export declare const schema: {
380
380
  generated: undefined;
381
381
  }, {}, {}>;
382
382
  };
383
- dialect: "pg";
383
+ dialect: 'pg';
384
384
  }>;
385
385
  };
386
386
  export declare function db(): NodePgDatabase<{
@@ -444,7 +444,7 @@ export declare function db(): NodePgDatabase<{
444
444
  tableName: "model_provider_configs";
445
445
  dataType: "string";
446
446
  columnType: "PgEnumColumn";
447
- data: "custom" | "builtin";
447
+ data: "builtin" | "custom";
448
448
  driverParam: string;
449
449
  notNull: true;
450
450
  hasDefault: true;
@@ -478,7 +478,7 @@ export declare function db(): NodePgDatabase<{
478
478
  tableName: "model_provider_configs";
479
479
  dataType: "string";
480
480
  columnType: "PgText";
481
- data: "openai-completions" | "openai-responses" | "anthropic-messages" | "google-generative-ai";
481
+ data: "anthropic-messages" | "google-generative-ai" | "openai-completions" | "openai-responses";
482
482
  driverParam: string;
483
483
  notNull: false;
484
484
  hasDefault: false;
@@ -490,7 +490,7 @@ export declare function db(): NodePgDatabase<{
490
490
  identity: undefined;
491
491
  generated: undefined;
492
492
  }, {}, {
493
- $type: "openai-completions" | "openai-responses" | "anthropic-messages" | "google-generative-ai";
493
+ $type: "anthropic-messages" | "google-generative-ai" | "openai-completions" | "openai-responses";
494
494
  }>;
495
495
  baseUrl: import("drizzle-orm/pg-core").PgColumn<{
496
496
  name: "base_url";
@@ -672,7 +672,7 @@ export declare function db(): NodePgDatabase<{
672
672
  generated: undefined;
673
673
  }, {}, {}>;
674
674
  };
675
- dialect: "pg";
675
+ dialect: 'pg';
676
676
  }>;
677
677
  agentWorkspaceSettings: import("drizzle-orm/pg-core").PgTableWithColumns<{
678
678
  name: "workspace_settings";
@@ -764,7 +764,7 @@ export declare function db(): NodePgDatabase<{
764
764
  generated: undefined;
765
765
  }, {}, {}>;
766
766
  };
767
- dialect: "pg";
767
+ dialect: 'pg';
768
768
  }>;
769
769
  }>;
770
770
  export declare function closeDb(): void;
@@ -89,7 +89,7 @@ export declare const agentWorkspaceSettings: import("drizzle-orm/pg-core").PgTab
89
89
  generated: undefined;
90
90
  }, {}, {}>;
91
91
  };
92
- dialect: "pg";
92
+ dialect: 'pg';
93
93
  }>;
94
94
  export type AgentWorkspaceSettingsDb = typeof agentWorkspaceSettings.$inferSelect;
95
95
  export type AgentWorkspaceSettingsCreateDb = typeof agentWorkspaceSettings.$inferInsert;
@@ -60,7 +60,7 @@ export declare const modelProviderConfigs: import("drizzle-orm/pg-core").PgTable
60
60
  tableName: "model_provider_configs";
61
61
  dataType: "string";
62
62
  columnType: "PgEnumColumn";
63
- data: "custom" | "builtin";
63
+ data: "builtin" | "custom";
64
64
  driverParam: string;
65
65
  notNull: true;
66
66
  hasDefault: true;
@@ -94,7 +94,7 @@ export declare const modelProviderConfigs: import("drizzle-orm/pg-core").PgTable
94
94
  tableName: "model_provider_configs";
95
95
  dataType: "string";
96
96
  columnType: "PgText";
97
- data: "openai-completions" | "openai-responses" | "anthropic-messages" | "google-generative-ai";
97
+ data: "anthropic-messages" | "google-generative-ai" | "openai-completions" | "openai-responses";
98
98
  driverParam: string;
99
99
  notNull: false;
100
100
  hasDefault: false;
@@ -106,7 +106,7 @@ export declare const modelProviderConfigs: import("drizzle-orm/pg-core").PgTable
106
106
  identity: undefined;
107
107
  generated: undefined;
108
108
  }, {}, {
109
- $type: "openai-completions" | "openai-responses" | "anthropic-messages" | "google-generative-ai";
109
+ $type: "anthropic-messages" | "google-generative-ai" | "openai-completions" | "openai-responses";
110
110
  }>;
111
111
  baseUrl: import("drizzle-orm/pg-core").PgColumn<{
112
112
  name: "base_url";
@@ -288,7 +288,7 @@ export declare const modelProviderConfigs: import("drizzle-orm/pg-core").PgTable
288
288
  generated: undefined;
289
289
  }, {}, {}>;
290
290
  };
291
- dialect: "pg";
291
+ dialect: 'pg';
292
292
  }>;
293
293
  export type ModelProviderConfigDb = typeof modelProviderConfigs.$inferSelect;
294
294
  export type ModelProviderConfigCreateDb = typeof modelProviderConfigs.$inferInsert;
@@ -1,10 +1,10 @@
1
1
  import type { SupportedModelProviderId } from '@shipfox/api-agent-dto';
2
2
  export declare const modelProviderValidationCount: import("@shipfox/node-opentelemetry").Counter<{
3
- model_provider: SupportedModelProviderId | "custom";
4
- outcome: "succeeded" | "failed";
3
+ model_provider: SupportedModelProviderId | 'custom';
4
+ outcome: 'succeeded' | 'failed';
5
5
  }>;
6
6
  export declare const agentRuntimeConfigResolvedCount: import("@shipfox/node-opentelemetry").Counter<{
7
- source: "workspace" | "instance";
8
- outcome: "resolved" | "unavailable" | "decryption_failed";
7
+ source: 'workspace' | 'instance';
8
+ outcome: 'resolved' | 'unavailable' | 'decryption_failed';
9
9
  }>;
10
10
  //# sourceMappingURL=instance.d.ts.map