本文件是 AI 编程代理在本工作区的最高执行指令。所有代码生成、重构、文档、提交行为必须遵循本文件。规范细则见
docs/standards/。
- 旧项目存档只读:
D:\Program own\aicode\work space\Entropydecrease-old下任何文件不得改动,仅作参照(2026-08-21 目录互换:原项目更名存档)。 - 改动只在主工作区:所有新增/修改必须发生在
D:\Program own\aicode\work space\Entropydecrease -重构区(2026-08-21 目录互换尝试后保留原名——IDE 工作区绑定稳定优先,AGENTS.md 第 2 节不变)。 - 分支规范(2026-08-21 重构完成):开发在
dev分支(重构区本地即dev),发布在main分支(semantic-release 自动发布,branches=["main"]),旧代码存档在old分支(只读,禁止 push 到 old)。重构区的提交推送到https://github.com/Aparencia/Entropydecrease的dev(日常开发)/main(发布)。 - 规范与代码冲突时以规范为准;规范过时时先改规范再改代码。
熵减(Entropydecrease)重构项目:面向技能自学者(化妆/编程/乐理/绘画等一切自我提升领域)的视频知识提取与持久化桌面应用。
- 核心理念:本地优先 + 数据不出本机 + AI 为增强层
- MVP 核心:课堂助手(屏幕+音频捕获 → 本地 ASR 转写 → 本地 OCR → 内容本地拼接 → 笔记)+ 间隔重复闪卡(知识持久化)
- MVP 成功标准:视频知识提取与持久化达到市场级(对标通义听悟/讯飞听见)
- 产品依据:
docs/product/(痛点图谱/MVP 画布/PRD/需求池) - 技术决策依据:
docs/archive/2026-08-19/market-stack-asr-notes-research.md([ ] 已归档,2026-08-19 裁决完成)
| 层 | 选型 | 说明 |
|---|---|---|
| 桌面壳 | Tauri 2 + React + TypeScript | 替代原项目 Electron |
| 后端/系统层 | Rust | Tauri 主进程 |
| 本地 ASR | sherpa-onnx crate | 流式 Zipformer(zh 2025-06 fp16)+ 能量自适应 VAD + SenseVoice 重打分/导入全窗两遍 + hotwords(实现口径 2026-09-03 修订,ADR-030;Silero VAD 未接线) |
| 本地 OCR | paddle-ocr-rs(PaddleOCR PP-OCRv5/v6 ONNX) | 关键帧文字检测+识别 |
| 本地数据库 | SQLite(rusqlite / sqlx) | 音频/转写/笔记/卡片全本地 |
| AI 笔记增强 | 云端多模态(Qwen-VL 系),不用 Ollama | 增量+课后精修,离线降级本地拼接 |
| 本地拼接 | 纯本地规则拼接转写+OCR | 无 LLM 依赖的降级路径 |
| 模型分发 | 随安装包捆绑(bundle.resources + 首启同步到数据目录);OCR 模型经 ModelScope 自动缓存 | 开发期可手动下载放入 src-tauri/models/(不入库) |
| 推理引擎架构 | 专用线程常驻引擎池(engine.rs):模型只加载一次,规避 FFI Send/Sync | 字幕检测策略:有字幕优先、无字幕才 ASR(v0.3.0) |
生成/重构任何代码必须同时满足:
- 模块化:单文件 ≤300 行(>600 行必须硬拆;300-600 行登记豁免清单);纯逻辑与副作用物理分离;显式依赖注入。
行数口径(唯一有效):文件全部行数(含空行),以
[System.IO.File]::ReadAllLines(path, UTF8).Count为准 —— 即scripts/line-limits.mjs的countLines()。⚠️ 不要用:Get-Content(本机 PowerShell 5.1 + 码页gb2312会按 GBK 解码、吞换行、少算可达 56 行 —— 实测最大live_session_pause.rs353→297;连硬限违规都能被读成合规:SessionListPanel.tsx604→577,>600 读成 ≤600)·Measure-Object -Line(只数非空行)· 字节0x0A计数(对末尾不带换行的文件会少算 1;本仓实测有 8 个这样的源文件,含NotesPage.tsx)。 判定一律以node scripts/line-limits.mjs为准。 - 强类型契约:业务术语贯穿全栈;禁止
any/无类型;入参出参必须定义类型(TS interface / Rust struct)。 - 上下文注释:注释解释 Why 不解释 What;公共函数/模块必须含
@ai-context业务背景注释;标注副作用与边界条件;Magic Number/Hack 必须说明原因。 - 防御性编程:网络/DB/AI/系统调用必须有超时、重试、降级(Fallback);本地优先架构下所有云端能力必须有本地兜底路径。
- 可测试性:业务逻辑必须配测试(AAA 模式:Arrange/Act/Assert);覆盖空值/越界/边界;复杂需求先写测试再实现。
- 自底向上工作流:复杂需求按 原子层(类型/纯函数)→ 业务层(service/hook)→ 系统层(command/UI)顺序生成,不可跳步。
- 环境隔离:禁止硬编码连接串/密钥/端点;配置走环境变量注入;测试严禁直连真实生产数据(用 Mock/内存库)。
- 硬编码密钥/密码/token
eval()/exec()等动态执行- 未验证输入直接拼接 SQL/命令
- 空 catch 块 / 忽略错误
- 明文存储敏感数据
- 用户学习数据上传云端(本地优先是架构属性,非营销话术;AI 调用须用户授权且默认关闭)
- Tauri IPC:所有 command 必须校验入参;文件系统访问限定应用数据目录
- 格式:
<type>(<scope>): <subject>(Conventional Commits),subject ≤50 字、动词开头、不加句号 - type:feat / fix / docs / style / refactor / perf / test / build / ci / chore / revert
- 原子提交:一个提交只做一件事,能通过编译和测试;禁止 "update code"/"wip"
- 分支:当前开发在
dev;发布线main(semantic-release,禁止直接开发);旧代码存档old(只读);大功能(>2 天)开feature/*;禁止 force push(分支重构等例外需用户明确授权) - .env / 密钥 / 模型大文件:永不入库(模型走下载脚本或 .gitignore + LFS)
- 文档与代码在同一提交中更新;架构变更须同步文档 + 写 ADR
- 产品文档在
docs/product/,前瞻/调研在docs/Foresight/,决策在docs/adr/ - 新文档从
docs/templates/复制模板;文档变更尽量过docs-check - 注释解释 Why;不写日志式注释("2026-08-18 张三改")
- Rust:
cargo test;关键纯逻辑(拼接、SM-2 调度、VAD 切段)必须有单测 - 前端:Vitest;交互组件覆盖关键路径
- 测试隔离:Mock 外部依赖(ASR/OCR/DB),不依赖真实模型文件做单测(模型相关用集成测试标注)
| # | 任务 | 说明 |
|---|---|---|
| 1 | 课堂助手·本地 ASR | sherpa-onnx 离线/流式转写(先文件输入验证,后接系统音频) |
| 2 | 课堂助手·本地 OCR | paddle-ocr 关键帧文字识别(paddle-ocr-rs 上游 ndarray 冲突,接口已 stub,oar-ocr spike 中) |
| 3 | 课堂助手·内容本地拼接 | 转写 + OCR 纯本地规则拼接为笔记初稿(无 LLM) |
| 4 | 笔记·基本功能 | 笔记 CRUD + Markdown 渲染 + 搜索 |
| 5 | 课堂助手 ↔ 笔记联动 | 会话产出的拼接内容一键落入笔记 |
系统音频捕获(WASAPI 环回)、屏幕捕获、间隔重复闪卡为后续阶段,不在第一阶段。
# Rust 侧(app/src-tauri/ 下;SHERPA_ONNX_ARCHIVE_DIR 已由 .cargo/config.toml 自动注入)
cargo build # 编译
cargo test # 单元测试(拼接 + 笔记)
cargo clippy # lint
# 前端侧(app/ 下)
npm run dev # Tauri 开发模式(需先 npm install)
npm run build # 前端构建网络环境注意:本机存在 TLS 拦截,Rust 侧从部分 CDN 在线下载预编译库会失败(UnknownIssuer)。 sherpa-onnx 已通过
sherpa-archive/本地库 +.cargo/config.toml解决;OCR 库接入时同样优先本地库方案。
src-tauri/tauri.conf.json— 应用配置/权限边界src-tauri/src/lib.rs/main.rs— Tauri command 注册(IPC 安全边界)src-tauri/src/windows.rs— 窗口/进程枚举(系统句柄与进程查询,TD-002 补登)src-tauri/src/live_session*.rs、src-tauri/src/capture/— 音频/屏幕捕获系统调用模块(权限与隐私敏感)- SQLite schema / 迁移 — 数据兼容
.github/workflows/(如有)— CI/CDdocs/product/、adr/— 产品与架构决策
- 提交信息遵循 Conventional Commits;版本号由第一阶段起手动维护 SemVer
- AI 功能必须支持离线降级(本地优先原则)
- 单文件 ≤300 行(口径同上,以
node scripts/line-limits.mjs为准);源码文件含@ai-context业务背景注释 - 重构/拆分遵循自底向上(原子→业务→系统),公共 API 保持兼容
- 任何技术栈/架构级变更先写 ADR(
docs/adr/)再动手