@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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +36 -0
- package/dist/config.d.ts +2 -2
- package/dist/core/errors.d.ts +2 -2
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js.map +1 -1
- package/dist/core/resolve-agent-config.d.ts +2 -1
- package/dist/core/resolve-agent-config.d.ts.map +1 -1
- package/dist/core/resolve-agent-config.js +3 -2
- package/dist/core/resolve-agent-config.js.map +1 -1
- package/dist/core/validation-catalog.d.ts.map +1 -1
- package/dist/core/validation-catalog.js +5 -0
- package/dist/core/validation-catalog.js.map +1 -1
- package/dist/db/db.d.ts +10 -10
- package/dist/db/schema/agent-workspace-settings.d.ts +1 -1
- package/dist/db/schema/model-provider-configs.d.ts +4 -4
- package/dist/metrics/instance.d.ts +4 -4
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +11 -11
- package/src/core/errors.ts +1 -1
- package/src/core/resolve-agent-config.ts +5 -3
- package/src/core/validation-catalog.test.ts +16 -0
- package/src/core/validation-catalog.ts +7 -0
- package/tsconfig.build.tsbuildinfo +1 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
$ shipfox-swc
|
|
2
|
-
Successfully compiled: 52 files with swc (
|
|
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: "
|
|
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: "
|
|
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;
|
package/dist/core/errors.d.ts
CHANGED
|
@@ -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:
|
|
24
|
+
readonly thinking: string;
|
|
25
25
|
readonly supportedLevels: readonly AgentThinking[];
|
|
26
|
-
constructor(harness: Harness, thinking:
|
|
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;
|
|
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"}
|
package/dist/core/errors.js.map
CHANGED
|
@@ -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:
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
|
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":"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"}
|
|
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;
|
|
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,
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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:
|
|
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:
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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:
|
|
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:
|
|
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:
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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:
|
|
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 |
|
|
4
|
-
outcome:
|
|
3
|
+
model_provider: SupportedModelProviderId | 'custom';
|
|
4
|
+
outcome: 'succeeded' | 'failed';
|
|
5
5
|
}>;
|
|
6
6
|
export declare const agentRuntimeConfigResolvedCount: import("@shipfox/node-opentelemetry").Counter<{
|
|
7
|
-
source:
|
|
8
|
-
outcome:
|
|
7
|
+
source: 'workspace' | 'instance';
|
|
8
|
+
outcome: 'resolved' | 'unavailable' | 'decryption_failed';
|
|
9
9
|
}>;
|
|
10
10
|
//# sourceMappingURL=instance.d.ts.map
|