181 Commits
Author SHA1 Message Date
jerryandClaude Fable 5 cd7e98e7c7 feat(capabilities): S4 SDK+UI 能力端点+Humanizer+设置面板(含 S3 发布修复)
- sdk/services/capabilities.py: MANIFEST+DEFAULTS+sanitize+QA 注册表合并
- sdk/services/humanizer.py: 9 类中文 AI 痕迹规则(块级保护引用/表格/代码/图片)
- sdk/routers/capabilities.py: GET /api/capabilities + POST install 透传
- sdk/schemas.py+sessions.py: SessionMeta.capabilities + PATCH meta 白名单 merge
- sdk/routers/qa.py: humanize 会话开关注入 SSE;chat.js: body 加 session_id
- sse_relay.py: humanize_enabled 参数链(修 _pump_events 可见性编译错误)
- api.py(QA): /capabilities/registry loopback(BFF 合并)
- ui: settings store+SettingsPanel+AppShell 接线+SessionPanel 展开态设置入口+labels
- 测试: humanizer 8 用例+capabilities_svc 6 用例;SDK 146 全绿;UI vitest 172 全绿

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 16:50:54 +08:00
jerryandClaude Fable 5 dd54aa0e5d feat(web-search): S3 联网搜索(机制实例 1)+ 金标判定器防抖
- web_search.py: WebSearchCompleter(PubMed esearch+esummary 8s/重试1, Crossref 兜底 6s)
  + build_query 中文→英文查询构建(物种映射表+基因家族正则, 修 \b CJK 边界缺陷)
- pipeline.py: 证据采纳后 _maybe_web_search 确定性门控(请求开关 AND env 总闸 AND
  去重公开引用数 < min_evidence; 修 selected 恒 30 无信号缺陷)
- answer_composer.py: web_results 段 + SYSTEM Web 引用规则
- config.py: enable_web_search/max_results(4)/timeout(8)/max_chars(1200)
- sse_relay.py: STAGE 映射 +web_search_started/completed(11→13)
- capabilities.yaml: web_search manifest(http provider)
- env: QA_V1_ENABLE_WEB_SEARCH=0 等 4 键(example+真实)
- run_golden.py: LLM 方差防抖(FAIL 复跑一次,两次都 FAIL 才算回归;
  GI-005 实测三次采样 key_hit 0.6/0.8/0.4 横跨阈值)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 15:44:31 +08:00
jerryandClaude Fable 5 c4409bdbae fix(capabilities): S2 指代消解指令增强 + history 重写 + selfcheck 单进程化
- answer_composer: Dialogue Context 指令明确化(含指代词时必按历史确定指代对象)
- sdk/services/history.py: 重写为两段式(先组轮次对、再截断),修正轮次配对逻辑
- sdk/app/test_history.py: FakeDB 模拟 SQL streaming 过滤, 7 用例全绿
- tooling/cap/cap_selfcheck.py: 单进程内完成热加载证明(diff 才有意义),
  GENE_FAMILY_ROOT 显式注入子进程, manifest 改字符串拼接避开 format 花括号

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 14:42:12 +08:00
jerryandClaude Fable 5 8c103ea382 feat(capabilities): S1+S2 机制地基+多轮记忆(能力框架/热加载/MCP Provider/history 线程化)
- capabilities/{manifests,registry,providers,install_manager}.py + tool_runner.py:
  三层机制(注册层/调用层/安装管理层),四 Provider,热加载差分刷新
