perf(app): reduce startup websocket work
Make provider catalogs compact and content-addressed so repeat launches can reuse the persisted snapshot instead of transferring it again. Remove eager global catalog loading and the stopped-agent defensive tail fetch, while keeping sequence-gap and reconnect recovery as the correctness paths. Add an opt-in production-ID Android profiling build for local startup traces.
This commit is contained in:
@@ -256,7 +256,7 @@ export const AgentFeatureSchema = z.discriminatedUnion("type", [
|
||||
AgentFeatureSelectSchema,
|
||||
]);
|
||||
|
||||
const AgentModelDefinitionSchema: z.ZodType<AgentModelDefinition> = z.object({
|
||||
const AgentModelDefinitionSchema = z.object({
|
||||
provider: AgentProviderSchema,
|
||||
id: z.string(),
|
||||
label: z.string(),
|
||||
@@ -266,7 +266,7 @@ const AgentModelDefinitionSchema: z.ZodType<AgentModelDefinition> = z.object({
|
||||
contextWindowMaxTokens: z.number().optional(),
|
||||
thinkingOptions: z.array(AgentSelectOptionSchema).optional(),
|
||||
defaultThinkingOptionId: z.string().optional(),
|
||||
});
|
||||
}) satisfies z.ZodType<AgentModelDefinition>;
|
||||
|
||||
export const ProviderSnapshotEntrySchema = z.object({
|
||||
provider: AgentProviderSchema,
|
||||
@@ -282,6 +282,29 @@ export const ProviderSnapshotEntrySchema = z.object({
|
||||
defaultModeId: z.string().nullable().optional(),
|
||||
});
|
||||
|
||||
export const CompactProviderSnapshotModelSchema = AgentModelDefinitionSchema.omit({
|
||||
provider: true,
|
||||
thinkingOptions: true,
|
||||
}).extend({
|
||||
thinkingSet: z.number().int().nonnegative().optional(),
|
||||
});
|
||||
|
||||
export const ProviderSnapshotThinkingSetSchema = z.object({
|
||||
options: z.array(AgentSelectOptionSchema),
|
||||
defaultOptionId: z.string().optional(),
|
||||
});
|
||||
|
||||
export const CompactProviderSnapshotEntrySchema = ProviderSnapshotEntrySchema.omit({
|
||||
models: true,
|
||||
}).extend({
|
||||
models: z.array(CompactProviderSnapshotModelSchema).optional(),
|
||||
});
|
||||
|
||||
export const CompactProviderSnapshotSchema = z.object({
|
||||
entries: z.array(CompactProviderSnapshotEntrySchema),
|
||||
thinkingSets: z.array(ProviderSnapshotThinkingSetSchema),
|
||||
});
|
||||
|
||||
const AgentCapabilityFlagsSchema: z.ZodType<AgentCapabilityFlags> = z
|
||||
.object({
|
||||
supportsStreaming: z.boolean(),
|
||||
@@ -1326,6 +1349,8 @@ export const ListAvailableProvidersRequestMessageSchema = z.object({
|
||||
export const GetProvidersSnapshotRequestMessageSchema = z.object({
|
||||
type: z.literal("get_providers_snapshot_request"),
|
||||
cwd: z.string().optional(),
|
||||
// COMPAT(compactProviderSnapshots): old daemons ignore this field and return a full snapshot.
|
||||
ifNoneMatch: z.string().optional(),
|
||||
requestId: z.string(),
|
||||
});
|
||||
|
||||
@@ -4956,6 +4981,9 @@ export const GetProvidersSnapshotResponseMessageSchema = z.object({
|
||||
type: z.literal("get_providers_snapshot_response"),
|
||||
payload: z.object({
|
||||
entries: z.array(ProviderSnapshotEntrySchema),
|
||||
compactSnapshot: CompactProviderSnapshotSchema.optional(),
|
||||
snapshotHash: z.string().optional(),
|
||||
notModified: z.boolean().optional(),
|
||||
generatedAt: z.string(),
|
||||
requestId: z.string(),
|
||||
}),
|
||||
@@ -4967,6 +4995,8 @@ export const ProvidersSnapshotUpdateMessageSchema = z.object({
|
||||
payload: z.object({
|
||||
cwd: z.string().optional(),
|
||||
entries: z.array(ProviderSnapshotEntrySchema),
|
||||
compactSnapshot: CompactProviderSnapshotSchema.optional(),
|
||||
snapshotHash: z.string().optional(),
|
||||
generatedAt: z.string(),
|
||||
}),
|
||||
});
|
||||
@@ -5938,6 +5968,7 @@ export const WSHelloMessageSchema = z.object({
|
||||
[CLIENT_CAPS.terminalReflowableSnapshot]: z.boolean().optional(),
|
||||
[CLIENT_CAPS.providerSubagents]: z.boolean().optional(),
|
||||
[CLIENT_CAPS.projectUpdates]: z.boolean().optional(),
|
||||
[CLIENT_CAPS.compactProviderSnapshots]: z.boolean().optional(),
|
||||
[CLIENT_CAPS.browserHost]: BrowserAutomationHostCapabilitySchema.optional(),
|
||||
})
|
||||
.passthrough()
|
||||
|
||||
Reference in New Issue
Block a user