admin
0282cfeeeb
feat(bioflow): 阶段进度条+滚动日志+点击定位全链;图片注入三修;QA启动就绪等待
...
- 生信进度:后端新增 stage_progress 事件帧+进度解析白名单(rnaseq_qc/sample_qc),
kernel 日志流式落盘(20行/1s flush+fsync),logs 分页端点(offset/limit/eof),
事件 seq 跨重启扫描续增(2026-09-17 断流修复);前端 FlowProgressCard 确定性/
不确定两态进度条+点击定位到生信任务 TAB,BioJobsPane DAG 行展开滚动日志区
(3s 轮询),log_tail 4000 截断,重跑 stage_started 清零进度
- 图片注入:figures 三源重构(标准DOI图库主路径/遗留体系兜底/PMC兜底),
[[FIG:]] 宽松归一化识别 PMC/PMID/DOI 三种形态,引文兜底扩展至
[PMCID:]/[DOI:] 且标记未满配额继续注入,注入预算 90s/10篇(175 实测校准),
PMC graphic 无 content-type 宽松正则,空结果不缓存(176 冷连接三连败修复)
- QA 启动自愈:start.sh 启动前等 Qdrant readyz(30min)+Neo4j TCP(10min);
backend_guard 标签校验改子集判定
- 样本配对:同 inode 去重优先真实文件,R1/R2 归一配对一对一认领
- gitignore 新增 *.bak-*/*.before-*/bioflow_service/bioflow.db
测试:bioflow_service pytest 358/358,前端 bioflow vitest 205/205
2026-09-24 16:48:52 +08:00
admin and Claude Fable 5
ba43ba90bf
feat(bioflow): 样本配置 LLM 兜底——规则无法归纳时 DeepSeek 生成描述
...
- inspect_unknown_files:文件特征清单(路径/大小/magic/file 类型/压缩包
内嵌名),无扩展名随机名也能拿到结构化特征
- llm_sample_fallback:描述文件+实况分析均无结果时,把特征清单交给
complete_json(复用 DOCGEN_LLM_* 键)生成样本描述;r1/r2 回验存在性
(清单路径或解压后),幻觉路径丢弃;LLM 失败/未配置静默跳过
- prompt 独立文件(bioflow_service/app/prompts/llm_sample_analysis.txt)
- 5 个新单测(特征×2+回验/幻觉拒绝/不可用×3)+ 340 用例全绿;已部署 176
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-16 20:13:32 +08:00
admin and Claude Fable 5
36d3d8d62a
fix(bioflow): 描述文件候选择优+去除登记文件数上限
...
- 登记目录不再截断 200 文件上限(用户原始数据目录可能很大)
- 描述文件发现改为候选全收→逐份解析→按样本条目数择优(修复
此前选到无样本语义 tsv 导致语义丢失);tsv/csv 平手优先
- samples.yaml 保留描述文件语义(样本名+分组字段),路径经实况校正
- 176 rice 目录终验:登记 244 文件,样本名 HH11_Control_0h_rep1 等
分组语义保留,r1/r2 指向真实 fastq;任务 running
- 340 用例 + 4 场景全绿
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-16 20:03:49 +08:00
admin and Claude Fable 5
f2c101ec65
feat(bioflow): 样本配置智能分析——描述文件优先+实况分析+解压
...
- ensure_samples_yaml 重写(用户要求,不做变体匹配):
1. 描述文件发现(源目录树限深度 4):tsv/csv > xlsx > yaml/yml
2. 实况分析:分类原始序列与压缩包(tar/zip 解压到 input/archives/,
幂等),R1/R2 语义配对(不假设命名规律)
3. 描述文件路径校正:失效路径按 run 标识在实况中定位(唯一命中替换,
按 R1/R2 分边;零命中保留由 CLI 报错)
4. 生成 samples.yaml 引用真实路径,返回 fastq 父目录并入执行容器挂载
- 176 实测:rice 目录 24 样本全部通过输入校验,fastp 真实执行
- 340 用例 + 4 场景(tsv 校正/xlsx/实况配对/压缩包)全绿
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-16 19:54:21 +08:00
admin and Claude Fable 5
750e218541
fix(bioflow): 卡片防误操作+暂停立即生效+确认幂等
...
- 可调整参数卡「继续」成功后按钮隐藏,显示「参数已确认」
- 确认分析路径卡「确认创建任务」成功后按钮隐藏,显示「任务已创建」
- 后端 confirm_stage 幂等:已确认且 running/queued 的重复确认放行(不再 409)
- 暂停立即生效:docker run 加 --name,docker kill 终止执行容器,
running 阶段置 paused、任务即时暂停(kill 的 exit 137 不误判 failed)
- 340 后端用例 + 121 r3debug + 373 主套件全绿;已部署 176
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-16 18:01:24 +08:00
admin and Claude Fable 5
becf76ecd9
feat(bioflow): 分析路径规划中提示——planning 帧+前端思考中状态
...
- 后端 chat 流在规划开始前发 planning 帧(seq=-2,与 plan_ready 同机制)
- 前端收到 planning 帧立即创建 bioflow_path 块(status=running,
脉动圆点+「正在分析需求并规划分析路径…」),plan_ready 填入候选并关闭
- bioflow store 增加 planning/planningText 状态
- 339 后端用例 + 121 r3debug + 373 主套件全绿;已部署 176
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-16 16:15:17 +08:00
admin and Claude Fable 5
dcb810a758
feat(bioflow): wgs/pop/gwas 26 阶段参数契约(与 rnaseq 同款机制)
...
- stage_image_map 加 26 个 wgs/pop/gwas 阶段 cli_contract:
--workspace/--job-id/--prefix 公共三元组 + 上游 manifest 注入
(prev_manifest:<stage> 解析为 workspace/final/{prefix}.{stage}.manifest.json)
+ param:<name> 用户参数 + tool:<name> 镜像内工具
- kernel _contract_args 扩展 prev_manifest/tool 两种 source
- catalog 补 wgs/pop/gwas 参数 schema(确认表单收集参考基因组/样本清单/
表型文件/主成分等)
- 339 用例全绿;已部署 176
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-16 15:33:43 +08:00
admin and Claude Fable 5
3b512fffd0
fix(bioflow): rnaseq/wgs 阶段参数契约——CLI 参数注入+样本配置自动生成+产物路径对齐
...
- stage_image_map 加 cli_contract(13 个 rnaseq 阶段):-i/-o/-c 等
标志按契约注入;无契约阶段保持 --input-dir 默认形态
- rnaseq 系 -o 语义=产物目录,契约注入 workspace/final(CLI 内部以
output.parent 为 workspace 并建 output.parent/final——此前注入
workspace 导致 /job/final 权限错误)
- 登记目录自动生成 samples.yaml(按 f1/r1+f2/r2 配对,不覆盖手工配置;
此前 CLI -c 必填无来源,rnaseq 全链从未真实跑通)
- catalog 补 hisat2_index/gtf/prefix 参数 schema(确认表单收集)
- 338 用例全绿;176 真实任务验证:fastp 在真实 fastq 上产出 clean
产物+报告(首个真实跑通的 rnaseq 阶段)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-16 15:23:50 +08:00
admin and Claude Fable 5
04fb306624
fix(bioflow): 内核树运行时挂载——非 gf 阶段镜像缺 cli 模块
...
- 8 个阶段镜像中仅 bioflow-gf 内置 /bioflow-kernel,其余 7 个
(rnaseq/wgs/gfpy/rnar/rde/pan/interproscan) 执行时 No module named cli
- 服务端统一 -v kernel_dir:/bioflow-kernel:ro + -w /bioflow-kernel,
全部镜像可用,免重建 7 个镜像
- config 新增 kernel_dir/container_kernel_dir(env 可覆盖)
- 337 用例全绿
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-15 23:22:06 +08:00
admin and Claude Fable 5
2ee9af4bd0
fix(bioflow): 路径登记目录展开+黑名单+自动挂载
...
- 登记目录自动展开多文件(扩展名白名单过滤,上限 200)
- 移除白名单根校验(用户数据可在任意位置),改敏感路径黑名单
(/etc /root /proc /var/lib/docker 等前缀 + .env/*.key/id_ed25519 等文件名)
- 登记文件 symlink 进任务 input + server_registered.json 持久化
- 执行容器自动挂载登记路径(-v src:src:ro),跨重启恢复
- 前端 chat.js 兼容 items[] 响应(单文件亦在 items[0])
- 336 用例全绿
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-15 23:11:27 +08:00
admin
e3870d19de
fix(extension): run 方法守卫与 trial 统一——适配器 _real 非 None 即执行
2026-09-15 12:35:48 +08:00
admin
8a58703d61
fix(extension): converted_code 镜像保留嵌套结构(与 raw_code 落盘一致)
2026-09-15 11:51:27 +08:00
admin
1bce4bf587
fix(extension): context 接线改用 _default_exec_config(entry_script_dir 空串致 trial 入口缺失)
2026-09-15 11:37:39 +08:00
admin and Claude Fable 5
9bbe2c83f6
fix(extension): 入口脚本目录解析——176 部署树路径深度不同致 trial 报入口缺失
...
_resolve_extension_entry_dir 按 parents[4] 推导,175 仓库布局成立,
176 部署树(bioflow_service 独立树)深度不同 → 找不到 run_extension.py
→ 试运行报「入口脚本缺失」。修复:env BIOFLOW_EXT_ENTRY_DIR 优先 +
从 __file__ 向上逐级搜索 */bioflow_kernel/cli/run_extension.py + 兜底。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-15 11:24:05 +08:00
admin and Claude Fable 5
d12071a4d7
feat(extension): 上传支持 zip/tar/目录三形态+结构自适应分类
...
- 前端零打包:归档文件(zip/tar/tar.gz/tgz)原样上传服务端解压;
目录拖入/选择器走 webkitRelativePath 多文件直传(filename=相对路径),
隐藏文件/__pycache__ 过滤 + 公共根剥离(参考 PlantAI-dev 主路径)
- 后端 _read_archive 魔数分派(zip/tar.gz/tar)+保留嵌套路径;
code_files 多文件字段;结构自适应分类(目录前缀→命令解析→扩展名,
未知归代码,纯数据 422 可读,纯脚本合法);store 嵌套落盘
- 存量 bug 修复:FormData 字段名 file→code_zip;golden File→JSON+test_file;
http size hint 兼容 code_zip 与多文件求和
- 测试:后端 334/334(新增 10 个变体用例),前端 122/373 全绿
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-15 10:34:52 +08:00
admin and Claude Fable 5
653d2211cf
fix(extension): inject_executor 废弃——曾把生信 stage runner 函数塞进扩展 store
...
根因:get_store() 惰性创建时调用旧 inject_executor,把 context.executor
(生信阶段 runner 执行函数)赋给扩展 store.executor 字段;启动注入真实
执行器时 .inject_real 撞函数对象('function' object has no attribute)。
修复:get_store 不再调;inject_real_executor 一律新建适配器实例注入;
inject_executor 保留空壳兼容。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 17:30:09 +08:00
admin and Claude Fable 5
4128fbf3bf
fix(extension): 执行器守卫与注入修复——active_store 不存在+占位误判已注入适配器
...
验收实测:176 启动日志『has no attribute active_store』(注入
跳过),且占位守卫按 type is ExtensionExecutor 判断——TL 接线的
适配器正是该类,已注入也会被误判 503。修复:注入走 get_store();
守卫改判 _real is None(真正未注入)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 17:27:49 +08:00
admin and Claude Fable 5
68b45c60a0
fix(extension): 扩展意图检测提前到 route_intent 之前
...
验收实测:『创建一个扩展用于统计 fastq 质量』被 route_intent 判
qa(生信词库不识别扩展创建语义),扩展意图判定在 bioflow 分支内
永远到不了。修复:扩展两层判定移到 gen() 开头,命中发
extension_* 帧后返回;不命中走原逻辑(漏判安全)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 17:24:27 +08:00
admin and Claude Fable 5
c0b3026209
fix(extension): docker 镜像引用双后缀拼接——已含 tag 的自动镜像再补 suffix
...
build_command 无脑拼 {image}:{suffix};自动生成镜像名已含 tag
(bioflow-ext-<fp>:<suffix>)→ 拼成 a:b:b 非法引用,175 真实执行
exit 125 invalid reference format。修复:含冒号视为已带 tag,
不补后缀;用例 04 真实容器执行(自动镜像+解析脚本+过滤断言)通过。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 16:01:28 +08:00
admin and Claude Fable 5
bb560d7bea
fix(extension): 自动镜像生成两缺陷——Dockerfile FROM 顺序+timeout 参数名
...
真实 docker build 冒烟暴露:
- render_dockerfile 把 LABEL 放在 FROM 之前,buildkit 报 no build stage
- _inspect_image/_cleanup_failed_build/collect_garbage 传 timeout=
而 _run_docker 形参是 timeout_sec,调用即 TypeError
验证:175 真实 docker build 补装 pandas 3.0.5 成功、指纹去重
REUSE_OK、容器内 import 通过;全量 324/15/122/373 转绿。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 15:59:33 +08:00
admin and Claude Fable 5
812decf310
fix(extension): 测试隔离+注入惰性适配+chat_stream 意图接线
...
TL 测试循环修复:
- conftest 两处 Settings 补 extensions_dir=tmp 隔离(此前测试扩展
落仓库默认目录,跨测试污染致列表排序断言失败)
- inject_real_executor 惰性创建适配器(store.executor 默认 None)
- chat_stream 接扩展意图两层判定:create→extension_upload 帧、
run→extension_candidates 帧、create_ambiguous→引导帧;
扩展链路异常不回退生信主链
- .gitignore 排除 tests/extension_cases_18/(2.6G 测试数据不入库)
验证:bioflow_service 324/324、内核 15/15、ui 122/122+373/373、
真实 docker 冒烟 SMOKE_OK。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 15:09:15 +08:00
admin and Claude Fable 5
3b16397baf
feat(extension): TL 接线——executor 适配/validate 帧/form_defaults/context 注入
...
- extensions.py: ExtensionExecutor 占位改为适配 Dev-B extension_exec
(ExtensionRunSpec→ExtensionRunRequest 翻译;inject_real_executor 注入)
- validate 两落点补 extension_validate 帧(ready_to_publish+form_defaults,
Dev-C 发布卡依赖);新增 _confirm_form_defaults
- context.py: init_context 尾部注入真实执行器,失败静默降级 503
全量测试:bioflow_service 324/324、内核 15/15、ui 122/122+373/373、build 通过。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 13:53:44 +08:00
admin
4fa758d602
Merge branch 'dev/extension-backend' into feature/bioflow-conversation-orchestration
2026-09-14 13:49:25 +08:00
admin and Claude Fable 5
4866b0408a
feat(bioflow): extension lifecycle backend (P0) - spec whitelist, state machine, AI build, intent layers
...
服务端生命周期部分(契约 §1/§2/§4/§5/§6;Dev-A):
- extension_spec.py: spec_v2 白名单 12 占位符 + {output_dir} 必含 + 白名单外拒绝
- extensions.py: 生命周期状态机(契约 §2 枚举) + {extensions}/{ext_id} 文件存储
+ ExtensionExecutor 接口占位(Dev-B 实现 extension_exec.py, inject_executor 注入)
+ extension_* 事件帧经 EventBus 发布(events.py 注册, 不改 job_* 语义)
- extension_llm.py: build/repair AI 转换(DOCGEN_LLM_* 优先, BIOFLOW_EXTENSION_* 别名)
LLM 不可用/坏输出一律回退规则版(_detect_requirements/_command_to_template 移植), 绝不 500
- routers/extension.py: 契约 §6 端点全集; trial/run 执行器未接入返回 503
- intent.py: 契约 §5 两层判定纯函数(A 创建词库 × B 已发布扩展打分 + 歧义消解 + 漏判安全)
chat/stream 接线留给 Dev-C 主分支整合
- config/schemas/main: upload_ext_allow 加 .zip/.py/.r/.sh; extensions_dir +
extension_max_repair_rounds(20) + LLM 键注释; 模型; router 注册
- tests: 5 个测试文件 71 用例; 全仓 286 用例通过
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 13:48:37 +08:00
admin and Claude Fable 5
79b4c7c52c
feat(extension): docker 执行内核入口 + 176 本地自动镜像生成(并行链路)
...
- cli/run_extension.py:容器通用入口(宿主挂载 /opt/bioflow-entry,镜像零改动);
extension.json → 模板渲染(白名单 12 占位符 + param_*,{output_dir} 必含)→
subprocess 执行(无 shell,进程组 SIGTERM→3s→SIGKILL)→ 输出契约校验(空目录退出码 3);
零第三方依赖(镜像内标准库)
- extension_exec.py:服务端 docker 执行器(list-form;三数据卷+入口卷;
--cpus/--memory 白名单独立复制不 import kernel.py;terminate→kill 同约定;
返回 {exit_code,timed_out,log_tail,cmd};run_stream 逐行增量)
- extension_image.py:指纹 sha256(base+tag+排序依赖) 前 12 位 →
bioflow-ext-<fp>:dev;inspect 命中复用;Dockerfile FROM base + apt + /opt/conda/bin/pip;
失败分类(pip/apt/network/timeout/docker_missing)+ LABEL 定位中间层清理;
registry 台账 + 引用计数 + collect_garbage
- extension_streams.py:契约 §4 事件流(trial/run async 生成器,增量日志节流,
EventBus 双发,防御性失败帧,aclose 回收)
- 单测 53 用例(15 unittest + 38 pytest)全绿;现有 bioflow 226 用例回归通过
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 13:36:18 +08:00
admin and Claude Fable 5
7037a1d5d8
fix(deploy): restart 脚本 lsof 只取 LISTEN 态进程
...
2026-09-12 部署实测:lsof -ti tcp:PORT 返回该端口上所有 socket 的
进程——包括 BFF 到 8098/8094 的已建立连接,不只监听者。kill 多行
PID 时旧进程存活、新进程绑定失败静默退出(vstore 报 address already
in use;生信 restart 后仍是旧进程)。改 -sTCP:LISTEN 只取监听者,
kill 不再加引号(多 PID 需分词)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-12 18:22:11 +08:00
admin and Claude Fable 5
759427b759
chore(deploy): 启动脚本绑定策略统一——8090 默认 0.0.0.0,其余服务默认 127.0.0.1
...
用户规则:提供客户 UI 的服务(BFF 8090)默认绑 0.0.0.0 面向内网客户
访问;其余内部服务(QA/methodology/legacy/vstore/bioflow)默认绑
127.0.0.1 不对外暴露。
- deploy/bff_restart.sh: BIND 默认 127.0.0.1 → 0.0.0.0(注释同步)
- sdk/run.sh: --host 127.0.0.1 → 0.0.0.0(注释同步)
- deploy/start-dev.sh: BFF 行 127.0.0.1 → 0.0.0.0
- bioflow_service/restart.sh: BIOFLOW_BIND_HOST 默认 0.0.0.0 → 127.0.0.1
- agent/methodology/scripts/start.sh: METHODOLOGY_API_HOST 默认
0.0.0.0 → 127.0.0.1(部署树副本同改)
实测:8090→0.0.0.0、8091/8092/8093/8094/8098/8099→127.0.0.1,
BFF 上游全 OK,8092/8098 已按新默认值重启,残留 methodology 旧
进程已清理。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-07 18:55:42 +08:00
admin and Claude Fable 5
bd011650f6
fix(bioflow): 意图分流收窄 v1.1——仅明确分析指令进生信流,问答句一律 qa
...
用户反馈:不是所有对话都走生信编排,只有「用xxx进行分析」「帮我分析xxx」
类明确指令才是生信流程;「水稻SPL基因家族的最新研究进展有哪些?」
等问答句必须走原正常问答流程。
- intent.py/intent.js 同表双跑:任务动词+对象 / 前缀分析句式 / 分析链句式
三通道;新增疑问引导词+问答主题词两道拦截;「研究」移出任务动词
(「帮我研究一下水稻SPL家族」经前缀通道仍保 bioflow)
- cases_bioflow_intent.md 升 v1.1:40+15 用例,新增 #41-#55 问答句收窄
- test_intent.py 补 v1.1 用例,50 条全绿;PRD FR-BIO-001 同步收窄
- 部署:8098 已重启,ui/dist 重建同步 deploy-unified,浏览器端到端验证 PASS
(问答句走 /api/qa/chat/stream,分析指令走 /api/bioflow/chat/stream 出路径卡)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-07 18:13:52 +08:00
admin and Claude Fable 5
06b4abf28b
fix(bioflow): P7 文件引导闭环修复——上传/路径登记后自动续跑(retry_after_files,await_inputs 重推,非等待态 no-op)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-06 09:17:17 +08:00
admin and Claude Fable 5
a38e7707dd
fix(bioflow): P7 部署加固——restart.sh source .env(llm.py 裸读 DOCGEN_LLM_* 环境变量先例同 bff_restart)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-06 08:50:00 +08:00
admin and Claude Fable 5
d3110c4319
fix(bioflow): R1 缺陷修复——反代 aread 时序(uvloop 大响应体 502)/flow_store 启动接线(ask 引用块)/events snapshot dict 保真
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-06 08:36:08 +08:00
admin and Claude Fable 5
35bf6889a4
fix(bioflow): 部署期 P1 双缺陷修复——context 值导入脱钩 init_context 重绑定(路由层动态取模块全局)+BFF 反代非 SSE 透传 bytes 500(改纯透传 Response)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-06 07:22:01 +08:00
admin and Claude Fable 5
3cf44b4a61
fix(bioflow): 部署加固——生信服务 SSE 路由入编译白名单(断流崩溃根治同款)+bff_restart 杀进程按端口精确(防误杀 8098)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-06 06:54:45 +08:00
admin and Claude Fable 5
b0c802095c
feat(bioflow): P1 生信服务地基——bioflow_service 8098 独立部署树(12 服务模块+3 路由层+SQLite 三表+166 用例全绿)+BFF 流式反代/报告登记(BIOFLOW_ENABLED 开关默认关)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-06 05:36:10 +08:00