agent-relay-sdk 0.1.0 → 0.2.1
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/dist/bus-client.d.ts +45 -2
- package/dist/bus-client.d.ts.map +1 -1
- package/dist/bus-client.js +157 -3
- package/dist/bus-client.js.map +1 -1
- package/dist/claim-tracker.d.ts +19 -0
- package/dist/claim-tracker.d.ts.map +1 -0
- package/dist/claim-tracker.js +26 -0
- package/dist/claim-tracker.js.map +1 -0
- package/dist/context-probe.d.ts +43 -0
- package/dist/context-probe.d.ts.map +1 -0
- package/dist/context-probe.js +210 -0
- package/dist/context-probe.js.map +1 -0
- package/dist/contracts.d.ts +27 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +34 -0
- package/dist/contracts.js.map +1 -0
- package/dist/http-client.d.ts +66 -5
- package/dist/http-client.d.ts.map +1 -1
- package/dist/http-client.js +148 -9
- package/dist/http-client.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/protocol.d.ts +9 -1
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js.map +1 -1
- package/dist/provider-catalog.d.ts +80 -0
- package/dist/provider-catalog.d.ts.map +1 -0
- package/dist/provider-catalog.js +84 -0
- package/dist/provider-catalog.js.map +1 -0
- package/dist/types.d.ts +921 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +17 -1
- package/src/bus-client.ts +176 -4
- package/src/claim-tracker.ts +40 -0
- package/src/context-probe.ts +257 -0
- package/src/contracts.ts +47 -0
- package/src/http-client.ts +166 -11
- package/src/index.ts +4 -0
- package/src/protocol.ts +10 -0
- package/src/provider-catalog.ts +174 -0
- package/src/types.ts +1035 -8
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import type { SpawnProvider } from "./types.js";
|
|
2
|
+
|
|
3
|
+
export type ProviderEffort = "low" | "medium" | "high" | "xhigh" | "max";
|
|
4
|
+
export type ProviderCatalogValueSource = "catalog" | "provider" | "runtime" | "override";
|
|
5
|
+
export type ProviderCatalogConfidence = "declared" | "verified" | "estimated" | "unknown";
|
|
6
|
+
|
|
7
|
+
export interface ProviderCatalogValue<T> {
|
|
8
|
+
value: T;
|
|
9
|
+
source: ProviderCatalogValueSource;
|
|
10
|
+
confidence: ProviderCatalogConfidence;
|
|
11
|
+
lastUpdatedAt?: number;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface ProviderModelLimits {
|
|
15
|
+
contextWindowTokens?: ProviderCatalogValue<number>;
|
|
16
|
+
maxOutputTokens?: ProviderCatalogValue<number>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface ProviderModelModalities {
|
|
20
|
+
input: {
|
|
21
|
+
text: boolean;
|
|
22
|
+
image?: boolean;
|
|
23
|
+
audio?: boolean;
|
|
24
|
+
video?: boolean;
|
|
25
|
+
pdf?: boolean;
|
|
26
|
+
};
|
|
27
|
+
output: {
|
|
28
|
+
text: boolean;
|
|
29
|
+
image?: boolean;
|
|
30
|
+
audio?: boolean;
|
|
31
|
+
video?: boolean;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface ProviderModelToolCapabilities {
|
|
36
|
+
code?: boolean;
|
|
37
|
+
review?: boolean;
|
|
38
|
+
debug?: boolean;
|
|
39
|
+
refactor?: boolean;
|
|
40
|
+
shell?: boolean;
|
|
41
|
+
fileRead?: boolean;
|
|
42
|
+
fileWrite?: boolean;
|
|
43
|
+
webSearch?: boolean;
|
|
44
|
+
imageGeneration?: boolean;
|
|
45
|
+
imageEditing?: boolean;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface ProviderModelCapabilities {
|
|
49
|
+
modalities: ProviderModelModalities;
|
|
50
|
+
tools?: ProviderModelToolCapabilities;
|
|
51
|
+
source: ProviderCatalogValueSource;
|
|
52
|
+
confidence: ProviderCatalogConfidence;
|
|
53
|
+
lastUpdatedAt?: number;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export interface ProviderModelCatalogEntry {
|
|
57
|
+
alias: string;
|
|
58
|
+
label: string;
|
|
59
|
+
providerModel: string;
|
|
60
|
+
efforts: ProviderEffort[];
|
|
61
|
+
defaultEffort?: ProviderEffort;
|
|
62
|
+
limits?: ProviderModelLimits;
|
|
63
|
+
capabilities?: ProviderModelCapabilities;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export interface ProviderCatalogEntry {
|
|
67
|
+
provider: SpawnProvider;
|
|
68
|
+
label: string;
|
|
69
|
+
defaultModel?: string;
|
|
70
|
+
models: ProviderModelCatalogEntry[];
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export interface ProviderSelection {
|
|
74
|
+
provider: SpawnProvider;
|
|
75
|
+
model?: string;
|
|
76
|
+
effort?: ProviderEffort;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export interface ResolvedProviderSelection {
|
|
80
|
+
provider: SpawnProvider;
|
|
81
|
+
modelAlias?: string;
|
|
82
|
+
providerModel?: string;
|
|
83
|
+
effort?: ProviderEffort;
|
|
84
|
+
model?: ProviderModelCatalogEntry;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const CLAUDE_LOW_TO_MAX: ProviderEffort[] = ["low", "medium", "high", "max"];
|
|
88
|
+
const CLAUDE_LOW_TO_XHIGH_MAX: ProviderEffort[] = ["low", "medium", "high", "xhigh", "max"];
|
|
89
|
+
const CODEX_REASONING: ProviderEffort[] = ["low", "medium", "high", "xhigh"];
|
|
90
|
+
const CONTEXT_200K: ProviderCatalogValue<number> = { value: 200_000, source: "catalog", confidence: "declared" };
|
|
91
|
+
const CONTEXT_1M: ProviderCatalogValue<number> = { value: 1_000_000, source: "catalog", confidence: "declared" };
|
|
92
|
+
const CODE_MODEL_CAPABILITIES: ProviderModelCapabilities = {
|
|
93
|
+
modalities: {
|
|
94
|
+
input: { text: true, image: true },
|
|
95
|
+
output: { text: true },
|
|
96
|
+
},
|
|
97
|
+
tools: {
|
|
98
|
+
code: true,
|
|
99
|
+
review: true,
|
|
100
|
+
debug: true,
|
|
101
|
+
refactor: true,
|
|
102
|
+
},
|
|
103
|
+
source: "catalog",
|
|
104
|
+
confidence: "declared",
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
function codeModel(limits?: ProviderModelLimits): Pick<ProviderModelCatalogEntry, "limits" | "capabilities"> {
|
|
108
|
+
return {
|
|
109
|
+
...(limits ? { limits } : {}),
|
|
110
|
+
capabilities: CODE_MODEL_CAPABILITIES,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export const PROVIDER_CATALOG: Record<SpawnProvider, ProviderCatalogEntry> = {
|
|
115
|
+
claude: {
|
|
116
|
+
provider: "claude",
|
|
117
|
+
label: "Claude Code",
|
|
118
|
+
defaultModel: "sonnet-4.6",
|
|
119
|
+
models: [
|
|
120
|
+
{ 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 }) },
|
|
121
|
+
{ 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 }) },
|
|
122
|
+
{ 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 }) },
|
|
123
|
+
{ 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 }) },
|
|
124
|
+
{ alias: "opus-4.6", label: "Opus 4.6", providerModel: "claude-opus-4-6", efforts: CLAUDE_LOW_TO_MAX, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_200K }) },
|
|
125
|
+
{ 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 }) },
|
|
126
|
+
{ alias: "sonnet-4.6", label: "Sonnet 4.6", providerModel: "claude-sonnet-4-6", efforts: CLAUDE_LOW_TO_MAX, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_200K }) },
|
|
127
|
+
{ 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 }) },
|
|
128
|
+
{ alias: "haiku", label: "Haiku", providerModel: "haiku", efforts: [], ...codeModel() },
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
codex: {
|
|
132
|
+
provider: "codex",
|
|
133
|
+
label: "Codex",
|
|
134
|
+
defaultModel: "gpt-5.5",
|
|
135
|
+
models: [
|
|
136
|
+
{ alias: "gpt-5.5", label: "GPT-5.5", providerModel: "gpt-5.5", efforts: CODEX_REASONING, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_200K }) },
|
|
137
|
+
{ alias: "gpt-5.4", label: "GPT-5.4", providerModel: "gpt-5.4", efforts: CODEX_REASONING, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_200K }) },
|
|
138
|
+
{ alias: "gpt-5.4-mini", label: "GPT-5.4 Mini", providerModel: "gpt-5.4-mini", efforts: CODEX_REASONING, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_200K }) },
|
|
139
|
+
{ alias: "gpt-5.3-codex", label: "GPT-5.3 Codex", providerModel: "gpt-5.3-codex", efforts: CODEX_REASONING, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_200K }) },
|
|
140
|
+
{ 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 }) },
|
|
141
|
+
{ alias: "gpt-5.2", label: "GPT-5.2", providerModel: "gpt-5.2", efforts: CODEX_REASONING, defaultEffort: "medium", ...codeModel({ contextWindowTokens: CONTEXT_200K }) },
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
export function providerCatalogList(): ProviderCatalogEntry[] {
|
|
147
|
+
return Object.values(PROVIDER_CATALOG);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export function getProviderCatalog(provider: SpawnProvider): ProviderCatalogEntry {
|
|
151
|
+
return PROVIDER_CATALOG[provider];
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export function resolveProviderSelection(selection: ProviderSelection): ResolvedProviderSelection {
|
|
155
|
+
const catalog = getProviderCatalog(selection.provider);
|
|
156
|
+
const alias = selection.model || catalog.defaultModel;
|
|
157
|
+
const model = alias ? catalog.models.find((entry) => entry.alias === alias) : undefined;
|
|
158
|
+
if (alias && !model) {
|
|
159
|
+
throw new Error(`unknown ${selection.provider} model: ${alias}`);
|
|
160
|
+
}
|
|
161
|
+
if (selection.effort && !model) {
|
|
162
|
+
throw new Error(`effort requires a ${selection.provider} model`);
|
|
163
|
+
}
|
|
164
|
+
if (selection.effort && model && !model.efforts.includes(selection.effort)) {
|
|
165
|
+
throw new Error(`${selection.provider} model ${model.alias} does not support effort ${selection.effort}`);
|
|
166
|
+
}
|
|
167
|
+
return {
|
|
168
|
+
provider: selection.provider,
|
|
169
|
+
modelAlias: model?.alias,
|
|
170
|
+
providerModel: model?.providerModel,
|
|
171
|
+
effort: selection.effort,
|
|
172
|
+
model,
|
|
173
|
+
};
|
|
174
|
+
}
|