@getpaseo/server 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.
- package/dist/server/server/agent/providers/claude/agent.d.ts +3 -0
- package/dist/server/server/agent/providers/claude/agent.js +31 -2
- package/dist/server/server/agent/providers/claude/model-manifest.d.ts +37 -4
- package/dist/server/server/agent/providers/claude/model-manifest.js +86 -22
- package/dist/server/server/agent/providers/claude/models.d.ts +2 -2
- package/dist/server/server/agent/providers/claude/models.js +4 -4
- package/dist/server/web-ui/_expo/static/js/web/{index-16a70779e3dadd2086411dc8018efd32.js → index-df2ab43bd83b09b00e92c1bb91d425eb.js} +1 -1
- package/dist/server/web-ui/_expo/static/js/web/{index-16a70779e3dadd2086411dc8018efd32.js.br → index-df2ab43bd83b09b00e92c1bb91d425eb.js.br} +0 -0
- package/dist/server/web-ui/_expo/static/js/web/{index-16a70779e3dadd2086411dc8018efd32.js.gz → index-df2ab43bd83b09b00e92c1bb91d425eb.js.gz} +0 -0
- package/dist/server/web-ui/index.html +1 -1
- package/dist/server/web-ui/index.html.br +0 -0
- package/dist/server/web-ui/index.html.gz +0 -0
- package/package.json +6 -6
|
@@ -22,6 +22,7 @@ interface ClaudeAgentClientOptions {
|
|
|
22
22
|
runtimeSettings?: ProviderRuntimeSettings;
|
|
23
23
|
queryFactory?: ClaudeQueryFactory;
|
|
24
24
|
resolveBinary?: () => Promise<string>;
|
|
25
|
+
resolveVersion?: () => Promise<string>;
|
|
25
26
|
configDir?: string;
|
|
26
27
|
}
|
|
27
28
|
export declare function extractUserMessageText(content: unknown): string | null;
|
|
@@ -35,6 +36,7 @@ export declare class ClaudeAgentClient implements AgentClient {
|
|
|
35
36
|
private readonly runtimeSettings?;
|
|
36
37
|
private readonly queryFactory?;
|
|
37
38
|
private readonly resolveBinary;
|
|
39
|
+
private readonly resolveVersion;
|
|
38
40
|
private readonly configDir?;
|
|
39
41
|
constructor(options: ClaudeAgentClientOptions);
|
|
40
42
|
createSession(config: AgentSessionConfig, launchContext?: AgentLaunchContext, options?: AgentCreateSessionOptions): Promise<AgentSession>;
|
|
@@ -50,6 +52,7 @@ export declare class ClaudeAgentClient implements AgentClient {
|
|
|
50
52
|
}>;
|
|
51
53
|
private assertConfig;
|
|
52
54
|
}
|
|
55
|
+
export declare function resolveClaudeCodeVersion(runtimeSettings?: ProviderRuntimeSettings): Promise<string>;
|
|
53
56
|
interface ClaudeHistoryEntry {
|
|
54
57
|
type?: unknown;
|
|
55
58
|
subtype?: unknown;
|
|
@@ -6,7 +6,7 @@ import path from "node:path";
|
|
|
6
6
|
import { mapClaudeCanceledToolCall, mapClaudeCompletedToolCall, mapClaudeFailedToolCall, mapClaudeRunningToolCall, } from "./tool-call-mapper.js";
|
|
7
7
|
import { mapTaskNotificationSystemRecordToToolCall, mapTaskNotificationUserContentToToolCall, } from "./task-notification-tool-call.js";
|
|
8
8
|
import { findClaudeModel, getClaudeModelsWithSettings, normalizeClaudeRuntimeModelId, } from "./models.js";
|
|
9
|
-
import { CLAUDE_DISABLED_THINKING_OPTION_ID, CLAUDE_ULTRACODE_THINKING_OPTION_ID, resolveClaudeDisabledThinkingForModel, } from "./model-manifest.js";
|
|
9
|
+
import { CLAUDE_DISABLED_THINKING_OPTION_ID, CLAUDE_ULTRACODE_THINKING_OPTION_ID, parseClaudeCodeVersion, resolveClaudeDisabledThinkingForModel, } from "./model-manifest.js";
|
|
10
10
|
import { parsePartialJsonObject } from "./partial-json.js";
|
|
11
11
|
import { ClaudeSidechainTracker } from "./sidechain-tracker.js";
|
|
12
12
|
import { buildClaudeFeatures, claudeModelSupportsFastMode } from "./feature-definitions.js";
|
|
@@ -1039,6 +1039,8 @@ export class ClaudeAgentClient {
|
|
|
1039
1039
|
this.runtimeSettings = options.runtimeSettings;
|
|
1040
1040
|
this.queryFactory = options.queryFactory;
|
|
1041
1041
|
this.resolveBinary = options.resolveBinary ?? (() => resolveClaudeBinary(this.runtimeSettings));
|
|
1042
|
+
this.resolveVersion =
|
|
1043
|
+
options.resolveVersion ?? (() => resolveClaudeCodeVersion(this.runtimeSettings));
|
|
1042
1044
|
this.configDir = options.configDir;
|
|
1043
1045
|
}
|
|
1044
1046
|
async createSession(config, launchContext, options) {
|
|
@@ -1079,7 +1081,14 @@ export class ClaudeAgentClient {
|
|
|
1079
1081
|
}
|
|
1080
1082
|
async fetchCatalog(_options) {
|
|
1081
1083
|
// Claude exposes a global catalog here; cwd/force are intentionally irrelevant.
|
|
1082
|
-
|
|
1084
|
+
let claudeCodeVersion;
|
|
1085
|
+
try {
|
|
1086
|
+
claudeCodeVersion = await this.resolveVersion();
|
|
1087
|
+
}
|
|
1088
|
+
catch (error) {
|
|
1089
|
+
this.logger.warn({ err: error }, "Failed to resolve Claude Code version for model catalog");
|
|
1090
|
+
}
|
|
1091
|
+
const models = await getClaudeModelsWithSettings(this.logger, this.configDir, claudeCodeVersion);
|
|
1083
1092
|
const modes = detectIneligibleAutoModeTransport(createProviderEnv({ baseEnv: process.env, runtimeSettings: this.runtimeSettings }))
|
|
1084
1093
|
? DEFAULT_MODES.filter((mode) => mode.id !== "auto")
|
|
1085
1094
|
: DEFAULT_MODES;
|
|
@@ -1181,6 +1190,26 @@ async function resolveClaudeBinary(runtimeSettings) {
|
|
|
1181
1190
|
}
|
|
1182
1191
|
throw new Error("Claude binary not found. Install Claude Code (https://github.com/anthropics/claude-code) and ensure it is available in your shell PATH.");
|
|
1183
1192
|
}
|
|
1193
|
+
export async function resolveClaudeCodeVersion(runtimeSettings) {
|
|
1194
|
+
const launch = await resolveProviderLaunch({
|
|
1195
|
+
commandConfig: runtimeSettings?.command,
|
|
1196
|
+
defaultBinary: "claude",
|
|
1197
|
+
});
|
|
1198
|
+
const availability = await checkProviderLaunchAvailable(launch);
|
|
1199
|
+
if (!availability.available) {
|
|
1200
|
+
throw new Error("Claude binary not found while resolving Claude Code version");
|
|
1201
|
+
}
|
|
1202
|
+
const executable = availability.resolvedPath ?? launch.command;
|
|
1203
|
+
const { stdout, stderr } = await execCommand(executable, [...launch.args, "--version"], {
|
|
1204
|
+
...createProviderEnvSpec({ runtimeSettings }),
|
|
1205
|
+
timeout: 5000,
|
|
1206
|
+
});
|
|
1207
|
+
const version = parseClaudeCodeVersion(`${stdout}\n${stderr}`);
|
|
1208
|
+
if (!version) {
|
|
1209
|
+
throw new Error("Unable to parse Claude Code version from --version output");
|
|
1210
|
+
}
|
|
1211
|
+
return version.join(".");
|
|
1212
|
+
}
|
|
1184
1213
|
async function resolveClaudeAuth(launch, availability, runtimeSettings) {
|
|
1185
1214
|
const run = async (executable, args) => {
|
|
1186
1215
|
try {
|
|
@@ -2,10 +2,35 @@ import type { AgentModelDefinition } from "../../agent-sdk-types.js";
|
|
|
2
2
|
export declare const CLAUDE_DISABLED_THINKING_OPTION_ID = "off";
|
|
3
3
|
export declare const CLAUDE_ULTRACODE_THINKING_OPTION_ID = "ultracode";
|
|
4
4
|
export declare const CLAUDE_MODEL_MANIFEST: readonly [{
|
|
5
|
+
readonly id: "claude-opus-5[1m]";
|
|
6
|
+
readonly label: "Opus 5 1M";
|
|
7
|
+
readonly description: "Opus 5 with 1M context window";
|
|
8
|
+
readonly defaultPriority: 2;
|
|
9
|
+
readonly minimumClaudeCodeVersion: "2.1.219";
|
|
10
|
+
readonly contextWindowMaxTokens: 1000000;
|
|
11
|
+
readonly effortLevels: readonly ["low", "medium", "high", "xhigh", "max"];
|
|
12
|
+
readonly supportsThinkingDisabled: true;
|
|
13
|
+
}, {
|
|
14
|
+
readonly id: "claude-opus-5";
|
|
15
|
+
readonly label: "Opus 5";
|
|
16
|
+
readonly description: "Opus 5 · 200K context window";
|
|
17
|
+
readonly minimumClaudeCodeVersion: "2.1.219";
|
|
18
|
+
readonly contextWindowMaxTokens: 200000;
|
|
19
|
+
readonly effortLevels: readonly ["low", "medium", "high", "xhigh", "max"];
|
|
20
|
+
readonly supportsThinkingDisabled: true;
|
|
21
|
+
}, {
|
|
22
|
+
readonly id: "claude-fable-5[1m]";
|
|
23
|
+
readonly label: "Fable 5 1M";
|
|
24
|
+
readonly description: "Fable 5 with 1M context window";
|
|
25
|
+
readonly minimumClaudeCodeVersion: "2.1.169";
|
|
26
|
+
readonly contextWindowMaxTokens: 1000000;
|
|
27
|
+
readonly effortLevels: readonly ["low", "medium", "high", "xhigh", "max"];
|
|
28
|
+
}, {
|
|
5
29
|
readonly id: "claude-fable-5";
|
|
6
30
|
readonly label: "Fable 5";
|
|
7
31
|
readonly description: "Fable 5 · Most powerful model";
|
|
8
|
-
readonly
|
|
32
|
+
readonly minimumClaudeCodeVersion: "2.1.169";
|
|
33
|
+
readonly contextWindowMaxTokens: 200000;
|
|
9
34
|
readonly effortLevels: readonly ["low", "medium", "high", "xhigh", "max"];
|
|
10
35
|
}, {
|
|
11
36
|
readonly id: "claude-opus-4-8[1m]";
|
|
@@ -18,8 +43,8 @@ export declare const CLAUDE_MODEL_MANIFEST: readonly [{
|
|
|
18
43
|
}, {
|
|
19
44
|
readonly id: "claude-opus-4-8";
|
|
20
45
|
readonly label: "Opus 4.8";
|
|
21
|
-
readonly description: "Opus 4.8 ·
|
|
22
|
-
readonly
|
|
46
|
+
readonly description: "Opus 4.8 · Previous release";
|
|
47
|
+
readonly defaultPriority: 1;
|
|
23
48
|
readonly contextWindowMaxTokens: 200000;
|
|
24
49
|
readonly effortLevels: readonly ["low", "medium", "high", "xhigh", "max"];
|
|
25
50
|
readonly supportsThinkingDisabled: true;
|
|
@@ -28,6 +53,13 @@ export declare const CLAUDE_MODEL_MANIFEST: readonly [{
|
|
|
28
53
|
readonly id: "claude-sonnet-5";
|
|
29
54
|
readonly label: "Sonnet 5";
|
|
30
55
|
readonly description: "Sonnet 5 · Best for everyday tasks";
|
|
56
|
+
readonly contextWindowMaxTokens: 200000;
|
|
57
|
+
readonly effortLevels: readonly ["low", "medium", "high", "xhigh", "max"];
|
|
58
|
+
readonly supportsThinkingDisabled: true;
|
|
59
|
+
}, {
|
|
60
|
+
readonly id: "claude-sonnet-5[1m]";
|
|
61
|
+
readonly label: "Sonnet 5 1M";
|
|
62
|
+
readonly description: "Sonnet 5 with 1M context window";
|
|
31
63
|
readonly contextWindowMaxTokens: 1000000;
|
|
32
64
|
readonly effortLevels: readonly ["low", "medium", "high", "xhigh", "max"];
|
|
33
65
|
readonly supportsThinkingDisabled: true;
|
|
@@ -83,7 +115,8 @@ export declare const CLAUDE_MODEL_MANIFEST: readonly [{
|
|
|
83
115
|
readonly description: "Haiku 4.5 · Fastest for quick answers";
|
|
84
116
|
readonly contextWindowMaxTokens: 200000;
|
|
85
117
|
}];
|
|
86
|
-
export declare function getClaudeManifestModels(): AgentModelDefinition[];
|
|
118
|
+
export declare function getClaudeManifestModels(claudeCodeVersion?: string): AgentModelDefinition[];
|
|
119
|
+
export declare function parseClaudeCodeVersion(value: string): [number, number, number] | null;
|
|
87
120
|
export interface ClaudeDisabledThinkingResolution {
|
|
88
121
|
supported: boolean;
|
|
89
122
|
fallbackThinkingOptionId: string | undefined;
|
|
@@ -12,11 +12,39 @@ const CLAUDE_EFFORT_LABELS = {
|
|
|
12
12
|
export const CLAUDE_DISABLED_THINKING_OPTION_ID = "off";
|
|
13
13
|
export const CLAUDE_ULTRACODE_THINKING_OPTION_ID = "ultracode";
|
|
14
14
|
export const CLAUDE_MODEL_MANIFEST = [
|
|
15
|
+
{
|
|
16
|
+
id: "claude-opus-5[1m]",
|
|
17
|
+
label: "Opus 5 1M",
|
|
18
|
+
description: "Opus 5 with 1M context window",
|
|
19
|
+
defaultPriority: 2,
|
|
20
|
+
minimumClaudeCodeVersion: "2.1.219",
|
|
21
|
+
contextWindowMaxTokens: 1000000,
|
|
22
|
+
effortLevels: CLAUDE_EFFORT_LEVELS.xhigh,
|
|
23
|
+
supportsThinkingDisabled: true,
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: "claude-opus-5",
|
|
27
|
+
label: "Opus 5",
|
|
28
|
+
description: "Opus 5 · 200K context window",
|
|
29
|
+
minimumClaudeCodeVersion: "2.1.219",
|
|
30
|
+
contextWindowMaxTokens: 200000,
|
|
31
|
+
effortLevels: CLAUDE_EFFORT_LEVELS.xhigh,
|
|
32
|
+
supportsThinkingDisabled: true,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: "claude-fable-5[1m]",
|
|
36
|
+
label: "Fable 5 1M",
|
|
37
|
+
description: "Fable 5 with 1M context window",
|
|
38
|
+
minimumClaudeCodeVersion: "2.1.169",
|
|
39
|
+
contextWindowMaxTokens: 1000000,
|
|
40
|
+
effortLevels: CLAUDE_EFFORT_LEVELS.xhigh,
|
|
41
|
+
},
|
|
15
42
|
{
|
|
16
43
|
id: "claude-fable-5",
|
|
17
44
|
label: "Fable 5",
|
|
18
45
|
description: "Fable 5 · Most powerful model",
|
|
19
|
-
|
|
46
|
+
minimumClaudeCodeVersion: "2.1.169",
|
|
47
|
+
contextWindowMaxTokens: 200000,
|
|
20
48
|
effortLevels: CLAUDE_EFFORT_LEVELS.xhigh,
|
|
21
49
|
},
|
|
22
50
|
{
|
|
@@ -31,8 +59,8 @@ export const CLAUDE_MODEL_MANIFEST = [
|
|
|
31
59
|
{
|
|
32
60
|
id: "claude-opus-4-8",
|
|
33
61
|
label: "Opus 4.8",
|
|
34
|
-
description: "Opus 4.8 ·
|
|
35
|
-
|
|
62
|
+
description: "Opus 4.8 · Previous release",
|
|
63
|
+
defaultPriority: 1,
|
|
36
64
|
contextWindowMaxTokens: 200000,
|
|
37
65
|
effortLevels: CLAUDE_EFFORT_LEVELS.xhigh,
|
|
38
66
|
supportsThinkingDisabled: true,
|
|
@@ -42,6 +70,14 @@ export const CLAUDE_MODEL_MANIFEST = [
|
|
|
42
70
|
id: "claude-sonnet-5",
|
|
43
71
|
label: "Sonnet 5",
|
|
44
72
|
description: "Sonnet 5 · Best for everyday tasks",
|
|
73
|
+
contextWindowMaxTokens: 200000,
|
|
74
|
+
effortLevels: CLAUDE_EFFORT_LEVELS.xhigh,
|
|
75
|
+
supportsThinkingDisabled: true,
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
id: "claude-sonnet-5[1m]",
|
|
79
|
+
label: "Sonnet 5 1M",
|
|
80
|
+
description: "Sonnet 5 with 1M context window",
|
|
45
81
|
contextWindowMaxTokens: 1000000,
|
|
46
82
|
effortLevels: CLAUDE_EFFORT_LEVELS.xhigh,
|
|
47
83
|
supportsThinkingDisabled: true,
|
|
@@ -121,27 +157,55 @@ function buildThinkingOptions(effortLevels, supportsThinkingDisabled) {
|
|
|
121
157
|
}
|
|
122
158
|
return options;
|
|
123
159
|
}
|
|
124
|
-
export function getClaudeManifestModels() {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
160
|
+
export function getClaudeManifestModels(claudeCodeVersion) {
|
|
161
|
+
const availableModels = CLAUDE_MODEL_MANIFEST.filter((model) => isModelAvailableInClaudeCode(model, claudeCodeVersion));
|
|
162
|
+
const defaultModel = availableModels.reduce((selected, candidate) => (candidate.defaultPriority ?? 0) > (selected?.defaultPriority ?? 0) ? candidate : selected, undefined);
|
|
163
|
+
return availableModels.map((model) => {
|
|
164
|
+
const thinkingOptions = buildThinkingOptions(model.effortLevels, model.supportsThinkingDisabled === true);
|
|
165
|
+
const definition = {
|
|
128
166
|
provider: "claude",
|
|
129
167
|
id: model.id,
|
|
130
168
|
label: model.label,
|
|
131
169
|
description: model.description,
|
|
132
|
-
...("isDefault" in model && model.isDefault ? { isDefault: true } : {}),
|
|
133
|
-
...(model.contextWindowMaxTokens !== undefined
|
|
134
|
-
? { contextWindowMaxTokens: model.contextWindowMaxTokens }
|
|
135
|
-
: {}),
|
|
136
|
-
...(thinkingOptions
|
|
137
|
-
? {
|
|
138
|
-
thinkingOptions,
|
|
139
|
-
defaultThinkingOptionId: "effortLevels" in model ? model.effortLevels?.[0] : undefined,
|
|
140
|
-
}
|
|
141
|
-
: {}),
|
|
142
170
|
};
|
|
171
|
+
if (model === defaultModel) {
|
|
172
|
+
definition.isDefault = true;
|
|
173
|
+
}
|
|
174
|
+
if (model.contextWindowMaxTokens !== undefined) {
|
|
175
|
+
definition.contextWindowMaxTokens = model.contextWindowMaxTokens;
|
|
176
|
+
}
|
|
177
|
+
if (thinkingOptions) {
|
|
178
|
+
definition.thinkingOptions = thinkingOptions;
|
|
179
|
+
definition.defaultThinkingOptionId = model.effortLevels?.[0];
|
|
180
|
+
}
|
|
181
|
+
return definition;
|
|
143
182
|
});
|
|
144
183
|
}
|
|
184
|
+
function isModelAvailableInClaudeCode(model, claudeCodeVersion) {
|
|
185
|
+
if (!model.minimumClaudeCodeVersion || claudeCodeVersion === undefined) {
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
return compareVersions(claudeCodeVersion, model.minimumClaudeCodeVersion) >= 0;
|
|
189
|
+
}
|
|
190
|
+
function compareVersions(left, right) {
|
|
191
|
+
const leftParts = parseClaudeCodeVersion(left);
|
|
192
|
+
const rightParts = parseClaudeCodeVersion(right);
|
|
193
|
+
if (!leftParts || !rightParts) {
|
|
194
|
+
return -1;
|
|
195
|
+
}
|
|
196
|
+
for (let index = 0; index < leftParts.length; index += 1) {
|
|
197
|
+
const difference = leftParts[index] - rightParts[index];
|
|
198
|
+
if (difference !== 0) {
|
|
199
|
+
return difference;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return 0;
|
|
203
|
+
}
|
|
204
|
+
export function parseClaudeCodeVersion(value) {
|
|
205
|
+
const match = value.match(/\b(\d+)\.(\d+)\.(\d+)\s+\(Claude Code\)/i) ??
|
|
206
|
+
value.match(/\b(\d+)\.(\d+)\.(\d+)\b/);
|
|
207
|
+
return match ? [Number(match[1]), Number(match[2]), Number(match[3])] : null;
|
|
208
|
+
}
|
|
145
209
|
/**
|
|
146
210
|
* Resolve the disabled-thinking capability from the curated manifest only. Runtime/provider
|
|
147
211
|
* model aliases intentionally do not inherit this capability.
|
|
@@ -180,15 +244,15 @@ export function normalizeClaudeManifestModelId(value) {
|
|
|
180
244
|
if (isClaudeManifestModelId(trimmed)) {
|
|
181
245
|
return trimmed;
|
|
182
246
|
}
|
|
183
|
-
const singleSegmentMatch = trimmed.match(/^(?:claude[-_ ])?(fable|opus|sonnet|haiku)[-_ ]+(\d+)(
|
|
247
|
+
const singleSegmentMatch = trimmed.match(/^(?:claude[-_ ])?(fable|opus|sonnet|haiku)[-_ ]+(\d+)(?:\[1m\])?(?:[-_ ]+\d{8})?(?:\[1m\])?$/i);
|
|
184
248
|
if (singleSegmentMatch) {
|
|
185
249
|
return normalizeSingleSegmentClaudeModelId(singleSegmentMatch[1], singleSegmentMatch[2], trimmed.toLowerCase().includes("[1m]"));
|
|
186
250
|
}
|
|
187
|
-
const runtimeMatch = trimmed.match(/^(?:claude[-_ ])?(opus|sonnet|haiku)[-_ ]+(\d+)[-.](\d+)(
|
|
251
|
+
const runtimeMatch = trimmed.match(/^(?:claude[-_ ])?(opus|sonnet|haiku)[-_ ]+(\d+)[-.](\d+)(?:\[1m\])?(?:[-_ ]+\d{8})?(?:\[1m\])?$/i);
|
|
188
252
|
if (!runtimeMatch) {
|
|
189
253
|
return null;
|
|
190
254
|
}
|
|
191
|
-
return normalizeMajorMinorClaudeModelId(runtimeMatch[1], runtimeMatch[2], runtimeMatch[3],
|
|
255
|
+
return normalizeMajorMinorClaudeModelId(runtimeMatch[1], runtimeMatch[2], runtimeMatch[3], trimmed.toLowerCase().includes("[1m]"));
|
|
192
256
|
}
|
|
193
257
|
/**
|
|
194
258
|
* Normalize a Claude Code runtime/config model string to a known manifest ID.
|
|
@@ -206,7 +270,7 @@ export function normalizeClaudeRuntimeModelId(value) {
|
|
|
206
270
|
}
|
|
207
271
|
const singleSegmentMatch = trimmed.match(/claude[-_ ](fable|opus|sonnet|haiku)[-_ ]+(\d+)(\[1m\])?/i);
|
|
208
272
|
if (singleSegmentMatch) {
|
|
209
|
-
const normalizedModelId = normalizeSingleSegmentClaudeModelId(singleSegmentMatch[1], singleSegmentMatch[2],
|
|
273
|
+
const normalizedModelId = normalizeSingleSegmentClaudeModelId(singleSegmentMatch[1], singleSegmentMatch[2], trimmed.toLowerCase().includes("[1m]"));
|
|
210
274
|
if (normalizedModelId) {
|
|
211
275
|
return normalizedModelId;
|
|
212
276
|
}
|
|
@@ -215,7 +279,7 @@ export function normalizeClaudeRuntimeModelId(value) {
|
|
|
215
279
|
if (!runtimeMatch) {
|
|
216
280
|
return null;
|
|
217
281
|
}
|
|
218
|
-
return normalizeMajorMinorClaudeModelId(runtimeMatch[1], runtimeMatch[2], runtimeMatch[3],
|
|
282
|
+
return normalizeMajorMinorClaudeModelId(runtimeMatch[1], runtimeMatch[2], runtimeMatch[3], trimmed.toLowerCase().includes("[1m]"));
|
|
219
283
|
}
|
|
220
284
|
function normalizeSingleSegmentClaudeModelId(familyValue, major, hasOneMillionContext) {
|
|
221
285
|
const family = familyValue.toLowerCase();
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Logger } from "pino";
|
|
2
2
|
import type { AgentModelDefinition } from "../../agent-sdk-types.js";
|
|
3
|
-
export declare function getClaudeModels(): AgentModelDefinition[];
|
|
3
|
+
export declare function getClaudeModels(claudeCodeVersion?: string): AgentModelDefinition[];
|
|
4
4
|
export declare function findClaudeModel(modelId: string | null | undefined): AgentModelDefinition | undefined;
|
|
5
|
-
export declare function getClaudeModelsWithSettings(logger: Logger, configDir?: string): Promise<AgentModelDefinition[]>;
|
|
5
|
+
export declare function getClaudeModelsWithSettings(logger: Logger, configDir?: string, claudeCodeVersion?: string): Promise<AgentModelDefinition[]>;
|
|
6
6
|
/**
|
|
7
7
|
* Normalize a runtime model string (from SDK init message) to a known model ID.
|
|
8
8
|
* Handles the `[1m]` suffix that the SDK appends for 1M context sessions.
|
|
@@ -9,8 +9,8 @@ const CLAUDE_SETTINGS_MODEL_ENV_KEYS = [
|
|
|
9
9
|
"ANTHROPIC_DEFAULT_SONNET_MODEL",
|
|
10
10
|
"ANTHROPIC_DEFAULT_HAIKU_MODEL",
|
|
11
11
|
];
|
|
12
|
-
export function getClaudeModels() {
|
|
13
|
-
return getClaudeManifestModels();
|
|
12
|
+
export function getClaudeModels(claudeCodeVersion) {
|
|
13
|
+
return getClaudeManifestModels(claudeCodeVersion);
|
|
14
14
|
}
|
|
15
15
|
export function findClaudeModel(modelId) {
|
|
16
16
|
const normalizedModelId = normalizeClaudeRuntimeModelId(modelId);
|
|
@@ -19,8 +19,8 @@ export function findClaudeModel(modelId) {
|
|
|
19
19
|
}
|
|
20
20
|
return getClaudeModels().find((model) => model.id === normalizedModelId);
|
|
21
21
|
}
|
|
22
|
-
export async function getClaudeModelsWithSettings(logger, configDir) {
|
|
23
|
-
const hardcodedModels = getClaudeModels();
|
|
22
|
+
export async function getClaudeModelsWithSettings(logger, configDir, claudeCodeVersion) {
|
|
23
|
+
const hardcodedModels = getClaudeModels(claudeCodeVersion);
|
|
24
24
|
const settingsModels = await readClaudeSettingsModels(logger, configDir);
|
|
25
25
|
if (settingsModels.length === 0) {
|
|
26
26
|
return hardcodedModels;
|
|
@@ -15059,7 +15059,7 @@ __d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{v
|
|
|
15059
15059
|
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),Object.defineProperty(e,"decodeOfferFragmentPayload",{enumerable:!0,get:function(){return n.decodeOfferFragmentPayload}}),Object.defineProperty(e,"buildDaemonWebSocketUrl",{enumerable:!0,get:function(){return t.buildDaemonWebSocketUrl}}),Object.defineProperty(e,"deriveLabelFromEndpoint",{enumerable:!0,get:function(){return t.deriveLabelFromEndpoint}}),Object.defineProperty(e,"extractHostPortFromWebSocketUrl",{enumerable:!0,get:function(){return t.extractHostPortFromWebSocketUrl}}),Object.defineProperty(e,"normalizeHostPort",{enumerable:!0,get:function(){return t.normalizeHostPort}}),Object.defineProperty(e,"parseConnectionUri",{enumerable:!0,get:function(){return t.parseConnectionUri}}),Object.defineProperty(e,"parseHostPort",{enumerable:!0,get:function(){return t.parseHostPort}}),Object.defineProperty(e,"serializeConnectionUri",{enumerable:!0,get:function(){return t.serializeConnectionUri}}),Object.defineProperty(e,"serializeConnectionUriForStorage",{enumerable:!0,get:function(){return t.serializeConnectionUriForStorage}}),Object.defineProperty(e,"shouldUseTlsForDefaultHostedRelay",{enumerable:!0,get:function(){return t.shouldUseTlsForDefaultHostedRelay}}),e.buildRelayWebSocketUrl=function(n){return(0,t.buildRelayWebSocketUrl)(Object.assign({},n,{role:"client"}))};var t=r(d[0]),n=r(d[1])},3414,[3393,3415]);
|
|
15060
15060
|
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),Object.defineProperty(e,"ConnectionOfferV2Schema",{enumerable:!0,get:function(){return t}}),Object.defineProperty(e,"ConnectionOfferSchema",{enumerable:!0,get:function(){return o}}),e.decodeOfferFragmentPayload=l,e.parseConnectionOfferFromUrl=function(n){const t=f(n);if(!t)return null;const c=l(t);return o.parse(c)};var n=r(d[0]);const t=n.z.object({v:n.z.literal(2),serverId:n.z.string().min(1),daemonPublicKeyB64:n.z.string().min(1),relay:n.z.object({endpoint:n.z.string().min(1),useTls:n.z.boolean().optional()})}),o=t;function c(n){const t=n.replace(/-/g,"+").replace(/_/g,"/"),o=t.padEnd(t.length+(4-t.length%4)%4,"="),c=globalThis.atob(o),l=Uint8Array.from(c,n=>n.charCodeAt(0));return new TextDecoder("utf-8",{fatal:!0}).decode(l)}function l(n){const t=c(n);return JSON.parse(t)}const u="#offer=";function f(n){const t=n.trim();if(!t)return null;const o=t.indexOf(u);if(-1===o)return null;const c=t.slice(o+u.length).trim();return c.length>0?c:null}},3415,[3279]);
|
|
15061
15061
|
__d(function(g,r,i,a,m,_e,d){"use strict";function e(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(_e,'__esModule',{value:!0}),_e.resolveAppVersion=function(){const e=u(t.default?.version);if(e)return e;const o=u(n.default.expoConfig?.version);if(o)return o;const f=u(n.default.manifest?.version);if(f)return f;return null};var n=e(r(d[0])),t=e(r(d[1]));function u(e){if("string"!=typeof e)return null;const n=e.trim();return 0===n.length?null:n}},3416,[1006,3417]);
|
|
15062
|
-
__d(function(e,t,r,a,o,i,n){o.exports={name:"@getpaseo/app",version:"0.2.
|
|
15062
|
+
__d(function(e,t,r,a,o,i,n){o.exports={name:"@getpaseo/app",version:"0.2.2",private:!0,main:"index.ts",scripts:{start:"npm run start:expo","start:expo":"cross-env APP_VARIANT=development expo start","reset-project":"node ./scripts/reset-project.js","eas-build-post-install":"npm --prefix ../.. run build:app-deps && npm run build:terminal-webview",android:"npm run android:development","android:development":"npm --prefix ../.. run build:client && cross-env APP_VARIANT=development expo prebuild --platform android --non-interactive && cross-env APP_VARIANT=development expo run:android --variant=debug","android:production":"npm --prefix ../.. run build:client && cross-env APP_VARIANT=production expo prebuild --platform android --non-interactive && cross-env APP_VARIANT=production expo run:android --variant=release","android:release":"npm run android:production","android:clear":"node -e \"require('node:fs').rmSync('android', { recursive: true, force: true })\"",ios:"npm --prefix ../.. run build:client && expo run:ios","ios:release":"npm --prefix ../.. run build:client && expo run:ios --configuration Release",web:"npm --prefix ../.. run build:client && concurrently --kill-others --names protocol,client,expo --prefix-colors yellow,blue,magenta \"npm --prefix ../.. run watch:protocol\" \"npm --prefix ../.. run watch:client\" \"npm run web:expo\"","web:expo":"expo start --web",lint:"expo lint",typecheck:"tsgo --noEmit",test:"vitest run","test:browser":"vitest run --project browser","test:e2e":"playwright test --project='Desktop Chrome'","test:e2e:desktop":"cross-env E2E_DESKTOP_RUNTIME=1 playwright test --project='Desktop Chrome' e2e/project-picker-desktop.spec.ts","test:e2e:real":"cross-env E2E_FORK_PASEO_HOME_FROM=../../.dev/paseo-home playwright test --project=real-provider","test:e2e:ui":"playwright test --ui",build:"npm run build:web","build:web":"npm --prefix ../.. run build:app-deps && expo export --platform web","profile:workspace-tabs":"node ./scripts/profile-workspace-tabs.mjs","deploy:web":"npm run build:web && wrangler pages deploy dist --project-name paseo-app --branch main","build:terminal-webview":"node ./scripts/build-terminal-webview-html.mjs"},dependencies:{"@codemirror/commands":"6.10.4","@codemirror/language":"6.12.4","@codemirror/search":"6.7.1","@codemirror/state":"6.7.1","@codemirror/view":"6.43.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@floating-ui/react-native":"^0.10.7","@getpaseo/client":"*","@getpaseo/expo-two-way-audio":"*","@getpaseo/highlight":"*","@getpaseo/protocol":"*","@gorhom/bottom-sheet":"^5.2.14","@gorhom/portal":"^1.0.14","@react-native-async-storage/async-storage":"2.2.0","@react-native-masked-view/masked-view":"^0.3.2","@react-native/normalize-colors":"^0.81.5","@react-navigation/native":"^7.1.8","@replit/codemirror-vim":"6.3.0","@tanstack/react-query":"^5.90.11","@tanstack/react-virtual":"^3.13.21","@xterm/addon-clipboard":"^0.3.0-beta.213","@xterm/addon-fit":"^0.12.0-beta.213","@xterm/addon-image":"^0.10.0-beta.213","@xterm/addon-ligatures":"^0.11.0-beta.213","@xterm/addon-search":"^0.17.0-beta.213","@xterm/addon-unicode11":"^0.10.0-beta.213","@xterm/addon-web-links":"^0.13.0-beta.213","@xterm/addon-webgl":"^0.20.0-beta.212","@xterm/xterm":"^6.1.0-beta.213",buffer:"^6.0.3",expo:"^54.0.18","expo-asset":"~12.0.12","expo-audio":"~1.0.13","expo-build-properties":"^1.0.9","expo-camera":"~17.0.10","expo-clipboard":"~8.0.7","expo-constants":"~18.0.9","expo-crypto":"^15.0.8","expo-dev-client":"^6.0.15","expo-document-picker":"~14.0.8","expo-file-system":"~19.0.17","expo-haptics":"~15.0.7","expo-image":"~3.0.10","expo-image-manipulator":"~14.0.8","expo-image-picker":"^17.0.8","expo-keep-awake":"^15.0.7","expo-linking":"~8.0.8","expo-localization":"~17.0.9","expo-notifications":"^0.32.16","expo-router":"~6.0.13","expo-sharing":"^14.0.8","expo-splash-screen":"~31.0.10","expo-system-ui":"~6.0.7","expo-updates":"~29.0.12","fast-deep-equal":"^3.1.3",htmlparser2:"^12.0.0",i18next:"^26.3.0","lucide-react-native":"^0.546.0","markdown-it":"^10.0.0","mnemonic-id":"^3.2.7",qrcode:"^1.5.4",react:"19.1.0","react-dom":"19.1.0","react-i18next":"^17.0.8","react-native":"0.81.5","react-native-draggable-flatlist":"^4.0.3","react-native-edge-to-edge":"^1.7.0","react-native-gesture-handler":"~2.28.0","react-native-keyboard-controller":"^1.19.2","react-native-markdown-display":"^7.0.2","react-native-nitro-modules":"0.35.5","react-native-reanimated":"~4.3.1","react-native-safe-area-context":"~5.6.0","react-native-screens":"~4.16.0","react-native-svg":"^15.14.0","react-native-uitextview":"^2.2.0","react-native-unistyles":"^3.2.4","react-native-web":"~0.21.0","react-native-webview":"^13.16.0","react-native-worklets":"~0.8.3","tiny-invariant":"^1.3.3","use-sync-external-store":"^1.6.0",zod:"^4.4.3",zustand:"^5.0.9"},devDependencies:{"@playwright/test":"^1.56.1","@testing-library/dom":"^10.4.1","@testing-library/react":"^16.3.2","@types/markdown-it":"^14.1.2","@types/qrcode":"^1.5.6","@types/react":"~19.2.0","@types/ws":"^8.18.1","@vitest/browser":"^4.1.7","@vitest/browser-playwright":"^4.1.7","@xterm/headless":"^6.1.0-beta.213",dotenv:"^17.2.3","eas-cli":"^16.24.1",eslint:"^9.25.0","eslint-config-expo":"~10.0.0","expo-gradle-jvmargs":"^1.1.2",jsdom:"^20.0.3","material-icon-theme":"^5.32.0",playwright:"^1.56.1","serve-sim":"^0.1.40",typescript:"~5.9.2",vitest:"^4.1.6",wrangler:"^4.105.0",ws:"^8.20.0"}}},3417,[]);
|
|
15063
15063
|
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),e.shouldUseDesktopDaemon=function(){return(0,n.isElectronRuntime)()},e.getDesktopDaemonStatus=async function(){return p(await(0,t.invokeDesktopCommand)("desktop_daemon_status"))},e.startDesktopDaemon=async function(){return p(await(0,t.invokeDesktopCommand)("start_desktop_daemon"))},e.stopDesktopDaemon=async function(n="manual_ipc"){return p(await(0,t.invokeDesktopCommand)("stop_desktop_daemon",{reason:n}))},e.restartDesktopDaemon=async function(){return p(await(0,t.invokeDesktopCommand)("restart_desktop_daemon"))},e.getDesktopDaemonLogs=async function(){return u(await(0,t.invokeDesktopCommand)("desktop_daemon_logs"))},e.getDesktopAppLogs=async function(){const n=await(0,t.invokeDesktopCommand)("desktop_app_logs");if(!o(n))throw new Error("Unexpected desktop app logs response.");return{logPath:s(n.logPath)??"",contents:"string"==typeof n.contents?n.contents:""}},e.getDesktopDaemonPairing=async function(){return k(await(0,t.invokeDesktopCommand)("desktop_daemon_pairing"))},e.getCliDaemonStatus=async function(){const n=await(0,t.invokeDesktopCommand)("cli_daemon_status");if("string"!=typeof n)throw new Error("Unexpected CLI daemon status response.");return n},e.listenToLocalTransportEvents=async function(t){const l=(0,n.getDesktopHost)()?.events?.on;if("function"!=typeof l)throw new Error("Desktop events API is unavailable.");const p=await l("local-daemon-transport-event",n=>{o(n)&&t({sessionId:s(n.sessionId)??"",kind:s(n.kind)??"error",text:s(n.text),binaryBase64:s(n.binaryBase64),code:c(n.code),reason:s(n.reason),error:s(n.error)})});return"function"==typeof p?p:()=>{}},e.openLocalTransportSession=async function(n){const o=await(0,t.invokeDesktopCommand)("open_local_daemon_transport",n);if("string"!=typeof o||0===o.trim().length)throw new Error("Unexpected local transport session response.");return o},e.sendLocalTransportMessage=async function(n){await(0,t.invokeDesktopCommand)("send_local_daemon_transport_message",Object.assign({sessionId:n.sessionId},n.text?{text:n.text}:{},n.binaryBase64?{binaryBase64:n.binaryBase64}:{}))},e.closeLocalTransportSession=async function(n){await(0,t.invokeDesktopCommand)("close_local_daemon_transport",{sessionId:n})},e.getCliInstallStatus=async function(){return f(await(0,t.invokeDesktopCommand)("get_cli_install_status"))},e.installCli=async function(){return f(await(0,t.invokeDesktopCommand)("install_cli"))},e.getSkillsStatus=async function(){return y(await(0,t.invokeDesktopCommand)("get_skills_status"))},e.installSkills=async function(){return y(await(0,t.invokeDesktopCommand)("install_skills"))},e.updateSkills=async function(){return y(await(0,t.invokeDesktopCommand)("update_skills"))},e.uninstallSkills=async function(){return y(await(0,t.invokeDesktopCommand)("uninstall_skills"))};var n=r(d[0]),t=r(d[1]);function o(n){return"object"==typeof n&&null!==n}function s(n){return"string"==typeof n&&n.trim().length>0?n:null}function c(n){return"number"==typeof n&&Number.isFinite(n)?n:null}function l(n){const t=s(n)?.toLowerCase();switch(t){case"starting":return"starting";case"running":return"running";case"errored":case"error":return"errored";default:return"stopped"}}function p(n){if(!o(n))throw new Error("Unexpected desktop daemon status response.");return{serverId:s(n.serverId)??"",status:l(n.status),listen:s(n.listen),hostname:s(n.hostname),pid:c(n.pid),home:s(n.home)??"",version:s(n.version),desktopManaged:!0===n.desktopManaged,error:s(n.error)}}function u(n){if(!o(n))throw new Error("Unexpected desktop daemon logs response.");return{logPath:s(n.logPath)??"",contents:"string"==typeof n.contents?n.contents:""}}function k(n){if(!o(n))throw new Error("Unexpected desktop daemon pairing response.");return{relayEnabled:!0===n.relayEnabled,url:s(n.url),qr:s(n.qr)}}function f(n){if(!o(n))throw new Error("Unexpected install status response.");return{installed:!0===n.installed}}function w(n){switch(n){case"not-installed":case"up-to-date":case"drift":return n;default:throw new Error(`Unexpected skills status state: ${String(n)}`)}}function _(n){if(!o(n))throw new Error("Unexpected skill op response.");const t=s(n.name);if(!t)throw new Error("Skill op missing name.");switch(n.kind){case"add":return{kind:"add",name:t};case"update":return{kind:"update",name:t};case"delete":return{kind:"delete",name:t};default:throw new Error(`Unexpected skill op kind: ${String(n.kind)}`)}}function y(n){if(!o(n))throw new Error("Unexpected skills status response.");const t=Array.isArray(n.ops)?n.ops.map(_):[];return{state:w(n.state),ops:t}}},3418,[3264,3419]);
|
|
15064
15064
|
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),e.invokeDesktopCommand=async function(t,o){const s=(0,n.getDesktopHost)()?.invoke;if("function"!=typeof s)throw new Error("Desktop invoke() is unavailable in this environment.");return await s(t,o)};var n=r(d[0])},3419,[3264]);
|
|
15065
15065
|
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),Object.defineProperty(e,"DaemonConnectionTestError",{enumerable:!0,get:function(){return f}}),e.buildClientConfig=y,e.connectAndProbe=w,e.connectToDaemon=async function(t,o,n=l){return w(await y(t,o?.serverId,o,n),T(t,o),n)};var t=r(d[0]),o=r(d[1]),n=r(d[2]),s=r(d[3]),c=r(d[4]);const l={getClientId:o.getOrCreateClientId,resolveAppVersion:n.resolveAppVersion,createLocalTransportFactory:c.createDesktopLocalDaemonTransportFactory,buildLocalTransportUrl:c.buildLocalDaemonTransportUrl,createClient:o=>new t.DaemonClient(o)};function u(t){if("string"!=typeof t)return null;const o=t.trim();return o.length>0?o:null}function p(t,o){const n=t&&("transport error"===t.toLowerCase()||"transport closed"===t.toLowerCase()),s=o&&("transport error"===o.toLowerCase()||"transport closed"===o.toLowerCase()||"unable to connect"===o.toLowerCase());return n&&o&&!s?o:t||(o||"Unable to connect")}function b(t){if(!t.config.password)return!1;const o=[t.reason,t.lastError].filter(Boolean).join("\n").toLowerCase();return o.includes("401")||o.includes("4001")||o.includes("unauthorized")||o.includes("code 1006")}class f extends Error{constructor(t,o){super(t),this.name="DaemonConnectionTestError",this.reason=o.reason,this.lastError=o.lastError}}async function y(t,o,n,c=l){const u=await c.getClientId(),p=c.createLocalTransportFactory(),b=Object.assign({clientId:u,clientType:"mobile",appVersion:c.resolveAppVersion()??void 0,suppressSendErrors:!0,reconnect:{enabled:!1}},n?.capabilities?{capabilities:n.capabilities}:{},"directSocket"!==t.type&&"directPipe"!==t.type||!p?{}:{transportFactory:p});if("directSocket"===t.type||"directPipe"===t.type)return Object.assign({},b,{url:c.buildLocalTransportUrl({transportType:"directSocket"===t.type?"socket":"pipe",transportPath:t.path})});if("directTcp"===t.type)return Object.assign({},b,{url:(0,s.buildDaemonWebSocketUrl)(t.endpoint,{useTls:t.useTls??!1})},t.password?{password:t.password}:{});if(!o)throw new Error("serverId is required to probe a relay connection");return Object.assign({},b,{url:(0,s.buildRelayWebSocketUrl)({endpoint:t.relayEndpoint,useTls:t.useTls??(0,s.shouldUseTlsForDefaultHostedRelay)(t.relayEndpoint),serverId:o}),e2ee:{enabled:!0,daemonPublicKeyB64:t.daemonPublicKeyB64}})}function w(t,o,n=l){const s=n.createClient(t);return new Promise((n,c)=>{const l=setTimeout(()=>{s.close().catch(()=>{}),c(new f("Connection timed out",{reason:"Connection timed out",lastError:s.lastError??null}))},o);s.connect().then(()=>{clearTimeout(l);const t=s.getLastServerInfoMessage();if(!t)return s.close().catch(()=>{}),void c(new f("Missing server info message",{reason:"Missing server info message",lastError:s.lastError??null}));n({client:s,serverId:t.serverId,hostname:t.hostname})}).catch(o=>{clearTimeout(l);const n=u(o instanceof Error?o.message:String(o)),y=u(s.lastError),w=b({config:t,reason:n,lastError:y})?"Incorrect password":p(n,y);s.close().catch(()=>{}),c(new f(w,{reason:n,lastError:y}))})})}function T(t,o){return o?.timeoutMs?o.timeoutMs:"relay"===t.type?1e4:6e3}},3420,[3375,3421,3416,3414,3422]);
|
|
Binary file
|
|
Binary file
|
|
@@ -85,6 +85,6 @@
|
|
|
85
85
|
<body>
|
|
86
86
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
|
87
87
|
<div id="root"></div>
|
|
88
|
-
<script src="/_expo/static/js/web/index-
|
|
88
|
+
<script src="/_expo/static/js/web/index-df2ab43bd83b09b00e92c1bb91d425eb.js" defer></script>
|
|
89
89
|
</body>
|
|
90
90
|
</html>
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getpaseo/server",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "Paseo backend server",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist/server",
|
|
@@ -65,12 +65,12 @@
|
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
67
|
"@agentclientprotocol/sdk": "^0.17.1",
|
|
68
|
-
"@anthropic-ai/claude-agent-sdk": "^0.3.
|
|
68
|
+
"@anthropic-ai/claude-agent-sdk": "^0.3.220",
|
|
69
69
|
"@anthropic-ai/sdk": "^0.104.2",
|
|
70
|
-
"@getpaseo/client": "0.2.
|
|
71
|
-
"@getpaseo/highlight": "0.2.
|
|
72
|
-
"@getpaseo/protocol": "0.2.
|
|
73
|
-
"@getpaseo/relay": "0.2.
|
|
70
|
+
"@getpaseo/client": "0.2.2",
|
|
71
|
+
"@getpaseo/highlight": "0.2.2",
|
|
72
|
+
"@getpaseo/protocol": "0.2.2",
|
|
73
|
+
"@getpaseo/relay": "0.2.2",
|
|
74
74
|
"@isaacs/ttlcache": "^2.1.4",
|
|
75
75
|
"@modelcontextprotocol/sdk": "^1.20.1",
|
|
76
76
|
"@opencode-ai/sdk": "1.14.46",
|