Skip to content

Commit 76821f3

Browse files
committed
ai: 优化agent和skills
1 parent 8849f33 commit 76821f3

30 files changed

Lines changed: 712 additions & 233 deletions

.agent/rules/gemini.md

Lines changed: 0 additions & 10 deletions
This file was deleted.

AGENTS.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,15 @@
2020
- 架构与数据结构:`skills/shared/architecture.md`
2121

2222
## 技能路由
23+
- 项目概览、目录结构、构建脚本、CI 与报告路径:`skills/ryanjson-project-guide/SKILL.md`
2324
- 涉及内部实现/数据结构:先读 `skills/shared/architecture.md`,再进入对应技能。
2425
- API 使用、集成、所有权与示例:`skills/ryanjson-api-usage/SKILL.md`
2526
- 核心优化、性能、内存与语义边界:`skills/ryanjson-optimization/SKILL.md`
2627
- 单元测试工程、用例归属与覆盖策略:`skills/ryanjson-test-engineering/SKILL.md`
2728

2829
## Agent 入口
2930
- 技能内的 agent 模板:`skills/*/agents/openai.yaml`
30-
- 仓库级规则补充:`.agent/rules/gemini.md`
31+
32+
## 本地校验
33+
- skills/agents 文档校验入口:`run_local_skills.sh`
34+
- 仓库内 validator:`scripts/tools/validate_skills.py`
Lines changed: 241 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
1+
{
2+
"suite": "ryanjson-api-usage",
3+
"description": "RyanJson 公开 API 使用、初始化、失败语义与集成路由样本,重点覆盖常见使用咨询。",
4+
"cases": [
5+
{
6+
"id": "api-rtthread-hooks-init",
7+
"query": "RT-Thread 下最小接入 RyanJson 应该怎么初始化?RyanJsonInitHooks 需要放在哪里调用?",
8+
"expected_skill": "ryanjson-api-usage",
9+
"must_reference": [
10+
"skills/ryanjson-api-usage/SKILL.md",
11+
"skills/ryanjson-api-usage/references/hooksInitPolicy.md",
12+
"skills/ryanjson-api-usage/references/quickstart.md"
13+
],
14+
"must_not_route_to": [
15+
"ryanjson-project-guide",
16+
"ryanjson-optimization",
17+
"ryanjson-test-engineering"
18+
],
19+
"tags": ["api", "hooks", "rt-thread"]
20+
},
21+
{
22+
"id": "api-parse-and-read-field",
23+
"query": "给我一个最小示例:Parse 一个 JSON,然后安全读取 age 字段。",
24+
"expected_skill": "ryanjson-api-usage",
25+
"must_reference": [
26+
"skills/ryanjson-api-usage/references/quickstart.md",
27+
"skills/ryanjson-api-usage/references/apiPatterns.md"
28+
],
29+
"must_not_route_to": [
30+
"ryanjson-project-guide",
31+
"ryanjson-optimization",
32+
"ryanjson-test-engineering"
33+
],
34+
"tags": ["api", "parse", "get"]
35+
},
36+
{
37+
"id": "api-create-object-print-compact",
38+
"query": "怎么创建一个对象然后打印成紧凑 JSON,不要格式化输出?",
39+
"expected_skill": "ryanjson-api-usage",
40+
"must_reference": [
41+
"skills/ryanjson-api-usage/references/apiPatterns.md",
42+
"skills/ryanjson-api-usage/references/quickstart.md"
43+
],
44+
"must_not_route_to": [
45+
"ryanjson-project-guide",
46+
"ryanjson-optimization",
47+
"ryanjson-test-engineering"
48+
],
49+
"tags": ["api", "create", "print"]
50+
},
51+
{
52+
"id": "api-print-preallocated-buffer",
53+
"query": "我有固定缓冲区,应该用哪个 API 打印,失败时怎么判断容量不够?",
54+
"expected_skill": "ryanjson-api-usage",
55+
"must_reference": [
56+
"skills/ryanjson-api-usage/references/apiPatterns.md",
57+
"skills/ryanjson-api-usage/references/apiReference.md",
58+
"skills/ryanjson-api-usage/references/quickstart.md"
59+
],
60+
"must_not_route_to": [
61+
"ryanjson-project-guide",
62+
"ryanjson-optimization",
63+
"ryanjson-test-engineering"
64+
],
65+
"tags": ["api", "print", "buffer"]
66+
},
67+
{
68+
"id": "api-replace-failure-ownership",
69+
"query": "RyanJsonReplaceByKey 失败以后,新建的 item 到底谁负责释放?",
70+
"expected_skill": "ryanjson-api-usage",
71+
"must_reference": [
72+
"skills/ryanjson-api-usage/references/ownershipAndErrors.md",
73+
"skills/ryanjson-api-usage/references/quickstart.md",
74+
"skills/shared/ryanJsonCommon.md"
75+
],
76+
"must_not_route_to": [
77+
"ryanjson-project-guide",
78+
"ryanjson-optimization",
79+
"ryanjson-test-engineering"
80+
],
81+
"tags": ["api", "replace", "ownership"]
82+
},
83+
{
84+
"id": "api-add-insert-failure-ownership",
85+
"query": "AddItemToObject 或 Insert 失败时,游离节点是不是要我自己手动 Delete?",
86+
"expected_skill": "ryanjson-api-usage",
87+
"must_reference": [
88+
"skills/ryanjson-api-usage/references/ownershipAndErrors.md",
89+
"skills/shared/ryanJsonCommon.md",
90+
"skills/ryanjson-api-usage/references/apiPatterns.md"
91+
],
92+
"must_not_route_to": [
93+
"ryanjson-project-guide",
94+
"ryanjson-optimization",
95+
"ryanjson-test-engineering"
96+
],
97+
"tags": ["api", "add", "insert"]
98+
},
99+
{
100+
"id": "api-detach-reuse-node",
101+
"query": "DetachByKey 取下来的节点怎么重新挂到另一个对象里?失败分支应该怎么释放?",
102+
"expected_skill": "ryanjson-api-usage",
103+
"must_reference": [
104+
"skills/ryanjson-api-usage/references/ownershipAndErrors.md",
105+
"skills/ryanjson-api-usage/references/quickstart.md",
106+
"skills/ryanjson-api-usage/references/apiPatterns.md"
107+
],
108+
"must_not_route_to": [
109+
"ryanjson-project-guide",
110+
"ryanjson-optimization",
111+
"ryanjson-test-engineering"
112+
],
113+
"tags": ["api", "detach", "reuse"]
114+
},
115+
{
116+
"id": "api-change-vs-replace",
117+
"query": "同类型更新和跨类型替换应该怎么选?什么时候该用 Change*Value,什么时候该用 ReplaceByKey?",
118+
"expected_skill": "ryanjson-api-usage",
119+
"must_reference": [
120+
"skills/ryanjson-api-usage/references/apiPatterns.md",
121+
"skills/ryanjson-api-usage/references/apiReference.md"
122+
],
123+
"must_not_route_to": [
124+
"ryanjson-project-guide",
125+
"ryanjson-optimization",
126+
"ryanjson-test-engineering"
127+
],
128+
"tags": ["api", "change", "replace"]
129+
},
130+
{
131+
"id": "api-duplicate-key-policy",
132+
"query": "默认配置下重复 key 是允许还是拒绝?GetObjectByKey 会取哪一个?",
133+
"expected_skill": "ryanjson-api-usage",
134+
"must_reference": [
135+
"skills/ryanjson-api-usage/references/apiPatterns.md",
136+
"skills/shared/ryanJsonCommon.md",
137+
"skills/ryanjson-api-usage/references/apiReference.md"
138+
],
139+
"must_not_route_to": [
140+
"ryanjson-project-guide",
141+
"ryanjson-optimization",
142+
"ryanjson-test-engineering"
143+
],
144+
"tags": ["api", "duplicate-key", "config"]
145+
},
146+
{
147+
"id": "api-minify-vs-print",
148+
"query": "如果我只是想得到压缩 JSON,应该用 RyanJsonMinify 还是 RyanJsonPrint(..., RyanJsonFalse, ...)?",
149+
"expected_skill": "ryanjson-api-usage",
150+
"must_reference": [
151+
"skills/ryanjson-api-usage/references/apiPatterns.md",
152+
"skills/ryanjson-api-usage/references/pitfallsAndDebug.md"
153+
],
154+
"must_not_route_to": [
155+
"ryanjson-project-guide",
156+
"ryanjson-optimization",
157+
"ryanjson-test-engineering"
158+
],
159+
"tags": ["api", "minify", "print"]
160+
},
161+
{
162+
"id": "api-child-pointer-after-add",
163+
"query": "RyanJsonAddItemToObject 成功后,我还能继续拿旧的子容器指针改内容吗,还是必须重新取?",
164+
"expected_skill": "ryanjson-api-usage",
165+
"must_reference": [
166+
"skills/ryanjson-api-usage/SKILL.md",
167+
"skills/ryanjson-api-usage/references/pitfallsAndDebug.md",
168+
"skills/ryanjson-api-usage/references/apiPatterns.md"
169+
],
170+
"must_not_route_to": [
171+
"ryanjson-project-guide",
172+
"ryanjson-optimization",
173+
"ryanjson-test-engineering"
174+
],
175+
"tags": ["api", "container", "safety"]
176+
},
177+
{
178+
"id": "api-custom-allocator-hooks",
179+
"query": "我想把 RyanJson 接到自己的 malloc/free/realloc 包装层,推荐的初始化顺序是什么?",
180+
"expected_skill": "ryanjson-api-usage",
181+
"must_reference": [
182+
"skills/ryanjson-api-usage/references/hooksInitPolicy.md",
183+
"skills/ryanjson-api-usage/references/integrationTemplate.md"
184+
],
185+
"must_not_route_to": [
186+
"ryanjson-project-guide",
187+
"ryanjson-optimization",
188+
"ryanjson-test-engineering"
189+
],
190+
"tags": ["api", "hooks", "allocator"]
191+
},
192+
{
193+
"id": "api-rtthread-integration-template",
194+
"query": "RT-Thread 工程里要把 RyanJson 集成进去,最小模板和注意事项应该看哪里?",
195+
"expected_skill": "ryanjson-api-usage",
196+
"must_reference": [
197+
"skills/ryanjson-api-usage/references/rt-thread-examples.md",
198+
"skills/ryanjson-api-usage/references/integrationTemplate.md",
199+
"skills/ryanjson-api-usage/references/hooksInitPolicy.md"
200+
],
201+
"must_not_route_to": [
202+
"ryanjson-project-guide",
203+
"ryanjson-optimization",
204+
"ryanjson-test-engineering"
205+
],
206+
"tags": ["api", "rt-thread", "integration"]
207+
},
208+
{
209+
"id": "api-delete-vs-detach",
210+
"query": "DeleteByKey 和 DetachByKey 的区别是什么?我想拿走节点稍后再挂,应该选哪个?",
211+
"expected_skill": "ryanjson-api-usage",
212+
"must_reference": [
213+
"skills/ryanjson-api-usage/references/ownershipAndErrors.md",
214+
"skills/ryanjson-api-usage/references/apiReference.md",
215+
"skills/ryanjson-api-usage/references/apiPatterns.md"
216+
],
217+
"must_not_route_to": [
218+
"ryanjson-project-guide",
219+
"ryanjson-optimization",
220+
"ryanjson-test-engineering"
221+
],
222+
"tags": ["api", "delete", "detach"]
223+
},
224+
{
225+
"id": "api-review-getint-without-type-check",
226+
"query": "帮我审一下这类写法是否安全:GetObjectByKey 之后直接 GetIntValue,不做 RyanJsonIsInt 判型。",
227+
"expected_skill": "ryanjson-api-usage",
228+
"must_reference": [
229+
"skills/ryanjson-api-usage/SKILL.md",
230+
"skills/ryanjson-api-usage/references/pitfallsAndDebug.md",
231+
"skills/ryanjson-api-usage/references/quickstart.md"
232+
],
233+
"must_not_route_to": [
234+
"ryanjson-project-guide",
235+
"ryanjson-optimization",
236+
"ryanjson-test-engineering"
237+
],
238+
"tags": ["api", "review", "type-check"]
239+
}
240+
]
241+
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
{
2+
"suite": "ryanjson-optimization",
3+
"description": "RyanJson 核心实现优化、性能权衡与语义边界路由样本。",
4+
"cases": [
5+
{
6+
"id": "opt-unalign-access-policy",
7+
"query": "QEMU 路径为什么不直接开 -mno-unaligned-access,而是保留 UNALIGN_TRP 语义去抓问题?",
8+
"expected_skill": "ryanjson-optimization",
9+
"must_reference": [
10+
"skills/ryanjson-optimization/SKILL.md",
11+
"skills/ryanjson-optimization/references/coreWorkflow.md",
12+
"skills/shared/ryanJsonCommon.md"
13+
],
14+
"must_not_route_to": [
15+
"ryanjson-project-guide",
16+
"ryanjson-api-usage",
17+
"ryanjson-test-engineering"
18+
],
19+
"tags": ["optimization", "qemu", "unalign"]
20+
},
21+
{
22+
"id": "opt-parse-performance-no-api-change",
23+
"query": "Parse 性能慢,但我不想改公开 API 语义,应该从哪些模块热点开始分析?",
24+
"expected_skill": "ryanjson-optimization",
25+
"must_reference": [
26+
"skills/ryanjson-optimization/references/moduleHotspots.md",
27+
"skills/ryanjson-optimization/references/coreWorkflow.md",
28+
"skills/ryanjson-optimization/references/optimizationRecipes.md"
29+
],
30+
"must_not_route_to": [
31+
"ryanjson-project-guide",
32+
"ryanjson-api-usage",
33+
"ryanjson-test-engineering"
34+
],
35+
"tags": ["optimization", "parse", "performance"]
36+
},
37+
{
38+
"id": "opt-memory-peak-with-config",
39+
"query": "如果允许新增宏开关,想进一步压低节点内存峰值,应该重点评估哪些配置和兼容风险?",
40+
"expected_skill": "ryanjson-optimization",
41+
"must_reference": [
42+
"skills/ryanjson-optimization/references/configSwitches.md",
43+
"skills/ryanjson-optimization/references/optimizationTemplate.md",
44+
"skills/shared/ryanJsonCommon.md"
45+
],
46+
"must_not_route_to": [
47+
"ryanjson-project-guide",
48+
"ryanjson-api-usage",
49+
"ryanjson-test-engineering"
50+
],
51+
"tags": ["optimization", "memory", "config"]
52+
},
53+
{
54+
"id": "opt-item-path-crash-root-cause",
55+
"query": "Replace 相关路径出现 crash,我想先做根因分析和最小回归闭环,这类问题该怎么切?",
56+
"expected_skill": "ryanjson-optimization",
57+
"must_reference": [
58+
"skills/ryanjson-optimization/references/coreWorkflow.md",
59+
"skills/ryanjson-optimization/references/regressionGates.md",
60+
"skills/ryanjson-optimization/references/moduleHotspots.md"
61+
],
62+
"must_not_route_to": [
63+
"ryanjson-project-guide",
64+
"ryanjson-api-usage",
65+
"ryanjson-test-engineering"
66+
],
67+
"tags": ["optimization", "crash", "replace"]
68+
},
69+
{
70+
"id": "opt-review-compare-risk",
71+
"query": "帮我评估一下 Compare 和 CompareOnlyKey 的内部优化风险,尤其是重复 key 和非递归遍历这块。",
72+
"expected_skill": "ryanjson-optimization",
73+
"must_reference": [
74+
"skills/ryanjson-optimization/references/coreArchitecture.md",
75+
"skills/ryanjson-optimization/references/moduleHotspots.md",
76+
"skills/shared/architecture.md"
77+
],
78+
"must_not_route_to": [
79+
"ryanjson-project-guide",
80+
"ryanjson-api-usage",
81+
"ryanjson-test-engineering"
82+
],
83+
"tags": ["optimization", "compare", "review"]
84+
}
85+
]
86+
}

0 commit comments

Comments
 (0)