 yxxandClaude Code
|
4276cb73c2
|
fix(plot): 渐近点落在采样点之间时断段,避免伪竖线
相邻有限采样点分居可见范围上下两侧时说明中间夹着竖直渐近线,
此前只对非有限值断段,会被 Liang-Barsky 裁剪成贯穿绘图区的伪竖线;
现在在共享几何层断段,并新增回归测试断言不存在跨越上下边界的伪连接线段。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-06 23:26:13 +08:00 |
|
 yxxandClaude Code
|
edc41fdade
|
fix(export): 裁剪超出范围的曲线并修正 PDF 纵轴标签
- 共享几何将曲线裁剪到绘图矩形,避免超出显式 range 的曲线覆盖 PDF 其他内容
- PDF 纵轴标签改为组内局部坐标 + 先平移后旋转,标签边界落回 Drawing 范围内
- 更新 pdf.py 模块说明:function_plot 已内嵌矢量图
- 新增曲线裁剪与纵轴标签边界回归测试
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-06 22:28:09 +08:00 |
|
 yxxandClaude Code
|
f1ac414866
|
feat(export): PDF 内嵌函数图像矢量图
- 抽取 render.py 共享几何:新增 PlotGeometry + compute_geometry,render_svg
改为薄序列化层,SVG 输出与重构前逐字节一致(8 组用例回归验证)
- 新增 app/plot/render_reportlab.py:消费共享几何产出 reportlab 矢量 Drawing
(网格/坐标轴 Line、曲线 PolyLine、刻度/标签 String、ylabel Group 旋转),
复用 STSong-Light 渲染中文,按页面内容宽 renderScale 缩放
- pdf.py _block_function_plot 改为内嵌矢量图(解析/渲染失败或超预算回退占位,
单图失败不阻断整篇);mermaid 仍占位
- 抽取 FunctionPlotBudget + format_plot_diagnostic 到 _common.py,html/pdf 共用
- 文档同步:PDF 已内嵌函数图像,DOCX 仍占位(栅格化范围外)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-06 21:26:54 +08:00 |
|
 yxxandClaude Code
|
4fc26a11e1
|
fix(export): 修复列表项行内语义丢失与混合嵌套顺序重排
- pdf.py `_block_list_item` 改为按 AST 顺序逐段输出:正文暂存为行内标记文本,
遇嵌套列表先 flush 再递归,之后继续后续正文,保持「父段—子列表—后续段」原始顺序
- pdf.py/docx.py 列表项直接行内节点改走 `_render_inline_node`,保留加粗/链接语义,
不再只渲染 children 而丢掉格式(PDF 链接以 /URI 注解保留,DOCX 写入 w:hyperlink)
- docx.py `_render_inline_node` 增加 bold/italic 默认值,便于列表项直接调用
- 契约文档 StaticRenderer 状态「计划新增」→「已实现」
- 新增回归测试:混合嵌套顺序、PDF/DOCX 列表项行内语义
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-06 20:54:05 +08:00 |
|
yxx
|
6c14047899
|
Merge remote-tracking branch 'origin/main' into feat/export-service
|
2026-09-06 17:48:25 +08:00 |
|
 yxxandClaude Code
|
780e24a399
|
fix(export): 修复引用块正文丢失、嵌套列表顺序与排队取消
- 引用块直接子节点为块级节点,PDF/DOCX 改为逐个渲染并继承缩进/颜色,
不再交给行内渲染器导致正文丢失
- PDF 嵌套列表先输出父级正文再输出子列表,修复顺序颠倒
- 等待渲染槽位期间保持 queued 并监听取消,取消即时生效
- DOCX 列表项补处理直接 text 子节点,避免正文被块级渲染器丢弃
- 补充引用块/嵌套列表/排队取消的结构内容回归测试
- 接口契约同步 html/pdf/docx 三格式均已实现,移除 EXPORT_FORMAT_UNSUPPORTED
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-06 17:48:18 +08:00 |
|
yxx
|
dffafce8b9
|
Merge remote-tracking branch 'origin/main' into feat/export-service
# Conflicts:
# .gitignore
# backend/app/main.py
|
2026-09-06 17:22:57 +08:00 |
|
 yxxandClaude Code
