30 Commits
Author SHA1 Message Date
admin 1bd4aea5fd fix(build): render_active_library_env 输出 GENE_FAMILY_ROOT 而非未定义的 QA_ROOT
active_library.env 里 $QA_ROOT 从未定义,QA start.sh 在 set -u 下 source 时报
unbound variable 导致 8091 起不来。改用 prod.env 中已定义的 GENE_FAMILY_ROOT。
2026-10-10 18:52:15 +08:00
admin 91f6a1c242 feat: 新增论文撰写功能 paper-writer(独立 MCP 服务 + BFF 大脑 + 前端三卡)
- paper_writer_service(8097):FastAPI + MCP streamable-http 单端点,9 工具
  (propose_paper_outline/write_paper_section/get_paper_progress/search_refs/
  revise_paper_section/revise_paper/get_paper/complete_paper/cancel_paper),
  SQLite 三表(papers/paper_sections/citations,WAL),GB/T 7714 引用协议
- BFF:services/paper/{mcp_client,agent}.py(裸 JSON-RPC 客户端 + 规则状态机)、
  routers/paper.py、schemas.py 4 个 Paper*Block + ArtifactBlock 加 paper_id/citation_count、
  config.py 开关、main.py 条件注册、docgen.py 抽 insert_artifact 公共 helper
- 前端:intent.js paperIntent 纯函数、Composer docgen 分支 sub-route、sendPaper/轮询、
  PaperBriefCard/PaperOutlineCard/PaperProgressCard、DocPane cite-chip
- deploy/paper_restart.sh + toggle_paper.sh;compile_sdk.sh 白名单追加 paper 文件
- tests/paper 26 条(工具逻辑 + MCP 协议 + BFF 状态机 + 块 schema + 前端 intent 单测)
2026-09-30 22:29:22 +08:00
adminandClaude Fable 5 f10b86c088 feat(deploy): start_all 生信段尊重 BIOFLOW_ENABLED(默认 false=无生信版)
- 176 默认(含开机自启 plantai-apps.service)即为无生信启动版:
  BIOFLOW_ENABLED=false 时 start_all 不拉起 8098,生信 TAB/入口不可见
- 开关来自 sdk/.env,切回生信版=bash toggle_bioflow_176.sh on

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-17 07:56:49 +08:00
adminandClaude Fable 5 f0a1711ebc fix(aqua): batch_runner path sanitize, loader batch embed, alias expansion
- batch_runner: sanitize paper_id to disk dir name (was skipping all
  papers whose paper_id contains :/()); keeps explicit result path
  compat; verified 5/5 no-skip on paren-DOI papers
- qdrant_loader: batch embed via Ollama array input (32/batch, 14x:
  2.7 -> 36.9 texts/s, 24.5k points ~10min vs 2.5h); per-batch fail
  falls back to single; checkpoint format unchanged
- entity_alias_aqua: +Streptococcus agalactiae (GBS), RAS
  (forbidden_expansions), Danio rerio; merged vernacular/Chinese
  aliases for O. niloticus / O. mykiss / S. salar / L. vannamei;
  g02 gap entities now normalize correctly
- note for P3: ingest manifest MUST carry paper sidecar (pilot
  manifest_pilot.json does not - would emit paper_id="result" dirt)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-13 01:06:38 +08:00
adminandClaude Fable 5 730692a1f6 feat(aqua): KB build tooling, aqua configs, QA artifacts (P1)
- phase2b_converter: result.json -> neo4j.cypher + qdrant_points.jsonl
  (payload keys replicate direct_flow_retriever contract; kb_version=
  aqua_srt_v1_20260930_normalized, source_system=Aqua_canonical)
- qdrant_loader: bge-m3 embed + batched upsert + checkpoint resume
- registry_builder: paper blocks -> registry jsonl (plant format)
- batch_runner: manifest -> convert -> neo4j -> qdrant, all checkpointed
- start_aqua_kb.sh: user-space trial instances (Neo4j 19889 / Qdrant 27435)
- smoke 11/11 green incl. resume drills
- aqua configs: entity_alias_aqua.yaml (22 entries), relation_taxonomy_aqua.yaml
  (45 groups); manifest points to aqua configs
