refactor(core,server): 统一模块职责并消除类型重复
- 统一 ToolStatus 类型(Core 导出,Server 引用) - 重命名 Server SessionManager 为 SessionMetadataManager - 扩展 Core PermissionContext 添加结构化字段 - 统一 Part 类型导出(Core 定义存储格式,Server 定义展示格式) - 简化 Message 格式(移除 MergedMessage,统一使用 Message) - 添加向后兼容的类型别名和 @deprecated 注释
This commit is contained in:
@@ -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],
|
||||
};
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -2,6 +2,7 @@ export type {
|
||||
PermissionAction,
|
||||
PermissionRule,
|
||||
BashPermissionConfig,
|
||||
PermissionType,
|
||||
PermissionContext,
|
||||
PermissionCheckResult,
|
||||
PermissionDecision,
|
||||
|
||||
@@ -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; // 搜索查询
|
||||
}
|
||||
|
||||
// 文件操作类型
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user