|
406dd42571
|
feat(export): 新增 PDF/DOCX 导出与 StaticRenderer 内部契约
- 新增 PdfExporter(reportlab)与 DocxExporter(python-docx),实现与
HtmlExporter 一致的同步 render + 异步 export,v1 文本优先(标题/段落/
行内强调与链接/列表/引用/表格/代码块/数学文本),function_plot 与 mermaid
保留源码占位并记 warning。
- service 层加 _EXPORTERS 注册表按格式分发,删除 format!=html 硬限制,
扩展名/MIME/产物清理泛化到 html/pdf/docx 三种格式。
- 新增 app/plot/renderer.py:StaticRenderRequest + StaticRenderer Protocol +
FunctionPlotStaticRenderer + MermaidStaticRenderer;HtmlExporter 改经
FunctionPlotStaticRenderer 消费,去除对 render_svg 的直接依赖。
- 补齐 PDF/DOCX 魔法字节、CJK 字体、占位 warning 与 StaticRenderer 契约测试。
- 更新 Export开发说明.md。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-06 17:04:58 +08:00 |
|
yxx
|
966a94cad8
|
Merge remote-tracking branch 'origin/main' into feat/export-service
# Conflicts:
# backend/app/routes.py
|
2026-09-06 16:19:37 +08:00 |
|
 yxxandClaude Code
|
c9c5f81d49
|
fix(export): 增加文档级组合复杂度预算与并发渲染限制
针对 PR 审阅 P1「组合复杂度仍可长时间占满导出线程」与 P3「EXPORT_OUTPUT_TOO_LARGE 误标 HTTP 413」:
- plot: FunctionPlot 记录整块 AST 节点数(node_count),parser 累计
- html: 单篇文档累计节点预算 _MAX_TOTAL_PLOT_NODES=8000,超限回退占位
- service: 并发渲染信号量 MAX_CONCURRENT_RENDERS=2,超限额任务排队等待
- docs: 错误码区分同步 HTTP 错误与异步任务错误,EXPORT_OUTPUT_TOO_LARGE 由
error_code 返回而非 HTTP 413
- 补充节点预算与并发限制两条回归测试(全量 627 通过)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-06 14:01:29 +08:00 |
|
 yxxandClaude Code
|
124024a547
|
fix(export): 为函数图像与导出产物增加资源上限
针对 PR 审阅「函数数量没有限制,可能生成数百 MB 的 SVG」:
- parser: 单块 function-plot 表达式上限 _MAX_EXPRESSIONS=16,超限整块回退
- html: 单篇文档函数图像上限 _MAX_FUNCTION_PLOTS=16,超出回退源码占位
- service: 输入源 MAX_MARKDOWN_CHARS、产物 MAX_EXPORT_BYTES,超限分别
拒绝创建或标记 failed(EXPORT_OUTPUT_TOO_LARGE)
- 补充 4 条回归测试与文档说明
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-05 23:31:53 +08:00 |
|
 yxxandClaude Code
|
b87f94551b
|
fix(plot): 修复复审问题(2 P2 + 1 P3)
- P2 复杂表达式绕过异常回退:解析与渲染共同纳入局部异常回退;
AST 深度/节点数上限拦截 RecursionError
- P2 极端有限范围生成 nan SVG:校验坐标跨度有限且 >0,回退安全范围;
_polyline 拒绝非有限像素坐标
- P3 更新接口契约文档:function-plot 静态 SVG 已实现
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-05 22:49:01 +08:00 |
|
 yxxandClaude Code
|
50d7fb4c7d
|
Merge origin/main into feat/export-service
同步 main(054f704),解决 contracts.py / main.py / README.md / 技术栈说明 的合并冲突。
- contracts.py:保留 pydantic 多行导入并新增 RequestOverride
- main.py:合并 lifespan(导出孤儿清理 + 转写/本地模型生命周期)
- README.md / 技术栈说明:文档取 main 最新版本
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-05 21:44:20 +08:00 |
|
 yxxandClaude Code
