@amaster.ai/pi-lark 0.1.2-beta.44 → 0.1.2-beta.45

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 (122) hide show
  1. package/package.json +2 -2
  2. package/skills/lark-apps/SKILL.md +23 -12
  3. package/skills/lark-apps/creative-design/agents/assets/vision-probe.png +0 -0
  4. package/skills/lark-apps/creative-design/agents/fork-verifier-agent.md +71 -0
  5. package/skills/lark-apps/creative-design/agents/vision-probe-agent.md +41 -0
  6. package/skills/lark-apps/creative-design/assets/index.html +27 -0
  7. package/skills/lark-apps/creative-design/creative-design.md +239 -0
  8. package/skills/lark-apps/creative-design/references/aily.md +39 -0
  9. package/skills/lark-apps/creative-design/references/animated-video.md +34 -0
  10. package/skills/lark-apps/creative-design/references/charts.md +165 -0
  11. package/skills/lark-apps/creative-design/references/claude.md +36 -0
  12. package/skills/lark-apps/creative-design/references/codex.md +32 -0
  13. package/skills/lark-apps/creative-design/references/data-report.md +108 -0
  14. package/skills/lark-apps/creative-design/references/frontend-design.md +71 -0
  15. package/skills/lark-apps/creative-design/references/hi-fi-design.md +32 -0
  16. package/skills/lark-apps/creative-design/references/interactive-prototype.md +24 -0
  17. package/skills/lark-apps/creative-design/references/make-a-deck.md +133 -0
  18. package/skills/lark-apps/creative-design/references/visual-exposure.md +82 -0
  19. package/skills/lark-apps/creative-design/references/wireframe.md +14 -0
  20. package/skills/lark-apps/creative-design/starter-components/android-frame.jsx +188 -0
  21. package/skills/lark-apps/creative-design/starter-components/animations.jsx +773 -0
  22. package/skills/lark-apps/creative-design/starter-components/browser-window.jsx +122 -0
  23. package/skills/lark-apps/creative-design/starter-components/deck-stage.js +2483 -0
  24. package/skills/lark-apps/creative-design/starter-components/design-canvas.jsx +1432 -0
  25. package/skills/lark-apps/creative-design/starter-components/ios-frame.jsx +270 -0
  26. package/skills/lark-apps/creative-design/starter-components/macos-window.jsx +197 -0
  27. package/skills/lark-apps/creative-design/starter-components/tweaks-panel.jsx +752 -0
  28. package/skills/lark-apps/references/lark-apps-automation.md +80 -2
  29. package/skills/lark-apps/references/lark-apps-cloud-dev.md +0 -1
  30. package/skills/lark-apps/references/lark-apps-create.md +1 -2
  31. package/skills/lark-apps/references/lark-apps-db.md +1 -1
  32. package/skills/lark-apps/references/lark-apps-env-pull.md +1 -1
  33. package/skills/lark-apps/references/lark-apps-file.md +1 -1
  34. package/skills/lark-apps/references/lark-apps-git-credential.md +1 -1
  35. package/skills/lark-apps/references/lark-apps-html-publish.md +4 -8
  36. package/skills/lark-apps/references/lark-apps-init.md +1 -1
  37. package/skills/lark-apps/references/lark-apps-list.md +1 -1
  38. package/skills/lark-apps/references/lark-apps-local-dev.md +54 -11
  39. package/skills/lark-apps/references/lark-apps-openapi-key.md +1 -1
  40. package/skills/lark-apps/references/lark-apps-release-create.md +2 -2
  41. package/skills/lark-apps/references/lark-apps-release-get.md +3 -3
  42. package/skills/lark-base/SKILL.md +1 -2
  43. package/skills/lark-base/references/lark-base-cell-value.md +3 -3
  44. package/skills/lark-base/references/lark-base-field-create.md +4 -0
  45. package/skills/lark-base/references/lark-base-field-json.md +4 -4
  46. package/skills/lark-base/references/lark-base-field-update.md +17 -1
  47. package/skills/lark-base/references/lark-base-record-batch-create.md +12 -10
  48. package/skills/lark-base/references/lark-base-record-batch-update.md +11 -9
  49. package/skills/lark-base/references/lark-base-record-upsert.md +1 -1
  50. package/skills/lark-calendar/references/lark-calendar-create.md +1 -0
  51. package/skills/lark-calendar/references/lark-calendar-update.md +3 -0
  52. package/skills/lark-doc/references/lark-doc-fetch.md +10 -2
  53. package/skills/lark-doc/references/lark-doc-whiteboard.md +9 -8
  54. package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +41 -0
  55. package/skills/lark-doc/references/lark-doc-xml.md +3 -2
  56. package/skills/lark-drive/SKILL.md +4 -1
  57. package/skills/lark-drive/references/lark-drive-comment-location.md +2 -2
  58. package/skills/lark-drive/references/lark-drive-upload.md +1 -0
  59. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-execute.md +273 -0
  60. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-recall.md +202 -0
  61. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-resolve-verify.md +231 -0
  62. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-review-plan.md +248 -0
  63. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-setup.md +174 -0
  64. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector.md +202 -0
  65. package/skills/lark-drive/references/lark-drive-workflow.md +5 -4
  66. package/skills/lark-event/SKILL.md +1 -0
  67. package/skills/lark-event/references/lark-event-application.md +38 -0
  68. package/skills/lark-im/SKILL.md +1 -1
  69. package/skills/lark-im/references/lark-im-flag-list.md +8 -7
  70. package/skills/lark-okr/SKILL.md +71 -26
  71. package/skills/lark-okr/references/lark-okr-batch-create.md +19 -18
  72. package/skills/lark-okr/references/lark-okr-create.md +173 -0
  73. package/skills/lark-okr/references/lark-okr-cycle-list.md +17 -7
  74. package/skills/lark-okr/references/lark-okr-entities.md +1 -0
  75. package/skills/lark-okr/references/lark-okr-indicator-update.md +3 -1
  76. package/skills/lark-okr/references/lark-okr-indicators.md +61 -12
  77. package/skills/lark-okr/references/lark-okr-progress-list.md +21 -9
  78. package/skills/lark-slides/SKILL.md +103 -46
  79. package/skills/lark-slides/references/asset-planning.md +6 -4
  80. package/skills/lark-slides/references/iconpark.md +2 -2
  81. package/skills/lark-slides/references/lark-slides-create.md +2 -3
  82. package/skills/lark-slides/references/lark-slides-history.md +132 -0
  83. package/skills/lark-slides/references/lark-slides-media-upload.md +1 -2
  84. package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +7 -11
  85. package/skills/lark-slides/references/lark-slides-replace-slide.md +0 -3
  86. package/skills/lark-slides/references/lark-slides-screenshot.md +1 -1
  87. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +219 -0
  88. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +6 -5
  89. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +2 -2
  90. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +2 -3
  91. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +65 -30
  92. package/skills/lark-slides/references/planning-layer.md +11 -10
  93. package/skills/lark-slides/references/slides_chart_demo.xml +1416 -1
  94. package/skills/lark-slides/references/slides_xml_schema_definition.xml +1 -45
  95. package/skills/lark-slides/references/troubleshooting.md +25 -7
  96. package/skills/lark-slides/references/validation-checklist.md +33 -13
  97. package/skills/lark-slides/references/visual-planning.md +25 -22
  98. package/skills/lark-slides/references/xml-schema-quick-ref.md +225 -46
  99. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +223 -22
  100. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +183 -124
  101. package/skills/lark-whiteboard/SKILL.md +13 -12
  102. package/skills/lark-whiteboard/elements/layout.md +1 -1
  103. package/skills/lark-whiteboard/elements/schema.md +2 -2
  104. package/skills/lark-whiteboard/references/{lark-whiteboard-query.md → lark-whiteboard-export.md} +15 -15
  105. package/skills/lark-whiteboard/references/lark-whiteboard-update.md +3 -3
  106. package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +7 -17
  107. package/skills/lark-whiteboard/routes/dsl.md +3 -3
  108. package/skills/lark-whiteboard/routes/mermaid.md +2 -2
  109. package/skills/lark-whiteboard/routes/svg-edit.md +4 -4
  110. package/skills/lark-whiteboard/routes/svg.md +11 -6
  111. package/skills/lark-whiteboard/scenes/bar-chart.md +1 -1
  112. package/skills/lark-whiteboard/scenes/fishbone.md +1 -1
  113. package/skills/lark-whiteboard/scenes/flywheel.md +1 -1
  114. package/skills/lark-whiteboard/scenes/line-chart.md +1 -1
  115. package/skills/lark-whiteboard/scenes/treemap.md +1 -1
  116. package/skills/lark-wiki/SKILL.md +1 -0
  117. package/skills/lark-slides/references/examples.md +0 -91
  118. package/skills/lark-slides/references/lark-slides-whiteboard.md +0 -331
  119. package/skills/lark-slides/references/lark-slides-xml-get.md +0 -100
  120. package/skills/lark-slides/references/slide-templates.md +0 -201
  121. package/skills/lark-slides/references/slides_demo.xml +0 -226
  122. package/skills/lark-slides/references/xml-format-guide.md +0 -433
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amaster.ai/pi-lark",
3
- "version": "0.1.2-beta.44",
3
+ "version": "0.1.2-beta.45",
4
4
  "description": "Pi extension for Lark/Feishu workspace — calendar, docs, drive, sheets, tasks, mail and more via lark-cli.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -61,7 +61,7 @@
61
61
  "vitest": "^4.0.0"
62
62
  },
63
63
  "dependencies": {
64
- "@amaster.ai/pi-shared": "0.1.2-beta.44"
64
+ "@amaster.ai/pi-shared": "0.1.2-beta.45"
65
65
  },
