@rotifer/playground 0.5.0-alpha.2 → 0.7.0

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 (316) hide show
  1. package/CHANGELOG.md +159 -15
  2. package/LICENSE +1 -1
  3. package/README.md +51 -23
  4. package/README.zh.md +54 -25
  5. package/dist/cloud/auth.d.ts +7 -1
  6. package/dist/cloud/auth.d.ts.map +1 -1
  7. package/dist/cloud/auth.js +65 -1
  8. package/dist/cloud/auth.js.map +1 -1
  9. package/dist/cloud/client.d.ts +4 -1
  10. package/dist/cloud/client.d.ts.map +1 -1
  11. package/dist/cloud/client.js +9 -2
  12. package/dist/cloud/client.js.map +1 -1
  13. package/dist/cloud/types.d.ts +3 -1
  14. package/dist/cloud/types.d.ts.map +1 -1
  15. package/dist/cloud/types.js.map +1 -1
  16. package/dist/commands/agent-create.d.ts.map +1 -1
  17. package/dist/commands/agent-create.js +66 -3
  18. package/dist/commands/agent-create.js.map +1 -1
  19. package/dist/commands/agent-run.d.ts.map +1 -1
  20. package/dist/commands/agent-run.js +296 -32
  21. package/dist/commands/agent-run.js.map +1 -1
  22. package/dist/commands/arena-submit.d.ts.map +1 -1
  23. package/dist/commands/arena-submit.js +45 -17
  24. package/dist/commands/arena-submit.js.map +1 -1
  25. package/dist/commands/compile.d.ts.map +1 -1
  26. package/dist/commands/compile.js +9 -3
  27. package/dist/commands/compile.js.map +1 -1
  28. package/dist/commands/init.d.ts.map +1 -1
  29. package/dist/commands/init.js +13 -3
  30. package/dist/commands/init.js.map +1 -1
  31. package/dist/commands/login.d.ts.map +1 -1
  32. package/dist/commands/login.js +23 -16
  33. package/dist/commands/login.js.map +1 -1
  34. package/dist/commands/network.js +4 -4
  35. package/dist/commands/network.js.map +1 -1
  36. package/dist/commands/publish.d.ts.map +1 -1
  37. package/dist/commands/publish.js +162 -44
  38. package/dist/commands/publish.js.map +1 -1
  39. package/dist/commands/test.d.ts.map +1 -1
  40. package/dist/commands/test.js +209 -23
  41. package/dist/commands/test.js.map +1 -1
  42. package/dist/commands/wrap.d.ts.map +1 -1
  43. package/dist/commands/wrap.js +17 -1
  44. package/dist/commands/wrap.js.map +1 -1
  45. package/dist/index.js +0 -0
  46. package/dist/runtime/network-gateway.d.ts +53 -0
  47. package/dist/runtime/network-gateway.d.ts.map +1 -0
  48. package/dist/runtime/network-gateway.js +147 -0
  49. package/dist/runtime/network-gateway.js.map +1 -0
  50. package/dist/utils/binding.d.ts +25 -0
  51. package/dist/utils/binding.d.ts.map +1 -1
  52. package/dist/utils/binding.js.map +1 -1
  53. package/dist/utils/open-browser.d.ts +10 -0
  54. package/dist/utils/open-browser.d.ts.map +1 -0
  55. package/dist/utils/open-browser.js +23 -0
  56. package/dist/utils/open-browser.js.map +1 -0
  57. package/genes/academic-writer/.cloud-manifest.json +6 -0
  58. package/genes/academic-writer/.gene-manifest.json +8 -0
  59. package/genes/academic-writer/SKILL.md +274 -0
  60. package/genes/academic-writer/phenotype.json +28 -0
  61. package/genes/ai-components/.cloud-manifest.json +6 -0
  62. package/genes/ai-components/.gene-manifest.json +8 -0
  63. package/genes/ai-components/SKILL.md +381 -0
  64. package/genes/ai-components/phenotype.json +28 -0
  65. package/genes/algorithmic-art/.cloud-manifest.json +6 -0
  66. package/genes/algorithmic-art/.gene-manifest.json +8 -0
  67. package/genes/algorithmic-art/SKILL.md +405 -0
  68. package/genes/algorithmic-art/phenotype.json +28 -0
  69. package/genes/answer-synthesizer/.cloud-manifest.json +6 -0
  70. package/genes/answer-synthesizer/index.ts +194 -0
  71. package/genes/answer-synthesizer/phenotype.json +61 -0
  72. package/genes/api-designer/.cloud-manifest.json +6 -0
  73. package/genes/api-designer/.gene-manifest.json +8 -0
  74. package/genes/api-designer/SKILL.md +456 -0
  75. package/genes/api-designer/phenotype.json +28 -0
  76. package/genes/auto-coder/.cloud-manifest.json +6 -0
  77. package/genes/auto-coder/.gene-manifest.json +8 -0
  78. package/genes/auto-coder/SKILL.md +400 -0
  79. package/genes/auto-coder/phenotype.json +28 -0
  80. package/genes/auto-writer/.cloud-manifest.json +6 -0
  81. package/genes/auto-writer/.gene-manifest.json +8 -0
  82. package/genes/auto-writer/SKILL.md +361 -0
  83. package/genes/auto-writer/phenotype.json +28 -0
  84. package/genes/brand-personality/.cloud-manifest.json +6 -0
  85. package/genes/brand-personality/.gene-manifest.json +8 -0
  86. package/genes/brand-personality/SKILL.md +549 -0
  87. package/genes/brand-personality/phenotype.json +28 -0
  88. package/genes/business-writer/.cloud-manifest.json +6 -0
  89. package/genes/business-writer/.gene-manifest.json +8 -0
  90. package/genes/business-writer/SKILL.md +448 -0
  91. package/genes/business-writer/phenotype.json +28 -0
  92. package/genes/citation-manager/.cloud-manifest.json +6 -0
  93. package/genes/citation-manager/.gene-manifest.json +8 -0
  94. package/genes/citation-manager/SKILL.md +279 -0
  95. package/genes/citation-manager/index.ts +162 -0
  96. package/genes/citation-manager/package.json +1 -0
  97. package/genes/citation-manager/phenotype.json +50 -0
  98. package/genes/code-complexity/.cloud-manifest.json +6 -0
  99. package/genes/code-complexity/README.md +35 -0
  100. package/genes/code-complexity/index.ts +101 -0
  101. package/genes/code-complexity/phenotype.json +34 -0
  102. package/genes/copywriter/.cloud-manifest.json +6 -0
  103. package/genes/copywriter/.gene-manifest.json +8 -0
  104. package/genes/copywriter/SKILL.md +329 -0
  105. package/genes/copywriter/phenotype.json +28 -0
  106. package/genes/creative-writer/.cloud-manifest.json +6 -0
  107. package/genes/creative-writer/.gene-manifest.json +8 -0
  108. package/genes/creative-writer/SKILL.md +356 -0
  109. package/genes/creative-writer/phenotype.json +28 -0
  110. package/genes/data-modeler/.cloud-manifest.json +6 -0
  111. package/genes/data-modeler/.gene-manifest.json +8 -0
  112. package/genes/data-modeler/SKILL.md +486 -0
  113. package/genes/data-modeler/phenotype.json +28 -0
  114. package/genes/debugger/.cloud-manifest.json +6 -0
  115. package/genes/debugger/.gene-manifest.json +8 -0
  116. package/genes/debugger/SKILL.md +416 -0
  117. package/genes/debugger/phenotype.json +28 -0
  118. package/genes/design-tokens/.cloud-manifest.json +6 -0
  119. package/genes/design-tokens/.gene-manifest.json +8 -0
  120. package/genes/design-tokens/SKILL.md +222 -0
  121. package/genes/design-tokens/index.ts +128 -0
  122. package/genes/design-tokens/package.json +1 -0
  123. package/genes/design-tokens/phenotype.json +1 -0
  124. package/genes/devops-automator/.cloud-manifest.json +6 -0
  125. package/genes/devops-automator/.gene-manifest.json +8 -0
  126. package/genes/devops-automator/SKILL.md +490 -0
  127. package/genes/devops-automator/phenotype.json +28 -0
  128. package/genes/doc-coauthoring/.cloud-manifest.json +6 -0
  129. package/genes/doc-coauthoring/.gene-manifest.json +8 -0
  130. package/genes/doc-coauthoring/SKILL.md +375 -0
  131. package/genes/doc-coauthoring/phenotype.json +28 -0
  132. package/genes/doc-retrieval/.cloud-manifest.json +6 -0
  133. package/genes/doc-retrieval/index.ts +134 -0
  134. package/genes/doc-retrieval/phenotype.json +54 -0
  135. package/genes/docs-writer/.cloud-manifest.json +6 -0
  136. package/genes/docs-writer/.gene-manifest.json +8 -0
  137. package/genes/docs-writer/SKILL.md +492 -0
  138. package/genes/docs-writer/phenotype.json +28 -0
  139. package/genes/evolve-life/.cloud-manifest.json +6 -0
  140. package/genes/evolve-life/.compile-result.json +12 -0
  141. package/genes/evolve-life/README.md +52 -0
  142. package/genes/evolve-life/gene.ir.wasm +0 -0
  143. package/genes/evolve-life/gene.wasm +0 -0
  144. package/genes/evolve-life/index.ts +255 -0
  145. package/genes/evolve-life/phenotype.json +129 -0
  146. package/genes/evolve-life-bitwise/.cloud-manifest.json +6 -0
  147. package/genes/evolve-life-bitwise/.compile-result.json +12 -0
  148. package/genes/evolve-life-bitwise/gene.ir.wasm +0 -0
  149. package/genes/evolve-life-bitwise/gene.wasm +0 -0
  150. package/genes/evolve-life-bitwise/index.ts +273 -0
  151. package/genes/evolve-life-bitwise/phenotype.json +129 -0
  152. package/genes/evolve-life-sparse/.cloud-manifest.json +6 -0
  153. package/genes/evolve-life-sparse/.compile-result.json +12 -0
  154. package/genes/evolve-life-sparse/gene.ir.wasm +0 -0
  155. package/genes/evolve-life-sparse/gene.wasm +0 -0
  156. package/genes/evolve-life-sparse/index.ts +236 -0
  157. package/genes/evolve-life-sparse/phenotype.json +129 -0
  158. package/genes/fact-checker/.cloud-manifest.json +6 -0
  159. package/genes/fact-checker/.gene-manifest.json +8 -0
  160. package/genes/fact-checker/SKILL.md +373 -0
  161. package/genes/fact-checker/phenotype.json +28 -0
  162. package/genes/genesis-code-format/.cloud-manifest.json +6 -0
  163. package/genes/genesis-code-format/package.json +1 -0
  164. package/genes/genesis-code-format/phenotype.json +1 -0
  165. package/genes/genesis-file-read/.cloud-manifest.json +6 -0
  166. package/genes/genesis-file-read/index.ts +11 -1
  167. package/genes/genesis-file-read/package.json +1 -0
  168. package/genes/genesis-file-read/phenotype.json +1 -0
  169. package/genes/genesis-l0-constraint/.cloud-manifest.json +6 -0
  170. package/genes/genesis-l0-constraint/package.json +1 -0
  171. package/genes/genesis-l0-constraint/phenotype.json +1 -0
  172. package/genes/genesis-web-search/.cloud-manifest.json +2 -2
  173. package/genes/genesis-web-search/package.json +1 -0
  174. package/genes/genesis-web-search/phenotype.json +1 -0
  175. package/genes/genesis-web-search-lite/.cloud-manifest.json +6 -0
  176. package/genes/genesis-web-search-lite/package.json +1 -0
  177. package/genes/genesis-web-search-lite/phenotype.json +1 -0
  178. package/genes/git-workflow/.cloud-manifest.json +6 -0
  179. package/genes/git-workflow/.gene-manifest.json +8 -0
  180. package/genes/git-workflow/SKILL.md +407 -0
  181. package/genes/git-workflow/phenotype.json +28 -0
  182. package/genes/grammar-checker/.cloud-manifest.json +6 -0
  183. package/genes/grammar-checker/.gene-manifest.json +8 -0
  184. package/genes/grammar-checker/SKILL.md +194 -0
  185. package/genes/grammar-checker/index.ts +168 -0
  186. package/genes/grammar-checker/package.json +1 -0
  187. package/genes/grammar-checker/phenotype.json +52 -0
  188. package/genes/json-validator/.cloud-manifest.json +6 -0
  189. package/genes/json-validator/README.md +42 -0
  190. package/genes/json-validator/index.ts +112 -0
  191. package/genes/json-validator/phenotype.json +42 -0
  192. package/genes/license-advisor/.cloud-manifest.json +6 -0
  193. package/genes/license-advisor/.gene-manifest.json +8 -0
  194. package/genes/license-advisor/SKILL.md +117 -0
  195. package/genes/license-advisor/phenotype.json +28 -0
  196. package/genes/logic-architect/.cloud-manifest.json +6 -0
  197. package/genes/logic-architect/.gene-manifest.json +8 -0
  198. package/genes/logic-architect/SKILL.md +451 -0
  199. package/genes/logic-architect/phenotype.json +28 -0
  200. package/genes/markdown-formatter/.cloud-manifest.json +6 -0
  201. package/genes/markdown-formatter/README.md +34 -0
  202. package/genes/markdown-formatter/index.ts +86 -0
  203. package/genes/markdown-formatter/phenotype.json +32 -0
  204. package/genes/orch/.cloud-manifest.json +6 -0
  205. package/genes/orch/.gene-manifest.json +8 -0
  206. package/genes/orch/SKILL.md +504 -0
  207. package/genes/orch/phenotype.json +28 -0
  208. package/genes/particle-barneshut/.cloud-manifest.json +6 -0
  209. package/genes/particle-barneshut/.compile-result.json +12 -0
  210. package/genes/particle-barneshut/README.md +55 -0
  211. package/genes/particle-barneshut/gene.ir.wasm +0 -0
  212. package/genes/particle-barneshut/gene.wasm +0 -0
  213. package/genes/particle-barneshut/index.ts +486 -0
  214. package/genes/particle-barneshut/phenotype.json +137 -0
  215. package/genes/particle-brute/.cloud-manifest.json +6 -0
  216. package/genes/particle-brute/.compile-result.json +12 -0
  217. package/genes/particle-brute/README.md +55 -0
  218. package/genes/particle-brute/gene.ir.wasm +0 -0
  219. package/genes/particle-brute/gene.wasm +0 -0
  220. package/genes/particle-brute/index.ts +277 -0
  221. package/genes/particle-brute/phenotype.json +137 -0
  222. package/genes/particle-spatial/.cloud-manifest.json +6 -0
  223. package/genes/particle-spatial/.compile-result.json +12 -0
  224. package/genes/particle-spatial/README.md +53 -0
  225. package/genes/particle-spatial/gene.ir.wasm +0 -0
  226. package/genes/particle-spatial/gene.wasm +0 -0
  227. package/genes/particle-spatial/index.ts +352 -0
  228. package/genes/particle-spatial/phenotype.json +137 -0
  229. package/genes/performance-optimizer/.cloud-manifest.json +6 -0
  230. package/genes/performance-optimizer/.gene-manifest.json +8 -0
  231. package/genes/performance-optimizer/SKILL.md +480 -0
  232. package/genes/performance-optimizer/phenotype.json +28 -0
  233. package/genes/plagiarism-checker/.cloud-manifest.json +6 -0
  234. package/genes/plagiarism-checker/.gene-manifest.json +8 -0
  235. package/genes/plagiarism-checker/SKILL.md +342 -0
  236. package/genes/plagiarism-checker/phenotype.json +28 -0
  237. package/genes/product-manager/.cloud-manifest.json +6 -0
  238. package/genes/product-manager/.gene-manifest.json +8 -0
  239. package/genes/product-manager/SKILL.md +249 -0
  240. package/genes/product-manager/phenotype.json +28 -0
  241. package/genes/project-reviewer/.cloud-manifest.json +6 -0
  242. package/genes/project-reviewer/.gene-manifest.json +8 -0
  243. package/genes/project-reviewer/SKILL.md +312 -0
  244. package/genes/project-reviewer/phenotype.json +28 -0
  245. package/genes/prompt-engineer/.cloud-manifest.json +6 -0
  246. package/genes/prompt-engineer/.gene-manifest.json +8 -0
  247. package/genes/prompt-engineer/SKILL.md +411 -0
  248. package/genes/prompt-engineer/phenotype.json +28 -0
  249. package/genes/readability-analyzer/.cloud-manifest.json +6 -0
  250. package/genes/readability-analyzer/.gene-manifest.json +8 -0
  251. package/genes/readability-analyzer/SKILL.md +357 -0
  252. package/genes/readability-analyzer/index.ts +123 -0
  253. package/genes/readability-analyzer/package.json +1 -0
  254. package/genes/readability-analyzer/phenotype.json +35 -0
  255. package/genes/rotifer-protocol/SKILL.md +121 -0
  256. package/genes/security-auditor/.cloud-manifest.json +6 -0
  257. package/genes/security-auditor/.gene-manifest.json +8 -0
  258. package/genes/security-auditor/SKILL.md +494 -0
  259. package/genes/security-auditor/phenotype.json +28 -0
  260. package/genes/seo-optimizer/.cloud-manifest.json +6 -0
  261. package/genes/seo-optimizer/.gene-manifest.json +8 -0
  262. package/genes/seo-optimizer/SKILL.md +327 -0
  263. package/genes/seo-optimizer/index.ts +206 -0
  264. package/genes/seo-optimizer/package.json +1 -0
  265. package/genes/seo-optimizer/phenotype.json +1 -0
  266. package/genes/source-linker/.cloud-manifest.json +6 -0
  267. package/genes/source-linker/index.ts +88 -0
  268. package/genes/source-linker/phenotype.json +45 -0
  269. package/genes/style-optimizer/.cloud-manifest.json +6 -0
  270. package/genes/style-optimizer/.gene-manifest.json +8 -0
  271. package/genes/style-optimizer/SKILL.md +285 -0
  272. package/genes/style-optimizer/phenotype.json +28 -0
  273. package/genes/tech-lead/.cloud-manifest.json +6 -0
  274. package/genes/tech-lead/.gene-manifest.json +8 -0
  275. package/genes/tech-lead/SKILL.md +451 -0
  276. package/genes/tech-lead/phenotype.json +28 -0
  277. package/genes/test-wrap/.cloud-manifest.json +6 -0
  278. package/genes/test-wrap/.gene-manifest.json +8 -0
  279. package/genes/test-wrap/phenotype.json +28 -0
  280. package/genes/testing-strategist/.cloud-manifest.json +6 -0
  281. package/genes/testing-strategist/.gene-manifest.json +8 -0
  282. package/genes/testing-strategist/SKILL.md +500 -0
  283. package/genes/testing-strategist/phenotype.json +28 -0
  284. package/genes/text-summarizer/.cloud-manifest.json +6 -0
  285. package/genes/text-summarizer/README.md +34 -0
  286. package/genes/text-summarizer/index.ts +122 -0
  287. package/genes/text-summarizer/phenotype.json +32 -0
  288. package/genes/tone-analyzer/.cloud-manifest.json +6 -0
  289. package/genes/tone-analyzer/.gene-manifest.json +8 -0
  290. package/genes/tone-analyzer/SKILL.md +410 -0
  291. package/genes/tone-analyzer/phenotype.json +28 -0
  292. package/genes/translator/.cloud-manifest.json +6 -0
  293. package/genes/translator/.gene-manifest.json +8 -0
  294. package/genes/translator/SKILL.md +355 -0
  295. package/genes/translator/phenotype.json +28 -0
  296. package/genes/ui-components/.cloud-manifest.json +6 -0
  297. package/genes/ui-components/.gene-manifest.json +8 -0
  298. package/genes/ui-components/SKILL.md +467 -0
  299. package/genes/ui-components/phenotype.json +28 -0
  300. package/genes/uiux-designer/.cloud-manifest.json +6 -0
  301. package/genes/uiux-designer/.gene-manifest.json +8 -0
  302. package/genes/uiux-designer/SKILL.md +353 -0
  303. package/genes/uiux-designer/phenotype.json +28 -0
  304. package/genes/url-extractor/.cloud-manifest.json +6 -0
  305. package/genes/url-extractor/README.md +37 -0
  306. package/genes/url-extractor/index.ts +86 -0
  307. package/genes/url-extractor/phenotype.json +48 -0
  308. package/genes/ux-patterns/.cloud-manifest.json +6 -0
  309. package/genes/ux-patterns/.gene-manifest.json +8 -0
  310. package/genes/ux-patterns/SKILL.md +872 -0
  311. package/genes/ux-patterns/phenotype.json +28 -0
  312. package/genes/web3-components/.cloud-manifest.json +6 -0
  313. package/genes/web3-components/.gene-manifest.json +8 -0
  314. package/genes/web3-components/SKILL.md +390 -0
  315. package/genes/web3-components/phenotype.json +28 -0
  316. package/package.json +6 -5
