| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(slidea): staged execution output layout + session-id safety Six interrelated bugs uncovered when running --stages outline,render against a real Tavily-enabled environment. All changes orbit the same theme: ensure each run's artifacts land in exactly one directory, and make session-id a safe key for run_id recovery. 1. Staged render lost config — generate_pages_node did not accept or thread config, so prepare_generation_context_node inside the SVG subgraph could not see run_id and silently fell back to creating a new directory at the output root. Result: parse/research/thought/ outline landed in <run_id>/ but render landed in a fresh <new_ts>_<topic>/ (without the slides/ wrapper). Fixed by adding config parameter to generate_pages_node and passing config=config at the call site (run_ppt_pipeline.py:417). 2. Staged mode did not auto-recover run_id — only --resume went through _find_run_id_by_session. --stages <non-all> always generated a new run_id, so two staged invocations with the same --session-id created two directories. Fixed by adding a staged branch to the run_id resolver that prefers session-id recovery and only falls through to new_semantic_run_id when no prior run.json matches. 3. slides/svg/ nesting broke relative image paths — SVGs referenced images as images/xxx.png but lived under slides/svg/ while images were at slides/images/, so the relative path resolved to slides/svg/images/xxx.png (did not exist). On-disk SVGs were un- viewable in browsers; PPTX export only worked because the inliner had a .parent fallback. Root cause: _svg_page_filename returned svg/<name> (with prefix). Removed the prefix so SVGs sit directly under slides/, updated all readers (svg_dir fields in ppt.json, patch_render_missing.py, run_ppt_pipeline.py cached-svg lookup), test fixtures, and every doc that mentioned slides/svg/. 4. patch_render_missing save_dir fallback created orphan directory — when patch-render was called on a run that never rendered (no ppt.json), _resolve_save_dir fell back to <output_root>/<topic> with no timestamp prefix. Fixed to use <out_dir>/slides, matching the standard layout. 5. prepare_generation_context_node silently fell back when config was missing — this is why bug #1 above was able to lurk. Changed both SVG and HTML routes to raise RuntimeError when neither state.save_dir nor config-derived cache_dir is available, so future regressions surface immediately instead of contaminating the output root. 6. Default session-id "local" could collide across unrelated runs — staged-mode recovery would silently pick one of the matching runs (filesystem glob order, non-deterministic) and write into it, potentially overwriting an unrelated task's PPTX. Three-layer fix: - Auto-generate session-id (auto_<pid>_<ts>) when --session-id is omitted, so unrelated runs can never collide. - Detect multi-run collisions in _find_run_id_by_session: if multiple original runs match the same session-id, refuse to guess, log a WARNING listing the candidates, and return empty so the caller falls through to a fresh run_id. - Log INFO on successful recovery with the recovered run_id and a preview of the original request text, so users can verify the right run was picked. Also fixes: test stubs in test_cli_stage_smoke.py needed the new config kwarg on generate_pages_node, and needed explicit --session-id local to match existing fixtures once the default stopped being "local". Docs cleanup: --run-id is no longer advertised as a required flag for staged execution (auto-recovery handles it). staged-execution.md, quickstart.md, cli.md, svg-route.md examples all drop --run-id and use --session-id alone. caching-and-paths.md gains a Session-id Collision Detection section. Verified end-to-end with real Tavily keys: - Staged outline,render across two invocations with the same --session-id produces a single run directory (no split). - Deep-mode full pipeline with real images: 4 SVGs at slides/, 54 images at slides/images/, all 7 image hrefs resolve correctly, PPTX exported at 332 KB. - Collision detection unit-tested with two synthetic runs sharing a session-id: WARNING emitted, empty result, no contamination. - Auto session-id unit-tested: each invocation gets a unique auto_<pid>_<ts>, INFO log announces the generated value. - All 16 pipeline-contract + patch-render tests pass. cli_stage_smoke passes except 4 pre-existing langgraph-import errors unrelated to these changes. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> | 13 天前 | |
refactor(slidea): bundle llm_invoke/vlm_invoke options and tidy lint findings - Introduce InvokeOptions dataclass to group optional invoke params (config / pydantic_schema / json_schema / work_node); migrate ~30 call sites across ppt_thought, page_generators, svg_page_generators, deep_research, outline_generator, utils, and ci/review. - Rewrite scripts/pixel_diff.py and scripts/verify_font_fallback.py to route output through logging and use PYTHONPATH for the worker subprocess instead of sys.path.insert. - Wrap overlong lines in preflight.py, test_pipeline_contracts.py, test_preflight.py, and test_llm_routing.py. - Add targeted pylint: disable=protected-access to test sites that intentionally probe private helpers. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> | 30 天前 | |
refactor(slidea): refine Slidea RHEL install flow Signed-off-by: Zhukunpeng <zhukunpeng8@huawei.com> | 3 个月前 | |
slidea: init. Adding a fully open-source AI-powered PPT generation skill whose name is slidea Signed-off-by: JiangYifei <jiangyifei@huawei.com> Signed-off-by: WanBo <wanbo13@huawei.com> Signed-off-by: SuBo <subo7@huawei.com> Signed-off-by: Zhukunpeng <zhukunpeng8@huawei.com> Signed-off-by: Bin Wu <wu.wubin@huawei.com> | 3 个月前 | |
docs(slidea): confine HTML route info to README; silence agent-facing surfaces Host agents were surfacing LibreOffice/Playwright in their run summaries even on the default SVG route, because the terms appeared across docs/, skill/INSTALL.md, and the installer's stdout — all of which the agent reads at runtime. The "do not mention HTML route" line in SKILL.md could not outweigh two dozen other files talking about it in detail. - Strip HTML-route sections from docs/quickstart, architecture, cli, core/ppt-generator, svg-route, and docs/README.md. - Trim skill/slidea/INSTALL.md and UPDATE.md to SVG-only flow; remove the leftover --skip-playwright/--skip-libreoffice flags from the deep_research INSTALL command template (default behavior now). - Silence the two skipped-step lines (Install Playwright Chromium, Check LibreOffice) and the RHEL-family info log in install.py's default SVG-only path; --with-html-route output is unchanged. - Flip the two install tests that asserted the old "should mention Step 3/4/RHEL helper" behavior to assert silence instead. - Expand README.md / README_CN.md HTML route section with a per-platform matrix of what --with-html-route does and a RHEL-family helper callout, since README is now the single source of truth for HTML route info. Signed-off-by: Zhukunpeng <zhukunpeng8@huawei.com> | 22 天前 | |
refactor(slidea): bundle llm_invoke/vlm_invoke options and tidy lint findings - Introduce InvokeOptions dataclass to group optional invoke params (config / pydantic_schema / json_schema / work_node); migrate ~30 call sites across ppt_thought, page_generators, svg_page_generators, deep_research, outline_generator, utils, and ci/review. - Rewrite scripts/pixel_diff.py and scripts/verify_font_fallback.py to route output through logging and use PYTHONPATH for the worker subprocess instead of sys.path.insert. - Wrap overlong lines in preflight.py, test_pipeline_contracts.py, test_preflight.py, and test_llm_routing.py. - Add targeted pylint: disable=protected-access to test sites that intentionally probe private helpers. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> | 30 天前 | |
fix(slidea): staged execution output layout + session-id safety Six interrelated bugs uncovered when running --stages outline,render against a real Tavily-enabled environment. All changes orbit the same theme: ensure each run's artifacts land in exactly one directory, and make session-id a safe key for run_id recovery. 1. Staged render lost config — generate_pages_node did not accept or thread config, so prepare_generation_context_node inside the SVG subgraph could not see run_id and silently fell back to creating a new directory at the output root. Result: parse/research/thought/ outline landed in <run_id>/ but render landed in a fresh <new_ts>_<topic>/ (without the slides/ wrapper). Fixed by adding config parameter to generate_pages_node and passing config=config at the call site (run_ppt_pipeline.py:417). 2. Staged mode did not auto-recover run_id — only --resume went through _find_run_id_by_session. --stages <non-all> always generated a new run_id, so two staged invocations with the same --session-id created two directories. Fixed by adding a staged branch to the run_id resolver that prefers session-id recovery and only falls through to new_semantic_run_id when no prior run.json matches. 3. slides/svg/ nesting broke relative image paths — SVGs referenced images as images/xxx.png but lived under slides/svg/ while images were at slides/images/, so the relative path resolved to slides/svg/images/xxx.png (did not exist). On-disk SVGs were un- viewable in browsers; PPTX export only worked because the inliner had a .parent fallback. Root cause: _svg_page_filename returned svg/<name> (with prefix). Removed the prefix so SVGs sit directly under slides/, updated all readers (svg_dir fields in ppt.json, patch_render_missing.py, run_ppt_pipeline.py cached-svg lookup), test fixtures, and every doc that mentioned slides/svg/. 4. patch_render_missing save_dir fallback created orphan directory — when patch-render was called on a run that never rendered (no ppt.json), _resolve_save_dir fell back to <output_root>/<topic> with no timestamp prefix. Fixed to use <out_dir>/slides, matching the standard layout. 5. prepare_generation_context_node silently fell back when config was missing — this is why bug #1 above was able to lurk. Changed both SVG and HTML routes to raise RuntimeError when neither state.save_dir nor config-derived cache_dir is available, so future regressions surface immediately instead of contaminating the output root. 6. Default session-id "local" could collide across unrelated runs — staged-mode recovery would silently pick one of the matching runs (filesystem glob order, non-deterministic) and write into it, potentially overwriting an unrelated task's PPTX. Three-layer fix: - Auto-generate session-id (auto_<pid>_<ts>) when --session-id is omitted, so unrelated runs can never collide. - Detect multi-run collisions in _find_run_id_by_session: if multiple original runs match the same session-id, refuse to guess, log a WARNING listing the candidates, and return empty so the caller falls through to a fresh run_id. - Log INFO on successful recovery with the recovered run_id and a preview of the original request text, so users can verify the right run was picked. Also fixes: test stubs in test_cli_stage_smoke.py needed the new config kwarg on generate_pages_node, and needed explicit --session-id local to match existing fixtures once the default stopped being "local". Docs cleanup: --run-id is no longer advertised as a required flag for staged execution (auto-recovery handles it). staged-execution.md, quickstart.md, cli.md, svg-route.md examples all drop --run-id and use --session-id alone. caching-and-paths.md gains a Session-id Collision Detection section. Verified end-to-end with real Tavily keys: - Staged outline,render across two invocations with the same --session-id produces a single run directory (no split). - Deep-mode full pipeline with real images: 4 SVGs at slides/, 54 images at slides/images/, all 7 image hrefs resolve correctly, PPTX exported at 332 KB. - Collision detection unit-tested with two synthetic runs sharing a session-id: WARNING emitted, empty result, no contamination. - Auto session-id unit-tested: each invocation gets a unique auto_<pid>_<ts>, INFO log announces the generated value. - All 16 pipeline-contract + patch-render tests pass. cli_stage_smoke passes except 4 pre-existing langgraph-import errors unrelated to these changes. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> | 13 天前 | |
refactor(slidea): consolidate SVG pipeline and output structure Eliminate svg_final/, consolidate to a single editable svg/ source of truth. Image inlining now happens at PPTX export time inside a temporary directory, so on-disk SVGs stay small and editable while the PPTX converter still receives self-contained input. Rename render/ to slides/ to match the slidea domain vocabulary, and move the final PPTX deliverable to the cache directory root so it is the most visible artifact. Persist template_name in ppt.json so patch-render reuses the same visual template instead of re-running the non-deterministic LLM template selection. New output layout: output/<run_id>/ ├── <topic>.pptx # final deliverable at cache root ├── ppt.json # slimmed schema: slides_dir, svg_dir, template_name └── slides/ ├── svg/ # single source of truth (no svg_final) ├── prompts/ └── images/ Also adds new_semantic_run_id() that generates <timestamp>_<llm_summary> run ids (with a ppt fallback on LLM failure) so humans can scan output/ and recognize runs without opening files. The finalize_node LangGraph node is removed; quality_check now feeds directly into export. The HTML render route receives the same save_dir rename for consistency. Signed-off-by: Zhukunpeng <zhukunpeng8@huawei.com> | 15 天前 | |
slidea: init. Adding a fully open-source AI-powered PPT generation skill whose name is slidea Signed-off-by: JiangYifei <jiangyifei@huawei.com> Signed-off-by: WanBo <wanbo13@huawei.com> Signed-off-by: SuBo <subo7@huawei.com> Signed-off-by: Zhukunpeng <zhukunpeng8@huawei.com> Signed-off-by: Bin Wu <wu.wubin@huawei.com> | 3 个月前 | |
fix(slidea): resolve gate issues for SVG export Signed-off-by: Zhukunpeng <zhukunpeng8@huawei.com> | 2 个月前 | |
refactor(slidea): bundle llm_invoke/vlm_invoke options and tidy lint findings - Introduce InvokeOptions dataclass to group optional invoke params (config / pydantic_schema / json_schema / work_node); migrate ~30 call sites across ppt_thought, page_generators, svg_page_generators, deep_research, outline_generator, utils, and ci/review. - Rewrite scripts/pixel_diff.py and scripts/verify_font_fallback.py to route output through logging and use PYTHONPATH for the worker subprocess instead of sys.path.insert. - Wrap overlong lines in preflight.py, test_pipeline_contracts.py, test_preflight.py, and test_llm_routing.py. - Add targeted pylint: disable=protected-access to test sites that intentionally probe private helpers. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> | 30 天前 | |
merge: bring thinkthread_dev slidea updates (LLM routing) into feature/slidea Path-level checkout of application/slidea/ from feature/thinkthread_dev to integrate the 65 slidea-related commits (model handover routing, premium economic runtime config, preflight + tests). slidea-only commits (457cf14b deep_research skill export, 48d05961 parser logger optimization) were already absorbed by thinkthread_dev through master sync, so no slidea-only content is lost. slidea-only files skill/deep_research/ and scripts/run_deep_research.py remain byte-identical to feature/slidea. Verified: 11 modified modules import cleanly; tests/test_llm_routing.py, tests/test_runtime_config.py, tests/test_preflight.py all pass (39 tests). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> | 30 天前 | |
slidea: init. Adding a fully open-source AI-powered PPT generation skill whose name is slidea Signed-off-by: JiangYifei <jiangyifei@huawei.com> Signed-off-by: WanBo <wanbo13@huawei.com> Signed-off-by: SuBo <subo7@huawei.com> Signed-off-by: Zhukunpeng <zhukunpeng8@huawei.com> Signed-off-by: Bin Wu <wu.wubin@huawei.com> | 3 个月前 | |
fix(slidea): resolve gate issues for SVG export Signed-off-by: Zhukunpeng <zhukunpeng8@huawei.com> | 2 个月前 | |
feat(slidea): add SVG render route Signed-off-by: Zhukunpeng <zhukunpeng8@huawei.com> | 2 个月前 | |
refactor(slidea): consolidate SVG pipeline and output structure Eliminate svg_final/, consolidate to a single editable svg/ source of truth. Image inlining now happens at PPTX export time inside a temporary directory, so on-disk SVGs stay small and editable while the PPTX converter still receives self-contained input. Rename render/ to slides/ to match the slidea domain vocabulary, and move the final PPTX deliverable to the cache directory root so it is the most visible artifact. Persist template_name in ppt.json so patch-render reuses the same visual template instead of re-running the non-deterministic LLM template selection. New output layout: output/<run_id>/ ├── <topic>.pptx # final deliverable at cache root ├── ppt.json # slimmed schema: slides_dir, svg_dir, template_name └── slides/ ├── svg/ # single source of truth (no svg_final) ├── prompts/ └── images/ Also adds new_semantic_run_id() that generates <timestamp>_<llm_summary> run ids (with a ppt fallback on LLM failure) so humans can scan output/ and recognize runs without opening files. The finalize_node LangGraph node is removed; quality_check now feeds directly into export. The HTML render route receives the same save_dir rename for consistency. Signed-off-by: Zhukunpeng <zhukunpeng8@huawei.com> | 15 天前 | |
refactor(slidea): split SVG page generators from HTML route Signed-off-by: Zhukunpeng <zhukunpeng8@huawei.com> | 2 个月前 | |
fix(slidea): resolve gate issues for SVG export Signed-off-by: Zhukunpeng <zhukunpeng8@huawei.com> | 2 个月前 | |
refactor(slidea): split SVG page generators from HTML route Signed-off-by: Zhukunpeng <zhukunpeng8@huawei.com> | 2 个月前 | |
feat(slidea): add SVG render route Signed-off-by: Zhukunpeng <zhukunpeng8@huawei.com> | 2 个月前 | |
refactor(slidea): bundle llm_invoke/vlm_invoke options and tidy lint findings - Introduce InvokeOptions dataclass to group optional invoke params (config / pydantic_schema / json_schema / work_node); migrate ~30 call sites across ppt_thought, page_generators, svg_page_generators, deep_research, outline_generator, utils, and ci/review. - Rewrite scripts/pixel_diff.py and scripts/verify_font_fallback.py to route output through logging and use PYTHONPATH for the worker subprocess instead of sys.path.insert. - Wrap overlong lines in preflight.py, test_pipeline_contracts.py, test_preflight.py, and test_llm_routing.py. - Add targeted pylint: disable=protected-access to test sites that intentionally probe private helpers. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> | 30 天前 | |
refactor(slidea): bundle llm_invoke/vlm_invoke options and tidy lint findings - Introduce InvokeOptions dataclass to group optional invoke params (config / pydantic_schema / json_schema / work_node); migrate ~30 call sites across ppt_thought, page_generators, svg_page_generators, deep_research, outline_generator, utils, and ci/review. - Rewrite scripts/pixel_diff.py and scripts/verify_font_fallback.py to route output through logging and use PYTHONPATH for the worker subprocess instead of sys.path.insert. - Wrap overlong lines in preflight.py, test_pipeline_contracts.py, test_preflight.py, and test_llm_routing.py. - Add targeted pylint: disable=protected-access to test sites that intentionally probe private helpers. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> | 30 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 13 天前 | ||
| 30 天前 | ||
| 3 个月前 | ||
| 3 个月前 | ||
| 22 天前 | ||
| 30 天前 | ||
| 13 天前 | ||
| 15 天前 | ||
| 3 个月前 | ||
| 2 个月前 | ||
| 30 天前 | ||
| 30 天前 | ||
| 3 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 15 天前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 30 天前 | ||
| 30 天前 |