- QA artifacts: golden_aqua.jsonl (41 Qs zh/en), qc_standards.md,
  budget_template.md + cost_model.py (measured pilot tokens)
- pilot: 500 MD + 30 PDF extracted, 0 failures; QC stats computed

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-12 22:19:40 +08:00
adminandClaude Fable 5 037790c609 fix(aqua): DOI pairing decoder and MD extraction regexes
- MD: allow parens in DOI (old-style 10.1016/0006-3207(93)90088-i was
  truncated at ")"); prioritize DOI-line doi.org URL; strip trailing
  paren only when unbalanced
- PDF: require 10. at segment start (fixes year artifacts like
  2010.0170 masquerading as DOI); keep full candidate on no-hit instead
  of shortest prefix (10.1002/pd.71 was truncated to 10.1002); absorb
  paren segments (10.1061/(asce)wr.1943-...); stop at DOI未知 marker
  keeping registrant prefix; accept 10_ segment start variant
- undecodable PDFs: 71 -> 54; manifest DOI values now complete
- pairing count unchanged (3404) = true DOI overlap of the two corpora

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-12 19:46:13 +08:00
admin afa7cce938 feat(aqua): unlock normalized KB identity via env with plant fallback
- normalized_release EXPECTED_RELEASE defaults to NORMALIZED_RELEASE_ID (plant value)
- from_env falls back to constant on empty env; backend_guard uses env-or-constant
- start.sh sources env/active_library.env after prod.env (qa + legacy-rag)
- build_all.sh --library <name|dir> renders library identity (no name whitelist)
- add kb-libraries skeleton (plant/aqua identity cards) and tooling/aqua_kb
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-12 19:10:08 +08:00
adminandClaude Fable 5 36fc2a7250 fix(statusbar): 生信任务活跃期回退消息列表点亮 4 点
生产实测暴露缺口:生信对话的 chat/stream 在 plan_ready 后即关闭
(_finishCtx 清 streamCtx→currentMessage 为 null),而任务阶段恰在
流关闭后才真正运行——StatusBar 只读 currentMessage,阶段运行期
间 4 点仍不亮。这正是用户报的 bug 主场景。

- chat.js 新增 agentDotMessage getter:优先流式中 currentMessage;
  流已收口时回退到消息列表里持有活跃生信任务(progress.jobId 且
  jobStatus ∈ created/running/paused)的最后一条助手消息——其派生
  pipeline 块正被任务事件订阅(connectJobEvents onEvent →
  patchBioflowEvent → syncBioflowDotBlock)持续刷新。
- StatusBar.vue 数据源换 agentDotMessage;TopBar.vue runningPhaseOf
  同换 + aggregate 在生信任务活跃期(busy=false 但有 running 相位)
  点亮聚合点。
- 单测补生产实测场景:流已收口任务活跃→回退点亮;阶段推进随动;
  任务终态正确收口空态。

验证:r3debug 89/89(新增回退用例)、主套件 373/373、dist 重建。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-12 18:22:03 +08:00
adminandClaude Fable 5 9d7ed1bdd3 feat(deploy): start_all.sh 编排生信服务(存在则启动/重启)
2026-09-12 陷阱 6:176 整机重启后 start_all 只拉五服务,独立树
bioflow_service(8098)掉进程无告警——生信 TAB 静默消失
(TAB 显隐由 /api/bioflow/health 轮询驱动)。

- start_all 模板新增生信编排段:探测 install 同级
  bioflow/bioflow_service/restart.sh,存在则启动/重启并
  8098 探活(restart.sh 自带旧进程 kill+重启语义),不存在
  跳过;失败不阻断主服务。
- DEPLOY_FLOW §5.1 同步:生信首次部署与新机自动拉起区分。

