@rotifer/playground 0.8.1 → 0.8.5

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 (443) hide show
  1. package/CHANGELOG.md +25 -11
  2. package/README.md +64 -48
  3. package/README.zh.md +60 -37
  4. package/dist/cloud/auth.d.ts +9 -3
  5. package/dist/cloud/auth.d.ts.map +1 -1
  6. package/dist/cloud/auth.js +28 -13
  7. package/dist/cloud/auth.js.map +1 -1
  8. package/dist/cloud/client.d.ts +4 -3
  9. package/dist/cloud/client.d.ts.map +1 -1
  10. package/dist/cloud/client.js +139 -68
  11. package/dist/cloud/client.js.map +1 -1
  12. package/dist/cloud/types.d.ts +3 -0
  13. package/dist/cloud/types.d.ts.map +1 -1
  14. package/dist/cloud/types.js.map +1 -1
  15. package/dist/commands/agent-create.d.ts +20 -0
  16. package/dist/commands/agent-create.d.ts.map +1 -1
  17. package/dist/commands/agent-create.js +91 -80
  18. package/dist/commands/agent-create.js.map +1 -1
  19. package/dist/commands/agent-list.d.ts.map +1 -1
  20. package/dist/commands/agent-list.js +27 -24
  21. package/dist/commands/agent-list.js.map +1 -1
  22. package/dist/commands/agent-run.d.ts +24 -0
  23. package/dist/commands/agent-run.d.ts.map +1 -1
  24. package/dist/commands/agent-run.js +154 -36
  25. package/dist/commands/agent-run.js.map +1 -1
  26. package/dist/commands/api-key.d.ts +3 -0
  27. package/dist/commands/api-key.d.ts.map +1 -0
  28. package/dist/commands/api-key.js +235 -0
  29. package/dist/commands/api-key.js.map +1 -0
  30. package/dist/commands/arena-list.d.ts.map +1 -1
  31. package/dist/commands/arena-list.js +113 -97
  32. package/dist/commands/arena-list.js.map +1 -1
  33. package/dist/commands/arena-submit.d.ts.map +1 -1
  34. package/dist/commands/arena-submit.js +113 -30
  35. package/dist/commands/arena-submit.js.map +1 -1
  36. package/dist/commands/arena-watch.d.ts.map +1 -1
  37. package/dist/commands/arena-watch.js +59 -87
  38. package/dist/commands/arena-watch.js.map +1 -1
  39. package/dist/commands/compare.d.ts.map +1 -1
  40. package/dist/commands/compare.js +40 -50
  41. package/dist/commands/compare.js.map +1 -1
  42. package/dist/commands/compile.d.ts.map +1 -1
  43. package/dist/commands/compile.js +60 -37
  44. package/dist/commands/compile.js.map +1 -1
  45. package/dist/commands/hello.d.ts +3 -0
  46. package/dist/commands/hello.d.ts.map +1 -0
  47. package/dist/commands/hello.js +575 -0
  48. package/dist/commands/hello.js.map +1 -0
  49. package/dist/commands/info.d.ts.map +1 -1
  50. package/dist/commands/info.js +130 -40
  51. package/dist/commands/info.js.map +1 -1
  52. package/dist/commands/init.d.ts.map +1 -1
  53. package/dist/commands/init.js +39 -60
  54. package/dist/commands/init.js.map +1 -1
  55. package/dist/commands/install.d.ts.map +1 -1
  56. package/dist/commands/install.js +35 -9
  57. package/dist/commands/install.js.map +1 -1
  58. package/dist/commands/list.d.ts.map +1 -1
  59. package/dist/commands/list.js +111 -58
  60. package/dist/commands/list.js.map +1 -1
  61. package/dist/commands/login.d.ts.map +1 -1
  62. package/dist/commands/login.js +23 -10
  63. package/dist/commands/login.js.map +1 -1
  64. package/dist/commands/network.d.ts.map +1 -1
  65. package/dist/commands/network.js +48 -67
  66. package/dist/commands/network.js.map +1 -1
  67. package/dist/commands/publish.d.ts.map +1 -1
  68. package/dist/commands/publish.js +127 -53
  69. package/dist/commands/publish.js.map +1 -1
  70. package/dist/commands/reputation.js +84 -85
  71. package/dist/commands/reputation.js.map +1 -1
  72. package/dist/commands/run.d.ts.map +1 -1
  73. package/dist/commands/run.js +26 -9
  74. package/dist/commands/run.js.map +1 -1
  75. package/dist/commands/scan.d.ts.map +1 -1
  76. package/dist/commands/scan.js +8 -9
  77. package/dist/commands/scan.js.map +1 -1
  78. package/dist/commands/search.d.ts.map +1 -1
  79. package/dist/commands/search.js +80 -54
  80. package/dist/commands/search.js.map +1 -1
  81. package/dist/commands/self-update.d.ts +7 -0
  82. package/dist/commands/self-update.d.ts.map +1 -0
  83. package/dist/commands/self-update.js +187 -0
  84. package/dist/commands/self-update.js.map +1 -0
  85. package/dist/commands/stats.d.ts.map +1 -1
  86. package/dist/commands/stats.js +20 -26
  87. package/dist/commands/stats.js.map +1 -1
  88. package/dist/commands/test.d.ts.map +1 -1
  89. package/dist/commands/test.js +95 -75
  90. package/dist/commands/test.js.map +1 -1
  91. package/dist/commands/user-config.d.ts +3 -0
  92. package/dist/commands/user-config.d.ts.map +1 -0
  93. package/dist/commands/user-config.js +82 -0
  94. package/dist/commands/user-config.js.map +1 -0
  95. package/dist/commands/versions.d.ts.map +1 -1
  96. package/dist/commands/versions.js +46 -33
  97. package/dist/commands/versions.js.map +1 -1
  98. package/dist/commands/vg.d.ts.map +1 -1
  99. package/dist/commands/vg.js +65 -63
  100. package/dist/commands/vg.js.map +1 -1
  101. package/dist/commands/whoami.d.ts.map +1 -1
  102. package/dist/commands/whoami.js +33 -23
  103. package/dist/commands/whoami.js.map +1 -1
  104. package/dist/commands/wrap.d.ts.map +1 -1
  105. package/dist/commands/wrap.js +57 -40
  106. package/dist/commands/wrap.js.map +1 -1
  107. package/dist/index.js +61 -1
  108. package/dist/index.js.map +1 -1
  109. package/dist/publish/pre-publish-check.d.ts +15 -0
  110. package/dist/publish/pre-publish-check.d.ts.map +1 -0
  111. package/dist/publish/pre-publish-check.js +228 -0
  112. package/dist/publish/pre-publish-check.js.map +1 -0
  113. package/dist/runtime/domain-failover.d.ts +1 -1
  114. package/dist/runtime/domain-failover.js +1 -1
  115. package/dist/runtime/network-gateway.d.ts +1 -1
  116. package/dist/runtime/network-gateway.d.ts.map +1 -1
  117. package/dist/runtime/network-gateway.js +10 -10
  118. package/dist/runtime/network-gateway.js.map +1 -1
  119. package/dist/scanner/scanner.js +3 -3
  120. package/dist/scanner/scanner.js.map +1 -1
  121. package/dist/utils/binding.d.ts.map +1 -1
  122. package/dist/utils/binding.js +5 -4
  123. package/dist/utils/binding.js.map +1 -1
  124. package/dist/utils/content-hash.d.ts +3 -0
  125. package/dist/utils/content-hash.d.ts.map +1 -0
  126. package/dist/utils/content-hash.js +25 -0
  127. package/dist/utils/content-hash.js.map +1 -0
  128. package/dist/utils/display.d.ts +44 -1
  129. package/dist/utils/display.d.ts.map +1 -1
  130. package/dist/utils/display.js +443 -14
  131. package/dist/utils/display.js.map +1 -1
  132. package/dist/utils/domain-suggest.d.ts.map +1 -1
  133. package/dist/utils/domain-suggest.js +3 -3
  134. package/dist/utils/domain-suggest.js.map +1 -1
  135. package/dist/utils/javy-compiler.js +9 -3
  136. package/dist/utils/javy-compiler.js.map +1 -1
  137. package/dist/utils/open-browser.d.ts +7 -3
  138. package/dist/utils/open-browser.d.ts.map +1 -1
  139. package/dist/utils/open-browser.js +15 -4
  140. package/dist/utils/open-browser.js.map +1 -1
  141. package/dist/utils/palette.d.ts +49 -0
  142. package/dist/utils/palette.d.ts.map +1 -0
  143. package/dist/utils/palette.js +80 -0
  144. package/dist/utils/palette.js.map +1 -0
  145. package/dist/utils/private-fs.d.ts +3 -0
  146. package/dist/utils/private-fs.d.ts.map +1 -0
  147. package/dist/utils/private-fs.js +25 -0
  148. package/dist/utils/private-fs.js.map +1 -0
  149. package/dist/utils/project-root.d.ts +2 -0
  150. package/dist/utils/project-root.d.ts.map +1 -0
  151. package/dist/utils/project-root.js +49 -0
  152. package/dist/utils/project-root.js.map +1 -0
  153. package/dist/utils/run-logger.d.ts +24 -0
  154. package/dist/utils/run-logger.d.ts.map +1 -0
  155. package/dist/utils/run-logger.js +70 -0
  156. package/dist/utils/run-logger.js.map +1 -0
  157. package/dist/utils/update-check.d.ts +20 -0
  158. package/dist/utils/update-check.d.ts.map +1 -0
  159. package/dist/utils/update-check.js +155 -0
  160. package/dist/utils/update-check.js.map +1 -0
  161. package/dist/utils/user-config.d.ts +10 -0
  162. package/dist/utils/user-config.d.ts.map +1 -0
  163. package/dist/utils/user-config.js +54 -0
  164. package/dist/utils/user-config.js.map +1 -0
  165. package/dist/utils/validate-gene-name.d.ts +7 -0
  166. package/dist/utils/validate-gene-name.d.ts.map +1 -0
  167. package/dist/utils/validate-gene-name.js +28 -0
  168. package/dist/utils/validate-gene-name.js.map +1 -0
  169. package/genes/genesis-code-format/phenotype.json +4 -3
  170. package/genes/genesis-file-read/phenotype.json +4 -3
  171. package/genes/genesis-l0-constraint/phenotype.json +4 -3
  172. package/genes/genesis-web-search/phenotype.json +5 -4
  173. package/genes/genesis-web-search-lite/phenotype.json +4 -3
  174. package/package.json +29 -8
  175. package/scripts/postinstall.js +38 -0
  176. package/dist/errors/formatter.d.ts +0 -25
  177. package/dist/errors/formatter.d.ts.map +0 -1
  178. package/dist/errors/formatter.js +0 -43
  179. package/dist/errors/formatter.js.map +0 -1
  180. package/genes/academic-writer/.cloud-manifest.json +0 -6
  181. package/genes/academic-writer/.gene-manifest.json +0 -8
  182. package/genes/academic-writer/SKILL.md +0 -274
  183. package/genes/academic-writer/phenotype.json +0 -28
  184. package/genes/ai-components/.cloud-manifest.json +0 -6
  185. package/genes/ai-components/.gene-manifest.json +0 -8
  186. package/genes/ai-components/SKILL.md +0 -381
  187. package/genes/ai-components/phenotype.json +0 -28
  188. package/genes/algorithmic-art/.cloud-manifest.json +0 -6
  189. package/genes/algorithmic-art/.gene-manifest.json +0 -8
  190. package/genes/algorithmic-art/SKILL.md +0 -405
  191. package/genes/algorithmic-art/phenotype.json +0 -28
  192. package/genes/answer-synthesizer/.cloud-manifest.json +0 -6
  193. package/genes/answer-synthesizer/index.ts +0 -194
  194. package/genes/answer-synthesizer/phenotype.json +0 -61
  195. package/genes/api-designer/.cloud-manifest.json +0 -6
  196. package/genes/api-designer/.gene-manifest.json +0 -8
  197. package/genes/api-designer/SKILL.md +0 -456
  198. package/genes/api-designer/phenotype.json +0 -28
  199. package/genes/auto-coder/.cloud-manifest.json +0 -6
  200. package/genes/auto-coder/.gene-manifest.json +0 -8
  201. package/genes/auto-coder/SKILL.md +0 -400
  202. package/genes/auto-coder/phenotype.json +0 -28
  203. package/genes/auto-writer/.cloud-manifest.json +0 -6
  204. package/genes/auto-writer/.gene-manifest.json +0 -8
  205. package/genes/auto-writer/SKILL.md +0 -361
  206. package/genes/auto-writer/phenotype.json +0 -28
  207. package/genes/brand-personality/.cloud-manifest.json +0 -6
  208. package/genes/brand-personality/.gene-manifest.json +0 -8
  209. package/genes/brand-personality/SKILL.md +0 -549
  210. package/genes/brand-personality/phenotype.json +0 -28
  211. package/genes/business-writer/.cloud-manifest.json +0 -6
  212. package/genes/business-writer/.gene-manifest.json +0 -8
  213. package/genes/business-writer/SKILL.md +0 -448
  214. package/genes/business-writer/phenotype.json +0 -28
  215. package/genes/citation-manager/.cloud-manifest.json +0 -6
  216. package/genes/citation-manager/.gene-manifest.json +0 -8
  217. package/genes/citation-manager/SKILL.md +0 -279
  218. package/genes/citation-manager/index.ts +0 -162
  219. package/genes/citation-manager/package.json +0 -1
  220. package/genes/citation-manager/phenotype.json +0 -50
  221. package/genes/code-complexity/.cloud-manifest.json +0 -6
  222. package/genes/code-complexity/README.md +0 -35
  223. package/genes/code-complexity/index.ts +0 -101
  224. package/genes/code-complexity/phenotype.json +0 -34
  225. package/genes/copywriter/.cloud-manifest.json +0 -6
  226. package/genes/copywriter/.gene-manifest.json +0 -8
  227. package/genes/copywriter/SKILL.md +0 -329
  228. package/genes/copywriter/phenotype.json +0 -28
  229. package/genes/creative-writer/.cloud-manifest.json +0 -6
  230. package/genes/creative-writer/.gene-manifest.json +0 -8
  231. package/genes/creative-writer/SKILL.md +0 -356
  232. package/genes/creative-writer/phenotype.json +0 -28
  233. package/genes/data-modeler/.cloud-manifest.json +0 -6
  234. package/genes/data-modeler/.gene-manifest.json +0 -8
  235. package/genes/data-modeler/SKILL.md +0 -486
  236. package/genes/data-modeler/phenotype.json +0 -28
  237. package/genes/debugger/.cloud-manifest.json +0 -6
  238. package/genes/debugger/.gene-manifest.json +0 -8
  239. package/genes/debugger/SKILL.md +0 -416
  240. package/genes/debugger/phenotype.json +0 -28
  241. package/genes/design-tokens/.cloud-manifest.json +0 -6
  242. package/genes/design-tokens/.gene-manifest.json +0 -8
  243. package/genes/design-tokens/SKILL.md +0 -222
  244. package/genes/design-tokens/index.ts +0 -128
  245. package/genes/design-tokens/package.json +0 -1
  246. package/genes/design-tokens/phenotype.json +0 -1
  247. package/genes/devops-automator/.cloud-manifest.json +0 -6
  248. package/genes/devops-automator/.gene-manifest.json +0 -8
  249. package/genes/devops-automator/SKILL.md +0 -490
  250. package/genes/devops-automator/phenotype.json +0 -28
  251. package/genes/doc-coauthoring/.cloud-manifest.json +0 -6
  252. package/genes/doc-coauthoring/.gene-manifest.json +0 -8
  253. package/genes/doc-coauthoring/SKILL.md +0 -375
  254. package/genes/doc-coauthoring/phenotype.json +0 -28
  255. package/genes/doc-retrieval/.cloud-manifest.json +0 -6
  256. package/genes/doc-retrieval/index.ts +0 -134
  257. package/genes/doc-retrieval/phenotype.json +0 -54
  258. package/genes/docs-writer/.cloud-manifest.json +0 -6
  259. package/genes/docs-writer/.gene-manifest.json +0 -8
  260. package/genes/docs-writer/SKILL.md +0 -492
  261. package/genes/docs-writer/phenotype.json +0 -28
  262. package/genes/evolve-life/.cloud-manifest.json +0 -6
  263. package/genes/evolve-life/.compile-result.json +0 -12
  264. package/genes/evolve-life/README.md +0 -52
  265. package/genes/evolve-life/gene.ir.wasm +0 -0
  266. package/genes/evolve-life/gene.wasm +0 -0
  267. package/genes/evolve-life/index.ts +0 -255
  268. package/genes/evolve-life/phenotype.json +0 -129
  269. package/genes/evolve-life-bitwise/.cloud-manifest.json +0 -6
  270. package/genes/evolve-life-bitwise/.compile-result.json +0 -12
  271. package/genes/evolve-life-bitwise/gene.ir.wasm +0 -0
  272. package/genes/evolve-life-bitwise/gene.wasm +0 -0
  273. package/genes/evolve-life-bitwise/index.ts +0 -273
  274. package/genes/evolve-life-bitwise/phenotype.json +0 -129
  275. package/genes/evolve-life-sparse/.cloud-manifest.json +0 -6
  276. package/genes/evolve-life-sparse/.compile-result.json +0 -12
  277. package/genes/evolve-life-sparse/gene.ir.wasm +0 -0
  278. package/genes/evolve-life-sparse/gene.wasm +0 -0
  279. package/genes/evolve-life-sparse/index.ts +0 -236
  280. package/genes/evolve-life-sparse/phenotype.json +0 -129
  281. package/genes/fact-checker/.cloud-manifest.json +0 -6
  282. package/genes/fact-checker/.gene-manifest.json +0 -8
  283. package/genes/fact-checker/SKILL.md +0 -373
  284. package/genes/fact-checker/phenotype.json +0 -28
  285. package/genes/git-workflow/.cloud-manifest.json +0 -6
  286. package/genes/git-workflow/.gene-manifest.json +0 -8
  287. package/genes/git-workflow/SKILL.md +0 -407
  288. package/genes/git-workflow/phenotype.json +0 -28
  289. package/genes/grammar-checker/.cloud-manifest.json +0 -6
  290. package/genes/grammar-checker/.gene-manifest.json +0 -8
  291. package/genes/grammar-checker/SKILL.md +0 -194
  292. package/genes/grammar-checker/index.ts +0 -168
  293. package/genes/grammar-checker/package.json +0 -1
  294. package/genes/grammar-checker/phenotype.json +0 -52
  295. package/genes/guard-balanced/.gene-manifest.json +0 -8
  296. package/genes/guard-balanced/phenotype.json +0 -105
  297. package/genes/guard-balanced/system-prompt.md +0 -23
  298. package/genes/guard-strict/.gene-manifest.json +0 -8
  299. package/genes/guard-strict/phenotype.json +0 -107
  300. package/genes/guard-strict/system-prompt.md +0 -18
  301. package/genes/json-validator/.cloud-manifest.json +0 -6
  302. package/genes/json-validator/README.md +0 -42
  303. package/genes/json-validator/index.ts +0 -112
  304. package/genes/json-validator/phenotype.json +0 -42
  305. package/genes/license-advisor/.cloud-manifest.json +0 -6
  306. package/genes/license-advisor/.gene-manifest.json +0 -8
  307. package/genes/license-advisor/SKILL.md +0 -117
  308. package/genes/license-advisor/phenotype.json +0 -28
  309. package/genes/logic-architect/.cloud-manifest.json +0 -6
  310. package/genes/logic-architect/.gene-manifest.json +0 -8
  311. package/genes/logic-architect/SKILL.md +0 -451
  312. package/genes/logic-architect/phenotype.json +0 -28
  313. package/genes/markdown-formatter/.cloud-manifest.json +0 -6
  314. package/genes/markdown-formatter/README.md +0 -34
  315. package/genes/markdown-formatter/index.ts +0 -86
  316. package/genes/markdown-formatter/phenotype.json +0 -32
  317. package/genes/orch/.cloud-manifest.json +0 -6
  318. package/genes/orch/.gene-manifest.json +0 -8
  319. package/genes/orch/SKILL.md +0 -504
  320. package/genes/orch/phenotype.json +0 -28
  321. package/genes/particle-barneshut/.cloud-manifest.json +0 -6
  322. package/genes/particle-barneshut/.compile-result.json +0 -12
  323. package/genes/particle-barneshut/README.md +0 -55
  324. package/genes/particle-barneshut/gene.ir.wasm +0 -0
  325. package/genes/particle-barneshut/gene.wasm +0 -0
  326. package/genes/particle-barneshut/index.ts +0 -486
  327. package/genes/particle-barneshut/phenotype.json +0 -137
  328. package/genes/particle-brute/.cloud-manifest.json +0 -6
  329. package/genes/particle-brute/.compile-result.json +0 -12
  330. package/genes/particle-brute/README.md +0 -55
  331. package/genes/particle-brute/gene.ir.wasm +0 -0
  332. package/genes/particle-brute/gene.wasm +0 -0
  333. package/genes/particle-brute/index.ts +0 -277
  334. package/genes/particle-brute/phenotype.json +0 -137
  335. package/genes/particle-spatial/.cloud-manifest.json +0 -6
  336. package/genes/particle-spatial/.compile-result.json +0 -12
  337. package/genes/particle-spatial/README.md +0 -53
  338. package/genes/particle-spatial/gene.ir.wasm +0 -0
  339. package/genes/particle-spatial/gene.wasm +0 -0
  340. package/genes/particle-spatial/index.ts +0 -352
  341. package/genes/particle-spatial/phenotype.json +0 -137
  342. package/genes/performance-optimizer/.cloud-manifest.json +0 -6
  343. package/genes/performance-optimizer/.gene-manifest.json +0 -8
  344. package/genes/performance-optimizer/SKILL.md +0 -480
  345. package/genes/performance-optimizer/phenotype.json +0 -28
  346. package/genes/plagiarism-checker/.cloud-manifest.json +0 -6
  347. package/genes/plagiarism-checker/.gene-manifest.json +0 -8
  348. package/genes/plagiarism-checker/SKILL.md +0 -342
  349. package/genes/plagiarism-checker/phenotype.json +0 -28
  350. package/genes/product-manager/.cloud-manifest.json +0 -6
  351. package/genes/product-manager/.gene-manifest.json +0 -8
  352. package/genes/product-manager/SKILL.md +0 -249
  353. package/genes/product-manager/phenotype.json +0 -28
  354. package/genes/project-reviewer/.cloud-manifest.json +0 -6
  355. package/genes/project-reviewer/.gene-manifest.json +0 -8
  356. package/genes/project-reviewer/SKILL.md +0 -312
  357. package/genes/project-reviewer/phenotype.json +0 -28
  358. package/genes/prompt-engineer/.cloud-manifest.json +0 -6
  359. package/genes/prompt-engineer/.gene-manifest.json +0 -8
  360. package/genes/prompt-engineer/SKILL.md +0 -411
  361. package/genes/prompt-engineer/phenotype.json +0 -28
  362. package/genes/prompt-review-perf/.gene-manifest.json +0 -8
  363. package/genes/prompt-review-perf/phenotype.json +0 -61
  364. package/genes/prompt-review-perf/system-prompt.md +0 -22
  365. package/genes/prompt-review-readability/.gene-manifest.json +0 -8
  366. package/genes/prompt-review-readability/phenotype.json +0 -60
  367. package/genes/prompt-review-readability/system-prompt.md +0 -21
  368. package/genes/prompt-review-security/.gene-manifest.json +0 -8
  369. package/genes/prompt-review-security/phenotype.json +0 -60
  370. package/genes/prompt-review-security/system-prompt.md +0 -21
  371. package/genes/readability-analyzer/.cloud-manifest.json +0 -6
  372. package/genes/readability-analyzer/.gene-manifest.json +0 -8
  373. package/genes/readability-analyzer/SKILL.md +0 -357
  374. package/genes/readability-analyzer/index.ts +0 -123
  375. package/genes/readability-analyzer/package.json +0 -1
  376. package/genes/readability-analyzer/phenotype.json +0 -35
  377. package/genes/rotifer-protocol/SKILL.md +0 -121
  378. package/genes/rule-router-frequency/.gene-manifest.json +0 -8
  379. package/genes/rule-router-frequency/phenotype.json +0 -76
  380. package/genes/rule-router-frequency/system-prompt.md +0 -26
  381. package/genes/rule-router-relevance/.gene-manifest.json +0 -8
  382. package/genes/rule-router-relevance/phenotype.json +0 -76
  383. package/genes/rule-router-relevance/system-prompt.md +0 -29
  384. package/genes/security-auditor/.cloud-manifest.json +0 -6
  385. package/genes/security-auditor/.gene-manifest.json +0 -8
  386. package/genes/security-auditor/SKILL.md +0 -494
  387. package/genes/security-auditor/phenotype.json +0 -28
  388. package/genes/seo-optimizer/.cloud-manifest.json +0 -6
  389. package/genes/seo-optimizer/.gene-manifest.json +0 -8
  390. package/genes/seo-optimizer/SKILL.md +0 -327
  391. package/genes/seo-optimizer/index.ts +0 -206
  392. package/genes/seo-optimizer/package.json +0 -1
  393. package/genes/seo-optimizer/phenotype.json +0 -1
  394. package/genes/source-linker/.cloud-manifest.json +0 -6
  395. package/genes/source-linker/index.ts +0 -88
  396. package/genes/source-linker/phenotype.json +0 -45
  397. package/genes/style-optimizer/.cloud-manifest.json +0 -6
  398. package/genes/style-optimizer/.gene-manifest.json +0 -8
  399. package/genes/style-optimizer/SKILL.md +0 -285
  400. package/genes/style-optimizer/phenotype.json +0 -28
  401. package/genes/tech-lead/.cloud-manifest.json +0 -6
  402. package/genes/tech-lead/.gene-manifest.json +0 -8
  403. package/genes/tech-lead/SKILL.md +0 -451
  404. package/genes/tech-lead/phenotype.json +0 -28
  405. package/genes/test-wrap/.cloud-manifest.json +0 -6
  406. package/genes/test-wrap/.gene-manifest.json +0 -8
  407. package/genes/test-wrap/phenotype.json +0 -28
  408. package/genes/testing-strategist/.cloud-manifest.json +0 -6
  409. package/genes/testing-strategist/.gene-manifest.json +0 -8
  410. package/genes/testing-strategist/SKILL.md +0 -500
  411. package/genes/testing-strategist/phenotype.json +0 -28
  412. package/genes/text-summarizer/.cloud-manifest.json +0 -6
  413. package/genes/text-summarizer/README.md +0 -34
  414. package/genes/text-summarizer/index.ts +0 -122
  415. package/genes/text-summarizer/phenotype.json +0 -32
  416. package/genes/tone-analyzer/.cloud-manifest.json +0 -6
  417. package/genes/tone-analyzer/.gene-manifest.json +0 -8
  418. package/genes/tone-analyzer/SKILL.md +0 -410
  419. package/genes/tone-analyzer/phenotype.json +0 -28
  420. package/genes/translator/.cloud-manifest.json +0 -6
  421. package/genes/translator/.gene-manifest.json +0 -8
  422. package/genes/translator/SKILL.md +0 -355
  423. package/genes/translator/phenotype.json +0 -28
  424. package/genes/ui-components/.cloud-manifest.json +0 -6
  425. package/genes/ui-components/.gene-manifest.json +0 -8
  426. package/genes/ui-components/SKILL.md +0 -467
  427. package/genes/ui-components/phenotype.json +0 -28
  428. package/genes/uiux-designer/.cloud-manifest.json +0 -6
  429. package/genes/uiux-designer/.gene-manifest.json +0 -8
  430. package/genes/uiux-designer/SKILL.md +0 -353
  431. package/genes/uiux-designer/phenotype.json +0 -28
  432. package/genes/url-extractor/.cloud-manifest.json +0 -6
  433. package/genes/url-extractor/README.md +0 -37
  434. package/genes/url-extractor/index.ts +0 -86
  435. package/genes/url-extractor/phenotype.json +0 -48
  436. package/genes/ux-patterns/.cloud-manifest.json +0 -6
  437. package/genes/ux-patterns/.gene-manifest.json +0 -8
  438. package/genes/ux-patterns/SKILL.md +0 -872
  439. package/genes/ux-patterns/phenotype.json +0 -28
  440. package/genes/web3-components/.cloud-manifest.json +0 -6
  441. package/genes/web3-components/.gene-manifest.json +0 -8
  442. package/genes/web3-components/SKILL.md +0 -390
  443. package/genes/web3-components/phenotype.json +0 -28
