@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,381 @@
1
+ ---
2
+ name: ai-components
3
+ description: AI 界面专项组件库,包含 Streaming 文本、聊天气泡、思考指示器、推理展示、Token 用量等。专为 AI 对话应用设计。当用户提到"聊天""Streaming""AI 界面""对话""打字效果""思考中"时使用。
4
+ ---
5
+
6
+ # AI Components (AI 界面组件库)
7
+
8
+ **定位**: AI 对话应用的专项 UI 组件。
9
+
10
+ **核心目标**: 打造流畅、专业的 AI 交互体验。
11
+
12
+ **设计规范**: 遵循 [design-tokens](../design-tokens/SKILL.md) 和 [ux-patterns](../ux-patterns/SKILL.md)。
13
+
14
+ ---
15
+
16
+ ## Streaming Text (打字机效果)
17
+
18
+ ### 基础流式文本
19
+
20
+ ```tsx
21
+ function StreamingText({ content }: { content: string }) {
22
+ return (
23
+ <p className="whitespace-pre-wrap">
24
+ {content}
25
+ <span className="inline-block w-2 h-4 ml-1 bg-current animate-pulse" />
26
+ </p>
27
+ )
28
+ }
29
+ ```
30
+
31
+ ### 带 Markdown 渲染
32
+
33
+ ```tsx
34
+ import ReactMarkdown from 'react-markdown'
35
+
36
+ function AIMessage({ content, isStreaming }: Props) {
37
+ return (
38
+ <div className="prose prose-sm max-w-none">
39
+ <ReactMarkdown>{content}</ReactMarkdown>
40
+ {isStreaming && (
41
+ <span className="inline-block w-2 h-4 bg-gray-400 animate-pulse" />
42
+ )}
43
+ </div>
44
+ )
45
+ }
46
+ ```
47
+
48
+ ---
49
+
50
+ ## Chat Bubble Layout (聊天气泡)
51
+
52
+ ```tsx
53
+ function ChatMessage({ role, content, isStreaming }: Message) {
54
+ const isUser = role === 'user'
55
+
56
+ return (
57
+ <div className={cn("flex gap-3 p-4", isUser && "flex-row-reverse")}>
58
+ {/* Avatar */}
59
+ <div className={cn(
60
+ "flex-shrink-0 w-8 h-8 rounded-full flex items-center justify-center",
61
+ isUser ? "bg-primary-500" : "bg-gray-100"
62
+ )}>
63
+ {isUser ? <UserIcon /> : <BotIcon />}
64
+ </div>
65
+
66
+ {/* Content */}
67
+ <div className={cn(
68
+ "max-w-[80%] rounded-2xl px-4 py-2",
69
+ isUser
70
+ ? "bg-primary-500 text-white rounded-br-md"
71
+ : "bg-gray-100 text-gray-900 rounded-bl-md"
72
+ )}>
73
+ <AIMessage content={content} isStreaming={isStreaming} />
74
+ </div>
75
+ </div>
76
+ )
77
+ }
78
+ ```
79
+
80
+ ---
81
+
82
+ ## Thinking Indicator (思考指示器)
83
+
84
+ ### 三点跳动
85
+
86
+ ```tsx
87
+ function ThinkingIndicator() {
88
+ return (
89
+ <div className="flex items-center gap-2 text-gray-500 text-sm">
90
+ <div className="flex gap-1">
91
+ <span className="w-2 h-2 bg-gray-400 rounded-full animate-bounce [animation-delay:-0.3s]" />
92
+ <span className="w-2 h-2 bg-gray-400 rounded-full animate-bounce [animation-delay:-0.15s]" />
93
+ <span className="w-2 h-2 bg-gray-400 rounded-full animate-bounce" />
94
+ </div>
95
+ <span>思考中...</span>
96
+ </div>
97
+ )
98
+ }
99
+ ```
100
+
101
+ ### 旋转加载
102
+
103
+ ```tsx
104
+ function ThinkingSpinner() {
105
+ return (
106
+ <div className="flex items-center gap-2 text-gray-500 text-sm">
107
+ <svg className="w-4 h-4 animate-spin" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
108
+ <path d="M21 12a9 9 0 1 1-6.219-8.56" />
109
+ </svg>
110
+ <span>正在分析...</span>
111
+ </div>
112
+ )
113
+ }
114
+ ```
115
+
116
+ ---
117
+
118
+ ## Reasoning Block (推理展示)
119
+
120
+ ```tsx
121
+ function ReasoningBlock({ reasoning, isExpanded, onToggle }: Props) {
122
+ return (
123
+ <div className="border border-gray-200 rounded-xl overflow-hidden">
124
+ <button
125
+ onClick={onToggle}
126
+ className="w-full flex items-center justify-between p-3 bg-gray-50 hover:bg-gray-100 transition-colors"
127
+ >
128
+ <span className="text-sm text-gray-600 flex items-center gap-2">
129
+ <BrainIcon className="w-4 h-4" />
130
+ 推理过程
131
+ </span>
132
+ <ChevronIcon className={cn(
133
+ "w-4 h-4 transition-transform duration-200",
134
+ isExpanded && "rotate-180"
135
+ )} />
136
+ </button>
137
+
138
+ <div className={cn(
139
+ "overflow-hidden transition-all duration-300",
140
+ isExpanded ? "max-h-96" : "max-h-0"
141
+ )}>
142
+ <pre className="p-3 text-xs text-gray-600 bg-gray-50 overflow-auto">
143
+ {reasoning}
144
+ </pre>
145
+ </div>
146
+ </div>
147
+ )
148
+ }
149
+ ```
150
+
151
+ ---
152
+
153
+ ## Token Usage Display (Token 用量)
154
+
155
+ ```tsx
156
+ function TokenUsage({ usage }: { usage: { total: number; limit: number } }) {
157
+ const percentage = (usage.total / usage.limit) * 100
158
+
159
+ return (
160
+ <div className="text-xs text-gray-500 space-y-1">
161
+ <div className="flex justify-between">
162
+ <span>Token 用量</span>
163
+ <span>{usage.total.toLocaleString()} / {usage.limit.toLocaleString()}</span>
164
+ </div>
165
+ <div className="h-1.5 bg-gray-200 rounded-full overflow-hidden">
166
+ <div
167
+ className={cn(
168
+ "h-full transition-all duration-300",
169
+ percentage > 90 ? "bg-error" :
170
+ percentage > 70 ? "bg-warning" : "bg-success"
171
+ )}
172
+ style={{ width: `${Math.min(percentage, 100)}%` }}
173
+ />
174
+ </div>
175
+ </div>
176
+ )
177
+ }
178
+ ```
179
+
180
+ ---
181
+
182
+ ## AI Error Card (错误提示)
183
+
184
+ ### 错误消息配置
185
+
186
+ ```tsx
187
+ const AI_ERROR_MESSAGES = {
188
+ RATE_LIMITED: {
189
+ title: "请求过于频繁",
190
+ description: "请稍后再试",
191
+ action: "等待后重试"
192
+ },
193
+ TOKEN_LIMIT: {
194
+ title: "对话过长",
195
+ description: "请开始新对话或清理历史记录",
196
+ action: "开始新对话"
197
+ },
198
+ TIMEOUT: {
199
+ title: "响应超时",
200
+ description: "AI 正在思考复杂问题,请重试",
201
+ action: "重新发送"
202
+ },
203
+ NETWORK: {
204
+ title: "网络连接失败",
205
+ description: "请检查网络后重试",
206
+ action: "重试"
207
+ }
208
+ }
209
+ ```
210
+
211
+ ### 错误卡片组件
212
+
213
+ ```tsx
214
+ function AIErrorCard({ error, onRetry }: Props) {
215
+ const msg = AI_ERROR_MESSAGES[error.code]
216
+ return (
217
+ <div className="rounded-xl border border-warning/30 bg-warning/10 p-4">
218
+ <h4 className="font-medium text-warning">{msg.title}</h4>
219
+ <p className="text-sm text-warning/80 mt-1">{msg.description}</p>
220
+ <button onClick={onRetry} className="mt-3 text-sm text-warning hover:underline">
221
+ {msg.action}
222
+ </button>
223
+ </div>
224
+ )
225
+ }
226
+ ```
227
+
228
+ ---
229
+
230
+ ## Chat Input (聊天输入框)
231
+
232
+ ```tsx
233
+ function ChatInput({ onSend, isLoading }: Props) {
234
+ const [message, setMessage] = useState('')
235
+
236
+ const handleSubmit = (e: FormEvent) => {
237
+ e.preventDefault()
238
+ if (message.trim() && !isLoading) {
239
+ onSend(message)
240
+ setMessage('')
241
+ }
242
+ }
243
+
244
+ return (
245
+ <form onSubmit={handleSubmit} className="relative">
246
+ <textarea
247
+ value={message}
248
+ onChange={(e) => setMessage(e.target.value)}
249
+ placeholder="输入消息..."
250
+ className="w-full px-4 py-3 pr-12 bg-gray-50 border border-gray-200 rounded-2xl
251
+ text-sm resize-none
252
+ focus:outline-none focus:ring-2 focus:ring-primary-500/20 focus:border-primary-500
253
+ transition-all duration-200"
254
+ rows={1}
255
+ onKeyDown={(e) => {
256
+ if (e.key === 'Enter' && !e.shiftKey) {
257
+ e.preventDefault()
258
+ handleSubmit(e)
259
+ }
260
+ }}
261
+ />
262
+ <button
263
+ type="submit"
264
+ disabled={!message.trim() || isLoading}
265
+ className="absolute right-2 bottom-2 p-2 rounded-xl
266
+ bg-primary-500 text-white
267
+ hover:bg-primary-600
268
+ disabled:opacity-50 disabled:cursor-not-allowed
269
+ transition-all duration-200"
270
+ >
271
+ {isLoading ? (
272
+ <svg className="w-5 h-5 animate-spin" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
273
+ <path d="M21 12a9 9 0 1 1-6.219-8.56" />
274
+ </svg>
275
+ ) : (
276
+ <svg className="w-5 h-5" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
277
+ <path d="M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z" />
278
+ </svg>
279
+ )}
280
+ </button>
281
+ </form>
282
+ )
283
+ }
284
+ ```
285
+
286
+ ---
287
+
288
+ ## Stop Generation Button (停止生成)
289
+
290
+ ```tsx
291
+ function StopButton({ onStop }: { onStop: () => void }) {
292
+ return (
293
+ <button
294
+ onClick={onStop}
295
+ className="px-4 py-2 flex items-center gap-2
296
+ bg-gray-100 text-gray-700 rounded-xl
297
+ hover:bg-gray-200 transition-colors"
298
+ >
299
+ <svg className="w-4 h-4" viewBox="0 0 24 24" fill="currentColor">
300
+ <rect x="6" y="6" width="12" height="12" rx="2" />
301
+ </svg>
302
+ <span className="text-sm font-medium">停止生成</span>
303
+ </button>
304
+ )
305
+ }
306
+ ```
307
+
308
+ ---
309
+
310
+ ## AI 场景文案规范
311
+
312
+ | 场景 | 文案 |
313
+ |------|------|
314
+ | AI 思考中 | "思考中..." / "正在分析..." |
315
+ | 生成完成 | "回复已生成" |
316
+ | Token 超限 | "对话过长,请开始新对话" |
317
+ | Rate limit | "请求过于频繁,请稍后再试" |
318
+ | 停止生成 | "停止生成" |
319
+ | 重新生成 | "重新生成" |
320
+ | 复制回复 | "复制" / "已复制" |
321
+ | 点赞/踩 | "有帮助" / "没帮助" |
322
+
323
+ ---
324
+
325
+ ## 推荐库
326
+
327
+ | 用途 | 推荐库 |
328
+ |------|--------|
329
+ | Markdown 渲染 | `react-markdown` |
330
+ | AI SDK | `ai` (Vercel AI SDK) |
331
+ | 代码高亮 | `react-syntax-highlighter` |
332
+ | 动画 | `framer-motion` |
333
+ | Toast | `sonner` |
334
+
335
+ ---
336
+
337
+ ## 完整聊天界面示例
338
+
339
+ ```tsx
340
+ function ChatInterface() {
341
+ const { messages, isLoading, send, stop } = useChat()
342
+
343
+ return (
344
+ <div className="flex flex-col h-screen">
345
+ {/* 消息列表 */}
346
+ <div className="flex-1 overflow-y-auto p-4 space-y-4">
347
+ {messages.map((msg) => (
348
+ <ChatMessage
349
+ key={msg.id}
350
+ role={msg.role}
351
+ content={msg.content}
352
+ isStreaming={msg.isStreaming}
353
+ />
354
+ ))}
355
+
356
+ {isLoading && !messages[messages.length - 1]?.isStreaming && (
357
+ <ThinkingIndicator />
358
+ )}
359
+ </div>
360
+
361
+ {/* 输入区 */}
362
+ <div className="p-4 border-t border-gray-100">
363
+ {isLoading ? (
364
+ <StopButton onStop={stop} />
365
+ ) : (
366
+ <ChatInput onSend={send} isLoading={isLoading} />
367
+ )}
368
+ </div>
369
+ </div>
370
+ )
371
+ }
372
+ ```
373
+
374
+ ---
375
+
376
+ ## 相关技能
377
+
378
+ - **design-tokens**: 设计令牌规范
379
+ - **ux-patterns**: 交互模式和文案规范
380
+ - **web3-components**: Web3 专项组件
381
+ - **uiux-designer**: 统一调度入口
@@ -0,0 +1,28 @@
1
+ {
2
+ "domain": "ui.ai",
3
+ "description": "AI interface component library. Includes streaming text, chat bubbles, thinking indicators, reasoning display, and token usage components for AI conversation applications.",
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": 1771939385953,
25
+ "fidelity": "Wrapped",
26
+ "transparency": "Open",
27
+ "source": "skill"
28
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "cloud_id": "87611692-bf93-47ae-b7d3-0f2803f447d4",
3
+ "owner": "Rotifer Protocol",
4
+ "version": "0.1.0",
5
+ "published_at": "2026-03-17T14:11:48.832Z"
6
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "geneId": "45307c7b39e847a3132e5e562668b2320d2022f1e06fa0266bed193cbef7a030",
3
+ "name": "algorithmic-art",
4
+ "domain": "creative.generative",
5
+ "fidelity": "Wrapped",
6
+ "wrappedAt": "2026-02-24T13:23:39.395Z",
7
+ "fromSkill": "../.cursor/skills/algorithmic-art/SKILL.md"
8
+ }