@@ -0,0 +1,61 @@
1
+ {
2
+ "domain": "ai.synthesis",
3
+ "description": "Synthesizes a structured answer from retrieved document chunks using an LLM. Provider-agnostic: supports Claude and OpenAI via environment configuration.",
4
+ "inputSchema": {
5
+ "type": "object",
6
+ "properties": {
7
+ "question": {
8
+ "type": "string",
9
+ "description": "Original user question"
10
+ },
11
+ "chunks": {
12
+ "type": "array",
13
+ "items": {
14
+ "type": "object",
15
+ "properties": {
16
+ "content": { "type": "string" },
17
+ "source": { "type": "string" },
18
+ "score": { "type": "number" }
19
+ },
20
+ "required": ["content", "source"]
21
+ },
22
+ "description": "Retrieved context chunks from doc-retrieval"
23
+ },
24
+ "provider": {
25
+ "type": "string",
26
+ "description": "LLM provider override: 'claude' or 'openai' (default from env ROTIFER_LLM_PROVIDER)"
27
+ }
28
+ },
29
+ "required": ["question", "chunks"]
30
+ },
31
+ "outputSchema": {
32
+ "type": "object",
33
+ "properties": {
34
+ "answer": { "type": "string" },
35
+ "sources": {
36
+ "type": "array",
37
+ "items": { "type": "string" }
38
+ },
39
+ "confidence": {
40
+ "type": "number",
41
+ "description": "0-1 confidence score based on chunk relevance"
42
+ }
43
+ },
44
+ "required": ["answer", "sources", "confidence"]
45
+ },
46
+ "dependencies": [],
47
+ "version": "0.1.0",
48
+ "author": "rotifer-team",
49
+ "createdAt": 1772236800000,
50
+ "fidelity": "Hybrid",
51
+ "transparency": "Open",
52
+ "network": {
53
+ "allowedDomains": [
54
+ "api.anthropic.com",
55
+ "api.openai.com"
56
+ ],
57
+ "maxTimeoutMs": 30000,
58
+ "maxResponseBytes": 1048576,
59
+ "maxRequestsPerMin": 10
60
+ }
61
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "cloud_id": "c1b881ea-4f30-4c72-927c-edd041f4180f",
3
+ "owner": "Rotifer Protocol",
4
+ "version": "0.1.0",
5
+ "published_at": "2026-03-17T14:11:54.416Z"
6
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "geneId": "cd316f366dd5638f68ff3cb386ca830d013760bf60422b546af92b3de9e6709e",
3
+ "name": "api-designer",
4
+ "domain": "code.api",
5
+ "fidelity": "Wrapped",
6
+ "wrappedAt": "2026-02-24T13:23:28.115Z",
7
+ "fromSkill": "../.cursor/skills/api-designer/SKILL.md"
8
+ }
@@ -0,0 +1,456 @@
1
+ ---
2
+ name: api-designer
3
+ description: Design RESTful and tRPC APIs with consistent patterns, error handling, and documentation. Define endpoint structure, response formats, and error codes. Use when designing APIs, creating endpoints, or when the user mentions API, endpoint, REST, tRPC, or response format.
4
+ ---
5
+
6
+ # API Designer (API 设计师)
7
+
8
+ **Goal**: 设计一致、可预测、易于使用的 API 接口。
9
+
10
+ ---
11
+
12
+ ## 1. RESTful API Design
13
+
14
+ ### URL 结构
15
+
16
+ ```
17
+ # 资源命名 (名词复数)
18
+ GET /api/users # 列表
19
+ GET /api/users/:id # 详情
20
+ POST /api/users # 创建
21
+ PUT /api/users/:id # 全量更新
22
+ PATCH /api/users/:id # 部分更新
23
+ DELETE /api/users/:id # 删除
24
+
25
+ # 嵌套资源
26
+ GET /api/users/:id/posts
27
+ POST /api/users/:id/posts
28
+
29
+ # 操作 (动词,仅在必要时)
30
+ POST /api/users/:id/activate
31
+ POST /api/chat/completions
32
+ ```
33
+
34
+ ### HTTP 方法语义
35
+
36
+ | Method | 幂等 | 安全 | 用途 |
37
+ |--------|------|------|------|
38
+ | GET | ✅ | ✅ | 读取资源 |
39
+ | POST | ❌ | ❌ | 创建资源/执行操作 |
40
+ | PUT | ✅ | ❌ | 全量替换 |
41
+ | PATCH | ❌ | ❌ | 部分更新 |
42
+ | DELETE | ✅ | ❌ | 删除资源 |
43
+
44
+ ### HTTP 状态码
45
+
46
+ ```typescript
47
+ // 成功
48
+ 200 OK // 通用成功
49
+ 201 Created // 创建成功
50
+ 204 No Content // 删除成功
51
+
52
+ // 客户端错误
53
+ 400 Bad Request // 请求格式错误
54
+ 401 Unauthorized // 未认证
55
+ 403 Forbidden // 无权限
56
+ 404 Not Found // 资源不存在
57
+ 409 Conflict // 冲突 (如重复创建)
58
+ 422 Unprocessable // 验证失败
59
+ 429 Too Many Reqs // 限流
60
+
61
+ // 服务端错误
62
+ 500 Internal Error // 服务器错误
63
+ 502 Bad Gateway // 上游错误
64
+ 503 Unavailable // 服务不可用
65
+ ```
66
+
67
+ ---
68
+
69
+ ## 2. Response Format
70
+
71
+ ### 成功响应
72
+
73
+ ```typescript
74
+ // 单个资源
75
+ {
76
+ "data": {
77
+ "id": "123",
78
+ "type": "user",
79
+ "attributes": {
80
+ "name": "张三",
81
+ "email": "zhang@example.com"
82
+ }
83
+ }
84
+ }
85
+
86
+ // 简化版 (推荐 OPC)
87
+ {
88
+ "id": "123",
89
+ "name": "张三",
90
+ "email": "zhang@example.com"
91
+ }
92
+ ```
93
+
94
+ ### 列表响应
95
+
96
+ ```typescript
97
+ {
98
+ "data": [...],
99
+ "pagination": {
100
+ "page": 1,
101
+ "pageSize": 20,
102
+ "total": 100,
103
+ "totalPages": 5
104
+ }
105
+ }
106
+ ```
107
+
108
+ ### 错误响应
109
+
110
+ ```typescript
111
+ {
112
+ "error": {
113
+ "code": "VALIDATION_ERROR",
114
+ "message": "请求参数验证失败",
115
+ "details": [
116
+ { "field": "email", "message": "邮箱格式不正确" },
117
+ { "field": "password", "message": "密码至少 8 位" }
118
+ ]
119
+ }
120
+ }
121
+ ```
122
+
123
+ ---
124
+
125
+ ## 3. Error Code System
126
+
127
+ ### 错误码设计
128
+
129
+ ```typescript
130
+ // types/errors.ts
131
+ export const ERROR_CODES = {
132
+ // 认证 (1xxx)
133
+ AUTH_REQUIRED: { code: 1001, status: 401, message: '请先登录' },
134
+ AUTH_EXPIRED: { code: 1002, status: 401, message: '登录已过期' },
135
+ AUTH_INVALID: { code: 1003, status: 401, message: '认证信息无效' },
136
+
137
+ // 权限 (2xxx)
138
+ FORBIDDEN: { code: 2001, status: 403, message: '无权限访问' },
139
+
140
+ // 资源 (3xxx)
141
+ NOT_FOUND: { code: 3001, status: 404, message: '资源不存在' },
142
+ ALREADY_EXISTS: { code: 3002, status: 409, message: '资源已存在' },
143
+
144
+ // 验证 (4xxx)
145
+ VALIDATION_ERROR: { code: 4001, status: 422, message: '参数验证失败' },
146
+ INVALID_FORMAT: { code: 4002, status: 400, message: '请求格式错误' },
147
+
148
+ // 限流 (5xxx)
149
+ RATE_LIMITED: { code: 5001, status: 429, message: '请求过于频繁' },
150
+
151
+ // AI 相关 (6xxx)
152
+ AI_TOKEN_LIMIT: { code: 6001, status: 400, message: 'Token 超出限制' },
153
+ AI_TIMEOUT: { code: 6002, status: 504, message: 'AI 响应超时' },
154
+ AI_UNAVAILABLE: { code: 6003, status: 503, message: 'AI 服务不可用' },
155
+
156
+ // Web3 相关 (7xxx)
157
+ WALLET_NOT_CONNECTED: { code: 7001, status: 400, message: '钱包未连接' },
158
+ INVALID_SIGNATURE: { code: 7002, status: 401, message: '签名验证失败' },
159
+ INSUFFICIENT_BALANCE: { code: 7003, status: 400, message: '余额不足' },
160
+
161
+ // 服务器 (9xxx)
162
+ INTERNAL_ERROR: { code: 9001, status: 500, message: '服务器错误' },
163
+ } as const
164
+ ```
165
+
166
+ ### 错误处理工具
167
+
168
+ ```typescript
169
+ // lib/api/error.ts
170
+ import { ERROR_CODES } from '@/types/errors'
171
+
172
+ export class APIError extends Error {
173
+ constructor(
174
+ public code: keyof typeof ERROR_CODES,
175
+ public details?: unknown
176
+ ) {
177
+ super(ERROR_CODES[code].message)
178
+ }
179
+
180
+ toResponse() {
181
+ const { code: errorCode, status, message } = ERROR_CODES[this.code]
182
+ return Response.json(
183
+ { error: { code: this.code, message, details: this.details } },
184
+ { status }
185
+ )
186
+ }
187
+ }
188
+
189
+ // 使用
190
+ throw new APIError('VALIDATION_ERROR', [
191
+ { field: 'email', message: '邮箱格式不正确' }
192
+ ])
193
+ ```
194
+
195
+ ---
196
+
197
+ ## 4. Query Parameters
198
+
199
+ ### 分页
200
+
201
+ ```
202
+ GET /api/users?page=1&pageSize=20
203
+ GET /api/users?cursor=abc123&limit=20 # 游标分页
204
+ ```
205
+
206
+ ### 过滤
207
+
208
+ ```
209
+ GET /api/users?status=active
210
+ GET /api/users?role=admin,user
211
+ GET /api/users?createdAt[gte]=2024-01-01
212
+ ```
213
+
214
+ ### 排序
215
+
216
+ ```
217
+ GET /api/users?sort=createdAt # 升序
218
+ GET /api/users?sort=-createdAt # 降序
219
+ GET /api/users?sort=-createdAt,name # 多字段
220
+ ```
221
+
222
+ ### 字段选择
223
+
224
+ ```
225
+ GET /api/users?fields=id,name,email
226
+ GET /api/users?include=posts,comments
227
+ ```
228
+
229
+ ---
230
+
231
+ ## 5. API Versioning
232
+
233
+ ### URL 版本 (推荐)
234
+
235
+ ```
236
+ /api/v1/users
237
+ /api/v2/users
238
+ ```
239
+
240
+ ### 版本迁移策略
241
+
242
+ ```typescript
243
+ // 同时支持多版本
244
+ // app/api/v1/users/route.ts
245
+ export async function GET() {
246
+ return formatV1Response(users)
247
+ }
248
+
249
+ // app/api/v2/users/route.ts
250
+ export async function GET() {
251
+ return formatV2Response(users)
252
+ }
253
+ ```
254
+
255
+ ---
256
+
257
+ ## 6. Next.js API Routes
258
+
259
+ ### 基础结构
260
+
261
+ ```typescript
262
+ // app/api/users/route.ts
263
+ import { NextRequest } from 'next/server'
264
+ import { z } from 'zod'
265
+ import { APIError } from '@/lib/api/error'
266
+
267
+ const CreateUserSchema = z.object({
268
+ name: z.string().min(1),
269
+ email: z.string().email(),
270
+ })
271
+
272
+ export async function POST(request: NextRequest) {
273
+ try {
274
+ const body = await request.json()
275
+ const data = CreateUserSchema.parse(body)
276
+
277
+ const user = await createUser(data)
278
+
279
+ return Response.json(user, { status: 201 })
280
+ } catch (error) {
281
+ if (error instanceof z.ZodError) {
282
+ return new APIError('VALIDATION_ERROR', error.errors).toResponse()
283
+ }
284
+ if (error instanceof APIError) {
285
+ return error.toResponse()
286
+ }
287
+ return new APIError('INTERNAL_ERROR').toResponse()
288
+ }
289
+ }
290
+ ```
291
+
292
+ ### 动态路由
293
+
294
+ ```typescript
295
+ // app/api/users/[id]/route.ts
296
+ export async function GET(
297
+ request: NextRequest,
298
+ { params }: { params: { id: string } }
299
+ ) {
300
+ const user = await findUser(params.id)
301
+
302
+ if (!user) {
303
+ return new APIError('NOT_FOUND').toResponse()
304
+ }
305
+
306
+ return Response.json(user)
307
+ }
308
+ ```
309
+
310
+ ### 中间件模式
311
+
312
+ ```typescript
313
+ // lib/api/middleware.ts
314
+ type Handler = (req: NextRequest, ctx: any) => Promise<Response>
315
+
316
+ export function withAuth(handler: Handler): Handler {
317
+ return async (req, ctx) => {
318
+ const token = req.headers.get('authorization')?.replace('Bearer ', '')
319
+
320
+ if (!token) {
321
+ return new APIError('AUTH_REQUIRED').toResponse()
322
+ }
323
+
324
+ const user = await verifyToken(token)
325
+ if (!user) {
326
+ return new APIError('AUTH_INVALID').toResponse()
327
+ }
328
+
329
+ // 注入用户信息
330
+ ;(req as any).user = user
331
+
332
+ return handler(req, ctx)
333
+ }
334
+ }
335
+
336
+ // 使用
337
+ export const GET = withAuth(async (req) => {
338
+ const user = (req as any).user
339
+ return Response.json({ user })
340
+ })
341
+ ```
342
+
343
+ ---
344
+
345
+ ## 7. tRPC Design (Alternative)
346
+
347
+ ### 定义 Router
348
+
349
+ ```typescript
350
+ // server/routers/user.ts
351
+ import { z } from 'zod'
352
+ import { router, publicProcedure, protectedProcedure } from '../trpc'
353
+
354
+ export const userRouter = router({
355
+ list: publicProcedure
356
+ .input(z.object({
357
+ page: z.number().default(1),
358
+ pageSize: z.number().default(20),
359
+ }))
360
+ .query(async ({ input }) => {
361
+ return getUsers(input)
362
+ }),
363
+
364
+ create: protectedProcedure
365
+ .input(z.object({
366
+ name: z.string(),
367
+ email: z.string().email(),
368
+ }))
369
+ .mutation(async ({ input, ctx }) => {
370
+ return createUser(input, ctx.user)
371
+ }),
372
+ })
373
+ ```
374
+
375
+ ### 合并 Router
376
+
377
+ ```typescript
378
+ // server/routers/_app.ts
379
+ export const appRouter = router({
380
+ user: userRouter,
381
+ chat: chatRouter,
382
+ wallet: walletRouter,
383
+ })
384
+
385
+ export type AppRouter = typeof appRouter
386
+ ```
387
+
388
+ ---
389
+
390
+ ## 8. Streaming API (AI)
391
+
392
+ ### Server-Sent Events
393
+
394
+ ```typescript
395
+ // app/api/chat/route.ts
396
+ export async function POST(request: NextRequest) {
397
+ const { messages } = await request.json()
398
+
399
+ const stream = new ReadableStream({
400
+ async start(controller) {
401
+ const encoder = new TextEncoder()
402
+
403
+ for await (const chunk of streamChat(messages)) {
404
+ controller.enqueue(encoder.encode(`data: ${JSON.stringify(chunk)}\n\n`))
405
+ }
406
+
407
+ controller.enqueue(encoder.encode('data: [DONE]\n\n'))
408
+ controller.close()
409
+ },
410
+ })
411
+
412
+ return new Response(stream, {
413
+ headers: {
414
+ 'Content-Type': 'text/event-stream',
415
+ 'Cache-Control': 'no-cache',
416
+ 'Connection': 'keep-alive',
417
+ },
418
+ })
419
+ }
420
+ ```
421
+
422
+ ---
423
+
424
+ ## Quick Reference
425
+
426
+ ### 端点命名
427
+
428
+ ```
429
+ ✅ /api/users (复数名词)
430
+ ✅ /api/user-profiles (kebab-case)
431
+ ❌ /api/getUsers (不用动词)
432
+ ❌ /api/user (不用单数)
433
+ ```
434
+
435
+ ### 状态码速查
436
+
437
+ ```
438
+ 200 - 成功 (读取/更新)
439
+ 201 - 创建成功
440
+ 204 - 删除成功
441
+ 400 - 请求错误
442
+ 401 - 未认证
443
+ 403 - 无权限
444
+ 404 - 不存在
445
+ 422 - 验证失败
446
+ 429 - 限流
447
+ 500 - 服务器错误
448
+ ```
449
+
450
+ ### 推荐库
451
+
452
+ ```
453
+ zod - 验证
454
+ @trpc/server - tRPC
455
+ @upstash/ratelimit - 限流
456
+ ```
@@ -0,0 +1,28 @@
1
+ {
2
+ "domain": "code.api",
3
+ "description": "Design RESTful and tRPC APIs with consistent patterns, error handling, and documentation. Define endpoint structure, response formats, and error codes. Use when designing APIs, creating endpoints, or when the user mentions API, endpoint, REST, tRPC, or response format.",
4
+ "inputSchema": {
5
+ "type": "object",
6
+ "properties": {
7
+ "prompt": {
8
+ "type": "string"
9
+ }
10
+ },
11
+ "required": []
12
+ },
13
+ "outputSchema": {
14
+ "type": "object",
15
+ "properties": {
16
+ "result": {
17
+ "type": "string"
18
+ }
19
+ }
20
+ },
21
+ "dependencies": [],
22
+ "version": "0.1.0",
23
+ "author": "rotifer-team",
24
+ "createdAt": 1771939408115,
25
+ "fidelity": "Wrapped",
26
+ "transparency": "Open",
27
+ "source": "skill"
28
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "cloud_id": "fa092b03-2b84-4109-b50f-ff9d1694faf2",
3
+ "owner": "Rotifer Protocol",
4
+ "version": "0.1.0",
5
+ "published_at": "2026-03-17T14:11:57.162Z"
6
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "geneId": "5c69b75c608e55e11e82712d8b2efeac99ec1fd4d42a828f73c92518ac1eb338",
3
+ "name": "auto-coder",
4
+ "domain": "code.automation",
5
+ "fidelity": "Wrapped",
6
+ "wrappedAt": "2026-02-24T13:23:26.564Z",
7
+ "fromSkill": "../.cursor/skills/auto-coder/SKILL.md"
8
+ }