Skip to content

Commit cd17a1a

Browse files
committed
ai: 补充agent和skills
1 parent fc3a9cc commit cd17a1a

23 files changed

Lines changed: 459 additions & 23 deletions

File tree

AGENTS.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,14 @@
1616

1717
## 共享基线与术语
1818
- 共享基线:`skills/shared/ryanJsonCommon.md`
19+
- 快速分流:`skills/shared/questionRouter.md`
20+
- 路由样例:`skills/shared/routingExamples.md`
1921
- 术语表:`skills/shared/terminology.md`
2022
- 架构与数据结构:`skills/shared/architecture.md`
2123

2224
## 技能路由
25+
- 用户问题不清晰、第一次接触仓库时:先看 `skills/shared/questionRouter.md`
26+
- 用户问题跨越多个 skill、边界不清晰时:补看 `skills/shared/routingExamples.md`
2327
- 项目概览、目录结构、构建脚本、CI 与报告路径:`skills/ryanjson-project-guide/SKILL.md`
2428
- 涉及内部实现/数据结构:先读 `skills/shared/architecture.md`,再进入对应技能。
2529
- API 使用、集成、所有权与示例:`skills/ryanjson-api-usage/SKILL.md`

skills/ryanjson-api-usage/SKILL.md

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@ description: RyanJson 公开 API 使用与审查。用于接口选型、调用
1818
1919
## 核心流程
2020
1. 先读 `../shared/ryanJsonCommon.md`,确认宏与失败语义基线。
21-
2. 判断用户是否“新手”:若是,先用 `references/beginnerPrimer.md` 解释术语与最小流程。
22-
3.`references/apiPatterns.md` 选择最小 API 路径。
23-
4. 输出成功/失败路径与所有权清单。
24-
5. 给出最小验证项(返回值/日志/内存检查点)。
21+
2. 若问题更像仓库导航、内部实现优化或测试归属,先按 `../shared/questionRouter.md` 分流,不强行在本技能内回答。
22+
3. 判断用户是否“新手”:若是,先用 `references/beginnerPrimer.md` 解释术语与最小流程。
23+
4.`references/apiPatterns.md` 选择最小 API 路径。
24+
5. 高频问题优先套用 `references/answerTemplates.md` 的回答骨架,减少遗漏。
25+
6. 输出成功/失败路径与所有权清单。
26+
7. 给出最小验证项(返回值/日志/内存检查点)。
2527