验证:build_all.sh bash -n OK;生成的 start_all.sh 从 heredoc
提取后 bash -n OK。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-12 16:55:47 +08:00
adminandClaude Fable 5 a57c1994e8 feat(deploy): 176 部署完成与启动脚本可移植化
- start.sh×3: venv 解析改为安装包内 ../venv 优先(175 旧路径回退), 176 等目标机免改
- build_all.sh: start_all 模板补 vstore 拉起 + BFF 前 source sdk/.env + PYBIN 可移植解析 + env 目录 mkdir
- DEPLOY_FLOW.md: §5.1 重写(176 实战模板: venv/torch 安装顺序/.env 键/ollama 离线携带/下载源可达性/内网直连), §0 增 176 已部署行

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-09 01:01:30 +08:00
adminandClaude Fable 5 e151f675f1 feat(qa-db): QA数据库裸进程标准(deploy/qa-db五脚本+守卫去版本锁定+打包/文档/Excel同步)
- deploy/qa-db/: qdrant/neo4j systemd 裸进程安装脚本+unit模板+整库替换(replace_db.sh)
  * 数据双制品模型: <部署根>/qa-db 与 install 分开传输, 支持频繁整库替换
  * 免编译(官方静态二进制/tarball)+本地 bin/ 离线分发+国内镜像回退
  * 端口 27433/27434+19888/19885(127.0.0.1), 175 docker 容器(27333/19788)为其他项目共享不动
- backend_guard.py: 移除精确计数相等校验(数据库会整库替换/持续更新, 不得锁死版本)
  保留身份校验(release/collection/kb_version/标签/关系类型), 计数仅随 health 返回
- qa/scripts/start.sh: reranker 模型路径回退(install/models/bge-reranker-base)
- build_all.sh: qa-db 脚本+reranker 模型入包; .gitignore: qa-db/bin 离线载体
- DEPLOY_FLOW.md: §0/§5.0/§5.0b/§6.0b/§7 QA 数据库裸进程标准

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-08 17:59:53 +08:00
adminandClaude Fable 5 acf5b734fa feat(deploy): nginx 80 端口代理章节+模板+BFF 改绑 127.0.0.1(仅新增修改,未真实部署)
- deploy/nginx/plantai.conf(新): 80 反代 127.0.0.1:8090 模板,SSE 长连接
  (buffering off/read_timeout 3600s>看门狗 1200s)+大文件上传
  (client_max_body_size 0/request_buffering off/send_timeout 600s)适配
- 绑定脚本: bff_restart.sh/sdk/run.sh/start-dev.sh 默认 0.0.0.0→127.0.0.1
  (nginx 80 为唯一客户入口);build_all.sh start_all heredoc 同改+nginx
  模板入包 install/nginx/
- DEPLOY_FLOW.md: §0 绑定策略更新+nginx 模板位置;新增 §5b 从零安装
  nginx(apt/yum 探测→放模板→nginx -t→启用→防火墙→先 nginx 后改绑的
  切换顺序→内网验证);§6 质检增 nginx 专项(进程/80 监听/经 80 首页+SSE
  冒烟+上传冒烟);§7 注明现网仍是 0.0.0.0:8090 直连形态待按 §5b 迁移

纪律: 仅新增与修改,未在目标机/现网执行任何 nginx 安装或改绑操作。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-08 15:15:21 +08:00
adminandClaude Fable 5 7b63765d69 chore(deploy): vstore 编译硬化纳入打包流水线——目标机不再出现向量库明文代码
- tooling/compile/compile_vstore.sh(新): 复制 compile_sdk.sh 改白名单
  (api.py 入口明文+__init__.py,其余 12 模块 Cython .so+strip+elf 校验)
- build_all.sh: 编译段追加 vstore 编译(SDK_PYTHON);冒烟段追加 import 检查;
  组装段改复制编译产物(此前复制明文源码)
