本项目采用严格的领域驱动设计,将业务逻辑与基础设施完全分离。
src/
├── core/ # 核心领域层(业务逻辑)
│ └── engine/
│ ├── CognitiveProfile.ts # 认知档案领域模型
│ ├── CognitiveBridge.ts # 认知桥梁领域服务
│ └── PromptMiddleware.ts # 提示词中间件(应用服务)
│
├── infra/ # 基础设施层(技术实现)
│ └── dom/
│ ├── RequestInterceptor.ts # DOM 拦截实现
│ └── CircuitBreaker.ts # 熔断器实现
│
├── ui/ # 用户界面层
│ └── shadow/
│ ├── ShadowHost.ts # Shadow DOM 宿主
│ └── FloatingHub.tsx # React UI 组件
│
└── utils/ # 共享工具
├── ErrorBoundary.ts # 错误边界
└── logger.ts # 日志系统
用户按下 Enter / 点击发送按钮
↓
RequestInterceptor.onKeydownCapture (捕获阶段)
↓
event.stopImmediatePropagation() 阻止原始事件
↓
RequestInterceptor.processInterception()
↓
PromptMiddleware.process() (异步)
↓
CognitiveBridge.bridge() (分析知识债务)
↓
CognitiveProfileService (更新档案)
↓
返回处理后的提示词
↓
setInputValue() 更新输入框
↓
replayEvent() 重新派发事件
↓
Gemini 接收处理后的提示词
PromptMiddleware 处理提示词
↓
CognitiveBridge 检测主题
↓
分析知识债务和薄弱点
↓
CognitiveProfileService.recordFailure() (如果失败)
↓
CognitiveProfileService.addSessionLog() (记录会话)
↓
CognitiveProfileService.updateKnowledgeDebt() (更新债务)
↓
保存到 chrome.storage.local
职责: 在捕获阶段拦截用户输入,确保原始 React 事件不会触发。
关键特性:
- 使用
addEventListener(..., true)在捕获阶段监听 stopImmediatePropagation()阻止所有后续处理器- 异步处理,等待 PromptMiddleware 完成
- 支持 contenteditable 和 input/textarea
使用示例:
const interceptor = new RequestInterceptor({
inputSelectors: ['div[contenteditable="true"]'],
submitSelectors: ['button[aria-label*="Send"]'],
onIntercept: async (value, element) => {
const processed = await processPrompt(value);
return processed;
}
});职责: 实现递归搜索模式和路径分支逻辑。
关键特性:
- Q1-Q4 认知元架构
- 双路径探索(陷阱路径 vs 第一性原理路径)
- ZPD(最近发展区)调整
- 知识债务集成
处理流程:
- 检测主题
- 构建认知桥梁
- 生成路径分支
- 构建递归搜索提示词
职责: 连接用户的知识债务与提示词生成。
关键特性:
- 知识债务分析
- ZPD 复杂度调整
- 逻辑桥梁构建
- 脚手架策略生成
ZPD 调整逻辑:
- 高弱点 (≥5) → 低复杂度
- 低弱点 (≤1) → 高复杂度
- 根据偏好启发式调整策略
职责: 防止级联故障。
状态机:
CLOSED: 正常操作OPEN: 失败过多,拒绝请求HALF_OPEN: 测试恢复
阈值:
- 失败阈值: 3 次
- 恢复时间: 30 秒
职责: 管理 Shadow DOM,防止 CSS 泄漏。
关键特性:
- 完全隔离的样式
- 支持自定义样式注入
- React 组件支持
- RequestInterceptor: 捕获拦截错误
- CircuitBreaker: 防止级联故障
- ErrorBoundary: 全局错误捕获
- Logger: 错误记录和存储
- 拦截失败: 允许原始输入通过
- 处理失败: 返回 null,允许原始输入
- 熔断开启: 直接允许原始输入
- UI 错误: 显示错误状态,不影响核心功能
存储在 chrome.storage.local 中:
{
weakPoints: Map<string, number>, // 主题 -> 失败频率
preferredHeuristics: 'visual' | ..., // 偏好启发式
sessionLogs: SessionLog[], // 会话日志
knowledgeDebt: Map<string, number>, // 概念 -> 债务分数
totalSessions: number,
averageResponseTime: number
}存储在 chrome.storage.local 中:
ltc_active: boolean - 是否激活ltc_mode: string - 当前模式ltc_protocols: ProtocolMap - 协议定义
- Core: 纯业务逻辑,无 DOM 依赖
- Infra: 技术实现细节
- UI: 用户界面,通过接口与 Core 通信
- Core 层定义接口
- Infra 层实现接口
- UI 层依赖 Core 接口
每个类只有一个职责:
RequestInterceptor: 只负责拦截PromptMiddleware: 只负责提示词处理CognitiveBridge: 只负责知识债务分析
- 对扩展开放:可以添加新的协议、新的拦截策略
- 对修改封闭:核心逻辑不需要修改
- 在
src/content/main.ts的getDefaultProtocols()中添加 - 实现 Q1-Q4 逻辑
- UI 自动显示新协议选项
- 扩展
RequestInterceptor的选择器 - 实现自定义
onIntercept逻辑 - 集成到主流程
- 在
src/ui/shadow/创建新组件 - 使用
ShadowHost挂载 - 通过 React 渲染
- 错误处理: 所有异步操作必须包装在 ErrorBoundary 中
- 日志记录: 关键操作必须记录日志
- 类型安全: 使用 TypeScript 严格模式
- 性能: 避免阻塞主线程
- 测试: 关键路径必须有错误处理
// 在扩展控制台
chrome.storage.local.get('ltc_logs', console.log);chrome.storage.local.get('ltc_cognitive_profile', console.log);chrome.storage.local.get('ltc_errors', console.log);// 在 content script 控制台
circuitBreaker.reset();