@@ -1,255 +0,0 @@
1
- interface LifeInput {
2
- width?: number;
3
- height?: number;
4
- generations?: number;
5
- preset?: "glider" | "pulsar" | "blinker" | "beacon" | "r-pentomino" | "random";
6
- grid?: number[][];
7
- rule?: string;
8
- seed?: number;
9
- }
10
-
11
- interface LifeOutput {
12
- final_grid: number[][];
13
- alive_count: number;
14
- peak_population: number;
15
- stabilized_at: number;
16
- extinction: boolean;
17
- generations_computed: number;
18
- cells_processed: number;
19
- ascii_snapshot?: string;
20
- }
21
-
22
- function parseRule(rule: string): { birth: Set<number>; survive: Set<number> } {
23
- const birth = new Set<number>();
24
- const survive = new Set<number>();
25
- const match = rule.match(/B([0-8]*)\/S([0-8]*)/);
26
- if (!match) return { birth: new Set([3]), survive: new Set([2, 3]) };
27
- for (const ch of match[1]) birth.add(parseInt(ch));
28
- for (const ch of match[2]) survive.add(parseInt(ch));
29
- return { birth, survive };
30
- }
31
-
32
- function mulberry32(seed: number): () => number {
33
- let s = seed | 0;
34
- return () => {
35
- s = (s + 0x6d2b79f5) | 0;
36
- let t = Math.imul(s ^ (s >>> 15), 1 | s);
37
- t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
38
- return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
39
- };
40
- }
41
-
42
- function createGrid(w: number, h: number): number[][] {
43
- const g: number[][] = [];
44
- for (let y = 0; y < h; y++) {
45
- g.push(new Array(w).fill(0));
46
- }
47
- return g;
48
- }
49
-
50
- function placePattern(grid: number[][], pattern: number[][], cx: number, cy: number): void {
51
- for (let py = 0; py < pattern.length; py++) {
52
- for (let px = 0; px < pattern[py].length; px++) {
53
- const gy = cy + py;
54
- const gx = cx + px;
55
- if (gy >= 0 && gy < grid.length && gx >= 0 && gx < grid[0].length) {
56
- grid[gy][gx] = pattern[py][px];
57
- }
58
- }
59
- }
60
- }
61
-
62
- function applyPreset(grid: number[][], preset: string, seed?: number): void {
63
- const w = grid[0].length;
64
- const h = grid.length;
65
- const cx = Math.floor(w / 2);
66
- const cy = Math.floor(h / 2);
67
-
68
- switch (preset) {
69
- case "glider":
70
- placePattern(grid, [
71
- [0, 1, 0],
72
- [0, 0, 1],
73
- [1, 1, 1],
74
- ], cx - 1, cy - 1);
75
- break;
76
-
77
- case "blinker":
78
- placePattern(grid, [[1, 1, 1]], cx - 1, cy);
79
- break;
80
-
81
- case "beacon":
82
- placePattern(grid, [
83
- [1, 1, 0, 0],
84
- [1, 1, 0, 0],
85
- [0, 0, 1, 1],
86
- [0, 0, 1, 1],
87
- ], cx - 2, cy - 2);
88
- break;
89
-
90
- case "pulsar":
91
- placePattern(grid, [
92
- [0,0,1,1,1,0,0,0,1,1,1,0,0],
93
- [0,0,0,0,0,0,0,0,0,0,0,0,0],
94
- [1,0,0,0,0,1,0,1,0,0,0,0,1],
95
- [1,0,0,0,0,1,0,1,0,0,0,0,1],
96
- [1,0,0,0,0,1,0,1,0,0,0,0,1],
97
- [0,0,1,1,1,0,0,0,1,1,1,0,0],
98
- [0,0,0,0,0,0,0,0,0,0,0,0,0],
99
- [0,0,1,1,1,0,0,0,1,1,1,0,0],
100
- [1,0,0,0,0,1,0,1,0,0,0,0,1],
101
- [1,0,0,0,0,1,0,1,0,0,0,0,1],
102
- [1,0,0,0,0,1,0,1,0,0,0,0,1],
103
- [0,0,0,0,0,0,0,0,0,0,0,0,0],
104
- [0,0,1,1,1,0,0,0,1,1,1,0,0],
105
- ], cx - 6, cy - 6);
106
- break;
107
-
108
- case "r-pentomino":
109
- placePattern(grid, [
110
- [0, 1, 1],
111
- [1, 1, 0],
112
- [0, 1, 0],
113
- ], cx - 1, cy - 1);
114
- break;
115
-
116
- case "random": {
117
- const rng = mulberry32(seed ?? 42);
118
- const density = 0.35;
119
- for (let y = 0; y < h; y++) {
120
- for (let x = 0; x < w; x++) {
121
- grid[y][x] = rng() < density ? 1 : 0;
122
- }
123
- }
124
- break;
125
- }
126
- }
127
- }
128
-
129
- function countAlive(grid: number[][]): number {
130
- let count = 0;
131
- for (let y = 0; y < grid.length; y++) {
132
- for (let x = 0; x < grid[0].length; x++) {
133
- count += grid[y][x];
134
- }
135
- }
136
- return count;
137
- }
138
-
139
- function gridHash(grid: number[][]): string {
140
- let hash = 0;
141
- for (let y = 0; y < grid.length; y++) {
142
- for (let x = 0; x < grid[0].length; x++) {
143
- hash = ((hash << 5) - hash + grid[y][x]) | 0;
144
- }
145
- }
146
- return hash.toString(36);
147
- }
148
-
149
- function step(
150
- current: number[][],
151
- next: number[][],
152
- w: number,
153
- h: number,
154
- birth: Set<number>,
155
- survive: Set<number>
156
- ): void {
157
- for (let y = 0; y < h; y++) {
158
- for (let x = 0; x < w; x++) {
159
- let neighbors = 0;
160
- for (let dy = -1; dy <= 1; dy++) {
161
- for (let dx = -1; dx <= 1; dx++) {
162
- if (dy === 0 && dx === 0) continue;
163
- const ny = (y + dy + h) % h;
164
- const nx = (x + dx + w) % w;
165
- neighbors += current[ny][nx];
166
- }
167
- }
168
- if (current[y][x] === 1) {
169
- next[y][x] = survive.has(neighbors) ? 1 : 0;
170
- } else {
171
- next[y][x] = birth.has(neighbors) ? 1 : 0;
172
- }
173
- }
174
- }
175
- }
176
-
177
- function toAscii(grid: number[][], maxW: number, maxH: number): string {
178
- const h = Math.min(grid.length, maxH);
179
- const w = Math.min(grid[0].length, maxW);
180
- const lines: string[] = [];
181
- for (let y = 0; y < h; y++) {
182
- let line = "";
183
- for (let x = 0; x < w; x++) {
184
- line += grid[y][x] ? "\u2588" : "\u00b7";
185
- }
186
- lines.push(line);
187
- }
188
- return lines.join("\n");
189
- }
190
-
191
- export async function express(input: LifeInput): Promise<LifeOutput> {
192
- const w = Math.max(4, Math.min(512, input.width ?? 64));
193
- const h = Math.max(4, Math.min(512, input.height ?? 64));
194
- const maxGen = Math.max(1, Math.min(10000, input.generations ?? 100));
195
- const { birth, survive } = parseRule(input.rule ?? "B3/S23");
196
-
197
- let gridA = createGrid(w, h);
198
- let gridB = createGrid(w, h);
199
-
200
- if (input.preset) {
201
- applyPreset(gridA, input.preset, input.seed);
202
- } else if (input.grid) {
203
- for (let y = 0; y < Math.min(input.grid.length, h); y++) {
204
- for (let x = 0; x < Math.min(input.grid[y].length, w); x++) {
205
- gridA[y][x] = input.grid[y][x] ? 1 : 0;
206
- }
207
- }
208
- } else {
209
- applyPreset(gridA, "random", input.seed);
210
- }
211
-
212
- let peak = countAlive(gridA);
213
- let stabilizedAt = -1;
214
- let extinction = false;
215
- let gen = 0;
216
-
217
- let prevHash = gridHash(gridA);
218
- let prevPrevHash = "";
219
-
220
- for (gen = 0; gen < maxGen; gen++) {
221
- step(gridA, gridB, w, h, birth, survive);
222
- [gridA, gridB] = [gridB, gridA];
223
-
224
- const alive = countAlive(gridA);
225
- if (alive > peak) peak = alive;
226
-
227
- if (alive === 0) {
228
- extinction = true;
229
- gen++;
230
- break;
231
- }
232
-
233
- const currentHash = gridHash(gridA);
234
- if (currentHash === prevHash || currentHash === prevPrevHash) {
235
- stabilizedAt = gen + 1;
236
- gen++;
237
- break;
238
- }
239
- prevPrevHash = prevHash;
240
- prevHash = currentHash;
241
- }
242
-
243
- const finalAlive = countAlive(gridA);
244
-
245
- return {
246
- final_grid: gridA,
247
- alive_count: finalAlive,
248
- peak_population: peak,
249
- stabilized_at: stabilizedAt,
250
- extinction,
251
- generations_computed: gen,
252
- cells_processed: w * h * gen,
253
- ascii_snapshot: toAscii(gridA, 80, 40),
254
- };
255
- }
@@ -1,129 +0,0 @@
1
- {
2
- "domain": "evolve.life",
3
- "description": "Conway's Game of Life simulator. Computes cellular automaton evolution from an initial grid state over N generations. Supports preset patterns (glider, pulsar, random) and custom grids. Pure computation \u2014 ideal Native Gene benchmark.",
4
- "inputSchema": {
5
- "type": "object",
6
- "properties": {
7
- "width": {
8
- "type": "number",
9
- "description": "Grid width in cells",
10
- "default": 64,
11
- "minimum": 4,
12
- "maximum": 512
13
- },
14
- "height": {
15
- "type": "number",
16
- "description": "Grid height in cells",
17
- "default": 64,
18
- "minimum": 4,
19
- "maximum": 512
20
- },
21
- "generations": {
22
- "type": "number",
23
- "description": "Number of generations to simulate",
24
- "default": 100,
25
- "minimum": 1,
26
- "maximum": 10000
27
- },
28
- "preset": {
29
- "type": "string",
30
- "description": "Initial pattern preset. Overrides grid if provided.",
31
- "enum": [
32
- "glider",
33
- "pulsar",
34
- "blinker",
35
- "beacon",
36
- "r-pentomino",
37
- "random"
38
- ]
39
- },
40
- "grid": {
41
- "type": "array",
42
- "description": "Custom initial grid (2D array of 0s and 1s). Ignored if preset is set.",
43
- "items": {
44
- "type": "array",
45
- "items": {
46
- "type": "number",
47
- "enum": [
48
- 0,
49
- 1
50
- ]
51
- }
52
- }
53
- },
54
- "rule": {
55
- "type": "string",
56
- "description": "Life-like rule in B/S notation (default: B3/S23 for Conway's Life)",
57
- "default": "B3/S23"
58
- },
59
- "seed": {
60
- "type": "number",
61
- "description": "Random seed for 'random' preset (deterministic output)"
62
- }
63
- },
64
- "required": []
65
- },
66
- "outputSchema": {
67
- "type": "object",
68
- "properties": {
69
- "final_grid": {
70
- "type": "array",
71
- "description": "Grid state after all generations",
72
- "items": {
73
- "type": "array",
74
- "items": {
75
- "type": "number",
76
- "enum": [
77
- 0,
78
- 1
79
- ]
80
- }
81
- }
82
- },
83
- "alive_count": {
84
- "type": "number",
85
- "description": "Number of live cells in final grid"
86
- },
87
- "peak_population": {
88
- "type": "number",
89
- "description": "Maximum live cells observed across all generations"
90
- },
91
- "stabilized_at": {
92
- "type": "number",
93
- "description": "Generation at which the grid stabilized (-1 if not stabilized)"
94
- },
95
- "extinction": {
96
- "type": "boolean",
97
- "description": "Whether all cells died before final generation"
98
- },
99
- "generations_computed": {
100
- "type": "number",
101
- "description": "Actual number of generations computed (may be less if stabilized/extinct)"
102
- },
103
- "cells_processed": {
104
- "type": "number",
105
- "description": "Total cell evaluations (width * height * generations_computed)"
106
- },
107
- "ascii_snapshot": {
108
- "type": "string",
109
- "description": "ASCII art of the final grid state (max 80x40)"
110
- }
111
- },
112
- "required": [
113
- "final_grid",
114
- "alive_count",
115
- "peak_population",
116
- "stabilized_at",
117
- "extinction",
118
- "generations_computed",
119
- "cells_processed"
120
- ]
121
- },
122
- "dependencies": [],
123
- "version": "0.2.0",
124
- "author": "rotifer-team",
125
- "createdAt": 1741906800000,
126
- "fidelity": "Native",
127
- "transparency": "Open",
128
- "ir_hash": "f04e1e5913d7b6624630254dc97e18f2bea5b113bd52e3cd6fdddc0ce0f471c2"
129
- }
@@ -1,6 +0,0 @@
1
- {
2
- "cloud_id": "f6f7b7b6-9d59-4977-862d-fad378e1c422",
3
- "owner": "Rotifer Protocol",
4
- "version": "0.2.0",
5
- "published_at": "2026-03-17T14:12:38.343Z"
6
- }
@@ -1,12 +0,0 @@
1
- {
2
- "geneId": "5c2d27d8cc0f8f2d5be5bdf95b4c5b499a8a753c5181dc6551a55eb000ca2628",
3
- "name": "evolve-life-bitwise",
4
- "domain": "evolve.life",
5
- "compiledAt": "2026-03-14T06:25:01.974Z",
6
- "fidelity": "Native",
7
- "wasmAvailable": true,
8
- "irHash": "29095a3f52e096d1e8ba016b9025cacb90e95f9be1b157f6f5d0c487114ec538",
9
- "totalSize": 1307563,
10
- "codeSectionSize": 956115,
11
- "durationMs": 4505
12
- }
Binary file
@@ -1,273 +0,0 @@
1
- interface LifeInput {
2
- width?: number;
3
- height?: number;
4
- generations?: number;
5
- preset?: "glider" | "pulsar" | "blinker" | "beacon" | "r-pentomino" | "random";
6
- grid?: number[][];
7
- rule?: string;
8
- seed?: number;
9
- }
10
-
11
- interface LifeOutput {
12
- final_grid: number[][];
13
- alive_count: number;
14
- peak_population: number;
15
- stabilized_at: number;
16
- extinction: boolean;
17
- generations_computed: number;
18
- cells_processed: number;
19
- ascii_snapshot?: string;
20
- }
21
-
22
- function parseRule(rule: string): { birth: number[]; survive: number[] } {
23
- const birth: number[] = [];
24
- const survive: number[] = [];
25
- const match = rule.match(/B([0-8]*)\/S([0-8]*)/);
26
- if (!match) return { birth: [3], survive: [2, 3] };
27
- for (const ch of match[1]) birth.push(parseInt(ch));
28
- for (const ch of match[2]) survive.push(parseInt(ch));
29
- return { birth, survive };
30
- }
31
-
32
- function mulberry32(seed: number): () => number {
33
- let s = seed | 0;
34
- return () => {
35
- s = (s + 0x6d2b79f5) | 0;
36
- let t = Math.imul(s ^ (s >>> 15), 1 | s);
37
- t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
38
- return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
39
- };
40
- }
41
-
42
- const WORD_BITS = 32;
43
-
44
- function wordsPerRow(w: number): number {
45
- return ((w + WORD_BITS - 1) / WORD_BITS) | 0;
46
- }
47
-
48
- function createBitGrid(w: number, h: number): Int32Array {
49
- return new Int32Array(h * wordsPerRow(w));
50
- }
51
-
52
- function getBit(grid: Int32Array, wpr: number, x: number, y: number): number {
53
- const wordIdx = y * wpr + ((x / WORD_BITS) | 0);
54
- const bitIdx = x % WORD_BITS;
55
- return (grid[wordIdx] >>> bitIdx) & 1;
56
- }
57
-
58
- function setBit(grid: Int32Array, wpr: number, x: number, y: number): void {
59
- const wordIdx = y * wpr + ((x / WORD_BITS) | 0);
60
- const bitIdx = x % WORD_BITS;
61
- grid[wordIdx] |= 1 << bitIdx;
62
- }
63
-
64
- function popcount32(v: number): number {
65
- v = v - ((v >>> 1) & 0x55555555);
66
- v = (v & 0x33333333) + ((v >>> 2) & 0x33333333);
67
- return (((v + (v >>> 4)) & 0x0f0f0f0f) * 0x01010101) >>> 24;
68
- }
69
-
70
- function countAlive(grid: Int32Array): number {
71
- let count = 0;
72
- for (let i = 0; i < grid.length; i++) {
73
- count += popcount32(grid[i]);
74
- }
75
- return count;
76
- }
77
-
78
- function gridHash(grid: Int32Array): number {
79
- let h = 0;
80
- for (let i = 0; i < grid.length; i++) {
81
- h = ((h << 5) - h + grid[i]) | 0;
82
- }
83
- return h;
84
- }
85
-
86
- function placePattern(grid: Int32Array, wpr: number, w: number, h: number, pattern: number[][], ox: number, oy: number): void {
87
- for (let py = 0; py < pattern.length; py++) {
88
- for (let px = 0; px < pattern[py].length; px++) {
89
- if (pattern[py][px]) {
90
- const gx = ox + px;
91
- const gy = oy + py;
92
- if (gx >= 0 && gx < w && gy >= 0 && gy < h) setBit(grid, wpr, gx, gy);
93
- }
94
- }
95
- }
96
- }
97
-
98
- function applyPreset(grid: Int32Array, wpr: number, w: number, h: number, preset: string, seed?: number): void {
99
- const cx = (w / 2) | 0;
100
- const cy = (h / 2) | 0;
101
-
102
- switch (preset) {
103
- case "glider":
104
- placePattern(grid, wpr, w, h, [[0,1,0],[0,0,1],[1,1,1]], cx - 1, cy - 1);
105
- break;
106
- case "blinker":
107
- placePattern(grid, wpr, w, h, [[1,1,1]], cx - 1, cy);
108
- break;
109
- case "beacon":
110
- placePattern(grid, wpr, w, h, [[1,1,0,0],[1,1,0,0],[0,0,1,1],[0,0,1,1]], cx - 2, cy - 2);
111
- break;
112
- case "pulsar":
113
- placePattern(grid, wpr, w, h, [
114
- [0,0,1,1,1,0,0,0,1,1,1,0,0],
115
- [0,0,0,0,0,0,0,0,0,0,0,0,0],
116
- [1,0,0,0,0,1,0,1,0,0,0,0,1],
117
- [1,0,0,0,0,1,0,1,0,0,0,0,1],
118
- [1,0,0,0,0,1,0,1,0,0,0,0,1],
119
- [0,0,1,1,1,0,0,0,1,1,1,0,0],
120
- [0,0,0,0,0,0,0,0,0,0,0,0,0],
121
- [0,0,1,1,1,0,0,0,1,1,1,0,0],
122
- [1,0,0,0,0,1,0,1,0,0,0,0,1],
123
- [1,0,0,0,0,1,0,1,0,0,0,0,1],
124
- [1,0,0,0,0,1,0,1,0,0,0,0,1],
125
- [0,0,0,0,0,0,0,0,0,0,0,0,0],
126
- [0,0,1,1,1,0,0,0,1,1,1,0,0],
127
- ], cx - 6, cy - 6);
128
- break;
129
- case "r-pentomino":
130
- placePattern(grid, wpr, w, h, [[0,1,1],[1,1,0],[0,1,0]], cx - 1, cy - 1);
131
- break;
132
- case "random": {
133
- const rng = mulberry32(seed ?? 42);
134
- for (let y = 0; y < h; y++) {
135
- for (let x = 0; x < w; x++) {
136
- if (rng() < 0.35) setBit(grid, wpr, x, y);
137
- }
138
- }
139
- break;
140
- }
141
- }
142
- }
143
-
144
- function step(
145
- current: Int32Array,
146
- next: Int32Array,
147
- w: number,
148
- h: number,
149
- wpr: number,
150
- birthLut: Uint8Array,
151
- surviveLut: Uint8Array
152
- ): void {
153
- next.fill(0);
154
- for (let y = 0; y < h; y++) {
155
- const yn = (y - 1 + h) % h;
156
- const ys = (y + 1) % h;
157
- for (let x = 0; x < w; x++) {
158
- let neighbors = 0;
159
- const xw = (x - 1 + w) % w;
160
- const xe = (x + 1) % w;
161
- neighbors += getBit(current, wpr, xw, yn);
162
- neighbors += getBit(current, wpr, x, yn);
163
- neighbors += getBit(current, wpr, xe, yn);
164
- neighbors += getBit(current, wpr, xw, y);
165
- neighbors += getBit(current, wpr, xe, y);
166
- neighbors += getBit(current, wpr, xw, ys);
167
- neighbors += getBit(current, wpr, x, ys);
168
- neighbors += getBit(current, wpr, xe, ys);
169
-
170
- const isAlive = getBit(current, wpr, x, y);
171
- if (isAlive ? surviveLut[neighbors] : birthLut[neighbors]) {
172
- setBit(next, wpr, x, y);
173
- }
174
- }
175
- }
176
- }
177
-
178
- function bitGridToArray(grid: Int32Array, wpr: number, w: number, h: number): number[][] {
179
- const result: number[][] = [];
180
- for (let y = 0; y < h; y++) {
181
- const row = new Array(w);
182
- for (let x = 0; x < w; x++) {
183
- row[x] = getBit(grid, wpr, x, y);
184
- }
185
- result.push(row);
186
- }
187
- return result;
188
- }
189
-
190
- function toAscii(grid: Int32Array, wpr: number, w: number, h: number): string {
191
- const maxW = Math.min(w, 80);
192
- const maxH = Math.min(h, 40);
193
- const lines: string[] = [];
194
- for (let y = 0; y < maxH; y++) {
195
- let line = "";
196
- for (let x = 0; x < maxW; x++) {
197
- line += getBit(grid, wpr, x, y) ? "\u2588" : "\u00b7";
198
- }
199
- lines.push(line);
200
- }
201
- return lines.join("\n");
202
- }
203
-
204
- export async function express(input: LifeInput): Promise<LifeOutput> {
205
- const w = Math.max(4, Math.min(512, input.width ?? 64));
206
- const h = Math.max(4, Math.min(512, input.height ?? 64));
207
- const maxGen = Math.max(1, Math.min(10000, input.generations ?? 100));
208
- const { birth, survive } = parseRule(input.rule ?? "B3/S23");
209
-
210
- const birthLut = new Uint8Array(9);
211
- const surviveLut = new Uint8Array(9);
212
- for (const b of birth) birthLut[b] = 1;
213
- for (const s of survive) surviveLut[s] = 1;
214
-
215
- const wpr = wordsPerRow(w);
216
- let gridA = createBitGrid(w, h);
217
- let gridB = createBitGrid(w, h);
218
-
219
- if (input.preset) {
220
- applyPreset(gridA, wpr, w, h, input.preset, input.seed);
221
- } else if (input.grid) {
222
- for (let y = 0; y < Math.min(input.grid.length, h); y++) {
223
- for (let x = 0; x < Math.min(input.grid[y].length, w); x++) {
224
- if (input.grid[y][x]) setBit(gridA, wpr, x, y);
225
- }
226
- }
227
- } else {
228
- applyPreset(gridA, wpr, w, h, "random", input.seed);
229
- }
230
-
231
- let peak = countAlive(gridA);
232
- let stabilizedAt = -1;
233
- let extinction = false;
234
- let gen = 0;
235
- let prevHash = gridHash(gridA);
236
- let prevPrevHash = 0;
237
-
238
- for (gen = 0; gen < maxGen; gen++) {
239
- step(gridA, gridB, w, h, wpr, birthLut, surviveLut);
240
- [gridA, gridB] = [gridB, gridA];
241
-
242
- const alive = countAlive(gridA);
243
- if (alive > peak) peak = alive;
244
-
245
- if (alive === 0) {
246
- extinction = true;
247
- gen++;
248
- break;
249
- }
250
-
251
- const currentHash = gridHash(gridA);
252
- if (currentHash === prevHash || currentHash === prevPrevHash) {
253
- stabilizedAt = gen + 1;
254
- gen++;
255
- break;
256
- }
257
- prevPrevHash = prevHash;
258
- prevHash = currentHash;
259
- }
260
-
261
- const finalAlive = countAlive(gridA);
262
-
263
- return {
264
- final_grid: bitGridToArray(gridA, wpr, w, h),
265
- alive_count: finalAlive,
266
- peak_population: peak,
267
- stabilized_at: stabilizedAt,
268
- extinction,
269
- generations_computed: gen,
270
- cells_processed: w * h * gen,
271
- ascii_snapshot: toAscii(gridA, wpr, w, h),
272
- };
273
- }