-
深度搜索优化已落地到 QueryEngine:新增
search_strategy.py,支持识别basic_components/core_concepts类查询,生成 broad queries、抽取候选概念池、生成 verification queries,并输出验证矩阵、来源交叉验证、剔除项和初学者友好的结构化摘要。 -
QuerySearchNode现在会对“基本组成 / 核心要点 / 主要部分 / 入门结构”类查询启用两阶段搜索:先追加宽泛搜索建立候选概念池,再围绕候选概念发起定向验证查询;普通 evidence task 仍保持原有改写与队列兼容。 -
QueryReflectionNode会把弱验证候选概念纳入缺口判断;QuerySummaryNode和QueryFormattingNode会展示结构化答案、候选概念池、验证矩阵、扩展项剔除和来源交叉验证。 -
scripts/simulate_query_task.py的 dry-run 支持离线上下文:当localhostAPI 不可用但传入--query --dry-run时,仍能展示 QueryEngine rewrite、search_intent、broad queries 和权威查询计划。 -
验证:
uv run ruff check knowledgeforge/agent/QueryEngine scripts/simulate_query_task.py tests/test_query_engine.py通过;uv run python -m py_compile ...通过;uv run pytest -q tests/test_query_engine.py结果14 passed;simulate_query_task.py --dry-run --json-only可输出basic_components、broad queries 和离线 rewrite 结果。 -
新增
knowledgeforge/agent/QueryEngine/source_priority.py,将权威来源优先级表、LLM prompt 拼接、LLM JSON 解析、队列规整和非 LLM 来源类型推断放入 QueryEngine 内部能力。 -
QueryEngine 真实链路已接入来源优先级:搜索规划 prompt 直接带权威来源表;
_prepare_plan_questions会补齐source_priority / authority_queries / acceptance_criteria;run_evidence_task会在单条证据任务 rewrite 时自动推断优先来源和site:权威查询。 -
scripts/build_source_priority_query_queue.py已改为薄包装,只调用 QueryEngine 内部source_priority能力,保留--dry-run / --mock-response / --output用于调试。 -
scripts/simulate_query_task.py也已适配:现在会展示 rewrite 后的effective_task_after_rewrite,并在队列预览中直接显示preferred_source_types与authority_queries,便于排查 QueryEngine 内部来源优先级是否生效。 -
验证:
uv run ruff check knowledgeforge/agent/QueryEngine scripts/build_source_priority_query_queue.py tests/test_query_engine.py通过;uv run python -m py_compile knowledgeforge/agent/QueryEngine/source_priority.py knowledgeforge/agent/QueryEngine/prompts/prompts.py knowledgeforge/agent/QueryEngine/nodes/search_node.py knowledgeforge/agent/QueryEngine/agent.py scripts/build_source_priority_query_queue.py通过;uv run pytest -q tests/test_query_engine.py结果12 passed;脚本--dry-run和normalize_source_priority_queue(...)离线样例均可正常输出。
- 按用户新要求将 Query/Media 搜索入口收敛为 Google-only:
SEARCH_PROVIDERS仅保留google,浏览器搜索和 HTTP fallback 均不再调用 Bing,脚本search_settings.providers也只输出["google"]。 - 增加 Google
/url?q=...结果解析,避免只接受直连http链接导致漏掉 Google redirect 中的真实结果。 - 将来源优先级固化到 QueryEngine prompt 和 rewrite 步骤:通用概念优先
en.wikipedia.org/zh.wikipedia.org;技术/编程优先docs.python.org/developer.mozilla.org/arxiv.org/github.com;AI/ML 论文优先arxiv.org/paperswithcode.com/huggingface.co;新闻时事优先 Reuters/BBC/The Guardian;学术优先 Google Scholar/Semantic Scholar;官方文档优先产品官网。 - Query 单任务 rewrite 会基于
preferred_source_types/source_priority自动追加site:权威域名查询;当前sub_def_scope-task-1 --dry-run已从泛化查询改为Deep Learning 定义与边界 site:en.wikipedia.org、site:zh.wikipedia.org、site:arxiv.org等 Google 查询。 - 验证:
uv run ruff check本次触达文件通过;uv run python -m py_compile本次触达 Python 文件通过;uv run pytest -q tests/test_multi_provider_search.py tests/test_browser_fallbacks.py tests/test_source_relevance_filter.py tests/test_query_engine.py tests/test_source_probe_scripts.py结果44 passed;uv run pytest -q tests/test_workflow.py tests/test_media_engine.py结果55 passed;uv run pytest -q结果173 passed。
- 优化
scripts/simulate_query_task.py调试体验:新增--list-queue、--queue-status、--queue-limit,可先筛选/预览队列任务,并展示每个任务经过 QueryEngine rewrite 后的primary_query。 - 新增
--json-only,用于输出单个 JSON 对象,便于脚本化分析;默认不再实时打印 crawler trace,避免日志打断 JSON 段,需实时观察时可加--show-trace。 query_result新增diagnostics,自动标记 Bing redirect 被选中、搜索引擎 publisher 被误判为 official 等问题,方便定位证据筛选 bug。- 验证:
uv run python -m py_compile scripts/simulate_query_task.py通过;uv run ruff check scripts/simulate_query_task.py通过;--help、--list-queue --queue-status pending --queue-limit 3 --json-only、sub_def_scope-task-1 --dry-run --json-only和真实单任务--json-only --no-embeddings均可正常输出。
- 调整图谱补全队列的 evidence task 默认生成逻辑:
query_text改为“领域名 + 节点标题/证据主题”,例如Deep Learning 行业落地案例,不再生成补充 ... 的关键依据 official documentation这类低价值查询。 - 更新 framework 证据文件 prompt,要求 LLM 输出短搜索词,并将
claim_or_gap写成待证事实本身而不是执行动作,减少 token 消耗和后续 query rewrite 噪声。 - 在入队和 QueryEngine 单任务 rewrite 两层增加降噪:过滤
补充、关键依据、官方或高公信力链接、与知识点最贴近等操作性文案;旧队列中的定义与边界 official documentation wikipedia会规整为Deep Learning 定义与边界。 - 验证:
uv run ruff check knowledgeforge/agent/QueryEngine/agent.py knowledgeforge/server/orchestrator/graph.py knowledgeforge/server/prompts/knowledge_file_generation.py tests/test_query_engine.py tests/test_workflow.py通过;uv run python -m py_compile knowledgeforge/server/orchestrator/graph.py knowledgeforge/server/prompts/knowledge_file_generation.py knowledgeforge/agent/QueryEngine/agent.py通过;uv run pytest -q tests/test_query_engine.py tests/test_workflow.py结果59 passed;当前sub_def_scope-task-1 --dry-run输出已改为Deep Learning 定义与边界。
- 增强
scripts/simulate_query_task.py的调试输出:现在分段打印api_request、query_request和query_result,便于定位前端单个查询卡片对应的后端读取、查询改写和实际搜索结果。 query_request会列出 evidence task 的目标节点、原始 query、claim/expected evidence、preferred source types、QueryEngine 改写出的 primary/authority/fallback queries,以及 Google/Bing 搜索设置。query_result会列出耗时、选中来源、每次搜索 attempt、sources、execution_log、raw_material 和 crawler trace;--dry-run会明确提示未执行搜索。- 用当前
sub_def_scope-task-1验证发现真实执行会将 Bing redirect 的知乎结果选为official候选,后续可据此继续优化 Bing redirect 解码、来源类型判定和低权威候选拦截。 - 验证:
uv run python -m py_compile scripts/simulate_query_task.py通过;uv run ruff check scripts/simulate_query_task.py通过;uv run python scripts/simulate_query_task.py --help通过;对当前任务执行--dry-run和真实单条查询均成功输出请求、查询和结果段。
- 新增
scripts/simulate_query_task.py,用于从/tasks//tasks/{task_id}读取当前队列,选择单个task_queue_snapshot.tasks项并直接调用QueryEngine.run_evidence_task(...)。 - 脚本支持
--task-id、--queue-task-id、--node-id、--query、--claim、--expected、--preferred-source、--dry-run和--output,方便复现前端单卡片查询并调试搜索优化。 - 将
knowledgeforge.server.create_app改为懒加载,避免脚本直接导入 QueryEngine 时触发 server/api/task_service 的循环初始化。 - 验证:
uv run python -m py_compile scripts/simulate_query_task.py knowledgeforge/server/__init__.py通过;uv run ruff check scripts/simulate_query_task.py knowledgeforge/server/__init__.py通过;uv run python scripts/simulate_query_task.py --help通过;对当前sub_def_scope-task-1执行--dry-run成功读取目标节点、查询文本和预期证据。
- 将图谱上下文进度卡从路径/保存语义改为图谱语义:主标题显示当前图谱节点标题,详情显示“建议路径”,避免在查询填充阶段误称为目标文件。
- Neo4j 右侧节点详情现在按
target_node_id从运行态队列中列出待查证据和已完成证据任务,完成项会展示 selected link / relevance reason / source kind 等简要结果。 - 查询队列卡片继续使用“目标节点”,并去掉前端中的“目标文件”文案;真正的文件目标语义保留给后续补全文档流程。
- 验证:
node --check knowledgeforge/web/static/js/dashboard.js通过;uv run pytest -q tests/test_dashboard.py结果11 passed。
- 修复查询填充阶段队列卡片仍显示“目标文件”的问题:前端现在优先根据
target_node_id/structure_node_id展示“目标节点”,并从当前结构图谱解析节点标题。 - 无节点 id 的兼容场景仍回退为“目标位置”,显示 suggested relative path 或 target file path。
- 验证:
node --check knowledgeforge/web/static/js/dashboard.js通过;uv run pytest -q tests/test_dashboard.py结果11 passed。
- 修复
/tasks/{task_id}/stream在后台任务更新运行态 dict 时调用get_task(),导致_serialize_state()抛出RuntimeError: dictionary changed size during iteration的问题。 _serialize_state()和嵌套 dict 序列化现在先获取稳定items快照;遇到并发扩容会重试,避免 SSE headers 已发送后流式响应崩溃。- 补充回归测试模拟 dict 在
items()期间增长,确认序列化能恢复并保留后到字段。 - 验证:
uv run ruff check knowledgeforge/server/services/task_service.py tests/test_workflow.py通过;uv run pytest -q tests/test_workflow.py::test_serialize_state_tolerates_concurrent_dict_growth tests/test_workflow.py::test_async_task_detail_includes_realtime_query_action结果2 passed;uv run python -m py_compile knowledgeforge/server/services/task_service.py通过;uv run pytest -q tests/test_workflow.py结果47 passed。
- 将 QueryEngine 主链路搜索来源收敛为 Google/Bing,移除 DuckDuckGo、Brave、supplemental source 和 Wikipedia API 自动补充在 QueryEngine 主流程中的参与。
- 新增
authority_queries、候选分数、provider 和匹配原因等内部状态;LLM 计划和 evidence task 都会生成主查询、权威改写查询和 fallback 查询。 - 增强候选精排:结合 URL 权威性、官方域名、论文/标准/项目主页信号、查询 token 和 expected evidence 匹配度打分;低分候选只记录为 rejected,不进入最终 sources。
- 更新 evidence link 选择说明,
relevance_reason现在会带上候选标题/摘要证据提示。 - 验证:
python -m py_compile knowledgeforge/agent/QueryEngine/state/state.py knowledgeforge/agent/QueryEngine/utils/ranking.py knowledgeforge/agent/QueryEngine/tools/crawler.py knowledgeforge/agent/QueryEngine/nodes/search_node.py knowledgeforge/agent/QueryEngine/agent.py knowledgeforge/server/orchestrator/graph.py通过;uv run ruff check knowledgeforge/agent/QueryEngine knowledgeforge/server/orchestrator/graph.py tests/test_query_engine.py tests/test_multi_provider_search.py tests/test_source_relevance_filter.py通过;uv run pytest -q tests/test_query_engine.py tests/test_multi_provider_search.py tests/test_source_relevance_filter.py结果31 passed;uv run pytest -q tests/test_quality_source_checks.py tests/test_completeness_source_gate.py结果9 passed;uv run pytest -q tests/test_workflow.py结果46 passed。
- 将左下角执行耗时浮窗改为前端本地秒表:任务运行 payload 到来后按本地时间每秒递增,不依赖后端每次推送更新耗时。
- 后端返回终态、SSE done 或错误时冻结计时,并显示对应状态;新的 task id 会重置计时状态。
- 验证:
node --check knowledgeforge/web/static/js/dashboard.js通过;uv run ruff check tests/test_dashboard.py通过;uv run pytest -q tests/test_dashboard.py结果11 passed。
- 新增第三轮
structure_depth审查:在结构覆盖和执行准备度之后,专门检查倒数第二级节点是否过薄、方法族是否只挂单个叶子、叶子节点是否过宽且值得拆分。 - 新增结构深化 review prompt、深度审查上下文和第三轮 repair 节点;第三轮修补只针对有明确价值的目标分支,修补后重新准备图谱补全文档上下文并进入
graph_ready。 - 前端 review 计数与文案改为三段 Review,并保留左下角固定状态窗口显示执行耗时与 Token。
- 同步更新
docs/项目需求.md、docs/流程执行文档.md、task_plan.md和findings.md。 - 验证:
python -m py_compile knowledgeforge/server/orchestrator/graph.py knowledgeforge/server/prompts/knowledge_file_generation.py通过;node --check knowledgeforge/web/static/js/dashboard.js通过;uv run ruff check knowledgeforge/server/orchestrator/graph.py knowledgeforge/server/prompts/knowledge_file_generation.py tests/test_workflow.py tests/test_dashboard.py通过;uv run pytest -q tests/test_workflow.py tests/test_dashboard.py结果57 passed。
- 将两轮同构架构 review 拆为
structure_coverage和completion_readiness:第一轮只审结构覆盖,第二轮在图谱补全文档上下文准备后审证据需求、query 任务、建议路径和治理准备度。 - 将原图谱补全节点拆为
prepare_graph_completion_context与finalize_graph_for_completion;第二轮 readiness 修补后会重新 prepare,再进入graph_ready,避免队列和 Neo4j 节点上下文陈旧。 - 前端流程文案从“架构Review”更新为“两段Review”,摘要中展示结构覆盖 / 准备度阶段。
- 同步更新
docs/项目需求.md、docs/流程执行文档.md、task_plan.md和findings.md。 - 验证:
python -m py_compile knowledgeforge/server/orchestrator/graph.py knowledgeforge/server/prompts/knowledge_file_generation.py通过;node --check knowledgeforge/web/static/js/dashboard.js通过;uv run ruff check knowledgeforge/server/orchestrator/graph.py knowledgeforge/server/prompts/knowledge_file_generation.py tests/test_workflow.py tests/test_dashboard.py通过;uv run pytest -q tests/test_workflow.py tests/test_dashboard.py结果56 passed。
- 新增
POST /tasks/{task_id}/learning-plan,基于结构图谱、节点层级、学习顺序、细分领域、证据队列和路径上下文生成由浅入深到精通的学习计划。 - 学习计划保存为任务状态
learning_plan衍生产物;不改变默认主链路,不提前写入本地知识 Markdown,也不新增 ChromaDB 等存储依赖。 - 前端任务操作区新增“生成学习计划”按钮,响应区新增“图谱学习计划”面板,展示阶段目标、主题、证据状态、练习和检查点。
- 验证:
python -m py_compile knowledgeforge/services/task_service.py knowledgeforge/server/api.py knowledgeforge/orchestrator/state.py通过;node --check knowledgeforge/web/static/js/dashboard.js通过;uv run ruff check knowledgeforge/services/task_service.py knowledgeforge/server/api.py tests/test_dashboard.py通过;PYTHONPATH=. pytest -q tests/test_dashboard.py结果11 passed;PYTHONPATH=. pytest -q tests/test_workflow.py tests/test_dashboard.py结果56 passed。
- 在 Neovis 图谱头部新增“显示全部边 / 收起压缩边”按钮,默认保持当前的骨架视图。
- 打开开关后,会把目前被压缩隐藏的原始关系边补出来,并使用虚线样式显示,方便对照图中主骨架与完整关系。
- 再次点击按钮会回到默认压缩视图;节点选中、聚焦和右侧详情行为保持不变。
- 验证:
node --check knowledgeforge/web/static/js/dashboard.js通过;uv run pytest -q tests/test_dashboard.py tests/test_graph_client.py结果11 passed。
- 右侧“相邻关系”从单列表改成“来自”和“指向”两个分组,阅读路径更清楚,尤其适合结构节点连接较多的场景。
- 分组后的关系项继续保留点击聚焦能力,交互逻辑不变。
- 验证:
node --check knowledgeforge/web/static/js/dashboard.js通过;uv run pytest -q tests/test_dashboard.py tests/test_graph_client.py结果11 passed。
- 右侧“相邻关系”列表现在支持点击聚焦对应节点:点击“来自/指向”关系项会复用现有
focusNeo4jNode(...)逻辑,自动选中并将左侧图谱居中到对应节点。 - 同步补充可点击态样式,让关系项在 hover 时有更明确的交互反馈。
- 验证:
node --check knowledgeforge/web/static/js/dashboard.js通过;uv run pytest -q tests/test_dashboard.py tests/test_graph_client.py结果11 passed。
- 修复问题列表残留:右侧“问题知识点”现在会按当前 Neo4j 图谱快照的
graph.nodes过滤,只展示左侧图中真实存在、也能被标红的问题节点。 - 红色高亮集合和右侧列表使用同一套过滤后的
graph_id集合,避免左侧没有红点但右侧仍显示旧问题项。 - 验证:
node --check knowledgeforge/web/static/js/dashboard.js通过;uv run pytest -q tests/test_dashboard.py tests/test_graph_client.py结果11 passed。
- 修复问题知识点检查结果按“匹配结构关系”重复返回的情况:同一个噪声节点命中多个结构节点时,后端现在按
graph_id聚合,只在结果里保留一条问题节点记录。 - 聚合后会合并
relationship_types,并保留matching_candidates供后续扩展使用;当前列表数量会与图谱中的实际红色问题节点数量保持一致。 - 验证:
python -m py_compile knowledgeforge/graph/client.py通过;uv run pytest -q tests/test_graph_client.py tests/test_dashboard.py结果11 passed。
- 去掉 Neo4j 图谱外层容器的整体滚动,保留图谱固定展示和右侧详情栏独立滚动,避免再次出现整块图谱一起滑动。
- “检查知识点” 返回的问题节点现在会在 Neovis 图谱中使用红色节点渲染,即使节点不是结构节点,也会被优先纳入当前可见集合。
- 右侧“问题知识点”卡片支持点击聚焦:点击卡片会选中对应图谱节点,并把左侧图谱平滑居中到该节点;操作按钮区域仍保持原来的删除 / 连接行为。
- 验证:
node --check knowledgeforge/web/static/js/dashboard.js通过;uv run pytest -q tests/test_dashboard.py结果10 passed。
- 优化 Neo4j 实时知识图谱展示:桌面布局中图谱区域保持稳定高度,左侧 Neovis 画布填满容器且不随右侧详情内容滚动。
- 右侧节点详情 / 检查结果栏改为独立纵向滚动,避免问题列表过长时拖动整个图谱面板。
- 窄屏单列布局保留自然高度,并给详情栏设置独立最大高度,避免移动端内容挤压图谱。
- 验证:
node --check knowledgeforge/web/static/js/dashboard.js通过;PYTHONPATH=. pytest -q tests/test_dashboard.py结果10 passed。
- 开始实现点击 Neo4j 图谱叶子节点后继续扩展知识点的后端接口。
- 已确认核心约束:读取被点击节点的一跳关联上下文,拼接给 LLM;结果合并到任务
structure_graph,同步 Neo4j,并返回可供前端立即刷新的图谱快照。 - 新增
POST /tasks/{task_id}/graph/nodes/expand:普通调用只允许扩展叶子节点;前端按钮使用force=true可在已有子分支时继续追加。 - 后端扩展流程会优先读取 Neo4j 关联上下文,失败时回退本地
structure_graph;LLM 未返回可用结构时生成 3 个基础子知识点作为 fallback。 - 前端 Neo4j 右侧节点详情新增“扩展知识点”按钮,成功后立即用返回的
graph_snapshot刷新图谱,并触发一次 Neo4j fallback 刷新。 - 验证:
uv run ruff check knowledgeforge/services/task_service.py knowledgeforge/server/api.py tests/test_dashboard.py通过;node --check knowledgeforge/web/static/js/dashboard.js通过;python -m py_compile knowledgeforge/services/task_service.py knowledgeforge/server/api.py通过;PYTHONPATH=. pytest -q tests/test_dashboard.py结果9 passed;PYTHONPATH=. pytest -q tests/test_workflow.py tests/test_dashboard.py结果53 passed。 - 本地开发服务已启动在
http://127.0.0.1:5002;5001当时已被占用。
- 排查用户在
http://localhost:5001/标记的 Deep Learning 任务,后端任务实际已终止为research_required,不是仍在运行。 - 根因:LLM 生成的结构节点显式写入
required_query_tasks=0,现有规范化逻辑尊重该值,导致图谱补全阶段每个节点enqueued_tasks=0、证据队列总数为 0;治理摘要没有任何可引用来源,因此质量检查失败并进入research_flow。 - 修复:
subtopic/article节点即使 LLM 显式给required_query_tasks=0,也默认保留 1 个证据查询任务;只有显式requires_query=false时才允许跳过。 - 用当前 Deep Learning 任务的真实
structure_graph复核:修复后 23 个蓝图中有 17 个会派生证据查询任务。
- 新增
scripts/experiment_expand_graph_node.py,用于从/tasks找最新任务、查询 Neo4j 中该任务领域下的 article/subtopic 叶子节点,并调用/tasks/{task_id}/graph/nodes/expand做端到端测试。 - 脚本支持
--base-url、--task-id、--node-id、--force和--dry-run;默认会实际调用扩展 API,--dry-run只打印候选节点。 - 验证:
python -m py_compile scripts/experiment_expand_graph_node.py、PYTHONPATH=. python scripts/experiment_expand_graph_node.py --help、uv run ruff check scripts/experiment_expand_graph_node.py均通过。 - 对当前
http://localhost:5001干跑选中 Deep Learning 任务的article_definition_scope;实际调用扩展 API 成功,新增 5 个子知识点,返回图谱快照28个节点、57条边,Neo4j 同步状态为passed。
- 新增图谱问题检查能力:
GET /tasks/{task_id}/graph/issues会列出和正式KnowledgeStructureNode重名、但自身不是结构节点的Entity/SubTopic/Article候选噪声节点。 - 新增两个操作接口:
POST /tasks/{task_id}/graph/issues/delete清除多余节点;POST /tasks/{task_id}/graph/issues/link把候选节点用RELATED_TO连到匹配的结构节点。 - 前端 Neo4j 图谱增加“检查知识点”按钮,右侧详情栏会展示问题知识点列表,并提供“清除多余节点”和“连接到结构节点”操作。
- 在当前
localhost:5001的 Deep Learning 任务上验证检查接口,成功列出 4 个候选问题节点,包括截图中的“数学与工程前置”重名节点。
- 根据浏览器反馈降低详情浮窗的透底感:改为更实的不透明背景、更清晰边框、更重阴影和更高对比文字颜色。
- 验证:
uv run ruff check tests/test_dashboard.py、PYTHONPATH=. pytest -q tests/test_dashboard.py均通过,相关测试结果7 passed。
- 修复流程步骤详情 popover 被后续步骤卡片遮挡的问题:为普通卡片设置基础层级,hover / focus / focus-within 时抬高当前卡片层级,并提高详情浮窗 z-index。
- 验证:
uv run ruff check tests/test_dashboard.py、PYTHONPATH=. pytest -q tests/test_dashboard.py均通过,相关测试结果7 passed。
- 为前端流程图 07 “治理质检”卡片增加 hover / focus 详情层,说明触发条件与执行步骤。
- 详情内容覆盖证据队列完成 / 达到治理资格、结构化抽取、Neo4j 路径关联、质量检测、repair_flow / research_flow 分类和版本资格记录。
- 扩展为全部 10 个流程步骤都支持 hover / focus 查看详情;详情框采用浮动 popover,不占用流程图卡片布局空间。
- 验证:
node --check knowledgeforge/web/static/js/dashboard.js、uv run ruff check tests/test_dashboard.py、PYTHONPATH=. pytest -q tests/test_dashboard.py均通过,相关测试结果7 passed。
- 修复用户点击恢复旧
repair_required检查点时报_TaskCancelled: task ... was stopped by system initialization的问题。 resume_task(...)现在会在确认任务不是运行中后清理该 task id 的初始化取消标记,再进入结构修复接续或普通恢复流程;系统初始化仍会停止当时正在运行的任务。- 补充回归覆盖:旧结构修复检查点即使残留在
_cancelled_task_ids中,显式恢复也能继续执行。 - 验证:
uv run ruff check knowledgeforge/services/task_service.py tests/test_workflow.py tests/test_dashboard.py、python -m py_compile knowledgeforge/services/task_service.py、PYTHONPATH=. pytest -q tests/test_workflow.py tests/test_dashboard.py均通过,相关测试结果51 passed。
- 根据浏览器批注调整架构 review 后的修复流:第二轮 review 仍发现缺口时,不再停到
repair_required / 可恢复,而是执行第二轮自动修补、同步 Neo4j,并直接进入图谱补全和后续证据 / 治理链路。 - 第二轮结构修补后将
structure_review_status标记为auto_repaired,本地图谱节点状态置为approved,并在current_action中明确“已自动修补并同步 Neo4j”。 - 前端耗时状态中
repair_required文案从“待修复,可恢复”改为“待系统修复”,避免暗示需要人工处理。 - 旧任务的
/tasks/{task_id}/resume兼容入口仍保留,但新任务不再需要用户点击恢复才能继续。 - 验证:
uv run ruff check knowledgeforge/orchestrator/graph.py knowledgeforge/services/task_service.py tests/test_workflow.py tests/test_dashboard.py、python -m py_compile knowledgeforge/orchestrator/graph.py knowledgeforge/services/task_service.py、node --check knowledgeforge/web/static/js/dashboard.js、PYTHONPATH=. pytest -q tests/test_workflow.py tests/test_dashboard.py均通过,相关测试结果51 passed。
- 根据浏览器批注修正 08「图谱证据写入」定位:它属于默认 Neo4j 主链路必需能力,不再标记为可选。
- Workflow 新增自动
record_evidence_to_graph节点:治理质检后写入selected_link/source_kind/reachable/relevance_reason/checked_at/claim_or_gap/expected_evidence等字段,并记录document_evidence_sync与evidence_link_recorded事件。 - 前端 Flow Map 与
FLOW_STEPS文案同步为必需步骤;09「补全文档」和 10「版本研报」仍保持可选。 - 同步更新
docs/项目需求.md、docs/流程执行文档.md、task_plan.md和findings.md。 - 验证:
python -m py_compile knowledgeforge/orchestrator/graph.py knowledgeforge/services/task_service.py、node --check knowledgeforge/web/static/js/dashboard.js、uv run ruff check knowledgeforge/orchestrator/graph.py tests/test_workflow.py tests/test_dashboard.py、PYTHONPATH=. pytest -q tests/test_workflow.py tests/test_dashboard.py均通过,相关测试结果51 passed。 - 记录:曾误把 JavaScript 文件传给
ruff,该命令按 Python 解析 JS 后失败;已改用node --check验证 JS、ruff只检查 Python 文件。
- 根据浏览器批注调整流程:默认主链路保留
evidence_link_query可信链接查询,但不再触发evidence_link_recorded,也不再把selected_link/source_kind/reachable/relevance_reason/checked_at/claim_or_gap等证据字段写入 Neo4j。 /tasks/{task_id}/documents/complete现在会先执行图谱证据同步,记录document_evidence_sync,追加evidence_link_recordedworkflow event,再生成本地 Markdown。- 历史记录:当时前端流程顺序曾更新为“证据链接 → 治理质检 → 可选图谱证据写入 → 补全文档”;后续已按最新批注改为必需 Neo4j 步骤。
- 历史记录:当时曾把图谱证据写入口径统一为补全文档前的可选动作;后续已按最新批注改为默认主链路必需动作。
- 验证:
uv run ruff check knowledgeforge/services/task_service.py knowledgeforge/orchestrator/graph.py tests/test_workflow.py tests/test_dashboard.py、python -m py_compile knowledgeforge/services/task_service.py knowledgeforge/orchestrator/graph.py、node --check knowledgeforge/web/static/js/dashboard.js、PYTHONPATH=. pytest -q tests/test_workflow.py tests/test_dashboard.py均通过,相关测试结果51 passed。
- 按用户确认的新方向同步
docs/项目需求.md、docs/流程执行文档.md、docs/知识文档格式规范.md、task_plan.md和findings.md。 - 文档口径调整为:默认主链路只完善 Neo4j 知识图谱、review 结果、证据链接、建议路径和治理状态;本地知识 Markdown 只在用户点击
/tasks/{task_id}/documents/complete后生成。 - 明确未点击补全文档时,不要求
save/{领域}/README.md或知识点 Markdown 存在;运行态状态、日志、缓存和队列文件不属于知识文档落盘。 - 明确 Neo4j 节点需保存补全文档所需字段,包括
evidence_links、selected_link、source_kind、reachable、relevance_reason、checked_at、claim_or_gap、expected_evidence、review_status、repair_log、suggested_relative_path和document_completion_status。 - 未直接编辑
docs/流程图.excalidraw,遵守本次计划的文档范围。
- 将默认 workflow 从本地架构 Markdown 生成改为图谱补全文档上下文:review 通过后写入 Neo4j 节点状态、建议路径、证据需求和
document_completion_status=not_requested,不生成save/{领域}/README.md或知识点 Markdown。 - 证据阶段继续使用 QueryEngine 查询可信链接,但实时文件保存会在默认主链路中跳过;证据结果先写入运行态队列、SSE payload 和本地图谱快照,Neo4j 证据字段改由补全文档动作前置写入。
- 治理阶段改用
.knowledgeforge/tasks/graph_governance/下的运行态图谱治理摘要,避免把治理摘要当作本地知识库 Markdown 落到save/。 /tasks/{task_id}/documents/complete现在负责唯一的知识 Markdown 落盘入口:前置检查通过后创建缺失的文档骨架、消费队列证据补全文档,并把generated_path/document_completion_status=generated同步回图谱。- 历史记录:前端流程和图谱状态文案曾同步为“图谱补全 / 证据链接 / 治理质检 / 可选图谱证据写入 / 补全文档”,并新增
completion_ready、document_generating状态展示;后续 08 已改为必需 Neo4j 步骤。 - 运行
PYTHONPATH=. pytest -q tests/test_workflow.py tests/test_knowledge_blueprint.py tests/test_integration_layers.py tests/test_dashboard.py,结果:60 passed。 - 运行
PYTHONPATH=. pytest -q tests/test_quality_source_checks.py tests/test_ml_regression.py tests/test_writer_dynamic_status.py,修复质量门禁后相关用例通过。 - 运行
PYTHONPATH=. pytest -q,结果:165 passed, 1 failed;唯一失败为 live browser 外网用例tests/test_agent_browser_live.py::test_agent_browser_can_fetch_page_text访问 LangGraph 站点超时,非本地代码回归。
- 按官方 Neovis.js 安装文档为项目安装
neovis.js,新增package.json与package-lock.json,并将node_modules/加入.gitignore。 - 前端模板加载
https://unpkg.com/neovis.js@2.1.0/dist/neovis.js,与项目内安装版本保持一致;官方文档示例的2.0.2在当前用法下会尝试默认直连 Neo4j,因此未继续使用。 - 将 Neo4j 图谱主画布切换为 Neovis.js / vis-network 力导向图展示,节点呈圆点网络形态,保留顶部统计和右侧选中节点详情。
- 为了避免在浏览器暴露 Neo4j 密码,前端不直连 Neo4j;仍使用后端
/tasks/{task_id}/graph的安全快照数据,并转换为 Neovis.js 数据集渲染。 - 图谱面板排版调整为左侧 Neovis.js 画布、右侧详情栏,画布高度使用
min(58vh, 620px)并保留响应式单列布局。 - 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_dashboard.py - 结果:
7 passed in 0.69s - 使用 in-app browser 刷新当前 Machine Learning 任务图谱,确认 Neovis.js canvas 已渲染,节点与关系可见。
- 运行
npm audit --audit-level=moderate - 结果:失败,
neovis.js -> vis-network -> vis-data -> uuid链路存在 4 个 moderate 漏洞;npm audit fix --force会把neovis.js降到1.6.0,属于破坏性变更,本轮未执行。
- 根据浏览器 diff comment 继续修复关系可读性:主图不再直接绘制所有 Neo4j
STRUCTURE_EDGE/ 管理边,而是根据结构节点parent_node_id生成唯一父子边,避免跨层线和重复标签堆成蓝线团。 - 边标签默认隐藏,只在选中节点的直接相邻边上显示;选中节点、父节点和子节点保持高亮,其他节点降噪,右侧详情继续列出直接相邻关系。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_dashboard.py - 结果:
7 passed in 0.67s - 使用 in-app browser 重新刷新现有 Deep Learning 任务图谱,确认主图只显示清晰父子连接线,右侧仍能查看节点直接关系。
- 将前端 Neo4j 图谱主体从紧凑节点列表升级为分层连线知识图谱:节点按 Domain / 结构节点层级自上而下排布,边以曲线箭头连接,并显示短关系标签。
- 节点改为可点击的大文本卡片,保留状态、类型、标题和路径;右侧新增选中节点详情,展示路径、任务计数、Task ID 和相邻关系。
- 优化图谱在窄视口下的布局:详情面板上移,图谱宽度不再固定 920px,避免首屏只看到大面积空白。
- 修复页面初始
lastPayload=null时手动刷新 Neo4j 图谱会触发task_id空值读取错误的问题。 - 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_dashboard.py - 结果:
7 passed in 0.68s - 使用 in-app browser 打开
http://127.0.0.1:5001/,用现有任务5ff363b2fa9f4814811ffe5aa0d9bcf2手动刷新图谱,确认 Deep Learning 图谱、详情面板和节点关系可见。
- 按当前真实代码流程同步核心设计与执行文档:
README.md、docs/项目需求.md、docs/流程执行文档.md、docs/知识文档格式规范.md、docs/知识库文件架构设计.md、task_plan.md、findings.md。 - 文档主流程统一为:真实意图识别 → 结构图谱规划 → Neo4j 任务图初始化 → 串行知识点文件生成 → 文件级证据队列 → 单条证据即时回写 → 父级状态聚合 → 治理质检 → 版本研报。
- 明确
/tasks、/tasks/async与 intake confirm 均会先归一化领域和意图;非knowledge_collection直接任务会被拦截。 - 明确 Neo4j 节点状态字段、父级完成聚合规则、Markdown contract 与
knowledge_task_queue.json的即时同步职责。 - 明确 SSE 是实时图谱与文件回写状态的主同步通道,
/tasks/{task_id}/graph与手动刷新保留为 fallback。 - 保留历史阶段记录,但将“最后统一回填”“前端 SSE 后自动拉
/graph”“默认三路计划确认”等旧描述标记为历史或兼容兜底。 - 未改动
docs/流程图.excalidraw,避免直接编辑 Excalidraw JSON 破坏画布;当前权威流程以 Markdown 文档和前端 Flow Map 为准。
- 运行关键词扫描,确认主文档不再把“最后统一回填 / 前端自动拉
/graph/ 默认三路计划确认”描述为当前主流程;旧词只保留在历史记录或兼容兜底说明中。 - 运行
PYTHONPATH=. pytest -q - 结果:
152 passed in 30.05s
- 修复 SSE 任务流里
graph_snapshot={}时前端误进入图谱渲染分支的问题。 - 新增图谱 payload 归一化逻辑,所有图谱输入都会先转成
{nodes: [], edges: []},避免读取graph.nodes.length时触发Cannot read properties of undefined。 - 空图谱快照不再触发本地图谱渲染;手动
/graphfallback 仍可显示无图谱数据状态。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_dashboard.py tests/test_workflow.py - 结果:
38 passed in 7.88s - 运行
PYTHONPATH=. pytest -q - 结果:
152 passed in 27.67s - 使用 in-app browser 刷新
http://localhost:5001/ - 结果:页面不再显示
client_error,浏览器 error logs 为空。
- 新增
POST /system/initialize,用于开发 / 测试阶段初始化运行产物。 - 初始化范围限定为任务状态、intake session、audit JSONL、冻结版本、
save/生成文件和 KnowledgeForge Neo4j 图谱节点。 - 初始化会保留源代码、配置、项目文档、依赖、ChromaDB、MySQL 和应用日志等系统数据。
- 若存在运行中任务,接口直接拒绝初始化,避免后台 workflow 继续写回已清理状态。
- 前端任务操作区新增“初始化系统”按钮,点击后会二次确认清理范围。
- Neo4j 清理只针对 KnowledgeForge 主标签节点,并仅删除由 Article 关联的实体,避免按泛用
Entity标签误清全库实体。
- 运行
python -m py_compile knowledgeforge/graph/client.py knowledgeforge/services/task_service.py knowledgeforge/server/api.py - 结果:通过。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_dashboard.py - 结果:
7 passed in 0.63s - 运行
PYTHONPATH=. pytest -q - 结果:
154 passed in 24.15s - 尝试用 in-app browser 刷新验证按钮可见性时,Browser Use 因自身安全策略拒绝本次页面访问;未绕过该策略,改以模板测试覆盖按钮渲染。
- 调整
POST /system/initialize:不再因为存在运行中任务直接返回 400,而是先登记运行中任务为 stopped / cancelled,再清理运行产物。 - 后台 workflow 线程如果在初始化后继续触发状态写回,会被服务层取消标记拦截,不再重新写出已清理的 task state。
- 初始化响应新增
stopped_task_ids,便于前端和调试时确认本次初始化停止了哪些任务。
- 运行
python -m py_compile knowledgeforge/services/task_service.py knowledgeforge/server/api.py knowledgeforge/graph/client.py - 结果:通过。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_dashboard.py - 结果:
7 passed in 0.73s - 运行
PYTHONPATH=. pytest -q - 结果:
154 passed in 24.44s
- 任务状态新增
started_at、finished_at和task_timing,后端统一计算当前任务已执行秒数。 /tasks、/tasks/{task_id}、/tasks/{task_id}/logs和 SSE payload 均可携带任务耗时信息。- 前端“响应与关键字段”摘要区新增“执行耗时”,运行中任务会按本地时间每秒刷新展示。
- 任务列表摘要补充
started_at/finished_at,方便后续扩展任务历史耗时显示。
- 运行
python -m py_compile knowledgeforge/services/task_service.py knowledgeforge/orchestrator/state.py knowledgeforge/runtime/state_store.py - 结果:通过。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_workflow.py tests/test_dashboard.py - 结果:
40 passed in 6.05s - 运行
PYTHONPATH=. pytest -q - 结果:
154 passed in 34.46s
- 流程图从两行折返改为桌面端单行自适应布局,小屏再切换纵向布局,减少箭头折返和重叠。
- 流程图边改为基于端口的直线连接,避免箭头穿过节点内容。
- Neo4j 图谱默认改为自上而下的分层垂直排列,节点按层居中铺开,箭头从节点底部连到下一层顶部。
- Neo4j 图谱渲染后会自动缩放并居中到可视容器;超大图保留可滚动画布高度作为兜底。
- 图谱容器允许滚动查看,避免大型结构图只能看到局部。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_dashboard.py tests/test_workflow.py - 结果:
40 passed in 7.65s - 运行
PYTHONPATH=. pytest -q - 结果:
154 passed in 27.26s - 使用 in-app browser 刷新
http://localhost:5001/ - 结果:页面没有新增前端 error。
- Implemented graph-driven directory planning: workflow now generates an LLM-backed directory structure graph, derives dynamic blueprints, and uses the graph context during file generation.
- Added dynamic structure graph normalization, fallback graph generation, path validation, blueprint derivation, and Neo4j structure graph syncing.
- Updated workflow/dashboard observability for
structure_graph_planningandstructure_graph_ready. - Verification:
PYTHONPATH=. pytestpassed with 146 tests. - Follow-up: none currently required.
- 完成“文件级知识库生成-查询-补全”第一版落地。
- 为
RequestContext、EngineRunResult与知识树配置补充文件级蓝图、required files、completion mode、artifact 等结构化字段。 - 将
knowledgeforge/utils/knowledge_tree.py升级为完整知识库蓝图生成器,默认覆盖00_overview到07_review,并为领域/模块/主题文件分配稳定角色、owner engine 和完成要求。 - 新增
knowledgeforge/utils/file_contract.py,为知识文件定义固定 JSON 合同区块;Writer 现在会先全量物化骨架文件,再由各 Engine 回写状态与贡献内容。 MarkdownKnowledgeWriter现已支持全量知识树骨架创建、JSON 合同生成、artifact 回写和生成文件跟踪,同时保留现有 mixed 汇总文档输出链路。QueryEngine现优先从骨架 Markdown 的 JSON 合同读取query_tasks作为文件级检索输入,而不是只依赖自由搜索问题。InsightEngine、MediaEngine、QueryEngine的计划元数据与运行结果都已补充target_file_path/target_section/artifacts,可对齐到同一知识文件架构。CompletenessEvaluator新增 file-level 模式,优先按文件级 artifact 完成状态判断,而旧的模块执行日志门禁退回兼容兜底路径。KnowledgeGraphWorkflow.generate_plans()现会在三路计划生成前先物化整套知识库骨架,并把文件状态带入运行时状态。- 新增
tests/test_knowledge_blueprint.py,覆盖知识库蓝图生成与骨架 JSON 合同可解析性。 - 完成 QueryEngine 文章级采集计划升级。
- 将 Query 计划项从笼统查询问题扩展为可序列化的文章级条目,支持
url、subdomain、doc_type、planned_path等元数据。 - 在 Query 计划阶段加入轻量候选检索,确认前即可得到链接级采集计划;已有 URL 会在计划中标记为
skipped。 - 将 Query 执行流改为按 URL 抓取并按“一链接一文档”实时落盘,保留来源、计划项、路径、状态与索引同步信息。
- 新增子领域
README.md索引刷新,并保留领域级README.md总索引。 - 调整最终 mixed 汇总文档,使 Query 部分优先聚合已保存的文章级文档,而不是把原始查询计划当主载体。
- 完成 MediaEngine 与 QueryEngine 的计划/执行逻辑同步升级。
- 将 Media 计划从平台级 query 清单升级为确认前可见的链接级候选计划,并按单 URL 实时保存趋势/社区资料。
- MediaEngine 现在同样会携带
url、subdomain、planned_path等计划元数据,并复用统一的 README / 子领域索引更新链路。 - 为 QueryEngine 增加“补充查询源”机制:当结果不足或命中知乎问题页等高风险来源时,自动补充
腾讯云开发者社区搜索、知乎搜索、中文维基百科搜索三个备用 URL。 - 新增通用 URL 探测模块
agent/QueryEngine/tools/supplemental_sources.py,对备用源执行 HTTP 可用性检测,并识别知乎 403/封禁提示等阻断信号。 - 为
zh.wikipedia增加 browser fallback 探测:当httpx返回 403 时,允许通过 browser 文本抓取二次确认该搜索页是否仍可用。 - 优化补源探测返回结构:把
status_code与http_status_code分离,并新增probe_method,明确区分“HTTP 首探结果”和“最终可用性判定来源”。 - 扩展补源:新增
菜鸟教程搜索与CSDN 搜索。其中菜鸟教程仅在 IT/教程型 query 下启用,CSDN作为低优先级博客补源保留但默认降权。 - 新增 5 个独立检测脚本:
scripts/check_tencent_cloud_source.py、scripts/check_zhihu_search_source.py、scripts/check_zh_wikipedia_source.py、scripts/check_runoob_source.py、scripts/check_csdn_source.py,可直接验证每个补源 URL 当前是否可用。 - 补充 pytest 回归,覆盖备用源 URL 生成、IT 教程型 query 判断、知乎封禁识别、Query 补源合并,以及 5 个检测脚本的退出码行为。
- 新建仓库根目录
README.md,补充项目定位、快速启动、目录说明与运行界面截图。 - 将两张 KnowledgeForge 控制台运行截图收纳到
docs/images/,用于 README 展示整体控制台与补检索运行状态。
- 完成“串行文件生成 + 域级查询队列 + 前端实时展示”主链路重构。
- 新增
knowledgeforge/prompts/knowledge_file_generation.py,把知识文件结构要求、必写内容与查询提示固化为 prompt 注册表,运行时不再从设计文档动态推断。 - 新增
knowledgeforge/runtime/domain_task_queue_store.py,把领域级knowledge_task_queue.json作为文件生成状态、查询任务、轮次验证与最终回填的唯一持久化协议。 KnowledgeGraphWorkflow改为generate_files -> run_query_queue -> validate_round -> fill_evidence -> run_post_storage的串行流程,移除旧的默认“等待确认计划”主入口。- 文件骨架生成阶段改为严格串行,一次只生成一个 Markdown,并在保存后立即提取
query_tasks写入领域级队列。 - Query / Media 在新流程里改为单 task 执行器,队列按任务串行执行,结果先写入 JSON 队列,再统一回填目标 Markdown。
- 前端流程图与状态面板改为展示
blueprint_ready、llm_generating、query_queue_running、round_validation、evidence_filling、governing、versioning。 - 前端交互已进一步与新流程同步:新增“查看队列”入口,
intake confirm后会自动进入任务轮询,摘要区与状态面板改为显示生成进度、队列进度和轮次验证,而不再沿用旧的计划确认语义。 - 将
plan_llm_timeout默认值从 45 秒提升到 120 秒,降低串行文件生成阶段因单文件请求过早超时而近似卡住的概率。 - 为 OpenAI-compatible chat / embedding client 增加实时 LLM 生命周期事件:现在会在 audit/logs 中记录
llm_call_started、llm_call_completed、llm_call_failed,不再只在结束后留下 token 统计。 - 保留现有 post-storage / versioning 链路,但统一回填后仍生成 mixed 汇总文档,保证现有治理与冻结流程可继续消费。
- 运行
/Users/lpb/.cache/codex-runtimes/codex-primary-runtime/dependencies/python/bin/python3 -m py_compile ... - 结果:核心改动文件均可通过语法编译。
- 运行自定义 smoke:同步
TaskService.run_task(...) - 结果:返回
task_status=verified、post_storage_result.status=passed、task_queue_snapshot.final_status=ready_for_fill。 - 运行自定义 smoke:Flask 首页与异步任务
- 结果:
GET / -> 200,页面包含“生成与查询队列状态”;POST /tasks/async可从blueprint_ready进入并最终到versioning / verified。 - 运行
pytest tests/test_workflow.py tests/test_dashboard.py -q(受控子集) - 结果:测试进程在当前环境下超过 90s 超时,未完成整轮回归;已改用同步/异步 smoke 验证主路径。
- 运行
PYTHONPATH=. pytest -q - 结果:
135 passed - 运行
PYTHONPATH=. pytest -q tests/test_multi_provider_search.py tests/test_source_probe_scripts.py tests/test_browser_fallbacks.py tests/test_source_relevance_filter.py - 结果:
34 passed - 运行
python scripts/check_tencent_cloud_source.py GAN - 结果:
available=true, status=200 - 运行
python scripts/check_zhihu_search_source.py GAN - 结果:
available=false, status=403 - 运行
python scripts/check_zh_wikipedia_source.py GAN - 结果:
available=false, status=403 - 运行
uv run scripts/check_zh_wikipedia_source.py - 结果:
available=true, status_code=null, http_status_code=403, probe_method=browser_fallback, reason=browser_fallback_ok - 运行
uv run scripts/check_zhihu_search_source.py - 结果:
available=false, status_code=403, http_status_code=403, probe_method=http, reason=http_403 - 运行
uv run scripts/check_runoob_source.py - 结果:
available=true, status_code=200, http_status_code=200, probe_method=http, reason=ok - 运行
uv run scripts/check_csdn_source.py - 结果:
available=true, status_code=200, http_status_code=200, probe_method=http, reason=ok - 检查
README.md中截图资源路径 - 结果:
docs/images/knowledgeforge-dashboard-overview.png与docs/images/knowledgeforge-dashboard-runtime.png已入库可引用
- QueryEngine 与 MediaEngine 已统一为链接级计划和单篇落盘模式,InsightEngine 仍保持原有本地线索规划形态。
- 补检索决策已能读取领域 README、子领域 README 与已保存文章概览;若后续需要“补检索确认前也必须显式展示 URL 级计划”,可继续把 supplement planner 扩展为预检索链接生成器。
- 当前网络环境下
知乎搜索与zh.wikipedia.org均返回 403,因此它们更适合作为“有条件启用并先探测”的补源,而不是无条件主源;后续如果需要稳定中文百科补源,建议增加 API/镜像级备选策略。 - 实测表明
zh.wikipedia属于“HTTP 层受限但浏览器可达”,而知乎搜索属于“浏览器也会进入安全验证”;两者后续应继续分开治理,不适合共用同一放行规则。 菜鸟教程适合作为 IT 教程、语法、入门示例类查询的补源,不适合泛化到非技术主题;CSDN可补博客与经验线索,但内容质量波动较大,应继续维持低权重。
- 修复生成与查询队列状态展示:文件生成前后、队列任务开始/完成时会同步刷新运行中 task snapshot,避免前端轮询只看到旧的
task_queue_snapshot。 - 任务详情与“查看队列”接口现在会从
task_queue_path读取最新knowledge_task_queue.json,并回填generation_progress,避免队列文件和任务状态短暂不同步时页面显示空状态。 - 每次新任务启动都会重新初始化领域级活动队列,避免复用同领域旧
knowledge_task_queue.json导致生成进度、任务列表或final_status污染本次流程。 - 修复轮次验证空转:当验证不完整但没有新任务时,会为当前轮失败项生成下一轮 retry 任务;达到最大轮次后进入统一回填并保留缺口,避免
validate_round -> run_query_queue无限循环。 - 修复治理结果分类:只有
research_flow时返回research_required,包含repair_flow时返回repair_required,符合质量闭环中“补检索 / 修复”分流要求。
- 运行
PYTHONPATH=. pytest tests/test_workflow.py tests/test_dashboard.py -q - 结果:
31 passed
- 将 Flask 后端工厂从
knowledgeforge/api.py迁移到knowledgeforge/server/api.py,新增knowledgeforge/server/__init__.py导出create_app,根目录app.py继续作为启动入口。 - 将前端模板与静态资源迁移到
knowledgeforge/web/templates与knowledgeforge/web/static,并在 Flask app 中显式配置资源目录,保留/static/...URL 不变。 - 将根目录
agent/迁移为knowledgeforge/agent/,同步更新项目代码、脚本和测试中的导入路径。 - 更新
README.md、AGENTS.md、CLAUDE.md与pyproject.toml,使目录说明和 setuptools 包发现与新结构一致。
- 运行
PYTHONPATH=. python -m py_compile app.py $(rg --files knowledgeforge scripts tests -g '*.py') - 结果:通过。
- 运行导入 smoke:
knowledgeforge.server.create_app、knowledgeforge.agent.QueryEngine、knowledgeforge.agent.MediaEngine、knowledgeforge.agent.InsightEngine - 结果:通过,Flask template/static 目录指向
knowledgeforge/web。 - 运行
PYTHONPATH=. pytest tests/test_dashboard.py tests/test_workflow.py -q - 结果:
31 passed - 运行
PYTHONPATH=. pytest tests/test_dashboard.py tests/test_workflow.py tests/test_ml_regression.py tests/test_query_engine.py tests/test_media_engine.py tests/test_integration_layers.py -q - 结果:
58 passed - 运行
PYTHONPATH=. pytest -q - 结果:
137 passed, 2 failed。失败项为tests/test_supplement_decision.py::test_workflow_uses_index_decision_to_dispatch_query_supplement(当前串行文件队列流程不再触发旧测试期望的第二轮三路 Engine run)与tests/test_workflow.py::test_async_task_falls_back_when_llm_generation_fails(全量顺序下轮询撞到中间态filled;该用例单独复跑通过)。
- 后续需要将补检索决策相关旧测试同步到当前
generate_files -> run_query_queue -> validate_round -> fill_evidence串行文件队列流程。 - 可考虑把异步接口返回给前端的
filled中间态继续归一为running,减少测试和 UI 轮询对瞬时内部状态的敏感度。
- 新增
scripts/test_llm_available.py,用于读取.env中的OPENAI_API_KEY、OPENAI_BASE_URL、OPENAI_MODEL并向 OpenAI-compatible/chat/completions发送最小 smoke 请求。 - 脚本支持
--env-file、--prompt、--timeout参数,输出目标 base URL、模型、脱敏 API key、响应耗时、usage 与回复内容。
- 运行
PYTHONPATH=. python -m py_compile scripts/test_llm_available.py - 结果:通过。
- 运行
PYTHONPATH=. python scripts/test_llm_available.py --help - 结果:参数帮助可正常显示。
- 运行
PYTHONPATH=. python scripts/test_llm_available.py - 结果:
[OK] received reply in 1.45s,回复内容为LLM 连接正常。
- 为串行文件骨架生成增加专用
generation.chat_jsonclient,不再复用通用 planning client;生成链路默认0次重试,单次失败直接回退到本地固定骨架,避免一个文件在 LLM 超时时卡住多个完整超时窗口。 - 为 planning / execution / intake 增加独立的
*_llm_max_retries配置项,并新增generation_llm_timeout,让不同阶段可以分别调优。 - 调整 OpenAI-compatible chat client:
httpx.TimeoutException不再进入盲目重试,超时后立即失败并交由上层 fallback 或下一步流程处理。 - 修复 audit 回填重复问题:
llm_call_started/llm_call_completed/llm_call_failed不再从execution_log二次写入 audit,避免实时日志出现成对重复记录。 - 收敛
fill_evidence的中间态:统一继续保持running,减少前端轮询和异步测试误把内部中间态当成终态。
- 运行
PYTHONPATH=. python -m py_compile knowledgeforge/config.py knowledgeforge/llms/openai_compatible.py knowledgeforge/orchestrator/graph.py knowledgeforge/services/task_service.py - 结果:通过。
- 运行
PYTHONPATH=. pytest tests/test_openai_compatible.py tests/test_workflow.py tests/test_token_usage.py -q - 结果:
38 passed in 13.42s
- 扩展
/tasks/{task_id}/logs返回结构,新增queue_summary、log_summary、llm_activity、recent_errors、log_files、generation_progress,让前端和接口调用方直接看到队列状态、最近一次 LLM 调用、失败摘要和日志文件路径。 - 为
AuditLogger增加path_for(...),统一输出 audit JSONL 路径,便于接口返回和日志追踪。 - Flask 服务新增应用级请求日志文件
logs/knowledgeforge-server.log,对/tasks/...和/tasks/.../logs这类轮询接口额外记录task_status、current_step、current_action、队列统计和最近一次 LLM 调用状态,不再只有终端里那种简陋的GET ... 200。 - 前端日志面板升级为更易读的诊断视图:摘要区新增“队列状态 / 队列统计 / 最新 LLM / 最近错误 / 日志文件”,执行日志区会高亮文件、查询、轮次、尝试次数和错误信息,而不是只堆一行原始 JSON。
- 运行
PYTHONPATH=. python -m py_compile knowledgeforge/config.py knowledgeforge/runtime/audit.py knowledgeforge/services/task_service.py knowledgeforge/server/api.py - 结果:通过。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest tests/test_workflow.py tests/test_token_usage.py -q - 结果:
35 passed in 16.80s
- 生成阶段的 LLM 生命周期事件现在会自动携带
current_file、completed_files、total_files,所以current_action不再一直停在同一句generation.chat_json 第 1/1 次,而是会带上当前文件和文件序号,例如"[2/116] index.md · LLM 调用开始..."。 - 串行文件生成阶段补发了更明确的文件级事件元数据,生成开始和保存完成都带上当前文件、总文件数和已完成数量,方便前端和日志统一展示。
- 应用日志
request_trace现在也附带generation_progress,排查时能直接看到当前生成到哪个文件。 - 修复前端队列面板里队列统计函数重名的问题,避免“生成进度/队列统计”摘要被覆盖后看起来一直不动。
- 运行
PYTHONPATH=. python -m py_compile knowledgeforge/services/task_service.py knowledgeforge/orchestrator/graph.py knowledgeforge/server/api.py - 结果:通过。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest tests/test_token_usage.py tests/test_workflow.py -q - 结果:
36 passed in 20.58s
- 按用户要求清理 Neo4j 知识图谱数据,目标连接为
.env中的NEO4J_URI=bolt://lpbkuaile6:7687,用户为neo4j。 - 清理前图谱包含
60个节点、55条关系;标签包括Article、Domain、Entity、KnowledgePoint、Source、SubTopic;关系类型包括HAS_ARTICLE、HAS_SUBTOPIC、MENTIONS。 - 使用分批
MATCH (n) WITH n LIMIT 1000 DETACH DELETE n RETURN count(n)删除所有节点及其关系;未修改本地 Markdown 知识库文件。
- 运行 Neo4j 只读验证查询
MATCH (n) RETURN count(n)与MATCH ()-[r]->() RETURN count(r)。 - 结果:清理后
nodes=0、relationships=0。
- 新增
/tasks/{task_id}/graph接口,按当前任务request_context.domain读取 Neo4j 中的真实领域图谱快照,并返回统一的nodes/edgesJSON、刷新时间与节点/关系限制。 - 扩展
Neo4jGraphClient,支持读取Domain -> SubTopic -> Article -> Entity以及Domain -> KnowledgeStructureNode -> STRUCTURE_EDGE相关节点和关系;Neo4j 不可用时接口返回可渲染的status=unavailable,不暴露连接凭据。 - 前端工作台新增“Neo4j 实时知识图谱”可折叠面板,包含连接状态、领域、节点/关系数量、自动跟随任务开关和手动刷新按钮;复用现有 X6 渲染并在 SSE 任务更新时节流刷新。
- 图谱渲染按节点类型分层布局,并对比上一帧快照高亮新增节点与关系。
- 运行
python -m py_compile knowledgeforge/graph/client.py knowledgeforge/services/task_service.py knowledgeforge/server/api.py - 结果:通过。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
python -m pytest tests/test_dashboard.py tests/test_integration_layers.py -q - 结果:
7 passed in 0.60s - 运行
python -m pytest tests/test_workflow.py tests/test_dashboard.py tests/test_integration_layers.py -q - 结果:
38 passed in 5.35s - 使用当前
.envNeo4j 连接执行只读 snapshot smoke。 - 结果:
neo4j_smoke=ok nodes=0 edges=0;当前库无对应领域数据,Neo4j 对尚未出现的结构节点标签/关系给出 warning,但查询可正常解析并返回空图。
- 按用户反馈调整图谱事实源:目录结构图谱生成后立即同步到 Neo4j,而不是等最终治理阶段才写入图谱。
KnowledgeStructureNode现在带有生成进度属性:is_generated、generation_state、generated_path、generated_at、task_id、domain。- 文件骨架每成功落盘一个,就按蓝图里的
completion_requirements.structure_node_id更新对应 Neo4j 结构节点的落实 flag;如果结构图谱初始同步失败,文件生成不会被打断,只会跳过节点 flag 更新。 - 图谱 API 对 Neo4j temporal 等非 JSON 原生属性做序列化保护,避免
datetime()属性导致 Flaskjsonify500。 - 前端图谱指标新增“已落实”数量,节点标题区显示
TODO/DONE状态。 - 对修复前已经启动的
deep learning任务做了一次 Neo4j 回填:同步 23 个结构节点,并根据当前生成进度标记 4 个已生成节点。
- 运行
python -m py_compile knowledgeforge/graph/client.py knowledgeforge/graph/neo4j_adapter.py knowledgeforge/postprocess/pipeline.py knowledgeforge/orchestrator/graph.py knowledgeforge/services/task_service.py knowledgeforge/server/api.py - 结果:通过。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
python -m pytest tests/test_integration_layers.py tests/test_dashboard.py -q - 结果:
8 passed in 0.59s - 运行
python -m pytest tests/test_workflow.py tests/test_dashboard.py tests/test_integration_layers.py -q - 结果:
39 passed in 8.60s - 当前任务
2146b1ba719d4990a3567fff46794af0的/graph接口已返回deep learning图谱节点与结构关系。
- 将 Neo4j 图谱前端布局从“按类型堆叠”调整为优先按知识结构层级排布:Domain、根结构节点、section/index、article/subtopic 等按列展开。
- 图谱存在
STRUCTURE_EDGE时,隐藏大部分HAS_STRUCTURE_NODE管理边,只保留结构树连线,避免边和标签遮挡节点。 - 去掉边标签文本,节点状态文案从
NEW · KnowledgeStructureNode收敛为TODO/DONE · node_type,并用生成状态调整节点配色。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
python -m pytest tests/test_dashboard.py tests/test_integration_layers.py -q - 结果:
8 passed in 0.61s
- 将
/tasks与/tasks/async统一接入 intake 归一化链路,直接任务也会先识别真实意图与领域缩写;DL现在会规范为Deep Learning,概念解释类输入会被拒绝直接启动采集任务。 - 扩展结构图谱状态模型,结构节点支持
planned/generating/generated/evidence_pending/evidence_running/completed/failed,并在本地任务状态和 Neo4j 中同步pending_task_count、completed_task_count、is_completed、generated_path等属性。 - 文件生成阶段会在开始/完成时更新图谱节点状态;证据队列每个任务完成后立即回写目标 Markdown contract、更新
knowledge_task_queue.json、同步图谱节点,并根据子节点状态聚合父级 SubTopic / Domain 完成度。 - SSE 任务流 payload 现在携带
graph_snapshot、graph_event、file_update,前端优先用 SSE 图谱快照渲染,不再在每次任务消息后自动请求/graph;/graph保留为手动刷新和 Neo4j 不可用时的本地快照 fallback。 - 前端流程图调整为“意图识别 → 图谱规划 → 文件生成 → 证据查询 → 即时回写 → 父级聚合 → 治理质检 → 版本研报”,摘要区新增当前文件、证据任务、图谱完成度、父级状态和最近回写路径。
- 运行
PYTHONPATH=. python -m py_compile knowledgeforge/graph/client.py knowledgeforge/graph/neo4j_adapter.py knowledgeforge/postprocess/pipeline.py knowledgeforge/orchestrator/graph.py knowledgeforge/services/task_service.py knowledgeforge/intake/clarifier.py knowledgeforge/intake/context_builder.py knowledgeforge/utils/query_normalization.py - 结果:通过。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_workflow.py tests/test_knowledge_blueprint.py tests/test_dashboard.py tests/test_writer_dynamic_status.py - 结果:
49 passed in 9.80s - 运行
PYTHONPATH=. pytest -q - 结果:
152 passed in 27.98s
- 将前端“实时流程图”主展示从 X6 SVG 改为原生 HTML/CSS 流程卡片轨道,避免 SVG 箭头重叠、尺寸裁切和已完成状态颜色不同步的问题。
- 流程步骤现在统一通过
data-status与data-status-label渲染待处理/执行中/已完成/需处理,并兼容旧的 workflow step id(如blueprint_ready、evidence_filling、collecting等)映射到目标流程步骤。 - 当前执行步骤增加绿色强调、状态胶囊、底部进度线和呼吸光圈动画;已完成步骤自动根据当前步骤位置向前推断,不再依赖每个步骤都显式写入 completed 事件。
- 流程卡片改为自适应换行布局,8 个目标步骤在当前工作台宽度内完整展示,不再横向裁掉最后的步骤;Neo4j 图谱仍保留 X6 渲染。
- 同步更新 Dashboard 测试断言,确认页面使用新的
flow-track展示容器。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_dashboard.py tests/test_workflow.py - 结果:
40 passed in 7.38s - 使用 in-app browser 刷新
http://localhost:5001/验证:#workflow-map存在、#workflow-x6不存在、8 个流程步骤完整渲染,当前步骤显示执行中。 - 运行
PYTHONPATH=. pytest -q - 结果:
154 passed in 32.80s
- 将前端 Neo4j 实时知识图谱主体从 X6 大画布改为 HTML 快照展示,保留连接状态、领域指标、自动跟随和手动刷新控制。
- HTML 图谱包含状态统计条、重点节点卡片和关系摘要;节点按运行中、待证据、失败、完成、规划等优先级排序,新增节点和新增关系保留轻量高亮。
- 空状态从大画布压缩为 168px 高提示;有数据时容器最大高度限制为 360px,内部滚动展示,避免占用大量页面空间。
- 初始化页面时会立即渲染紧凑空状态,不再留下空白图谱容器。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_dashboard.py tests/test_workflow.py - 结果:
40 passed in 9.02s - 使用 in-app browser 刷新
http://localhost:5001/验证:#neo4j-graph下无svg.x6-graph-svg,紧凑空状态正常显示。 - 运行
PYTHONPATH=. pytest -q - 结果:
154 passed in 37.89s
- 将
RequestContext.completion_mode默认值从旧的file_level调整为framework,并将旧输入file_level规范化为full_document。 - 默认主链路现在先生成知识框架图谱与框架证据 Markdown:文件包含知识定位、学习角色与路径、知识关系、证据与来源、后续动作和 contract,不再默认生成完整正文。
full_document模式保留完整知识库文档能力,但执行顺序改为“框架图谱与证据完成后,最后补全 mixed 完整文档”。- 治理链路根据模式切换质量检查:
framework检查图谱、蓝图、框架证据文件、官方/权威证据和路径关联;full_document继续检查完整文档。 - API / intake / 前端支持传入
completion_mode,前端摘要区展示产出模式与完整文档状态。 - 同步更新
docs/项目需求.md、docs/流程执行文档.md、docs/知识文档格式规范.md,明确“知识框架图谱 + 证据”为必须产物,完整文档为后置可选产物。
- 运行
PYTHONPATH=. pytest -q tests/test_knowledge_blueprint.py tests/test_workflow.py - 结果:
41 passed in 7.52s - 运行
PYTHONPATH=. python -m py_compile knowledgeforge/models.py knowledgeforge/intake/context_builder.py knowledgeforge/prompts/knowledge_file_generation.py knowledgeforge/orchestrator/graph.py knowledgeforge/storage/markdown_writer.py knowledgeforge/quality/checker.py knowledgeforge/evaluation/completeness.py knowledgeforge/services/task_service.py knowledgeforge/runtime/state_store.py - 结果:通过。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_knowledge_blueprint.py tests/test_workflow.py tests/test_dashboard.py - 结果:
48 passed in 7.54s - 运行
PYTHONPATH=. pytest -q - 结果:
157 passed in 33.57s
- 将 LangGraph 主链路重排为:
generate_structure_graph -> sync_structure_graph_to_neo4j -> review_structure_round_1 -> repair_structure_graph_round_1 -> review_structure_round_2 -> generate_architecture_documents -> query_evidence_links -> validate_round -> fill_evidence -> run_post_storage。 - 新增
structure_review_rounds、structure_review_status、structure_repair_log;当时第二轮仍不完整会进入repair_required,该行为后续已调整为自动修补并继续主链路。 - 证据阶段收敛为 QueryEngine 链接查询:队列记录
selected_link、source_kind、reachable、relevance_reason、checked_at,不再即时把网页内容或摘要写回 Markdown。 - Neo4j 结构节点状态改为架构语义:
reviewing、repairing、documenting、documented、link_querying、link_verified、link_failed;update_structure_node_status不再做祖先或 Domain 父级聚合。 - 前端流程图更新为“意图识别 → 图谱生成 → Neo4j呈现 → 架构Review → 架构文档 → 证据链接 → 治理质检 → 补全文档/版本研报”。
- 同步更新项目需求、流程执行文档、知识文档格式规范、计划与发现记录。
- 运行
PYTHONPATH=. python -m py_compile knowledgeforge/orchestrator/graph.py knowledgeforge/models.py knowledgeforge/orchestrator/state.py knowledgeforge/prompts/knowledge_file_generation.py knowledgeforge/graph/client.py knowledgeforge/graph/neo4j_adapter.py knowledgeforge/services/task_service.py knowledgeforge/agent/QueryEngine/agent.py knowledgeforge/runtime/domain_task_queue_store.py - 结果:通过。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_workflow.py tests/test_knowledge_blueprint.py tests/test_dashboard.py - 结果:
52 passed in 8.17s - 运行
PYTHONPATH=. pytest -q - 结果:
161 passed in 52.33s - 误把
knowledgeforge/web/static/js/dashboard.js传给python -m py_compile,Python 按.py解析 JS 并报SyntaxError: invalid character '·';随后改用 Python 文件列表 +node --check分别验证。 - 运行
PYTHONPATH=. python -m py_compile knowledgeforge/orchestrator/graph.py knowledgeforge/models.py knowledgeforge/orchestrator/state.py knowledgeforge/prompts/knowledge_file_generation.py knowledgeforge/graph/client.py knowledgeforge/graph/neo4j_adapter.py knowledgeforge/services/task_service.py knowledgeforge/agent/QueryEngine/agent.py knowledgeforge/runtime/domain_task_queue_store.py - 结果:通过。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest -q - 结果:
161 passed in 30.25s
- 同步
docs/项目需求.md、docs/流程执行文档.md、docs/知识文档格式规范.md到当前代码真实流程,明确:- 主链路是
generate_structure_graph -> sync_structure_graph_to_neo4j -> 两轮架构 review / 自动修补 -> generate_architecture_documents -> query_evidence_links -> validate_round -> fill_evidence -> run_post_storage。 completion_mode=full_document仍会在主链路fill_evidence阶段直接生成 mixed 完整文档。/tasks/{task_id}/documents/complete是 framework 任务完成后的后置逐文件补全文档动作。
- 主链路是
- 重写
docs/流程图.excalidraw为当前主链路的精简流程图,突出 Neo4j 前置呈现、两轮 review、link-only evidence queue、full_documentmixed 文档分支和 framework 后置补全文档分支。
- 运行
node -e "JSON.parse(require('fs').readFileSync('docs/流程图.excalidraw','utf8')); console.log('ok')" - 结果:
ok
- 修正
repair_required的current_action文案,不再声明“需要人工修复或重新生成图谱”。 - 当时表述改为系统后续修复流;后续已调整为第二轮自动修补并同步 Neo4j 后直接继续主链路。
- 为工作流测试补充断言,防止失败态文案再次回退到人工介入口径。
- 使用
planning-with-files恢复计划上下文并记录本轮任务。 - 阅读了
docs/项目需求.md、docs/流程执行文档.md、docs/知识文档格式规范.md、knowledgeforge/orchestrator/graph.py、knowledgeforge/prompts/knowledge_file_generation.py、Neo4j mapper/client 与相关 workflow 测试。 - 发现当前 review 输入未拼接 Neo4j 上下文;第一轮通过时两轮 review 之间不做 Neo4j 同步;Neo4j 结构图谱同步保留旧状态,无法反映 review 后状态;
manual_review建议可能被原样记录。 - 已新增 review 专用 Neo4j 上下文读取链路:
PostStoragePipeline -> Neo4jPathMapper -> Neo4jGraphClient.structure_review_context。 - 已调整
_run_structure_review的 LLM 输入,拼接当前knowledge_id、Neo4j 相关图谱上下文、本地structure_graph、上一轮 review 记录和自动补全约束。 - 已调整每轮 review:Neo4j 初始同步可用时查询当前知识 ID 上下文;review 结束后同步结构状态,Neo4j 不可用时使用本地图谱 fallback 并跳过重复连接。
- 已过滤非自动化 review 建议,并把文档/生成器中的人工处理表述收敛为系统复核、repair flow 或 research flow。
- 运行
PYTHONPATH=. python -m py_compile knowledgeforge/orchestrator/graph.py knowledgeforge/prompts/knowledge_file_generation.py knowledgeforge/postprocess/pipeline.py knowledgeforge/graph/neo4j_adapter.py knowledgeforge/graph/client.py knowledgeforge/storage/markdown_writer.py - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_workflow.py::test_structure_review_uses_neo4j_context_and_syncs_each_round tests/test_workflow.py::test_structure_review_repairs_first_round_before_documents tests/test_workflow.py::test_structure_review_failure_stops_before_documents - 结果:
3 passed in 4.05s - 运行
PYTHONPATH=. pytest -q tests/test_workflow.py tests/test_knowledge_blueprint.py tests/test_dashboard.py - 结果:
53 passed in 23.14s - 运行
PYTHONPATH=. pytest -q - 第一次结果:
1 failed, 161 passed,失败用例为test_async_task_streams_query_progress_before_completion;原因是 Neo4j 不可用时 review 前查询/同步重复触发连接重试,异步轮询窗口内仍处于 running。 - 修复:Neo4j 初始同步失败或跳过时,review 上下文改用本地 structure graph fallback;review 结束同步也记录 skipped,避免重复连接不可用 Neo4j。
- 运行
PYTHONPATH=. pytest -q tests/test_workflow.py::test_structure_review_uses_neo4j_context_and_syncs_each_round tests/test_workflow.py::test_async_task_streams_query_progress_before_completion - 结果:
2 passed in 2.92s - 运行
PYTHONPATH=. pytest -q - 最终结果:
162 passed in 30.12s
- 将 Flow Map 的
blocked/需处理状态从红色调整为橙色,表达可恢复的自动修补、补检索或待处理状态。 - 新增
error/错误流程状态,只有 workflow event 或当前任务状态为 failed/error/plan_failed 时才使用红色。 - 同步更新 HTML 图例、fallback 卡片样式和 X6 流程图节点/边颜色。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_dashboard.py - 结果:
7 passed in 0.71s - 修复处理中第 01 步颜色回退问题:将内部
structure_repair/repair_structure_graph_round_*映射回第 04 步,并在当前步骤不属于主流程节点时使用最新 workflow event 兜底。 - 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_dashboard.py - 结果:
7 passed in 0.68s
- 修复旧任务停在
repair_required后点击“恢复任务”也不能沿当前图谱继续的问题;新任务后续已调整为不再停靠该检查点。 - 新增
KnowledgeGraphWorkflow.continue_after_structure_repair(...),用于复用已修补的structure_graph/knowledge_blueprint,直接接续架构文档生成、证据链接查询、轮次验证、证据收尾与治理质检。 - 调整
TaskService.resume_task(...):当任务是repair_required且停在structure_review,并且已有图谱与蓝图时,走 repair flow 接续;其他终态仍保留原有轮次恢复 / 最大轮次保护逻辑。 - 增加回归测试
test_resume_repair_required_continues_from_repaired_structure,确认恢复后会生成文件与领域级knowledge_task_queue.json,并记录resume_mode=continue_after_structure_repair事件。
- 运行
PYTHONPATH=. pytest -q tests/test_workflow.py::test_structure_review_failure_stops_before_documents tests/test_workflow.py::test_resume_repair_required_continues_from_repaired_structure tests/test_workflow.py::test_complete_documents_requires_finished_framework_then_expands_files - 结果:
3 passed in 1.93s - 运行
PYTHONPATH=. python -m py_compile knowledgeforge/orchestrator/graph.py knowledgeforge/services/task_service.py - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_workflow.py tests/test_dashboard.py - 结果:
48 passed in 17.92s
- 修复前端摘要区执行耗时后缀:不再把所有非运行任务都显示为“已完成”。
- 当时
repair_required显示为“待修复,可恢复”;后续已调整为“待系统修复”,避免暗示人工处理。 - 补充 dashboard 静态回归断言,防止耗时展示回退到
is_running ? 运行中 : 已完成的二分逻辑。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_dashboard.py - 结果:
7 passed in 0.70s
- 修复恢复或重跑结构审查时
structure_review_rounds追加历史轮次,导致前端显示3/2 · 需修补并可能反复超过两轮的问题。 - 后端
_merge_structure_review_round(...)现在按round=1/2覆盖对应轮次,只保留最多两轮有效 review 记录。 - 前端
summarizeStructureReview(...)增加同样的去重兜底,旧任务状态里即使已经存在重复 review 记录,也不会再显示超过2/2。 - 补充 workflow 与 dashboard 回归断言,防止恢复任务后结构 Review 计数再次累加。
- 运行
PYTHONPATH=. pytest -q tests/test_workflow.py::test_structure_review_failure_stops_before_documents tests/test_workflow.py::test_resume_repair_required_continues_from_repaired_structure tests/test_workflow.py::test_structure_review_rounds_are_replaced_not_appended tests/test_dashboard.py - 结果:
10 passed in 1.06s - 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. python -m py_compile knowledgeforge/orchestrator/graph.py - 结果:通过。
- 修复
/tasks/{task_id}/resume对运行中任务缺少保护的问题:运行中的任务再次点击恢复会直接返回当前状态并记录task_resume_skipped,不再启动第二条 workflow。 repair_required的结构修补检查点现在同时接受current_step=structure_review和current_step=structure_repair,避免旧任务停在修补步骤时恢复分支未命中,重新进入结构 review / repair。- Flask app 将当前
TaskService暴露到app.config["TASK_SERVICE"],方便测试验证服务内存状态与持久化状态。 - 补充回归测试覆盖:从
structure_repair检查点恢复会继续进入文档生成;运行中任务重复恢复不会启动新 workflow。
- 运行
PYTHONPATH=. python -m py_compile knowledgeforge/services/task_service.py knowledgeforge/server/api.py - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_workflow.py::test_resume_repair_required_continues_from_repaired_structure tests/test_workflow.py::test_resume_repair_required_from_structure_repair_step_continues tests/test_workflow.py::test_resume_running_task_does_not_start_second_workflow tests/test_workflow.py::test_structure_review_rounds_are_replaced_not_appended tests/test_dashboard.py - 结果:
11 passed in 4.07s - 运行
PYTHONPATH=. pytest -q tests/test_workflow.py tests/test_dashboard.py - 结果:
51 passed in 18.58s - 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 调整默认任务工作流:完成结构图谱生成、Neo4j 同步、两轮架构 review 和图谱补全后,任务进入
graph_ready,不再自动联网查询证据。 - 新增
POST /tasks/{task_id}/evidence/fill,作为“查询填充”动作;触发后执行可信链接查询、轮次验证、治理质检和 Neo4j 图谱证据写入。 - 前端任务操作区新增“查询填充”按钮,流程图第 06 步改为用户触发的“查询填充”,避免把证据为 0 误表达为异常。
- 补全文档仍要求查询填充与治理通过后才能执行;研报仍要求冻结版本。
- 同步更新
docs/项目需求.md、docs/流程执行文档.md、task_plan.md、findings.md与 workflow/dashboard 回归测试。
- 运行
PYTHONPATH=. python -m py_compile knowledgeforge/orchestrator/graph.py knowledgeforge/services/task_service.py knowledgeforge/server/api.py - 结果:通过。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_workflow.py tests/test_dashboard.py - 结果:
54 passed in 15.81s - 运行
PYTHONPATH=. pytest -q - 初次结果:
170 passed, 1 failed,失败用例仍按旧口径期望 workflow.run 直接完成证据查询。 - 修复后重跑
PYTHONPATH=. pytest -q - 结果:
171 passed in 27.94s
- 修复“查询填充”按钮点击后前端不立即更新的问题:
/tasks/{task_id}/evidence/fill改为异步启动,先保存task_status=running、current_step=evidence_link_query和活动 workflow event,再由后台线程继续执行联网证据填充。 - 前端点击“查询填充”后会立即
showPayload(...)并启动 SSE 跟踪,summary、实时流程图和查询队列区域不再等查询全部结束才刷新。 - SSE 终止条件调整为“终态且已有 finished_at”,避免治理中途把状态暂时写成
verified/research_required时过早断开,导致图谱证据写入阶段不再同步。 - 将队列面板的“LLM 生成进度 / 文件已生成”改为“图谱上下文进度 / 图谱上下文已准备”,避免误导为已经进入本地 Markdown 生成阶段。
- 浏览器插件验证尝试被 Browser Use 安全策略拦截,改用 Flask 测试客户端和前端静态断言验证实时同步契约。
- 运行
PYTHONPATH=. python -m py_compile knowledgeforge/services/task_service.py knowledgeforge/server/api.py - 结果:通过。
- 运行
node --check knowledgeforge/web/static/js/dashboard.js - 结果:通过。
- 运行
PYTHONPATH=. pytest -q tests/test_workflow.py tests/test_dashboard.py - 结果:
55 passed in 14.32s - 运行
PYTHONPATH=. pytest -q - 结果:
172 passed in 29.23s
- 用户要求优化项目代码结构:后端全放到
server下,knowledgeforge下只保留agent/server/web三个部分。 - 已读取项目源头文档、agent 架构范式、当前计划文件、当前目录和导入关系。
- 决策:保留 Agent Engine 目录不动,把后端支撑模块整体迁移进
knowledgeforge/server/并更新导入路径。
- 第一次移动尝试失败:当前 shell 没有解析到
mv/find/sort,错误为command not found。 - 处理:后续使用
/bin/mv、/usr/bin/find、/usr/bin/sort这类绝对路径执行。
- 已将
config.py/models.py以及orchestrator/services/runtime/storage/graph/quality/reporting/evaluation/postprocess/intake/llms/prompts/tools/utils/versioning移入knowledgeforge/server/。 - 已批量更新 Python 源码、测试和脚本中的旧
knowledgeforge.<backend_module>导入为knowledgeforge.server.<backend_module>。 - 已新增
knowledgeforge/server/README.md,说明 server 内部职责边界和 agent/server 依赖方向。
knowledgeforge/一级现在只剩__init__.py、agent/、server/、web/。- 旧后端包导入扫描通过:源码、测试、脚本里不再引用
knowledgeforge.config/models/orchestrator/...等旧顶层后端路径。 - 运行
PYTHONPATH=. python -m compileall -q knowledgeforge app.py scripts tests:通过。 - 运行
node --check knowledgeforge/web/static/js/dashboard.js:通过。 - 运行
PYTHONPATH=. python -m pytest -q tests/test_workflow.py tests/test_dashboard.py tests/test_query_engine.py tests/test_media_engine.py:70 passed in 18.07s。 - 运行
PYTHONPATH=. python -m pytest -q:173 passed in 28.41s。 - 已清理测试生成的
__pycache__。
- 已暂存本次结构重构相关文件:
knowledgeforge/、tests/、scripts/、task_plan.md、findings.md、progress.md。 - 未暂存用户已有改动:
AGENTS.md、docs/流程图.excalidraw和docs/learning_coach_在线资源说明包/。
- 修复
/tasks/{task_id}/evidence/fill在证据查询已运行时再次触发会返回 400 的问题。 - 当任务当前处于
evidence_link_query或evidence_filling时,接口现在直接返回当前运行态快照,不重复启动线程。 - 保留原有状态门禁:只有真正处于图谱完成待填充的任务才会启动新的查询填充流程,其他运行态仍拒绝重复启动。
- 新增回归测试,覆盖“第一次点击启动异步查询填充,第二次点击返回当前 running 状态”的场景。
- 运行
PYTHONPATH=. pytest tests/test_workflow.py -k 'evidence_fill' - 结果:
2 passed, 47 deselected in 2.41s - 运行
PYTHONPATH=. pytest tests/test_workflow.py -k 'task_workflow_updates_graph_without_markdown_by_default' - 结果:
1 passed, 48 deselected in 1.51s
- 前端“查询填充”按钮可以继续优化为运行中禁用或显示“处理中”,减少用户二次点击带来的困惑。