- configs/capabilities.yaml: 唯一注册入口(明文热加载面)
- api.py: QARequest+history/capabilities, /capabilities/install loopback 路由
- llm_client.py: complete() tools 透传 + complete_raw_messages() 工具调用循环支持
- pipeline.py/answer_composer.py: history 线程化(只进 Dialogue Context,检索零回归)
- sdk: services/history.py(3轮/16k预算) + routers/qa.py session_id 剥离注入
- compile_qa.sh: rsync 允许子目录 + capabilities.yaml 入 install 清单
- tooling/cap/: fake_mcp_server.py + cap_selfcheck.py 机制自检
- requirements.lock: mcp 2.1.1 + 依赖 12 包

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 13:00:35 +08:00
jerryandClaude Fable 5 f30e2a9102 feat(chat): 连续两张图片即并排,取消同比例限制
- 实测发现同论文连续图(g001/g002)比例差异达 4.5%/62.5%,比例门禁把真实连续对全部拆散
- 布局改为纯 DOM 结构:连续相邻即配对包 figure-row,奇数最后一张落单
- 移除图片尺寸读取与 load 等待,布局时机简化为 mounted/updated
- 测试更新:任意连续两张并排、3 张=1对+1单、空 p 兼容、隐藏失败图跳过

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 18:27:55 +08:00
jerryandClaude Fable 5 bf136304d7 feat(chat): 图片 50% 宽布局 + 连续同比例双图并排
- 新增 figureLayout.js:sameAspect(容差2%)/pairFigures(贪心配对)/layoutTextRoot(幂等)
- AssistantMessage:图片 load 后读 naturalWidth/Height 重排,单图 half 类,双图包 figure-row
- 相邻判定兼容 HTML 解析器把 figure 提出 p 后留下的空 p
- CSS 修 :deep()(原 scoped 规则从未命中 v-html),单图 50%、row 内各 calc(50% - 7px) + 14px 间距
- 新测试 16 例,全量前端 174 例全绿

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 17:47:37 +08:00
jerryandClaude Fable 5 f81971b176 docs: README 按最新状态更新(终态拓扑 8090-8093、统一 venv、一键打包、实际库计数)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 14:28:10 +08:00
jerryandClaude Fable 5 4071b29520 Python 统一 U0-U4:venv py3.12.13 + 四树 cp312 重编译 + 端口互换 8091/8092/8093 + 旧服务停而不删
- U0:新建 plantai-rag-new-venv(3.12.13,130 包),torch 2.13.0+cpu/cython 3.2.8/faiss 1.14.3/openai 3.3.1,requirements.lock 固化
- U1:四树全 venv 重编译(sdk 15/qa 45/methodology 28/legacy 283 .so 全 cp312),audit 双审计过
- U2:备用端口影子对照:金标 search evidence 30/30 与生产一致、SDK pytest 125 过、五上游绿
- U3:统一树切终态 8091/8092/8093 + BFF 8090(venv),停旧服务(容器/进程不删,30 天窗)
- U4:minerupy311→minerupy312 断链修复、GF_PYTHON_ENV 回退统一、start-dev/run/bff_restart 去 conda、server.env/README 更新

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 12:23:37 +08:00
jerryandClaude Fable 5 4bfd86930a P4 补充:legacy-rag 编译瘦身(排除 v13-v15 系列,源码保留)
- compile.manifest:449 → 267 模块(编译面)
- compile.exclude-v13-v15:182 模块(v13/v14/v15/v15_3_1-4,生产 7 月批量
  提取管线的历史迭代,运行时不引用;源码全部原样保留在仓库)
- compile.manifest.full:449 全量存档(与生产 7900 容器同面,可对照)
- 保留集验证:v16_1_1/v16_1_2/methodology/顶层/api/scripts 均不引用被排除系列
  (唯一引用者 unified_converter.py 本身是死代码,未入保留集)
- 瘦身编译树:283 .so,audit 0 错,7914 冒烟 kg/stats 200(5.9s)
- 编译时长:463→283 模块,GCC 阶段约省一半

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 18:47:53 +08:00
jerryandClaude Fable 5 84d2511f62 P6/M7: compile_sdk.sh + build_all.sh 一键打包流水线
- compile_sdk.sh:SDK 编译硬化(15 .so;白名单 main/config/schemas——schemas 为
  pydantic v2 validator 被 Cython 转 cyfunction 触发 PydanticUserError,实测豁免)
