Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 123 additions & 0 deletions .agents/skills/publicity-article/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
---
name: publicity-article
description: >-
Write GenUI SDK version publicity articles for 掘金, 公众号, and other platforms
from release notes. Extracts highlight themes, drafts catchy titles, and
produces a full Chinese marketing post with overview, feature deep-dives, and
OpenTiny NEXT footer. Use when the user asks for a 宣传文章, 版本推广文,
掘金文章, 公众号文章, publicity article, or marketing post for a genui-sdk release.
---

# GenUI SDK 版本宣传文章

为 [opentiny/genui-sdk](https://github.com/opentiny/genui-sdk) 撰写版本宣传文章,面向掘金、公众号及其他技术社区。

参考既往文章:[v1.2.0](https://juejin.cn/post/7651799134606262308)、[v1.1.0](https://juejin.cn/post/7623604104619491334)。

分工:本文件只写**流程**;文风、固定文案、各章节写法与禁忌以 [style-guide.md](style-guide.md) 为唯一事实源;成稿骨架见 [examples.md](examples.md)。三者内容不互相重复。

进度:

- [ ] 1. 确认版本与素材,筛选有价值变更
- [ ] 2. 核实代码事实(包名 / 导出 / 子路径 / API 签名)
- [ ] 3. 提炼主题方向
- [ ] 4. 拟定标题与导语
- [ ] 5. 撰写全文并写入 publicity-article.md
- [ ] 6. 终稿自检 + 输出配图清单

## Step 1:确认版本与素材

1. 确认本次宣传的 tag(如 `v1.3.0`)。
2. 素材按优先级取用:仓库根目录 `releaseNote.md`(对应本版本时)→ GitHub Release(`gh release view <tag> --repo opentiny/genui-sdk --json name,body,url`)→ 都没有则先走 `release-notes` 技能生成。

**变更筛选**(决定文章写什么,比怎么写更影响质量):

- Features 优先;对体验有感知的 Bug Fixes / Refactor 进「其他值得关注的修复」;Docs / Site / Build / CI / dependabot 不展开(除非用户点名)
- **同一迭代内新增又修掉的问题不写**:若某 fix 修的是本版新特性(如本版新增 `refs`,同版又修流式空 `ref` 报错),读者在稳定版从未踩过,写出来反而像自曝,留给 Release Note;只写升级用户可感知的存量问题修复
- **打 patch 修的不写**:改动落在 `patches/` 目录(pnpm patchedDependencies)的修复只在本仓库生效,SDK 用户升级拿不到,不能当作版本能力宣传。拿不准时用 `git show --stat <merge-commit>` 看该 fix 改了哪些文件
- 修复筛完不足 3 条就少写,整节可省略,不硬凑

## Step 2:核实代码事实

文章会贴代码、包名、import 路径与 API 签名,**必须与仓库源码一致**——模型对自家 API 的记忆常出错(臆造导出名、子路径、方法签名),贴错直接误导开发者。写代码片段前逐项核对:

- **包名**:`packages/*/package.json` 的 `name`;注意框架包(`@opentiny/genui-sdk-vue` / `-angular`)与物料包(`@opentiny/genui-sdk-materials-*`)的命名差异
- **导出名**:组件 / 函数 / 类型是否真实导出,看 `src/index.ts` 与 `package.json` 的 `exports`
- **子路径**:`/meta`、`/materials` 这类子路径必须存在于 `exports` map,不凭包名臆测
- **API 签名**:参数顺序与可选字段,读对应 `.ts` 源码确认
- **Schema 字段**:`refs` / `lifeCycles` / `methods` / `state` 等对照 Zod schema(`packages/core/src/protocols/schema.ts`)

```bash
# 例:确认导出与子路径
rg "export" packages/core/src/index.ts
cat packages/materials/vue-element-plus/package.json # 看 exports map
```

两条红线:

1. 未在源码确认的 API / 包名 / 子路径**不得写入代码示例**,改为文字描述或标「以实际版本为准」
2. **未发布 / 未合并的能力不写**。「已发布」要能按目标版本在 npm 查到:`npm view <pkg>@<target-version> version`(不带版本号会默认取 `latest`,可能落后于目标版本),并核对目标版本的 `exports` / 包内文件确认确实发布了该能力;仓库里只有构建产物、查无源码与发包记录的,一律不提

## Step 3:提炼主题方向

从变更中归纳宣传主题(不是按 PR 罗列)。数量按变更体量定,相近能力合并、差异大的拆开,勿为凑数硬拆硬并。命名口语化、利益导向:

| 坏(工程日志) | 好(宣传主题) |
|--------------|--------------|
| feat: materials decoupling | 物料可插拔,接入更灵活 |
| fix streaming buffer | 流式渲染更稳 |
| playground A2A / Skills | Playground 能力全面升级 |

每个主题挂若干短 bullet 供「版本特性总览」使用。**同一能力只归属一个主题并只在该处展开**,其他地方最多一句带过(例:Legacy 组件属于物料迁移,就不要在多框架一节再解释一遍)。

**注意归属事实**:框架切换、混用渲染等若实际是演练场特性,就放 Playground 主题下,不要另立「SDK 能力」小节造成结构重叠。

## Step 4:拟定标题与导语

标题公式、收益词要求、字数限制见 style-guide「标题风格」。流程要求:

- 一次给出 2~3 个候选,正文采用最贴合的,其余在对话中备选
- **情绪钩子每版换新**,不复用上一版标题的钩子(连用「这次更新太良心!」会显得模板化)

导语节奏:固定产品介绍句(style-guide)→ 可加 1~2 句场景化铺垫把读者代入痛点 → 宣布版本与主题(加粗主题词,与全文一致)→ 收益词收尾 → 链接块。

## Step 5:按固定结构撰写

章节顺序(名称可微调,顺序不变):

```markdown
## 前言
## 版本特性总览
## 新特性详解
## 其他值得关注的修复 # 可省略
## 总结
## 关于 OpenTiny NEXT
```

各章节写法、语气、配图占位规范见 style-guide。一条总原则:**不写成 changelog 翻译**,用场景与收益串联,让读者感到「这跟我有关」。

分寸感:面向接入方的章节(Core、物料、渲染器)可以贴 API 与代码;面向体验方的章节(Playground 等)只讲「有什么特性、怎么用」,不讲实现机制与内部命名。

成稿写入仓库根目录 `publicity-article.md`:文件不存在时新建;已存在时(可能是上次草稿或用户改过)先读一遍,把用户手写/手改过的内容并入新稿,**未经用户确认不得整体覆盖**;用户提出的修改意见在后续迭代中同步回写。

## Step 6:终稿自检与交付

多轮增量修改后文章极易「结构漂移」。初稿完成后、以及**每次较大修改后**,通读全文过一遍:

- [ ] 标题、前言、总览、总结中的主题词一致(数量与措辞对齐)
- [ ] 总览每个 bullet 在详解有落点;详解没有总览未提的大节
- [ ] 同一能力只展开一次,没有两节重复解释
- [ ] 占位统一 `【占位:一句话说明】` 格式,全文不超过 5 处
- [ ] 用户手写 / 手改过的段落未被后续编辑覆盖
- [ ] 新增或改动过的代码块、包名再对一遍源码

对话中交付:选用标题与备选、配图清单(位置 / 建议内容 / 格式)、需用户补充的事实(数据、截图、未确认能力)。**不要**擅自发布到掘金、公众号或其他平台。

## 与 release-notes 技能的关系

| 技能 | 产出 | 受众 |
|------|------|------|
| `release-notes` | `releaseNote.md`(按 PR 分类的变更清单) | 开发者 / GitHub Release |
| `publicity-article` | `publicity-article.md`(主题化叙事) | 掘金 / 公众号读者 |

宣传文以 release notes 为「做了什么」的事实源;代码 / API 类事实以仓库源码为最终事实源(Step 2)。预览特性需标明「预览 / 需开关」并写清开启方式。
124 changes: 124 additions & 0 deletions .agents/skills/publicity-article/examples.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
# 成稿骨架示例

以下为压缩后的结构示例(非完整历史原文)。写新文章时对齐此骨架与 [style-guide.md](style-guide.md)。

> 代码 / API / 包名必须先核对源码再写入(见 [SKILL.md](SKILL.md) Step 2);详解开篇用具体场景代入痛点,而非泛泛背景。

## 示例 A:多主题深度文(对齐 v1.2.0)

**标题候选**

1. `这次更新太良心!GenUI SDK v1.2.0 轻量化 + 稳流式 + 超强 Playground`
2. `GenUI SDK v1.2.0:按需引入、流式更稳,Playground 全面升级`

````markdown
## 前言

GenUI SDK 是 OpenTiny 团队基于生成式 UI 理念打造的解决方案……

最近我们推出了 GenUI SDK v1.2.0 新版本!本次更新聚焦 **SDK 轻量化与按需引入**、**流式渲染稳定性**、**Playground 能力升级**、**GenUI Template 体验完善** 四大方向深度打磨,让 GenUI SDK 在生产场景中用得更轻、跑得更稳、调得更顺。

开源地址:……
官方网站:……

## 版本特性总览

**SDK 构建优化**
- 按需引入:`@opentiny/genui-sdk-vue` 拆分为多入口……

**流式渲染更稳**
- ……

**Playground:能力全面升级**
- ……

**其他修改**
- ……

## 新特性详解

### SDK 按需引入,包体积轻量化

此前……痛点。

v1.2.0 支持**子路径分包导出**……

| 子路径 | 适用场景 |
| --- | --- |
| …… | …… |

```ts
import { GenuiRenderer } from '@opentiny/genui-sdk-vue/renderer'
```

【占位:优化前后 bundle 对比】

### 历史会话导入导出
……

### 演练场 Skill 特性支持
……

## 其他值得关注的修复

**新增 `isJsonComplete` 字段**
此前……现在……

## 总结
……

## 关于 OpenTiny NEXT
……
````

## 示例 B:体验 + 稳定性文(对齐 v1.1.0)

**标题候选**

1. `诚意炸了:GenUI SDK v1.1.0 全端体验与稳定性双升级!`

```markdown
## 前言
……宣布版本,聚焦**演练场体验**、**核心组件能力扩展**、**底层容错稳定性**……

## 版本特性总览

### 📱 移动端体验升级
- ……

### 🧩 核心能力进阶
- ……

### 🛡️ 底层稳定性加固
- ……

### 🔍 未来特性预览
- ……

## 新特性详解

### 1. 页面适配移动端,演练场能力升级
#### 演练场移动端适配
【占位:移动端演示 GIF】
#### 新增会话实验特性
……

### 2. 核心组件增强……
### 3. 底层稳定性加固……
### 4. 特性预览
写清开关与本地启动步骤。

## 总结
……

## 关于 OpenTiny NEXT
……
```

## 配图清单示例(对话中同步给出)

| 序号 | 位置 | 建议内容 | 格式 |
| ---- | ---- | -------- | ---- |
| 1 | 按需引入 | bundle 分析前后对比 | PNG |
| 2 | 会话导入导出 | 操作录屏 | GIF |
| 3 | Skill | 导入与调用过程 | GIF |
116 changes: 116 additions & 0 deletions .agents/skills/publicity-article/style-guide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
# 文风与结构规范

从 [v1.2.0](https://juejin.cn/post/7651799134606262308)、[v1.1.0](https://juejin.cn/post/7623604104619491334) 提炼的写作约束。流程与自检见 [SKILL.md](SKILL.md)。

## 产品介绍(前言固定段)

可微调标点,核心信息保持一致;不要自行添加未核实的能力声明(如某框架渲染器「已发布」):

> GenUI SDK 是 OpenTiny 团队基于生成式 UI 理念打造的解决方案,旨在增强大模型显示与交互效果。SDK 提供完整的前后端一体化集成能力,遵循 OpenAI 规范;内置 Vue 与 Angular 双框架渲染器,支持自定义的组件库、交互行为与主题样式。既能快速从零搭建一个 AI 对话应用,也可以在现有业务系统中嵌入生成式 UI 能力。

## 链接块(前言末尾)

```markdown
开源地址:[github.com/opentiny/genui-sdk](https://github.com/opentiny/genui-sdk)(欢迎 Star ⭐)

官方网站:[opentiny.design/genui-sdk](https://opentiny.design/genui-sdk)
```

## 标题风格

- 带情绪钩子,且**每版换新**,不复用上一版标题的钩子
- 点名 `GenUI SDK` + 版本号(`vX.Y.Z`)
- 用 `+` 或「与 / 双升级」串联 2~3 个主题关键词
- 关键词优先用开发者能秒懂的**收益词**(物料可插拔 / 一键切换 / 一站式演练),少用纯工程术语(独立发包 / 解耦 / Delta Patch);工程词可进正文,但别堆在标题里
- 措辞尊重既有定调:如果某主题已定名(如「渲染器能力增强」),不要私自升级成更夸张的说法(如「真交互」暗示以前不能交互)
- 控制在约 40 字以内,兼顾掘金、公众号列表 / 分享展示

## 总览写法

- 每个主题一个小标题,加粗或 `###` 均可(两种形式全文统一,可带 emoji:📦 ⚡ 🚀 🛡️)
- bullet 写「能力 + 价值」,一句一事
Comment thread
coderabbitai[bot] marked this conversation as resolved.
- 包名、API、字段用反引号
- 不贴 PR 链接或 `@author`

## 详解写法

推荐节奏:

1. 一句话场景 / 痛点,用具体场景代入(如「LLM 流式输出时常省略默认属性,组件容易半残」),不写泛泛的「此前存在一些问题」
2. 本版怎么做(机制、API、配置)
3. 收益或用法(代码 / 表格 / 步骤)
4. 配图或占位

分寸感按读者角色区分:

- **接入向章节**(Core、物料、渲染器):给 import、组件用法、Schema 片段,让人复制就能跑
- **体验向章节**(Playground、演练场特性):只讲「有什么、在哪用、怎么用」,不写内部实现(内部函数名、存储键名、卡片 type 之类一律不出现)

需要数据时(包体积、降幅等)必须来自用户或可复现测量,禁止虚构。代码示例中的导出名、包名、子路径、API 签名必须先核对源码(SKILL.md Step 2),未核实的不写。

涉及实验开关时写清文件路径与变量名,例如:

```bash
# sites/playground/web/env/.env
VITE_ENABLE_TEMPLATE=true
```

## 「其他值得关注的修复」写法

只放**升级用户可感知的存量问题**:跨版本存在的流式稳定性、解析容错、作用域、SSE 兼容等。格式:

```markdown
**能力名**

此前……(问题)

vX.Y.Z ……(做法与效果)
```

不要放本迭代新增、同迭代又修掉的问题(筛选规则见 SKILL.md Step 1)。条目不足 3 条可整节省略。

## 配图与占位

- 有图:`![简短说明](url-or-path)`
- 无图:独立一行写 `【占位:一句话说明拍什么】`,不要用 `![...](待补充)`(预览会渲染成破图)
- 全文占位不超过 **5 处**,只留给文字 / 表格说不清的内容(架构图、操作录屏、UI 截图)
- 在对话中同步一份配图清单(位置 / 建议内容 / 格式)

## 总结段模板

`{version}` 指不带 `v` 前缀的语义化版本号(如 `1.3.0`),标题与 Release 链接统一拼为 `v{version}`。

```markdown
## 总结

GenUI SDK v{version} 以**{主题列表}**为核心升级方向(主题数量与「版本特性总览」一致)。

欢迎各位开发者升级体验。使用过程中若遇到边界场景或有优化建议,欢迎通过 [GitHub Issues](https://github.com/opentiny/genui-sdk/issues) 反馈;也欢迎 Star 与参与贡献。我们将持续迭代打磨更优质的 GenUI 产品能力!

详细变更列表可参考 Release Note:[github.com/opentiny/genui-sdk/releases/tag/v{version}](https://github.com/opentiny/genui-sdk/releases/tag/v{version})
Comment thread
coderabbitai[bot] marked this conversation as resolved.
```

## 关于 OpenTiny NEXT(固定结尾)

几乎原文保留:

```markdown
## 关于 OpenTiny NEXT

OpenTiny NEXT 是一套企业智能前端开发解决方案,以生成式 UI 和 WebMCP 两大核心技术为基础,对现有传统的 TinyVue 组件库、TinyEngine 低代码引擎等产品进行智能化升级,构建出面向 Agent 应用的前端 NEXT-SDKs、AI Extension、TinyRobot智能助手、GenUI等新产品,实现AI理解用户意图自主完成任务,加速企业应用的智能化改造。

欢迎加入 OpenTiny 开源社区。添加微信小助手:opentiny-official 一起参与交流前端技术~
OpenTiny 官网:<https://opentiny.design>
GenUI SDK 代码仓库:<https://github.com/opentiny/genui-sdk> (欢迎star ⭐)

如果你也想要共建,可以进入代码仓库,找到 good first issue标签,一起参与开源贡献~如果你有任何问题,欢迎在评论区留言交流!
```

## 禁忌

- 不写成 changelog 翻译(避免 `feat(core): ... by @xxx in #123`);逐条 feat 配一句话、缺乏场景串联的也算
- 不贴未在源码核实的代码 / 包名 / API(宁可少贴,不可贴错)
- 不夸大未合并 / 未发布能力(npm 上查不到的不说「已发布」)
- 不把同迭代新增又修掉的问题写进「其他值得关注的修复」
- 不省略「关于 OpenTiny NEXT」
- 不用英文为主文;专有名词可保留英文
Loading