@lark-apaas/coding-steering 0.1.18-dev.c17a349 → 0.1.18-dev.d77be20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/steering/design-html/skills/charts/SKILL.md +0 -4
- package/steering/design-html/skills/pptx-style-extract/SKILL.md +3 -3
- package/steering/design-html/skills/pptx-style-extract/v2-format-spec.md +1 -1
- package/steering/nestjs-react-fullstack/skills/plugin-guide/SKILL.md +3 -5
- package/steering/nestjs-react-fullstack/skills_local/plugin-guide/SKILL.md +0 -4
- package/steering/vite-react/skills/plugin-guide/SKILL.md +1 -3
- package/steering/vite-react/skills/react-three-fiber/SKILL.md +0 -4
package/package.json
CHANGED
|
@@ -7,8 +7,6 @@ metadata:
|
|
|
7
7
|
en-US: Charts
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
{% raw %}
|
|
11
|
-
|
|
12
10
|
# 图表
|
|
13
11
|
|
|
14
12
|
你是用 ECharts 呈现信息的数据叙事设计者。你的图表会出现在创意 HTML 产物中,例如仪表盘、幻灯片、设计探索。ECharts 是你的媒介,不是目标;你的工作是让数据故事一眼可读,而不是堆配置项。一个图表只表达一个主要信息。
|
|
@@ -204,5 +202,3 @@ Object.assign(window, { EChart });
|
|
|
204
202
|
| Line 连接未按时间排序的点 | Bar 或 Scatter |
|
|
205
203
|
| markPoint 重复(统计极值 = 业务事件) | 仅保留业务注释 |
|
|
206
204
|
| 用 Stacked Bar 表示 Gantt | 使用带 `renderItem` 的 `custom` series |
|
|
207
|
-
|
|
208
|
-
{% endraw %}
|
|
@@ -80,14 +80,14 @@ mkdir -p tmp/pptx-style-extract/<unique-id> && PYTHONDONTWRITEBYTECODE=1 python3
|
|
|
80
80
|
|
|
81
81
|
判断口径:
|
|
82
82
|
|
|
83
|
-
-
|
|
84
|
-
- **logo
|
|
83
|
+
- **满屏图默认属背景族**——整幅替换底图的艺术图/摄影图就是背景(首页那张记 `role: cover`);「内容图不进包」只指内容区里的图表、截图、配图。
|
|
84
|
+
- **logo 宁缺勿错**——看图确认有品牌文字或标志图形才留;拿不准就把该条从 `manifest.yaml` 删掉,在 `gaps` 写一句,候选图留在 `media-out/`。
|
|
85
85
|
- **anchors 是事实不是结论**——草案里每条只报测到的数(覆盖率、计数、占比),没有「这套风格的特征是 X」这种断言。这一段在 design.md 里读起来像总纲,消费端会照它建全局样式,所以脚本不敢替你下结论:一条 1/8 覆盖率的元素被描述成「跨页不动」,消费端就会每页都摆它。看过重建图后,把真正是这套模板特征的那几条改写成设计要点,不是特征的直接删掉。
|
|
86
86
|
- **数值只改名不改值**——草案里的坐标/色值/字号来自普查;确需推导值(CJK 行高转译、投影尺度上抬)在 manifest 写 `derived:` 声明理由,机检认声明。
|
|
87
87
|
- **页型命名**——模板自带版式名时草案已填好;只有靠样张聚类的模板(`names` 里还是 TODO)才需要按 BRIEF 的 slot 原文起中文名。
|
|
88
88
|
- **页型角色**——`roles:` 段有 TODO 时,看 `layout-sheet.png` 上对应的代表页定 `cover|section|content|quote|closing|blank|custom`。草案只把客观事实摆在注释里(代表页页码、页数、文字块数、字号序列、图片数、有无满屏底图),不替你下结论:字号多大算章节页、文字块多少算密集页,每套模板的答案都不一样。
|
|
89
89
|
- **文本角色**——`text_roles:` 段有 TODO 时,结合重建图和该行给出的来源、占位符、样例文字、box、字号与 CSS 判断标题、副标题、页眉、页脚或正文。这里仅改变已有文本槽的语义;所有文本槽、图片、容器与装饰仍由 `layouts:` 保留。标题、页眉或页脚已在背景中可见时,在 Hard Rules 写明对应页型只渲染已有 slots,不重复叠加文字。
|
|
90
|
-
- **资产位置不要写成全局规则**——同一个 logo 常按页型换位换尺寸(封面一个位置一个尺寸、内容页另一个)。位置只存在于 `layouts.md` 各页型的 `slots`,正文里只说「按该页型的 slot
|
|
90
|
+
- **资产位置不要写成全局规则**——同一个 logo 常按页型换位换尺寸(封面一个位置一个尺寸、内容页另一个)。位置只存在于 `layouts.md` 各页型的 `slots`,正文里只说「按该页型的 slot 摆放,没有就不放」。
|
|
91
91
|
- **背景和版式要配对**——真实背景不是纯色底。看 `contact-sheet.png` 判断每张背景的视觉主体/禁放区,看 `layout-sheet.png` 判断文字与卡片落点;`background` 草案已按版式直读填好,你只需在 `bg_rules` 里逐张背景补 `text_safe`、`avoid`、`pairing_rule`,避免消费 Agent 把文字、图表、卡片、时间线、标题容器、正文容器或宽透明容器的外接矩形压到金字塔、人物、产品图、强光斑或深色区域上。
|
|
92
92
|
- 双主题只认 BRIEF 的 `themes`;单主题包不写 `theme` 字段。
|
|
93
93
|
|
|
@@ -99,7 +99,7 @@ assets:
|
|
|
99
99
|
- 方案甲·包内(抽取产物默认形态):大图保留原图 + 压缩图(`<name>@full.<ext>` / `<name>.<ext>`,`path` 指压缩图、`full` 指原图),消费侧优先用压缩图;压缩图 >500KB WARN、包内总量 >20MB FAIL。
|
|
100
100
|
- 方案乙·平台云盘(入库后目标形态):条目用 `url`,消费时按云盘图片处理参数取压缩版;包内不落二进制,体积约束不适用。入库时由后端把 `path`/`full` 重写为 `url`(重写版仍须过 V2-1/V2-12)。
|
|
101
101
|
- `url` 必须 http(s) 持久地址,禁 24h TTL 签名 URL。
|
|
102
|
-
-
|
|
102
|
+
- 被遮挡/无用资产、页面内容图不进包;抽不出不编造(记 `gaps`,logo 候选图存 `ref/logo-candidates/`)。**边界**:「内容图」指内容区里的图表/截图/配图;实例页整幅替换底图的满屏主视觉(含封面艺术图)属背景族,照收。
|
|
103
103
|
|
|
104
104
|
## 2.5 `## Usage` 章节(正文必产,紧随 Overview)
|
|
105
105
|
|
|
@@ -215,7 +215,7 @@ const structured = await capabilityClient
|
|
|
215
215
|
- **Plugin(插件)**:底层承载单元,包含插件元信息与表单定义(form.schema)。模型侧只感知插件及其表单字段,不感知插件内部实现细节。
|
|
216
216
|
- **PluginInstance(插件实例配置)**:基于某个 Plugin 的表单做"业务封装",以 **单文件 JSON** 的形式存储(每个插件实例一个文件,语义化 id)。
|
|
217
217
|
- 通过 `paramsSchema` 暴露业务入参
|
|
218
|
-
- 通过 `formValue` 将业务入参映射到插件表单字段(可常量或引用 `{
|
|
218
|
+
- 通过 `formValue` 将业务入参映射到插件表单字段(可常量或引用 `{{input.xxx}}`)
|
|
219
219
|
- **PluginInstanceAIJson(pluginInstance.ai.json)**:工程转化层产物,是 pluginInstance 的**运行时投影 / 调用合同(Runtime Spec)**。
|
|
220
220
|
- 包含插件定位信息、actions 入口列表、input/output schema、outputMode、readme 等
|
|
221
221
|
- Code Agent 在生成**调用代码**前,必须读取它作为权威依据(Server 侧用 `CapabilityService`,Client 侧用 `capabilityClient`)
|
|
@@ -258,7 +258,6 @@ Plugin 的具体内容以JSON格式给出,例如:
|
|
|
258
258
|
|
|
259
259
|
|
|
260
260
|
PluginInstance 的配置以 JSON 形式输出,例如:
|
|
261
|
-
{% raw %}
|
|
262
261
|
```json
|
|
263
262
|
{
|
|
264
263
|
"id": "create_feishu_group", // 全局唯一语义化 ID
|
|
@@ -280,7 +279,6 @@ PluginInstance 的配置以 JSON 形式输出,例如:
|
|
|
280
279
|
}
|
|
281
280
|
}
|
|
282
281
|
```
|
|
283
|
-
{% endraw %}
|
|
284
282
|
|
|
285
283
|
**注意**paramsSchema 支持以下 4 种参数类型,需要按下面规定的格式进行填充:
|
|
286
284
|
|
|
@@ -562,7 +560,7 @@ PluginInstanceAIJson 的配置以 JSON 形式输出,例如:
|
|
|
562
560
|
| 未按 `outputSchema` 解析返回值,猜测返回结构 | 严格按 `get_plugin_ai_json` 返回的 `outputSchema` 读取字段,流式和非流式均适用 |
|
|
563
561
|
| 未输出 Schema 摘录卡就直接写调用代码 | 先完成“编码前闸门”中的摘录卡,再开始编码 |
|
|
564
562
|
| 改完未做真实调用冒烟就宣告完成 | 至少完成一次 unary/stream 真实调用验证,并附最小日志字段 |
|
|
565
|
-
| formValue 中用 `
|
|
563
|
+
| formValue 中用 `["{{input.xxx}}"]` 包装已经是 `type: array` 的 paramsSchema 参数 | 当 paramsSchema 定义为 array 时,formValue 应透传 `"{{input.xxx}}"`,不要再包一层数组 |
|
|
566
564
|
| 通过 `getDataloom().capability` 或 `(dataloom as any).capability` 调用插件 | `capabilityClient` 是独立导入,不通过 dataloom 访问。dataloom 仅提供 storage 和 service |
|
|
567
565
|
| Client 侧调用插件时,先通过 dataloom 上传文件拿 URL 再传给插件 | Client 侧可直接传 File/Blob 对象给 `capabilityClient`,SDK 自动处理上传。适用于所有文件类型字段(`format` 为 `file`/`picture`/`plugin-file-url`)。Server 侧仍需传 URL |
|
|
568
566
|
| 前端调用插件后不保存结果到数据库,导致页面刷新后数据丢失 | 需要持久化时:优先在 Server 侧调用并直接落库(方案A);若在 Client 侧调用,必须通过已有 CRUD 接口立即保存结果(方案B) |
|
|
@@ -644,7 +642,7 @@ try {
|
|
|
644
642
|
| 场景 | 正确做法 | 示例 |
|
|
645
643
|
|------|---------|------|
|
|
646
644
|
| 需求明确的**固定**接收人/配置 | 在 `plugin_instance CREATE` 的 `formValue` 中直接写死 | `formValue.receiverUserList: ["1854102143505690"]` |
|
|
647
|
-
| **动态**接收人/配置(按角色/条件变化) | 从配置/平台 API/DB 获取,传入 `input` 参数 | `
|
|
645
|
+
| **动态**接收人/配置(按角色/条件变化) | 从配置/平台 API/DB 获取,传入 `input` 参数 | `formValue.receiverUserList: "{{input.receiverIds}}"` |
|
|
648
646
|
|
|
649
647
|
> **关键区分**:`formValue` 中配置固定值 ≠ 代码中硬编码。`formValue` 是插件实例的声明式配置,修改不需要改代码;而代码中硬编码的值散落在业务逻辑中,难以维护。
|
|
650
648
|
|
|
@@ -8,8 +8,6 @@ steering-topic: plugin_guide
|
|
|
8
8
|
match-template-name: nestjs-react-fullstack
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
{% raw %}
|
|
12
|
-
|
|
13
11
|
# Plugin 集成指南(本地开发)
|
|
14
12
|
|
|
15
13
|
AI 插件集成规范,使用 lark-cli 命令管理插件包与实例,通过 capabilityClient / CapabilityService 生成调用代码。
|
|
@@ -580,5 +578,3 @@ npx @lark-apaas/miaoda-cli plugin list --id <instance_id>
|
|
|
580
578
|
5. **禁止用 `npm install` 安装插件包** — 插件包和 npm 包是两套独立机制。
|
|
581
579
|
6. **禁止 Mock** — 必须走真实插件实例调用链路。
|
|
582
580
|
7. **formValue 禁止 Handlebars 控制语法** — 仅允许 `{{input.xxx}}`。
|
|
583
|
-
|
|
584
|
-
{% endraw %}
|
|
@@ -180,7 +180,7 @@ const structured = await (jsonExtractor as any).call('textToJson', { text: rawRe
|
|
|
180
180
|
- **Plugin(插件)**:底层承载单元,包含插件元信息与表单定义(form.schema)。模型侧只感知插件及其表单字段,不感知插件内部实现细节。
|
|
181
181
|
- **PluginInstance(插件实例配置)**:基于某个 Plugin 的表单做"业务封装",以 **单文件 JSON** 的形式存储(每个插件实例一个文件,语义化 id)。
|
|
182
182
|
- 通过 `paramsSchema` 暴露业务入参
|
|
183
|
-
- 通过 `formValue` 将业务入参映射到插件表单字段(可常量或引用 `{
|
|
183
|
+
- 通过 `formValue` 将业务入参映射到插件表单字段(可常量或引用 `{{input.xxx}}`)
|
|
184
184
|
- **PluginInstanceAIJson(pluginInstance.ai.json)**:工程转化层产物,是 pluginInstance 的**运行时投影 / 调用合同(Runtime Spec)**。
|
|
185
185
|
- 包含插件定位信息、actions 入口列表、input/output schema、outputMode、readme 等
|
|
186
186
|
- Code Agent 在生成**调用代码**前,必须读取它作为权威依据(使用 `capabilityClient` 调用)
|
|
@@ -224,7 +224,6 @@ Plugin 的具体内容以JSON格式给出,例如:
|
|
|
224
224
|
|
|
225
225
|
PluginInstance 的配置以 JSON 形式输出,例如:
|
|
226
226
|
|
|
227
|
-
{% raw %}
|
|
228
227
|
```json
|
|
229
228
|
{
|
|
230
229
|
"id": "create_feishu_group", // 全局唯一语义化 ID
|
|
@@ -246,7 +245,6 @@ PluginInstance 的配置以 JSON 形式输出,例如:
|
|
|
246
245
|
}
|
|
247
246
|
}
|
|
248
247
|
```
|
|
249
|
-
{% endraw %}
|
|
250
248
|
|
|
251
249
|
**注意**paramsSchema 支持以下 4 种参数类型,需要按下面规定的格式进行填充:
|
|
252
250
|
|
|
@@ -5,8 +5,6 @@ steering: true
|
|
|
5
5
|
steering-topic: react_three_fiber
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
{% raw %}
|
|
9
|
-
|
|
10
8
|
# React Three Fiber (R3F) 编码指南
|
|
11
9
|
|
|
12
10
|
实现 3D 场景 / 3D 游戏 / 3D 数据可视化时, MUST 用 **react-three-fiber + drei** 声明式栈, 严禁用 React + CSS / SVG / `transform: rotateX` 伪 3D.
|
|
@@ -222,5 +220,3 @@ npm install react-error-boundary # 必装! Canvas 外包 ErrorBoundary
|
|
|
222
220
|
|
|
223
221
|
- `client-coding-guide` - vite-react 通用编码规范
|
|
224
222
|
- `component-conventions` - React 组件命名 / 文件结构
|
|
225
|
-
|
|
226
|
-
{% endraw %}
|