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.
Files changed (484) hide show
  1. package/README.md +14 -12
  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 +3 -1
  20. package/plugins/workflow-runner/src/agentCommon.js +249 -51
  21. package/plugins/workflow-runner/src/dslManifest.js +72 -0
  22. package/plugins/workflow-runner/src/expressions.js +198 -15
  23. package/plugins/workflow-runner/src/index.js +40 -8
  24. package/plugins/workflow-runner/src/jsonPayload.js +1 -1
  25. package/plugins/workflow-runner/src/loader.js +286 -72
  26. package/plugins/workflow-runner/src/multimodal.js +37 -0
  27. package/plugins/workflow-runner/src/recovery.js +49 -39
  28. package/plugins/workflow-runner/src/runner.js +802 -287
  29. package/plugins/workflow-runner/src/stepExecutors/agent.js +157 -39
  30. package/plugins/workflow-runner/src/stepExecutors/assert.js +16 -3
  31. package/plugins/workflow-runner/src/stepExecutors/llm.js +60 -111
  32. package/plugins/workflow-runner/src/stepExecutors/skill.js +47 -47
  33. package/plugins/workflow-runner/src/stepExecutors/tool.js +76 -10
  34. package/plugins/workflow-runner/src/stepExecutors/verify.js +27 -10
  35. package/plugins/workflow-runner/src/taskIdentity.js +296 -0
  36. package/plugins/workflow-runner/src/types.js +19 -9
  37. package/plugins/workflow-runner/src/workflowState.js +516 -33
  38. package/skills/adversarial-review/SKILL.md +0 -1
  39. package/skills/ai-image/SKILL.md +89 -0
  40. package/skills/ai-image/scripts/generate.mjs +497 -0
  41. package/skills/ai-image/scripts/generate_from_plan.mjs +469 -0
  42. package/skills/ai-image/scripts/generate_from_plan_test.mjs +223 -0
  43. package/skills/ai-image/scripts/generate_test.mjs +74 -0
  44. package/skills/browser-automation/SKILL.md +47 -0
  45. package/skills/docx/SKILL.md +25 -3
  46. package/skills/docx/scripts/office/helpers/__pycache__/__init__.cpython-314.pyc +0 -0
  47. package/skills/docx/scripts/office/helpers/__pycache__/merge_runs.cpython-314.pyc +0 -0
  48. package/skills/docx/scripts/office/helpers/__pycache__/simplify_redlines.cpython-314.pyc +0 -0
  49. package/skills/docx/scripts/office/validators/__pycache__/__init__.cpython-314.pyc +0 -0
  50. package/skills/docx/scripts/office/validators/__pycache__/base.cpython-314.pyc +0 -0
  51. package/skills/docx/scripts/office/validators/__pycache__/docx.cpython-314.pyc +0 -0
  52. package/skills/docx/scripts/office/validators/__pycache__/pptx.cpython-314.pyc +0 -0
  53. package/skills/docx/scripts/office/validators/__pycache__/redlining.cpython-314.pyc +0 -0
  54. package/skills/docx/scripts/opc_check.py +253 -0
  55. package/skills/image-gen-openrouter/SKILL.md +10 -2
  56. package/skills/image-stats/SKILL.md +65 -0
  57. package/skills/image-stats/scripts/__pycache__/image_stats.cpython-314.pyc +0 -0
  58. package/skills/image-stats/scripts/__pycache__/image_stats_test.cpython-314.pyc +0 -0
  59. package/skills/image-stats/scripts/image_stats.py +368 -0
  60. package/skills/image-stats/scripts/image_stats_test.py +181 -0
  61. package/skills/pptx/SKILL.md +123 -95
  62. package/skills/pptx/design.md +82 -0
  63. package/skills/pptx/examples/README.md +29 -0
  64. package/skills/pptx/examples/hybrid_example.mjs +107 -0
  65. package/skills/pptx/examples/hybrid_example.pptx +0 -0
  66. package/skills/pptx/pptxgenjs.md +41 -0
  67. package/skills/pptx/scripts/deck_helpers.mjs +224 -0
  68. package/skills/pptx/scripts/layout_lint.py +293 -0
  69. package/skills/pptx/scripts/layout_lint_test.py +160 -0
  70. package/skills/pptx/scripts/opc_check.py +339 -0
  71. package/skills/pptx/scripts/svg_fallback.mjs +145 -0
  72. package/skills/pptx/svg.md +67 -0
  73. package/skills/tts-zh/SKILL.md +19 -2
  74. package/skills/ui-design/SKILL.md +158 -0
  75. package/skills/ui-design/claude_design.md +309 -0
  76. package/skills/ui-design/evals/evals.json +254 -0
  77. package/skills/ui-design/references/aesthetic-direction.md +83 -0
  78. package/skills/ui-design/references/claude-design-protocol.md +36 -0
  79. package/skills/ui-design/references/design-context.md +53 -0
  80. package/skills/ui-design/references/design-execution-playbook.md +82 -0
  81. package/skills/ui-design/references/export-pptx.md +124 -0
  82. package/skills/ui-design/references/layout-composition.md +654 -0
  83. package/skills/ui-design/references/preview-feedback.md +37 -0
  84. package/skills/ui-design/references/source-image-layout.md +189 -0
  85. package/skills/ui-design/references/starter-components.md +78 -0
  86. package/skills/ui-design/references/vi-aegis-vector.md +144 -0
  87. package/skills/ui-design/references/vi-amber-prism.md +133 -0
  88. package/skills/ui-design/references/vi-aqua-glass.md +200 -0
  89. package/skills/ui-design/references/vi-comfort-vision.md +147 -0
  90. package/skills/ui-design/references/vi-ember-prism.md +140 -0
  91. package/skills/ui-design/references/vi-nebula-console.md +151 -0
  92. package/skills/ui-design/references/vi-obsidian-optics.md +139 -0
  93. package/skills/ui-design/references/vi-obsidian-xui.md +143 -0
  94. package/skills/ui-design/references/vi-precision-horizon-dark.md +117 -0
  95. package/skills/ui-design/references/vi-precision-horizon.md +215 -0
  96. package/skills/ui-design/references/vi-solar-relay.md +130 -0
  97. package/skills/ui-design/references/vi-template-workflow.md +48 -0
  98. package/skills/ui-design/references/vi-verdant-grid.md +141 -0
  99. package/skills/ui-design/references/vi-violet-meridian.md +172 -0
  100. package/skills/ui-design/scripts/__pycache__/assemble_material.cpython-314.pyc +0 -0
  101. package/skills/ui-design/scripts/__pycache__/assemble_material_test.cpython-314.pyc +0 -0
  102. package/skills/ui-design/scripts/__pycache__/chart_sanity_check.cpython-314.pyc +0 -0
  103. package/skills/ui-design/scripts/__pycache__/check_language_policy.cpython-314.pyc +0 -0
  104. package/skills/ui-design/scripts/__pycache__/check_ui_artifact.cpython-314.pyc +0 -0
  105. package/skills/ui-design/scripts/__pycache__/check_ui_artifact_pptx_test.cpython-314.pyc +0 -0
  106. package/skills/ui-design/scripts/__pycache__/deck_pages_check.cpython-314.pyc +0 -0
  107. package/skills/ui-design/scripts/__pycache__/deck_pages_check_test.cpython-314.pyc +0 -0
  108. package/skills/ui-design/scripts/__pycache__/deck_visual_style_check.cpython-314.pyc +0 -0
  109. package/skills/ui-design/scripts/__pycache__/deck_visual_style_check_test.cpython-314.pyc +0 -0
  110. package/skills/ui-design/scripts/__pycache__/design_budget_check.cpython-314.pyc +0 -0
  111. package/skills/ui-design/scripts/__pycache__/design_budget_check_test.cpython-314.pyc +0 -0
  112. package/skills/ui-design/scripts/__pycache__/design_repair_hints.cpython-314.pyc +0 -0
  113. package/skills/ui-design/scripts/__pycache__/design_repair_hints_test.cpython-314.pyc +0 -0
  114. package/skills/ui-design/scripts/__pycache__/design_style_check.cpython-314.pyc +0 -0
  115. package/skills/ui-design/scripts/__pycache__/design_style_check_test.cpython-314.pyc +0 -0
  116. package/skills/ui-design/scripts/__pycache__/draft_coverage_check.cpython-314.pyc +0 -0
  117. package/skills/ui-design/scripts/__pycache__/extract_source_assets.cpython-314.pyc +0 -0
  118. package/skills/ui-design/scripts/__pycache__/extract_source_assets_test.cpython-314.pyc +0 -0
  119. package/skills/ui-design/scripts/__pycache__/generated_image_review_collect.cpython-314.pyc +0 -0
  120. package/skills/ui-design/scripts/__pycache__/generated_image_review_collect_test.cpython-314.pyc +0 -0
  121. package/skills/ui-design/scripts/__pycache__/image_plan_lint.cpython-314.pyc +0 -0
  122. package/skills/ui-design/scripts/__pycache__/image_plan_lint_test.cpython-314.pyc +0 -0
  123. package/skills/ui-design/scripts/__pycache__/image_prompt_rewrite.cpython-314.pyc +0 -0
  124. package/skills/ui-design/scripts/__pycache__/image_prompt_rewrite_test.cpython-314.pyc +0 -0
  125. package/skills/ui-design/scripts/__pycache__/layout_balance.cpython-314.pyc +0 -0
  126. package/skills/ui-design/scripts/__pycache__/layout_balance_test.cpython-314.pyc +0 -0
  127. package/skills/ui-design/scripts/__pycache__/normalize_design_json.cpython-314.pyc +0 -0
  128. package/skills/ui-design/scripts/__pycache__/normalize_design_json_test.cpython-314.pyc +0 -0
  129. package/skills/ui-design/scripts/__pycache__/plan_source_layout.cpython-314.pyc +0 -0
  130. package/skills/ui-design/scripts/__pycache__/plan_source_layout_test.cpython-314.pyc +0 -0
  131. package/skills/ui-design/scripts/__pycache__/resolve_source_hint.cpython-314.pyc +0 -0
  132. package/skills/ui-design/scripts/__pycache__/resolve_source_hint_test.cpython-314.pyc +0 -0
  133. package/skills/ui-design/scripts/__pycache__/resolve_source_input.cpython-314.pyc +0 -0
  134. package/skills/ui-design/scripts/__pycache__/resolve_source_input_test.cpython-314.pyc +0 -0
  135. package/skills/ui-design/scripts/__pycache__/scaffold_ui_artifact.cpython-314.pyc +0 -0
  136. package/skills/ui-design/scripts/__pycache__/source_usage_check.cpython-314.pyc +0 -0
  137. package/skills/ui-design/scripts/__pycache__/source_usage_check_test.cpython-314.pyc +0 -0
  138. package/skills/ui-design/scripts/__pycache__/text_readability_pixel.cpython-314.pyc +0 -0
  139. package/skills/ui-design/scripts/__pycache__/visual_quality_gate.cpython-314.pyc +0 -0
  140. package/skills/ui-design/scripts/__pycache__/visual_quality_gate_test.cpython-314.pyc +0 -0
  141. package/skills/ui-design/scripts/assemble_material.py +217 -0
  142. package/skills/ui-design/scripts/assemble_material_test.py +149 -0
  143. package/skills/ui-design/scripts/browser_check_ui_artifact.mjs +221 -0
  144. package/skills/ui-design/scripts/chart_sanity_check.py +261 -0
  145. package/skills/ui-design/scripts/chart_sanity_check_test.py +165 -0
  146. package/skills/ui-design/scripts/check_language_policy.py +351 -0
  147. package/skills/ui-design/scripts/check_ui_artifact.py +435 -0
  148. package/skills/ui-design/scripts/check_ui_artifact_pptx_test.py +251 -0
  149. package/skills/ui-design/scripts/deck_pages_check.py +158 -0
  150. package/skills/ui-design/scripts/deck_pages_check_test.py +134 -0
  151. package/skills/ui-design/scripts/deck_visual_style_check.py +767 -0
  152. package/skills/ui-design/scripts/deck_visual_style_check_test.py +713 -0
  153. package/skills/ui-design/scripts/design_budget_check.py +271 -0
  154. package/skills/ui-design/scripts/design_budget_check_test.py +183 -0
  155. package/skills/ui-design/scripts/design_repair_hints.py +162 -0
  156. package/skills/ui-design/scripts/design_repair_hints_test.py +54 -0
  157. package/skills/ui-design/scripts/design_style_check.py +397 -0
  158. package/skills/ui-design/scripts/design_style_check_test.py +233 -0
  159. package/skills/ui-design/scripts/draft_coverage_check.py +184 -0
  160. package/skills/ui-design/scripts/draft_coverage_check_test.py +131 -0
  161. package/skills/ui-design/scripts/export_pptx_from_html.mjs +2367 -0
  162. package/skills/ui-design/scripts/extract_source_assets.py +607 -0
  163. package/skills/ui-design/scripts/extract_source_assets_test.py +256 -0
  164. package/skills/ui-design/scripts/generated_image_review_collect.py +206 -0
  165. package/skills/ui-design/scripts/generated_image_review_collect_test.py +91 -0
  166. package/skills/ui-design/scripts/image_plan_lint.py +571 -0
  167. package/skills/ui-design/scripts/image_plan_lint_test.py +515 -0
  168. package/skills/ui-design/scripts/image_prompt_rewrite.py +713 -0
  169. package/skills/ui-design/scripts/image_prompt_rewrite_test.py +966 -0
  170. package/skills/ui-design/scripts/layout_balance.py +881 -0
  171. package/skills/ui-design/scripts/layout_balance_test.py +927 -0
  172. package/skills/ui-design/scripts/normalize_design_json.py +272 -0
  173. package/skills/ui-design/scripts/normalize_design_json_test.py +119 -0
  174. package/skills/ui-design/scripts/plan_source_layout.py +1450 -0
  175. package/skills/ui-design/scripts/plan_source_layout_test.py +1136 -0
  176. package/skills/ui-design/scripts/resolve_source_input.py +270 -0
  177. package/skills/ui-design/scripts/resolve_source_input_test.py +98 -0
  178. package/skills/ui-design/scripts/scaffold_ui_artifact.py +377 -0
  179. package/skills/ui-design/scripts/source_usage_check.py +581 -0
  180. package/skills/ui-design/scripts/source_usage_check_test.py +427 -0
  181. package/skills/ui-design/scripts/text_readability_pixel.py +340 -0
  182. package/skills/ui-design/scripts/text_readability_pixel_test.py +219 -0
  183. package/skills/ui-design/scripts/visual_quality_gate.py +301 -0
  184. package/skills/ui-design/scripts/visual_quality_gate_test.py +233 -0
  185. package/skills/ui-design/tests/e2e/prompts/deck.md +19 -0
  186. package/skills/ui-design/tests/e2e/prompts/webpage.md +17 -0
  187. package/skills/ui-design/tests/e2e/render_check.mjs +101 -0
  188. package/skills/ui-design/tests/e2e/rubric.json +54 -0
  189. package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/checks/browser-check.json +49 -0
  190. package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/checks/language-check.txt +12 -0
  191. package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/checks/static-check.txt +15 -0
  192. package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/outputs/index.html +837 -0
  193. package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/prompt.md +12 -0
  194. package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/review.md +21 -0
  195. package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/screenshots/desktop.png +0 -0
  196. package/skills/ui-design/tests/e2e/runs/aegis-vector-preview-1/screenshots/mobile.png +0 -0
  197. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/outputs/homepage.html +373 -0
  198. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/outputs/platform.html +378 -0
  199. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/prompt.md +13 -0
  200. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/review.md +26 -0
  201. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/screenshots/homepage/browser-check.json +49 -0
  202. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/screenshots/homepage/desktop.png +0 -0
  203. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/screenshots/homepage/mobile.png +0 -0
  204. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/screenshots/platform/browser-check.json +49 -0
  205. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/screenshots/platform/desktop.png +0 -0
  206. package/skills/ui-design/tests/e2e/runs/amber-prism-screenshot-check-1/screenshots/platform/mobile.png +0 -0
  207. package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-1/checks/static-check.txt +2 -0
  208. package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-1/outputs/index.html +656 -0
  209. package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-1/prompt.md +12 -0
  210. package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-1/render_check.mjs +67 -0
  211. package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-2/checks/static-check.txt +2 -0
  212. package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-2/outputs/index.html +587 -0
  213. package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-2/prompt.md +12 -0
  214. package/skills/ui-design/tests/e2e/runs/aqua-glass-iteration-2/review.md +36 -0
  215. package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/checks/browser-check.json +49 -0
  216. package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/checks/language-check.txt +8 -0
  217. package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/checks/static-check.txt +16 -0
  218. package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/outputs/index.html +739 -0
  219. package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/prompt.md +11 -0
  220. package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/review.md +22 -0
  221. package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/screenshots/desktop.png +0 -0
  222. package/skills/ui-design/tests/e2e/runs/aqua-glass-volcano-refresh-1/screenshots/mobile.png +0 -0
  223. package/skills/ui-design/tests/e2e/runs/comfort-vision-preview-1/checks/browser-check.json +52 -0
  224. package/skills/ui-design/tests/e2e/runs/comfort-vision-preview-1/outputs/index.html +641 -0
  225. package/skills/ui-design/tests/e2e/runs/comfort-vision-preview-1/screenshots/desktop.png +0 -0
  226. package/skills/ui-design/tests/e2e/runs/comfort-vision-preview-1/screenshots/mobile.png +0 -0
  227. package/skills/ui-design/tests/e2e/runs/ember-prism-red-preview-1/outputs/index.html +467 -0
  228. package/skills/ui-design/tests/e2e/runs/ember-prism-red-preview-1/screenshots/browser-check.json +49 -0
  229. package/skills/ui-design/tests/e2e/runs/ember-prism-red-preview-1/screenshots/desktop.png +0 -0
  230. package/skills/ui-design/tests/e2e/runs/ember-prism-red-preview-1/screenshots/mobile.png +0 -0
  231. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/outputs/homepage.html +373 -0
  232. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/outputs/platform.html +378 -0
  233. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/prompt.md +13 -0
  234. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/review.md +26 -0
  235. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/screenshots/homepage/browser-check.json +49 -0
  236. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/screenshots/homepage/desktop.png +0 -0
  237. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/screenshots/homepage/mobile.png +0 -0
  238. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/screenshots/platform/browser-check.json +49 -0
  239. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/screenshots/platform/desktop.png +0 -0
  240. package/skills/ui-design/tests/e2e/runs/ember-prism-screenshot-check-1/screenshots/platform/mobile.png +0 -0
  241. package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/checks/browser-check.json +49 -0
  242. package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/checks/language-check.txt +4 -0
  243. package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/checks/static-check.txt +2 -0
  244. package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/execution_notes.md +10 -0
  245. package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/outputs/index.html +587 -0
  246. package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/prompt.md +14 -0
  247. package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/review.md +13 -0
  248. package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/screenshots/desktop.png +0 -0
  249. package/skills/ui-design/tests/e2e/runs/empty-agent-protocol-check/screenshots/mobile.png +0 -0
  250. package/skills/ui-design/tests/e2e/runs/iteration-1/deck/checks/browser-check.json +24 -0
  251. package/skills/ui-design/tests/e2e/runs/iteration-1/deck/checks/static-check.txt +2 -0
  252. package/skills/ui-design/tests/e2e/runs/iteration-1/deck/execution_notes.md +21 -0
  253. package/skills/ui-design/tests/e2e/runs/iteration-1/deck/outputs/deck.html +451 -0
  254. package/skills/ui-design/tests/e2e/runs/iteration-1/deck/screenshots/slide-01.png +0 -0
  255. package/skills/ui-design/tests/e2e/runs/iteration-1/deck/screenshots/slide-02.png +0 -0
  256. package/skills/ui-design/tests/e2e/runs/iteration-1/review.md +79 -0
  257. package/skills/ui-design/tests/e2e/runs/iteration-1/webpage/checks/browser-check.json +26 -0
  258. package/skills/ui-design/tests/e2e/runs/iteration-1/webpage/checks/static-check.txt +2 -0
  259. package/skills/ui-design/tests/e2e/runs/iteration-1/webpage/execution_notes.md +20 -0
  260. package/skills/ui-design/tests/e2e/runs/iteration-1/webpage/outputs/index.html +534 -0
  261. package/skills/ui-design/tests/e2e/runs/iteration-1/webpage/screenshots/desktop.png +0 -0
  262. package/skills/ui-design/tests/e2e/runs/iteration-1/webpage/screenshots/mobile.png +0 -0
  263. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/checks/browser-check.json +64 -0
  264. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/checks/language-check.txt +7 -0
  265. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/checks/quick-validate.txt +1 -0
  266. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/checks/static-console.txt +2 -0
  267. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/checks/static-homepage.txt +2 -0
  268. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/outputs/console.html +600 -0
  269. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/outputs/homepage.html +556 -0
  270. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/prompt.md +29 -0
  271. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/review.md +57 -0
  272. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/screenshots/console-desktop.png +0 -0
  273. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/screenshots/console-mobile.png +0 -0
  274. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/screenshots/homepage-desktop.png +0 -0
  275. package/skills/ui-design/tests/e2e/runs/nebula-console-iteration-1/screenshots/homepage-mobile.png +0 -0
  276. package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/checks/browser-check.json +33 -0
  277. package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/checks/language-check.txt +6 -0
  278. package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/checks/quick-validate.txt +1 -0
  279. package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/checks/static-check.txt +2 -0
  280. package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/outputs/index.html +682 -0
  281. package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/prompt.md +13 -0
  282. package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/review.md +59 -0
  283. package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/screenshots/desktop.png +0 -0
  284. package/skills/ui-design/tests/e2e/runs/obsidian-optics-iteration-1/screenshots/mobile.png +0 -0
  285. package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/outputs/page-01.html +466 -0
  286. package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/outputs/page-02.html +433 -0
  287. package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/prompt.md +13 -0
  288. package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/screenshots/page-01/browser-check.json +49 -0
  289. package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/screenshots/page-01/desktop.png +0 -0
  290. package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/screenshots/page-01/mobile.png +0 -0
  291. package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/screenshots/page-02/browser-check.json +49 -0
  292. package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/screenshots/page-02/desktop.png +0 -0
  293. package/skills/ui-design/tests/e2e/runs/obsidian-xui-screenshot-check-1/screenshots/page-02/mobile.png +0 -0
  294. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/checks/browser-check.json +49 -0
  295. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/checks/language-check.txt +3 -0
  296. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/checks/static-check.txt +2 -0
  297. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/execution_notes.md +24 -0
  298. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/outputs/index.html +723 -0
  299. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/prompt.md +15 -0
  300. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/review.md +26 -0
  301. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/screenshots/desktop.png +0 -0
  302. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-1/screenshots/mobile.png +0 -0
  303. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/checks/browser-dark.json +49 -0
  304. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/checks/browser-light.json +49 -0
  305. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/checks/language-check.txt +11 -0
  306. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/checks/static-dark.txt +2 -0
  307. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/checks/static-light.txt +3 -0
  308. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/execution_notes.md +23 -0
  309. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/outputs/dark.html +392 -0
  310. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/outputs/light.html +476 -0
  311. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/prompt.md +23 -0
  312. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/review.md +41 -0
  313. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/screenshots/dark/desktop.png +0 -0
  314. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/screenshots/dark/mobile.png +0 -0
  315. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/screenshots/light/desktop.png +0 -0
  316. package/skills/ui-design/tests/e2e/runs/precision-horizon-iteration-2/screenshots/light/mobile.png +0 -0
  317. package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/checks/browser-check.json +54 -0
  318. package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/checks/language-check.txt +5 -0
  319. package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/checks/quick-validate.txt +1 -0
  320. package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/checks/static-check.txt +2 -0
  321. package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/outputs/index.html +765 -0
  322. package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/prompt.md +15 -0
  323. package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/review.md +59 -0
  324. package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/screenshots/desktop.png +0 -0
  325. package/skills/ui-design/tests/e2e/runs/solar-relay-iteration-1/screenshots/mobile.png +0 -0
  326. package/skills/ui-design/tests/e2e/runs/verdant-grid-preview-1/outputs/index.html +508 -0
  327. package/skills/ui-design/tests/e2e/runs/verdant-grid-preview-1/screenshots/browser-check.json +49 -0
  328. package/skills/ui-design/tests/e2e/runs/verdant-grid-preview-1/screenshots/desktop.png +0 -0
  329. package/skills/ui-design/tests/e2e/runs/verdant-grid-preview-1/screenshots/mobile.png +0 -0
  330. package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/checks/browser-check.json +54 -0
  331. package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/checks/language-check.txt +6 -0
  332. package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/checks/quick-validate.txt +1 -0
  333. package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/checks/static-check.txt +2 -0
  334. package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/outputs/index.html +788 -0
  335. package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/prompt.md +14 -0
  336. package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/review.md +60 -0
  337. package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/screenshots/desktop.png +0 -0
  338. package/skills/ui-design/tests/e2e/runs/violet-meridian-iteration-1/screenshots/mobile.png +0 -0
  339. package/skills/video-compose/SKILL.md +8 -1
  340. package/skills/web-crawler/SKILL.md +70 -0
  341. package/skills/web-crawler/scripts/crawl.mjs +538 -0
  342. package/skills/web-crawler/scripts/crawl.test.mjs +204 -0
  343. package/skills/xlsx/SKILL.md +12 -0
  344. package/skills/xlsx/scripts/opc_check.py +253 -0
  345. package/src/advisorState.js +22 -0
  346. package/src/askBridge.js +97 -3
  347. package/src/bootstrap/workingDir.js +12 -1
  348. package/src/cli/args.js +17 -1
  349. package/src/cli/configMenu.js +236 -0
  350. package/src/cli/configWizard.js +7 -5
  351. package/src/cli/print.js +37 -4
  352. package/src/cli/streamJson.js +77 -24
  353. package/src/cli/wizards/advisorWizard.js +147 -0
  354. package/src/cli/wizards/fieldForm.js +149 -0
  355. package/src/cli/wizards/imageWizard.js +60 -0
  356. package/src/cli/wizards/openRouterWizard.js +23 -0
  357. package/src/cli/wizards/providerPresets.js +95 -0
  358. package/src/cli/wizards/providerWizard.js +219 -0
  359. package/src/cli/wizards/searchWizard.js +23 -0
  360. package/src/cli/wizards/ttsWizard.js +34 -0
  361. package/src/config/configFile.js +441 -83
  362. package/src/config/configService.js +446 -0
  363. package/src/config.js +24 -64
  364. package/src/context/agentHome.js +9 -0
  365. package/src/context/archive.js +7 -2
  366. package/src/context/compact.js +8 -5
  367. package/src/context/contextLock.js +81 -0
  368. package/src/context/persistContext.js +30 -11
  369. package/src/context/reactiveCompact.js +4 -2
  370. package/src/context/recentDirs.js +21 -61
  371. package/src/context/sessionPath.js +97 -23
  372. package/src/context/sessionRegistry.js +303 -24
  373. package/src/context/tokenCounter.js +18 -0
  374. package/src/context/workspaceIndex.js +731 -0
  375. package/src/infra/verification.js +28 -15
  376. package/src/llm/client.js +394 -159
  377. package/src/llm/providers/anthropicFormat.js +241 -0
  378. package/src/llm/providers/openaiFormat.js +190 -0
  379. package/src/loop.js +219 -32
  380. package/src/main.js +61 -11
  381. package/src/messageQueue.js +97 -0
  382. package/src/multimodal.js +203 -0
  383. package/src/plugin-sdk.js +15 -0
  384. package/src/plugins/commandRouter.js +3 -0
  385. package/src/plugins/hookEngine.js +5 -1
  386. package/src/plugins/pluginLifecycle.js +28 -0
  387. package/src/plugins/pluginLoader.js +2 -1
  388. package/src/plugins/pluginRunner.js +49 -21
  389. package/src/plugins/transcript.js +4 -3
  390. package/src/prompts/pluginList.js +5 -5
  391. package/src/prompts/projectInstructions.js +3 -3
  392. package/src/prompts/promptAssembly.js +133 -144
  393. package/src/prompts/skillList.js +12 -22
  394. package/src/prompts/system.js +0 -1
  395. package/src/session/runAgentTurn.js +70 -0
  396. package/src/session/runTurn.js +41 -6
  397. package/src/toolGate.js +17 -0
  398. package/src/tools/advisor/advisor.js +379 -0
  399. package/src/tools/agent/agent.js +555 -0
  400. package/src/tools/agent/agentTypes.js +59 -0
  401. package/src/tools/agent/coordinator.js +93 -0
  402. package/src/tools/agent/worktree.js +270 -0
  403. package/src/tools/ask/ask.js +7 -2
  404. package/src/tools/bash/bash.js +112 -18
  405. package/src/tools/download/download.js +144 -0
  406. package/src/tools/edit/edit.js +1 -0
  407. package/src/tools/edit/multi-edit.js +1 -0
  408. package/src/tools/genimage/genimage.js +242 -0
  409. package/src/tools/genspeech/genspeech.js +67 -0
  410. package/src/tools/glob/glob.js +1 -0
  411. package/src/tools/grep/grep.js +3 -0
  412. package/src/tools/grep/rgPath.js +2 -0
  413. package/src/tools/index.js +25 -2
  414. package/src/tools/read/read.js +1 -0
  415. package/src/tools/shared/killTree.js +52 -0
  416. package/src/tools/toolProgressBridge.js +48 -0
  417. package/src/tools/webbrowser/agentBrowserPath.js +258 -0
  418. package/src/tools/webbrowser/browser.js +59 -42
  419. package/src/tools/webbrowser/browserControl.js +118 -0
  420. package/src/tools/webbrowser/browserDaemon.js +97 -0
  421. package/src/tools/webbrowser/browserService.js +27 -0
  422. package/src/tools/webbrowser/browserStream.js +119 -0
  423. package/src/tools/webbrowser/webbrowser.js +699 -130
  424. package/src/tools/webfetch/webfetch.js +1 -0
  425. package/src/tools/websearch/websearch.js +134 -51
  426. package/src/tools/write/write.js +1 -0
  427. package/src/ui/App.js +249 -22
  428. package/src/ui/AskQuestion.js +29 -10
  429. package/src/ui/InputBox.js +104 -12
  430. package/src/ui/LiveArea.js +112 -19
  431. package/src/ui/MessageList.js +100 -14
  432. package/src/ui/ModelPicker.js +56 -0
  433. package/src/ui/QueuedMessagesBanner.js +14 -0
  434. package/src/ui/Root.js +18 -10
  435. package/src/ui/SessionPicker.js +102 -0
  436. package/src/ui/StatusLine.js +13 -4
  437. package/src/ui/WorkspacePicker.js +55 -0
  438. package/src/ui/figures.js +44 -0
  439. package/src/ui/hooks/askSlot.js +82 -0
  440. package/src/ui/hooks/useChat.js +358 -64
  441. package/src/ui/hooks/usePasteHandler.js +11 -1
  442. package/src/ui/hooks/useTextBuffer.js +1 -3
  443. package/src/ui/liveViewport.js +5 -1
  444. package/src/ui/markdown.js +206 -0
  445. package/src/ui/textBuffer.js +0 -7
  446. package/src/ui/theme.js +32 -0
  447. package/src/utils/debugLog.js +0 -4
  448. package/src/utils/resourcePaths.js +2 -2
  449. package/src/utils/stripThink.js +50 -0
  450. package/src/web/browserBridge.js +447 -0
  451. package/src/web/protocol.js +19 -0
  452. package/workflows/adaptive-research.yaml +13 -5
  453. package/workflows/book-review-short.yaml +36 -10
  454. package/workflows/e2e-write-greet.yaml +6 -2
  455. package/workflows/illustrate.yaml +227 -0
  456. package/workflows/plan.yaml +460 -179
  457. package/workflows/ppt.yaml +1659 -0
  458. package/workflows/ralph-loop.yaml +199 -0
  459. package/workflows/schema.json +81 -23
  460. package/workflows/webppt.yaml +496 -0
  461. package/workflows/word.yaml +710 -0
  462. package/workflows/youtube-shorts.yaml +46 -15
  463. package/MINIMAL-TRACE.md +0 -77
  464. package/plugins/HOW-TO-WRITE-A-PLUGIN.md +0 -186
  465. package/plugins/ralph-wiggum/.claude-plugin/plugin.json +0 -9
  466. package/plugins/ralph-wiggum/README.md +0 -197
  467. package/plugins/ralph-wiggum/commands/cancel-ralph.md +0 -18
  468. package/plugins/ralph-wiggum/commands/help.md +0 -137
  469. package/plugins/ralph-wiggum/commands/ralph-loop.md +0 -85
  470. package/plugins/ralph-wiggum/hooks/hooks.json +0 -15
  471. package/plugins/ralph-wiggum/hooks/stop-hook.sh +0 -191
  472. package/plugins/ralph-wiggum/plugin.js +0 -280
  473. package/plugins/ralph-wiggum/src/goalState.js +0 -258
  474. package/plugins/ralph-wiggum/src/sentinels.js +0 -76
  475. package/plugins/ralph-wiggum/src/stopHookRunner.js +0 -104
  476. package/plugins/ralph-wiggum/src/verificationGate.js +0 -202
  477. package/plugins/workflow-runner/src/miniReAct.js +0 -223
  478. package/plugins/workflow-runner/src/voteHelpers.js +0 -110
  479. package/skills/config/SKILL.md +0 -123
  480. package/skills/frontend-design/LICENSE.txt +0 -177
  481. package/skills/frontend-design/SKILL.md +0 -42
  482. package/src/ui/ProgressPanel.js +0 -54
  483. package/src/ui/StreamingBlock.js +0 -11
  484. package/src/ui/ToolStatus.js +0 -11