66
66
  "scripts": {
67
67
  "fetch-skills": "node scripts/fetch-skills.mjs",
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: lark-apps
3
3
  version: 1.0.0
4
- description: "妙搭(Spark/Miaoda)应用开发与托管:应用创建、HTML静态站点发布、本地全栈开发、云端生成迭代、AI相关能力和飞书平台能力或者其他外部能力集成、日志/Trace/监控指标/PV/UV 查询、环境变量管理、应用角色与成员管理、自动化触发器(定时/记录变更/Webhook/飞书审批)。当用户要开发/新建一个系统·工具·平台·应用,或要本地开发 / 云端开发 / 修改 / 部署 / 发布 / 上线 / 拿可分享链接,或用 HTML 做页面·网站·部署到妙搭,或提到妙搭/Spark/Miaoda(应用运行时域名形如 *.aiforce.cloud)、应用数据库、应用文件存储、开放 API Key、可见范围、应用角色/角色成员、线上日志、接口请求量、错误量、延迟、访问量、环境变量、给妙搭应用配自动化任务/定时触发/审批通过后自动触发时使用。不负责普通云盘文件上传(lark-drive)、飞书文档编辑(lark-doc)、原生幻灯片创建(lark-slides)。"
4
+ description: "妙搭(Spark/Miaoda)应用开发与托管:应用创建、本地全栈开发、云端生成迭代、创意设计(UI mockup / 可交互原型 / 线框图 / 落地页 / 仪表盘 / 幻灯片 deck / 视觉探索)、AI相关能力和飞书平台能力或者其他外部能力集成、日志/Trace/监控指标/PV/UV 查询、环境变量管理、应用角色与成员管理、自动化触发器(定时/记录变更/Webhook/飞书审批)。当用户要开发/新建一个系统·工具·平台·应用,或要本地开发 / 云端开发 / 修改 / 部署 / 发布 / 上线 / 拿可分享链接,或用 HTML 做页面·网站·部署到妙搭,或要设计 / design / mockup / prototype / wireframe / 做 PPT / deck / 视觉探索,或提到妙搭/Spark/Miaoda(应用运行时域名形如 *.aiforce.cloud)、应用数据库、应用文件存储、开放 API Key、可见范围、应用角色/角色成员、线上日志、接口请求量、错误量、延迟、访问量、环境变量、给妙搭应用配自动化任务/定时触发/审批通过后自动触发时使用。不负责普通云盘文件上传(lark-drive)、飞书文档编辑(lark-doc)、原生幻灯片创建(lark-slides)。"
5
5
  metadata:
6
6
  requires:
7
7
  bins: ["lark-cli"]
@@ -10,7 +10,7 @@ metadata:
10
10
 
11
11
  # apps (v1)
12
12
 
13
- 妙搭应用属于用户资产。默认用 `--as user`;认证、scope、exit-10、高风险确认、`_notice` 等通用处理只读 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),不要在本 skill 里复制。妙搭应用有三条开发路径:**本地全栈**(拉源码本地写)/ **HTML 托管**(发布静态产物)/ **云端会话**(妙搭 AI 生成)。
13
+ 妙搭应用属于用户资产。默认用 `--as user`;认证、scope、exit-10、高风险确认、`_notice` 等通用处理只读 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),不要在本 skill 里复制。妙搭应用有两条开发路径:**本地开发**(拉源码本地写)/ **云端会话**(妙搭 AI 生成)。
14
14
 
15
15
  ## 身份与授权
16
16
 
@@ -32,16 +32,18 @@ lark-cli auth login --domain apps
32
32
  | 找已有 app_id、按名字过滤应用 | `+list --keyword <name>` | [`lark-apps-list.md`](references/lark-apps-list.md) |
33
33
  | 查单个应用详情(类型、名称、发布状态等) | `+get --app-id <app_id>` | [`lark-apps-get.md`](references/lark-apps-get.md) |
34
34
  | 改应用名或描述 | `+update` | [`lark-apps-update.md`](references/lark-apps-update.md) |
35
- | 发布本地 `index.html` 或静态目录为可访问 URL | `+html-publish` | [`lark-apps-html-publish.md`](references/lark-apps-html-publish.md) |
36
- | 开发已有应用 / 初始化本地仓库(开发方式已定为本地后;先解析 app_id,勿 `+create` 新建) | `+init`(或手动 `+git-credential-init` + 原生 git)。**执行前必读** [`lark-apps-local-dev.md`](references/lark-apps-local-dev.md);修改源码还须遵守下方「平台资源与应用源码边界」 | [`lark-apps-init.md`](references/lark-apps-init.md), [`lark-apps-git-credential.md`](references/lark-apps-git-credential.md) |
35
+ | HTML 应用 / 创意模式 — 写 HTML 页面/网站、静态页、PPT/deck、落地页、仪表盘、UI mockup、原型、线框图、视觉探索 | 加载 [`creative-design/creative-design.md`](creative-design/creative-design.md)(含完整开发与发布流程) | [`creative-design/creative-design.md`](creative-design/creative-design.md) |
36
+ | 旧版存量 HTML 应用(无 Git 管理)继续上传已有静态产物 | `+html-publish`(仅兼容旧链路;新建 html / 创意模式 / creative-design 产物不得使用) | [`lark-apps-html-publish.md`](references/lark-apps-html-publish.md) |
37
+ | 开发已有应用 / 初始化本地仓库(开发方式已定为本地后;先解析 app_id,勿 `+create` 新建) | `+init`(或手动 `+git-credential-init` + 原生 git)。**执行前必读** [`lark-apps-local-dev.md`](references/lark-apps-local-dev.md),含端到端流程和领域规则 | [`lark-apps-init.md`](references/lark-apps-init.md), [`lark-apps-git-credential.md`](references/lark-apps-git-credential.md) |
37
38
  | 本地开发时 `.env.local` 损坏/丢失,重新拉取启动期环境变量 | `+env-pull` | [`lark-apps-env-pull.md`](references/lark-apps-env-pull.md) |
38
39
  | 管理应用环境变量(查看/设置/删除) | `+env-list`, `+env-set`, `+env-delete` | [`lark-apps-env.md`](references/lark-apps-env.md) |
39
40
  | 查线上日志、Trace、请求数、错误率、延迟、CPU、memory、PV/UV/访问量 | `+log-list`, `+log-get`, `+trace-list`, `+trace-get`, `+metric-list`, `+analytics-list` | [`lark-apps-observability.md`](references/lark-apps-observability.md) |
40
41
  | 看表 / 看结构 / 初始化多环境 / 导入导出数据 / 变更追溯 / 行级审计 / dev→online 发布 / 时间点恢复 / 查 DB 用量 | `+db-table-list`、`+db-table-get`、`+db-env-create`、`+db-data-export`/`+db-data-import`、`+db-changelog-list`、`+db-audit-status`/`+db-audit-enable`/`+db-audit-disable`/`+db-audit-list`、`+db-env-diff`/`+db-env-migrate`、`+db-recovery-diff`/`+db-recovery-apply`、`+db-quota-get` | [`lark-apps-db.md`](references/lark-apps-db.md) |
41
42
  | 逐条执行 SQL(SELECT / DML / DDL);建表 / 改表 / 写 SQL 的平台规范 | `+db-execute` | [`lark-apps-db-execute.md`](references/lark-apps-db-execute.md)(含「平台 SQL 规范」:审计列 / RLS / `user_profile` / 禁用 SQL / PG 陷阱) |
42
43
  | 管理应用文件存储:上传/下载本地文件、列出/查看/删除已存文件、生成临时分享链接、查存储用量 | `+file-upload`/`+file-download`/`+file-list`/`+file-get`/`+file-sign`/`+file-delete`/`+file-quota-get` | [`lark-apps-file.md`](references/lark-apps-file.md) |
43
- | **部署/上线全栈应用**("部署""上线""推上去并部署""发布到云端");查发布状态/历史 | `+release-create`(部署上线动作), `+release-get`(轮询发布结果,finished 给 online_url / failed 给 error_logs), `+release-list` | [`lark-apps-release-create.md`](references/lark-apps-release-create.md), [`lark-apps-release-get.md`](references/lark-apps-release-get.md), [`lark-apps-release-list.md`](references/lark-apps-release-list.md) |
44
+ | **部署/上线应用**("部署""上线""推上去并部署""发布到云端");查发布状态/历史 | 本地开发链路先按 [`lark-apps-local-dev.md`](references/lark-apps-local-dev.md) 确认本次改动已 git commit + git push,再用 `+release-create` / `+release-get`;查历史用 `+release-list` | [`lark-apps-local-dev.md`](references/lark-apps-local-dev.md), [`lark-apps-release-create.md`](references/lark-apps-release-create.md), [`lark-apps-release-get.md`](references/lark-apps-release-get.md), [`lark-apps-release-list.md`](references/lark-apps-release-list.md) |
44
45
  | 设置或查看运行时可见范围 | `+access-scope-set`, `+access-scope-get` | 对应 access-scope reference |
46
+ | 创意模式(html)应用的评论相关操作 | 创意模式应用评论走 lark-drive 文档评论体系,读取 [`../lark-drive/SKILL.md`](../lark-drive/SKILL.md) 了解评论能力 | [`../lark-drive/SKILL.md`](../lark-drive/SKILL.md) |
45
47
  | 管理 `app_...` 应用内角色、角色成员,或查询用户匹配角色 | `+role-list/get/create/update/delete`, `+role-member-list/add/remove`, `+role-match-list` | [`lark-apps-role.md`](references/lark-apps-role.md) |