|
04f36524b1
|
fix(plot): 修复函数图像审阅问题(1 P1 + 2 P2)
- P1 浮点刻度死循环:_ticks 改为有上限的整数索引推进并校验步长推进
- P2 求值异常:白名单函数校验参数数量;负数底非整数指数按断点处理;采样容错复数
- P2 无效纵轴范围:退化/非有限 range 丢弃并自动采样重算;渲染异常回退占位不阻断导出
- 补 6 个回归测试
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-05 21:14:50 +08:00 |
|
 yxxandClaude Code
|
f49d1245a1
|
feat(export): 函数图像静态渲染(function-plot → SVG)
- 新增 app/plot 包:白名单表达式解析(ast 无 eval)+ FunctionPlot 模型 + 静态 SVG 渲染
- HtmlExporter 的 function_plot 节点解析并内嵌 SVG,解析失败回退占位并转诊断
- 新增 test_plot.py(13 个测试)覆盖表达式安全、指令解析、SVG 输出与导出链路集成
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-04 22:41:35 +08:00 |
|
 yxxandClaude Code
|
64af1f5165
|
fix(export): 修复 PR #17 审阅问题(1 P1 + 5 P2)
- P1 链接/图片 URL 协议白名单校验,危险协议降级为纯文本 + warning
- P2 图片 AST 字段映射(src=attrs.url,alt 取 children 文本)
- P2 原始 HTML 块转义保留,正文不丢失 + warning
- P2 过期/淘汰/重启清理导出产物文件
- P2 解析与渲染移入 asyncio.to_thread,运行中取消生效
- P2 function-plot 围栏别名补全
- 回归测试覆盖全部修复
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-04 22:24:16 +08:00 |
|
yxx
|
7eae7fba00
|
Merge remote-tracking branch 'origin/main' into feat/export-service
|
2026-09-04 10:59:52 +08:00 |
|
yxx
|
5c2441464d
|
feat(export): 交付 Markdown → HTML 导出服务
实现 Export Service 完整生命周期:mistune AST → Document AST → HtmlExporter 渲染完整 HTML5,异步任务注册表 + 取消 + 24h 产物过期。新增 5 个 /api/exports 端点与 15 项测试;pdf/docx 与函数图像静态渲染留待后续 PR。
|
2026-09-04 09:02:33 +08:00 |
|
 yxxandClaude Code
|
abccb328fc
|
fix(backend): FTS 阈值过滤处理 span=0 退化场景
全部命中 bm25 相同时归一化皆为 1.0,阈值超过 1.0 应无命中,
与旧 normalize_scores 语义对齐。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-03 23:57:00 +08:00 |
|
yxx
|
ae65c64c8f
|
Merge remote-tracking branch 'origin/main' into feat/knowledge-retrieval-core
# Conflicts:
# README.md
# backend/app/routes.py
# docs/architecture/AI笔记软件技术栈说明-团队版-v2.3.md
# docs/development/Knowledge与Retrieval-Core开发说明.md
|
2026-09-03 23:45:52 +08:00 |
|
 yxxandClaude Code
|
3bd475dc15
|
fix(backend): 落实 PR #12 评审意见
- P1 事件循环让出:run_rag 在样本边界 await asyncio.sleep(0),运行中取消/进度/SSE 可及时调度
- P2 SSE 终止事件:历史回放期间识别终止事件并结束流,try/finally 保证订阅清理
- P2 FTS 截断:fts 走数据库侧精确分页与计数,阈值经 bm25 截止值换算,不再受 5000 条固定截断
- P2 仅块标注:expected_block_ids 从块反查所属笔记,避免合法样本被判零分
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-03 23:37:09 +08:00 |
|
 yxxandClaude Code
|
3898530585
|
docs: 补齐 PR #11 评审要求的文档同步
- 技术栈说明实施状态:RAG Benchmark 标记为已完成、Agent Benchmark 暂缓
- 新增 Benchmark 开发说明,并登记到文档索引
- README 回归基线更新为后端 157 / 前端 29
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-03 22:35:45 +08:00 |
|
 yxxandClaude Code