- 编译树 SDK 冒烟:audit 0 错,8094 起真实 BFF 五上游全绿
- build_all.sh:编译 4 树 → 双审计 → import 冒烟 → (SKIP_KB=1 跳过 KB,
  定版后置 0)→ 组装安装目录 + start_all.sh → SHA256SUMS → 泄露门禁
- tooling.env:新工程路径与端口终态(8090 段)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 17:16:03 +08:00
jerryandClaude Fable 5 5024a12947 P5/M6: KB 加密工具验证完成 + 操作指南(定版后执行)
- 加密工具双模式往返验证通过(字段级 properties_json / 整文件 parquet)
- 取消真实加密执行:数据库未定版,中间副本已清理,kb.key 保留
- tooling/KB_ENCRYPT_GUIDE.md:完整操作步骤/踩坑记录/解密验证/流水线接入
- 踩坑固化:Qdrant 必须 snapshot API(禁 rsync 活动卷);Neo4j 5.15 community
  不支持在线 dump,走 frozen 目录冷拷;canonical 库不在 KB 交付内

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 17:10:02 +08:00
jerryandClaude Fable 5 38a3c438fd P5/M6: KB 加密构建工具(快照一致性 + AES-GCM 断言导出 + 单一 tar)
- kb_encrypt_backfill.py:JSONL 字段级 + 整文件两种 AES-256-GCM 模式
  (enc:v1:nonce:ct 格式,验证往返解密一致)
- encrypt_kb.sh:Qdrant snapshot API + neo4j-admin dump 在线一致导出
  (绝不动活动挂载卷),断言导出加密,单一 tar(不压缩)+ sha256 + 计数校验
- crypto/init_keys.sh:KB 主密钥生成(AES-256 base64,600,无供应商 RSA)
- manifest.yaml 按实测数据源更新(70G+8.2G+14G+9.5G+2.7G+17M)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 16:53:49 +08:00
jerryandClaude Fable 5 a990a00eb5 端口终态修订:BFF 8090 / QA 8091 / Methodology 8092 / legacy 8093
- config.py 默认值改终态(浸泡期 .env 覆盖 7921/8001/7911 继续生效)
- extraction _DEFAULT_ALT=8093;三个 start.sh 默认端口改终态
- 运行中服务零触碰:浸泡端口不变,BFF 未重启,旧服务不动
- 验证:sdk pytest 125 绿,BFF 五上游仍绿(env 覆盖优先)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 16:41:37 +08:00
jerryandClaude Fable 5 3048c18437 P4/M5 收尾:extraction 回退链 7900→7911 + methodology_routes env 化
- extraction.py 回落 _DEFAULT_ALT=7911(agent/legacy-rag 编译树,替代退役 7900)
- legacy 侧 methodology_routes 同款 env 化补丁(UPLOAD_JOBS_DIR 可配)
- 单模块重编译 + 树审计双绿(463 .so, marker 重写)
- 决定性验证:停 8001 → extraction 经 7911 正常返回 → 恢复 8001

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 16:02:22 +08:00
jerryandClaude Fable 5 30b01b8ae1 P4/M5: SDK legacy 健康键 + 代理路由,五上游全绿
- config.py rag_legacy_base_url=7910(默认)/ upstream.py legacy 键入 probe_all
- routers/legacy.py:13 族前缀白名单透明代理(线程池阻塞调用)
- 浸泡:sdk/.env RAG_LEGACY_BASE_URL=7911(agent/legacy-rag 编译树)
- 验证:经 BFF 代理 kg/stats+kg/families 200,非白名单 404

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 15:58:47 +08:00
jerryandClaude Fable 5 3cacab6f14 P4/M5: legacy-rag 编译硬化完成(463 .so + 3 白名单)
- compile_legacy.sh:按 compile.manifest(449)迁移+编译,含 compile.whitelist 明文保留机制
- 生产工具链同款 test4py311 + cython 3.2.4 验证
- 3 个白名单模块(redis_cache/v15_extractor/v15_3_1):主项目线源码 bug,
  编译失败硬阻断 → 登记理由保留明文(rag-develop 线已修,主项目线未修)
