@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,451 @@
1
+ ---
2
+ name: tech-lead
3
+ description: Enforce code consistency, naming conventions, and hygiene for AI and Web3 projects. Standardize AI SDK usage, Web3 patterns (wagmi/ethers), and TypeScript types. Use when refactoring code, reviewing for consistency, or when the user mentions code quality, standards, or linting.
4
+ ---
5
+
6
+ # The Tech Lead (严格的技术负责人)
7
+
8
+ **Goal**: 确保代码风格统一、干净、可维护,符合团队既定规范。
9
+
10
+ **专注领域**: AI SDK 一致性 + Web3 代码规范
11
+
12
+ ---
13
+
14
+ ## Pre-Review Checklist
15
+
16
+ ```
17
+ Consistency Scan:
18
+ - [ ] AI SDK: Vercel AI / OpenAI / LangChain? (不要混用)
19
+ - [ ] Web3 SDK: wagmi+viem / ethers? (选定一个)
20
+ - [ ] 数据获取: useQuery / useSWR / useEffect?
21
+ - [ ] 命名习惯: camelCase / snake_case?
22
+ - [ ] 组件复用: 有哪些现成组件?
23
+ ```
24
+
25
+ ---
26
+
27
+ ## 1. AI Code Consistency
28
+
29
+ ### SDK Selection (选定一个,全项目统一)
30
+
31
+ ```typescript
32
+ // ✅ 项目选择: Vercel AI SDK
33
+ import { generateText, streamText } from 'ai'
34
+ import { openai } from '@ai-sdk/openai'
35
+
36
+ // ❌ 不要混用
37
+ import OpenAI from 'openai' // 直接用 OpenAI SDK
38
+ import { ChatOpenAI } from '@langchain/openai' // LangChain
39
+ ```
40
+
41
+ ### AI Type Definitions
42
+
43
+ ```typescript
44
+ // types/ai.ts - 统一 AI 类型定义
45
+ export interface Message {
46
+ id: string
47
+ role: 'user' | 'assistant' | 'system'
48
+ content: string
49
+ createdAt: Date
50
+ }
51
+
52
+ export interface TokenUsage {
53
+ prompt: number
54
+ completion: number
55
+ total: number
56
+ }
57
+
58
+ export interface AIConfig {
59
+ model: string
60
+ temperature?: number
61
+ maxTokens?: number
62
+ }
63
+
64
+ // 响应类型
65
+ export type AIResult<T> =
66
+ | { ok: true; data: T; usage?: TokenUsage }
67
+ | { ok: false; error: AIError }
68
+
69
+ export type AIError =
70
+ | { code: 'RATE_LIMITED'; retryAfter: number }
71
+ | { code: 'TOKEN_LIMIT'; used: number; limit: number }
72
+ | { code: 'TIMEOUT' }
73
+ | { code: 'UNKNOWN'; message: string }
74
+ ```
75
+
76
+ ### Prompt Template Management
77
+
78
+ ```typescript
79
+ // ✅ 集中管理 prompts
80
+ // lib/prompts/index.ts
81
+ export const PROMPTS = {
82
+ SYSTEM: {
83
+ DEFAULT: 'You are a helpful assistant.',
84
+ ANALYST: 'You are a data analyst...',
85
+ CODER: 'You are an expert programmer...',
86
+ },
87
+ TEMPLATES: {
88
+ SUMMARIZE: (text: string) => `Summarize: ${text}`,
89
+ TRANSLATE: (text: string, lang: string) =>
90
+ `Translate to ${lang}: ${text}`,
91
+ }
92
+ } as const
93
+
94
+ // ❌ 禁止硬编码在组件中
95
+ const response = await generateText({
96
+ prompt: 'You are a helpful assistant. Please help me...' // 散落的 prompt
97
+ })
98
+ ```
99
+
100
+ ### AI Hook Pattern
101
+
102
+ ```typescript
103
+ // ✅ 统一的 AI Hook 结构
104
+ // hooks/useAI.ts
105
+ export function useChat(config?: AIConfig) {
106
+ const [messages, setMessages] = useState<Message[]>([])
107
+ const [isLoading, setIsLoading] = useState(false)
108
+ const [error, setError] = useState<AIError | null>(null)
109
+
110
+ const sendMessage = async (content: string) => {
111
+ setIsLoading(true)
112
+ setError(null)
113
+ // ... implementation
114
+ }
115
+
116
+ const reset = () => {
117
+ setMessages([])
118
+ setError(null)
119
+ }
120
+
121
+ return { messages, isLoading, error, sendMessage, reset }
122
+ }
123
+ ```
124
+
125
+ ### Environment Variables
126
+
127
+ ```bash
128
+ # ✅ 统一命名规范
129
+ OPENAI_API_KEY=sk-...
130
+ ANTHROPIC_API_KEY=sk-ant-...
131
+ AI_MODEL_DEFAULT=gpt-4o
132
+ AI_MAX_TOKENS=4096
133
+
134
+ # ❌ 不一致的命名
135
+ OPEN_AI_KEY=... # 下划线位置不对
136
+ GPT_API_KEY=... # 品牌名 vs 通用名混用
137
+ ```
138
+
139
+ ---
140
+
141
+ ## 2. Web3 Code Consistency
142
+
143
+ ### SDK Selection (选定一个主力)
144
+
145
+ ```typescript
146
+ // ✅ 项目选择: wagmi + viem
147
+ import { useAccount, useConnect, useWriteContract } from 'wagmi'
148
+ import { parseUnits, formatUnits } from 'viem'
149
+
150
+ // ❌ 不要混用
151
+ import { ethers } from 'ethers' // ethers.js
152
+ ```
153
+
154
+ ```typescript
155
+ // ✅ 项目选择: ethers.js
156
+ import { ethers, parseEther, formatEther } from 'ethers'
157
+
158
+ // ❌ 不要混用
159
+ import { useAccount } from 'wagmi' // wagmi
160
+ ```
161
+
162
+ ### Web3 Type Definitions
163
+
164
+ ```typescript
165
+ // types/web3.ts - 统一 Web3 类型
166
+ import type { Address, Hash } from 'viem'
167
+
168
+ export interface WalletState {
169
+ status: 'disconnected' | 'connecting' | 'connected'
170
+ address?: Address
171
+ chainId?: number
172
+ }
173
+
174
+ export interface TransactionState {
175
+ status: 'idle' | 'pending' | 'confirmed' | 'failed'
176
+ hash?: Hash
177
+ error?: Error
178
+ }
179
+
180
+ // 链配置
181
+ export interface ChainConfig {
182
+ id: number
183
+ name: string
184
+ rpcUrl: string
185
+ explorerUrl: string
186
+ nativeCurrency: {
187
+ name: string
188
+ symbol: string
189
+ decimals: number
190
+ }
191
+ }
192
+ ```
193
+
194
+ ### BigInt Handling (统一规范)
195
+
196
+ ```typescript
197
+ // ✅ 统一使用 viem 工具
198
+ import { parseUnits, formatUnits } from 'viem'
199
+
200
+ // 输入:字符串 → BigInt
201
+ const amount = parseUnits('1.5', 18)
202
+
203
+ // 输出:BigInt → 字符串
204
+ const display = formatUnits(balance, 18)
205
+
206
+ // ❌ 禁止
207
+ Number(balance) // 精度丢失
208
+ balance.toString() // 不含小数处理
209
+ balance / BigInt(10 ** 18) // 手动计算
210
+ ```
211
+
212
+ ### Address Display
213
+
214
+ ```typescript
215
+ // ✅ 统一截断函数
216
+ // lib/utils/address.ts
217
+ export function truncateAddress(address: string, chars = 4): string {
218
+ return `${address.slice(0, chars + 2)}...${address.slice(-chars)}`
219
+ }
220
+
221
+ // 使用
222
+ <span className="font-mono">{truncateAddress(address)}</span>
223
+ ```
224
+
225
+ ### Contract Interaction Pattern
226
+
227
+ ```typescript
228
+ // ✅ wagmi 模式
229
+ function useTokenTransfer() {
230
+ const { writeContract, isPending } = useWriteContract()
231
+
232
+ const transfer = (to: Address, amount: bigint) => {
233
+ writeContract({
234
+ address: TOKEN_ADDRESS,
235
+ abi: ERC20_ABI,
236
+ functionName: 'transfer',
237
+ args: [to, amount],
238
+ })
239
+ }
240
+
241
+ return { transfer, isPending }
242
+ }
243
+
244
+ // ✅ ethers 模式
245
+ async function transferToken(to: string, amount: bigint) {
246
+ const contract = new ethers.Contract(TOKEN_ADDRESS, ERC20_ABI, signer)
247
+ const tx = await contract.transfer(to, amount)
248
+ return tx.wait()
249
+ }
250
+ ```
251
+
252
+ ---
253
+
254
+ ## 3. General Code Hygiene
255
+
256
+ ### Cleanup Rules
257
+
258
+ | 类型 | 示例 | 处理 |
259
+ |------|------|------|
260
+ | Console 语句 | `console.log(...)` | 删除或用 logger |
261
+ | 未使用 import | `import { unused }` | 删除 |
262
+ | 注释代码 | `// old code` | 删除 |
263
+ | Debugger | `debugger` | 删除 |
264
+ | 硬编码密钥 | `sk-xxx` | → 环境变量 |
265
+ | 硬编码地址 | `0x1234...` | → 常量/配置 |
266
+
267
+ ### Hardcoding Removal
268
+
269
+ ```typescript
270
+ // ❌ 硬编码
271
+ const OPENAI_KEY = 'sk-...'
272
+ const CONTRACT = '0x1234...'
273
+ const RPC_URL = 'https://mainnet.infura.io/...'
274
+
275
+ // ✅ 环境变量
276
+ const OPENAI_KEY = process.env.OPENAI_API_KEY!
277
+ const CONTRACT = process.env.NEXT_PUBLIC_CONTRACT_ADDRESS as Address
278
+ const RPC_URL = process.env.ETH_RPC_URL!
279
+ ```
280
+
281
+ ### Type Safety
282
+
283
+ ```typescript
284
+ // ❌ 禁止
285
+ const data: any = response
286
+ const address = wallet.address as any
287
+
288
+ // ✅ 正确
289
+ const data: AIResponse = response
290
+ const address: Address = wallet.address
291
+
292
+ // ⚠️ 允许 any 的唯一情况(需注释)
293
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
294
+ const externalData: any = thirdPartyLib.getData() // 库无类型
295
+ ```
296
+
297
+ ---
298
+
299
+ ## 4. Naming Conventions
300
+
301
+ ### AI 相关命名
302
+
303
+ ```typescript
304
+ // Hooks
305
+ useChat, useCompletion, useAI
306
+
307
+ // 函数
308
+ generateText, streamText, sendMessage
309
+
310
+ // 类型
311
+ Message, AIConfig, TokenUsage, AIError
312
+
313
+ // 文件
314
+ hooks/useChat.ts
315
+ lib/ai/client.ts
316
+ types/ai.ts
317
+ ```
318
+
319
+ ### Web3 相关命名
320
+
321
+ ```typescript
322
+ // Hooks
323
+ useWallet, useBalance, useContractRead, useContractWrite
324
+
325
+ // 函数
326
+ connectWallet, signMessage, sendTransaction
327
+
328
+ // 类型
329
+ WalletState, TransactionState, ChainConfig
330
+
331
+ // 文件
332
+ hooks/useWallet.ts
333
+ lib/web3/client.ts
334
+ types/web3.ts
335
+ config/chains.ts
336
+ ```
337
+
338
+ ### 目录结构
339
+
340
+ ```
341
+ src/
342
+ ├── hooks/
343
+ │ ├── useChat.ts # AI hooks
344
+ │ ├── useWallet.ts # Web3 hooks
345
+ │ └── useQuery.ts # Data hooks
346
+ ├── lib/
347
+ │ ├── ai/
348
+ │ │ ├── client.ts # AI client setup
349
+ │ │ └── prompts.ts # Prompt templates
350
+ │ ├── web3/
351
+ │ │ ├── client.ts # Web3 client setup
352
+ │ │ └── contracts.ts # Contract instances
353
+ │ └── utils/
354
+ │ ├── format.ts # Formatting utils
355
+ │ └── address.ts # Address utils
356
+ ├── types/
357
+ │ ├── ai.ts
358
+ │ ├── web3.ts
359
+ │ └── index.ts
360
+ └── config/
361
+ ├── ai.ts # AI model configs
362
+ ├── chains.ts # Chain configs
363
+ └── contracts.ts # Contract addresses
364
+ ```
365
+
366
+ ---
367
+
368
+ ## 5. Tech Debt Comments
369
+
370
+ ```tsx
371
+ /**
372
+ * ⚠️ TECH DEBT
373
+ * Issue: [问题描述]
374
+ * Impact: [影响范围]
375
+ * Solution: [建议方案]
376
+ * Priority: High | Medium | Low
377
+ */
378
+ ```
379
+
380
+ ### AI 常见技术债务
381
+
382
+ | Issue | Impact | Priority |
383
+ |-------|--------|----------|
384
+ | 无 token 限制检查 | 可能超限报错 | High |
385
+ | 无 rate limit 处理 | 用户体验差 | Medium |
386
+ | prompt 硬编码 | 难以维护 | Medium |
387
+ | 无成本追踪 | 成本失控 | Low |
388
+
389
+ ### Web3 常见技术债务
390
+
391
+ | Issue | Impact | Priority |
392
+ |-------|--------|----------|
393
+ | 无 gas 估算 | 交易可能失败 | High |
394
+ | 未处理链切换 | 用户困惑 | High |
395
+ | BigInt 用 Number | 大额精度丢失 | High |
396
+ | 地址未校验 | 资金损失风险 | High |
397
+
398
+ ---
399
+
400
+ ## 6. Output Format
401
+
402
+ ### 重构输出模板
403
+
404
+ ```tsx
405
+ // ============================================
406
+ // REFACTORED: [文件名]
407
+ // Changes:
408
+ // - [变更1]
409
+ // - [变更2]
410
+ // Tech Stack Alignment:
411
+ // - AI: Vercel AI SDK
412
+ // - Web3: wagmi + viem
413
+ // ============================================
414
+
415
+ // ... 重构后的完整代码 ...
416
+ ```
417
+
418
+ ---
419
+
420
+ ## Quick Reference
421
+
422
+ ### 必删清单
423
+
424
+ ```
425
+ ✗ console.log / debugger
426
+ ✗ 未使用的 import
427
+ ✗ 注释掉的代码
428
+ ✗ 硬编码的 API keys
429
+ ✗ 硬编码的合约地址
430
+ ✗ 硬编码的 RPC URLs
431
+ ```
432
+
433
+ ### 必改清单
434
+
435
+ ```
436
+ ✗ any → 具体类型
437
+ ✗ 混用 SDK → 统一 SDK
438
+ ✗ 散落的 prompt → 集中管理
439
+ ✗ Number(bigint) → formatUnits
440
+ ✗ 手写地址截断 → truncateAddress()
441
+ ```
442
+
443
+ ### 扫描位置
444
+
445
+ ```
446
+ 1. package.json → 确认用了哪些 SDK
447
+ 2. .env.example → 确认环境变量命名
448
+ 3. types/ → 确认类型定义
449
+ 4. hooks/ → 确认 hook 模式
450
+ 5. lib/ → 确认工具函数
451
+ ```
@@ -0,0 +1,28 @@
1
+ {
2
+ "domain": "code.quality",
3
+ "description": "Enforce code consistency, naming conventions, and hygiene for AI and Web3 projects. Standardize AI SDK usage, Web3 patterns (wagmi/ethers), and TypeScript types. Use when refactoring code, reviewing for consistency, or when the user mentions code quality, standards, or linting.",
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": 1771939410356,
25
+ "fidelity": "Wrapped",
26
+ "transparency": "Open",
27
+ "source": "skill"
28
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "cloud_id": "e8dd8349-e743-4e31-ac16-25da1b14d6ad",
3
+ "owner": "Rotifer Protocol",
4
+ "version": "0.1.0",
5
+ "published_at": "2026-03-17T14:13:44.865Z"
6
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "geneId": "0d9f7f005f3227ef9fb59c2462049d7bb86369de2fca7f58d8692dd7eeaad09c",
3
+ "name": "test-wrap",
4
+ "domain": "content.translation",
5
+ "fidelity": "Wrapped",
6
+ "wrappedAt": "2026-02-24T13:00:11.598Z",
7
+ "fromSkill": "../.cursor/skills/translator/SKILL.md"
8
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "domain": "content.translation",
3
+ "description": "Translate and localize content between languages. Ensure cultural appropriateness and maintain original meaning. Use when translating documents, adapting content for different markets, or creating bilingual content.",
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": 1771938011594,
25
+ "fidelity": "Wrapped",
26
+ "transparency": "Open",
27
+ "source": "skill"
28
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "cloud_id": "365bfe08-527c-4279-b1d1-4e0ccec396a8",
3
+ "owner": "Rotifer Protocol",
4
+ "version": "0.1.0",
5
+ "published_at": "2026-03-17T14:13:46.966Z"
6
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "geneId": "1aeac46437f0bd9e77760b049eb4e51857779f65ef76881daacfcc2cf524b17a",
3
+ "name": "testing-strategist",
4
+ "domain": "code.testing",
5
+ "fidelity": "Wrapped",
6
+ "wrappedAt": "2026-02-24T13:23:29.561Z",
7
+ "fromSkill": "../.cursor/skills/testing-strategist/SKILL.md"
8
+ }