重构: 应用状态拆分+事件分发统一+路径授权治本

三项治本性架构重构,解决长期遗留的技术债:

一、应用状态文件拆分(原 1416 行单文件 → 按职责分模块)
- 文件授权白名单(AllowedDirs/路径校验/黑名单)独立成模块
- 知识库行为配置(ExtractTrigger/KnowledgeConfig/KV 常量)独立成模块
- LLM 并发控制(LlmConcurrency 双层信号量)独立成模块
- 主文件仅保留 AppState 结构体与初始化逻辑

二、事件分发器统一(消除双监听器架构隐患)
- 压缩/清空等 5 类生命周期事件纳入主事件联合类型
- 删除上下文管理模块的独立第二监听器
- 改为由主事件分发器统一处理,经回调注入副作用
- 架构保证:一个事件源 → 一个监听器 → 一个分发器

三、路径授权去除编译期硬编码(分发适配治本)
- 启动时不再硬塞编译机路径到授权白名单
- 工程根授权完全靠项目绑定目录自动授权 + 设置页手动配置
- 分发到其他机器后不再有脏白名单数据
This commit is contained in:
2026-06-28 23:35:38 +08:00
parent 696e34407c
commit 996f1d9e5f
8 changed files with 967 additions and 873 deletions

View File

@@ -409,6 +409,19 @@ export type AiChatEvent = ({
} | {
// F-260616-07: 流式调用自动重试提示(前端可在错误气泡内显示「重试 n/m」)
type: 'AiStreamRetry'; attempt: number; max_attempts: number
} | {
// F-15 上下文管理生命周期事件(原 useAiContext 独立监听器,现合入统一分发器)
// 后端在手动/自动压缩、清空上下文时 emit,前端据此复位 loading + toast/刷新。
type: 'AiCompressing'
} | {
// 手动压缩成功(IPC compressContext 完成后 emit):带摘要供前端回填 system 消息
type: 'AiManualCompressed'; summary: string
} | {
// 自动压缩成功(loop 内超预算压缩):前端静默复位 loading(不弹 toast,不打断流)
type: 'AiAutoCompressed'; summary: string
} | {
// 上下文已清空:前端刷新消息列表 + toast 提示
type: 'AiContextCleared'
}) & {
conversation_id?: string
}