feat(context): 添加上下文压缩 API 和 UI 组件

Server API:
- 扩展 Agent Adapter 接口添加压缩相关方法
- 新增 context.ts 路由 (GET /sessions/:id/context, POST /sessions/:id/compress)
- 扩展 config.ts 添加摘要模型配置接口 (GET/PUT /config/summary)

UI 组件:
- 新增 ContextUsage 组件显示上下文使用情况
- 扩展 ConfigPanel 添加摘要模型配置区域
- 添加 API 客户端方法和类型定义

Web 集成:
- 在 Chat 页面头部集成 ContextUsage 紧凑模式显示
This commit is contained in:
2025-12-14 20:33:51 +08:00
parent f54f24b079
commit 70a9a154a4
13 changed files with 934 additions and 10 deletions
+64
View File
@@ -45,6 +45,11 @@ import type {
CustomProviderDefinition,
ProviderConfig,
ConnectionTestResult,
// Context & Summary types
ContextUsageInfo,
CompressionResult,
SummaryConfigInfo,
SummaryConfigInput,
} from './types.js';
// Re-export types
@@ -113,6 +118,14 @@ export type {
CustomProviderDefinition,
ProviderConfig,
ConnectionTestResult,
// Context compression types
TokenUsage,
ContextUsageInfo,
CompressionStatus,
CompressionType,
CompressionResult,
SummaryConfigInfo,
SummaryConfigInput,
} from './types.js';
// API Configuration
@@ -936,3 +949,54 @@ export async function deleteProviderModel(
}> {
return request('DELETE', `/providers/${encodeURIComponent(providerId)}/models/${encodeURIComponent(modelId)}`);
}
// ============ Context Compression API ============
/**
* 获取会话上下文使用情况
*/
export async function getContextUsage(sessionId: string): Promise<{
success: boolean;
data?: ContextUsageInfo;
error?: string;
}> {
return request('GET', `/sessions/${encodeURIComponent(sessionId)}/context`);
}
/**
* 触发上下文压缩
*/
export async function compressContext(
sessionId: string,
options?: { force?: boolean }
): Promise<{
success: boolean;
data?: CompressionResult;
error?: string;
}> {
return request('POST', `/sessions/${encodeURIComponent(sessionId)}/compress`, options || {});
}
/**
* 获取摘要模型配置
*/
export async function getSummaryConfig(): Promise<{
success: boolean;
data?: SummaryConfigInfo;
error?: string;
}> {
return request('GET', '/config/summary');
}
/**
* 更新摘要模型配置
*/
export async function updateSummaryConfig(
config: SummaryConfigInput
): Promise<{
success: boolean;
data?: SummaryConfigInfo;
error?: string;
}> {
return request('PUT', '/config/summary', config);
}