46
48
  | 云端 Agent 生成/迭代应用(开发方式已定为云端后) | `+session-create` -> `+chat` -> `+session-get` | [`lark-apps-cloud-dev.md`](references/lark-apps-cloud-dev.md) |
47
49
  | 管理妙搭应用开放 API Key(创建/查看/启停/重置/删除凭证;密钥仅 create/reset 一次性返回) | `+openapi-key-list/get/create/update/enable/disable/delete/reset` | [`lark-apps-openapi-key.md`](references/lark-apps-openapi-key.md) |
@@ -63,9 +65,9 @@ lark-cli auth login --domain apps
63
65
 
64
66
  | 信号 | 判定 |
65
67
  |---|---|
66
- | 静态展示 / 单页 / PPT/demo / 无后端状态 | `app_type=html`,跳过本地/云端轴,开发完按 [`lark-apps-html-publish.md`](references/lark-apps-html-publish.md)(含"未提部署→先问是否发布") |
68
+ | 静态展示 / 单页 / PPT/deck / demo / 落地页 / 仪表盘 / UI mockup / 可交互原型 / 线框图 / 视觉探索 / 无后端状态 | `app_type=html`,加载 [`creative-design/creative-design.md`](creative-design/creative-design.md)(含完整开发与发布流程) |
67
69
  | 登录 / 数据库 / 持久化 / 多人协作 / 增删改查 / 报名 / 投票 / 站会 / OKR / 泛称"系统·工具" | `app_type=full_stack` |
68
- | 用户要自己写 / 本地 IDE·code agent / 拉源码到本地 / 交研发 | 本地全栈,读 [`lark-apps-local-dev.md`](references/lark-apps-local-dev.md) |
70
+ | 用户要自己写 / 本地 IDE·code agent / 拉源码到本地 / 交研发 | 本地开发,读 [`lark-apps-local-dev.md`](references/lark-apps-local-dev.md) |
69
71
  | 让妙搭 AI 云端生成 / 对话式 / 自己不碰代码 | 云端会话,读 [`lark-apps-cloud-dev.md`](references/lark-apps-cloud-dev.md) |
70
72
  | 未表达"谁来写"偏好 | **必须先问**(本地代码开发 vs 云端 AI 生成);选定前不擅自选边、不暗示默认,不得以"需求不模糊"为由跳过提问直接 `+init` / `git clone` / `+session-create` / 首轮 `+chat` |
71
73
  | 修改已有 + 当前目录是 `.spark/meta.json` 项目 | 直接继续本地按意图路由,不必问也不必判云端 |
@@ -75,16 +77,19 @@ lark-cli auth login --domain apps
75
77
 
76
78
  - **发布意图判定**:用户要"可访问 / 线上 / 分享 / 新链接 / 上线" = 发布意图,先走发布链路、确认完成再给链接。
77
79
  - 完成 ≠ 发布:云端会话完成 / `+list is_published=true` 都不代表最新内容已部署。
78
- - 开发态链接 `https://miaoda.feishu.cn/app/{app_id}`:进应用编辑/开发态、管理与继续开发应用的入口。发布成功后,连同发布态链接一并提供给用户(说明"管理 / 继续开发去这里");但它仅进编辑态,**不能**顶替发布态链接当分享链接。
79
- - 发布态链接来源:html → `+html-publish` 的 `data.url`;全栈 → `+release-get` 轮询 `finished` 给 `online_url` / `failed` 给 `error_logs`。
80
- - **可见范围**:发布态链接(html 的 `data.url`、全栈的 `online_url`)默认仅**创建者可见**,发给他人对方会无权限打不开。当可分享链接交付给用户前,先告知当前仅本人可见,再询问是否用 `+access-scope-set`(`tenant`/`public`/`specific`)放开(可先 `+access-scope-get` 查当前范围)。
80
+ - 开发态链接 `https://miaoda.feishu.cn/app/{app_id}`(仅 full_stack 应用):进应用编辑/开发态、管理与继续开发应用的入口。创意模式(html)应用开发态和发布态是同一个链接,无需额外提供开发态链接。
81
+ - 发布态链接来源:`+release-get` 轮询 `finished` 给 `online_url` / `failed` 给 `error_logs`(html 和 full_stack 统一走 `+release-get`)。
82
+ - html 应用的主链路是创意模式开发方式:按 [`lark-apps-local-dev.md`](references/lark-apps-local-dev.md) 初始化仓库、在仓库内产出 HTML 及关联文件,并通过 git commit / git push / `+release-create` / `+release-get` 发布部署。任何 git 操作(clone / pull / push)报错时,先执行 `lark-cli apps +git-credential-init --app-id <app_id> --as user` 刷新本地 Git 凭证,再重试原 git 命令。如果刷新凭证也失败,**停止并向用户报告**:原始 git 错误、凭证刷新失败原因,以及是否可能是当前环境(操作系统、沙箱)限制导致(如 macOS Keychain 在沙箱中不可用、Linux 加密文件目录不可写等)。不要改走 `+html-publish`,也不要把 `+html-publish` 当作本地开发链路的 fallback。
83
+ - 创意模式(html)应用的链接格式为 `https://{租户域名}/page/{meta_token}`,**开发态和发布态是同一个链接**(区别于 full_stack 应用两者分开)。此链接形似飞书文档链接。`+get --app-id <meta_token>` 可获取应用信息(含 `app_id`),`+get --app-id <app_id>` 可获取 `meta_token`。看到 `/page/xxx` 链接时,它是妙搭创意模式应用,不要当成飞书文档跳过。
81
84
 
82
85
  ## 平台资源与应用源码边界
83
86
 
87
+ - `apps` 命令的 `--path`、`--file`、`--output` 等路径参数只接受当前工作目录(cwd)下的相对路径,传绝对路径会报错。如果目标文件不在 cwd 下,先 `cd` 到目标目录再执行命令。
88
+ - 图片、字体、音视频等资源型文件属于平台资源,不应提交到 git 仓库、引用本地路径或以 base64 内联到源码中。先通过 `lark-cli apps +file-upload --app-id <app_id> --file <local_path>` 上传到应用文件存储,拿到返回的远端 URL 后在代码中引用。上传返回的链接按 app 隔离,不同应用必须各自重新上传,不能跨应用复用同一链接。详情读 [`lark-apps-file.md`](references/lark-apps-file.md)。
84
89
  - `apps +role-*` 只管理平台角色资源;修改已初始化应用的源码(包括当前目录已经是应用项目)时,先查看工作区 `.agents/skills/`,完整读取与任务匹配的领域 skill,再按其路由读取所需 reference。角色鉴权或运行态角色管理读应用内 `authz-guide`,不能用本 skill 的平台命令参考推断运行时合同。
85
90
  - `lark-cli` 只用于开发过程中的平台资源核验或变更。应用运行时代码必须使用工程内领域 skill 规定的 SDK,禁止通过 `exec` 或子进程调用 `lark-cli`。
86
91
  - 平台回读出的当前资源 ID、名称和成员只用于事实核验,不自动构成业务策略;除非需求或应用内领域 skill 明确定义,禁止把当前样本硬编码成 allowlist、denylist、只读集合或权限规则。
87
- - 实现领域 SDK 时,以实际包导出的类型和应用内领域 reference 记录的入参、响应路径为准;禁止修改 ambient `.d.ts`、补造宽松类型或强制断言,让猜测的 SDK 结构仅在本地“编译通过”。
92
+ - 实现领域 SDK 时,以实际包导出的类型和应用内领域 reference 记录的入参、响应路径为准;禁止修改 ambient `.d.ts`、补造宽松类型或强制断言,让猜测的 SDK 结构仅在本地"编译通过"。
88
93
  - typecheck/build 成功不等于合同正确。交付前逐项核对每个 SDK 调用的入参、响应取值路径和策略分支;涉及更新、删除等不同动作时,分别验证各自动作所需的完整状态,不能复用更弱的前置判断。
89
94
  - 源码任务交付前确认新增页面、Controller、Module 已接入真实 router/bootstrap,并运行项目现有 typecheck/build;只创建未接线文件不算完成。
90
95
  - `+access-scope-*` 只管运行时可见范围(谁能打开应用),不是角色权限;应用协作者/开发权限仍需使用妙搭 Web。自动化触发器请用 `+automation-*`(见「意图路由」)。
@@ -93,6 +98,12 @@ lark-cli auth login --domain apps
93
98
 
94
99
  `app_id` 必须是妙搭应用 ID(`app_` 开头)。`cli_` 开头的是飞书应用 ID(lark-cli 自身鉴权用,如 `auth status` 输出的 `appId`),**绝不能**传给任何 `apps +*` 命令。
95
100
 
101
+ 如果你拿到的是 `https://{租户域名}/page/<meta_token>` 这类链接里的 meta_token — 这是创意模式应用的 **meta_token**(链接形似飞书文档),先用 `+get` 解析出 `app_id`。如果拿到的不是链接、也不是 `app_` 开头,可能是裸 meta_token,同样先用 `+get --app-id <token>` 尝试获取应用信息,能正常返回则说明是 meta_token:
102
+
103
+ ```bash
104
+ lark-cli apps +get --app-id <meta_token> -q '.data.app.app_id'
105
+ ```
106
+
96
107
  按顺序尝试,不要一上来要求用户手填:
97
108
 
98
109
  1. 用户给出 `app_xxx` 或妙搭链接(如 `/app/app_xxx`)时直接提取。
@@ -107,4 +118,4 @@ lark-cli auth login --domain apps
107
118
  ## 高影响动作:确认与预授权
108
119
 
