minimal-agent 0.9.0 → 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.
Files changed (467) hide show
  1. package/README.md +11 -8
  2. package/package.json +34 -1
  3. package/plugins/cron-runner/.claude-plugin/plugin.json +5 -0
  4. package/plugins/cron-runner/commands/cron.md +26 -0
  5. package/plugins/cron-runner/commands/crons.md +7 -0
  6. package/plugins/cron-runner/plugin.js +34 -0
  7. package/plugins/cron-runner/src/commands.js +348 -0
  8. package/plugins/cron-runner/src/cronTime.js +148 -0
  9. package/plugins/cron-runner/src/lock.js +68 -0
  10. package/plugins/cron-runner/src/runs.js +89 -0
  11. package/plugins/cron-runner/src/scheduleEngine.js +72 -0
  12. package/plugins/cron-runner/src/scheduler.js +355 -0
  13. package/plugins/cron-runner/src/schema.js +140 -0
  14. package/plugins/cron-runner/src/service.js +167 -0
  15. package/plugins/cron-runner/src/store.js +298 -0
  16. package/plugins/cron-runner/src/types.js +1 -0
  17. package/plugins/workflow-runner/commands/workflow.md +4 -4
  18. package/plugins/workflow-runner/commands/workflows.md +1 -1
  19. package/plugins/workflow-runner/plugin.js +2 -1
  20. package/plugins/workflow-runner/src/agentCommon.js +172 -9
  21. package/plugins/workflow-runner/src/dslManifest.js +72 -0
  22. package/plugins/workflow-runner/src/expressions.js +150 -13
  23. package/plugins/workflow-runner/src/index.js +39 -8
  24. package/plugins/workflow-runner/src/loader.js +216 -64
  25. package/plugins/workflow-runner/src/multimodal.js +37 -0
  26. package/plugins/workflow-runner/src/recovery.js +26 -24
  27. package/plugins/workflow-runner/src/runner.js +693 -287
  28. package/plugins/workflow-runner/src/stepExecutors/agent.js +126 -37
  29. package/plugins/workflow-runner/src/stepExecutors/assert.js +3 -2
  30. package/plugins/workflow-runner/src/stepExecutors/llm.js +38 -30
  31. package/plugins/workflow-runner/src/stepExecutors/skill.js +27 -38
  32. package/plugins/workflow-runner/src/stepExecutors/tool.js +56 -3
  33. package/plugins/workflow-runner/src/stepExecutors/verify.js +19 -10
  34. package/plugins/workflow-runner/src/taskIdentity.js +185 -30
  35. package/plugins/workflow-runner/src/types.js +18 -7
  36. package/plugins/workflow-runner/src/workflowState.js +355 -55
  37. package/skills/ai-image/SKILL.md +89 -0
  38. package/skills/ai-image/scripts/generate.mjs +497 -0
  39. package/skills/ai-image/scripts/generate_from_plan.mjs +469 -0
  40. package/skills/ai-image/scripts/generate_from_plan_test.mjs +223 -0
  41. package/skills/ai-image/scripts/generate_test.mjs +74 -0
  42. package/skills/browser-automation/SKILL.md +47 -0
  43. package/skills/docx/SKILL.md +25 -3
  44. package/skills/docx/scripts/office/helpers/__pycache__/__init__.cpython-314.pyc +0 -0
  45. package/skills/docx/scripts/office/helpers/__pycache__/merge_runs.cpython-314.pyc +0 -0
  46. package/skills/docx/scripts/office/helpers/__pycache__/simplify_redlines.cpython-314.pyc +0 -0
  47. package/skills/docx/scripts/office/validators/__pycache__/__init__.cpython-314.pyc +0 -0
  48. package/skills/docx/scripts/office/validators/__pycache__/base.cpython-314.pyc +0 -0
  49. package/skills/docx/scripts/office/validators/__pycache__/docx.cpython-314.pyc +0 -0
  50. package/skills/docx/scripts/office/validators/__pycache__/pptx.cpython-314.pyc +0 -0
  51. package/skills/docx/scripts/office/validators/__pycache__/redlining.cpython-314.pyc +0 -0
  52. package/skills/docx/scripts/opc_check.py +253 -0
  53. package/skills/image-gen-openrouter/SKILL.md +10 -2
  54. package/skills/image-stats/SKILL.md +65 -0
  55. package/skills/image-stats/scripts/__pycache__/image_stats.cpython-314.pyc +0 -0
  56. package/skills/image-stats/scripts/__pycache__/image_stats_test.cpython-314.pyc +0 -0
  57. package/skills/image-stats/scripts/image_stats.py +368 -0
  58. package/skills/image-stats/scripts/image_stats_test.py +181 -0
  59. package/skills/pptx/SKILL.md +123 -95
  60. package/skills/pptx/design.md +82 -0
  61. package/skills/pptx/examples/README.md +29 -0
  62. package/skills/pptx/examples/hybrid_example.mjs +107 -0
  63. package/skills/pptx/examples/hybrid_example.pptx +0 -0
  64. package/skills/pptx/pptxgenjs.md +41 -0
  65. package/skills/pptx/scripts/deck_helpers.mjs +224 -0
  66. package/skills/pptx/scripts/layout_lint.py +293 -0
  67. package/skills/pptx/scripts/layout_lint_test.py +160 -0
  68. package/skills/pptx/scripts/opc_check.py +339 -0
  69. package/skills/pptx/scripts/svg_fallback.mjs +145 -0
  70. package/skills/pptx/svg.md +67 -0
  71. package/skills/tts-zh/SKILL.md +19 -2
  72. package/skills/ui-design/SKILL.md +158 -0
  73. package/skills/ui-design/claude_design.md +309 -0
  74. package/skills/ui-design/evals/evals.json +254 -0
  75. package/skills/ui-design/references/aesthetic-direction.md +83 -0
  76. package/skills/ui-design/references/claude-design-protocol.md +36 -0
  77. package/skills/ui-design/references/design-context.md +53 -0
  78. package/skills/ui-design/references/design-execution-playbook.md +82 -0
  79. package/skills/ui-design/references/export-pptx.md +124 -0
  80. package/skills/ui-design/references/layout-composition.md +654 -0
  81. package/skills/ui-design/references/preview-feedback.md +37 -0
  82. package/skills/ui-design/references/source-image-layout.md +189 -0
  83. package/skills/ui-design/references/starter-components.md +78 -0
  84. package/skills/ui-design/references/vi-aegis-vector.md +144 -0
  85. package/skills/ui-design/references/vi-amber-prism.md +133 -0
  86. package/skills/ui-design/references/vi-aqua-glass.md +200 -0
  87. package/skills/ui-design/references/vi-comfort-vision.md +147 -0
  88. package/skills/ui-design/references/vi-ember-prism.md +140 -0
  89. package/skills/ui-design/references/vi-nebula-console.md +151 -0
  90. package/skills/ui-design/references/vi-obsidian-optics.md +139 -0
  91. package/skills/ui-design/references/vi-obsidian-xui.md +143 -0
  92. package/skills/ui-design/references/vi-precision-horizon-dark.md +117 -0
  93. package/skills/ui-design/references/vi-precision-horizon.md +215 -0
  94. package/skills/ui-design/references/vi-solar-relay.md +130 -0
  95. package/skills/ui-design/references/vi-template-workflow.md +48 -0
  96. package/skills/ui-design/references/vi-verdant-grid.md +141 -0
  97. package/skills/ui-design/references/vi-violet-meridian.md +172 -0
  98. package/skills/ui-design/scripts/__pycache__/assemble_material.cpython-314.pyc +0 -0
  99. package/skills/ui-design/scripts/__pycache__/assemble_material_test.cpython-314.pyc +0 -0
  100. package/skills/ui-design/scripts/__pycache__/chart_sanity_check.cpython-314.pyc +0 -0
  101. package/skills/ui-design/scripts/__pycache__/check_language_policy.cpython-314.pyc +0 -0
  102. package/skills/ui-design/scripts/__pycache__/check_ui_artifact.cpython-314.pyc +0 -0
  103. package/skills/ui-design/scripts/__pycache__/check_ui_artifact_pptx_test.cpython-314.pyc +0 -0
  104. package/skills/ui-design/scripts/__pycache__/deck_pages_check.cpython-314.pyc +0 -0
  105. package/skills/ui-design/scripts/__pycache__/deck_pages_check_test.cpython-314.pyc +0 -0
  106. package/skills/ui-design/scripts/__pycache__/deck_visual_style_check.cpython-314.pyc +0 -0
  107. package/skills/ui-design/scripts/__pycache__/deck_visual_style_check_test.cpython-314.pyc +0 -0
  108. package/skills/ui-design/scripts/__pycache__/design_budget_check.cpython-314.pyc +0 -0
  109. package/skills/ui-design/scripts/__pycache__/design_budget_check_test.cpython-314.pyc +0 -0
  110. package/skills/ui-design/scripts/__pycache__/design_repair_hints.cpython-314.pyc +0 -0
  111. package/skills/ui-design/scripts/__pycache__/design_repair_hints_test.cpython-314.pyc +0 -0
  112. package/skills/ui-design/scripts/__pycache__/design_style_check.cpython-314.pyc +0 -0
  113. package/skills/ui-design/scripts/__pycache__/design_style_check_test.cpython-314.pyc +0 -0
  114. package/skills/ui-design/scripts/__pycache__/draft_coverage_check.cpython-314.pyc +0 -0
  115. package/skills/ui-design/scripts/__pycache__/extract_source_assets.cpython-314.pyc +0 -0
  116. package/skills/ui-design/scripts/__pycache__/extract_source_assets_test.cpython-314.pyc +0 -0
  117. package/skills/ui-design/scripts/__pycache__/generated_image_review_collect.cpython-314.pyc +0 -0
  118. package/skills/ui-design/scripts/__pycache__/generated_image_review_collect_test.cpython-314.pyc +0 -0
  119. package/skills/ui-design/scripts/__pycache__/image_plan_lint.cpython-314.pyc +0 -0
  120. package/skills/ui-design/scripts/__pycache__/image_plan_lint_test.cpython-314.pyc +0 -0
  121. package/skills/ui-design/scripts/__pycache__/image_prompt_rewrite.cpython-314.pyc +0 -0
  122. package/skills/ui-design/scripts/__pycache__/image_prompt_rewrite_test.cpython-314.pyc +0 -0
  123. package/skills/ui-design/scripts/__pycache__/layout_balance.cpython-314.pyc +0 -0
  124. package/skills/ui-design/scripts/__pycache__/layout_balance_test.cpython-314.pyc +0 -0
  125. package/skills/ui-design/scripts/__pycache__/normalize_design_json.cpython-314.pyc +0 -0
  126. package/skills/ui-design/scripts/__pycache__/normalize_design_json_test.cpython-314.pyc +0 -0
  127. package/skills/ui-design/scripts/__pycache__/plan_source_layout.cpython-314.pyc +0 -0
  128. package/skills/ui-design/scripts/__pycache__/plan_source_layout_test.cpython-314.pyc +0 -0
  129. package/skills/ui-design/scripts/__pycache__/resolve_source_hint.cpython-314.pyc +0 -0
  130. package/skills/ui-design/scripts/__pycache__/resolve_source_hint_test.cpython-314.pyc +0 -0
  131. package/skills/ui-design/scripts/__pycache__/resolve_source_input.cpython-314.pyc +0 -0
  132. package/skills/ui-design/scripts/__pycache__/resolve_source_input_test.cpython-314.pyc +0 -0
  133. package/skills/ui-design/scripts/__pycache__/scaffold_ui_artifact.cpython-314.pyc +0 -0
  134. package/skills/ui-design/scripts/__pycache__/source_usage_check.cpython-314.pyc +0 -0
  135. package/skills/ui-design/scripts/__pycache__/source_usage_check_test.cpython-314.pyc +0 -0
  136. package/skills/ui-design/scripts/__pycache__/text_readability_pixel.cpython-314.pyc +0 -0
  137. package/skills/ui-design/scripts/__pycache__/visual_quality_gate.cpython-314.pyc +0 -0
  138. package/skills/ui-design/scripts/__pycache__/visual_quality_gate_test.cpython-314.pyc +0 -0
  139. package/skills/ui-design/scripts/assemble_material.py +217 -0
  140. package/skills/ui-design/scripts/assemble_material_test.py +149 -0
  141. package/skills/ui-design/scripts/browser_check_ui_artifact.mjs +221 -0
  142. package/skills/ui-design/scripts/chart_sanity_check.py +261 -0
  143. package/skills/ui-design/scripts/chart_sanity_check_test.py +165 -0
  144. package/skills/ui-design/scripts/check_language_policy.py +351 -0
  145. package/skills/ui-design/scripts/check_ui_artifact.py +435 -0
  146. package/skills/ui-design/scripts/check_ui_artifact_pptx_test.py +251 -0
  147. package/skills/ui-design/scripts/deck_pages_check.py +158 -0
  148. package/skills/ui-design/scripts/deck_pages_check_test.py +134 -0
  149. package/skills/ui-design/scripts/deck_visual_style_check.py +767 -0
  150. package/skills/ui-design/scripts/deck_visual_style_check_test.py +713 -0
  151. package/skills/ui-design/scripts/design_budget_check.py +271 -0
  152. package/skills/ui-design/scripts/design_budget_check_test.py +183 -0
  153. package/skills/ui-design/scripts/design_repair_hints.py +162 -0
  154. package/skills/ui-design/scripts/design_repair_hints_test.py +54 -0
  155. package/skills/ui-design/scripts/design_style_check.py +397 -0
  156. package/skills/ui-design/scripts/design_style_check_test.py +233 -0
  157. package/skills/ui-design/scripts/draft_coverage_check.py +184 -0
  158. package/skills/ui-design/scripts/draft_coverage_check_test.py +131 -0
  159. package/skills/ui-design/scripts/export_pptx_from_html.mjs +2367 -0
  160. package/skills/ui-design/scripts/extract_source_assets.py +607 -0
  161. package/skills/ui-design/scripts/extract_source_assets_test.py +256 -0
  162. package/skills/ui-design/scripts/generated_image_review_collect.py +206 -0
  163. package/skills/ui-design/scripts/generated_image_review_collect_test.py +91 -0
  164. package/skills/ui-design/scripts/image_plan_lint.py +571 -0
  165. package/skills/ui-design/scripts/image_plan_lint_test.py +515 -0
  166. package/skills/ui-design/scripts/image_prompt_rewrite.py +713 -0
  167. package/skills/ui-design/scripts/image_prompt_rewrite_test.py +966 -0
  168. package/skills/ui-design/scripts/layout_balance.py +881 -0
  169. package/skills/ui-design/scripts/layout_balance_test.py +927 -0
  170. package/skills/ui-design/scripts/normalize_design_json.py +272 -0
  171. package/skills/ui-design/scripts/normalize_design_json_test.py +119 -0
  172. package/skills/ui-design/scripts/plan_source_layout.py +1450 -0
  173. package/skills/ui-design/scripts/plan_source_layout_test.py +1136 -0
  174. package/skills/ui-design/scripts/resolve_source_input.py +270 -0
  175. package/skills/ui-design/scripts/resolve_source_input_test.py +98 -0
  176. package/skills/ui-design/scripts/scaffold_ui_artifact.py +377 -0
  177. package/skills/ui-design/scripts/source_usage_check.py +581 -0
  178. package/skills/ui-design/scripts/source_usage_check_test.py +427 -0
  179. package/skills/ui-design/scripts/text_readability_pixel.py +340 -0
  180. package/skills/ui-design/scripts/text_readability_pixel_test.py +219 -0
  181. package/skills/ui-design/scripts/visual_quality_gate.py +301 -0
  182. package/skills/ui-design/scripts/visual_quality_gate_test.py +233 -0
  183. package/skills/ui-design/tests/e2e/prompts/deck.md +19 -0
  184. package/skills/ui-design/tests/e2e/prompts/webpage.md +17 -0
  185. package/skills/ui-design/tests/e2e/render_check.mjs +101 -0
  186. package/skills/ui-design/tests/e2e/rubric.json +54 -0
  187. package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/checks/browser-check.json +49 -0
  188. package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/checks/language-check.txt +12 -0
  189. package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/checks/static-check.txt +15 -0
  190. package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/outputs/index.html +837 -0
  191. package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/prompt.md +12 -0
  192. package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/review.md +21 -0
  193. package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/screenshots/desktop.png +0 -0
  194. package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/screenshots/mobile.png +0 -0
  195. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/outputs/homepage.html +373 -0
  196. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/outputs/platform.html +378 -0
  197. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/prompt.md +13 -0
  198. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/review.md +26 -0
  199. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/screenshots/homepage/browser-check.json +49 -0
  200. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/screenshots/homepage/desktop.png +0 -0
  201. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/screenshots/homepage/mobile.png +0 -0
  202. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/screenshots/platform/browser-check.json +49 -0
  203. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/screenshots/platform/desktop.png +0 -0
  204. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/screenshots/platform/mobile.png +0 -0
  205. package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-1/checks/static-check.txt +2 -0
  206. package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-1/outputs/index.html +656 -0
  207. package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-1/prompt.md +12 -0
  208. package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-1/render_check.mjs +67 -0
  209. package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-2/checks/static-check.txt +2 -0
  210. package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-2/outputs/index.html +587 -0
  211. package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-2/prompt.md +12 -0
  212. package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-2/review.md +36 -0
  213. package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/checks/browser-check.json +49 -0
  214. package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/checks/language-check.txt +8 -0
  215. package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/checks/static-check.txt +16 -0
  216. package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/outputs/index.html +739 -0
  217. package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/prompt.md +11 -0
  218. package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/review.md +22 -0
  219. package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/screenshots/desktop.png +0 -0
  220. package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/screenshots/mobile.png +0 -0
  221. package/skills/ui-design/tests/e2e/runs/comfort-vision-preview-1/checks/browser-check.json +52 -0
  222. package/skills/ui-design/tests/e2e/runs/comfort-vision-preview-1/outputs/index.html +641 -0
  223. package/skills/ui-design/tests/e2e/runs/comfort-vision-preview-1/screenshots/desktop.png +0 -0
  224. package/skills/ui-design/tests/e2e/runs/comfort-vision-preview-1/screenshots/mobile.png +0 -0
  225. package/skills/ui-design/tests/e2e/runs/ember-prism-red-preview-1/outputs/index.html +467 -0
  226. package/skills/ui-design/tests/e2e/runs/ember-prism-red-preview-1/screenshots/browser-check.json +49 -0
  227. package/skills/ui-design/tests/e2e/runs/ember-prism-red-preview-1/screenshots/desktop.png +0 -0
  228. package/skills/ui-design/tests/e2e/runs/ember-prism-red-preview-1/screenshots/mobile.png +0 -0
  229. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/outputs/homepage.html +373 -0
  230. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/outputs/platform.html +378 -0
  231. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/prompt.md +13 -0
  232. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/review.md +26 -0
  233. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/screenshots/homepage/browser-check.json +49 -0
  234. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/screenshots/homepage/desktop.png +0 -0
  235. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/screenshots/homepage/mobile.png +0 -0
  236. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/screenshots/platform/browser-check.json +49 -0
  237. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/screenshots/platform/desktop.png +0 -0
  238. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/screenshots/platform/mobile.png +0 -0
  239. package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/checks/browser-check.json +49 -0
  240. package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/checks/language-check.txt +4 -0
  241. package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/checks/static-check.txt +2 -0
  242. package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/execution_notes.md +10 -0
  243. package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/outputs/index.html +587 -0
  244. package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/prompt.md +14 -0
  245. package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/review.md +13 -0
  246. package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/screenshots/desktop.png +0 -0
  247. package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/screenshots/mobile.png +0 -0
  248. package/skills/ui-design/tests/e2e/runs/iteration-1/deck/checks/browser-check.json +24 -0
  249. package/skills/ui-design/tests/e2e/runs/iteration-1/deck/checks/static-check.txt +2 -0
  250. package/skills/ui-design/tests/e2e/runs/iteration-1/deck/execution_notes.md +21 -0
  251. package/skills/ui-design/tests/e2e/runs/iteration-1/deck/outputs/deck.html +451 -0
  252. package/skills/ui-design/tests/e2e/runs/iteration-1/deck/screenshots/slide-01.png +0 -0
  253. package/skills/ui-design/tests/e2e/runs/iteration-1/deck/screenshots/slide-02.png +0 -0
  254. package/skills/ui-design/tests/e2e/runs/iteration-1/review.md +79 -0
  255. package/skills/ui-design/tests/e2e/runs/iteration-1/webpage/checks/browser-check.json +26 -0
  256. package/skills/ui-design/tests/e2e/runs/iteration-1/webpage/checks/static-check.txt +2 -0
  257. package/skills/ui-design/tests/e2e/runs/iteration-1/webpage/execution_notes.md +20 -0
  258. package/skills/ui-design/tests/e2e/runs/iteration-1/webpage/outputs/index.html +534 -0
  259. package/skills/ui-design/tests/e2e/runs/iteration-1/webpage/screenshots/desktop.png +0 -0
  260. package/skills/ui-design/tests/e2e/runs/iteration-1/webpage/screenshots/mobile.png +0 -0
  261. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/checks/browser-check.json +64 -0
  262. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/checks/language-check.txt +7 -0
  263. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/checks/quick-validate.txt +1 -0
  264. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/checks/static-console.txt +2 -0
  265. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/checks/static-homepage.txt +2 -0
  266. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/outputs/console.html +600 -0
  267. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/outputs/homepage.html +556 -0
  268. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/prompt.md +29 -0
  269. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/review.md +57 -0
  270. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/screenshots/console-desktop.png +0 -0
  271. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/screenshots/console-mobile.png +0 -0
  272. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/screenshots/homepage-desktop.png +0 -0
  273. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/screenshots/homepage-mobile.png +0 -0
  274. package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/checks/browser-check.json +33 -0
  275. package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/checks/language-check.txt +6 -0
  276. package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/checks/quick-validate.txt +1 -0
  277. package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/checks/static-check.txt +2 -0
  278. package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/outputs/index.html +682 -0
  279. package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/prompt.md +13 -0
  280. package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/review.md +59 -0
  281. package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/screenshots/desktop.png +0 -0
  282. package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/screenshots/mobile.png +0 -0
  283. package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/outputs/page-01.html +466 -0
  284. package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/outputs/page-02.html +433 -0
  285. package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/prompt.md +13 -0
  286. package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/screenshots/page-01/browser-check.json +49 -0
  287. package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/screenshots/page-01/desktop.png +0 -0
  288. package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/screenshots/page-01/mobile.png +0 -0
  289. package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/screenshots/page-02/browser-check.json +49 -0
  290. package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/screenshots/page-02/desktop.png +0 -0
  291. package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/screenshots/page-02/mobile.png +0 -0
  292. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/checks/browser-check.json +49 -0
  293. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/checks/language-check.txt +3 -0
  294. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/checks/static-check.txt +2 -0
  295. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/execution_notes.md +24 -0
  296. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/outputs/index.html +723 -0
  297. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/prompt.md +15 -0
  298. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/review.md +26 -0
  299. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/screenshots/desktop.png +0 -0
  300. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/screenshots/mobile.png +0 -0
  301. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/checks/browser-dark.json +49 -0
  302. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/checks/browser-light.json +49 -0
  303. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/checks/language-check.txt +11 -0
  304. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/checks/static-dark.txt +2 -0
  305. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/checks/static-light.txt +3 -0
  306. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/execution_notes.md +23 -0
  307. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/outputs/dark.html +392 -0
  308. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/outputs/light.html +476 -0
  309. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/prompt.md +23 -0
  310. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/review.md +41 -0
  311. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/screenshots/dark/desktop.png +0 -0
  312. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/screenshots/dark/mobile.png +0 -0
  313. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/screenshots/light/desktop.png +0 -0
  314. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/screenshots/light/mobile.png +0 -0
  315. package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/checks/browser-check.json +54 -0
  316. package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/checks/language-check.txt +5 -0
  317. package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/checks/quick-validate.txt +1 -0
  318. package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/checks/static-check.txt +2 -0
  319. package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/outputs/index.html +765 -0
  320. package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/prompt.md +15 -0
  321. package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/review.md +59 -0
  322. package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/screenshots/desktop.png +0 -0
  323. package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/screenshots/mobile.png +0 -0
  324. package/skills/ui-design/tests/e2e/runs/verdant-grid-preview-1/outputs/index.html +508 -0
  325. package/skills/ui-design/tests/e2e/runs/verdant-grid-preview-1/screenshots/browser-check.json +49 -0
  326. package/skills/ui-design/tests/e2e/runs/verdant-grid-preview-1/screenshots/desktop.png +0 -0
  327. package/skills/ui-design/tests/e2e/runs/verdant-grid-preview-1/screenshots/mobile.png +0 -0
  328. package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/checks/browser-check.json +54 -0
  329. package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/checks/language-check.txt +6 -0
  330. package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/checks/quick-validate.txt +1 -0
  331. package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/checks/static-check.txt +2 -0
  332. package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/outputs/index.html +788 -0
  333. package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/prompt.md +14 -0
  334. package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/review.md +60 -0
  335. package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/screenshots/desktop.png +0 -0
  336. package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/screenshots/mobile.png +0 -0
  337. package/skills/video-compose/SKILL.md +8 -1
  338. package/skills/web-crawler/SKILL.md +70 -0
  339. package/skills/web-crawler/scripts/crawl.mjs +538 -0
  340. package/skills/web-crawler/scripts/crawl.test.mjs +204 -0
  341. package/skills/xlsx/SKILL.md +12 -0
  342. package/skills/xlsx/scripts/opc_check.py +253 -0
  343. package/src/advisorState.js +22 -0
  344. package/src/askBridge.js +87 -3
  345. package/src/bootstrap/workingDir.js +12 -1
  346. package/src/cli/args.js +17 -1
  347. package/src/cli/configMenu.js +236 -0
  348. package/src/cli/configWizard.js +7 -5
  349. package/src/cli/print.js +37 -4
  350. package/src/cli/streamJson.js +77 -24
  351. package/src/cli/wizards/advisorWizard.js +147 -0
  352. package/src/cli/wizards/fieldForm.js +149 -0
  353. package/src/cli/wizards/imageWizard.js +60 -0
  354. package/src/cli/wizards/openRouterWizard.js +23 -0
  355. package/src/cli/wizards/providerPresets.js +95 -0
  356. package/src/cli/wizards/providerWizard.js +219 -0
  357. package/src/cli/wizards/searchWizard.js +23 -0
  358. package/src/cli/wizards/ttsWizard.js +34 -0
  359. package/src/config/configFile.js +441 -83
  360. package/src/config/configService.js +446 -0
  361. package/src/config.js +24 -64
  362. package/src/context/agentHome.js +9 -0
  363. package/src/context/archive.js +3 -2
  364. package/src/context/compact.js +8 -5
  365. package/src/context/contextLock.js +81 -0
  366. package/src/context/persistContext.js +30 -11
  367. package/src/context/reactiveCompact.js +4 -2
  368. package/src/context/recentDirs.js +21 -61
  369. package/src/context/sessionPath.js +97 -23
  370. package/src/context/sessionRegistry.js +303 -24
  371. package/src/context/tokenCounter.js +18 -0
  372. package/src/context/workspaceIndex.js +731 -0
  373. package/src/infra/verification.js +3 -2
  374. package/src/llm/client.js +293 -206
  375. package/src/llm/providers/anthropicFormat.js +241 -0
  376. package/src/llm/providers/openaiFormat.js +190 -0
  377. package/src/loop.js +211 -27
  378. package/src/main.js +61 -11
  379. package/src/messageQueue.js +97 -0
  380. package/src/multimodal.js +203 -0
  381. package/src/plugin-sdk.js +15 -0
  382. package/src/plugins/commandRouter.js +3 -0
  383. package/src/plugins/hookEngine.js +5 -1
  384. package/src/plugins/pluginLifecycle.js +28 -0
  385. package/src/plugins/pluginRunner.js +40 -0
  386. package/src/plugins/transcript.js +4 -3
  387. package/src/prompts/pluginList.js +2 -2
  388. package/src/prompts/projectInstructions.js +3 -3
  389. package/src/prompts/promptAssembly.js +133 -109
  390. package/src/prompts/skillList.js +12 -22
  391. package/src/session/runAgentTurn.js +70 -0
  392. package/src/session/runTurn.js +41 -6
  393. package/src/toolGate.js +17 -0
  394. package/src/tools/advisor/advisor.js +379 -0
  395. package/src/tools/agent/agent.js +555 -0
  396. package/src/tools/agent/agentTypes.js +59 -0
  397. package/src/tools/agent/coordinator.js +93 -0
  398. package/src/tools/agent/worktree.js +270 -0
  399. package/src/tools/ask/ask.js +7 -2
  400. package/src/tools/bash/bash.js +112 -18
  401. package/src/tools/download/download.js +144 -0
  402. package/src/tools/edit/edit.js +1 -0
  403. package/src/tools/edit/multi-edit.js +1 -0
  404. package/src/tools/genimage/genimage.js +242 -0
  405. package/src/tools/genspeech/genspeech.js +67 -0
  406. package/src/tools/glob/glob.js +1 -0
  407. package/src/tools/grep/grep.js +3 -0
  408. package/src/tools/grep/rgPath.js +2 -0
  409. package/src/tools/index.js +25 -2
  410. package/src/tools/read/read.js +1 -0
  411. package/src/tools/shared/killTree.js +52 -0
  412. package/src/tools/toolProgressBridge.js +48 -0
  413. package/src/tools/webbrowser/agentBrowserPath.js +258 -0
  414. package/src/tools/webbrowser/browser.js +59 -42
  415. package/src/tools/webbrowser/browserControl.js +118 -0
  416. package/src/tools/webbrowser/browserDaemon.js +97 -0
  417. package/src/tools/webbrowser/browserService.js +27 -0
  418. package/src/tools/webbrowser/browserStream.js +119 -0
  419. package/src/tools/webbrowser/webbrowser.js +699 -130
  420. package/src/tools/webfetch/webfetch.js +1 -0
  421. package/src/tools/websearch/websearch.js +134 -51
  422. package/src/tools/write/write.js +1 -0
  423. package/src/ui/App.js +249 -22
  424. package/src/ui/AskQuestion.js +19 -17
  425. package/src/ui/InputBox.js +34 -9
  426. package/src/ui/LiveArea.js +112 -19
  427. package/src/ui/MessageList.js +100 -14
  428. package/src/ui/ModelPicker.js +56 -0
  429. package/src/ui/QueuedMessagesBanner.js +14 -0
  430. package/src/ui/Root.js +18 -10
  431. package/src/ui/SessionPicker.js +102 -0
  432. package/src/ui/StatusLine.js +13 -4
  433. package/src/ui/WorkspacePicker.js +55 -0
  434. package/src/ui/figures.js +44 -0
  435. package/src/ui/hooks/askSlot.js +82 -0
  436. package/src/ui/hooks/useChat.js +345 -64
  437. package/src/ui/hooks/usePasteHandler.js +11 -1
  438. package/src/ui/hooks/useTextBuffer.js +1 -3
  439. package/src/ui/liveViewport.js +5 -1
  440. package/src/ui/markdown.js +206 -0
  441. package/src/ui/textBuffer.js +0 -7
  442. package/src/ui/theme.js +32 -0
  443. package/src/utils/debugLog.js +0 -4
  444. package/src/utils/resourcePaths.js +2 -2
  445. package/src/utils/stripThink.js +50 -0
  446. package/src/web/browserBridge.js +447 -0
  447. package/src/web/protocol.js +19 -0
  448. package/workflows/adaptive-research.yaml +9 -2
  449. package/workflows/book-review-short.yaml +31 -7
  450. package/workflows/e2e-write-greet.yaml +3 -0
  451. package/workflows/illustrate.yaml +227 -0
  452. package/workflows/plan.yaml +437 -207
  453. package/workflows/ppt.yaml +1659 -0
  454. package/workflows/ralph-loop.yaml +142 -112
  455. package/workflows/schema.json +81 -23
  456. package/workflows/webppt.yaml +496 -0
  457. package/workflows/word.yaml +710 -0
  458. package/workflows/youtube-shorts.yaml +38 -10
  459. package/MINIMAL-TRACE.md +0 -77
  460. package/plugins/workflow-runner/src/voteHelpers.js +0 -110
  461. package/skills/config/SKILL.md +0 -123
  462. package/skills/frontend-design/LICENSE.txt +0 -177
  463. package/skills/frontend-design/SKILL.md +0 -42
  464. package/skills/pptx/scripts/office/__pycache__/soffice.cpython-314.pyc +0 -0
  465. package/src/ui/ProgressPanel.js +0 -54
  466. package/src/ui/StreamingBlock.js +0 -11
  467. package/src/ui/ToolStatus.js +0 -11
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env node
2
+ import { mkdir, writeFile } from 'node:fs/promises';
3
+ import { resolve } from 'node:path';
4
+ import { fileURLToPath, pathToFileURL } from 'node:url';
5
+ import { chromium } from 'playwright-core';
6
+
7
+ const runRoot = resolve(fileURLToPath(new URL('.', import.meta.url)));
8
+ const htmlFile = resolve(runRoot, 'outputs/index.html');
9
+ const shotsDir = resolve(runRoot, 'screenshots');
10
+ const checksFile = resolve(runRoot, 'checks/browser-check.json');
11
+
12
+ async function inspect(page) {
13
+ return page.evaluate(() => ({
14
+ title: document.title,
15
+ screenLabels: Array.from(document.querySelectorAll('[data-screen-label]')).map((node) =>
16
+ node.getAttribute('data-screen-label'),
17
+ ),
18
+ editModeBlocks: (document.documentElement.outerHTML.match(/EDITMODE-BEGIN/g) || []).length,
19
+ hasEditModeAvailable: document.documentElement.outerHTML.includes('__edit_mode_available'),
20
+ bodyOverflowX: getComputedStyle(document.body).overflowX,
21
+ documentWidth: document.documentElement.scrollWidth,
22
+ viewportWidth: window.innerWidth,
23
+ firstHeading: document.querySelector('h1')?.textContent,
24
+ buttons: Array.from(document.querySelectorAll('button')).map((node) => node.textContent?.trim()),
25
+ }));
26
+ }
27
+
28
+ async function main() {
29
+ const browser = await chromium.launch({ headless: true });
30
+ const consoleItems = [];
31
+ const results = {};
32
+
33
+ try {
34
+ const page = await browser.newPage({ viewport: { width: 1440, height: 980 } });
35
+ page.on('console', (msg) => consoleItems.push({ type: msg.type(), text: msg.text() }));
36
+ page.on('pageerror', (error) => consoleItems.push({ type: 'pageerror', text: error.message }));
37
+
38
+ await mkdir(shotsDir, { recursive: true });
39
+ await page.goto(pathToFileURL(htmlFile).href, { waitUntil: 'load' });
40
+ await page.screenshot({ path: resolve(shotsDir, 'desktop.png'), fullPage: true });
41
+ results.desktop = await inspect(page);
42
+
43
+ await page.setViewportSize({ width: 390, height: 980 });
44
+ await page.reload({ waitUntil: 'load' });
45
+ await page.screenshot({ path: resolve(shotsDir, 'mobile.png'), fullPage: true });
46
+ results.mobile = await inspect(page);
47
+ } finally {
48
+ await browser.close();
49
+ }
50
+
51
+ results.console = consoleItems;
52
+ results.pass =
53
+ consoleItems.filter((item) => item.type === 'error' || item.type === 'pageerror').length === 0 &&
54
+ results.desktop.documentWidth <= results.desktop.viewportWidth &&
55
+ results.mobile.documentWidth <= results.mobile.viewportWidth &&
56
+ results.desktop.editModeBlocks === 1 &&
57
+ results.mobile.editModeBlocks === 1;
58
+
59
+ await writeFile(checksFile, JSON.stringify(results, null, 2));
60
+ console.log(JSON.stringify({ pass: results.pass }, null, 2));
61
+ if (!results.pass) process.exit(1);
62
+ }
63
+
64
+ main().catch((error) => {
65
+ console.error(error);
66
+ process.exit(1);
67
+ });
@@ -0,0 +1,2 @@
1
+ ui-design artifact check: minimal-agent/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-2/outputs/index.html
2
+ OK: no issues found.
@@ -0,0 +1,587 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Aqua Glass 第二版浅色 VI 样张</title>
7
+ <style>
8
+ :root {
9
+ --ink: #0b1220;
10
+ --ink-soft: #1e2a3e;
11
+ --muted: #56677c;
12
+ --paper: #f7fbff;
13
+ --surface: rgba(255, 255, 255, 0.76);
14
+ --surface-soft: rgba(255, 255, 255, 0.64);
15
+ --line: rgba(11, 18, 32, 0.1);
16
+ --accent: #2f80ed;
17
+ --signal: #24b8a8;
18
+ --shadow: rgba(38, 91, 143, 0.16);
19
+ --bg-gradient:
20
+ radial-gradient(circle at 14% 12%, rgba(47, 128, 237, 0.18), transparent 28%),
21
+ radial-gradient(circle at 86% 8%, rgba(36, 184, 168, 0.14), transparent 24%),
22
+ linear-gradient(135deg, #ffffff 0%, #f7fbff 46%, #eaf6ff 100%);
23
+ --surface-gradient:
24
+ linear-gradient(145deg, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.66));
25
+ --button-gradient:
26
+ linear-gradient(135deg, #2f80ed 0%, #58a8ff 54%, #24b8a8 100%);
27
+ font-family: "PingFang SC", "Microsoft YaHei", "Noto Sans CJK SC", "Inter", sans-serif;
28
+ }
29
+
30
+ * {
31
+ box-sizing: border-box;
32
+ }
33
+
34
+ body {
35
+ margin: 0;
36
+ min-height: 100vh;
37
+ background: var(--bg-gradient);
38
+ color: var(--ink);
39
+ }
40
+
41
+ body::before {
42
+ content: "";
43
+ position: fixed;
44
+ inset: 0;
45
+ z-index: -1;
46
+ background-image:
47
+ linear-gradient(rgba(11, 18, 32, 0.028) 1px, transparent 1px),
48
+ linear-gradient(90deg, rgba(11, 18, 32, 0.028) 1px, transparent 1px);
49
+ background-size: 56px 56px;
50
+ mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.74), transparent 78%);
51
+ }
52
+
53
+ button,
54
+ input {
55
+ font: inherit;
56
+ }
57
+
58
+ .page {
59
+ width: min(1180px, calc(100vw - 32px));
60
+ margin: 0 auto;
61
+ padding: 28px 0 56px;
62
+ }
63
+
64
+ .glass {
65
+ border: 1px solid var(--line);
66
+ background: var(--surface-gradient);
67
+ backdrop-filter: blur(22px) saturate(1.14);
68
+ box-shadow: 0 22px 72px var(--shadow), inset 0 1px 0 rgba(255, 255, 255, 0.9);
69
+ }
70
+
71
+ .nav {
72
+ display: flex;
73
+ align-items: center;
74
+ justify-content: space-between;
75
+ gap: 18px;
76
+ padding: 12px 14px;
77
+ border-radius: 999px;
78
+ }
79
+
80
+ .brand {
81
+ display: flex;
82
+ align-items: center;
83
+ gap: 12px;
84
+ min-width: 0;
85
+ }
86
+
87
+ .mark {
88
+ width: 40px;
89
+ height: 40px;
90
+ border-radius: 15px;
91
+ border: 1px solid rgba(11, 18, 32, 0.12);
92
+ background:
93
+ radial-gradient(circle at 64% 32%, rgba(36, 184, 168, 0.9), transparent 18%),
94
+ linear-gradient(135deg, #ffffff 0%, #e8f5ff 58%, #cfeaff 100%);
95
+ box-shadow: inset 0 1px 0 white, 0 14px 28px rgba(47, 128, 237, 0.18);
96
+ }
97
+
98
+ .brand strong {
99
+ display: block;
100
+ font-size: 15px;
101
+ }
102
+
103
+ .brand span,
104
+ .pill,
105
+ .small {
106
+ color: var(--muted);
107
+ font-size: 12px;
108
+ font-weight: 650;
109
+ }
110
+
111
+ .nav-pills {
112
+ display: flex;
113
+ flex-wrap: wrap;
114
+ justify-content: flex-end;
115
+ gap: 8px;
116
+ }
117
+
118
+ .pill {
119
+ border: 1px solid rgba(11, 18, 32, 0.08);
120
+ border-radius: 999px;
121
+ background: linear-gradient(135deg, rgba(255, 255, 255, 0.72), rgba(234, 246, 255, 0.48));
122
+ padding: 8px 12px;
123
+ white-space: nowrap;
124
+ }
125
+
126
+ .hero {
127
+ display: grid;
128
+ grid-template-columns: minmax(0, 1.02fr) minmax(340px, 0.98fr);
129
+ gap: 24px;
130
+ margin-top: 26px;
131
+ }
132
+
133
+ .hero-main,
134
+ .assistant {
135
+ border-radius: 30px;
136
+ overflow: hidden;
137
+ position: relative;
138
+ }
139
+
140
+ .hero-main {
141
+ padding: clamp(30px, 4.6vw, 54px);
142
+ }
143
+
144
+ .hero-main::after {
145
+ content: "";
146
+ position: absolute;
147
+ right: -84px;
148
+ bottom: -96px;
149
+ width: 290px;
150
+ height: 290px;
151
+ border-radius: 50%;
152
+ border: 1px solid rgba(47, 128, 237, 0.16);
153
+ background:
154
+ linear-gradient(135deg, rgba(255, 255, 255, 0.78), rgba(234, 246, 255, 0.26)),
155
+ repeating-linear-gradient(135deg, rgba(47, 128, 237, 0.12) 0 8px, transparent 8px 18px);
156
+ opacity: 0.62;
157
+ }
158
+
159
+ .eyebrow {
160
+ margin: 0 0 16px;
161
+ color: var(--accent);
162
+ font-size: 12px;
163
+ font-weight: 800;
164
+ letter-spacing: 0.08em;
165
+ }
166
+
167
+ h1,
168
+ h2,
169
+ h3,
170
+ p {
171
+ margin-top: 0;
172
+ }
173
+
174
+ h1 {
175
+ max-width: 680px;
176
+ margin-bottom: 20px;
177
+ color: var(--ink);
178
+ font-size: clamp(38px, 5.2vw, 72px);
179
+ line-height: 1.08;
180
+ letter-spacing: 0;
181
+ text-wrap: balance;
182
+ }
183
+
184
+ .lead {
185
+ max-width: 650px;
186
+ margin-bottom: 28px;
187
+ color: var(--muted);
188
+ font-size: clamp(16px, 1.7vw, 19px);
189
+ line-height: 1.62;
190
+ font-weight: 650;
191
+ }
192
+
193
+ .actions {
194
+ position: relative;
195
+ z-index: 1;
196
+ display: flex;
197
+ flex-wrap: wrap;
198
+ gap: 12px;
199
+ align-items: center;
200
+ }
201
+
202
+ .button {
203
+ border: 0;
204
+ border-radius: 999px;
205
+ padding: 13px 18px;
206
+ cursor: pointer;
207
+ font-weight: 800;
208
+ }
209
+
210
+ .button.primary {
211
+ background: var(--button-gradient);
212
+ color: #fff;
213
+ box-shadow: 0 18px 34px rgba(47, 128, 237, 0.24);
214
+ }
215
+
216
+ .button.secondary {
217
+ border: 1px solid rgba(11, 18, 32, 0.12);
218
+ background: linear-gradient(135deg, rgba(255, 255, 255, 0.78), rgba(234, 246, 255, 0.54));
219
+ color: var(--ink);
220
+ }
221
+
222
+ .assistant {
223
+ padding: 24px;
224
+ display: grid;
225
+ gap: 14px;
226
+ align-content: start;
227
+ }
228
+
229
+ .query,
230
+ .summary,
231
+ .insight {
232
+ border: 1px solid rgba(11, 18, 32, 0.09);
233
+ border-radius: 20px;
234
+ background: linear-gradient(145deg, rgba(255, 255, 255, 0.82), rgba(240, 248, 255, 0.58));
235
+ padding: 16px;
236
+ }
237
+
238
+ .query h3,
239
+ .summary h3 {
240
+ margin-bottom: 10px;
241
+ font-size: 16px;
242
+ }
243
+
244
+ .query p {
245
+ margin-bottom: 0;
246
+ color: var(--ink);
247
+ font-size: 19px;
248
+ line-height: 1.42;
249
+ font-weight: 850;
250
+ }
251
+
252
+ .summary p,
253
+ .insight p {
254
+ margin-bottom: 0;
255
+ color: var(--ink-soft);
256
+ line-height: 1.55;
257
+ font-weight: 650;
258
+ }
259
+
260
+ .metric-row {
261
+ display: grid;
262
+ grid-template-columns: repeat(3, 1fr);
263
+ gap: 10px;
264
+ }
265
+
266
+ .metric {
267
+ border-radius: 18px;
268
+ padding: 14px;
269
+ background: linear-gradient(150deg, rgba(255, 255, 255, 0.8), rgba(232, 246, 255, 0.58));
270
+ }
271
+
272
+ .metric b {
273
+ display: block;
274
+ color: var(--ink);
275
+ font-size: 25px;
276
+ line-height: 1;
277
+ }
278
+
279
+ .metric span {
280
+ display: block;
281
+ margin-top: 8px;
282
+ color: var(--muted);
283
+ font-size: 12px;
284
+ font-weight: 700;
285
+ }
286
+
287
+ .section {
288
+ margin-top: 24px;
289
+ border-radius: 28px;
290
+ padding: clamp(22px, 3vw, 32px);
291
+ }
292
+
293
+ .section-head {
294
+ display: grid;
295
+ grid-template-columns: minmax(0, 1fr) minmax(280px, 420px);
296
+ gap: 24px;
297
+ align-items: end;
298
+ margin-bottom: 20px;
299
+ }
300
+
301
+ .section-head h2 {
302
+ margin-bottom: 0;
303
+ font-size: clamp(26px, 3.2vw, 42px);
304
+ line-height: 1.12;
305
+ text-wrap: balance;
306
+ }
307
+
308
+ .section-head p {
309
+ margin-bottom: 0;
310
+ color: var(--muted);
311
+ line-height: 1.55;
312
+ font-weight: 650;
313
+ }
314
+
315
+ .swatches,
316
+ .cards {
317
+ display: grid;
318
+ gap: 14px;
319
+ }
320
+
321
+ .swatches {
322
+ grid-template-columns: repeat(6, 1fr);
323
+ }
324
+
325
+ .swatch,
326
+ .card {
327
+ border: 1px solid rgba(11, 18, 32, 0.09);
328
+ border-radius: 20px;
329
+ padding: 16px;
330
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.82);
331
+ }
332
+
333
+ .swatch {
334
+ min-height: 142px;
335
+ display: grid;
336
+ align-content: end;
337
+ }
338
+
339
+ .swatch b,
340
+ .card h3 {
341
+ margin-bottom: 8px;
342
+ color: var(--ink);
343
+ }
344
+
345
+ .swatch span,
346
+ .card p {
347
+ color: var(--muted);
348
+ line-height: 1.55;
349
+ font-weight: 650;
350
+ }
351
+
352
+ .cards {
353
+ grid-template-columns: repeat(3, 1fr);
354
+ }
355
+
356
+ .card {
357
+ min-height: 220px;
358
+ background: linear-gradient(145deg, rgba(255, 255, 255, 0.74), rgba(235, 247, 255, 0.54));
359
+ }
360
+
361
+ .type-sample {
362
+ color: var(--ink);
363
+ font-size: clamp(30px, 4vw, 50px);
364
+ line-height: 1.12;
365
+ font-weight: 850;
366
+ letter-spacing: 0;
367
+ text-wrap: balance;
368
+ }
369
+
370
+ .track {
371
+ height: 10px;
372
+ border-radius: 999px;
373
+ background: rgba(11, 18, 32, 0.08);
374
+ overflow: hidden;
375
+ }
376
+
377
+ .track span {
378
+ display: block;
379
+ width: 76%;
380
+ height: 100%;
381
+ border-radius: inherit;
382
+ background: linear-gradient(90deg, var(--accent), #66b6ff 52%, var(--signal));
383
+ }
384
+
385
+ .tweaks-panel {
386
+ position: fixed;
387
+ right: 18px;
388
+ bottom: 18px;
389
+ z-index: 20;
390
+ width: min(300px, calc(100vw - 36px));
391
+ display: none;
392
+ gap: 12px;
393
+ padding: 16px;
394
+ border-radius: 18px;
395
+ border: 1px solid var(--line);
396
+ background: rgba(255, 255, 255, 0.88);
397
+ box-shadow: 0 18px 52px var(--shadow);
398
+ backdrop-filter: blur(18px);
399
+ }
400
+
401
+ .tweaks-panel label {
402
+ display: grid;
403
+ gap: 6px;
404
+ color: var(--muted);
405
+ font-size: 13px;
406
+ font-weight: 700;
407
+ }
408
+
409
+ @media (max-width: 860px) {
410
+ .page {
411
+ width: min(100% - 24px, 680px);
412
+ padding-top: 14px;
413
+ }
414
+
415
+ .nav {
416
+ display: grid;
417
+ border-radius: 24px;
418
+ }
419
+
420
+ .nav-pills {
421
+ justify-content: flex-start;
422
+ }
423
+
424
+ .hero,
425
+ .section-head,
426
+ .cards {
427
+ grid-template-columns: 1fr;
428
+ }
429
+
430
+ .swatches {
431
+ grid-template-columns: repeat(2, 1fr);
432
+ }
433
+
434
+ .hero-main,
435
+ .assistant,
436
+ .section {
437
+ border-radius: 24px;
438
+ }
439
+ }
440
+
441
+ @media (max-width: 520px) {
442
+ h1 {
443
+ font-size: clamp(34px, 10.4vw, 48px);
444
+ }
445
+
446
+ .metric-row,
447
+ .swatches {
448
+ grid-template-columns: 1fr;
449
+ }
450
+ }
451
+ </style>
452
+ </head>
453
+ <body>
454
+ <main class="page" data-screen-label="01 Aqua Glass 第二版">
455
+ <nav class="nav glass" aria-label="主导航">
456
+ <div class="brand">
457
+ <div class="mark" aria-hidden="true"></div>
458
+ <div>
459
+ <strong>澄知云</strong>
460
+ <span>Aqua Glass 第二版</span>
461
+ </div>
462
+ </div>
463
+ <div class="nav-pills">
464
+ <span class="pill">知识库同步 96%</span>
465
+ <span class="pill">团队空间 18 个</span>
466
+ <span class="pill">AI 摘要已开启</span>
467
+ </div>
468
+ </nav>
469
+
470
+ <section class="hero">
471
+ <div class="hero-main glass">
472
+ <p class="eyebrow">渐变光感系统测试</p>
473
+ <h1>让团队知识变成清澈、可搜索、可行动的工作界面。</h1>
474
+ <p class="lead">第二版把玻璃理解为光感系统:背景负责空气感,主面板负责阅读,按钮负责行动,状态轨道负责反馈,而不是简单堆叠半透明卡片。</p>
475
+ <div class="actions">
476
+ <button class="button primary" type="button">创建知识空间</button>
477
+ <button class="button secondary" type="button">查看视觉规范</button>
478
+ <span class="pill">近黑文字 / 渐变 surface / 蓝青状态</span>
479
+ </div>
480
+ </div>
481
+
482
+ <aside class="assistant glass" aria-label="AI 知识助手示例">
483
+ <div class="query">
484
+ <h3>知识搜索</h3>
485
+ <p>“找出客户反馈里关于权限协作的关键问题。”</p>
486
+ </div>
487
+ <div class="summary">
488
+ <h3>AI 摘要</h3>
489
+ <p>已归纳 42 条反馈,优先展示权限继承、外部成员邀请和审批链路。</p>
490
+ </div>
491
+ <div class="insight">
492
+ <p>建议新增“共享前检查”浮层,减少误分享、重复沟通和审批返工。</p>
493
+ </div>
494
+ <div class="track" aria-label="处理进度"><span></span></div>
495
+ <div class="metric-row">
496
+ <div class="metric"><b>42</b><span>相关反馈</span></div>
497
+ <div class="metric"><b>8.6</b><span>摘要置信度</span></div>
498
+ <div class="metric"><b>3</b><span>建议动作</span></div>
499
+ </div>
500
+ </aside>
501
+ </section>
502
+
503
+ <section class="section glass" aria-label="色彩识别">
504
+ <div class="section-head">
505
+ <h2>浅色风格靠渐变建立光感,靠近黑文字保证阅读。</h2>
506
+ <p>主面板不再只依赖透明度,而是使用上亮下冷的 surface 渐变;背景网格更淡,避免浅蓝白变脏。</p>
507
+ </div>
508
+ <div class="swatches">
509
+ <div class="swatch" style="background:#0b1220;color:white"><b style="color:white">主文字</b><span style="color:rgba(255,255,255,.72)">#0b1220</span></div>
510
+ <div class="swatch" style="background:linear-gradient(135deg,#ffffff,#eaf6ff)"><b>背景光</b><span>白到冷蓝</span></div>
511
+ <div class="swatch" style="background:linear-gradient(145deg,rgba(255,255,255,.9),rgba(255,255,255,.66))"><b>主面板</b><span>渐变白</span></div>
512
+ <div class="swatch" style="background:linear-gradient(135deg,#2f80ed,#58a8ff,#24b8a8);color:white"><b style="color:white">主行动</b><span style="color:rgba(255,255,255,.74)">蓝青渐变</span></div>
513
+ <div class="swatch" style="background:#24b8a8;color:white"><b style="color:white">协作状态</b><span style="color:rgba(255,255,255,.74)">薄荷青</span></div>
514
+ <div class="swatch" style="background:linear-gradient(145deg,rgba(255,255,255,.72),rgba(235,247,255,.5))"><b>辅助浮层</b><span>低对比</span></div>
515
+ </div>
516
+ </section>
517
+
518
+ <section class="section glass" aria-label="组件识别">
519
+ <div class="section-head">
520
+ <h2>通透不是空,玻璃卡片必须有信息锚点。</h2>
521
+ <p>第二版用标题、说明、状态轨道和按钮让每个面板都有职责,避免右侧大面积空白。</p>
522
+ </div>
523
+ <div class="cards">
524
+ <article class="card">
525
+ <h3>中文标题尺度</h3>
526
+ <div class="type-sample">清澈、可读、有节奏。</div>
527
+ <p>H1 上限降到 72px,避免中文被切成海报式碎行。</p>
528
+ </article>
529
+ <article class="card">
530
+ <h3>状态反馈</h3>
531
+ <p>状态轨道使用蓝到青的方向性渐变,表达从处理到可用的流动关系。</p>
532
+ <div class="track"><span></span></div>
533
+ </article>
534
+ <article class="card">
535
+ <h3>玻璃层级</h3>
536
+ <p>主内容更白,辅助浮层更透。每层有不同渐变、边框和阴影,不再是一组相同的毛玻璃盒子。</p>
537
+ </article>
538
+ </div>
539
+ </section>
540
+ </main>
541
+
542
+ <aside class="tweaks-panel" aria-label="调整">
543
+ <strong>调整</strong>
544
+ <label>强调色 <input data-tweak-primary type="color" value="#2f80ed"></label>
545
+ <label>主面板透明度 <input data-tweak-surface type="range" min="68" max="88" value="76"></label>
546
+ </aside>
547
+
548
+ <script>
549
+ const UI_DESIGN_TWEAKS = /*EDITMODE-BEGIN*/{
550
+ "primaryColor": "#2f80ed",
551
+ "surfaceOpacity": 76
552
+ }/*EDITMODE-END*/;
553
+
554
+ const root = document.documentElement;
555
+ const panel = document.querySelector('.tweaks-panel');
556
+
557
+ function applyTweaks(values) {
558
+ if (values.primaryColor) root.style.setProperty('--accent', values.primaryColor);
559
+ if (values.surfaceOpacity) {
560
+ const alpha = Number(values.surfaceOpacity) / 100;
561
+ root.style.setProperty('--surface', `rgba(255, 255, 255, ${alpha})`);
562
+ }
563
+ }
564
+
565
+ window.addEventListener('message', (event) => {
566
+ const data = event.data || {};
567
+ if (data.type === '__activate_edit_mode') panel.style.display = 'grid';
568
+ if (data.type === '__deactivate_edit_mode') panel.style.display = 'none';
569
+ if (data.type === '__edit_mode_set_keys' && data.keys) applyTweaks(data.keys);
570
+ });
571
+
572
+ document.querySelector('[data-tweak-primary]').addEventListener('input', (event) => {
573
+ const keys = { primaryColor: event.target.value };
574
+ applyTweaks(keys);
575
+ window.parent.postMessage({ type: '__edit_mode_set_keys', keys }, '*');
576
+ });
577
+
578
+ document.querySelector('[data-tweak-surface]').addEventListener('input', (event) => {
579
+ const keys = { surfaceOpacity: Number(event.target.value) };
580
+ applyTweaks(keys);
581
+ window.parent.postMessage({ type: '__edit_mode_set_keys', keys }, '*');
582
+ });
583
+
584
+ window.parent.postMessage({ type: '__edit_mode_available' }, '*');
585
+ </script>
586
+ </body>
587
+ </html>
@@ -0,0 +1,12 @@
1
+ # Aqua Glass 第二版测试题
2
+
3
+ 根据第一版截图评审,使用 `ui-design` skill 和 `references/vi-aqua-glass.md` 重新创建一个中文 HTML 首页样张。
4
+
5
+ 优化目标:
6
+
7
+ - 玻璃浅色风要体现渐变光感系统,而不是简单的半透明白卡片。
8
+ - 中文主标题断行自然,避免单字孤行和海报式碎裂。
9
+ - 背景、主面板、按钮、状态轨道使用不同渐变策略。
10
+ - 主内容文字使用近黑色,正文和标签必须清楚。
11
+ - 右侧卡片保持足够信息密度,不出现大面积空白。
12
+ - 移动端无横向溢出,文字不遮挡、不挤压。
@@ -0,0 +1,36 @@
1
+ # Aqua Glass 第二轮评审
2
+
3
+ ## 测试目标
4
+
5
+ 验证 `SKILL.md` 和 `vi-aqua-glass.md` 更新后,浅蓝白玻璃风是否从“半透明卡片”提升为“渐变光感系统”,并检查中文标题、字色、信息密度和移动端表现。
6
+
7
+ ## 检查结果
8
+
9
+ | 项目 | 结果 |
10
+ |---|---|
11
+ | `check_ui_artifact.py` | 通过,无阻断问题 |
12
+ | `check_language_policy.py` | 通过 |
13
+ | 桌面浏览器检查 | 通过,无横向溢出,`data-screen-label` 存在,Tweaks block 唯一 |
14
+ | 移动浏览器检查 | 通过,无横向溢出,DOM 未重复 |
15
+
16
+ 移动端长截图出现过顶部内容重复,但 DOM 检查确认页面只有一个 `main.page`、一个 `nav`、一个 `hero`,属于截图捕捉问题,不是 HTML 结构问题。
17
+
18
+ ## 设计结论
19
+
20
+ 第二版明显优于第一版。
21
+
22
+ - 中文 H1 从海报式碎裂改为更自然的 4 行左右,仍有冲击力,但不再像被强行放大。
23
+ - 浅色背景更有渐变光感,网格更淡,不再只依赖半透明白卡片。
24
+ - 主按钮、状态轨道、色板和玻璃面板有不同渐变职责,层级更清楚。
25
+ - 右侧卡片信息密度更稳,减少了第一版中段大面积空白的问题。
26
+ - 近黑文字保留,阅读清晰,符合中文界面默认中文输出要求。
27
+
28
+ ## 仍可继续优化
29
+
30
+ - H1 在 390px 移动端仍然偏大,适合展示型首页;如果是工作台或 SaaS dashboard,应进一步降到 34-42px。
31
+ - 色板区在移动端高度较长,后续可以改为两列紧凑色板或横向 token 列表。
32
+ - 玻璃风在长页面里容易显得每段都很白,后续可加入更明确的非卡片留白区或图形锚点。
33
+
34
+ ## 对 skill 的反推
35
+
36
+ 这次问题主要来自模板和 skill 规则:原模板强调半透明与模糊,不足以指导执行者做出渐变光感系统。现在已在 `SKILL.md` 中加入全局原则,在 Aqua Glass 模板中加入具体渐变 token、中文标题尺度和信息密度规则。脚本也补了超大中文标题、低透明玻璃、负字距和 `lang` 的风险提示。