- 实测: 编译 12 .so 成功;冒烟 health+search-chunks 正常;bash -n 过

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-08 01:25:44 +08:00
adminandClaude Fable 5 dbe2037116 chore(deploy): 向量化本地模型(Ollama+bge-m3)纳入部署脚本
- deploy/ollama_restart.sh(新): Ollama 幂等拉起+嵌入模型校验,二进制多候选
  探测(零硬编码),模型缺失只告警不阻断;start_all.sh 在四服务前先拉起
- vstore/vstore_restart.sh(新): 部署树与安装包共用版(路径从脚本位置推导,
  零硬编码),替换部署树旧硬编码脚本(实测重启后 210 文档+210 chunks 完整)
- build_all.sh: 组装段纳入 vstore 明文源码+启动脚本+env 模板;start_all.sh
  heredoc 增加 Ollama 拉起段——安装包自此包含向量化环节

实测: ollama_restart.sh 幂等(已运行跳过,bge-m3 就绪);vstore 新脚本重启
UP(210/210);bash -n 全过。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-08 00:46:31 +08:00
adminandClaude Fable 5 0c98b54b6a chore(bioflow): compile_sdk 白名单补 bioflow_proxy.py——SSE 流式反代属断流崩溃根治同型高危点(TL 运维,2026-09-03 先例)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-06 06:56:10 +08:00
jerryandClaude Fable 5 8467dec3a8 fix(bff): 断流崩溃根治——SSE 取消链模块明文化 + 团队文档归档
客户端中途断开流时 Cython 协程 __Pyx_Coroutine_SendEx 断言 abort 整个 BFF。
证据链:3.2.8 崩 db.c / 3.3.0 仍崩(升级无效) / db 明文后迁移 sse_relay.c,
证明取消链上任意 Cython 协程均可触发。最终把 db.py/qa.py/sse_relay.py
加入编译白名单(明文),隔离实例断流探针 10/10 存活,生产同构建实测通过。
代价:3 模块失去编译硬化(无凭据内容),编译模块 30->27。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-03 21:13:56 +08:00
jerryandClaude Fable 5 5db3ead73e feat(docgen): doc_writer 能力全链——vstore 独立服务 + BFF docgen 路由 + 前端文档工作台
- vstore 独立安装包(8094):解析/嵌入/加密 vault/faiss 检索,存储路径支持本地 file 与 http(s):// URL,启动握手校验,集群化预留(embed 独立模块)
- BFF docgen 路由:上传入库/generate/编辑/导出/下载/主库管理,意图护栏(与前端同词典),vstore 失败兜底,quota 507 与 TTL 惰性清理
- 前端:自然触发意图路由、拖拽上传 chips、能力徽标、右侧文档 TAB(WYSIWYG 编辑/prompt 修改/PDF+DOCX 导出下载)、右栏拖宽+手柄仿左栏
- 批量导入工具 docgen_import.py(并发 8、导入即加密+删源明文)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-03 21:13:37 +08:00
jerryandClaude Fable 5 bbd5db2315 feat(capabilities): S6 Superpowers+S7 终验(文档/humanizer CJK 修复/验收脚本)
- prompts/superpowers_{review,answer_quality,minimal_code}.md + prompt_pack.py
- agentic_controller/answer_composer Superpowers 注入点(env 总闸,关态逐字节一致)
- compile_qa.sh: prompts/ 目录自动拷贝
- humanizer: CJK 逗号规则 + 引用保护收窄(只护标记本身,带引用句可润色)
- docs: README 能力矩阵+env 表 / ARCHITECTURE Gateway 章 / API §6 / PRD:17 /
  TEST_CASES:126 多轮语义 / CHANGELOG
- tooling/cap/final_acceptance.sh 终验矩阵
- 终验: 金标 16/20 regressions=0, 多轮指代 PASS, 热加载 PID 不变 PASS,
  Humanizer 开态「此外」消除且 22 引用保留, 五上游全绿, 7913 已释放

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 18:27:41 +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 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 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 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 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 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