feat(vscode-ide-companion): support context left

This commit is contained in:
yiliang114 2025-12-25 23:51:50 +08:00
parent 90bf101040
commit 5cc01e5e09
9 changed files with 333 additions and 68 deletions

View file

@ -101,14 +101,6 @@ class GeminiAgent {
}));
const version = process.env['CLI_VERSION'] || process.version;
const modelName = this.config.getModel();
const modelInfo =
modelName && modelName.length > 0
? {
name: modelName,
contextLimit: tokenLimit(modelName),
}
: undefined;
return {
protocolVersion: acp.PROTOCOL_VERSION,
@ -122,7 +114,6 @@ class GeminiAgent {
currentModeId: currentApprovalMode as ApprovalModeValue,
availableModes,
},
modelInfo,
agentCapabilities: {
loadSession: true,
promptCapabilities: {
@ -175,9 +166,30 @@ class GeminiAgent {
this.setupFileSystem(config);
const session = await this.createAndStoreSession(config);
const configuredModel = (
config.getModel() ||
this.config.getModel() ||
''
).trim();
const modelId = configuredModel || 'default';
const modelName = configuredModel || modelId;
return {
sessionId: session.getId(),
models: {
currentModelId: modelId,
availableModels: [
{
modelId,
name: modelName,
description: null,
_meta: {
contextLimit: tokenLimit(modelId),
},
},
],
_meta: null,
},
};
}

View file

@ -255,8 +255,27 @@ export const authenticateUpdateSchema = z.object({
export type AuthenticateUpdate = z.infer<typeof authenticateUpdateSchema>;
// ACP `_meta` extensibility field: implementations MUST NOT assume keys.
export const acpMetaSchema = z.record(z.unknown()).nullable().optional();
export const modelIdSchema = z.string();
export const modelInfoSchema = z.object({
_meta: acpMetaSchema,
description: z.string().nullable().optional(),
modelId: modelIdSchema,
name: z.string(),
});
export const sessionModelStateSchema = z.object({
_meta: acpMetaSchema,
availableModels: z.array(modelInfoSchema),
currentModelId: modelIdSchema,
});
export const newSessionResponseSchema = z.object({
sessionId: z.string(),
models: sessionModelStateSchema,
});
export const loadSessionResponseSchema = z.null();
@ -418,17 +437,11 @@ export const agentInfoSchema = z.object({
version: z.string(),
});
export const modelInfoSchema = z.object({
name: z.string(),
contextLimit: z.number().optional().nullable(),
});
export const initializeResponseSchema = z.object({
agentCapabilities: agentCapabilitiesSchema,
agentInfo: agentInfoSchema,
authMethods: z.array(authMethodSchema),
modes: modesDataSchema,
modelInfo: modelInfoSchema.optional(),
protocolVersion: z.number(),
});