minimal-agent 0.8.2 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -12
- package/package.json +34 -1
- package/plugins/cron-runner/.claude-plugin/plugin.json +5 -0
- package/plugins/cron-runner/commands/cron.md +26 -0
- package/plugins/cron-runner/commands/crons.md +7 -0
- package/plugins/cron-runner/plugin.js +34 -0
- package/plugins/cron-runner/src/commands.js +348 -0
- package/plugins/cron-runner/src/cronTime.js +148 -0
- package/plugins/cron-runner/src/lock.js +68 -0
- package/plugins/cron-runner/src/runs.js +89 -0
- package/plugins/cron-runner/src/scheduleEngine.js +72 -0
- package/plugins/cron-runner/src/scheduler.js +355 -0
- package/plugins/cron-runner/src/schema.js +140 -0
- package/plugins/cron-runner/src/service.js +167 -0
- package/plugins/cron-runner/src/store.js +298 -0
- package/plugins/cron-runner/src/types.js +1 -0
- package/plugins/workflow-runner/commands/workflow.md +4 -4
- package/plugins/workflow-runner/commands/workflows.md +1 -1
- package/plugins/workflow-runner/plugin.js +3 -1
- package/plugins/workflow-runner/src/agentCommon.js +249 -51
- package/plugins/workflow-runner/src/dslManifest.js +72 -0
- package/plugins/workflow-runner/src/expressions.js +198 -15
- package/plugins/workflow-runner/src/index.js +40 -8
- package/plugins/workflow-runner/src/jsonPayload.js +1 -1
- package/plugins/workflow-runner/src/loader.js +286 -72
- package/plugins/workflow-runner/src/multimodal.js +37 -0
- package/plugins/workflow-runner/src/recovery.js +49 -39
- package/plugins/workflow-runner/src/runner.js +802 -287
- package/plugins/workflow-runner/src/stepExecutors/agent.js +157 -39
- package/plugins/workflow-runner/src/stepExecutors/assert.js +16 -3
- package/plugins/workflow-runner/src/stepExecutors/llm.js +60 -111
- package/plugins/workflow-runner/src/stepExecutors/skill.js +47 -47
- package/plugins/workflow-runner/src/stepExecutors/tool.js +76 -10
- package/plugins/workflow-runner/src/stepExecutors/verify.js +27 -10
- package/plugins/workflow-runner/src/taskIdentity.js +296 -0
- package/plugins/workflow-runner/src/types.js +19 -9
- package/plugins/workflow-runner/src/workflowState.js +516 -33
- package/skills/adversarial-review/SKILL.md +0 -1
- package/skills/ai-image/SKILL.md +89 -0
- package/skills/ai-image/scripts/generate.mjs +497 -0
- package/skills/ai-image/scripts/generate_from_plan.mjs +469 -0
- package/skills/ai-image/scripts/generate_from_plan_test.mjs +223 -0
- package/skills/ai-image/scripts/generate_test.mjs +74 -0
- package/skills/browser-automation/SKILL.md +47 -0
- package/skills/docx/SKILL.md +25 -3
- package/skills/docx/scripts/office/helpers/__pycache__/__init__.cpython-314.pyc +0 -0
- package/skills/docx/scripts/office/helpers/__pycache__/merge_runs.cpython-314.pyc +0 -0
- package/skills/docx/scripts/office/helpers/__pycache__/simplify_redlines.cpython-314.pyc +0 -0
- package/skills/docx/scripts/office/validators/__pycache__/__init__.cpython-314.pyc +0 -0
- package/skills/docx/scripts/office/validators/__pycache__/base.cpython-314.pyc +0 -0
- package/skills/docx/scripts/office/validators/__pycache__/docx.cpython-314.pyc +0 -0
- package/skills/docx/scripts/office/validators/__pycache__/pptx.cpython-314.pyc +0 -0
- package/skills/docx/scripts/office/validators/__pycache__/redlining.cpython-314.pyc +0 -0
- package/skills/docx/scripts/opc_check.py +253 -0
- package/skills/image-gen-openrouter/SKILL.md +10 -2
- package/skills/image-stats/SKILL.md +65 -0
- package/skills/image-stats/scripts/__pycache__/image_stats.cpython-314.pyc +0 -0
- package/skills/image-stats/scripts/__pycache__/image_stats_test.cpython-314.pyc +0 -0
- package/skills/image-stats/scripts/image_stats.py +368 -0
- package/skills/image-stats/scripts/image_stats_test.py +181 -0
- package/skills/pptx/SKILL.md +123 -95
- package/skills/pptx/design.md +82 -0
- package/skills/pptx/examples/README.md +29 -0
- package/skills/pptx/examples/hybrid_example.mjs +107 -0
- package/skills/pptx/examples/hybrid_example.pptx +0 -0
- package/skills/pptx/pptxgenjs.md +41 -0
- package/skills/pptx/scripts/deck_helpers.mjs +224 -0
- package/skills/pptx/scripts/layout_lint.py +293 -0
- package/skills/pptx/scripts/layout_lint_test.py +160 -0
- package/skills/pptx/scripts/opc_check.py +339 -0
- package/skills/pptx/scripts/svg_fallback.mjs +145 -0
- package/skills/pptx/svg.md +67 -0
- package/skills/tts-zh/SKILL.md +19 -2
- package/skills/ui-design/SKILL.md +158 -0
- package/skills/ui-design/claude_design.md +309 -0
- package/skills/ui-design/evals/evals.json +254 -0
- package/skills/ui-design/references/aesthetic-direction.md +83 -0
- package/skills/ui-design/references/claude-design-protocol.md +36 -0
- package/skills/ui-design/references/design-context.md +53 -0
- package/skills/ui-design/references/design-execution-playbook.md +82 -0
- package/skills/ui-design/references/export-pptx.md +124 -0
- package/skills/ui-design/references/layout-composition.md +654 -0
- package/skills/ui-design/references/preview-feedback.md +37 -0
- package/skills/ui-design/references/source-image-layout.md +189 -0
- package/skills/ui-design/references/starter-components.md +78 -0
- package/skills/ui-design/references/vi-aegis-vector.md +144 -0
- package/skills/ui-design/references/vi-amber-prism.md +133 -0
- package/skills/ui-design/references/vi-aqua-glass.md +200 -0
- package/skills/ui-design/references/vi-comfort-vision.md +147 -0
- package/skills/ui-design/references/vi-ember-prism.md +140 -0
- package/skills/ui-design/references/vi-nebula-console.md +151 -0
- package/skills/ui-design/references/vi-obsidian-optics.md +139 -0
- package/skills/ui-design/references/vi-obsidian-xui.md +143 -0
- package/skills/ui-design/references/vi-precision-horizon-dark.md +117 -0
- package/skills/ui-design/references/vi-precision-horizon.md +215 -0
- package/skills/ui-design/references/vi-solar-relay.md +130 -0
- package/skills/ui-design/references/vi-template-workflow.md +48 -0
- package/skills/ui-design/references/vi-verdant-grid.md +141 -0
- package/skills/ui-design/references/vi-violet-meridian.md +172 -0
- package/skills/ui-design/scripts/__pycache__/assemble_material.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/assemble_material_test.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/chart_sanity_check.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/check_language_policy.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/check_ui_artifact.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/check_ui_artifact_pptx_test.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/deck_pages_check.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/deck_pages_check_test.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/deck_visual_style_check.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/deck_visual_style_check_test.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/design_budget_check.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/design_budget_check_test.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/design_repair_hints.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/design_repair_hints_test.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/design_style_check.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/design_style_check_test.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/draft_coverage_check.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/extract_source_assets.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/extract_source_assets_test.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/generated_image_review_collect.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/generated_image_review_collect_test.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/image_plan_lint.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/image_plan_lint_test.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/image_prompt_rewrite.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/image_prompt_rewrite_test.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/layout_balance.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/layout_balance_test.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/normalize_design_json.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/normalize_design_json_test.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/plan_source_layout.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/plan_source_layout_test.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/resolve_source_hint.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/resolve_source_hint_test.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/resolve_source_input.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/resolve_source_input_test.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/scaffold_ui_artifact.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/source_usage_check.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/source_usage_check_test.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/text_readability_pixel.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/visual_quality_gate.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/__pycache__/visual_quality_gate_test.cpython-314.pyc +0 -0
- package/skills/ui-design/scripts/assemble_material.py +217 -0
- package/skills/ui-design/scripts/assemble_material_test.py +149 -0
- package/skills/ui-design/scripts/browser_check_ui_artifact.mjs +221 -0
- package/skills/ui-design/scripts/chart_sanity_check.py +261 -0
- package/skills/ui-design/scripts/chart_sanity_check_test.py +165 -0
- package/skills/ui-design/scripts/check_language_policy.py +351 -0
- package/skills/ui-design/scripts/check_ui_artifact.py +435 -0
- package/skills/ui-design/scripts/check_ui_artifact_pptx_test.py +251 -0
- package/skills/ui-design/scripts/deck_pages_check.py +158 -0
- package/skills/ui-design/scripts/deck_pages_check_test.py +134 -0
- package/skills/ui-design/scripts/deck_visual_style_check.py +767 -0
- package/skills/ui-design/scripts/deck_visual_style_check_test.py +713 -0
- package/skills/ui-design/scripts/design_budget_check.py +271 -0
- package/skills/ui-design/scripts/design_budget_check_test.py +183 -0
- package/skills/ui-design/scripts/design_repair_hints.py +162 -0
- package/skills/ui-design/scripts/design_repair_hints_test.py +54 -0
- package/skills/ui-design/scripts/design_style_check.py +397 -0
- package/skills/ui-design/scripts/design_style_check_test.py +233 -0
- package/skills/ui-design/scripts/draft_coverage_check.py +184 -0
- package/skills/ui-design/scripts/draft_coverage_check_test.py +131 -0
- package/skills/ui-design/scripts/export_pptx_from_html.mjs +2367 -0
- package/skills/ui-design/scripts/extract_source_assets.py +607 -0
- package/skills/ui-design/scripts/extract_source_assets_test.py +256 -0
- package/skills/ui-design/scripts/generated_image_review_collect.py +206 -0
- package/skills/ui-design/scripts/generated_image_review_collect_test.py +91 -0
- package/skills/ui-design/scripts/image_plan_lint.py +571 -0
- package/skills/ui-design/scripts/image_plan_lint_test.py +515 -0
- package/skills/ui-design/scripts/image_prompt_rewrite.py +713 -0
- package/skills/ui-design/scripts/image_prompt_rewrite_test.py +966 -0
- package/skills/ui-design/scripts/layout_balance.py +881 -0
- package/skills/ui-design/scripts/layout_balance_test.py +927 -0
- package/skills/ui-design/scripts/normalize_design_json.py +272 -0
- package/skills/ui-design/scripts/normalize_design_json_test.py +119 -0
- package/skills/ui-design/scripts/plan_source_layout.py +1450 -0
- package/skills/ui-design/scripts/plan_source_layout_test.py +1136 -0
- package/skills/ui-design/scripts/resolve_source_input.py +270 -0
- package/skills/ui-design/scripts/resolve_source_input_test.py +98 -0
- package/skills/ui-design/scripts/scaffold_ui_artifact.py +377 -0
- package/skills/ui-design/scripts/source_usage_check.py +581 -0
- package/skills/ui-design/scripts/source_usage_check_test.py +427 -0
- package/skills/ui-design/scripts/text_readability_pixel.py +340 -0
- package/skills/ui-design/scripts/text_readability_pixel_test.py +219 -0
- package/skills/ui-design/scripts/visual_quality_gate.py +301 -0
- package/skills/ui-design/scripts/visual_quality_gate_test.py +233 -0
- package/skills/ui-design/tests/e2e/prompts/deck.md +19 -0
- package/skills/ui-design/tests/e2e/prompts/webpage.md +17 -0
- package/skills/ui-design/tests/e2e/render_check.mjs +101 -0
- package/skills/ui-design/tests/e2e/rubric.json +54 -0
- package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/checks/browser-check.json +49 -0
- package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/checks/language-check.txt +12 -0
- package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/checks/static-check.txt +15 -0
- package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/outputs/index.html +837 -0
- package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/prompt.md +12 -0
- package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/review.md +21 -0
- package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/screenshots/desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/screenshots/mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/outputs/homepage.html +373 -0
- package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/outputs/platform.html +378 -0
- package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/prompt.md +13 -0
- package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/review.md +26 -0
- package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/screenshots/homepage/browser-check.json +49 -0
- package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/screenshots/homepage/desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/screenshots/homepage/mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/screenshots/platform/browser-check.json +49 -0
- package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/screenshots/platform/desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/screenshots/platform/mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-1/checks/static-check.txt +2 -0
- package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-1/outputs/index.html +656 -0
- package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-1/prompt.md +12 -0
- package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-1/render_check.mjs +67 -0
- package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-2/checks/static-check.txt +2 -0
- package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-2/outputs/index.html +587 -0
- package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-2/prompt.md +12 -0
- package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-2/review.md +36 -0
- package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/checks/browser-check.json +49 -0
- package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/checks/language-check.txt +8 -0
- package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/checks/static-check.txt +16 -0
- package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/outputs/index.html +739 -0
- package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/prompt.md +11 -0
- package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/review.md +22 -0
- package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/screenshots/desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/screenshots/mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/comfort-vision-preview-1/checks/browser-check.json +52 -0
- package/skills/ui-design/tests/e2e/runs/comfort-vision-preview-1/outputs/index.html +641 -0
- package/skills/ui-design/tests/e2e/runs/comfort-vision-preview-1/screenshots/desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/comfort-vision-preview-1/screenshots/mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/ember-prism-red-preview-1/outputs/index.html +467 -0
- package/skills/ui-design/tests/e2e/runs/ember-prism-red-preview-1/screenshots/browser-check.json +49 -0
- package/skills/ui-design/tests/e2e/runs/ember-prism-red-preview-1/screenshots/desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/ember-prism-red-preview-1/screenshots/mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/outputs/homepage.html +373 -0
- package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/outputs/platform.html +378 -0
- package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/prompt.md +13 -0
- package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/review.md +26 -0
- package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/screenshots/homepage/browser-check.json +49 -0
- package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/screenshots/homepage/desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/screenshots/homepage/mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/screenshots/platform/browser-check.json +49 -0
- package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/screenshots/platform/desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/screenshots/platform/mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/checks/browser-check.json +49 -0
- package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/checks/language-check.txt +4 -0
- package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/checks/static-check.txt +2 -0
- package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/execution_notes.md +10 -0
- package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/outputs/index.html +587 -0
- package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/prompt.md +14 -0
- package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/review.md +13 -0
- package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/screenshots/desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/screenshots/mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/iteration-1/deck/checks/browser-check.json +24 -0
- package/skills/ui-design/tests/e2e/runs/iteration-1/deck/checks/static-check.txt +2 -0
- package/skills/ui-design/tests/e2e/runs/iteration-1/deck/execution_notes.md +21 -0
- package/skills/ui-design/tests/e2e/runs/iteration-1/deck/outputs/deck.html +451 -0
- package/skills/ui-design/tests/e2e/runs/iteration-1/deck/screenshots/slide-01.png +0 -0
- package/skills/ui-design/tests/e2e/runs/iteration-1/deck/screenshots/slide-02.png +0 -0
- package/skills/ui-design/tests/e2e/runs/iteration-1/review.md +79 -0
- package/skills/ui-design/tests/e2e/runs/iteration-1/webpage/checks/browser-check.json +26 -0
- package/skills/ui-design/tests/e2e/runs/iteration-1/webpage/checks/static-check.txt +2 -0
- package/skills/ui-design/tests/e2e/runs/iteration-1/webpage/execution_notes.md +20 -0
- package/skills/ui-design/tests/e2e/runs/iteration-1/webpage/outputs/index.html +534 -0
- package/skills/ui-design/tests/e2e/runs/iteration-1/webpage/screenshots/desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/iteration-1/webpage/screenshots/mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/checks/browser-check.json +64 -0
- package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/checks/language-check.txt +7 -0
- package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/checks/quick-validate.txt +1 -0
- package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/checks/static-console.txt +2 -0
- package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/checks/static-homepage.txt +2 -0
- package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/outputs/console.html +600 -0
- package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/outputs/homepage.html +556 -0
- package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/prompt.md +29 -0
- package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/review.md +57 -0
- package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/screenshots/console-desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/screenshots/console-mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/screenshots/homepage-desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/screenshots/homepage-mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/checks/browser-check.json +33 -0
- package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/checks/language-check.txt +6 -0
- package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/checks/quick-validate.txt +1 -0
- package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/checks/static-check.txt +2 -0
- package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/outputs/index.html +682 -0
- package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/prompt.md +13 -0
- package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/review.md +59 -0
- package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/screenshots/desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/screenshots/mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/outputs/page-01.html +466 -0
- package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/outputs/page-02.html +433 -0
- package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/prompt.md +13 -0
- package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/screenshots/page-01/browser-check.json +49 -0
- package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/screenshots/page-01/desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/screenshots/page-01/mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/screenshots/page-02/browser-check.json +49 -0
- package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/screenshots/page-02/desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/screenshots/page-02/mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/checks/browser-check.json +49 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/checks/language-check.txt +3 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/checks/static-check.txt +2 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/execution_notes.md +24 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/outputs/index.html +723 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/prompt.md +15 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/review.md +26 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/screenshots/desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/screenshots/mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/checks/browser-dark.json +49 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/checks/browser-light.json +49 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/checks/language-check.txt +11 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/checks/static-dark.txt +2 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/checks/static-light.txt +3 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/execution_notes.md +23 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/outputs/dark.html +392 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/outputs/light.html +476 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/prompt.md +23 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/review.md +41 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/screenshots/dark/desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/screenshots/dark/mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/screenshots/light/desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/screenshots/light/mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/checks/browser-check.json +54 -0
- package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/checks/language-check.txt +5 -0
- package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/checks/quick-validate.txt +1 -0
- package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/checks/static-check.txt +2 -0
- package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/outputs/index.html +765 -0
- package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/prompt.md +15 -0
- package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/review.md +59 -0
- package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/screenshots/desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/screenshots/mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/verdant-grid-preview-1/outputs/index.html +508 -0
- package/skills/ui-design/tests/e2e/runs/verdant-grid-preview-1/screenshots/browser-check.json +49 -0
- package/skills/ui-design/tests/e2e/runs/verdant-grid-preview-1/screenshots/desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/verdant-grid-preview-1/screenshots/mobile.png +0 -0
- package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/checks/browser-check.json +54 -0
- package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/checks/language-check.txt +6 -0
- package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/checks/quick-validate.txt +1 -0
- package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/checks/static-check.txt +2 -0
- package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/outputs/index.html +788 -0
- package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/prompt.md +14 -0
- package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/review.md +60 -0
- package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/screenshots/desktop.png +0 -0
- package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/screenshots/mobile.png +0 -0
- package/skills/video-compose/SKILL.md +8 -1
- package/skills/web-crawler/SKILL.md +70 -0
- package/skills/web-crawler/scripts/crawl.mjs +538 -0
- package/skills/web-crawler/scripts/crawl.test.mjs +204 -0
- package/skills/xlsx/SKILL.md +12 -0
- package/skills/xlsx/scripts/opc_check.py +253 -0
- package/src/advisorState.js +22 -0
- package/src/askBridge.js +97 -3
- package/src/bootstrap/workingDir.js +12 -1
- package/src/cli/args.js +17 -1
- package/src/cli/configMenu.js +236 -0
- package/src/cli/configWizard.js +7 -5
- package/src/cli/print.js +37 -4
- package/src/cli/streamJson.js +77 -24
- package/src/cli/wizards/advisorWizard.js +147 -0
- package/src/cli/wizards/fieldForm.js +149 -0
- package/src/cli/wizards/imageWizard.js +60 -0
- package/src/cli/wizards/openRouterWizard.js +23 -0
- package/src/cli/wizards/providerPresets.js +95 -0
- package/src/cli/wizards/providerWizard.js +219 -0
- package/src/cli/wizards/searchWizard.js +23 -0
- package/src/cli/wizards/ttsWizard.js +34 -0
- package/src/config/configFile.js +441 -83
- package/src/config/configService.js +446 -0
- package/src/config.js +24 -64
- package/src/context/agentHome.js +9 -0
- package/src/context/archive.js +7 -2
- package/src/context/compact.js +8 -5
- package/src/context/contextLock.js +81 -0
- package/src/context/persistContext.js +30 -11
- package/src/context/reactiveCompact.js +4 -2
- package/src/context/recentDirs.js +21 -61
- package/src/context/sessionPath.js +97 -23
- package/src/context/sessionRegistry.js +303 -24
- package/src/context/tokenCounter.js +18 -0
- package/src/context/workspaceIndex.js +731 -0
- package/src/infra/verification.js +28 -15
- package/src/llm/client.js +394 -159
- package/src/llm/providers/anthropicFormat.js +241 -0
- package/src/llm/providers/openaiFormat.js +190 -0
- package/src/loop.js +219 -32
- package/src/main.js +61 -11
- package/src/messageQueue.js +97 -0
- package/src/multimodal.js +203 -0
- package/src/plugin-sdk.js +15 -0
- package/src/plugins/commandRouter.js +3 -0
- package/src/plugins/hookEngine.js +5 -1
- package/src/plugins/pluginLifecycle.js +28 -0
- package/src/plugins/pluginLoader.js +2 -1
- package/src/plugins/pluginRunner.js +49 -21
- package/src/plugins/transcript.js +4 -3
- package/src/prompts/pluginList.js +5 -5
- package/src/prompts/projectInstructions.js +3 -3
- package/src/prompts/promptAssembly.js +133 -144
- package/src/prompts/skillList.js +12 -22
- package/src/prompts/system.js +0 -1
- package/src/session/runAgentTurn.js +70 -0
- package/src/session/runTurn.js +41 -6
- package/src/toolGate.js +17 -0
- package/src/tools/advisor/advisor.js +379 -0
- package/src/tools/agent/agent.js +555 -0
- package/src/tools/agent/agentTypes.js +59 -0
- package/src/tools/agent/coordinator.js +93 -0
- package/src/tools/agent/worktree.js +270 -0
- package/src/tools/ask/ask.js +7 -2
- package/src/tools/bash/bash.js +112 -18
- package/src/tools/download/download.js +144 -0
- package/src/tools/edit/edit.js +1 -0
- package/src/tools/edit/multi-edit.js +1 -0
- package/src/tools/genimage/genimage.js +242 -0
- package/src/tools/genspeech/genspeech.js +67 -0
- package/src/tools/glob/glob.js +1 -0
- package/src/tools/grep/grep.js +3 -0
- package/src/tools/grep/rgPath.js +2 -0
- package/src/tools/index.js +25 -2
- package/src/tools/read/read.js +1 -0
- package/src/tools/shared/killTree.js +52 -0
- package/src/tools/toolProgressBridge.js +48 -0
- package/src/tools/webbrowser/agentBrowserPath.js +258 -0
- package/src/tools/webbrowser/browser.js +59 -42
- package/src/tools/webbrowser/browserControl.js +118 -0
- package/src/tools/webbrowser/browserDaemon.js +97 -0
- package/src/tools/webbrowser/browserService.js +27 -0
- package/src/tools/webbrowser/browserStream.js +119 -0
- package/src/tools/webbrowser/webbrowser.js +699 -130
- package/src/tools/webfetch/webfetch.js +1 -0
- package/src/tools/websearch/websearch.js +134 -51
- package/src/tools/write/write.js +1 -0
- package/src/ui/App.js +249 -22
- package/src/ui/AskQuestion.js +29 -10
- package/src/ui/InputBox.js +104 -12
- package/src/ui/LiveArea.js +112 -19
- package/src/ui/MessageList.js +100 -14
- package/src/ui/ModelPicker.js +56 -0
- package/src/ui/QueuedMessagesBanner.js +14 -0
- package/src/ui/Root.js +18 -10
- package/src/ui/SessionPicker.js +102 -0
- package/src/ui/StatusLine.js +13 -4
- package/src/ui/WorkspacePicker.js +55 -0
- package/src/ui/figures.js +44 -0
- package/src/ui/hooks/askSlot.js +82 -0
- package/src/ui/hooks/useChat.js +358 -64
- package/src/ui/hooks/usePasteHandler.js +11 -1
- package/src/ui/hooks/useTextBuffer.js +1 -3
- package/src/ui/liveViewport.js +5 -1
- package/src/ui/markdown.js +206 -0
- package/src/ui/textBuffer.js +0 -7
- package/src/ui/theme.js +32 -0
- package/src/utils/debugLog.js +0 -4
- package/src/utils/resourcePaths.js +2 -2
- package/src/utils/stripThink.js +50 -0
- package/src/web/browserBridge.js +447 -0
- package/src/web/protocol.js +19 -0
- package/workflows/adaptive-research.yaml +13 -5
- package/workflows/book-review-short.yaml +36 -10
- package/workflows/e2e-write-greet.yaml +6 -2
- package/workflows/illustrate.yaml +227 -0
- package/workflows/plan.yaml +460 -179
- package/workflows/ppt.yaml +1659 -0
- package/workflows/ralph-loop.yaml +199 -0
- package/workflows/schema.json +81 -23
- package/workflows/webppt.yaml +496 -0
- package/workflows/word.yaml +710 -0
- package/workflows/youtube-shorts.yaml +46 -15
- package/MINIMAL-TRACE.md +0 -77
- package/plugins/HOW-TO-WRITE-A-PLUGIN.md +0 -186
- package/plugins/ralph-wiggum/.claude-plugin/plugin.json +0 -9
- package/plugins/ralph-wiggum/README.md +0 -197
- package/plugins/ralph-wiggum/commands/cancel-ralph.md +0 -18
- package/plugins/ralph-wiggum/commands/help.md +0 -137
- package/plugins/ralph-wiggum/commands/ralph-loop.md +0 -85
- package/plugins/ralph-wiggum/hooks/hooks.json +0 -15
- package/plugins/ralph-wiggum/hooks/stop-hook.sh +0 -191
- package/plugins/ralph-wiggum/plugin.js +0 -280
- package/plugins/ralph-wiggum/src/goalState.js +0 -258
- package/plugins/ralph-wiggum/src/sentinels.js +0 -76
- package/plugins/ralph-wiggum/src/stopHookRunner.js +0 -104
- package/plugins/ralph-wiggum/src/verificationGate.js +0 -202
- package/plugins/workflow-runner/src/miniReAct.js +0 -223
- package/plugins/workflow-runner/src/voteHelpers.js +0 -110
- package/skills/config/SKILL.md +0 -123
- package/skills/frontend-design/LICENSE.txt +0 -177
- package/skills/frontend-design/SKILL.md +0 -42
- package/src/ui/ProgressPanel.js +0 -54
- package/src/ui/StreamingBlock.js +0 -11
- package/src/ui/ToolStatus.js +0 -11
|
@@ -0,0 +1,496 @@
|
|
|
1
|
+
name: webppt
|
|
2
|
+
description: >
|
|
3
|
+
生成 PPT(网页设计驱动版,webppt):分析需求并定样式 → 结合专业知识 + WebSearch 写知乎深度长文式基础稿件 →
|
|
4
|
+
**先产一份详细的 Web 页面设计文档**(每页:内容条目 + 构图法[左右/左中右/上下/上中下/四宫格/中心辐射…] +
|
|
5
|
+
每块渲染决策[纯文字/HTML元素+文字/文字+插图/HTML+文字+插图] + 配图与"呼应文案"的生图提示词 + 背景变化意图)→
|
|
6
|
+
**对抗评审设计文档**(回顾用户原始需求,挑刺并修订定稿)→ 按设计文档**分批生成** HTML deck(每轮 ≤5 页,
|
|
7
|
+
确定性页数闸门收口,防大 deck 烂尾)→ 配图分流(结构图回退 HTML)→ 按比例生图 →
|
|
8
|
+
HTML 层构图均衡闸门(已放宽:死守重叠、放宽"空")→ 三层可编辑导出 hybrid PPTX **一次** → OPC 校验 → 报告。
|
|
9
|
+
三层 = hybrid:背景整页截图垫底(不可编辑);前景每个离散元素(卡片/色块/图标/SVG/插图)逐元素切图成独立可编辑
|
|
10
|
+
图片对象;文本顶层还原为 PPT 原生可编辑文本框;全幅氛围背景图(B 路线)连同 scrim 留背景层。
|
|
11
|
+
version: "0.1"
|
|
12
|
+
|
|
13
|
+
# 声明产物:只列最终交付物(new-task 清理旧 PPT / completed 报产物 / 完成闸门校验落盘)。
|
|
14
|
+
# 中间 scratch(draft/design/deck.html/img_plan/assets/export)故意不声明——收尾 cleanup 删;
|
|
15
|
+
# 声明进来会被「声明产物必须存在」判缺失而 halt。
|
|
16
|
+
artifacts:
|
|
17
|
+
- "./out/deck.pptx"
|
|
18
|
+
|
|
19
|
+
# 自愈:LLM/网络瞬态故障 in-run 重跑(端点会分钟级拥塞波,给恢复窗口)。
|
|
20
|
+
self_heal:
|
|
21
|
+
max_retries: 2
|
|
22
|
+
retry_delay_ms: 20000
|
|
23
|
+
|
|
24
|
+
# 输入设计:同 ppt.yaml——用户「打一句话自然语言」即可(topic greedy 吸收全部位置参数)。
|
|
25
|
+
# 页数不是输入(由设计文档按内容自动定);style/mode/illustrations/out 仅作高级 --input 覆盖。
|
|
26
|
+
inputs:
|
|
27
|
+
- name: topic
|
|
28
|
+
type: string
|
|
29
|
+
required: true
|
|
30
|
+
greedy: true
|
|
31
|
+
description: "PPT 主题 / 完整需求(中文,可直接一句话自然语言:内容要点 + 样式偏好如\"浅色/紫色\" + 任何要求如\"先搜资料\")"
|
|
32
|
+
- name: style
|
|
33
|
+
type: string
|
|
34
|
+
default: ""
|
|
35
|
+
description: "【高级·可选 --input】视觉样式覆盖:留空=由 stage0 据需求自动定;填内置 VI 名(aqua-glass/nebula-console/violet-meridian/solar-relay/harbor-ledger/obsidian-optics)=强制套用;填一句风格方向=据此设计。"
|
|
36
|
+
- name: mode
|
|
37
|
+
type: enum
|
|
38
|
+
values: ["hybrid", "flat"]
|
|
39
|
+
default: "hybrid"
|
|
40
|
+
description: "【高级·可选 --input】导出模式:hybrid=文字/插图可编辑、背景截图(推荐);flat=全图最保真但不可编辑"
|
|
41
|
+
- name: illustrations
|
|
42
|
+
type: number
|
|
43
|
+
default: -1
|
|
44
|
+
description: "【高级·可选 --input】AI 生图张数控制:默认 -1=由设计文档内容自动定、不设上限;0=完全不生 AI 图(仅纯示意主题);N>0=显式上限 N 张。AI 图只花在真正需要画面的页(封面/章节氛围图、产品/物体/线条图/使用演示、文字与 HTML 都画不清的概念图),不是给内容偏少的页填空的拐杖。能用 HTML/CSS/SVG 表达的图形一律用 HTML、不占额度。"
|
|
45
|
+
- name: out
|
|
46
|
+
type: string
|
|
47
|
+
default: "./out/deck.pptx"
|
|
48
|
+
description: "【高级·可选 --input】输出 PPTX 路径"
|
|
49
|
+
- name: image_intensity
|
|
50
|
+
type: enum
|
|
51
|
+
values: ["minimal", "balanced", "rich"]
|
|
52
|
+
default: "balanced"
|
|
53
|
+
description: "【高级·可选 --input】AI 生图积极性(控『多积极地选 AI 配图』,与 illustrations 张数上限叠加):minimal=几乎只封面/章节氛围图、正文尽量 HTML;balanced(默认,比旧版克制更积极一档)=封面/章节 + 适当给『真实画面/概念』内容页配 AI 图;rich=更大方地给内容页配 AI 氛围图/概念插图,deck 更有视觉冲击。**红线任何档不变:结构图(架构/流程/树/对比/时间线)必须 HTML/SVG、绝不当 AI 图生。**"
|
|
54
|
+
|
|
55
|
+
steps:
|
|
56
|
+
# ---------- 阶段1:需求分析 + 样式推荐(受众/深度能推断自己定;**视觉样式 style 为空时必问用户**,最多问一轮) ----------
|
|
57
|
+
- id: stage0_clarify
|
|
58
|
+
title: "阶段1/11·需求分析 + 样式推荐"
|
|
59
|
+
agent: |
|
|
60
|
+
你要为用户做一套 PPT。**本步的唯一任务 = 需求分析 + 定视觉样式,输出结论后立即结束。**
|
|
61
|
+
|
|
62
|
+
⚠️ 严格边界(弱模型尤其注意):本步**只做分析、给结论**,**绝对不要**在本步:
|
|
63
|
+
写 HTML、写任何文件、制作或生成 PPT、调用任何生成/导出类工具、开始"做 PPT"。
|
|
64
|
+
撰稿/设计文档/生图/导出都是**后续独立阶段**的事。你输出下面要求的分析结论后就**停下**。
|
|
65
|
+
|
|
66
|
+
## 一、分析需求(能推断的自己定,无需翻工作目录/代码库)
|
|
67
|
+
直接从主题(${inputs.topic})文字推断:受众与场合、内容目的与深度取向、内容范围与详略。
|
|
68
|
+
主题文字本身自足,**不要去 Read/Grep/Glob 工作目录探索**(会跑偏、烧轮数)。这几项能推断的一律自己拍板、不问——
|
|
69
|
+
**唯一例外是「视觉样式」:见第二节,style 为空时必须问用户,不得自己替用户拍样式。**
|
|
70
|
+
|
|
71
|
+
## 二、视觉样式(style="${inputs.style}")——⚠️ **本步唯一必做的人机交互**
|
|
72
|
+
- **style 已填**(内置 VI 名 / 一句风格方向):直接采用、**不要再问样式**,跳过提问。
|
|
73
|
+
- **style 为空**:**你必须调用一次 AskUserQuestion 让用户选视觉样式——不论主题多明确都要问,绝不自己替用户拍板样式**
|
|
74
|
+
(样式是主观偏好,必须用户拍)。**没问就直接进下一步 = 执行错误。** 做法:
|
|
75
|
+
从下面 6 个内置 VI 里挑 **2–3 个最贴合本主题的**作为选项(每项写「VI 名 + 一句风格气质」),
|
|
76
|
+
AskUserQuestion 会自带「其它」让用户**自由输入自定义风格方向**——这就实现了「两三个可选 + 一个自定义输入」。
|
|
77
|
+
⚠️ 非交互宿主(-p/gateway/子进程)会自动选推荐项,那没问题;但**交互运行(TUI)时这一问绝不能省**。内置 VI 与适用场景:
|
|
78
|
+
- aqua-glass:浅蓝白玻璃、通透现代——AI 产品/效率工具/知识库/SaaS/官网
|
|
79
|
+
- nebula-console:深色科技半透明、星云控制台——云服务/开发者工具/数据基础设施/安全
|
|
80
|
+
- violet-meridian:紫白蓝紫、清爽智能——AI 工作台/开发者工具/图标配色
|
|
81
|
+
- solar-relay:红橙多彩弧带、活力——网络加速/VPN/连接/移动应用
|
|
82
|
+
- harbor-ledger:克制运营型——B2B dashboard/金融/物流/能源/管理驾驶舱
|
|
83
|
+
- obsidian-optics:黑曜影像、精密工业——影像器材/镜头/创作者硬件/调色
|
|
84
|
+
|
|
85
|
+
## 三、其它澄清(克制)
|
|
86
|
+
第二节的样式问是**必做**的;其它澄清则克制——仅当「缺了它整套 PPT 方向会完全不同、且推断不出」时,
|
|
87
|
+
才把它**并进第二节那同一轮 AskUserQuestion**(连同样式题最多 4 题,选项式优先、每题给推荐项)。其它澄清目标已明确就别问。
|
|
88
|
+
|
|
89
|
+
输出(简洁,供后续步骤引用)后**立即结束本步**:
|
|
90
|
+
- 受众/场合、内容目的与深度、内容范围与详略(页数由后续设计文档按章节自动定,不在此预设)
|
|
91
|
+
- **最终采用的视觉样式**(VI 名或风格方向,写明确,后续设计步据此执行)
|
|
92
|
+
- 哪类内容可能需要配图
|
|
93
|
+
- 你自行拍板的关键默认假设
|
|
94
|
+
allowed_tools: [AskUserQuestion]
|
|
95
|
+
maxTurns: 8
|
|
96
|
+
capture: clarifications
|
|
97
|
+
goal_supplement: true
|
|
98
|
+
onError: continue
|
|
99
|
+
max_retries: 1
|
|
100
|
+
|
|
101
|
+
# ---------- 阶段2:专业研究 + 知乎深度长文式基础稿件 ----------
|
|
102
|
+
- id: stage_research
|
|
103
|
+
title: "阶段2/11·专业研究 + 撰写基础稿件"
|
|
104
|
+
agent: |
|
|
105
|
+
为主题「${inputs.topic}」做专业研究,产出一篇**知乎高赞深度长文式**的基础稿件,落到 `./build/draft.md`。
|
|
106
|
+
这篇稿件是后续整套 PPT 的**唯一内容源**——它薄,PPT 必然肤浅;它厚且有料,PPT 才立得住。
|
|
107
|
+
成败标准只有一个:**专业、有深度、有观点、有据可依,绝不灌水、绝不百科式罗列。**
|
|
108
|
+
|
|
109
|
+
## 一、先锚定"为谁写、写给谁用"(决定深度的取向)
|
|
110
|
+
开篇就把上文📌用户补充要求里的**受众 / 场合 / 目的 / 深度取向**吃进去:通篇围绕
|
|
111
|
+
"**这个受众为什么要懂这个、懂了能做什么决策/动作**"展开,而不是泛泛科普。深度不打折。
|
|
112
|
+
|
|
113
|
+
## 二、搭专业理解框架(先你自己的判断)
|
|
114
|
+
**结合你的专业知识**先列专业骨架:背景与真问题 / 现状与关键概念 / 核心机制或原理 /
|
|
115
|
+
争议或难点 / 不同路线的取舍 / 趋势与实践要点。这一步决定文章有没有"观点和骨头"。
|
|
116
|
+
|
|
117
|
+
## 三、有的放矢地检索(补事实、补最新、补数据)
|
|
118
|
+
**用 WebSearch 围绕 3–6 个关键子问题分别检索**(拆成"X 的最新进展 / Y 的真实数据 / Z 的对比"这种具体子问题);
|
|
119
|
+
命中高价值来源用 **WebFetch 取正文细读**,把数据/结论**消化**进稿件。
|
|
120
|
+
- **涉及时效性 / 数据 / 最新进展 / 版本 / 价格 / 政策:必须查新**,文中标注信息时点(如"截至 2026 年初")。
|
|
121
|
+
- **专业 / 时效概念优先查权威英文 / 国际源**,消化后用中文转述;对 SEO 内容农场 / 软文保持警惕,宁可少引一条也不抄营销稿。
|
|
122
|
+
- **不要整段复制原文、不要编造来源或链接**。
|
|
123
|
+
|
|
124
|
+
## 四、按"知乎深度长文"结构成稿(用 Write 写 `./build/draft.md`)
|
|
125
|
+
简体中文、Markdown,**篇幅按主题复杂度自适应、深度优先:通常 2500–6000 字,宁长勿空**(不靠注水凑字)。结构:
|
|
126
|
+
1. **引子**:抛真问题 / 认知张力 / 反直觉点(不要"随着……的发展"套话)。
|
|
127
|
+
2. **核心论点(thesis)**:一句话立住全文判断。
|
|
128
|
+
3. **多个分论点小节**(带小标题):每节 = 一个子观点 + **支撑事实/数据/机制**(讲清"为什么")+ 必要时给**反方视角或适用边界**。
|
|
129
|
+
4. **综合与启示**:回到受众,给出"所以对你意味着什么 / 该怎么做"。
|
|
130
|
+
5. **难懂概念顺带配个类比/例子**(供后续 PPT 上屏「说人话」):对抽象/专业概念,draft 里随手记一个贴切类比或具体例子
|
|
131
|
+
(如「全景相机」≈「多镜头拼成谷歌街景那种可转视角画面」、「π」≈「约 3.14~3.15」)——近似但好懂,后续做 PPT 精炼文案时直接用。
|
|
132
|
+
|
|
133
|
+
降级(必须遵守):若 `WebSearch` 报「TAVILY_API_KEY 未设置」或搜不到,**直接用专业知识成稿**,文末注一行「(本稿未联网检索,基于模型既有知识)」,篇幅与深度不变。
|
|
134
|
+
|
|
135
|
+
完成后简述:字数、核心论点、几个论点小节、是否联网及覆盖了哪些时效信息。
|
|
136
|
+
allowed_tools: [WebSearch, WebFetch, Read, Write, Glob]
|
|
137
|
+
maxTurns: 24
|
|
138
|
+
done_when: "fileExists('./build/draft.md')"
|
|
139
|
+
# 地基步:稿件是后续全流程的唯一内容源。LLM 调用失败(如 minimax 端点拥塞/空闲超时)时**必须 halt 保留现场**,
|
|
140
|
+
# 不能 continue——否则没 draft.md 会让后面 5 个内容步全因 when=false 跳过、空手撞到导出步「假装推进、实则烂尾」。
|
|
141
|
+
# halt 后重跑按任务身份从本步续跑(错峰/网络恢复即可成)。max_retries 给 2 次 in-run 重试吸收瞬态拥塞。
|
|
142
|
+
onError: halt
|
|
143
|
+
max_retries: 2
|
|
144
|
+
|
|
145
|
+
# ---------- 阶段3:Web 页面设计文档(替换"大纲"——先设计后实现的核心) ----------
|
|
146
|
+
# 产三份:design.md(人读)+ design.json(机读,驱动分批生成 + 配图分流 + 页数闸门)+ img_plan.json(配图计划)。
|
|
147
|
+
# design.json 比旧 outline.json 更细:每页带 composition(空间构图法)、每内容块 render(视觉表达决策)、
|
|
148
|
+
# visual.prompt(与文案呼应的生图提示词,不再事后搬文案)、background(页面级背景变化意图)。
|
|
149
|
+
# **保留 visual.{route,side,note} 字段名** → 下游 image_plan_lint.py(--outline 参数)直接吃 design.json,零适配。
|
|
150
|
+
- id: stage_design_doc
|
|
151
|
+
title: "阶段3/11·Web 页面设计文档(先设计后实现)"
|
|
152
|
+
when: "fileExists('./build/draft.md')"
|
|
153
|
+
agent: |
|
|
154
|
+
读 `./build/draft.md`,产出一份**详细的 Web 页面设计文档**——这是后续"做网页"的唯一蓝图。
|
|
155
|
+
关键心态:**先把每一页设计清楚(装什么内容、用什么构图、每块怎么呈现、配什么图、背景什么变化),再去实现**。
|
|
156
|
+
不要在本步写 deck.html / 生图(那是后续阶段)。本步只产设计文档 + 配图计划。
|
|
157
|
+
|
|
158
|
+
## 先读设计规则(单一规则源)
|
|
159
|
+
从系统提示「可用技能」里 ui-design 的【技能目录】,用 Read 读 `references/layout-composition.md`
|
|
160
|
+
(构图法枚举 + 每页内容预算 + 元素渲染决策 + 配图分流 + 生图提示词配方 + 构图均衡)。严格照其执行。
|
|
161
|
+
|
|
162
|
+
## 一、按总-分-总叙事弧分页(页数由内容定,不预设、不硬凑)
|
|
163
|
+
- **总(开篇)**:封面 → 可选目录 → 1 页综述/背景页(综述全文要解决的问题 + 给读者"地图")。
|
|
164
|
+
- **分(主体)**:draft 每个分论点展开成章节页,**一页 = 一个完整子观点**讲透。
|
|
165
|
+
🚨 **内容多就拆成两页、别死磕一页**(页数不要钱、顶出画布才是灾难):单页内容**严格按 archetype 内容预算**(见 §0.6,
|
|
166
|
+
如 cards 4–6 卡 / list 5–7 条 / split ≤5 条);**超预算就当场拆成 2 页**(同一子观点分上下篇),绝不硬塞致挤压/顶出。
|
|
167
|
+
**能图形化的别堆文字(图文并茂省字)**:流程/对比/层级/数据/关系用 HTML 图表/SVG/图标/卡片表达,一张图顶一段话——
|
|
168
|
+
既省文字又有视觉,是把内容塞进预算的首选手段(不是先写满文字再想怎么塞)。
|
|
169
|
+
**「一句话/极少文字占一页」的稀疏页(封面/章节分隔/金句页)可以有,但守两条:① 全 deck 内这种页 ≤ 20%;
|
|
170
|
+
② 每张必须配 AI 氛围图 或 渐变色/半透明色底图(在该页 `background` 里写明),避免简陋**——其余正文页正常填实。
|
|
171
|
+
- **总(收束)**:1 页总结/展望页。综述页 + 总结页**必须有**。
|
|
172
|
+
|
|
173
|
+
## 二、每页定五件事(设计文档的核心,逐页写清)
|
|
174
|
+
**0. 先定整页视觉策略(★编辑式最高标准·强制默认,治「卡片墙划区」)**:每页先从 `layout-composition.md §0「编辑式最高标准」+ §2.2 模板库` 选编辑式整页策略——
|
|
175
|
+
🚨 **强制默认 = 「图打底 + 文字浮前景 + scrim」**(苹果/大疆产品详情页范式,**不靠表格/网格/悬浮卡片划分区域**):
|
|
176
|
+
- **每个内容页都必须有背景层(默认高清 AI 图,渐变只作失败兜底)**:**优先配高清 AI 全幅底图(route=ai-B,成本不计、积极生图)**——产品/物体/环境/使用/抽象观点页都给;**仅 AI 失败或极简金句页**才退化 **VI 同色系渐变 / 纹理 + scrim**。文字/图表/要点浮背景上,绝不留"白底 + 卡海"。
|
|
177
|
+
- **数据 → 图表**(柱/曲线/进阶时间线/指标胶囊/对比列);**特写 → 插图**。
|
|
178
|
+
- **卡片墙 / 网格 / 表格 = 罕见例外**:仅真·并列指标矩阵且做成图表/指标面板浮背景时才用,禁白底分区卡海。
|
|
179
|
+
**0.5 动笔前三问 + 苹果式精辟文案(每页一句话抓重点)**:每页先三问定 render——① 能否编辑式(图打底+文字浮)?② 有无可画物体/场景/产品 → 优先 text+image(图承载内容、积极 AI 生图)?③ 有无数据/对比 → 优先 HTML 图表(非表格/卡墙)?**文案=重点概括+必要补充、绝不搬全文**(苹果 MacBook Pro 详情页式:标题=一句精辟洞察一眼看懂,背景图/插图承载画面,图表承载数据,正文只做补充);`key_point` 按受众【术语深度档】精炼(高管→数字与决策先行、入门→类比开路)。
|
|
180
|
+
1. **archetype 版式原型** ∈ cover|section|split|cards|metric|fullbleed|list(见 layout-composition.md「0.6 内容预算」表)——**内容页编辑式默认走 split/fullbleed/section/list/metric(图打底 + 前景浮层);`cards` 已降为罕见例外、默认别选**(并列要点先用编辑式前景浮层或图表)。
|
|
181
|
+
2. **composition 空间构图法** ∈ 左右 | 左中右 | 上下 | 上中下 | 四宫格 | 中心辐射 | 全幅浮层(见 layout-composition.md「六种构图模式」+ 补充构图法)——
|
|
182
|
+
**同类页要换不同构图,避免页页一个样**。
|
|
183
|
+
3. **实质内容**:`key_point`(一句话核心论点)+ `evidence`(支撑事实/数据/机制 1–3 条,带信息时点);
|
|
184
|
+
`points` 是把它们浓缩到符合 archetype 预算的上屏文案草案(**每条承载具体主张/事实,禁空话填充**;短语或短句皆可)。
|
|
185
|
+
4. **每个内容块的 render 渲染决策** ∈ text(纯文字)| html+text(HTML元素[图表/指标面板/色块/图标/分隔]+文字)|
|
|
186
|
+
text+image(文字+AI插图)| html+text+image —— **编辑式优先(内容直接浮在背景上、别堆白底卡海)**:结构/对比/并列/数据 → html+text,**数据优先图表化(柱/曲线/进阶时间线/指标胶囊/对比列)而非表格/卡墙**;
|
|
187
|
+
真实画面/物体/场景 → text+image(图作背景或半幅 hero、文字浮前景)。
|
|
188
|
+
5. **每页 ≥1 视觉元素(铁律,区别于 Word)**:没 AI 配图的页也要有 SVG 图表 / 图标组 / 装饰几何 / 色块结构,增页面活力、
|
|
189
|
+
也让构图不空。纯文字 + 背景板的页不允许。
|
|
190
|
+
6. **放映级可读性 / 分布 / 对比(设计阶段就定好,别留给实现踩坑)**——在 design.md 逐页写明:
|
|
191
|
+
- **字号档**:各块按 layout-composition §0.85 放映级阶梯(≈1.5×:正文 ≥38px、注释 ~30px、图内文字同标准且图形画大装下;只有封面主标/章节大序号不放大)。
|
|
192
|
+
- **分布占满画布**:稀疏页(尤其 list/目录)选**满宽构图**(双列 或「文字+侧栏视觉」),别规划成挤左单列右半空。
|
|
193
|
+
- **全页文字对比**:每页文字与底色高对比——**浅底配深墨字、深底配白/浅字,绝不深底深字/浅底浅字**(VI 深色只用于封面/章节且文字转白);封面底图亮暗不可控,文字方案=深字+浅磨砂板 或 白字+足够暗 scrim(见 §1.B)。
|
|
194
|
+
- **文案精炼·说人话**:每条要点精炼归纳、用类比/例子讲透(近似但好懂优于堆砌精确),别规划成一页塞一堆长定义(后续必顶出/缩字)。
|
|
195
|
+
- **文字皆真实 DOM 文本**:规划时就别把可读文字设计进 `::before/::after`/烧进图(除 AI 插图自带字外),保证可隐藏可编辑。
|
|
196
|
+
- **可拖结构 = 离散 HTML 元素**:架构层/流程节点/决策树/一排圆/卡片矩阵规划成「每块一个 div」(导出递归切成各自可拖对象),别规划成整块 SVG(节点不可拆);SVG 只画连线/真矢量。
|
|
197
|
+
- **卡片填实 + 不溢出**:卡/底板按内容定尺寸别留大片空白;一列层块/节点别堆到高过画布(多就拆栏/拆页)。
|
|
198
|
+
|
|
199
|
+
## 三、配图意图 + 与文案呼应的生图提示词(治"提示词搬文案")
|
|
200
|
+
- **配图分流**:示意/图表/流程/架构/分层/树/决策树/时间线/关系/观点分块/分类对比 → 一律 HTML(route=html,不生 AI 图)。
|
|
201
|
+
AI 图(route=ai-A/ai-B)只给:封面/章节氛围大图、产品/物体外观/线条图/使用·安装演示、文字与 HTML 都画不清的画面。
|
|
202
|
+
- **AI 生图积极性 = `${inputs.image_intensity}`**(minimal/balanced/rich,控『多积极地选 AI 配图』;张数另受 illustrations 上限约束):
|
|
203
|
+
- **minimal**:几乎只封面/章节配氛围大图,正文页尽量 HTML/SVG。
|
|
204
|
+
- **balanced(默认)**:封面/章节氛围图 + **适当**给「真实画面/场景/物体/概念隐喻」的内容页配 A 路线半幅 AI 图(每这类内容点一张),别全靠 HTML 干巴巴。
|
|
205
|
+
- **rich**:更大方——凡能让画面更有冲击的「真实画面/场景/隐喻」内容页都可配 AI 图(封面/章节 + 更多内容页)。
|
|
206
|
+
⚠️ **任何档都守红线**:**结构图(架构/分层/流程/决策树/对比/时间线/关系)永远 HTML/SVG、绝不当 AI 图生**(image_plan_lint 会拦);积极性只放大「画面/氛围/物体/隐喻」类 AI 图的量,不碰结构图。
|
|
207
|
+
- ⚠️ **严禁把结构图伪装成"抽象背景"用 AI 生**:凡承载可命名结构(层级/步骤/分支/并轨/对比/架构/流程/树/拓扑/时间线)即便在
|
|
208
|
+
section/cover 页也 route=html。route=ai-* 的 prompt/note **只许写画面/光影/质感/物体/隐喻,不得出现** 架构/分层/流程图/
|
|
209
|
+
决策树/双轨/对比图 等结构名词(下游 image_plan_lint 会拦截违规并回退 HTML)。
|
|
210
|
+
- **生图提示词不是搬文案**:对每张 AI 图,先想"这一页 key_point 对应的**具体可画主体/场景/实物**是什么",再写**英文**提示词——
|
|
211
|
+
画出与文案呼应的具体对象(如「a circuit board close-up with labeled capacitors」而非「technology background」);
|
|
212
|
+
**配色解耦**:B 路线全幅底图跟所选 VI 色调走,**A 路线内容插图以画面真实色为准**(电路板=铜绿、产品=本色),只需与 VI 协调不冲突、别强染成 VI 单色致配图失真;
|
|
213
|
+
A 路线半幅图让主体填满画面(`subject fills the frame`、不要 airy)、仅 B 路线全幅封面在文字侧留低对比净空带;
|
|
214
|
+
**结尾必须含 `no text, no words, no letters, no captions, no logos`**。比例由槽位几何定(全幅16:9/左右半4:5/上下横幅21:9/卡片4:3或1:1)。
|
|
215
|
+
- **图表/HTML 配图配色(配色解耦)**:route=html 的图表(柱/饼/折线/进度环)与辅助解释图形**用可区分的数据系列分类色**
|
|
216
|
+
(见所选 VI 文档「数据可视化分类色」+ layout-composition §0.9),别全用 VI 主色一种致数据系列分不清;VI 只管背景/底板/chrome/主强调色。
|
|
217
|
+
|
|
218
|
+
## 四、背景变化意图(治"各页背景雷同")
|
|
219
|
+
读所选 VI 的 `references/vi-<name>.md`(尤其「页面级背景变化」一节),为每页写 `background` 意图——
|
|
220
|
+
**在同色系内做深浅/邻近色/光位变化**(如封面/章节页偏深或带 AI 氛围图、内容页冷白、相邻页换径向光位置或渐变角度),
|
|
221
|
+
**相邻页不要完全一样**;但不破坏色系一致(仍是同一 VI)。
|
|
222
|
+
|
|
223
|
+
## 五、产物(严格落这些路径)
|
|
224
|
+
1. 用 Write 写 `./build/design.md`(人读):逐页 `## 第N页 · <标题>` + archetype + composition + key_point + 要点 +
|
|
225
|
+
各块 render + 配图说明 + 背景意图,便于人复核。
|
|
226
|
+
2. 用 Write 写 `./build/design.json`(机读,**严格 JSON、无注释、无 ``` 包裹**):
|
|
227
|
+
- ⚠️ **必须写成紧凑单行 JSON:整份 `{...}` 一行写完,无缩进、无换行、键值间不留多余空格**——
|
|
228
|
+
大文档分行缩进会让一次 Write 的转义量翻倍、推理模型边想边写易写到一半截断(真机 doubao『Unterminated string』整步失败)。紧凑单行最稳。
|
|
229
|
+
- 字段精炼(key_point/points/evidence/note/prompt 都用短句,别灌长文);下面是**字段结构示例**(你产出时压成一整行,别照抄换行缩进):
|
|
230
|
+
`{"pages":[{"page":1,"archetype":"cover","composition":"中心辐射","title":"...","key_point":"...","evidence":["..."],"points":["..."],"blocks":[{"content":"...","render":"html+text"}],"visual":{"route":"ai-B","side":"full","note":"<画什么,中文,扣紧 key_point>","aspect":"16:9","prompt":"<与文案呼应的英文提示词,含 no text 尾巴>"},"background":"<本页背景变化意图>"}]}`
|
|
231
|
+
- `page` 从 1 连续编号(**供分批页数闸门 deck_pages_check 比对,必填**)。
|
|
232
|
+
- `archetype` ∈ cover|section|split|cards|metric|fullbleed|list;`composition` ∈ 左右|左中右|上下|上中下|四宫格|中心辐射|全幅浮层。
|
|
233
|
+
- `route` ∈ html|ai-A|ai-B|none;`side` ∈ left|right|top|bottom|full|none;`render` ∈ text|html+text|text+image|html+text+image。
|
|
234
|
+
- `key_point` 每页必填;`evidence` 内容页必填、封面/章节页可 [];route=ai-* 才需 visual.prompt。
|
|
235
|
+
3. 用 Write 写 `./build/img_plan.json`(机读,配图计划):**条数 = route=ai-A/ai-B 的页数**
|
|
236
|
+
(`illustrations=${inputs.illustrations}`:-1=由内容定、0=不写此文件、N>0=不超 N),每条
|
|
237
|
+
`{"file":"img_K.png","aspect":"<由槽位定>","prompt":"<= 对应页 visual.prompt>"}`,K 从 1 连续编号。
|
|
238
|
+
(确无任何页需 AI 图——纯示意主题或 illustrations=0——则不写此文件。)
|
|
239
|
+
|
|
240
|
+
完成后简述:共几页、是否含综述+总结页、各页 archetype+composition、其中几页 route=ai-A/ai-B、img_plan.json 几条。
|
|
241
|
+
allowed_tools: [Read, Write, Glob]
|
|
242
|
+
maxTurns: 20
|
|
243
|
+
capture: design_notes
|
|
244
|
+
done_when: "fileExists('./build/design.md') && fileExists('./build/design.json')"
|
|
245
|
+
onError: halt
|
|
246
|
+
# 重活步(读长 draft+layout+vi、出 16 页 JSON)拥塞下首字节延迟易撞空闲超时 → 给 2 次 in-run 重试吸收瞬态拥塞。
|
|
247
|
+
max_retries: 2
|
|
248
|
+
|
|
249
|
+
# ---------- 阶段4:对抗评审设计文档(回顾原始需求,挑刺并修订定稿;全自动、无人工打断) ----------
|
|
250
|
+
# 设计文档定稿前的质量闸门:换一个挑剔的评审视角,对照用户**原始需求**逐条审 design.json/md,
|
|
251
|
+
# 当场修订到位。不引入人工 pause(webppt 定位=一句话自动产出);不重跑研究,只打磨设计文档。
|
|
252
|
+
- id: stage_design_review
|
|
253
|
+
title: "阶段4/11·对抗评审设计文档(挑刺并修订定稿)"
|
|
254
|
+
when: "fileExists('./build/design.json')"
|
|
255
|
+
agent: |
|
|
256
|
+
你是一名挑剔的**设计评审 + 内容总监**,对刚产出的 Web 页面设计文档做**对抗式审查并当场修订定稿**。
|
|
257
|
+
先 Read `./build/design.md` 与 `./build/design.json`,再 Read `./build/draft.md` 与上文📌用户原始需求/补充要求。
|
|
258
|
+
|
|
259
|
+
## 第一遍:对照用户原始需求挑刺(列出缺陷清单)
|
|
260
|
+
逐条质问(默认从严,挑得出就是有问题):
|
|
261
|
+
1. **覆盖度**:是否回应了用户原始需求「${inputs.topic}」的每个要点?有没有漏讲、跑偏、答非所问?
|
|
262
|
+
2. **深度**:每页 key_point 是真实质判断还是泛标签?evidence 是否落到具体事实/数据/机制?有没有"正确的废话"?
|
|
263
|
+
3. **构图多样性**:composition 是否雷同(页页左右分栏 / 页页四宫格)?同类页有没有换构图?
|
|
264
|
+
4. **视觉活力**:是否**每页都有 ≥1 视觉元素**(AI图/SVG/图标/图表/装饰几何)?有没有纯文字+背景板的"Word 页"?
|
|
265
|
+
5. **配图质量 + 配色解耦**:route 分流对不对(结构图误塞 AI?)?visual.prompt 是否与文案呼应、画的是具体主体(不是"抽象科技背景")?
|
|
266
|
+
**图表数据系列是否用可区分分类色(别全是 VI 主色一种致柱/饼/折线分不清数据)?非背景插图/辅助图形是否被染成单一 VI 色(应以内容色为准、与 VI 协调)?**
|
|
267
|
+
6. **背景变化**:各页 background 是否有同色系深浅/光位变化?是否页页雷同?
|
|
268
|
+
7. **分页节奏 + 稀疏页配额**:有没有综述页 + 总结页?有没有一页塞太多?
|
|
269
|
+
**「一句话/极少文字占一页」的稀疏页(封面/章节分隔/金句页)不再一律禁止,但要守两条硬规:**
|
|
270
|
+
① **数量 ≤ 全 deck 页数的 20%**(如 16 页最多 ~3 张这种页)——超额就把多出的合并进相邻页或补足实质内容;
|
|
271
|
+
② **每张这类页必须配 AI 氛围图,或用渐变色 / 半透明色底图**(`background` 写明),避免页面过于简陋空洞——
|
|
272
|
+
裸白 + 一句话的稀疏页不允许。其余正文页仍要按内容预算填实(标题 + 4–6 条有实质要点 + 一处主视觉)。
|
|
273
|
+
8. **字号可读性(放映级,≈1.5×)**:正文/卡片正文是否够大可读(deck 别用网页 16px、**正文 ≥38px 量级**、屏上别低于 24px)?
|
|
274
|
+
图表/框图内文字(坐标轴/图例/节点名)是否达标、图形是否够大装下不挤不裁?有无非主标元素字号 ≥ 该页主标题(不允许)?只有封面主标/章节大序号维持现状,其余各级是否都按 ≈1.5× 放大?
|
|
275
|
+
9. **封面/章节对比度**:封面/章节页文字在氛围底图(尤其浅色底图)上对比是否达标?是否用了「深字+浅色磨砂板」或「白字+足够暗 scrim/板」(见 §1.B),而非浅底白字靠弱 scrim(必糊)?
|
|
276
|
+
10. **文字皆真实 DOM 文本**:有无把可读文字写进 CSS `::before/::after content`、或烧进背景图/HTML 图元(会被截图夹带、不可编辑、可能双层)?除 AI 插图自带画面字外,文字一律真实 DOM 文本节点。
|
|
277
|
+
11. **稀疏页占满画布**:list/目录等页是否塞进窄单列、右半大片空白?应满宽双列或「文字+侧栏视觉」两栏互补。
|
|
278
|
+
12. **可拖结构离散化 + 卡片填实 + 不溢出**:架构层/流程节点/决策树/一排圆/卡片矩阵是否规划成离散 HTML 元素(每块一 div、可递归切成各自可拖对象),而非整块 SVG(节点不可拆)?卡片/底板是否填实(无大白卡装一句话/图元挤一角留白)?一列层块/节点是否未堆到高过画布?
|
|
279
|
+
13. **对比度 + 文案精炼**:每页文字与底色是否高对比(绝无深底深字/浅底浅字;深底必白字)?文案是否精炼、说人话(类比/例子讲透、近似但好懂),有没有一页硬塞长定义(会顶出/缩字)?不达标当场改 design:深底转白字 + 文案精炼/拆点/长列表两列。
|
|
280
|
+
|
|
281
|
+
## 第二遍:逐条修订(design.md 用 Edit;design.json 用整体 Write 重写)
|
|
282
|
+
把上面挑出的每个缺陷**直接改好**——补实质内容、换构图、给纯文字页加视觉元素、修配图提示词、调背景变化、调分页。
|
|
283
|
+
- **design.json 是紧凑单行 JSON**:别用 Edit 去改那一长行(极易匹配错/改坏),**直接用 Write 把整份修订后的 design.json 重写一遍**
|
|
284
|
+
(仍是**紧凑单行、严格 JSON、字段完整** page/archetype/composition/visual/background;字段精炼)。
|
|
285
|
+
- design.md(人读 markdown)可照常用 Edit 局部修。
|
|
286
|
+
若同时有 img_plan.json,相应同步(提示词随 visual.prompt 改)。
|
|
287
|
+
|
|
288
|
+
**重要**:本步是设计文档层的打磨,**不写 deck.html、不生图**。修订到你作为评审"能签字放行"为止。
|
|
289
|
+
完成后报告:挑出并修复了哪些缺陷、最终共几页、构图法分布、每页是否都有视觉元素。
|
|
290
|
+
allowed_tools: [Read, Edit, Write, Glob]
|
|
291
|
+
maxTurns: 24
|
|
292
|
+
onError: continue
|
|
293
|
+
max_retries: 1
|
|
294
|
+
|
|
295
|
+
# ---------- 阶段5:按设计文档分批生成 HTML deck(每轮 ≤5 页,确定性页数闸门收口,防大 deck 烂尾) ----------
|
|
296
|
+
# 治"50 页 deck 单步一次写完撞 maxTurns、做了 5 页就停":while 循环,每轮 agent 只生成"还没做的下一批 ≤5 页",
|
|
297
|
+
# 跑 deck_pages_check.py(确定性数 section vs design 页数)→ COMPLETE 则 break。fresh_context 每轮重置 history 防膨胀
|
|
298
|
+
# (design.json/deck.html 在磁盘,每轮 Read 即可,不靠 history 记忆);loop 级断点支持中断续跑。
|
|
299
|
+
- id: stage_build_loop
|
|
300
|
+
title: "阶段5/11·分批生成网页(每轮≤5页·页数闸门收口)"
|
|
301
|
+
when: "fileExists('./build/design.json')"
|
|
302
|
+
type: loop
|
|
303
|
+
max_iterations: 15
|
|
304
|
+
fresh_context: true
|
|
305
|
+
do:
|
|
306
|
+
- id: build_batch
|
|
307
|
+
title: "阶段5/11·生成下一批页面"
|
|
308
|
+
agent: |
|
|
309
|
+
按设计文档**分批**生成 1920x1080 的 HTML deck(单文件 `./build/deck.html`、自包含 CSS)。
|
|
310
|
+
**本轮只做一批(最多 5 页),做完即止**——大 deck 一次写完会撞轮数上限、半途烂尾,分批是为了稳。
|
|
311
|
+
|
|
312
|
+
动手前从系统提示「可用技能」里 ui-design 的【技能目录】Read `references/layout-composition.md`
|
|
313
|
+
(grid 结构化构图 + 三层语义化 HTML + 构图均衡),严格照其执行。
|
|
314
|
+
|
|
315
|
+
## 本轮步骤
|
|
316
|
+
1. **先查进度**(确定性):用 Bash 跑 `python <ui-design 目录>/scripts/deck_pages_check.py ./build`。
|
|
317
|
+
- 它读 `./build/design.json` 的页数 + 数 `./build/deck.html` 已有 `<section class="slide">`,输出 `COMPLETE: …` 或 `MISSING: 6,7,8…`。
|
|
318
|
+
- 若输出 **COMPLETE**:deck 已齐,本轮无需生成。**在你回复的最后单独一行打印 `WEBPPT_BUILD_COMPLETE`**,然后结束。
|
|
319
|
+
2. **若 MISSING**:Read `./build/design.json` 拿到**缺页**(MISSING 列出的页号)的设计(archetype/composition/blocks.render/key_point/points/visual/background);
|
|
320
|
+
Read `./build/deck.html`(若已存在)了解已有结构与**全局 CSS / VI 视觉系统**(保持一致)。
|
|
321
|
+
3. **生成缺页里的下一批(最多 5 页)**,每页一个 `<section class="slide" data-screen-label="NN ...">`(NN=该页 page 号两位数、含中文标题),
|
|
322
|
+
按设计实现:
|
|
323
|
+
- **deck 纵向流式(人可滚动审阅,像 PPT 导出的 PDF)**:`.slide` 容器用 **`position:relative`、每页 1920×1080 自上而下排开**
|
|
324
|
+
(body 深色衬底分隔每页,见 §0.7 骨架)——**绝不把各页 `position:absolute` 叠在同一位置**(那样直接打开 deck.html 所有页会糊成一团、没法审阅)。
|
|
325
|
+
导出器导出时会逐页隐藏其余页、把当前页钉回视口截图,**流式布局不影响导出/构图门几何**(仍按真实 1920×1080、零偏移)。
|
|
326
|
+
- **页内 grid 结构化构图**(按 composition:左右/左中右/上下/上中下/四宫格/中心辐射…用 `display:grid` + 模板,**页内别绝对定位**;
|
|
327
|
+
`position:absolute` 只许页**内部**的 B 路线全幅底图 + 浮层文字)。
|
|
328
|
+
- **三层语义化**:卡片用带底色/边框的 div、文字用 h*/p/span、图用 img/svg——导出器自动分层,正常写语义 HTML 即可
|
|
329
|
+
(标注仅作 override:`data-pptx-layer="foreground"` 强制成块 / `data-pptx-export="ignore"` 保留烧底图)。
|
|
330
|
+
- **每页 ≥1 视觉元素**:没 AI 图的页放 SVG 图表/图标组/装饰几何/色块结构(按 design 的 render 决策),别只有文字+背景板。
|
|
331
|
+
- **字号阶梯(放映级,≈1.5×,治正文太小)**:正文/卡片正文 **≥38px**;小标题/卡标 ~44–52px、副标/引言 ~40–46px、注释/角标 ~28–32px、药丸/图例/图内标签 ~26–28px(**屏上别低于 24px 导出下限**);
|
|
332
|
+
小标题/副标按构图比例介于正文与该页主标之间、**绝不 ≥ 主标**;**只有封面主标(~88–120px)/章节大序号(~150–180px)维持现状不缩**,内容页主标 ~72–88px。
|
|
333
|
+
图表/框图/图标**内部文字**同样达放映级下限,**图形相应画大以装下、不挤不裁**(见 layout-composition §0.85;导出端 layout_balance 会对屏上 <24px 报【字号过小】WARNING)。
|
|
334
|
+
- **所有可读文字必须是真实 DOM 文本节点**(h*/p/span/SVG `<text>`)——**严禁**把可读文字写进 CSS `::before/::after content`、**严禁**把文字烧进背景图/HTML 图元/SVG `<path>`(否则被截图夹带、不可编辑、还会与还原文本双层)。唯一例外=AI 插图画面自带字。(导出端 layout_balance 有【截图夹带文本】ERROR 兜底。)
|
|
335
|
+
- **list/目录等稀疏页占满整宽**:用「文字主栏 + 侧栏视觉」两栏,或多条等价项直接双列铺满(`grid-template-columns:1fr 1fr`),**绝不**塞进 max-width 受限的窄单列任右半空(见 §0.7)。
|
|
336
|
+
- **可拖结构用离散 HTML 元素搭、别画整块 SVG**:架构层/流程节点/决策树/一排圆/卡片矩阵——**每个层/节点/圆/卡是独立 `<div>`**(自带底色边框、grid/flex 排),导出会**递归切成各自可拖对象**;SVG 只画连线/箭头/真矢量(连线作底层)。整块 SVG 画的结构图节点不可拆(矢量整张)。
|
|
337
|
+
- **卡片/选项卡内部填实 + 不溢出画布**:别做「大白卡装一句话 + 大片留白」(按内容定卡尺寸/减 padding/放大内部图元铺满);一列层块/节点别堆到高过 1080(内容多就拆两栏/拆页)。导出端有【卡片/分组填充不足】【超出画布】WARNING。
|
|
338
|
+
- **文字对比度铁律(治深底黑字看不清)**:浅底(VI 浅紫/白)配**深墨字 `var(--ink)`**;深底(封面/章节/深色卡)配**白/浅字**;**绝不深底深字、浅底浅字**。任何页/卡用了深底,其文字必须随之转白。导出端【文字对比度不足】会 WARNING 提示(导出步顺手改)——**靠这里写对最省事**,别留给后面修。
|
|
339
|
+
- **文案精炼·说人话(治内容顶出/字太小)**:上屏文案精炼归纳、用类比/例子把概念讲透(如「全景相机」=「多镜头拼谷歌街景那种可转视角画面」、「π」=「约 3.14~3.15」),近似但好懂优于堆砌精确;**别把长定义硬塞一页**。
|
|
340
|
+
- **排不下时的自救顺序(绝不缩字到 <24px、绝不顶出画布)**:① **精炼文案 + 图文并茂**(流程/对比/层级/数据用 HTML 图表/SVG/图标/卡片表达,一图省一段话)→ ② 一列条目多就改 **grid 两列**(`grid-template-columns:1fr 1fr`)→ ③ 仍排不下就**拆成两页**(新增一个 `<section class="slide">`、同一主题分上下篇,别死磕一页)。导出端【超出画布】【字号过小】WARNING 触发时按此序处理。
|
|
341
|
+
- **配色解耦(治一片单色)**:只有背景/页面底板/chrome 用 VI;**图表数据系列用可区分分类色**(见所选 VI 文档「数据可视化分类色」)、非背景插图用画面真实色、辅助解释图形用语义色,都与 VI 协调不冲突(见 §0.9)。
|
|
342
|
+
- **背景按 design 的 background 意图**做同色系深浅/光位变化,相邻页不雷同。
|
|
343
|
+
- **配图**:route=ai-* 的页按 design 在槽位放 `<img src="assets/img_K.png">`(A 路线,外层 div 占满单元、object-fit:cover)
|
|
344
|
+
或 section `background-image:url("assets/img_K.png")` + scrim(B 路线全幅)。图现在还不存在(后续生成),照常引用。
|
|
345
|
+
- **封面标题铁律**:主标 ≤12 字保持一行,主标与副标分属不同 grid 行留足行距(防 Office 重折行压副标题)。
|
|
346
|
+
- **封面/章节文字对比度铁律(治浅底图白字看不清)**:氛围底图亮暗不可控(浅色模板 AI 底图常偏亮),**别默认白字靠弱 scrim**。浅色模板首选 **① 深字(`var(--ink)`) + 浅色磨砂文字板**(`background:rgba(255,255,255,.55);backdrop-filter:blur(6px)`);要白字则 **② scrim/板压到足够暗(不透明度 ≥ .72)**(见 §1.B 两套 CSS)。
|
|
347
|
+
4. **写入 `./build/deck.html`**:首轮若文件不存在 → 新建含 `<head>` + 全局 CSS(§0.7 流式骨架:`body` 深色衬底 + `.slide{position:relative;width:1920px;height:1080px;margin:0 auto 40px}` 纵向排开 + VI 视觉系统 + `[hidden]{display:none!important}`)+ 本批 section;
|
|
348
|
+
后续轮 → 用 Edit 把本批 `<section>` 追加进 `</body>` 前(保持单文件自包含、CSS 不重复定义)。
|
|
349
|
+
5. **deck 卫生**:不要加 Tweaks/localStorage/postMessage/fitStage/翻页 nav/React/Babel(对导出无用、只干扰)。
|
|
350
|
+
6. 做完本批后**再跑一次 deck_pages_check.py ./build**:若此时 COMPLETE,回复最后一行打印 `WEBPPT_BUILD_COMPLETE`;
|
|
351
|
+
否则打印 `WEBPPT_BUILD_MORE`(引擎据此进入下一轮继续生成缺页)。
|
|
352
|
+
|
|
353
|
+
完成后简述:本轮生成了哪几页、deck.html 现共几页、是否 COMPLETE。
|
|
354
|
+
allowed_tools: [Read, Write, Edit, Bash, Glob]
|
|
355
|
+
maxTurns: 40
|
|
356
|
+
capture: build_status
|
|
357
|
+
onError: halt
|
|
358
|
+
max_retries: 1
|
|
359
|
+
- id: build_done
|
|
360
|
+
type: break
|
|
361
|
+
when: "includes(build_status, 'WEBPPT_BUILD_COMPLETE')"
|
|
362
|
+
|
|
363
|
+
# ---------- 阶段6:配图分流闸门(结构图必须 HTML,不准当 AI 图生) ----------
|
|
364
|
+
# 与 stage_design_doc 的配图分流同构的确定性兜底:image_plan_lint.py 扫 img_plan.json 的 prompt + design.json
|
|
365
|
+
# 的 visual.note,命中结构名词即回退 HTML/SVG 并从 img_plan 删该条。置于生图前,省下无效生图。
|
|
366
|
+
- id: stage_img_route_gate
|
|
367
|
+
title: "阶段6/11·配图分流闸门(结构图回退 HTML)"
|
|
368
|
+
when: "fileExists('./build/img_plan.json')"
|
|
369
|
+
agent: |
|
|
370
|
+
确保没有"本该 HTML/SVG 的结构图"被当 AI 图生。结构图(流程/架构/分层/树/决策树/并轨/对比/关系/时间线)
|
|
371
|
+
AI 画必糊、必错、无文字、不可编辑;HTML/SVG 才精确、可编辑、零成本。用 Bash 按序执行:
|
|
372
|
+
1. 跑确定性 lint(脚本在系统提示「可用技能」里 ui-design 的【技能目录】下;--outline 参数直接吃 design.json):
|
|
373
|
+
`python <ui-design 目录>/scripts/image_plan_lint.py ./build/img_plan.json --outline ./build/design.json -v`
|
|
374
|
+
它会逐条列出违规(命中 架构/分层/流程/决策树/并轨/对比… 等图表名词的 prompt/note)。
|
|
375
|
+
2. **只要列出违规**:对每条——用 Edit 在 `./build/deck.html` 里把该页那个结构**改用 HTML/SVG 画**
|
|
376
|
+
(流程/架构/分层/树/并轨/对比 用 div+CSS Grid 或 `<svg>`;离散视觉块导出器自动切层),
|
|
377
|
+
并从 `./build/img_plan.json` **删掉该条**;若该页本就需要氛围底图,可保留为**纯氛围 AI 图**(去掉 prompt/note 里的结构名词)。
|
|
378
|
+
改完**重跑第 1 步的 lint**,直到它打印 PASSED。
|
|
379
|
+
3. **lint PASSED 后**才 `touch ./build/img_route_ok`(没过别建这个哨兵)。
|
|
380
|
+
完成后报告:lint 是否 PASSED、回退了哪几页到 HTML、img_plan.json 现剩几条。
|
|
381
|
+
allowed_tools: [Bash, Read, Edit, Write, Glob]
|
|
382
|
+
maxTurns: 30
|
|
383
|
+
done_when: "fileExists('./build/img_route_ok')"
|
|
384
|
+
onError: halt
|
|
385
|
+
max_retries: 1
|
|
386
|
+
|
|
387
|
+
# ---------- 阶段7:按 img_plan.json 生成插图(ai-image 的 generate.mjs,按比例生成) ----------
|
|
388
|
+
# 分层/时序不变量:AI 图必须在本阶段全部落盘、**先于阶段8构图闸门**——闸门 --measure-only 渲染真实 deck.html
|
|
389
|
+
# 量的是「含图成品」。两类 AI 图各归各层(export_pptx_from_html.mjs::tagLayers 的 isFullBleed 分流):
|
|
390
|
+
# B 路线全幅底图 → 背景层整页截图;A 路线半幅插图 → 中层逐元素切图(独立可编辑图片)。
|
|
391
|
+
- id: stage_gen_images
|
|
392
|
+
title: "阶段7/11·生成插图(按比例)"
|
|
393
|
+
when: "fileExists('./build/img_plan.json')"
|
|
394
|
+
agent: |
|
|
395
|
+
为 deck 生成 AI 插图,落到 `./build/assets/`。用 ai-image 技能的 generate.mjs 脚本。
|
|
396
|
+
1. 用 Read 读 `./build/img_plan.json`:一个数组,每条 `{file, aspect, prompt}`。
|
|
397
|
+
2. 取 generate.mjs 的绝对路径:系统提示「可用技能」里 ai-image 后给出的【技能目录】+ `/scripts/generate.mjs`。
|
|
398
|
+
3. 对**每一条**,用 Bash 跑(**node 不是 bun**;prompt 整体加双引号):
|
|
399
|
+
`node "<ai-image 目录>/scripts/generate.mjs" --prompt "<该条 prompt>" --out ./build/assets/<该条 file> --aspect <该条 aspect> --size 1K`
|
|
400
|
+
(`--size 1K` 够用:PPT 由导出端栅格化,deck 1920×1080,1K 清晰度完全够,2K 纯浪费。)
|
|
401
|
+
**调 Bash 时务必把 `timeout` 参数设为 `600000`(10 分钟)**:图像模型很慢(一张常要 1 分钟甚至更久),
|
|
402
|
+
Bash 默认 120s 会把没出图的进程掐断当超时。脚本成功打一行 `saved: ...`;过程往 stderr 打 `[ai-image] attempt …` 进度。
|
|
403
|
+
**逐张等其返回再发下一张**。
|
|
404
|
+
4. 全部生成后用 Glob 或 `ls ./build/assets/` 复核每个 file 都已落盘。
|
|
405
|
+
若某张失败,如实报告哪几张没成(不要伪造、不要把报错文本当提示词再发)。
|
|
406
|
+
allowed_tools: [Read, Bash, Glob]
|
|
407
|
+
maxTurns: 20
|
|
408
|
+
done_when: "fileExists('./build/assets/img_1.png')"
|
|
409
|
+
onError: continue
|
|
410
|
+
max_retries: 1
|
|
411
|
+
|
|
412
|
+
# ---------- 阶段8:构图均衡闸门(HTML 层廉价循环)→ 导出 hybrid PPTX 一次 + OPC 校验 ----------
|
|
413
|
+
# 单一真相源 = ui-design。构图闸门(2026-06-19):**ERROR=重叠 + 截图夹带文本 + 整页空;WARNING=溢出 + 字号过小 + 占空(加回但宽松)**;
|
|
414
|
+
# 修重叠 移动>精炼>缩字(≤20%);夹带文本=改真实 DOM 文本;**每页最多修 3 次、第 3 次后必放行**(防反复改烧配额)。
|
|
415
|
+
- id: stage_export
|
|
416
|
+
title: "阶段8/11·导出 PPTX + 构图闸门(重叠/夹带文本必清零·每页≤3次)"
|
|
417
|
+
agent: |
|
|
418
|
+
把 `./build/deck.html` 导出为可编辑 PPTX,通过 OPC 合规 + 构图均衡两道校验。**只用绝对路径调脚本**——
|
|
419
|
+
从系统提示「可用技能」拿 `ui-design` 的【技能目录】(check_ui_artifact / export_pptx_from_html / layout_balance / deck_pages_check 都在这),
|
|
420
|
+
以及 `pptx` 的【技能目录】(**只用其中的 opc_check.py**)。
|
|
421
|
+
⚠️ 本工作流 PPT **全部由 ui-design 的 HTML 三层导出产出**;**不要**用 pptx 技能的 PptxGenJS / addShape / SVG 原生生成路径。
|
|
422
|
+
|
|
423
|
+
步骤(用 Bash 按序执行):
|
|
424
|
+
1. **页数兜底**:`python <ui-design 目录>/scripts/deck_pages_check.py ./build` 确认 COMPLETE;
|
|
425
|
+
若 MISSING(分批 loop 撞上限没做完),按 design.json 用 Edit 补齐缺页再继续。
|
|
426
|
+
2. 产物自检(**分层已自动,标注可选**):`python <ui-design 目录>/scripts/check_ui_artifact.py --for-pptx-export ./build/deck.html`
|
|
427
|
+
看有无阻断问题;分层由导出器 tagLayers 自动完成,「未标 foreground/text」提示属预期可忽略。
|
|
428
|
+
3. 确认 img_plan.json 里每个 `assets/img_K.png` 都已存在(Glob / `ls ./build/assets/`);缺图则在 deck.html 换占位或去掉,避免空图。
|
|
429
|
+
4. **构图均衡闸门(HTML 层、廉价循环——必须先过这关,再导出 pptx)**:
|
|
430
|
+
**用 Node(不是 Bun)** 跑 measure-only:
|
|
431
|
+
`node <ui-design 目录>/scripts/export_pptx_from_html.mjs ./build/deck.html --measure-only --mode hybrid --width 1920 --height 1080 --workdir ./build/export`
|
|
432
|
+
它秒级量三层几何,写 `./build/export/layout-report.json`(不截图/切图/打包)。
|
|
433
|
+
然后判:`python <ui-design 目录>/scripts/layout_balance.py ./build/export/layout-report.json -v`
|
|
434
|
+
构图门判定:**ERROR(必清零)= 内容相互叠加(重叠)+ 截图夹带文本(底图/切图带 HTML/SVG/伪元素文字,必不可有)+ 整页啥也没有**;
|
|
435
|
+
**WARNING(提示不拦)= 文本溢出/裁切 + 字号过小(屏上 <24px)+ 超出画布 + 文字对比度不足(深底深字等)+ 占空比族(已加回但宽松、有视觉即降级)**。每条带归一化坐标。
|
|
436
|
+
🚫 **改 deck.html 只准用 Edit(先 Read 取最新内容再 Edit;deck.html 较大、不会自动注入,必须先 Read)。绝对禁止用 Bash 的 `sed`/`awk`/`findstr`/`type`/PowerShell 等替换 HTML 文本**——
|
|
437
|
+
会**编码损坏(UTF-8↔GBK 乱码)+ mtime 漂移致 Edit 失败 → 整步空手放弃 halt**(真实事故)。Bash 只用来跑 python/node 脚本,不碰 HTML 文本。
|
|
438
|
+
- **截图夹带文本(ERROR)**:用 Edit 把该文字改成真实 DOM 文本节点(别放 `::before/::after`、别烧进背景图/图元)——唯一例外是 AI 插图自带画面字。
|
|
439
|
+
- **文字对比度不足(WARNING 但要顺手改)**:用 Edit 改 `<style>` 里的 CSS 变量或该页 class 的 `color`——深底转白/浅字、浅底转深墨字(绝不深底深字)。只改颜色几行、别动结构。
|
|
440
|
+
- **超出画布 / 字号过小(WARNING 但要改,别放任顶出/蚂蚁字)**:按 ① 精炼文案 → ② 长列表改 grid 两列 → ③ 拆页 的顺序处理;**绝不把字缩到 <24px**。
|
|
441
|
+
- **占空 WARNING**:可据「右/下半空」提示去满画布(双列/侧栏视觉),但别为"够不够满"反复改烧配额。
|
|
442
|
+
**只要还有 ERROR(重叠/截图夹带文本),就用 Edit 修 ./build/deck.html,重跑 measure-only + layout_balance**,直到 PASSED(WARNING 不阻塞导出,但对比度/超画布/字号过小要顺手改掉)。
|
|
443
|
+
⚠️ **闸门 PASSED 前绝不导出 pptx**——measure-only 秒级,反复全量导出 pptx 才是浪费。
|
|
444
|
+
🛑 **每页修改配额 + 绝不空手放弃(防反复改烧配额 / 防整步 halt——真实事故)**:对每个被判 ERROR 的页**最多修 3 次**(Edit + 重跑 measure-only);
|
|
445
|
+
**第 3 次修改后无条件 `touch ./build/layout_ok` 继续导出**;**即便某些问题始终修不动,也必须 `touch layout_ok` 并完成导出 pptx——产出带残留问题的 pptx 远好过空手 halt**,报告里如实列出残留页。
|
|
446
|
+
修的手段(对照 layout-composition.md):
|
|
447
|
+
- **内容相互叠加(重叠)**:**① 先移动/重排躲开**(拉开间距·换槽位·调 grid·放大图形给标签让位)→ **② 精炼/精简该段文案使其更短** → **③ 缩小字体(单次最多 20%、仍 < 该页主标题)** → ④ 拆页/减项。**别一上来狂缩字**(字号已按阶梯放大、要保住)。
|
|
448
|
+
- 图被挤压:**绝不变形**——`object-position` 按热区裁切、或改槽位尺寸按新 aspect,别改 `<img>` 宽高比。
|
|
449
|
+
**复用已生成的同批插图**,重排版不重新生图。
|
|
450
|
+
5. **闸门 PASSED(或每页 3 次配额放行后)**:`touch ./build/layout_ok`。
|
|
451
|
+
6. **导出一次 pptx**:
|
|
452
|
+
`node <ui-design 目录>/scripts/export_pptx_from_html.mjs ./build/deck.html --out ${inputs.out} --mode ${inputs.mode} --width 1920 --height 1080 --workdir ./build/export`
|
|
453
|
+
7. OPC 校验:`python <pptx 目录>/scripts/opc_check.py ${inputs.out}` 确认通过;不通过按 `--repack ${inputs.out}.tmp` + `mv -f` 修回再校。
|
|
454
|
+
**最终输出目录只留 ${inputs.out} 一个 pptx**,带 `fixed`/`.tmp` 的中间 pptx 一律 `rm -f`。
|
|
455
|
+
8. 视觉复核(best-effort):有 `soffice` 就 `soffice --headless --convert-to pdf --outdir ./build/export ${inputs.out}` 转图看几页;没有就跳过。
|
|
456
|
+
|
|
457
|
+
完成后报告:输出路径、模式、页数、可编辑性、OPC 结果、**layout_balance 最终是否 PASSED(或每页 3 次配额放行后仍残留哪几页)**。
|
|
458
|
+
allowed_tools: [Bash, Read, Edit, Glob, Grep]
|
|
459
|
+
# 闸门只查重叠+溢出 + 每页≤3次配额放行(重叠不可妥协),轮数便宜但给足 200——宁可配额放行也别撞顶 halt。
|
|
460
|
+
maxTurns: 200
|
|
461
|
+
done_when: "fileExists(inputs.out) && fileExists('./build/layout_ok')"
|
|
462
|
+
onError: halt
|
|
463
|
+
max_retries: 1
|
|
464
|
+
|
|
465
|
+
# ---------- 守门 verify ----------
|
|
466
|
+
- id: verify_output
|
|
467
|
+
title: "阶段9/11·守门校验"
|
|
468
|
+
type: verify
|
|
469
|
+
checks:
|
|
470
|
+
- "file_exists:${inputs.out}"
|
|
471
|
+
onFail: "PPTX 未生成(${inputs.out} 不存在),请检查导出日志。"
|
|
472
|
+
|
|
473
|
+
# ---------- 阶段10:清理中间产物(确认最终 PPT 存在后,只留它) ----------
|
|
474
|
+
- id: cleanup_intermediates
|
|
475
|
+
title: "阶段10/11·清理中间产物(只留最终 PPT)"
|
|
476
|
+
when: "fileExists(inputs.out)"
|
|
477
|
+
tool: Bash
|
|
478
|
+
args:
|
|
479
|
+
command: "rm -rf ./build"
|
|
480
|
+
onError: continue
|
|
481
|
+
|
|
482
|
+
# ---------- 完成报告(echo,确定性、零 LLM 复述) ----------
|
|
483
|
+
- id: final_report
|
|
484
|
+
title: "阶段11/11·完成报告"
|
|
485
|
+
type: echo
|
|
486
|
+
message: |
|
|
487
|
+
✅ PPT 生成完成(webppt·网页设计驱动)。
|
|
488
|
+
|
|
489
|
+
- 主题:${inputs.topic}
|
|
490
|
+
- 最终产物(**唯一保留**):${inputs.out}(页数由设计文档按内容/章节自动确定;模式 ${inputs.mode})
|
|
491
|
+
- 流程:研究成稿 → 详细 Web 页面设计文档 → 对抗评审定稿 → 分批生成网页(页数闸门收口)→ 配图分流 → 生图 → 放宽构图门 → 三层导出。
|
|
492
|
+
- 可编辑性:hybrid 三层=背景整页截图垫底(不可编辑),前景每个离散元素(卡片/色块/图标/SVG/插图)为独立可编辑图片对象,
|
|
493
|
+
文本为 PPT 原生可编辑文本框;全幅氛围背景图(B 路线)连同遮罩留背景层;flat=全图不可编辑。
|
|
494
|
+
- 中间产物(draft.md / design.md+json / deck.html / 插图 / 三层切图)已在收尾清理——只保留最终 PPT。
|
|
495
|
+
|
|
496
|
+
用 PowerPoint / WPS 打开 ${inputs.out} 核验。
|