agent-relay-sdk 0.2.0 → 0.2.2

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.
@@ -0,0 +1,80 @@
1
+ import type { SpawnProvider } from "./types.js";
2
+ export type ProviderEffort = "low" | "medium" | "high" | "xhigh" | "max";
3
+ export type ProviderCatalogValueSource = "catalog" | "provider" | "runtime" | "override";
4
+ export type ProviderCatalogConfidence = "declared" | "verified" | "estimated" | "unknown";
5
+ export interface ProviderCatalogValue<T> {
6
+ value: T;
7
+ source: ProviderCatalogValueSource;
8
+ confidence: ProviderCatalogConfidence;
9
+ lastUpdatedAt?: number;
10
+ }
11
+ export interface ProviderModelLimits {
12
+ contextWindowTokens?: ProviderCatalogValue<number>;
13
+ maxOutputTokens?: ProviderCatalogValue<number>;
14
+ }
15
+ export interface ProviderModelModalities {
16
+ input: {
17
+ text: boolean;
18
+ image?: boolean;
19
+ audio?: boolean;
20
+ video?: boolean;
21
+ pdf?: boolean;
22
+ };
23
+ output: {
24
+ text: boolean;
25
+ image?: boolean;
26
+ audio?: boolean;
27
+ video?: boolean;
28
+ };
29
+ }
30
+ export interface ProviderModelToolCapabilities {
31
+ code?: boolean;
32
+ review?: boolean;
33
+ debug?: boolean;
34
+ refactor?: boolean;
35
+ shell?: boolean;
36
+ fileRead?: boolean;
37
+ fileWrite?: boolean;
38
+ webSearch?: boolean;
39
+ imageGeneration?: boolean;
40
+ imageEditing?: boolean;
41
+ }
42
+ export interface ProviderModelCapabilities {
43
+ modalities: ProviderModelModalities;
44
+ tools?: ProviderModelToolCapabilities;
45
+ source: ProviderCatalogValueSource;
46
+ confidence: ProviderCatalogConfidence;
47
+ lastUpdatedAt?: number;
48
+ }
49
+ export interface ProviderModelCatalogEntry {
50
+ alias: string;
51
+ label: string;
52
+ providerModel: string;
53
+ efforts: ProviderEffort[];
54
+ defaultEffort?: ProviderEffort;
55
+ limits?: ProviderModelLimits;
56
+ capabilities?: ProviderModelCapabilities;
57
+ }
58
+ export interface ProviderCatalogEntry {
59
+ provider: SpawnProvider;
60
+ label: string;
61
+ defaultModel?: string;
62
+ models: ProviderModelCatalogEntry[];
63
+ }
64
+ export interface ProviderSelection {
65
+ provider: SpawnProvider;
66
+ model?: string;
67
+ effort?: ProviderEffort;
68
+ }
69
+ export interface ResolvedProviderSelection {
70
+ provider: SpawnProvider;
71
+ modelAlias?: string;
72
+ providerModel?: string;
73
+ effort?: ProviderEffort;
74
+ model?: ProviderModelCatalogEntry;
75
+ }
76
+ export declare const PROVIDER_CATALOG: Record<SpawnProvider, ProviderCatalogEntry>;
77
+ export declare function providerCatalogList(): ProviderCatalogEntry[];
78
+ export declare function getProviderCatalog(provider: SpawnProvider): ProviderCatalogEntry;
79
+ export declare function resolveProviderSelection(selection: ProviderSelection): ResolvedProviderSelection;
80
+ //# sourceMappingURL=provider-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-catalog.d.ts","sourceRoot":"","sources":["../src/provider-catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ const CLAUDE_LOW_TO_MAX = ["low", "medium", "high", "max"];
2
+ const CLAUDE_LOW_TO_XHIGH_MAX = ["low", "medium", "high", "xhigh", "max"];
3
+ const CODEX_REASONING = ["low", "medium", "high", "xhigh"];
4
+ const CONTEXT_200K = { value: 200_000, source: "catalog", confidence: "declared" };
5
+ const CONTEXT_1M = { value: 1_000_000, source: "catalog", confidence: "declared" };
6
+ const CODE_MODEL_CAPABILITIES = {
7
+ modalities: {
8
+ input: { text: true, image: true },
9
+ output: { text: true },
10
+ },
11
+ tools: {
12
+ code: true,
13
+ review: true,
14
+ debug: true,
15
+ refactor: true,
16
+ },
17
+ source: "catalog",
18
+ confidence: "declared",
19
+ };
20
+ function codeModel(limits) {
21
+ return {
22
+ ...(limits ? { limits } : {}),
23
+ capabilities: CODE_MODEL_CAPABILITIES,
24
+ };
25
+ }
26
+ export const PROVIDER_CATALOG = {
27
+ claude: {
28
+ provider: "claude",
29
+ label: "Claude Code",
30
+ defaultModel: "sonnet-4.6",
31
+ models: [
32
+ { alias: "opus-4.8", label: "Opus 4.8", providerModel: "claude-opus-4-8", efforts: CLAUDE_LOW_TO_XHIGH_MAX, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_200K }) },
33
+ { alias: "opus-4.8[1m]", label: "Opus 4.8 1M", providerModel: "claude-opus-4-8[1m]", efforts: CLAUDE_LOW_TO_XHIGH_MAX, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_1M }) },
34
+ { alias: "opus-4.7", label: "Opus 4.7", providerModel: "claude-opus-4-7", efforts: CLAUDE_LOW_TO_XHIGH_MAX, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_200K }) },
35
+ { alias: "opus-4.7[1m]", label: "Opus 4.7 1M", providerModel: "claude-opus-4-7[1m]", efforts: CLAUDE_LOW_TO_XHIGH_MAX, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_1M }) },
36
+ { alias: "opus-4.6", label: "Opus 4.6", providerModel: "claude-opus-4-6", efforts: CLAUDE_LOW_TO_MAX, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_200K }) },
37
+ { alias: "opus-4.6[1m]", label: "Opus 4.6 1M", providerModel: "claude-opus-4-6[1m]", efforts: CLAUDE_LOW_TO_MAX, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_1M }) },
38
+ { alias: "sonnet-4.6", label: "Sonnet 4.6", providerModel: "claude-sonnet-4-6", efforts: CLAUDE_LOW_TO_MAX, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_200K }) },
39
+ { alias: "sonnet-4.6[1m]", label: "Sonnet 4.6 1M", providerModel: "claude-sonnet-4-6[1m]", efforts: CLAUDE_LOW_TO_MAX, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_1M }) },
40
+ { alias: "haiku", label: "Haiku", providerModel: "haiku", efforts: [], ...codeModel() },
41
+ ],
42
+ },
43
+ codex: {
44
+ provider: "codex",
45
+ label: "Codex",
46
+ defaultModel: "gpt-5.5",
47
+ models: [
48
+ { alias: "gpt-5.5", label: "GPT-5.5", providerModel: "gpt-5.5", efforts: CODEX_REASONING, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_200K }) },
49
+ { alias: "gpt-5.4", label: "GPT-5.4", providerModel: "gpt-5.4", efforts: CODEX_REASONING, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_200K }) },
50
+ { alias: "gpt-5.4-mini", label: "GPT-5.4 Mini", providerModel: "gpt-5.4-mini", efforts: CODEX_REASONING, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_200K }) },
51
+ { alias: "gpt-5.3-codex", label: "GPT-5.3 Codex", providerModel: "gpt-5.3-codex", efforts: CODEX_REASONING, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_200K }) },
52
+ { alias: "gpt-5.3-codex-spark", label: "GPT-5.3 Codex Spark", providerModel: "gpt-5.3-codex-spark", efforts: CODEX_REASONING, defaultEffort: "high", ...codeModel({ contextWindowTokens: CONTEXT_200K }) },
53
+ { alias: "gpt-5.2", label: "GPT-5.2", providerModel: "gpt-5.2", efforts: CODEX_REASONING, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_200K }) },
54
+ ],
55
+ },
56
+ };
57
+ export function providerCatalogList() {
58
+ return Object.values(PROVIDER_CATALOG);
59
+ }
60
+ export function getProviderCatalog(provider) {
61
+ return PROVIDER_CATALOG[provider];
62
+ }
63
+ export function resolveProviderSelection(selection) {
64
+ const catalog = getProviderCatalog(selection.provider);
65
+ const alias = selection.model || catalog.defaultModel;
66
+ const model = alias ? catalog.models.find((entry) => entry.alias === alias) : undefined;
67
+ if (alias && !model) {
68
+ throw new Error(`unknown ${selection.provider} model: ${alias}`);
69
+ }
70
+ if (selection.effort && !model) {
71
+ throw new Error(`effort requires a ${selection.provider} model`);
72
+ }
73
+ if (selection.effort && model && !model.efforts.includes(selection.effort)) {
74
+ throw new Error(`${selection.provider} model ${model.alias} does not support effort ${selection.effort}`);
75
+ }
76
+ return {
77
+ provider: selection.provider,
78
+ modelAlias: model?.alias,
79
+ providerModel: model?.providerModel,
80
+ effort: selection.effort,
81
+ model,
82
+ };
83
+ }
84
+ //# sourceMappingURL=provider-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-catalog.js","sourceRoot":"","sources":["../src/provider-catalog.ts"],"names":[],"mappings":"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"}