|
fcc601fcf3
|
fix(backend): 落实 PR #11 第二轮评审意见
- Benchmark 容量淘汰只删终态 run,满容量且全活动时返回 BENCHMARK_CAPACITY_EXCEEDED
- 创建 run 前校验索引兼容性(BENCHMARK_INDEX_INCOMPATIBLE)
- 取消 run 补发 RunCancelled 终止事件;失败分支脱敏(BENCHMARK_RUN_FAILED)
- 失败样本计入汇总分母,报告输出 total/successful/failed/failure_rate
- load_dataset 按文件名隔离无关损坏文件,顶层非对象拒绝
- FTS score_threshold 先于计数/分页,total 与 items 一致
- Benchmark SSE 支持 Last-Event-ID 游标
- 移除 Agent Benchmark 501 占位接口
- 同步第二阶段接口契约与开发说明文档
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-03 22:20:11 +08:00 |
|
 yxxandClaude Code
|
c6cde2500b
|
fix(backend): 落实 PR #9 评审意见
- 检索调优参数(rrf_k/rerank/rerank_candidates/score_threshold)透传到引擎实际执行
- Recall 去重,避免同一 Note 多 Block 重复导致 Recall 超 1
- RAG 运行改为后台异步执行:创建即 queued + 202,支持取消与 SSE 实时事件
- 数据集元数据校验,坏文件隔离跳过;citation_required 语义修正
- modes 空/重复校验;配置快照记录模型版本与索引元信息
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-02 23:20:34 +08:00 |
|
 yxxandClaude Code
|
0006e91e67
|
chore(backend): 移除误提交的验收笔记
验收笔记此前被误纳入 benchmark 提交,现摘除跟踪,文件保留在本地磁盘。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-01 23:35:11 +08:00 |
|
yxx
|
866febec21
|
feat: benchmark功能开发完成
|
2026-09-01 23:30:11 +08:00 |
|
yxx
|
9b50b8f0ce
|
feat: 完成benchmark后端功能
|
2026-09-01 23:19:28 +08:00 |
|
 yxxandClaude
|
6cf531f2a8
|
fix(retrieval): 修复原子性、过滤漏召回、tags 语义与 rebuild 回滚
- 元数据 + 向量单事务提交,避免 PATCH 半提交(审阅 #2)
- vectorstore upsert 改 delete-then-insert 幂等,支持共享 conn
- FTS 取全量 + 过滤 oversample,修复 metadata 过滤漏召回(审阅 #4)
- PATCH tags 区分 None/[]/非空:保留/清空/替换(审阅 #5)
- rebuild 拒绝增量 scope/note_ids,扫描先行 + 失败回滚旧索引(审阅 #6)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-27 22:48:55 +08:00 |
|
 yxxandClaude
|
87717450fd
|
fix(retrieval): 修复路径逃逸、部分提交、失效向量与分页问题
- 路径逃逸:清洗 folder(拒绝 ..、绝对路径/盘符),_abs_path 增加 Vault 边界校验
- 部分提交:create/update 索引失败时回滚文件
- 失效向量残留:replace_note_metadata 返回旧 id,index_note 清理旧向量
- 分页不完整:fts_count 返回真实命中总数,候选池覆盖 offset+limit
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-27 21:38:43 +08:00 |
|
 yxxandClaude
|
39d1aa0fe9
|
docs(retrieval): 增加 Knowledge/Retrieval Core 开发说明
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-27 19:26:58 +08:00 |
|
 yxxandClaude
|
dbcb94b413
|
test(retrieval): 增加检索测试数据与单元端到端测试
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-27 19:24:20 +08:00 |
|
 yxxandClaude
|
6b16ad1a08
|
feat(retrieval): 接入 Note/Search/Index 服务与路由
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-27 19:22:56 +08:00 |
|
 yxxandClaude
|
02bb38bb1d
|
feat(retrieval): 实现 Embedding/Vector/RRF/Reranker 混合检索引擎
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-27 19:21:01 +08:00 |
|
 yxxandClaude
|
d4b472b009
|
feat(knowledge): 实现 SQLite/FTS5 数据层与 Markdown Block 解析
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-27 19:20:12 +08:00 |
|
 yxxandClaude
|
2eed940bb0
|
chore(backend): 引入 sqlite-vec 依赖并配置数据目录
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-27 19:19:44 +08:00 |
|