@@ -0,0 +1,723 @@
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>岚镜 S1 产品展示</title>
7
+ <style>
8
+ :root {
9
+ --ink: #111113;
10
+ --ink-soft: #2b2d32;
11
+ --muted: #69717d;
12
+ --paper: #f5f8fb;
13
+ --surface: rgba(255, 255, 255, 0.82);
14
+ --line: rgba(17, 17, 19, 0.12);
15
+ --accent: #2563eb;
16
+ --accent-cool: #61b7dc;
17
+ --metal: #c7ced8;
18
+ --graphite: #4d5562;
19
+ --shadow: rgba(18, 24, 36, 0.16);
20
+ --glow-strength: 1;
21
+ --radius: 28px;
22
+ }
23
+
24
+ * { box-sizing: border-box; }
25
+
26
+ body {
27
+ margin: 0;
28
+ font-family: "PingFang SC", "Microsoft YaHei", "Noto Sans CJK SC", Inter, sans-serif;
29
+ color: var(--ink);
30
+ background:
31
+ radial-gradient(circle at 70% 8%, rgba(97, 183, 220, calc(0.25 * var(--glow-strength))), transparent 30%),
32
+ radial-gradient(circle at 20% 0%, rgba(255, 255, 255, 0.96), transparent 36%),
33
+ linear-gradient(180deg, #f9fbfd 0%, var(--paper) 38%, #edf2f7 100%);
34
+ letter-spacing: 0;
35
+ }
36
+
37
+ body[data-bg="dark"] {
38
+ --ink: #f4f7fb;
39
+ --ink-soft: #dce5ee;
40
+ --muted: #a5b0bd;
41
+ --paper: #0a0d12;
42
+ --surface: rgba(21, 24, 30, 0.82);
43
+ --line: rgba(230, 240, 255, 0.14);
44
+ background:
45
+ radial-gradient(circle at 68% 12%, rgba(97, 183, 220, calc(0.22 * var(--glow-strength))), transparent 34%),
46
+ linear-gradient(180deg, #171b22 0%, #090b10 54%, #050609 100%);
47
+ }
48
+
49
+ a { color: inherit; text-decoration: none; }
50
+
51
+ .shell { min-height: 100vh; overflow: hidden; }
52
+
53
+ .nav {
54
+ position: sticky;
55
+ top: 0;
56
+ z-index: 20;
57
+ display: flex;
58
+ align-items: center;
59
+ justify-content: space-between;
60
+ gap: 24px;
61
+ padding: 18px clamp(22px, 5vw, 72px);
62
+ background: color-mix(in srgb, var(--paper) 76%, transparent);
63
+ border-bottom: 1px solid var(--line);
64
+ }
65
+
66
+ .brand {
67
+ display: flex;
68
+ align-items: center;
69
+ gap: 12px;
70
+ font-weight: 780;
71
+ color: var(--ink);
72
+ }
73
+
74
+ .brand-mark {
75
+ width: 34px;
76
+ height: 34px;
77
+ border-radius: 12px;
78
+ background:
79
+ linear-gradient(135deg, #fefefe, #cdd5df 48%, var(--graphite)),
80
+ linear-gradient(45deg, transparent, rgba(37, 99, 235, 0.5));
81
+ box-shadow: 0 14px 28px var(--shadow);
82
+ position: relative;
83
+ }
84
+
85
+ .brand-mark::after {
86
+ content: "";
87
+ position: absolute;
88
+ inset: 10px;
89
+ border-radius: 50%;
90
+ border: 2px solid rgba(17, 17, 19, 0.5);
91
+ box-shadow: inset 0 0 0 4px rgba(255,255,255,0.72);
92
+ }
93
+
94
+ .nav-links {
95
+ display: flex;
96
+ align-items: center;
97
+ gap: 24px;
98
+ color: var(--muted);
99
+ font-size: 14px;
100
+ }
101
+
102
+ .button {
103
+ min-height: 46px;
104
+ display: inline-flex;
105
+ align-items: center;
106
+ justify-content: center;
107
+ padding: 0 20px;
108
+ border-radius: 999px;
109
+ border: 1px solid var(--line);
110
+ font-weight: 700;
111
+ color: var(--ink);
112
+ background: var(--surface);
113
+ box-shadow: 0 14px 30px rgba(18, 24, 36, 0.08);
114
+ }
115
+
116
+ .button.primary {
117
+ border-color: color-mix(in srgb, var(--accent) 52%, transparent);
118
+ color: #fff;
119
+ background: linear-gradient(135deg, var(--accent), var(--accent-cool));
120
+ box-shadow: 0 20px 42px color-mix(in srgb, var(--accent) 28%, transparent);
121
+ }
122
+
123
+ .hero {
124
+ position: relative;
125
+ min-height: 760px;
126
+ display: grid;
127
+ grid-template-columns: minmax(0, 0.82fr) minmax(420px, 1.18fr);
128
+ align-items: center;
129
+ gap: clamp(24px, 4vw, 72px);
130
+ padding: clamp(64px, 8vw, 120px) clamp(22px, 5vw, 72px) 64px;
131
+ }
132
+
133
+ .hero::before {
134
+ content: "";
135
+ position: absolute;
136
+ left: 8vw;
137
+ right: 8vw;
138
+ bottom: 9%;
139
+ height: 1px;
140
+ background: linear-gradient(90deg, transparent, rgba(77, 85, 98, 0.35), transparent);
141
+ }
142
+
143
+ .eyebrow {
144
+ color: var(--accent);
145
+ font-weight: 780;
146
+ margin-bottom: 18px;
147
+ letter-spacing: 0.08em;
148
+ font-size: 13px;
149
+ }
150
+
151
+ h1 {
152
+ margin: 0;
153
+ max-width: 760px;
154
+ font-size: clamp(46px, 6.2vw, 78px);
155
+ line-height: 1.03;
156
+ letter-spacing: 0;
157
+ text-wrap: balance;
158
+ color: var(--ink);
159
+ }
160
+
161
+ .lead {
162
+ max-width: 560px;
163
+ margin: 24px 0 0;
164
+ font-size: clamp(16px, 1.45vw, 20px);
165
+ line-height: 1.58;
166
+ color: var(--muted);
167
+ }
168
+
169
+ .actions { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 34px; }
170
+
171
+ .hero-specs {
172
+ display: grid;
173
+ grid-template-columns: repeat(3, minmax(0, 1fr));
174
+ gap: 12px;
175
+ margin-top: 44px;
176
+ max-width: 650px;
177
+ }
178
+
179
+ .mini-spec {
180
+ padding: 18px 16px;
181
+ border: 1px solid var(--line);
182
+ border-radius: 18px;
183
+ background: color-mix(in srgb, var(--surface) 86%, transparent);
184
+ }
185
+
186
+ .mini-spec strong {
187
+ display: block;
188
+ font-variant-numeric: tabular-nums;
189
+ font-size: clamp(26px, 3vw, 38px);
190
+ line-height: 1;
191
+ color: var(--ink);
192
+ }
193
+
194
+ .mini-spec span { display: block; margin-top: 8px; color: var(--muted); font-size: 13px; }
195
+
196
+ .product-showcase {
197
+ position: relative;
198
+ min-height: 560px;
199
+ display: grid;
200
+ place-items: center;
201
+ }
202
+
203
+ .product-glow {
204
+ position: absolute;
205
+ width: min(52vw, 680px);
206
+ aspect-ratio: 1.55;
207
+ border-radius: 50%;
208
+ background: radial-gradient(circle, rgba(97,183,220, calc(0.28 * var(--glow-strength))), transparent 68%);
209
+ filter: blur(8px);
210
+ transform: translateY(22px);
211
+ }
212
+
213
+ .horizon-line {
214
+ position: absolute;
215
+ width: min(52vw, 720px);
216
+ height: 190px;
217
+ border: 1px solid rgba(77,85,98,0.18);
218
+ border-left: 0;
219
+ border-right: 0;
220
+ transform: perspective(800px) rotateX(62deg);
221
+ background:
222
+ repeating-linear-gradient(90deg, rgba(77,85,98,0.12) 0 1px, transparent 1px 72px),
223
+ repeating-linear-gradient(0deg, rgba(77,85,98,0.10) 0 1px, transparent 1px 40px);
224
+ opacity: 0.76;
225
+ }
226
+
227
+ .device {
228
+ position: relative;
229
+ width: min(440px, 74vw);
230
+ height: 520px;
231
+ filter: drop-shadow(0 44px 58px rgba(16, 22, 34, 0.26));
232
+ }
233
+
234
+ .gimbal {
235
+ position: absolute;
236
+ left: 112px;
237
+ top: 0;
238
+ width: 220px;
239
+ height: 220px;
240
+ border-radius: 46px;
241
+ background:
242
+ radial-gradient(circle at 52% 46%, #0b0d11 0 29%, #2d3542 30% 42%, #eef2f7 43% 49%, #161b22 50% 100%),
243
+ linear-gradient(145deg, #f6f8fb, #9fa9b5 50%, #3c4552);
244
+ border: 1px solid rgba(255,255,255,0.72);
245
+ box-shadow: inset 0 1px 0 rgba(255,255,255,0.85), 0 18px 45px rgba(23,30,42,0.24);
246
+ }
247
+
248
+ .gimbal::after {
249
+ content: "";
250
+ position: absolute;
251
+ inset: 72px;
252
+ border-radius: 50%;
253
+ background: radial-gradient(circle at 35% 32%, #8fd0ec, #142032 42%, #020407 100%);
254
+ box-shadow: inset 0 0 0 12px rgba(255,255,255,0.72), 0 0 0 1px rgba(255,255,255,0.72);
255
+ }
256
+
257
+ .stem {
258
+ position: absolute;
259
+ left: 178px;
260
+ top: 180px;
261
+ width: 92px;
262
+ height: 240px;
263
+ border-radius: 32px;
264
+ background: linear-gradient(120deg, #f8fafc 0%, #c8d0dc 36%, #707986 74%, #303844 100%);
265
+ border: 1px solid rgba(255,255,255,0.76);
266
+ box-shadow: inset 14px 0 22px rgba(255,255,255,0.72), inset -12px 0 24px rgba(20,28,38,0.22);
267
+ }
268
+
269
+ .base {
270
+ position: absolute;
271
+ left: 122px;
272
+ bottom: 28px;
273
+ width: 210px;
274
+ height: 118px;
275
+ border-radius: 34px;
276
+ background: linear-gradient(145deg, #e8edf3, #a6b0bd 46%, #434d5a);
277
+ border: 1px solid rgba(255,255,255,0.7);
278
+ box-shadow: inset 0 1px 0 rgba(255,255,255,0.82);
279
+ }
280
+
281
+ .base::before {
282
+ content: "S1";
283
+ position: absolute;
284
+ right: 28px;
285
+ top: 24px;
286
+ color: rgba(17,17,19,0.54);
287
+ font-weight: 850;
288
+ font-size: 28px;
289
+ }
290
+
291
+ .callout {
292
+ position: absolute;
293
+ padding: 12px 14px;
294
+ border: 1px solid var(--line);
295
+ border-radius: 16px;
296
+ background: color-mix(in srgb, var(--surface) 92%, transparent);
297
+ box-shadow: 0 18px 36px rgba(18, 24, 36, 0.12);
298
+ color: var(--ink-soft);
299
+ font-size: 13px;
300
+ font-weight: 700;
301
+ }
302
+
303
+ .callout.one { right: 2%; top: 18%; }
304
+ .callout.two { left: 4%; bottom: 28%; }
305
+
306
+ section {
307
+ padding: clamp(70px, 8vw, 120px) clamp(22px, 5vw, 72px);
308
+ }
309
+
310
+ .section-head {
311
+ max-width: 820px;
312
+ margin-bottom: 38px;
313
+ }
314
+
315
+ .section-head h2 {
316
+ margin: 0;
317
+ font-size: clamp(34px, 4vw, 58px);
318
+ line-height: 1.08;
319
+ letter-spacing: 0;
320
+ text-wrap: balance;
321
+ }
322
+
323
+ .section-head p {
324
+ margin: 18px 0 0;
325
+ color: var(--muted);
326
+ font-size: 17px;
327
+ line-height: 1.6;
328
+ }
329
+
330
+ .feature-grid {
331
+ display: grid;
332
+ grid-template-columns: 1.12fr 0.88fr;
333
+ gap: 18px;
334
+ }
335
+
336
+ .feature-card {
337
+ min-height: 320px;
338
+ padding: clamp(24px, 3vw, 38px);
339
+ border: 1px solid var(--line);
340
+ border-radius: var(--radius);
341
+ background: color-mix(in srgb, var(--surface) 92%, transparent);
342
+ box-shadow: 0 26px 70px rgba(18, 24, 36, 0.10);
343
+ overflow: hidden;
344
+ position: relative;
345
+ }
346
+
347
+ .feature-card h3 { margin: 0; font-size: 26px; line-height: 1.2; }
348
+ .feature-card p { margin: 14px 0 0; color: var(--muted); line-height: 1.62; }
349
+
350
+ .sensor-visual {
351
+ position: absolute;
352
+ right: -24px;
353
+ bottom: -24px;
354
+ width: 260px;
355
+ height: 180px;
356
+ border-radius: 42px;
357
+ background:
358
+ radial-gradient(circle at 52% 48%, rgba(37,99,235,0.9) 0 8%, #08111f 9% 26%, #dfe7f0 27% 32%, #707986 33% 100%);
359
+ opacity: 0.9;
360
+ box-shadow: inset 0 1px 0 rgba(255,255,255,0.8), 0 26px 60px rgba(37,99,235,0.18);
361
+ }
362
+
363
+ .trail-visual {
364
+ margin-top: 34px;
365
+ height: 160px;
366
+ border-radius: 26px;
367
+ border: 1px solid var(--line);
368
+ background:
369
+ linear-gradient(90deg, transparent, rgba(37,99,235,0.14), transparent),
370
+ repeating-linear-gradient(90deg, rgba(77,85,98,0.12) 0 1px, transparent 1px 58px);
371
+ position: relative;
372
+ overflow: hidden;
373
+ }
374
+
375
+ .trail-visual::before {
376
+ content: "";
377
+ position: absolute;
378
+ left: 8%;
379
+ top: 52%;
380
+ width: 84%;
381
+ height: 3px;
382
+ border-radius: 999px;
383
+ background: linear-gradient(90deg, transparent, var(--accent), var(--accent-cool), transparent);
384
+ box-shadow: 0 0 24px color-mix(in srgb, var(--accent) 45%, transparent);
385
+ }
386
+
387
+ .spec-grid {
388
+ display: grid;
389
+ grid-template-columns: repeat(4, minmax(0, 1fr));
390
+ gap: 14px;
391
+ }
392
+
393
+ .spec-card {
394
+ padding: 26px;
395
+ min-height: 190px;
396
+ border-radius: 24px;
397
+ border: 1px solid var(--line);
398
+ background: var(--surface);
399
+ }
400
+
401
+ .spec-card b {
402
+ display: block;
403
+ font-variant-numeric: tabular-nums;
404
+ font-size: clamp(32px, 4vw, 56px);
405
+ line-height: 1;
406
+ color: var(--ink);
407
+ }
408
+
409
+ .spec-card small { display: block; margin-top: 12px; color: var(--muted); line-height: 1.5; font-size: 14px; }
410
+
411
+ .scene {
412
+ display: grid;
413
+ grid-template-columns: 0.9fr 1.1fr;
414
+ gap: 24px;
415
+ align-items: stretch;
416
+ }
417
+
418
+ .scene-panel {
419
+ min-height: 430px;
420
+ border-radius: 34px;
421
+ padding: 34px;
422
+ border: 1px solid var(--line);
423
+ background:
424
+ radial-gradient(circle at 78% 18%, rgba(97,183,220,0.28), transparent 30%),
425
+ linear-gradient(145deg, rgba(255,255,255,0.86), rgba(226,233,241,0.72));
426
+ position: relative;
427
+ overflow: hidden;
428
+ }
429
+
430
+ .scene-panel.dark {
431
+ color: #f4f7fb;
432
+ background:
433
+ radial-gradient(circle at 64% 24%, rgba(37,99,235,0.35), transparent 34%),
434
+ linear-gradient(145deg, #1b2028, #07090d);
435
+ }
436
+
437
+ .scene-panel h3 { margin: 0; font-size: 30px; }
438
+ .scene-panel p { max-width: 410px; color: color-mix(in srgb, currentColor 72%, transparent); line-height: 1.62; }
439
+
440
+ .comparison {
441
+ border: 1px solid var(--line);
442
+ border-radius: 30px;
443
+ overflow: hidden;
444
+ background: var(--surface);
445
+ }
446
+
447
+ .row {
448
+ display: grid;
449
+ grid-template-columns: 1.1fr repeat(3, 1fr);
450
+ min-height: 76px;
451
+ border-bottom: 1px solid var(--line);
452
+ }
453
+
454
+ .row:last-child { border-bottom: 0; }
455
+ .cell { padding: 22px; display: flex; align-items: center; color: var(--muted); }
456
+ .cell strong { color: var(--ink); }
457
+ .cell.highlight { color: var(--ink); font-weight: 760; background: color-mix(in srgb, var(--accent) 7%, transparent); }
458
+
459
+ .final-cta {
460
+ text-align: center;
461
+ padding-bottom: 120px;
462
+ }
463
+
464
+ .final-cta h2 {
465
+ margin: 0 auto;
466
+ max-width: 800px;
467
+ font-size: clamp(38px, 5vw, 72px);
468
+ line-height: 1.08;
469
+ text-wrap: balance;
470
+ }
471
+
472
+ .final-cta p {
473
+ margin: 18px auto 0;
474
+ max-width: 620px;
475
+ color: var(--muted);
476
+ font-size: 18px;
477
+ line-height: 1.6;
478
+ }
479
+
480
+ .tweak-panel {
481
+ position: fixed;
482
+ right: 18px;
483
+ bottom: 18px;
484
+ z-index: 30;
485
+ display: none;
486
+ gap: 8px;
487
+ padding: 10px;
488
+ border: 1px solid var(--line);
489
+ border-radius: 18px;
490
+ background: var(--surface);
491
+ box-shadow: 0 20px 44px var(--shadow);
492
+ }
493
+
494
+ .tweak-panel[data-active="true"] { display: flex; }
495
+ .tweak-panel button {
496
+ min-width: 44px;
497
+ min-height: 44px;
498
+ border: 1px solid var(--line);
499
+ border-radius: 999px;
500
+ background: #fff;
501
+ color: #111113;
502
+ font-weight: 700;
503
+ }
504
+
505
+ @media (max-width: 900px) {
506
+ .nav-links { display: none; }
507
+ .hero {
508
+ min-height: auto;
509
+ grid-template-columns: 1fr;
510
+ padding-top: 58px;
511
+ }
512
+ .product-showcase { min-height: 500px; order: -1; }
513
+ .hero-specs, .spec-grid { grid-template-columns: 1fr; }
514
+ .feature-grid, .scene { grid-template-columns: 1fr; }
515
+ .row { grid-template-columns: 1fr; }
516
+ .cell { min-height: 58px; }
517
+ .callout.one { right: 0; top: 10%; }
518
+ .callout.two { left: 0; bottom: 18%; }
519
+ }
520
+
521
+ @media (max-width: 520px) {
522
+ .nav { padding: 14px 18px; }
523
+ .hero, section { padding-left: 18px; padding-right: 18px; }
524
+ h1 { font-size: clamp(38px, 13vw, 54px); }
525
+ .product-showcase { min-height: 440px; }
526
+ .device { transform: scale(0.84); transform-origin: center; }
527
+ .hero-specs { margin-top: 28px; }
528
+ .actions .button { width: 100%; }
529
+ .feature-card, .scene-panel { border-radius: 22px; }
530
+ }
531
+ </style>
532
+ </head>
533
+ <body>
534
+ <div class="shell" data-screen-label="01 岚镜产品首页">
535
+ <nav class="nav" aria-label="主导航">
536
+ <a class="brand" href="#">
537
+ <span class="brand-mark" aria-hidden="true"></span>
538
+ <span>岚镜 S1</span>
539
+ </a>
540
+ <div class="nav-links" aria-label="页面章节">
541
+ <a href="#features">亮点</a>
542
+ <a href="#specs">参数</a>
543
+ <a href="#scenes">场景</a>
544
+ <a href="#compare">对比</a>
545
+ </div>
546
+ <a class="button primary" href="#buy">预约体验</a>
547
+ </nav>
548
+
549
+ <main>
550
+ <section class="hero">
551
+ <div>
552
+ <div class="eyebrow">冷雾科技产品展示 VI 样张</div>
553
+ <h1>把稳定影像装进口袋的智能云台相机</h1>
554
+ <p class="lead">岚镜 S1 为旅行创作者和短片团队准备。它把三轴稳定、夜景算法、无线收音和快速剪辑放进一台轻量设备,让每一次出发都能留下可交付的画面。</p>
555
+ <div class="actions">
556
+ <a class="button primary" href="#buy">预约试用</a>
557
+ <a class="button" href="#specs">查看参数</a>
558
+ </div>
559
+ <div class="hero-specs" aria-label="核心参数">
560
+ <div class="mini-spec"><strong>4K</strong><span>120fps 高速动作更清晰</span></div>
561
+ <div class="mini-spec"><strong>1"</strong><span>大底传感器提升夜景纯净度</span></div>
562
+ <div class="mini-spec"><strong>312g</strong><span>单手拍摄,长途携带更轻</span></div>
563
+ </div>
564
+ </div>
565
+
566
+ <div class="product-showcase" aria-label="产品视觉">
567
+ <div class="product-glow"></div>
568
+ <div class="horizon-line"></div>
569
+ <div class="device" role="img" aria-label="原创云台相机抽象渲染">
570
+ <div class="gimbal"></div>
571
+ <div class="stem"></div>
572
+ <div class="base"></div>
573
+ </div>
574
+ <div class="callout one">低光画面更干净</div>
575
+ <div class="callout two">三轴机械稳定</div>
576
+ </div>
577
+ </section>
578
+
579
+ <section id="features">
580
+ <div class="section-head">
581
+ <h2>用产品镜头讲清楚能力,而不是堆满卡片</h2>
582
+ <p>本样张把参数、材质和场景拆成连续章节,测试 Precision Horizon 是否能稳定生成高端产品展示页。</p>
583
+ </div>
584
+ <div class="feature-grid">
585
+ <article class="feature-card">
586
+ <h3>一英寸感光核心</h3>
587
+ <p>更大的进光量让夜景、室内采访和日落场景都保留细节。参数不是孤立数字,而是直接连接到可感知的画面收益。</p>
588
+ <div class="sensor-visual" aria-hidden="true"></div>
589
+ </article>
590
+ <article class="feature-card">
591
+ <h3>从开机到成片更短</h3>
592
+ <p>内置 AI 片段识别、语音标记和自动分组,拍完即可整理素材,适合小团队快速交付。</p>
593
+ <div class="trail-visual" aria-hidden="true"></div>
594
+ </article>
595
+ </div>
596
+ </section>
597
+
598
+ <section id="specs">
599
+ <div class="section-head">
600
+ <h2>核心参数要像发布会一样可扫描</h2>
601
+ <p>大数字负责建立信任,短说明负责把技术翻译成用户收益。</p>
602
+ </div>
603
+ <div class="spec-grid">
604
+ <div class="spec-card"><b>14 档</b><small>高动态范围,逆光人像和城市夜景更稳。</small></div>
605
+ <div class="spec-card"><b>8 小时</b><small>配合充电手柄,覆盖一整天创作节奏。</small></div>
606
+ <div class="spec-card"><b>32-bit</b><small>浮点收音,突发大音量也更容易后期修复。</small></div>
607
+ <div class="spec-card"><b>2 秒</b><small>抽出开机,快速进入跟拍和采访状态。</small></div>
608
+ </div>
609
+ </section>
610
+
611
+ <section id="scenes">
612
+ <div class="section-head">
613
+ <h2>场景展示让高级感落到真实使用</h2>
614
+ </div>
615
+ <div class="scene">
616
+ <article class="scene-panel">
617
+ <h3>城市夜行</h3>
618
+ <p>冷雾背景承接夜景、街灯和金属材质,蓝色轨迹提示稳定跟拍路径。</p>
619
+ </article>
620
+ <article class="scene-panel dark">
621
+ <h3>户外记录</h3>
622
+ <p>深色剧场用于表达专业拍摄和复杂光线,让产品边缘与参数更有发布感。</p>
623
+ </article>
624
+ </div>
625
+ </section>
626
+
627
+ <section id="compare">
628
+ <div class="section-head">
629
+ <h2>型号对比保持克制,不把页面变成表格</h2>
630
+ </div>
631
+ <div class="comparison" role="table" aria-label="型号对比">
632
+ <div class="row" role="row">
633
+ <div class="cell"><strong>能力</strong></div>
634
+ <div class="cell"><strong>岚镜 S1</strong></div>
635
+ <div class="cell"><strong>岚镜 S1 Pro</strong></div>
636
+ <div class="cell"><strong>岚镜轻量版</strong></div>
637
+ </div>
638
+ <div class="row" role="row">
639
+ <div class="cell">传感器</div>
640
+ <div class="cell highlight">一英寸大底</div>
641
+ <div class="cell">一英寸大底</div>
642
+ <div class="cell">紧凑传感器</div>
643
+ </div>
644
+ <div class="row" role="row">
645
+ <div class="cell">适合人群</div>
646
+ <div class="cell highlight">旅行创作者</div>
647
+ <div class="cell">短片团队</div>
648
+ <div class="cell">日常记录</div>
649
+ </div>
650
+ <div class="row" role="row">
651
+ <div class="cell">核心优势</div>
652
+ <div class="cell highlight">轻量与画质平衡</div>
653
+ <div class="cell">专业接口更多</div>
654
+ <div class="cell">入门更轻便</div>
655
+ </div>
656
+ </div>
657
+ </section>
658
+
659
+ <section id="buy" class="final-cta">
660
+ <h2>一台设备,完成从拍摄到整理的第一步</h2>
661
+ <p>预约体验岚镜 S1,查看它是否适合你的旅行记录、团队短片和移动采访流程。</p>
662
+ <div class="actions" style="justify-content:center">
663
+ <a class="button primary" href="#">预约线下体验</a>
664
+ <a class="button" href="#">下载产品资料</a>
665
+ </div>
666
+ </section>
667
+ </main>
668
+ </div>
669
+
670
+ <div class="tweak-panel" id="tweakPanel" aria-label="调整">
671
+ <button type="button" data-accent="#2563eb">蓝</button>
672
+ <button type="button" data-accent="#5fb4d9">青</button>
673
+ <button type="button" data-bg="dark">暗</button>
674
+ <button type="button" data-bg="light">亮</button>
675
+ </div>
676
+
677
+ <!--
678
+ /*EDITMODE-BEGIN*/
679
+ {
680
+ "name": "Precision Horizon 产品展示样张",
681
+ "edits": {
682
+ "accent": "#2563eb",
683
+ "background": "light",
684
+ "glowStrength": 1
685
+ }
686
+ }
687
+ /*EDITMODE-END*/
688
+ -->
689
+
690
+ <script>
691
+ const root = document.documentElement;
692
+ const body = document.body;
693
+ const panel = document.getElementById('tweakPanel');
694
+
695
+ function applyEdits(edits) {
696
+ if (!edits) return;
697
+ if (edits.accent) root.style.setProperty('--accent', edits.accent);
698
+ if (typeof edits.glowStrength === 'number') root.style.setProperty('--glow-strength', edits.glowStrength);
699
+ if (edits.background === 'dark') body.dataset.bg = 'dark';
700
+ if (edits.background === 'light') body.dataset.bg = 'light';
701
+ }
702
+
703
+ window.addEventListener('message', (event) => {
704
+ const data = event.data || {};
705
+ if (data.type === '__activate_edit_mode') panel.dataset.active = 'true';
706
+ if (data.type === '__deactivate_edit_mode') panel.dataset.active = 'false';
707
+ if (data.type === '__edit_mode_apply') applyEdits(data.edits || data.keys);
708
+ });
709
+
710
+ panel.addEventListener('click', (event) => {
711
+ const button = event.target.closest('button');
712
+ if (!button) return;
713
+ const patch = {};
714
+ if (button.dataset.accent) patch.accent = button.dataset.accent;
715
+ if (button.dataset.bg) patch.background = button.dataset.bg;
716
+ applyEdits(patch);
717
+ window.parent.postMessage({ type: '__edit_mode_set_keys', edits: patch }, '*');
718
+ });
719
+
720
+ window.parent.postMessage({ type: '__edit_mode_available' }, '*');
721
+ </script>
722
+ </body>
723
+ </html>