109
120
  - **预授权判定**:判断用户是否表达了"放手做完、不用中途逐步问我"的意图——明确免确认(如"别问 / 直接做 / 自己定"),或要求一气呵成做到完成(如"做完部署上线给我")。是 → 整个流程按合理默认往下走、不再逐步确认(含 clone 到派生目录、发布等);否 → 缺失参数(如目录)该问就问、高影响动作先确认。
110
- - **禁止预授权判定底线**(即便已预授权也不豁免):① 会删/丢数据或不可逆的 DB 操作(判据见 [`lark-apps-db-execute.md`](references/lark-apps-db-execute.md))先 `--dry-run` 确认;② `+role-delete`、`+role-member-remove --all`、批量移除成员必须先确认 app、role、成员范围和后果,不能从泛化"直接做"推导出 `--yes`;命令式“删除/移除某对象”只确定操作目标,不等于用户已确认不可逆后果,未明确确认时应在说明影响后停下请求确认;③ `+html-publish` 体积超限时(判据见 [`lark-apps-html-publish.md`](references/lark-apps-html-publish.md)),立即停止并转述超限项。
121
+ - **禁止预授权判定底线**(即便已预授权也不豁免):① 会删/丢数据或不可逆的 DB 操作(判据见 [`lark-apps-db-execute.md`](references/lark-apps-db-execute.md))先 `--dry-run` 确认;② `+role-delete`、`+role-member-remove --all`、批量移除成员必须先确认 app、role、成员范围和后果,不能从泛化"直接做"推导出 `--yes`;命令式"删除/移除某对象"只确定操作目标,不等于用户已确认不可逆后果,未明确确认时应在说明影响后停下请求确认;③ `+html-publish` 体积超限时(判据见 [`lark-apps-html-publish.md`](references/lark-apps-html-publish.md)),立即停止并转述超限项。
@@ -0,0 +1,71 @@
1
+ # Fork verifier (read-only)
2
+
3
+ You are a **read-only** verification subagent spawned to check a design
4
+ deliverable the main agent just built or edited. Your **only** job: load that
5
+ deliverable, verify it, and report a single verdict — `done` or `needs_work` —
6
+ back to the main agent. **You must not modify, create, or delete any file**,
7
+ edit the source, build, or take any other action. You read, probe, and report —
8
+ nothing else. Resolve every tool named below to your harness's equivalent via
9
+ its reference doc (`references/<harness>.md`): a generic action like "show the
10
+ file" or "evaluate JS in-page" maps to your harness's preview / eval tool.
11
+
12
+ ## Input
13
+
14
+ You are given the **project directory**, the **path(s) of the HTML file(s)** the
15
+ main agent built or edited, and the served
16
+ `http://localhost:<port>/<file>.html` URL to load (always over HTTP —
17
+ never `file://`). The caller may also include an explicit image-input status:
18
+ `image input supported` or `image input unsupported`. You do **not** inherit the
19
+ main agent's transcript; verify only what these inputs point at.
20
+
21
+ ## What to do
22
+
23
+ 1. Show the file the main agent built/edited (your harness's show-file / preview
24
+ tool — upstream `show_html`).
25
+ 2. Read the console / webview logs (upstream `get_webview_logs`) — console
26
+ errors? failed loads?
27
+ 3. Screenshot — layout / spacing / type / content look right? Skip screenshot
28
+ reads only when the caller explicitly says image input is unsupported; in
29
+ that case continue with console and JS/DOM checks and state that visual
30
+ screenshot review was skipped.
31
+ 4. Evaluate JS in-page (upstream `eval_js`) to probe if something seems off. For
32
+ overflow/alignment issues, diagnose the constraint before reporting:
33
+
34
+ ```js
35
+ const el = document.querySelector('...'); const p = el.parentElement;
36
+ const pick = (e, cs) => ({rect: e.getBoundingClientRect(), boxSizing: cs.boxSizing, display: cs.display, position: cs.position, width: cs.width, height: cs.height, minHeight: cs.minHeight, flexDirection: cs.flexDirection});
37
+ JSON.stringify({el: pick(el, getComputedStyle(el)), parent: pick(p, getComputedStyle(p))});
38
+ ```
39
+
40
+ Include the result in your `needs_work` description so the main agent fixes
41
+ the root cause (box-sizing, flex `min-height:auto`, percentage height with no
42
+ resolved parent height), not the pixel symptom.
43
+ 5. If the authored source uses `var(--*)`: evaluate JS to collect every custom
44
+ property DEFINED in the loaded stylesheets (any selector / `@layer` /
45
+ `@media`, not just `:root`):
46
+
47
+ ```js
48
+ const defined = new Set();
49
+ const walk = rs => { for (const r of rs||[]) { if (r.style) for (const p of r.style) if (p.startsWith('--')) defined.add(p); try { walk(r.cssRules || r.styleSheet?.cssRules); } catch {} } };
50
+ for (const ss of document.styleSheets) try { walk(ss.cssRules); } catch {}
51
+ JSON.stringify([...defined]);
52
+ ```
53
+
54
+ Then grep the authored file for `var\(--[a-zA-Z0-9_-]+` and report any
55
+ referenced name not in the defined set as unresolved.
56
+ 6. Report your verdict — `done` or `needs_work` with a description — as your
57
+ **final message** back to the main agent (upstream
58
+ `verification_feedback({verdict, description})`). The verdict IS the
59
+ deliverable; do not end on a prose summary with no verdict.
60
+
61
+ ## Rules
62
+
63
+ - **Read-only, always.** Never write or edit files, build, serve, or run write
64
+ scripts. The upstream `write_file`, `str_replace_edit`, `show_to_user`,
65
+ `update_todos`, and `run_script` are all off-limits — if something is wrong you
66
+ *report* it; the main agent fixes it and re-runs you.
67
+ - **`needs_work` = REAL problems only** — broken layout, console errors, missing
68
+ content, unresolved `var(--*)` tokens. Not nitpicks.
69
+ - **The verdict is the only exit.** A text-only reply with no `done` /
70
+ `needs_work` verdict is a dead end — always end with the verdict + description.
71
+ - Always load over the served `http://localhost:…` URL, never `file://`.
@@ -0,0 +1,41 @@
1
+ # Vision probe (read-only)
2
+
3
+ You are a **read-only** capability probe spawned before a design task tries to
4
+ read or inspect screenshots. Your only job is to determine whether this Claude
5
+ Code session's current model/provider can accept image input.
6
+
7
+ ## Input
8
+
9
+ You are given the absolute path to a tiny PNG probe image — the committed asset
10
+ that ships with this skill, usually:
11
+
12
+ ```text
13
+ <skill>/agents/assets/vision-probe.png
14
+ ```
15
+
16
+ ## What to do
17
+
18
+ 1. Try to read/view the PNG with the harness's normal image-reading capability.
19
+ The probe image is a small colorful square with a dark X/border so successful
20
+ image input should be recognizable without needing any project context.
21
+ 2. If the image is visible to you, final-answer exactly:
22
+
23
+ ```text
24
+ VISION_OK
25
+ ```
26
+
27
+ 3. If the image cannot be read, the provider rejects image input, a tool fails,
28
+ or you are not sure, final-answer exactly:
29
+
30
+ ```text
31
+ VISION_UNSUPPORTED
32
+ ```
33
+
34
+ ## Rules
35
+
36
+ - **Read-only, always.** Do not write, edit, delete, serve, preview, or inspect
37
+ any project files.
38
+ - Do not read real design screenshots. This probe must touch only the tiny probe
39
+ image path provided by the main agent.
40
+ - Do not explain your reasoning in the final response. The main agent needs one
41
+ exact token only: `VISION_OK` or `VISION_UNSUPPORTED`.
@@ -0,0 +1,27 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title></title>
8
+ <script
9
+ src="https://sf3-scmcdn-cn.feishucdn.com/obj/feishu-static/miaoda/coding-unpkg-sdk/react@18.3.1/umd/react.development.js"
10
+ crossorigin="anonymous"></script>
11
+ <script
12
+ src="https://sf3-scmcdn-cn.feishucdn.com/obj/feishu-static/miaoda/coding-unpkg-sdk/react-dom@18.3.1/umd/react-dom.development.js"
13
+ crossorigin="anonymous"></script>
14
+ <script
15
+ src="https://sf3-scmcdn-cn.feishucdn.com/obj/feishu-static/miaoda/coding-unpkg-sdk/@babel/standalone@7.29.0/babel.min.js"
16
+ crossorigin="anonymous"></script>
17
+ <!-- 其他内容 -->
18
+ </head>
19
+
20
+ <body>
21
+ <div id="root">
22
+ <!-- React 组件将渲染到这里 -->
23
+ </div>
24
+ <!-- 其他内容 -->
25
+ </body>
26
+
27
+ </html>
@@ -0,0 +1,239 @@
1
+ ---
2
+ name: creative-design
3
+ description: 以自包含 HTML 创建精致的设计产物:UI mockup、可交互原型、线框图(wireframe)、落地页、仪表盘、应用屏幕、移动 App、幻灯片 deck(即 PPT / PowerPoint 演示文稿)、动画视频(motion graphics、产品演示 Demo 动画、数据动画)、可视化报告 / 信息图(infographic)/ 视觉长图与视觉探索。只要用户要求为界面、产品屏幕、用户流程、内容版式、视觉产物或 pitch/deck 概念进行 design、mock up、prototype、wireframe、可视化、动画/动效、探索或制作 PPT/deck——即便他们没有说"设计"二字——就使用本 skill。Harness 无关:适用于 Aily、Claude Code、Codex Agent 及类似的具备文件能力的 agent。
4
+ ---
5
+
6
+ ## 目录结构与运行环境
7
+ 本 skill 附带以下资源,路径均相对于本文件所在目录:
8
+
9
+ - `references/<name>.md` — 媒介专属技能 prompt(如 `frontend-design.md`、`hi-fi-design.md`、`charts.md` 等;见文末「Skills 元信息」的完整列表)。与下方 harness 工具映射表同在 `references/` 目录。
10
+ - `starter-components/` — 现成的 HTML/JS/JSX 脚手架(`design-canvas.jsx`、`deck-stage.js`、`ios-frame.jsx`、`android-frame.jsx`、`tweaks-panel.jsx`、`macos-window.jsx`、`browser-window.jsx`、`animations.jsx`)。见下文「Starter Components」。
11
+ - `references/<harness>.md` — **harness 专属工具映射表**(`claude.md`、`codex.md`、`aily.md`)。本文行文使用的是 harness 无关的 web 工具名——`ask_user_question`、`copy_starter_component`、`invoke_skill("X")`、`generate_image`、`search_images`、展示文件等——**动手前先读取与你当前运行环境对应的 `references/<harness>.md`,把这些名字映射成你 harness 里的真实工具**。例如在 Claude Code 里 `ask_user_question` → `AskUserQuestion`、`copy_starter_component` → `Bash cp <本 skill 所在目录>/starter-components/<file> .`、`invoke_skill("X")` → `Read references/<file>.md`。
12
+ - `assets/index.html` — React + Babel 的 HTML 起步模板(锁定版本 script 标签 + `#root` 挂载点),见下文「React + Babel」。
13
+
14
+ ## 工作流
15
+ 1. 理解用户需求。对全新或含糊的工作,提出澄清性问题。弄清输出物、精细度(fidelity)、选项数量、约束条件,以及涉及的 UI kit 与品牌。
16
+ 2. 探索所提供的资源。附件、文档链接、网页 URL 都要在动手前解析完(见「输入资料解析」)。
17
+ 3. 列出 todo 清单。
18
+ 4. 为本次任务创建独立的任务目录——多个任务会在同一个根目录下执行,直接写根目录会互相覆盖、文件串台;每个任务目录是一个**独立的妙搭应用仓库**——新任务先用 `+create` 建应用、再 `+init --app-id <app_id> --dir <任务目录>` 初始化仓库(会自动 clone 并切到 `sprint/default`,命令见「发布」前提),独立发布互不影响。把资源复制进任务目录,在其中创建交付物。用图片素材提升美观度与丰富度、或需要有依据的内容时,按「图像素材与外部信息」补充。
19
+ 5. (如有)自检React + Babel路径是否正确;ReactDOM.createRoot 是否参数正确,对应元素是否存在
20
+ 6. 收尾:提交你的改动。
21
+ 7. 发布:把产物发布到妙搭拿到可访问链接(见下方「发布」)。写完不发布,用户拿不到线上链接。
22
+ 8. 极其简短地总结——只讲注意事项与后续步骤,并给出发布后的可访问链接。
23
+
24
+ 鼓励你并发调用文件探索工具以提升效率。
25
+
26
+ ## 提问
27
+ 默认基于用户给的信息、项目上下文和合理假设直接开始,不为收集偏好而打断。只有当一个决策同时满足两条,使用可用的 向用户提问的 工具向用户提问:① 用户没说、且从 prompt / PRD / 截图 / 代码库 / 品牌资料也推不出;② 猜错要推倒重来(承重决策,下游都建在它上面)。两条只要有一条不成立——能合理推断,或猜错只是局部返工——就直接做。
28
+
29
+ 承重、推不出就必须先问的:交付媒介 / 格式(报告 vs deck vs 看板);视觉 / 美学方向(从零起的项目、且资料里推不出一个有把握不返工的方向时);大体量交付(整套 deck、多页产物)的受众 / 目的与核心范围。
30
+ 局部、给默认直接做的:变体数量与探索维度、界面文案、占位与示例内容、单屏 / 单组件的处理与密度——给合理默认(变体默认摆 2-3 个有清晰差异的方案),让用户在产出上重定向,不为它们提问。
31
+
32
+ 例如:
33
+
34
+ - "做一份关于 X 的报告/材料"但没说格式 → 媒介推不出且承重,先确认交付格式(幻灯片 vs. 视觉报告 vs. 仪表盘),再问格式相关的问题。
35
+ - 为附带的 PRD 做一套 deck → PRD 能推出受众 / 场景就直接做;只有受众、篇幅推不出且影响全局时才问。
36
+ - 用这份 PRD 为 Eng All Hands 做一套 10 分钟的 deck → 无需提问;信息已足够。
37
+ - 把这张截图变成交互原型 → 只有当图片无法说明预期行为时才提问。
38
+ - 做 6 页关于黄油历史的幻灯片 → 媒介、页数已定,直接开工;风格能从主题推断就定,推不出再问。
39
+ - 为我的外卖 app 的 onboarding 做一套原型 → 按常见 onboarding 流程直接做;只问会阻塞产出的承重问题。
40
+
41
+ 当交付格式本身不明确时——用户只说了一个成果("一份报告""材料""一份摘要")却没说媒介——先解决格式,再讨论任何与格式相关的细节。
42
+
43
+ 问出好问题至关重要。技巧:
44
+
45
+ - 通常一轮聚焦提问就够;把承重的未知一次问齐,不要挤牙膏式多轮打断。
46
+ - 只问推不出的;能从 PRD、截图、代码库、品牌资产、现有页面和用户原话推断的,先推断,并在产出里说明你的假设。
47
+
48
+ ## 输入资料解析
49
+ 用户给的附件、文档链接和 URL 是设计的输入,必须在动手前解析完——数据看板、报告和基于文档的 deck 全都建立在源资料之上,跳过这一步产出的内容只能靠编造。按输入形态处理:
50
+
51
+ - **数据文件(csv / json / xlsx)**——先看结构(列名、字段类型、行数)和样本行,再决定信息层级与图表选型;指标一律用脚本从源数据计算,不要目测。
52
+ - **压缩包(zip)**——先解压到临时目录,逐个查看内容物,再按各自类型处理。
53
+ - **文档(docx / pdf / 论文 / 需求文档)**——用当前 harness 的文档解析能力读取**全文**(映射见 `references/<harness>.md`;Aily 原生支持解析 Word / PDF 等二进制文件),不要只读开头就动手。
54
+ - **飞书云文档 / 多维表格链接**——用 `lark-cli` 读取内容(云文档 / 多维表格相关命令,不确定用法先查 `--help`);`lark-cli` 不可用时向用户说明并请其导出或粘贴,不要凭标题猜内容。
55
+ - **网页 URL**——用 `web_fetch` 抓取全文后再产出;抓取失败就告知用户,不要凭 URL 和常识编写。
56
+
57
+ ## 如何开展设计工作
58
+ 动手前先读取 **`./references/frontend-design.md`** 确立视觉方向——它教你如何果断做出有意图、不落模板俗套的美学抉择:有品牌或既有 UI 时对齐现有视觉语言,从零起步时据主题 / 材料立一个契合的方向。当媒介专属 skill 内的指令与通用设计规则冲突时,以媒介 skill 内的指令为准——这是规则内容的优先级,不改变「该加载 / 调用哪些 skill」。
59
+
60
+ 当用户请你做高保真 UI mockup、界面设计或带多方案的视觉探索时,开始之前先读取 **`./references/hi-fi-design.md`**——它涵盖了设计流程、获取设计上下文、提问以及呈现多个方案。
61
+
62
+ 一次设计探索的输出是单个 HTML 文档。根据你所探索的内容选择呈现格式:
63
+
64
+ - **静态视觉 / 设计稿 / 多方案探索**(颜色、字体、单个元素、整屏 UI、流程关键帧)→ 通过 `starter-components/design-canvas.jsx` starter component 把各方案铺陈在画布上。除非用户明确要求可点击 / 可交互,否则不要把设计稿升级成点击原型。
65
+ - **用户明确要求可交互的流程或产品 demo** → 将整个产品做成高保真可点击原型,并把关键选项以 Tweak 形式暴露出来。可交互原型禁止使用 `starter-components/design-canvas.jsx`、`<DCArtboard>` 或画布外壳包裹;它应该作为真实应用界面直接运行。
66
+
67
+ 这两者可以组合,但只限静态设计探索。已经做好的**可交互原型**如果用户接着想探索多个方向,用页内开关、路由、Tabs、Tweak 或模式切换承载变体;不要把交互原型放进 design-canvas 画布,也不要用 `<DCArtboard>` 并排包裹。
68
+
69
+ 当用户要求新版本或改动时,把它们作为 TWEAKS 加到原件上;拥有一个可切换不同版本开关的主文件,优于拥有多个文件。
70
+
71
+ ## 默认美学指令
72
+ 如果用户没给参考或艺术方向:能从主题、材料或场景推断出一个有把握、不会返工的视觉方向,就主动确定,并在设计中体现假设;如果推不出、又是从零起的项目,先用 `ask_user_question` 问清偏好的调性、受众、颜色、字体、情绪等再动手——不要在推不出方向时硬选,slop 就是这么来的。
73
+
74
+ 定下视觉方向后(无论是推断还是问来的),创建设计时遵循以下指引:
75
+
76
+ - **字体与排版。** 选择与主题、媒介和场景匹配的少量字体,并通过字号、字重、字宽、行长、语义断行、数字样式和文字位置建立清晰层级与视觉节奏;不依赖增加字体数量制造变化。
77
+ - **背景与色彩体系。** 确定主色调,并建立与主题协调的中性基底、主题色和必要的章节/语义色。背景不局限于纯黑、纯白或单一色调,可以根据内容属性、页面角色和叙事节点使用不同色调、主题色底、局部色域、图片或图形背景。
78
+ - **色彩一致性。** 一致性来自共享色板、字体、栅格、图形语言和明确的颜色关系,不要求所有页面使用相同背景。颜色变化应帮助识别章节、信息层级和重点,避免无语义地逐页随机换色。
79
+ - **强调色。** 使用数量克制、关系协调的强调色,并根据背景、信息层级和色彩语义调整明度与彩度。图表、状态和章节色需要清楚可区分,但应属于同一视觉体系。
80
+ - **中性色。** 黑、白、灰可以带有与主题协调的细微色相,避免把纯黑白或低饱和配色作为所有专业场景的默认答案。
81
+ - **视觉复杂度。** 视觉丰富度应服务内容。不要添加无信息价值的装饰,也不要把"克制"理解为单调、大量留白、缺少图片图表或所有页面使用同一种构图。
82
+
83
+ 关键:如果已给出其他美学指令(如参考图、品牌体系、设计规范或媒介专属 skill),或项目中已有文件,则完全忽略默认美学。
84
+
85
+ ## 图像素材与外部信息
86
+ 图片素材能显著提升产物的美观度与丰富度——不要默认只用纯 CSS/SVG 撑起全部视觉。为氛围、质感和视觉节奏而配图是正当用途,不需要等到"内容必须有图"才配图。选择工具的判断规则很简单:**需要真实图片就搜索,需要丰富美观的图片就生成**。当前 harness 若提供以下能力(映射见 `references/<harness>.md`;没有对应工具就跳过,用内联 SVG / CSS 图形兜底),在合适的位置主动使用:
87
+
88
+ - **`generate_image`(AI 图片生成)**——美化、氛围类配图一律走生成:hero 图、插画、照片质感背景、章节题图、空状态插图、信息图(infographic)、产品/场景示意图等任何能让页面更好看的位置,用文生图直接生成;有品牌参考图或用户素材时用图生图对齐既有视觉语言;多屏 / 多页需要风格统一、角色连贯的插画体系时用组图一次生成整个序列;对已有图片做局部调整用图片编辑。生成 prompt 里写清风格、构图、配色与光线,让产出与已确立的视觉方向一致,而不是各自为政。
89
+ - **`search_images`(图片搜索)**——需要真实图片时走搜索:真实存在的实物、产品、地点、人物、logo、截图等生成会失真或造假的素材,以及确立视觉方向时按关键词找参考图(同类产品界面、风格 moodboard)。直接引用搜索结果时注意来源与版权。
90
+ - **`web_search` / `web_fetch`(联网搜索)**——内容需要真实事实、数据、案例或时效性信息时先搜再写,不要编造(见「内容准则」:涉及新增事实、数据时要有依据)。调研型产出(行业研究、政策梳理、竞争格局类 deck / 报告)要先做多轮搜索,把事实、数字与来源收集齐并标注出处,再进入设计。
91
+ - **视频素材**——需要嵌入公开视频(培训短片、案例视频等)时,用联网搜索找到可公开访问的视频页面或可嵌入链接,以 `<iframe>` / `<video>` 嵌入并注明来源;不要下载搬运版权内容,也绝不虚构视频 URL——找不到合适的就如实告知用户并留占位。
92
+
93
+ 约束:
94
+
95
+ - 配图要属于同一视觉体系——风格、色调、光线与已确立的视觉方向一致,宁可少而统一,不要多而杂乱;逐张风格漂移比没有图更伤美观度。
96
+ - 用户已提供图片 / 品牌素材时优先使用,不要擅自用生成图替换。
97
+ - 搜索到 / 生成的图片先落到本地,再用 `lark-cli apps +file-upload --app-id <app_id> --file <local_path> --as user` 上传,代码中引用返回的**远端 URL**——不要提交 git、不要引用本地路径、不要 base64 内联,也不要直接热链搜索结果页的原始 URL(可能防盗链或失效)。上传需要 `app_id`,任务尚未初始化时先按「发布」前提完成 `+create` / `+init` 两步。
98
+
99
+ ## 输出创建准则
100
+ - **文件输出路径**:会话根目录下会并存多个任务。**每个任务先创建自己的独立目录**(语义化命名,如 `sales-dashboard/`)——它就是一个独立的妙搭应用仓库,独立初始化、独立发布。所有交付物写进本任务目录,主 HTML 入口是该目录下的 `index.html`。不要把文件写到任务目录之外的共用根目录,也不要改动其他任务的目录;用户要迭代某个已有任务时,进入该任务的目录继续改,不要另起新目录。
101
+ - 对文件做重大修订时,先复制再编辑,以保留旧版本(如 index.html、index v2.html 等)。
102
+ - 始终避免写大文件(>1000 行)。而应把代码拆成若干更小的 JSX 文件,最后在主文件里 import 进来。这让文件更易管理和编辑。
103
+ - 对于视频和其他带时间轴的内容,让播放位置可持久化;每次变化时存入 localStorage,加载时再从 localStorage 读回。这样用户刷新页面时不会丢失当前位置,而刷新在迭代设计中很常见。(使用 `starter-components/deck-stage.js` 的 deck 不需要这么做——宿主会把幻灯片位置保存在 URL 中。)
104
+ - 在既有 UI 上做增补时,先理解该 UI 的视觉语汇并遵循它。对齐文案风格、配色、语气、hover/click 状态、动画风格、阴影+卡片+布局模式、密度等。把你观察到的东西"出声想一想"会有帮助。
105
+ - 写规范的 HTML,让编辑器能直接编辑:显式闭合每个非空(non-void)元素(写 `<p>…</p>`,绝不依赖隐式闭合),每个属性值都用双引号,且不要自闭合非空元素(写 `<div></div>`,而非 `<div/>`)。这有助于直接编辑功能正常工作。
106
+ - 绝不使用 `scrollIntoView`——它可能搞乱 web app。如有需要,改用其他 DOM 滚动方法。
107
+ - **颜色使用:** 有品牌色时优先沿用品牌体系;没有品牌或既有配色时,根据主题、受众、内容语义和视觉方向推导协调色板。避免随意加入彼此无关的颜色,不要默认退回纯黑白。对于数据图表和信息图,颜色应承担区分、强调或表达语义的作用,并保证足够对比。
108
+ - **Emoji:** 不要在生成的代码中使用 emoji 字符——不作图标、不作装饰、不放进数据里。例外:仅当用户的品牌资产明确包含 emoji 时。
109
+ - **图标:** 系统图标规则仅适用于需要界面图标体系的 UI 或交互原型。在这类产物中,使用手写内联 SVG(`<svg viewBox="0 0 24 24">`)建立语义贴切、风格连贯的图标语言。
110
+ - **字体加载:** 需要 Google Fonts / web 字体时,一律从自托管镜像 `https://miaoda.feishu.cn/fonts/css2` 加载,不要直连 `fonts.googleapis.com` / `fonts.gstatic.com`——这两个 Google CDN 在部分地区慢、甚至连不上,会导致字体加载失败、页面回退到系统字体。镜像是 Google Fonts `css2` 端点的直接替代:查询语法完全一致(`?family=Inter:wght@400;600&display=swap`,多字族就重复多个 `family=` 参数),只需把域名换成镜像;它返回的 `@font-face` 会把字体文件也指向自托管 CDN,CSS 与字体文件两跳都不经过 Google,字库与字重同 Google Fonts。照常用 `<link rel="stylesheet" href="https://miaoda.feishu.cn/fonts/css2?family=…&display=swap">` 引入即可。
111
+
112
+ ## 内容准则
113
+
114
+ **内容取舍。** 不添加与用户目标无关或没有依据的内容。在用户明确的范围内,可以重组、解释和补足完成叙事所需的信息;涉及新增事实、数据或任务范围时,再向用户确认或明确为示例。内容不足以独立成页时,应合并、重构或请求材料,不用放大元素和增加留白勉强撑页。
115
+
116
+ **数据保真。** 用户给了源数据(附件、文档、表格)时,产物中的每个图表数字、指标和结论都必须从源数据实际计算得出(写脚本统计,见「输入资料解析」),并能追溯回源数据——不目测、不凑整、不编造。做数据报表/看板前读 `references/data-report.md`,其中的数据准则同样适用。
117
+
118
+ **硬性规格是约束,不是建议。** 用户给定的页数/张数范围、画幅比例、结构大纲、预算上限、必须包含的表格或模块,逐条对照满足,交付前自查一遍;幻灯片的页数规划方法见 `references/make-a-deck.md`。
119
+
120
+ **使用恰当的尺度:** 对于 1920x1080 的幻灯片,文字绝不应小于 24px;理想情况下要大得多。打印文档最小 12pt。移动端 mockup 的点击目标绝不应小于 44px。
121
+
122
+ **避免 AI slop 套路:** 包括但不限于滥用渐变背景、emoji(见上面的 Emoji 规则)、圆角+左边框强调色的容器、被用滥的字体族(Inter、Roboto、Arial、Fraunces)。
123
+
124
+ **CSS**:`text-wrap: pretty`、CSS grid 以及其他高级 CSS 效果都是你的好帮手!
125
+
126
+ **强烈倾向用带 `gap` 的 flex/grid,而非 inline 流。** 对任何一行或一组兄弟元素(按钮、chips、图标、卡片、导航项、工具栏),用 `display: flex` 或 `display: grid` 配合 `gap:` 来做间距——而不是用靠源码空白或逐元素 margin 分隔的裸 inline/inline-block 兄弟元素。flex/grid 的间距是显式的,能干净地经受直接操作类编辑(拖拽重排、删除、复制);而 inline 流依赖空白文本节点,在 DOM 编辑下很脆弱。把 inline 流留给句子中偶尔夹带 `<a>`/`<strong>`/`<em>` 的文字段落——不要用它来排布 UI 元素。
127
+
128
+ ## 保留评论锚点
129
+ 某些源元素带有 `data-comment-anchor="…"` 属性。它把用户的评审评论钉在该元素上。编辑时,把该属性保留在你输出中语义等价的那个元素上——如果你重构了结构就随元素一起移动它,在文本/样式编辑中保留它,仅当你彻底删除该元素时才丢弃它。绝不发明新值,也不要把它复制到其他元素上。
130
+
131
+ ## 为幻灯片和屏幕打标签以提供评论上下文
132
+ 在代表幻灯片和高层级屏幕的元素上加 `[data-screen-label]` 属性;这样你就能分辨用户的评论是针对哪一张幻灯片或哪一屏。
133
+ 当用户说"slide 5"或"index 5"时,他们指的是第 5 张幻灯片(标签"05"),而绝非数组下标 `[4]`——人类不按 0 起始计数。
134
+
135
+ ## React + Babel(浏览器内 JSX)
136
+ 当用浏览器内 JSX 编写 React 原型(无构建步骤——Babel 在运行时转译)时,你必须使用下面这些锁定版本的确切 script 标签。不要使用未锁定版本(例如 react@18)。要用 React + Babel 时,可直接从本 skill 的 `assets/index.html` 拷贝 HTML 模板起步(`cp <本 skill 所在目录>/assets/index.html <任务目录>/index.html`)——它已带好这三个 script 标签和 `#root` 挂载点,不必手写。
137
+
138
+ ```html
139
+ <script src="https://sf3-scmcdn-cn.feishucdn.com/obj/feishu-static/miaoda/coding-unpkg-sdk/react@18.3.1/umd/react.development.js" crossorigin="anonymous"></script>
140
+ <script src="https://sf3-scmcdn-cn.feishucdn.com/obj/feishu-static/miaoda/coding-unpkg-sdk/react-dom@18.3.1/umd/react-dom.development.js" crossorigin="anonymous"></script>
141
+ <script src="https://sf3-scmcdn-cn.feishucdn.com/obj/feishu-static/miaoda/coding-unpkg-sdk/@babel/standalone@7.29.0/babel.min.js" crossorigin="anonymous"></script>
142
+ ```
143
+
144
+ 发布前需要对以上 script 路径进行自检,确保它们路径与上述代码完全一致
145
+
146
+ ### 脚本导入
147
+ 用 script 标签导入你写的任何辅助脚本或组件脚本。`.jsx` 文件必须用 `<script type="text/babel" src="xxx.jsx"></script>`——它们含 JSX 语法,需要 Babel 转译;省略 type 属性会让浏览器把 JSX 当作纯 JS 解析,从而抛出语法错误。纯 `.js` 文件可以用普通的 `<script src="xxx.js"></script>`。避免在脚本导入上使用 `type="module"`——它可能会出问题。
148
+
149
+ **加载顺序**:`@babel/standalone` 用异步 XHR 拉取外部 `<script type="text/babel" src="...">` 文件,但保证按 DOM 顺序执行——靠前的脚本总在靠后的脚本之前运行。然而,内联脚本(无 `src`)会立即就绪,而外部脚本必须等待网络响应。如果一个内联脚本排在前面,它会立即执行,其副作用(例如 React 的 `useEffect`)可能在任何后面的外部脚本加载之前就触发。把外部脚本放在依赖它们的内联脚本之前。
150
+
151
+ ### 跨文件作用域
152
+ 每个 `<script type="text/babel">` 在转译后都有自己独立的作用域。要在文件间共享组件,在组件文件末尾把它们导出到 `window`:
153
+
154
+ ```js
155
+ // 在 components.jsx 末尾:
156
+ Object.assign(window, {
157
+ Terminal, Line, Spacer,
158
+ Gray, Blue, Green, Bold,
159
+ // ... 所有需要共享的组件
160
+ });
161
+ ```
162
+
163
+ ### 样式对象命名
164
+ 定义全局作用域的样式对象时,给它们起具体的名字。如果你导入了 1 个以上带 `styles` 对象的组件,就会出问题。你必须基于组件名给每个 styles 对象起唯一的名字,比如 `const terminalStyles = { ... }`;或者用内联样式。绝不要写 `const styles = { ... }`。
165
+
166
+ ### 动画
167
+ 对于视频风格的 HTML 产物,调用 `animated-video` skill 并从 `starter-components/animations.jsx` starter component 起步——不要自己实现时间轴引擎。对于简单的交互原型过渡,CSS transitions 或纯 React state 就够了。
168
+
169
+ ### 原型
170
+ - 克制住加"标题"屏的冲动;让你的原型在视口中居中,或做成响应式尺寸(填满视口并留合理边距)。
171
+
172
+ ## Starter Components(起始组件)
173
+ 现成的 HTML/JS/JSX 脚手架(scaffold)就放在本文件旁边的 `starter-components/` 目录里——需要设备外框(device frame)、幻灯片外壳(deck shell)、画布(canvas)或动画时间轴(animation timeline)时,直接用它们,不要手搓。使用方式:把文件拷进当前任务目录(在任务目录下执行 `cp <本 skill 所在目录>/starter-components/<file> .`——注意 cwd 不会是 skill 目录,要用 skill 目录的实际路径),或读过之后照着改;每个文件顶部都带有自己的用法说明。
174
+
175
+ - `design-canvas.jsx` — 可平移/缩放的画布,artboard 可重排、可全屏聚焦。
176
+ - `deck-stage.js` — 幻灯片 deck 外壳。用于任何幻灯片演示(见「Skills 元信息」中的 Make a deck)。
177
+ - `ios-frame.jsx` / `android-frame.jsx` — 带状态栏和键盘的设备边框。
178
+ - `tweaks-panel.jsx` — 浮动的 Tweaks 面板+表单控件(`useTweaks`、滑块、开关、单选、颜色 chips 等)。
179
+ - `macos-window.jsx` / `browser-window.jsx` — 桌面窗口外壳(chrome)。
180
+ - `animations.jsx` — 基于时间轴的动画引擎(Stage + Sprite + scrubber + Easing)。
181
+
182
+ ## Tweaks
183
+ 用户可以从工具栏开关 **Tweaks**——一个存在于原型内部的页内控件面板(颜色、字体、间距、文案、布局变体)。不要自己实现它:用 `kind: "tweaks-panel.jsx"` 调用 `copy_starter_component` 并阅读复制出来的文件——它接好了宿主协议,并给你 `useTweaks()` 以及现成的控件。这个面板的标题按界面语言来定——英文叫"Tweaks",中文叫"风格"。把它保持小巧,Tweaks 关闭时完全隐藏,并且即使用户没要求,也默认加上几个有品味的 tweak。你写在面板里的标签和选项是用户会读到的内容,而非配置——用与 app 其余部分相同的语言书写。
184
+
185
+ **闭环。** 每个 tweak 都需要一个生产者(面板控件)和一个消费者(对该值作出反应的内容)。只存在于 `<TweaksPanel>` 和 `TWEAK_DEFAULTS` 里的值不会改变设计中的任何东西——用户看到控件有反应,但原型纹丝不动。
186
+
187
+ ## 发布
188
+ 设计产物写完并提交后,需要发布到妙搭(lark-apps)才能拿到可访问链接。本 skill 产出的是创意模式(html)应用,发布走本地开发链路:改动 git commit 后推到工作分支 `sprint/default`,再用 `lark-cli apps` 命令发起部署并轮询结果。
189
+
190
+ **前提**:每个任务目录是一个独立的妙搭 html 应用仓库,独立发布、互不影响;发布序列的所有命令都在**当前任务目录**内执行。任务目录还不是应用仓库(没有 `.spark/meta.json`)时,先完成两步初始化:
191
+
192
+ ```bash
193
+ # 1. 创建应用,记下返回的 app_id(app_ 开头)
194
+ lark-cli apps +create --name "<应用名>" --app-type html --as user
195
+
196
+ # 2. 初始化到任务目录:会自动 clone 远端仓库并 checkout 工作分支 sprint/default,
197
+ # 无需 git init / git checkout(--dir 不传默认 ./<app-id>;
198
+ # --source-path 可把已写好的产物一并并入,但源码目录不存在时会被静默跳过,用后核对文件确实进了仓库)
199
+ lark-cli apps +init --app-id <app_id> --dir <任务目录> --as user
200
+ ```
201
+
202
+ 初始化后在任务目录内创建 / 修改产物(创意模式是 buildless,源码即产物,`index.html` 放仓库根目录),然后走下方发布序列。
203
+
204
+ `app_id`(`app_` 开头)从任务目录的 `.spark/meta.json` 读取,或来自 `+create` 的返回 / 用户给出——`cli_` 开头的是飞书应用 ID,绝不能传给 `apps +*` 命令。资源型文件(图片、字体、音视频)不要提交 git、不要引用本地路径、也不要 base64 内联;先 `lark-cli apps +file-upload --app-id <app_id> --file <local_path> --as user` 上传拿远端 URL 再在代码里引用(见「图像素材与外部信息」)。
205
+
206
+ 发布序列:
207
+
208
+ ```bash
209
+ # 1. 提交并推到工作分支 sprint/default
210
+ # 遇非 fast-forward:先 git pull --rebase origin sprint/default 解决冲突再推,绝不 force-push
211
+ git add . && git commit -m "feat: ..." && git push origin sprint/default
212
+
213
+ # 2. 发起部署(记下返回的 release_id),然后轮询状态直到 finished / failed:
214
+ # publishing → 继续轮询;finished → 输出含可分享的 online_url,直接返回给用户;failed → 按输出中的 error_logs 报告失败原因
215
+ lark-cli apps +release-create --app-id <app_id> --as user
216
+ lark-cli apps +release-get --app-id <app_id> --release-id <release_id> --as user
217
+ ```
218
+
219
+ 要点:
220
+
221
+ - 所有 git 命令必须在**任务仓库根目录**下执行(每条命令先 `cd <任务目录>`,或用 `git -C <任务目录>`)——`git add .` 作用于当前 cwd,在多任务共用的上级根目录里执行会把其他任务的文件也 stage 进来。
222
+ - 推送和部署的分支必须是 `sprint/default`:推到其他分支,`+release-create` 会失败。
223
+ - `+release-create` 部署的是远端 `sprint/default` 上**已 push** 的代码,不是本地工作区——未 commit / 未 push 的改动不会进入这次发布。
224
+ - 完成 ≠ 发布:产物生成完、或 `+list` 显示 `is_published=true`,都不代表最新内容已上线;必须拿到本轮 `+release-get` 返回的 `finished` 才算发布成功。
225
+ - 创意模式(html)应用**开发态与发布态是同一个链接**(形如 `https://{租户域名}/page/{meta_token}`,形似飞书文档链接),`online_url` 即最终可分享链接。
226
+ - 任何 git 操作(push / pull / clone)报认证失败、401/403、credential helper 缺失或 token 过期时,先执行 `lark-cli apps +git-credential-init --app-id <app_id> --as user` 刷新本地 Git 凭证,再重试原 git 命令;刷新凭证也失败就停下向用户报告错误,不要改走其他发布路径(尤其不要用 `+html-publish`)。
227
+
228
+ ## Skills 元信息
229
+ 你有以下内置技能 prompt,位于本文件相对路径下的 `references/` 目录中。如果用户的需求与其中某个技能匹配,而对应的 prompt 尚未加载进你的上下文,就去 READ(读取)相应文件,把它的指引加载进来。
230
+
231
+ - **[Animated video](references/animated-video.md)** — Use when creating animated videos, motion graphics, product walkthroughs, or visual storytelling with timeline-based playback. 触发词:animation, video, motion, 动画, 视频, 动效, 产品演示, 演示动画, walkthrough
232
+ - **[Charts](references/charts.md)** — 基于 ECharts 的数据可视化,用于浏览器直出 HTML。当需要创建图表、仪表盘或数据可视化时使用。触发词:chart, ECharts, 图表, 可视化, visualization, 饼图, 柱状图, 折线图, 数据图表, 甘特图, 热力图, 数据展示, dashboard, 仪表盘, 数据看板
233
+ - **[Data report](references/data-report.md)** — 数据驱动的报表与看板设计。从数据分析到报表规划、信息层级组织,适用于用户有数据文件或明确指标,需要产出结构化数据报表的场景。图表绘制部分由 charts skill 承担。触发词:数据报表, 数据看板, 数据分析报表, BI, 经营报表, 指标看板, 周报, 月报, 数据大盘, KPI, 报表设计, data report, dashboard report, analytics report
234
+ - **[Frontend design](references/frontend-design.md)** — Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.
235
+ - **[Hi-fi design](references/hi-fi-design.md)** — 用于创建高保真 UI mockup、设计探索,或带多种变体的视觉原型。触发词:mockup, hi-fi, prototype, UI design, 高保真, 设计稿, 原型, 界面设计, 视觉设计, 设计方案
236
+ - **[Interactive prototype](references/interactive-prototype.md)** — 可交互原型:像真实应用一样直接运行的高保真交互 demo。触发词:可交互原型, 交互原型, 点击原型, interactive prototype, working app, 产品 demo, 工单系统, 管理后台, 看板工具, 多页面应用
237
+ - **[Make a deck](references/make-a-deck.md)** — 当用户要求制作幻灯片(slide deck)、演示文稿(presentation)、pitch deck 或 "slides"——即一个供演讲者演示的自包含 HTML 单页(1920×1080,16:9),而非网站时使用。
238
+ - **[Visual exposure](references/visual-exposure.md)** — 用于制作可视化报告、专题视觉页、信息图、视觉长图、概念可视化、产品能力曝光、方案亮点展示等内容型 HTML 视觉作品。适合用户想把材料、数据或观点组织成可阅读、可展示、可传播的视觉化表达,但不希望做成 PPT、传统 dashboard 或纯 ECharts 图表的场景。触发词:可视化报告, 视觉报告, 可视化曝光, 视觉化曝光, 信息图, 长图, infographic, 视觉表达, 概念可视化, 亮点展示, 能力曝光
239
+ - **[Wireframe](references/wireframe.md)** — Explore many ideas with wireframes and storyboards
@@ -0,0 +1,39 @@
1
+ # Aily 工具参考
2
+
3
+ 本文档列出 [`../creative-design.md`](../creative-design.md) 所依赖的 harness 专属工具,供你在 **Aily** 中运行时使用。主提示词只命名能力("向用户提问"、"展示文件"等);本文档给出 Aily 的调用方式。通用工具(`Bash`、文件读/写/编辑、grep/glob 搜索)在任何环境都相同,不在此覆盖。
4
+
5
+ ## Web 工具 → Aily 对应项
6
+
7
+ 上游提示词引用了一些在 Aily 中并不存在的 Claude.ai web 工具。无论出现在行文还是代码里,一律按下表替换:
8
+
9
+ | Web 工具 | Aily 对应项 |
10
+ |---|---|
11
+ | `ask_user_question` | `ask_user`(向用户抛出结构化决策问题;先问,等用户答复后再继续)。 |
12
+ | `done`、`fork_verifier_agent` | 用 `submit` 交付结果并给出文件路径。 |
13
+ | `write_file`(及其 `asset:` 参数) | Aily 的「创建/编辑本地文件」工具。不存在 asset review pane;舍弃这一概念。 |
14
+ | `copy_files` | `Bash cp`。 |
15
+ | `read_file`、`list_files`、`view_image` | 「读取本地文件」;按文件名查找用 glob、搜内容用 grep;图片直接走「解析二进制文件(…图片…)」——Aily 原生支持图像输入。 |
16
+ | `show_to_user` | 用 `submit` 交付并给出绝对本地文件路径。 |
17
+ | `eval_js`、`eval_js_user_view`、`run_script` | 脚本用 `Bash`。 |
18
+ | `web_fetch`、`web_search` | `fetch`、`web_search`。用于时效性事实、内容素材补充或用户要求的查询。 |
19
+ | `generate_image` | `aily-image-generate_workbench`(Seedream V4.5 模型):支持文生图、图生图(给参考图)、信息图(infographic)、图片编辑、组图(一次生成多张风格统一、角色连贯的图像序列)。 |
20
+ | `search_images` | `doubao_image_search`(按关键词搜索图片,适合找参考图、素材图)。 |
21
+ | `copy_starter_component` | `Bash cp <本 skill 所在目录>/starter-components/<file> .`(cwd 通常是应用项目目录而非 skill 目录,需用 skill 目录实际路径;或读取后改编)。 |
22
+ | 文档解析(docx / pdf) | Aily 原生「解析二进制文件」能力直接读取 Word / PDF / Excel / PPT 全文;PDF 也可用 `aily-pdf` 专用工具。 |
23
+ | `invoke_skill("X")` / `invoke the "X" skill` | 用 `get_skills("X")` 加载对应媒介技能(如 `get_skills("frontend-design")`)。这些技能同时以本地文件形式随本 skill 附带在 `references/<X>.md`,`get_skills` 取不到时直接读该文件。 |
24
+
25
+ ## 提出澄清性问题
26
+
27
+ 用 `ask_user` 提出聚焦的结构化问题——它把用户的决策内联返回,先问、等答复后再继续。它最适合高影响力的承重决策:交付格式、保真度、设计上下文、参考应用、变体数量。一轮提问保持简明、可执行。不要虚构假的工具名。
28
+
29
+ ## 交付与发布
30
+
31
+ - 用 `submit` 提交交付结果,并给出绝对本地文件路径。
32
+ - 产物完成并提交后,按 [`../creative-design.md`](../creative-design.md)「发布」一节发布到妙搭——交付给用户的可分享链接是 `+release-get` 返回的 `online_url`。
33
+
34
+ ## Aily 专属注意事项
35
+
36
+ - **优先用专用工具而非手搓。** 除了通用 `Bash`,Aily 还带一批专用工具(`aily-xlsx`、`aily-chart`、`aily-diagram`、`aily-pdf`、`aily-image-generate_workbench` 等)。涉及表格、图表、流程图、PDF、图像生成时,优先用对应专用工具,而不是用 `Bash` 从零脚本化。
37
+ - **图像素材优先走生成 / 搜索。** [`../creative-design.md`](../creative-design.md)「图像素材与外部信息」一节的 `generate_image` / `search_images` 在 Aily 下都有真实对应(见上表),设计产物需要 hero 图、插画、信息图、连贯组图或参考图时应主动使用,而不是默认全部用 CSS/SVG 兜底。搜索到 / 生成的图片先落到本地,再用 `lark-cli apps +file-upload` 上传、在代码中引用返回的远端 URL,不提交 git。
38
+ - `agent` 的 `slide` 子类型用于生成**飞书幻灯片**,与本 skill 产出的自包含 HTML deck(`starter-components/deck-stage.js`)是两条不同路径,不要混用——本 skill 的 deck 始终是 HTML。
39
+ - 交付统一走 `submit`;需要跨轮次保留项目上下文时可用 `aily-work-memory`。