@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.
@@ -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
- const models = await getClaudeModelsWithSettings(this.logger, this.configDir);
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 contextWindowMaxTokens: 1000000;
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 · Latest release";
22
- readonly isDefault: true;
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
- contextWindowMaxTokens: 1000000,
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 · Latest release",
35
- isDefault: true,
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
- return CLAUDE_MODEL_MANIFEST.map((model) => {
126
- const thinkingOptions = buildThinkingOptions("effortLevels" in model ? model.effortLevels : undefined, "supportsThinkingDisabled" in model && model.supportsThinkingDisabled);
127
- return {
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+)(\[1m\])?(?:[-_ ]+\d{8})?$/i);
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+)(\[1m\])?(?:[-_ ]+\d{8})?$/i);
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], Boolean(runtimeMatch[4]));
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], Boolean(singleSegmentMatch[3]));
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], Boolean(runtimeMatch[4]));
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.0",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,[]);
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]);
@@ -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-16a70779e3dadd2086411dc8018efd32.js" defer></script>
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.0",
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.214",
68
+ "@anthropic-ai/claude-agent-sdk": "^0.3.220",
69
69
  "@anthropic-ai/sdk": "^0.104.2",
70
- "@getpaseo/client": "0.2.0",
71
- "@getpaseo/highlight": "0.2.0",
72
- "@getpaseo/protocol": "0.2.0",
73
- "@getpaseo/relay": "0.2.0",
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",