refactor(core,server): 统一模块职责并消除类型重复

- 统一 ToolStatus 类型(Core 导出,Server 引用)
- 重命名 Server SessionManager 为 SessionMetadataManager
- 扩展 Core PermissionContext 添加结构化字段
- 统一 Part 类型导出(Core 定义存储格式,Server 定义展示格式)
- 简化 Message 格式(移除 MergedMessage,统一使用 Message)
- 添加向后兼容的类型别名和 @deprecated 注释
This commit is contained in:
2025-12-16 21:06:41 +08:00
parent 1b7d55848d
commit 0a26c3ab72
15 changed files with 177 additions and 95 deletions
+5
View File
@@ -45,6 +45,8 @@ export type {
Part,
PartType,
ToolPart,
TextPart,
ReasoningPart,
ToolStatus,
ToolState,
TodoItem,
@@ -57,11 +59,14 @@ export type { UserInput, ChatResult } from './types/index.js';
// Permission
export { getPermissionManager } from './permission/index.js';
export type {
PermissionType,
PermissionContext,
PermissionDecision,
PermissionCheckResult,
FilePermissionContext,
FileOperation,
GitPermissionContext,
GitOperation,
WebPermissionContext,
} from './permission/index.js';
@@ -227,6 +227,7 @@ export class BashPermissionChecker implements PermissionChecker {
const decision = await this.askCallback({
...ctx,
permissionType: 'bash',
externalPaths,
});
@@ -273,6 +274,7 @@ export class BashPermissionChecker implements PermissionChecker {
const decision = await this.askCallback({
...ctx,
permissionType: 'bash',
patterns: askPatterns,
});
@@ -262,10 +262,15 @@ export class FilePermissionChecker implements PermissionChecker {
};
}
// 构造兼容的 PermissionContext
// 构造带结构化信息的 PermissionContext
const permCtx: PermissionContext = {
command: `${ctx.operation} ${ctx.path}`,
workdir: ctx.workdir,
permissionType: 'file',
fileOperation: ctx.operation,
filePath: ctx.path,
newContent: ctx.newContent,
oldContent: ctx.oldContent,
patterns: [ctx.operation],
externalPaths: this.isInProjectDirectory(absolutePath) ? undefined : [absolutePath],
};
+7 -1
View File
@@ -178,10 +178,16 @@ export class GitPermissionChecker implements PermissionChecker {
};
}
// 调用回调询问用户
// 调用回调询问用户(带结构化信息)
const decision = await this.askCallback({
command: description,
workdir: process.cwd(),
permissionType: 'git',
gitOperation: ctx.operation,
gitTarget: ctx.target,
gitRemote: ctx.remote,
gitForce: ctx.force,
gitMessage: ctx.message,
});
if (decision.remember) {
+3 -1
View File
@@ -109,10 +109,12 @@ export class WebPermissionChecker implements PermissionChecker {
};
}
// 调用回调询问用户
// 调用回调询问用户(带结构化信息)
const decision = await this.askCallback({
command: `web_search: ${query}`,
workdir: process.cwd(),
permissionType: 'web',
webQuery: query,
});
if (decision.remember) {
+1
View File
@@ -2,6 +2,7 @@ export type {
PermissionAction,
PermissionRule,
BashPermissionConfig,
PermissionType,
PermissionContext,
PermissionCheckResult,
PermissionDecision,
+25 -2
View File
@@ -17,12 +17,35 @@ export interface BashPermissionConfig {
default: PermissionAction;
}
// 权限类型
export type PermissionType = 'bash' | 'file' | 'git' | 'web';
// 权限请求上下文
export interface PermissionContext {
command: string;
workdir: string;
// 必选字段
command: string; // 命令字符串(用于显示和向后兼容)
workdir: string; // 工作目录
// 可选的结构化字段(用于更精确的类型判断)
permissionType?: PermissionType; // 权限类型
patterns?: string[]; // 匹配到的模式
externalPaths?: string[]; // 访问的外部路径
// 文件操作相关(permissionType === 'file' 时使用)
fileOperation?: FileOperation;
filePath?: string;
newContent?: string; // 文件写入/编辑的新内容
oldContent?: string; // 文件编辑时的原内容
// Git 操作相关(permissionType === 'git' 时使用)
gitOperation?: GitOperation;
gitTarget?: string; // 分支名、文件路径等
gitRemote?: string; // 远程仓库名
gitForce?: boolean; // 是否强制操作
gitMessage?: string; // 提交信息等
// Web 操作相关(permissionType === 'web' 时使用)
webQuery?: string; // 搜索查询
}
// 文件操作类型
+18 -1
View File
@@ -11,7 +11,24 @@ export {
createMessageInfo,
} from './message.js';
export type { Part, PartType, ToolStatus, ToolState, ToolPart, TextPart } from './parts.js';
export type {
Part,
PartType,
ToolStatus,
ToolState,
ToolPart,
TextPart,
ReasoningPart,
FilePart,
StepStartPart,
StepFinishPart,
SnapshotPart,
PatchPart,
AgentPart,
SubtaskPart,
CompactionPart,
RetryPart,
} from './parts.js';
export {
PartSchema,
TextPartSchema,