2628
## 约束(必须遵守)
2729
- `Get*` 先判空,再 `RyanJsonIsXXX` 判型。
@@ -49,6 +51,7 @@ description: RyanJson 公开 API 使用与审查。用于接口选型、调用
4951
- 传输压缩输出与 Minify 区别:`references/apiPatterns.md`(G/H 段)
5052
- RT-Thread 集成与平台差异:`references/rt-thread-examples.md``references/integrationTemplate.md`
5153
- 出错/崩溃/边界排查:`references/pitfallsAndDebug.md``references/faultInjectionPlaybook.md`
54+
- 高频问答骨架:`references/answerTemplates.md`
5255
- 需要完整 API 说明:`references/apiReference.md`
5356
- 新手术语与概念:`references/beginnerPrimer.md`
5457
- 内部实现与数据结构问题:`../shared/architecture.md`(若超出公开 API 语义,转 `ryanjson-optimization`
@@ -63,11 +66,14 @@ description: RyanJson 公开 API 使用与审查。用于接口选型、调用
6366

6467
## 参考导航
6568
- 共享基线:`../shared/ryanJsonCommon.md`
69+
- 快速分流:`../shared/questionRouter.md`
70+
- 路由样例:`../shared/routingExamples.md`
6671
- 架构与数据结构:`../shared/architecture.md`
6772
- 注释规范:统一用 Doxygen 风格,类型名/字段语义/API 名保持英文(见共享基线第 9 节)
6873
- 新手入门:`references/beginnerPrimer.md`
6974
- API 快速入口:`references/quickstart.md`
7075
- 场景模板:`references/apiPatterns.md`
76+
- 高频回答模板:`references/answerTemplates.md`
7177
- 所有权细则:`references/ownershipAndErrors.md`
7278
- 完整 API:`references/apiReference.md`
7379
- hooks 初始化:`references/hooksInitPolicy.md`
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
interface:
22
display_name: "RyanJson API 使用"
33
short_description: "回答、审查或实现公开 API 选型、调用顺序与失败释放"
4-
default_prompt: "使用 $ryanjson-api-usage 回答、审查或实现 RyanJson 公开 API 相关需求;先明确宏前提与环境,再给出可运行方案或问题分析,包含成功/失败路径与所有权释放责任,并遵循共享基线。"
4+
default_prompt: "使用 $ryanjson-api-usage 回答、审查或实现 RyanJson 公开 API 相关需求;若问题更像仓库导航、内部实现优化或测试归属,先分流到对应 skill。先明确宏前提与环境,优先复用高频回答模板,显式区分已验证事实与推断,再给出可运行方案或问题分析,包含成功/失败路径与所有权释放责任,并遵循共享基线。"
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
# API 高频回答模板
2+
3+
## 范围
4+
- 本页用于统一高频 API 问题的回答骨架,减少遗漏宏前提、失败路径和所有权。
5+
- 详细 API 选择仍以 `apiPatterns.md``quickstart.md``ownershipAndErrors.md` 为准。
6+
7+
## 通用输出骨架
8+
1. 前提:环境、hooks、宏前提。
9+
2. 最小方案:只保留当前问题需要的公开 API。
10+
3. 失败路径:逐个说明返回 false/NULL 时怎么退出。
11+
4. 所有权:明确谁释放、何时转移。
12+
5. 验证点:用户最小可检查项。
13+
14+
## 模板 1:最小初始化 / Parse + Get
15+
- 前提:
16+
- `RyanJsonInitHooks` 必须先于任何 Json API。
17+
- `Get*` 前先判空,再 `RyanJsonIsXXX` 判型。
18+
- 最小方案:
19+
- `InitHooks -> Parse -> GetObjectByKey -> IsXXX -> GetXXXValue -> Delete(root)`
20+
- 失败路径:
21+
- hooks 失败:立即返回。
22+
- Parse 失败:立即返回。
23+
- key 缺失或类型不符:释放 root 后返回。
24+
- 所有权:
25+
- `root` 由调用方在结束时 `RyanJsonDelete`
26+
- 验证点:
27+
- 错 key / 错类型 / 非法 JSON 都不会崩溃。
28+
29+
## 模板 2:Create + Add + PrintPreallocated
30+
- 前提:
31+
- 输出缓冲由调用方管理。
32+
- 传输输出优先非格式化打印。
33+
- 最小方案:
34+
- `InitHooks -> CreateObject -> Add*ToObject -> PrintPreallocated(..., RyanJsonFalse, ...) -> Delete(root)`
35+
- 失败路径:
36+
- 任一 Add 失败:删除 root 后返回。
37+
- 预分配打印失败:删除 root 后返回。
38+
- 所有权:
39+
- `root` 始终由调用方清理。
40+
- 输出缓冲不需要 `RyanJsonFree`
41+
- 验证点:
42+
- 容量不足时返回失败,缓冲不被当作成功输出使用。
43+
44+
## 模板 3:Replace 失败谁释放
45+
- 前提:
46+
- 只讨论 `ReplaceByKey/ReplaceByIndex`,不要混入 Add/Insert 语义。
47+
- 最小方案:
48+
- 先构造 `newItem`,再调用 `RyanJsonReplaceBy*`
49+
- 失败路径:
50+
- Replace 返回 false:调用方复用或 `RyanJsonDelete(newItem)`
51+
- 所有权:
52+
- Replace 成功:`newItem` 转移给父节点。
53+
- Replace 失败:`newItem` 仍归调用方。
54+
- 验证点:
55+
- 失败后 `newItem` 仍可访问,且原树未被破坏。
56+
57+
## 模板 4:Add/Insert 失败谁释放
58+
- 前提:
59+
- 先确认 `item` 是否为游离节点。
60+
- 不要把 Add/Insert 失败语义套成 Replace。
61+
- 最小方案:
62+
- `Create item -> IsDetachedItem -> Add/Insert`
63+
- 失败路径:
64+
- 游离节点失败:当前实现下通常由库侧清理,不要盲目二次释放。
65+
- 非游离节点失败:返回 false,但库不会替你破坏原树。
66+
- 所有权:
67+
- 成功后转移给父节点。
68+
- 失败后是否仍归调用方,取决于节点是否游离和具体 API 路径。
69+
- 验证点:
70+
- 已挂树节点重复插入不会破坏原树。
71+
72+
## 模板 5:Detach 后怎么重挂
73+
- 前提:
74+
- `Detach` 成功后节点归调用方。
75+
- 最小方案:
76+
- `detached = Detach* -> AddItem*/Insert`
77+
- 失败路径:
78+
- 重挂失败:按目标 API 的失败语义处理 `detached`
79+
- 所有权:
80+
- `Detach` 后必须“重挂”或“释放”。
81+
- 验证点:
82+
- 迁移前后旧父节点和新父节点结构都可验证。
83+
84+
## 模板 6:Print 还是 Minify
85+
- 前提:
86+
- 先区分“树输出”还是“已有文本清洗”。
87+
- 最小方案:
88+
- 树输出:`RyanJsonPrint(..., RyanJsonFalse, ...)``RyanJsonPrintPreallocated(..., RyanJsonFalse, ...)`
89+
- 文本清洗:`RyanJsonMinify`
90+
- 失败路径:
91+
- Print 失败:按输出 API 释放或回退。
92+
- Minify 失败:按输入缓冲与长度约束处理。
93+
- 所有权:
94+
- `RyanJsonPrint` 的返回缓冲由调用方 `RyanJsonFree`
95+
- `Minify` 不负责生成新的树或接管输入缓冲。
96+
- 验证点:
97+
- 不要把 `Minify` 当成主打印路径。

skills/ryanjson-api-usage/references/beginnerPrimer.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,4 @@
3535
- 按场景选 API:`apiPatterns.md`
3636
- 释放责任细节:`ownershipAndErrors.md`
3737
- 平台集成模板:`integrationTemplate.md`
38+
- 不确定当前问题该走哪个 skill:`../../shared/questionRouter.md`

skills/ryanjson-api-usage/references/quickstart.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,23 @@
66
- 平台差异实现见 `rt-thread-examples.md`
77
- 失败所有权细则见 `ownershipAndErrors.md`
88

9+
## 先选你的目标
10+
- 只想先跑通 Parse + Get:直接看“示例 2”。
11+
- 想创建对象并输出紧凑 JSON:直接看“示例 3”。
12+
- 想做跨类型替换或子树迁移:直接看“示例 4 / 示例 5”。
13+
- 如果你还不确定自己是不是该看这页:先看 `../../shared/questionRouter.md`
14+
915
## 新手提示
1016
- 不懂 RTOS 也没关系:先用 `malloc/free/realloc` 跑通,再做平台适配。
1117
- 不熟 JSON 术语:先读 `beginnerPrimer.md`
18+
- 第一次接触仓库:先补看 `../../ryanjson-project-guide/references/entryScenarios.md`
19+
20+
## 30 秒心智模型
21+
- `InitHooks`:先把分配器接进去。
22+
- `Parse/Create`:得到一棵 Json 树。
23+
- `Get/Add/Replace/Detach`:在树上读取或改结构。
24+
- `Print`:需要输出时再转成字符串。
25+
- `Delete`:事务结束统一释放 root。
1226

1327
## 入口条件(必须)
1428
1. 任何 Json API 前先完成 `RyanJsonInitHooks`
@@ -17,6 +31,27 @@
1731
- `RyanJsonDefaultAddAtHead`
1832
3. 每条失败分支都要显式释放(`RyanJsonDelete` / `RyanJsonFree`)。
1933

34+
## 三条最短路径
35+
### 路径 A:读取字段
36+
1. `RyanJsonInitHooks`
37+
2. `RyanJsonParse`
38+
3. `RyanJsonGetObjectByKey`
39+
4. `RyanJsonIsXXX` + `RyanJsonGetXXXValue`
40+
5. `RyanJsonDelete(root)`
41+
42+
### 路径 B:创建并输出
43+
1. `RyanJsonInitHooks`
44+
2. `RyanJsonCreateObject`
45+
3. `RyanJsonAdd*ToObject`
46+
4. `RyanJsonPrintPreallocated(..., RyanJsonFalse, ...)`
47+
5. `RyanJsonDelete(root)`
48+
49+
### 路径 C:替换或迁移子树
50+
1. 先创建新节点或先 `Detach`
51+
2. `RyanJsonReplaceByKey/ByIndex``RyanJsonAddItem*`
52+
3. 明确失败分支的所有权
53+
4. 结束时释放仍归调用方的节点
54+
2055
## 示例 1:初始化 hooks(一次性)
2156
```c
2257
#include <stdlib.h>
@@ -161,6 +196,12 @@ static RyanJsonBool_e movePayload(RyanJson_t src, RyanJson_t dst)
161196
4. 动态打印返回值是否配对 `RyanJsonFree`。
162197
5. 退出分支是否都做了 `RyanJsonDelete`。
163198
199+
## 遇到这些情况时不要停在本页
200+
- 想看平台接入模板:转 `integrationTemplate.md`
201+
- 想看 RT-Thread 差异:转 `rt-thread-examples.md`
202+
- 想确认失败谁释放:转 `ownershipAndErrors.md`
203+
- 想排查 crash、性能或内部实现风险:转 `../../shared/questionRouter.md`,通常进入 `../../ryanjson-optimization/SKILL.md`
204+
164205
## 依据(仓库内)
165206
- `RyanJson/RyanJson.c`:`RyanJsonInitHooks`、`RyanJsonDelete`
166207
- `RyanJson/RyanJsonItem.c`:`RyanJsonReplaceByKey`、`RyanJsonDetachByKey`、`RyanJsonAddItemToObject`

skills/ryanjson-optimization/SKILL.md

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@ description: RyanJson 核心实现优化与审查。用于 Parse/Print/Item/Comp
1616

1717
## 核心流程
1818
1. 先读 `../shared/ryanJsonCommon.md`,锁定宏与语义边界。
19-
2. 建立基线:正确性、耗时、内存峰值、崩溃样本、覆盖率。
20-
3. 设计最小改动:只改目标路径,避免顺手重构。
21-
4. 增量验证:先定向回归,再扩到全量门禁。
22-
5. 输出结论:收益、代价、兼容影响、剩余风险与回滚条件。
19+
2. 若问题只是公开 API 使用、仓库导航或测试归属,先按 `../shared/questionRouter.md` 分流到对应 skill。
20+
3. 建立基线:正确性、耗时、内存峰值、崩溃样本、覆盖率。
21+
4. 设计最小改动:只改目标路径,避免顺手重构。
22+
5. 增量验证:先定向回归,再扩到全量门禁。
23+
6. 输出结论:收益、代价、兼容影响、剩余风险与回滚条件。
2324

2425
## 约束(必须遵守)
2526
- 未授权不得改变公开 API 语义或默认行为。
@@ -37,10 +38,14 @@ description: RyanJson 核心实现优化与审查。用于 Parse/Print/Item/Comp
3738
## 示例
3839
- 用户问“解析性能慢,不改 API 前提下怎么优化?”:走本技能,给出最小改动与验证门禁。
3940
- 用户问“内存峰值过高,允许新增宏开关”:走本技能,评估兼容影响与回归链路。
41+
- 用户第一次进入优化问题,不确定该先看热点、门禁还是架构:先看 `references/entryScenarios.md`
4042

4143
## 参考导航
4244
- 共享基线:`../shared/ryanJsonCommon.md`
45+
- 快速分流:`../shared/questionRouter.md`
46+
- 路由样例:`../shared/routingExamples.md`
4347
- 架构与数据结构:`../shared/architecture.md`
48+
- 首屏入口:`references/entryScenarios.md`
4449
- 注释规范:统一用 Doxygen 风格,类型名/字段语义/API 名保持英文(见共享基线第 9 节)
4550
- 工作流:`references/coreWorkflow.md`
4651
- 门禁:`references/regressionGates.md`
@@ -50,4 +55,4 @@ description: RyanJson 核心实现优化与审查。用于 Parse/Print/Item/Comp
5055
- 配置开关:`references/configSwitches.md`
5156
- 优化配方:`references/optimizationRecipes.md`
5257
- 术语:`references/terminology.md`
53-
- 本地压缩文档:`architecture.md``pitfalls.md``sop.md`
58+
- 本地压缩文档:`context.md``architecture.md``pitfalls.md``sop.md`
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
interface:
22
display_name: "RyanJson 核心优化"
33
short_description: "回答、审查或实现不改公开 API 语义的核心优化"
4-
default_prompt: "使用 $ryanjson-optimization 回答、审查或实现 RyanJson 核心优化相关需求;在不改公开 API 语义前提下给出最小改动方案、风险判断与可复现回归证据,并遵循共享基线"
4+
default_prompt: "使用 $ryanjson-optimization 回答、审查或实现 RyanJson 核心优化相关需求;若问题只是 API 用法、仓库导航或测试归属,先分流到对应 skill。用户第一次进入优化问题时优先给首屏入口,再在不改公开 API 语义前提下给出最小改动方案,显式区分已验证事实与推断,并给出风险判断、回滚条件与可复现回归证据,遵循共享基线"
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# RyanJson 优化语境(压缩版)
2+
3+
## 1. 作用
4+
- 帮助用户和 AI 快速判断“这是实现优化问题、行为修复问题,还是其实该转别的 skill”。
5+
- 回答前先锁定语义边界、回归门禁和收益目标。
6+
7+
## 2. 首屏先判断什么
8+
1. 这是性能、内存、稳定性,还是 crash 根因问题。
9+
2. 是否允许改默认行为或新增宏。
10+
3. 当前问题是不是其实属于 API 用法或测试归属。
11+
12+
## 3. 回答前必须覆盖
13+
1. 已验证事实与推断结论要分开。
14+
2. 先给最小改动方向,再给门禁和风险。
15+
3. 涉及 crash、对齐、所有权时要明确相关回归入口。
16+
17+
## 4. 第一次进入本 skill 时先看哪里
18+
- 问题还模糊:`references/entryScenarios.md`
19+
- 想知道整体执行顺序:`references/coreWorkflow.md`
20+
- 想知道能不能合入:`references/regressionGates.md`
21+
- 想知道哪里最容易踩坑:`pitfalls.md`
22+
23+
## 5. 输出检查单
24+
1. 有没有改变公开语义。
25+
2. 有没有给出最小验证链路。
26+
3. 有没有说明剩余风险与回滚条件。
27+
28+
## 6. 依据(仓库内)
29+
- `references/coreWorkflow.md`
30+
- `references/regressionGates.md`
31+
- `pitfalls.md`
32+
- `../shared/questionRouter.md`
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# RyanJson 优化入口场景
2+
3+
## 范围
4+
- 用于回答“我这个问题刚进入优化领域,第一跳该看哪里”。
5+
- 不直接展开完整方案,只做首屏分流。
6+
7+
## 场景 1:Parse / Print 变慢了
8+
- 先看:`coreWorkflow.md`
9+
- 再看:`moduleHotspots.md`
10+
- 再看:`regressionGates.md`
11+
12+
## 场景 2:Replace / Add / Compare 路径 crash 了
13+
- 先看:`coreWorkflow.md`
14+
- 再看:`moduleHotspots.md`
15+
- 再看:`../../shared/architecture.md`
16+
17+
## 场景 3:想压低内存峰值,但不确定能不能改宏
18+
- 先看:`configSwitches.md`
19+
- 再看:`optimizationRecipes.md`
20+
- 再看:`regressionGates.md`
21+
22+
## 场景 4:想评估一个实现改动有没有风险
23+
- 先看:`moduleHotspots.md`
24+
- 再看:`regressionGates.md`
25+
- 再看:`optimizationTemplate.md`
26+
27+
## 场景 5:问题其实更像 API 用法或测试归属
28+
- API 用法、失败语义、集成问题:转 `../../ryanjson-api-usage/SKILL.md`
29+
- 补测、去重、回归归属:转 `../../ryanjson-test-engineering/SKILL.md`

0 commit comments

Comments
 (0)