- audit:463 extensions,0 错误,树 sha 已 marker 锁定
- 编译树冒烟 7913:kg/stats 200(5.4s),与 7900 同面

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 15:20:00 +08:00
jerryandClaude Fable 5 2f82c4a8dc P4/M5: agent/legacy-rag 源码迁移(449 模块 191K 行)+ 影子 7911/7912 冒烟
- 按生产 7900 容器黄金清单迁移(compile.manifest 449 条目,0 缺失)
- 入口双态:api.app(生产同源 3 路由)/ api.main(裁剪 11 路由族 91 路径)
- 修复:advanced/__init__ 空文件(包标记误覆盖,已从主项目恢复)
- 修复:api/rag_routes.py 跨环境 site-packages 注入改 LEGACY_GF_SITE_PACKAGES 门控
- 修复:scripts/utils 缺失(动态加载 reasoning_engine)
- 影子验证:kg/stats 数据连通(6.2s,与 7900 同源 normalized 后端)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 14:20:41 +08:00
jerryandClaude Fable 5 9f5b38c203 P3/M4: methodology 编译树切换(BFF rag→8001,回滚窗口开启)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 13:53:47 +08:00
jerryandClaude Fable 5 28b497354e P3/M4: agent/methodology 源码导入(16K 行)+ 影子 8001 冒烟
- src/rag/{unified(21模块),extractors/methodology,project_config} + api/methodology_routes.py(998行)
- 新薄入口 scripts/methodology_server.py(/health + /api/v1/methodology/*)
- env 化补丁:UPLOAD_JOBS_DIR/UPLOAD_OUTPUT_ROOT 支持 env 覆盖(数据根迁移免改代码)
- 影子 8001 冒烟:job 列表与生产 8000 完全一致(3/3)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 13:47:12 +08:00
jerry 0da658e276 P2/M3: 浸泡记录补 KG overview 慢查询观察 2026-08-31 13:44:04 +08:00
jerryandClaude Fable 5 2e6dcd98d7 P2/M3: 浸泡切换部署完成(BFF→agent/qa 编译树 7921,回滚窗口开启)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 13:37:49 +08:00
jerryandClaude Fable 5 352ef8e1ec P2/M3: bff_restart.sh 修 pkill 模式(python -m uvicorn 形态)+ 启动等待 5s→12s
- 旧模式 [u]vicorn app.main:app 匹配不到 python -m uvicorn 命令行
- 编译树 BFF 冷启动更慢,等待窗口放宽
- 浸泡切换:sdk/.env QA_BASE_URL=7921(agent/qa 编译树),回滚=删行+重启

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 13:33:20 +08:00
jerryandClaude Fable 5 b813cff005 P1/M2: tooling/compile/compile_qa.sh(参数化 + normalized_release 补丁)
- 收编工具链遗漏主项目 08-29 新增 src/rag/normalized_release.py(backend_guard 依赖)
- 编译树 45 模块全部 .so,audit 0 错误,7922 健康检查金标过
- 修复:compile 目录相对依赖 tools/(elf_visibility.py)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 13:26:18 +08:00
jerryandClaude Fable 5 8327735821 P1/M2: agent/qa 影子冒烟金标全过(evidence 30/30 与生产一致)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 13:15:12 +08:00
jerryandClaude Fable 5 e6efb2bd7a P1/M2: agent/qa 源码导入(主项目 d46d02c)
- src/rag/{qa_v1_1_73(41模块),retrieval,dual_kb_taxonomy_rag/entity_alias,normalized_release} = 18.3K 行
- 入口 scripts/qa_v1_1_73_server.py + 4 个 config yaml + requirements
- scripts/{start,stop,status,restart}.sh(端口参数化,影子 7921/生产 7920)
- env/prod.env(容器同源凭据,gitignored) + prod.env.example(占位符)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 13:03:38 +08:00
jerryandClaude Fable 5 27946edc2b P0/M1: 收编 encryption-test 工具链入 tooling/
- legacy_plantai_server_package/: phase_a–f + compile_* + bin/plantai_admin.py
  + tools/(audit/elf_visibility/smoke/build_delivery_manifest) 完整基线
- legacy_docker_packager/: protected 形态参考
- crypto/client/: plantai_core.py(AES-GCM 原语) + install_plantai.sh 参考
- secrets/provision 严格排除(gitignore),入 git 前已脱敏清理
- LEGACY_MAPPING.md 记录源与改造方向

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 12:59:29 +08:00
jerryandClaude Fable 5 0875bb036c P0/M1: 四部分重构——frontend→ui、backend→sdk 改名 + 引用修复 + 骨架
- git mv 保留历史:ui/(Vue3+Vite)、sdk/(BFF 中间层)
- 路径语义修正:db_path/figures_cache 改相对 sdk/(BFF cwd),
  历史库 sdk/backend/data 迁移至 sdk/data/(会话/图片缓存无损)
- 引用修复 ~15 处:config.py、deploy/*.sh、vitest/playwright 配置、
  单测导入路径、docs、README、gitignore、.env.example
- 骨架:agent/{qa,methodology,legacy-rag,vendor}、knowledge/manifest.yaml、
  tooling/{compile,kb,crypto,assemble,audit,tools,scripts} + README
- 门禁验证:sdk pytest 125 通过、ui vitest 158 通过、
  生产 BFF 脚本重启四上游全绿 + 静态托管 + 会话库无损

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 12:56:47 +08:00
jerry 71189567ee refactor(figures): 图片与 registry 路径改指 teamWorkspace 主项目(去旧根依赖) 2026-08-29 19:38:13 +08:00
jerryandClaude Fable 5 bb2b5b5f71 图文并茂长篇回复 + 多流重构 + 品牌与性能优化
- 长文答案:上游 QA 镜像 prompt 改造(5000 字目标 + [[FIG:PMCID]] 图片标记 + max_tokens 12000 + LLM 超时 300s),docker commit 新镜像(回滚锚点 :20260828-orig)
- 图片服务:BFF figures 路由(本地 MinerU 索引 + Europe PMC 解析含许可 + 图片代理带磁盘缓存),答案 markdown 注入图注块(标记替换 + PMID 兜底 + 上限 8 张)
- 前端图文渲染:figure 图注块 + 点击放大遮罩 + lazy 加载 + 加载失败隐藏
- 多流重构:切换会话不再中断,每会话独立流上下文后台继续(修复 Pinia 代理相等陷阱)
- 证据量回调:ablation 恢复上游默认(top_k 30 / graph_min 15)支撑长文
- 品牌:海古纪 logo 图片 + 站点 icon + 标题更新
- 性能:Aurora 静态化、shimmer/sweep 改 transform、pulse 改透明度呼吸、autoGrow rAF 批处理
- 看门狗适配长文:STREAM_IDLE_TIMEOUT 240s → 1200s
- 运维:neo4j_recreate.sh 固化、sync.sh 公网地址、m5 超时 900s
- 测试:后端 125 测 / 前端 158 测全过;端到端实测 9938 字 + 17 小节 + 8 图

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-28 23:27:18 +08:00
jerry f456969a45 清理 .DS_Store 并加入忽略 2026-08-25 20:57:20 +08:00
jerryandClaude Fable 5 1e94de7464 PlantAI-rag-new 首次提交:文献知识工作台
- BFF 薄适配层(FastAPI,8090):QA 代理/SSE 中继/Neo4j 直连/抽取代理/会话持久化
- Vue3 前端:五相位检索流水线、文献来源与证据链、知识图谱、提取任务四 tab
- 四档响应式(桌面/笔记本/平板/手机)、深浅主题
- 81 个 FR 全部实现,测试追溯矩阵 81/81,后端 121 测/前端 156 测
- 真实凭据已脱敏,运行时配置在 backend/.env(不入 git)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-25 20:47:52 +08:00