@rotifer/playground 0.8.1 → 0.8.6

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 (453) hide show
  1. package/CHANGELOG.md +46 -11
  2. package/README.md +92 -58
  3. package/README.zh.md +90 -49
  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 +166 -44
  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 +114 -37
  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 +80 -58
  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 +152 -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 +32 -12
  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 +104 -79
  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 +1 -0
  122. package/dist/utils/binding.d.ts.map +1 -1
  123. package/dist/utils/binding.js +37 -15
  124. package/dist/utils/binding.js.map +1 -1
  125. package/dist/utils/content-hash.d.ts +3 -0
  126. package/dist/utils/content-hash.d.ts.map +1 -0
  127. package/dist/utils/content-hash.js +25 -0
  128. package/dist/utils/content-hash.js.map +1 -0
  129. package/dist/utils/detect-source-language.d.ts +20 -0
  130. package/dist/utils/detect-source-language.d.ts.map +1 -0
  131. package/dist/utils/detect-source-language.js +83 -0
  132. package/dist/utils/detect-source-language.js.map +1 -0
  133. package/dist/utils/display.d.ts +44 -1
  134. package/dist/utils/display.d.ts.map +1 -1
  135. package/dist/utils/display.js +443 -14
  136. package/dist/utils/display.js.map +1 -1
  137. package/dist/utils/domain-suggest.d.ts.map +1 -1
  138. package/dist/utils/domain-suggest.js +3 -3
  139. package/dist/utils/domain-suggest.js.map +1 -1
  140. package/dist/utils/javy-compiler.d.ts.map +1 -1
  141. package/dist/utils/javy-compiler.js +10 -3
  142. package/dist/utils/javy-compiler.js.map +1 -1
  143. package/dist/utils/open-browser.d.ts +7 -3
  144. package/dist/utils/open-browser.d.ts.map +1 -1
  145. package/dist/utils/open-browser.js +15 -4
  146. package/dist/utils/open-browser.js.map +1 -1
  147. package/dist/utils/palette.d.ts +49 -0
  148. package/dist/utils/palette.d.ts.map +1 -0
  149. package/dist/utils/palette.js +80 -0
  150. package/dist/utils/palette.js.map +1 -0
  151. package/dist/utils/private-fs.d.ts +3 -0
  152. package/dist/utils/private-fs.d.ts.map +1 -0
  153. package/dist/utils/private-fs.js +25 -0
  154. package/dist/utils/private-fs.js.map +1 -0
  155. package/dist/utils/project-root.d.ts +2 -0
  156. package/dist/utils/project-root.d.ts.map +1 -0
  157. package/dist/utils/project-root.js +49 -0
  158. package/dist/utils/project-root.js.map +1 -0
  159. package/dist/utils/run-logger.d.ts +24 -0
  160. package/dist/utils/run-logger.d.ts.map +1 -0
  161. package/dist/utils/run-logger.js +70 -0
  162. package/dist/utils/run-logger.js.map +1 -0
  163. package/dist/utils/sandbox-defaults.d.ts +9 -0
  164. package/dist/utils/sandbox-defaults.d.ts.map +1 -0
  165. package/dist/utils/sandbox-defaults.js +12 -0
  166. package/dist/utils/sandbox-defaults.js.map +1 -0
  167. package/dist/utils/update-check.d.ts +20 -0
  168. package/dist/utils/update-check.d.ts.map +1 -0
  169. package/dist/utils/update-check.js +155 -0
  170. package/dist/utils/update-check.js.map +1 -0
  171. package/dist/utils/user-config.d.ts +10 -0
  172. package/dist/utils/user-config.d.ts.map +1 -0
  173. package/dist/utils/user-config.js +54 -0
  174. package/dist/utils/user-config.js.map +1 -0
  175. package/dist/utils/validate-gene-name.d.ts +7 -0
  176. package/dist/utils/validate-gene-name.d.ts.map +1 -0
  177. package/dist/utils/validate-gene-name.js +28 -0
  178. package/dist/utils/validate-gene-name.js.map +1 -0
  179. package/genes/genesis-code-format/phenotype.json +4 -3
  180. package/genes/genesis-file-read/phenotype.json +4 -3
  181. package/genes/genesis-l0-constraint/phenotype.json +4 -3
  182. package/genes/genesis-web-search/phenotype.json +5 -4
  183. package/genes/genesis-web-search-lite/phenotype.json +4 -3
  184. package/package.json +35 -8
  185. package/scripts/postinstall.js +38 -0
  186. package/dist/errors/formatter.d.ts +0 -25
  187. package/dist/errors/formatter.d.ts.map +0 -1
  188. package/dist/errors/formatter.js +0 -43
  189. package/dist/errors/formatter.js.map +0 -1
  190. package/genes/academic-writer/.cloud-manifest.json +0 -6
  191. package/genes/academic-writer/.gene-manifest.json +0 -8
  192. package/genes/academic-writer/SKILL.md +0 -274
  193. package/genes/academic-writer/phenotype.json +0 -28
  194. package/genes/ai-components/.cloud-manifest.json +0 -6
  195. package/genes/ai-components/.gene-manifest.json +0 -8
  196. package/genes/ai-components/SKILL.md +0 -381
  197. package/genes/ai-components/phenotype.json +0 -28
  198. package/genes/algorithmic-art/.cloud-manifest.json +0 -6
  199. package/genes/algorithmic-art/.gene-manifest.json +0 -8
  200. package/genes/algorithmic-art/SKILL.md +0 -405
  201. package/genes/algorithmic-art/phenotype.json +0 -28
  202. package/genes/answer-synthesizer/.cloud-manifest.json +0 -6
  203. package/genes/answer-synthesizer/index.ts +0 -194
  204. package/genes/answer-synthesizer/phenotype.json +0 -61
  205. package/genes/api-designer/.cloud-manifest.json +0 -6
  206. package/genes/api-designer/.gene-manifest.json +0 -8
  207. package/genes/api-designer/SKILL.md +0 -456
  208. package/genes/api-designer/phenotype.json +0 -28
  209. package/genes/auto-coder/.cloud-manifest.json +0 -6
  210. package/genes/auto-coder/.gene-manifest.json +0 -8
  211. package/genes/auto-coder/SKILL.md +0 -400
  212. package/genes/auto-coder/phenotype.json +0 -28
  213. package/genes/auto-writer/.cloud-manifest.json +0 -6
  214. package/genes/auto-writer/.gene-manifest.json +0 -8
  215. package/genes/auto-writer/SKILL.md +0 -361
  216. package/genes/auto-writer/phenotype.json +0 -28
  217. package/genes/brand-personality/.cloud-manifest.json +0 -6
  218. package/genes/brand-personality/.gene-manifest.json +0 -8
  219. package/genes/brand-personality/SKILL.md +0 -549
  220. package/genes/brand-personality/phenotype.json +0 -28
  221. package/genes/business-writer/.cloud-manifest.json +0 -6
  222. package/genes/business-writer/.gene-manifest.json +0 -8
  223. package/genes/business-writer/SKILL.md +0 -448
  224. package/genes/business-writer/phenotype.json +0 -28
  225. package/genes/citation-manager/.cloud-manifest.json +0 -6
  226. package/genes/citation-manager/.gene-manifest.json +0 -8
  227. package/genes/citation-manager/SKILL.md +0 -279
  228. package/genes/citation-manager/index.ts +0 -162
  229. package/genes/citation-manager/package.json +0 -1
  230. package/genes/citation-manager/phenotype.json +0 -50
  231. package/genes/code-complexity/.cloud-manifest.json +0 -6
  232. package/genes/code-complexity/README.md +0 -35
  233. package/genes/code-complexity/index.ts +0 -101
  234. package/genes/code-complexity/phenotype.json +0 -34
  235. package/genes/copywriter/.cloud-manifest.json +0 -6
  236. package/genes/copywriter/.gene-manifest.json +0 -8
  237. package/genes/copywriter/SKILL.md +0 -329
  238. package/genes/copywriter/phenotype.json +0 -28
  239. package/genes/creative-writer/.cloud-manifest.json +0 -6
  240. package/genes/creative-writer/.gene-manifest.json +0 -8
  241. package/genes/creative-writer/SKILL.md +0 -356
  242. package/genes/creative-writer/phenotype.json +0 -28
  243. package/genes/data-modeler/.cloud-manifest.json +0 -6
  244. package/genes/data-modeler/.gene-manifest.json +0 -8
  245. package/genes/data-modeler/SKILL.md +0 -486
  246. package/genes/data-modeler/phenotype.json +0 -28
  247. package/genes/debugger/.cloud-manifest.json +0 -6
  248. package/genes/debugger/.gene-manifest.json +0 -8
  249. package/genes/debugger/SKILL.md +0 -416
  250. package/genes/debugger/phenotype.json +0 -28
  251. package/genes/design-tokens/.cloud-manifest.json +0 -6
  252. package/genes/design-tokens/.gene-manifest.json +0 -8
  253. package/genes/design-tokens/SKILL.md +0 -222
  254. package/genes/design-tokens/index.ts +0 -128
  255. package/genes/design-tokens/package.json +0 -1
  256. package/genes/design-tokens/phenotype.json +0 -1
  257. package/genes/devops-automator/.cloud-manifest.json +0 -6
  258. package/genes/devops-automator/.gene-manifest.json +0 -8
  259. package/genes/devops-automator/SKILL.md +0 -490
  260. package/genes/devops-automator/phenotype.json +0 -28
  261. package/genes/doc-coauthoring/.cloud-manifest.json +0 -6
  262. package/genes/doc-coauthoring/.gene-manifest.json +0 -8
  263. package/genes/doc-coauthoring/SKILL.md +0 -375
  264. package/genes/doc-coauthoring/phenotype.json +0 -28
  265. package/genes/doc-retrieval/.cloud-manifest.json +0 -6
  266. package/genes/doc-retrieval/index.ts +0 -134
  267. package/genes/doc-retrieval/phenotype.json +0 -54
  268. package/genes/docs-writer/.cloud-manifest.json +0 -6
  269. package/genes/docs-writer/.gene-manifest.json +0 -8
  270. package/genes/docs-writer/SKILL.md +0 -492
  271. package/genes/docs-writer/phenotype.json +0 -28
  272. package/genes/evolve-life/.cloud-manifest.json +0 -6
  273. package/genes/evolve-life/.compile-result.json +0 -12
  274. package/genes/evolve-life/README.md +0 -52
  275. package/genes/evolve-life/gene.ir.wasm +0 -0
  276. package/genes/evolve-life/gene.wasm +0 -0
  277. package/genes/evolve-life/index.ts +0 -255
  278. package/genes/evolve-life/phenotype.json +0 -129
  279. package/genes/evolve-life-bitwise/.cloud-manifest.json +0 -6
  280. package/genes/evolve-life-bitwise/.compile-result.json +0 -12
  281. package/genes/evolve-life-bitwise/gene.ir.wasm +0 -0
  282. package/genes/evolve-life-bitwise/gene.wasm +0 -0
  283. package/genes/evolve-life-bitwise/index.ts +0 -273
  284. package/genes/evolve-life-bitwise/phenotype.json +0 -129
  285. package/genes/evolve-life-sparse/.cloud-manifest.json +0 -6
  286. package/genes/evolve-life-sparse/.compile-result.json +0 -12
  287. package/genes/evolve-life-sparse/gene.ir.wasm +0 -0
  288. package/genes/evolve-life-sparse/gene.wasm +0 -0
  289. package/genes/evolve-life-sparse/index.ts +0 -236
  290. package/genes/evolve-life-sparse/phenotype.json +0 -129
  291. package/genes/fact-checker/.cloud-manifest.json +0 -6
  292. package/genes/fact-checker/.gene-manifest.json +0 -8
  293. package/genes/fact-checker/SKILL.md +0 -373
  294. package/genes/fact-checker/phenotype.json +0 -28
  295. package/genes/git-workflow/.cloud-manifest.json +0 -6
  296. package/genes/git-workflow/.gene-manifest.json +0 -8
  297. package/genes/git-workflow/SKILL.md +0 -407
  298. package/genes/git-workflow/phenotype.json +0 -28
  299. package/genes/grammar-checker/.cloud-manifest.json +0 -6
  300. package/genes/grammar-checker/.gene-manifest.json +0 -8
  301. package/genes/grammar-checker/SKILL.md +0 -194
  302. package/genes/grammar-checker/index.ts +0 -168
  303. package/genes/grammar-checker/package.json +0 -1
  304. package/genes/grammar-checker/phenotype.json +0 -52
  305. package/genes/guard-balanced/.gene-manifest.json +0 -8
  306. package/genes/guard-balanced/phenotype.json +0 -105
  307. package/genes/guard-balanced/system-prompt.md +0 -23
  308. package/genes/guard-strict/.gene-manifest.json +0 -8
  309. package/genes/guard-strict/phenotype.json +0 -107
  310. package/genes/guard-strict/system-prompt.md +0 -18
  311. package/genes/json-validator/.cloud-manifest.json +0 -6
  312. package/genes/json-validator/README.md +0 -42
  313. package/genes/json-validator/index.ts +0 -112
  314. package/genes/json-validator/phenotype.json +0 -42
  315. package/genes/license-advisor/.cloud-manifest.json +0 -6
  316. package/genes/license-advisor/.gene-manifest.json +0 -8
  317. package/genes/license-advisor/SKILL.md +0 -117
  318. package/genes/license-advisor/phenotype.json +0 -28
  319. package/genes/logic-architect/.cloud-manifest.json +0 -6
  320. package/genes/logic-architect/.gene-manifest.json +0 -8
  321. package/genes/logic-architect/SKILL.md +0 -451
  322. package/genes/logic-architect/phenotype.json +0 -28
  323. package/genes/markdown-formatter/.cloud-manifest.json +0 -6
  324. package/genes/markdown-formatter/README.md +0 -34
  325. package/genes/markdown-formatter/index.ts +0 -86
  326. package/genes/markdown-formatter/phenotype.json +0 -32
  327. package/genes/orch/.cloud-manifest.json +0 -6
  328. package/genes/orch/.gene-manifest.json +0 -8
  329. package/genes/orch/SKILL.md +0 -504
  330. package/genes/orch/phenotype.json +0 -28
  331. package/genes/particle-barneshut/.cloud-manifest.json +0 -6
  332. package/genes/particle-barneshut/.compile-result.json +0 -12
  333. package/genes/particle-barneshut/README.md +0 -55
  334. package/genes/particle-barneshut/gene.ir.wasm +0 -0
  335. package/genes/particle-barneshut/gene.wasm +0 -0
  336. package/genes/particle-barneshut/index.ts +0 -486
  337. package/genes/particle-barneshut/phenotype.json +0 -137
  338. package/genes/particle-brute/.cloud-manifest.json +0 -6
  339. package/genes/particle-brute/.compile-result.json +0 -12
  340. package/genes/particle-brute/README.md +0 -55
  341. package/genes/particle-brute/gene.ir.wasm +0 -0
  342. package/genes/particle-brute/gene.wasm +0 -0
  343. package/genes/particle-brute/index.ts +0 -277
  344. package/genes/particle-brute/phenotype.json +0 -137
  345. package/genes/particle-spatial/.cloud-manifest.json +0 -6
  346. package/genes/particle-spatial/.compile-result.json +0 -12
  347. package/genes/particle-spatial/README.md +0 -53
  348. package/genes/particle-spatial/gene.ir.wasm +0 -0
  349. package/genes/particle-spatial/gene.wasm +0 -0
  350. package/genes/particle-spatial/index.ts +0 -352
  351. package/genes/particle-spatial/phenotype.json +0 -137
  352. package/genes/performance-optimizer/.cloud-manifest.json +0 -6
  353. package/genes/performance-optimizer/.gene-manifest.json +0 -8
  354. package/genes/performance-optimizer/SKILL.md +0 -480
  355. package/genes/performance-optimizer/phenotype.json +0 -28
  356. package/genes/plagiarism-checker/.cloud-manifest.json +0 -6
  357. package/genes/plagiarism-checker/.gene-manifest.json +0 -8
  358. package/genes/plagiarism-checker/SKILL.md +0 -342
  359. package/genes/plagiarism-checker/phenotype.json +0 -28
  360. package/genes/product-manager/.cloud-manifest.json +0 -6
  361. package/genes/product-manager/.gene-manifest.json +0 -8
  362. package/genes/product-manager/SKILL.md +0 -249
  363. package/genes/product-manager/phenotype.json +0 -28
  364. package/genes/project-reviewer/.cloud-manifest.json +0 -6
  365. package/genes/project-reviewer/.gene-manifest.json +0 -8
  366. package/genes/project-reviewer/SKILL.md +0 -312
  367. package/genes/project-reviewer/phenotype.json +0 -28
  368. package/genes/prompt-engineer/.cloud-manifest.json +0 -6
  369. package/genes/prompt-engineer/.gene-manifest.json +0 -8
  370. package/genes/prompt-engineer/SKILL.md +0 -411
  371. package/genes/prompt-engineer/phenotype.json +0 -28
  372. package/genes/prompt-review-perf/.gene-manifest.json +0 -8
  373. package/genes/prompt-review-perf/phenotype.json +0 -61
  374. package/genes/prompt-review-perf/system-prompt.md +0 -22
  375. package/genes/prompt-review-readability/.gene-manifest.json +0 -8
  376. package/genes/prompt-review-readability/phenotype.json +0 -60
  377. package/genes/prompt-review-readability/system-prompt.md +0 -21
  378. package/genes/prompt-review-security/.gene-manifest.json +0 -8
  379. package/genes/prompt-review-security/phenotype.json +0 -60
  380. package/genes/prompt-review-security/system-prompt.md +0 -21
  381. package/genes/readability-analyzer/.cloud-manifest.json +0 -6
  382. package/genes/readability-analyzer/.gene-manifest.json +0 -8
  383. package/genes/readability-analyzer/SKILL.md +0 -357
  384. package/genes/readability-analyzer/index.ts +0 -123
  385. package/genes/readability-analyzer/package.json +0 -1
  386. package/genes/readability-analyzer/phenotype.json +0 -35
  387. package/genes/rotifer-protocol/SKILL.md +0 -121
  388. package/genes/rule-router-frequency/.gene-manifest.json +0 -8
  389. package/genes/rule-router-frequency/phenotype.json +0 -76
  390. package/genes/rule-router-frequency/system-prompt.md +0 -26
  391. package/genes/rule-router-relevance/.gene-manifest.json +0 -8
  392. package/genes/rule-router-relevance/phenotype.json +0 -76
  393. package/genes/rule-router-relevance/system-prompt.md +0 -29
  394. package/genes/security-auditor/.cloud-manifest.json +0 -6
  395. package/genes/security-auditor/.gene-manifest.json +0 -8
  396. package/genes/security-auditor/SKILL.md +0 -494
  397. package/genes/security-auditor/phenotype.json +0 -28
  398. package/genes/seo-optimizer/.cloud-manifest.json +0 -6
  399. package/genes/seo-optimizer/.gene-manifest.json +0 -8
  400. package/genes/seo-optimizer/SKILL.md +0 -327
  401. package/genes/seo-optimizer/index.ts +0 -206
  402. package/genes/seo-optimizer/package.json +0 -1
  403. package/genes/seo-optimizer/phenotype.json +0 -1
  404. package/genes/source-linker/.cloud-manifest.json +0 -6
  405. package/genes/source-linker/index.ts +0 -88
  406. package/genes/source-linker/phenotype.json +0 -45
  407. package/genes/style-optimizer/.cloud-manifest.json +0 -6
  408. package/genes/style-optimizer/.gene-manifest.json +0 -8
  409. package/genes/style-optimizer/SKILL.md +0 -285
  410. package/genes/style-optimizer/phenotype.json +0 -28
  411. package/genes/tech-lead/.cloud-manifest.json +0 -6
  412. package/genes/tech-lead/.gene-manifest.json +0 -8
  413. package/genes/tech-lead/SKILL.md +0 -451
  414. package/genes/tech-lead/phenotype.json +0 -28
  415. package/genes/test-wrap/.cloud-manifest.json +0 -6
  416. package/genes/test-wrap/.gene-manifest.json +0 -8
  417. package/genes/test-wrap/phenotype.json +0 -28
  418. package/genes/testing-strategist/.cloud-manifest.json +0 -6
  419. package/genes/testing-strategist/.gene-manifest.json +0 -8
  420. package/genes/testing-strategist/SKILL.md +0 -500
  421. package/genes/testing-strategist/phenotype.json +0 -28
  422. package/genes/text-summarizer/.cloud-manifest.json +0 -6
  423. package/genes/text-summarizer/README.md +0 -34
  424. package/genes/text-summarizer/index.ts +0 -122
  425. package/genes/text-summarizer/phenotype.json +0 -32
  426. package/genes/tone-analyzer/.cloud-manifest.json +0 -6
  427. package/genes/tone-analyzer/.gene-manifest.json +0 -8
  428. package/genes/tone-analyzer/SKILL.md +0 -410
  429. package/genes/tone-analyzer/phenotype.json +0 -28
  430. package/genes/translator/.cloud-manifest.json +0 -6
  431. package/genes/translator/.gene-manifest.json +0 -8
  432. package/genes/translator/SKILL.md +0 -355
  433. package/genes/translator/phenotype.json +0 -28
  434. package/genes/ui-components/.cloud-manifest.json +0 -6
  435. package/genes/ui-components/.gene-manifest.json +0 -8
  436. package/genes/ui-components/SKILL.md +0 -467
  437. package/genes/ui-components/phenotype.json +0 -28
  438. package/genes/uiux-designer/.cloud-manifest.json +0 -6
  439. package/genes/uiux-designer/.gene-manifest.json +0 -8
  440. package/genes/uiux-designer/SKILL.md +0 -353
  441. package/genes/uiux-designer/phenotype.json +0 -28
  442. package/genes/url-extractor/.cloud-manifest.json +0 -6
  443. package/genes/url-extractor/README.md +0 -37
  444. package/genes/url-extractor/index.ts +0 -86
  445. package/genes/url-extractor/phenotype.json +0 -48
  446. package/genes/ux-patterns/.cloud-manifest.json +0 -6
  447. package/genes/ux-patterns/.gene-manifest.json +0 -8
  448. package/genes/ux-patterns/SKILL.md +0 -872
  449. package/genes/ux-patterns/phenotype.json +0 -28
  450. package/genes/web3-components/.cloud-manifest.json +0 -6
  451. package/genes/web3-components/.gene-manifest.json +0 -8
  452. package/genes/web3-components/SKILL.md +0 -390
  453. package/genes/web3-components/phenotype.json +0 -28
@@ -12,9 +12,15 @@ export declare function isLoggedIn(): boolean;
12
12
  export declare function requireAuth(): Promise<CloudCredentials>;
13
13
  export declare function generateCodeVerifier(): string;
14
14
  export declare function generateCodeChallenge(verifier: string): string;
15
+ export declare const OAUTH_CALLBACK_HOST = "127.0.0.1";
16
+ export declare function buildOAuthCallbackUrl(port: number, path?: string): string;
15
17
  /**
16
- * Start a local HTTP server to receive the OAuth callback.
17
- * Handles both PKCE flow (?code=...) and implicit flow (#access_token=...).
18
+ * Start a local OAuth callback server on a random port (127.0.0.1:0).
19
+ * Returns the bound port immediately so the caller can construct the auth URL,
20
+ * plus a promise that resolves when the callback arrives.
18
21
  */
19
- export declare function waitForOAuthCallback(port?: number): Promise<string>;
22
+ export declare function startOAuthCallbackServer(): Promise<{
23
+ port: number;
24
+ waitForCallback: Promise<string>;
25
+ }>;
20
26
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/cloud/auth.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAe,MAAM,YAAY,CAAC;AAqChE,wBAAgB,eAAe,IAAI,gBAAgB,GAAG,IAAI,CAazD;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CA4C1D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAK7D;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAMvC;AAED,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAS7D;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,MAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA+DzE"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/cloud/auth.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAe,MAAM,YAAY,CAAC;AAoChE,wBAAgB,eAAe,IAAI,gBAAgB,GAAG,IAAI,CAazD;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CA4C1D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAM7D;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAMvC;AAED,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAS7D;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAE/C,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAoB,GAAG,MAAM,CAEtF;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAClC,CAAC,CAwED"}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OAUTH_CALLBACK_HOST = void 0;
3
4
  exports.loadCredentials = loadCredentials;
4
5
  exports.refreshTokenIfNeeded = refreshTokenIfNeeded;
5
6
  exports.saveCredentials = saveCredentials;
@@ -8,17 +9,17 @@ exports.isLoggedIn = isLoggedIn;
8
9
  exports.requireAuth = requireAuth;
9
10
  exports.generateCodeVerifier = generateCodeVerifier;
10
11
  exports.generateCodeChallenge = generateCodeChallenge;
11
- exports.waitForOAuthCallback = waitForOAuthCallback;
12
+ exports.buildOAuthCallbackUrl = buildOAuthCallbackUrl;
13
+ exports.startOAuthCallbackServer = startOAuthCallbackServer;
12
14
  const node_fs_1 = require("node:fs");
13
15
  const node_path_1 = require("node:path");
14
16
  const node_http_1 = require("node:http");
15
17
  const node_crypto_1 = require("node:crypto");
16
18
  const types_js_1 = require("./types.js");
19
+ const private_fs_js_1 = require("../utils/private-fs.js");
17
20
  const ROTIFER_HOME = (0, node_path_1.join)(process.env.HOME || process.env.USERPROFILE || "/tmp", ".rotifer");
18
21
  function ensureRotiferHome() {
19
- if (!(0, node_fs_1.existsSync)(ROTIFER_HOME)) {
20
- (0, node_fs_1.mkdirSync)(ROTIFER_HOME, { recursive: true });
21
- }
22
+ (0, private_fs_js_1.ensurePrivateDir)(ROTIFER_HOME);
22
23
  }
23
24
  function credentialsPath() {
24
25
  return (0, node_path_1.join)(ROTIFER_HOME, types_js_1.CREDENTIALS_FILE);
@@ -105,6 +106,7 @@ function saveCredentials(creds) {
105
106
  (0, node_fs_1.writeFileSync)(credentialsPath(), JSON.stringify(creds, null, 2) + "\n", {
106
107
  mode: 0o600,
107
108
  });
109
+ (0, private_fs_js_1.tightenPrivateFile)(credentialsPath());
108
110
  }
109
111
  function clearCredentials() {
110
112
  const path = credentialsPath();
@@ -130,14 +132,26 @@ function generateCodeVerifier() {
130
132
  function generateCodeChallenge(verifier) {
131
133
  return (0, node_crypto_1.createHash)("sha256").update(verifier).digest("base64url");
132
134
  }
135
+ exports.OAUTH_CALLBACK_HOST = "127.0.0.1";
136
+ function buildOAuthCallbackUrl(port, path = "/callback") {
137
+ return `http://${exports.OAUTH_CALLBACK_HOST}:${port}${path}`;
138
+ }
133
139
  /**
134
- * Start a local HTTP server to receive the OAuth callback.
135
- * Handles both PKCE flow (?code=...) and implicit flow (#access_token=...).
140
+ * Start a local OAuth callback server on a random port (127.0.0.1:0).
141
+ * Returns the bound port immediately so the caller can construct the auth URL,
142
+ * plus a promise that resolves when the callback arrives.
136
143
  */
137
- function waitForOAuthCallback(port = 9876) {
144
+ async function startOAuthCallbackServer() {
138
145
  return new Promise((resolve, reject) => {
146
+ let callbackResolve;
147
+ let callbackReject;
148
+ const waitForCallback = new Promise((res, rej) => {
149
+ callbackResolve = res;
150
+ callbackReject = rej;
151
+ });
139
152
  const server = (0, node_http_1.createServer)((req, res) => {
140
- const url = new URL(req.url || "/", `http://localhost:${port}`);
153
+ const boundPort = server.address()?.port || 0;
154
+ const url = new URL(req.url || "/", buildOAuthCallbackUrl(boundPort));
141
155
  if (url.pathname === "/callback/token") {
142
156
  const token = url.searchParams.get("access_token");
143
157
  const refresh = url.searchParams.get("refresh_token");
@@ -147,7 +161,7 @@ function waitForOAuthCallback(port = 9876) {
147
161
  "<p>You can close this window and return to the terminal.</p>" +
148
162
  "</body></html>");
149
163
  server.close();
150
- resolve(`implicit:${token}:${refresh || ""}`);
164
+ callbackResolve(`implicit:${token}:${refresh || ""}`);
151
165
  return;
152
166
  }
153
167
  }
@@ -158,7 +172,7 @@ function waitForOAuthCallback(port = 9876) {
158
172
  "<p>You can close this window and return to the terminal.</p>" +
159
173
  "</body></html>");
160
174
  server.close();
161
- resolve(code);
175
+ callbackResolve(code);
162
176
  }
163
177
  else {
164
178
  res.writeHead(200, { "Content-Type": "text/html" });
@@ -178,15 +192,16 @@ if (window.location.hash) {
178
192
  </script><noscript>Enable JavaScript to complete login.</noscript></body></html>`);
179
193
  }
180
194
  });
181
- server.listen(port, () => {
182
- // Server ready
195
+ server.listen(0, exports.OAUTH_CALLBACK_HOST, () => {
196
+ const addr = server.address();
197
+ resolve({ port: addr.port, waitForCallback });
183
198
  });
184
199
  server.on("error", (err) => {
185
200
  reject(new Error(`Failed to start callback server: ${err.message}`));
186
201
  });
187
202
  setTimeout(() => {
188
203
  server.close();
189
- reject(new Error("Login timed out after 120 seconds"));
204
+ callbackReject(new Error("Login timed out after 120 seconds"));
190
205
  }, 120_000);
191
206
  });
192
207
  }
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cloud/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cloud/auth.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ export declare function listGenes(options: {
9
9
  page?: number;
10
10
  perPage?: number;
11
11
  }): Promise<CloudGeneListResponse>;
12
- export declare function getGene(id: string): Promise<CloudGene>;
12
+ export declare function getGene(idOrName: string): Promise<CloudGene>;
13
13
  export declare function publishGene(opts: {
14
14
  name: string;
15
15
  domain: string;
@@ -18,6 +18,7 @@ export declare function publishGene(opts: {
18
18
  description: string;
19
19
  phenotype: Record<string, unknown>;
20
20
  wasmBytes: Buffer | null;
21
+ contentHash: string;
21
22
  readme?: string | null;
22
23
  changelog?: string | null;
23
24
  }): Promise<CloudGene & {
@@ -25,7 +26,7 @@ export declare function publishGene(opts: {
25
26
  }>;
26
27
  export declare function unpublishGene(id: string): Promise<void>;
27
28
  export declare function downloadGeneWasm(wasmUrl: string): Promise<Buffer>;
28
- export declare function trackDownload(geneId: string): Promise<void>;
29
+ export declare function trackDownload(geneId: string, source?: "cli" | "mcp" | "api" | "web"): Promise<void>;
29
30
  export declare function arenaSubmit(geneId: string, fitness: FitnessReport): Promise<CloudArenaEntry>;
30
31
  export declare function arenaRankings(options: {
31
32
  domain?: string;
@@ -72,7 +73,7 @@ export interface GeneStatsResponse {
72
73
  last_30d: number;
73
74
  last_90d: number;
74
75
  }
75
- export declare function getGeneStats(geneId: string): Promise<GeneStatsResponse>;
76
+ export declare function getGeneStats(idOrName: string): Promise<GeneStatsResponse>;
76
77
  export interface ComputeLogEntry {
77
78
  id: string;
78
79
  compute_type: string;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cloud/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cloud/client.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ exports.getContributionMetrics = getContributionMetrics;
18
18
  exports.getReputationLeaderboard = getReputationLeaderboard;
19
19
  const node_fs_1 = require("node:fs");
20
20
  const node_path_1 = require("node:path");
21
+ const node_crypto_1 = require("node:crypto");
21
22
  const types_js_1 = require("./types.js");
22
23
  const auth_js_1 = require("./auth.js");
23
24
  const ROTIFER_HOME = (0, node_path_1.join)(process.env.HOME || process.env.USERPROFILE || "/tmp", ".rotifer");
@@ -46,7 +47,7 @@ function storageUrl(path) {
46
47
  const base = config.endpoint.replace(/\/+$/, "");
47
48
  return `${base}/storage/v1${path}`;
48
49
  }
49
- function authHeaders(requireToken = false) {
50
+ function authHeaders(isTokenRequired = false) {
50
51
  const config = loadCloudConfig();
51
52
  const headers = {
52
53
  "Content-Type": "application/json",
@@ -56,7 +57,7 @@ function authHeaders(requireToken = false) {
56
57
  if (creds) {
57
58
  headers["Authorization"] = `Bearer ${creds.access_token}`;
58
59
  }
59
- else if (requireToken) {
60
+ else if (isTokenRequired) {
60
61
  throw new Error("Not logged in. Run 'rotifer login' first.");
61
62
  }
62
63
  return headers;
@@ -76,44 +77,27 @@ async function handleResponse(res) {
76
77
  }
77
78
  return res.json();
78
79
  }
79
- // --- Gene Registry ---
80
- function deduplicateLatestVersion(genes) {
81
- const map = new Map();
82
- for (const g of genes) {
83
- const key = `${g.owner}\0${g.name}`;
84
- const existing = map.get(key);
85
- if (!existing || new Date(g.created_at) > new Date(existing.created_at)) {
86
- map.set(key, g);
87
- }
80
+ function normalizeSearchSort(sort) {
81
+ const requested = (sort || "newest").toLowerCase();
82
+ switch (requested) {
83
+ case "newest":
84
+ case "relevance":
85
+ case "downloads":
86
+ case "reputation":
87
+ return requested;
88
+ case "popular":
89
+ return "downloads";
90
+ case "fitness":
91
+ throw new Error("Cloud search cannot sort by F(g). Use '--sort reputation' or 'rotifer arena list --cloud' for fitness-based rankings.");
92
+ default:
93
+ throw new Error(`Unsupported sort order '${sort}'. Use one of: newest, relevance, popular, downloads, reputation.`);
88
94
  }
89
- return [...map.values()].sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime());
90
95
  }
91
- async function listGenes(options) {
92
- const params = new URLSearchParams();
93
- params.set("published", "eq.true");
94
- params.set("select", "id,name,domain,version,fidelity,description,wasm_size,downloads,reputation_score,created_at,updated_at,profiles(username)");
95
- params.set("order", "created_at.desc");
96
- if (options.domain)
97
- params.set("domain", `eq.${options.domain}`);
98
- if (options.fidelity)
99
- params.set("fidelity", `eq.${options.fidelity}`);
100
- if (options.query)
101
- params.set("or", `(name.ilike.*${options.query}*,description.ilike.*${options.query}*)`);
102
- const limit = options.perPage || 20;
103
- const fetchLimit = limit * 3;
104
- params.set("limit", String(fetchLimit));
105
- params.set("offset", "0");
106
- const res = await fetch(apiUrl(`/genes?${params}`), {
107
- headers: {
108
- ...authHeaders(),
109
- Prefer: "count=exact",
110
- },
111
- });
112
- const data = await handleResponse(res);
113
- const allGenes = data.map((row) => ({
96
+ function mapSearchGene(row) {
97
+ return {
114
98
  id: row.id,
115
99
  name: row.name,
116
- owner: row.profiles?.username || "unknown",
100
+ owner: row.owner_username || "unknown",
117
101
  domain: row.domain,
118
102
  version: row.version,
119
103
  fidelity: row.fidelity,
@@ -121,28 +105,97 @@ async function listGenes(options) {
121
105
  phenotype: {},
122
106
  wasm_url: null,
123
107
  wasm_size: row.wasm_size || 0,
108
+ wasm_hash: row.wasm_hash ?? null,
109
+ content_hash: row.content_hash ?? null,
124
110
  downloads: row.downloads || 0,
125
111
  fitness: null,
126
112
  reputation_score: row.reputation_score ?? null,
127
113
  created_at: row.created_at,
128
114
  updated_at: row.updated_at,
129
- }));
130
- const deduped = deduplicateLatestVersion(allGenes);
131
- const page = options.page || 1;
115
+ };
116
+ }
117
+ function parseExactSearchTotal(rows) {
118
+ const raw = rows[0]?.total_count;
119
+ if (raw == null)
120
+ return null;
121
+ const parsed = typeof raw === "number" ? raw : parseInt(String(raw), 10);
122
+ return Number.isFinite(parsed) && parsed >= 0 ? parsed : null;
123
+ }
124
+ async function fetchSearchGenes(body) {
125
+ const res = await fetch(apiUrl("/rpc/search_genes"), {
126
+ method: "POST",
127
+ headers: authHeaders(),
128
+ body: JSON.stringify(body),
129
+ });
130
+ return handleResponse(res);
131
+ }
132
+ async function listGenes(options) {
133
+ const limit = Number.isFinite(options.perPage) && options.perPage > 0
134
+ ? Math.min(Math.floor(options.perPage), 100)
135
+ : 20;
136
+ const page = Number.isFinite(options.page) && options.page > 0
137
+ ? Math.floor(options.page)
138
+ : 1;
132
139
  const offset = (page - 1) * limit;
133
- const paged = deduped.slice(offset, offset + limit);
134
- return { genes: paged, total: deduped.length, page, per_page: limit };
140
+ const sort = normalizeSearchSort(options.sort);
141
+ const query = options.query?.trim() || null;
142
+ const requestBody = {
143
+ p_query: query,
144
+ p_domain: options.domain || null,
145
+ p_fidelity: options.fidelity || null,
146
+ p_sort: sort,
147
+ p_limit: limit,
148
+ p_offset: offset,
149
+ };
150
+ const rows = await fetchSearchGenes(requestBody);
151
+ const genes = rows.map(mapSearchGene);
152
+ let total = parseExactSearchTotal(rows);
153
+ let isTotalExact = total != null;
154
+ if (!isTotalExact) {
155
+ if (rows.length === 0 && page === 1) {
156
+ total = 0;
157
+ isTotalExact = true;
158
+ }
159
+ else if (rows.length < limit) {
160
+ total = offset + rows.length;
161
+ isTotalExact = true;
162
+ }
163
+ else {
164
+ const countRows = await fetchSearchGenes({ ...requestBody, p_limit: 1, p_offset: 0 });
165
+ total = parseExactSearchTotal(countRows);
166
+ isTotalExact = total != null;
167
+ }
168
+ }
169
+ return {
170
+ genes,
171
+ total: total ?? offset + rows.length,
172
+ page,
173
+ per_page: limit,
174
+ total_exact: isTotalExact,
175
+ };
135
176
  }
136
- async function getGene(id) {
177
+ async function getGene(idOrName) {
178
+ const isUuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(idOrName);
179
+ const isContentHash = /^[0-9a-f]{64}$/i.test(idOrName);
137
180
  const params = new URLSearchParams();
138
- params.set("id", `eq.${id}`);
181
+ if (isUuid) {
182
+ params.set("id", `eq.${idOrName}`);
183
+ }
184
+ else if (isContentHash) {
185
+ params.set("content_hash", `eq.${idOrName}`);
186
+ }
187
+ else {
188
+ params.set("name", `eq.${idOrName}`);
189
+ params.set("order", "created_at.desc");
190
+ params.set("limit", "1");
191
+ }
139
192
  params.set("select", "*, profiles(username)");
140
193
  const res = await fetch(apiUrl(`/genes?${params}`), {
141
194
  headers: authHeaders(),
142
195
  });
143
196
  const data = await handleResponse(res);
144
197
  if (data.length === 0)
145
- throw new Error(`Gene '${id}' not found`);
198
+ throw new Error(`Gene '${idOrName}' not found`);
146
199
  const row = data[0];
147
200
  const config = loadCloudConfig();
148
201
  const wasmUrl = row.wasm_path
@@ -159,6 +212,8 @@ async function getGene(id) {
159
212
  phenotype: row.phenotype || {},
160
213
  wasm_url: wasmUrl,
161
214
  wasm_size: row.wasm_size || 0,
215
+ wasm_hash: row.wasm_hash ?? null,
216
+ content_hash: row.content_hash ?? null,
162
217
  downloads: row.downloads || 0,
163
218
  fitness: null,
164
219
  reputation_score: row.reputation_score ?? null,
@@ -171,11 +226,20 @@ async function publishGene(opts) {
171
226
  const creds = (0, auth_js_1.loadCredentials)();
172
227
  if (!creds)
173
228
  throw new Error("Not logged in. Run 'rotifer login' first.");
229
+ const existCheck = await fetch(apiUrl(`/genes?owner_id=eq.${creds.user.id}&name=eq.${opts.name}&version=eq.${opts.version}&select=id,published`), { headers: authHeaders() });
230
+ const existData = existCheck.ok ? (await existCheck.json()) : [];
231
+ const isUpdate = existData.length > 0;
232
+ if (isUpdate && existData[0].published) {
233
+ throw new Error(`Version ${opts.version} of '${opts.name}' is already published and immutable. ` +
234
+ `Bump the version number in phenotype.json to publish a new version.`);
235
+ }
174
236
  let wasmPath = null;
175
237
  let wasmSize = 0;
238
+ let wasmHash = null;
176
239
  if (opts.wasmBytes) {
177
240
  wasmPath = `${creds.user.id}/${opts.name}/${opts.version}/gene.ir.wasm`;
178
241
  wasmSize = opts.wasmBytes.length;
242
+ wasmHash = (0, node_crypto_1.createHash)("sha256").update(opts.wasmBytes).digest("hex");
179
243
  const uploadRes = await fetch(storageUrl(`/object/gene-wasm/${wasmPath}`), {
180
244
  method: "POST",
181
245
  headers: {
@@ -191,9 +255,6 @@ async function publishGene(opts) {
191
255
  throw new Error(`Failed to upload WASM: ${err}`);
192
256
  }
193
257
  }
194
- const existCheck = await fetch(apiUrl(`/genes?owner_id=eq.${creds.user.id}&name=eq.${opts.name}&version=eq.${opts.version}&select=id`), { headers: authHeaders() });
195
- const existData = existCheck.ok ? (await existCheck.json()) : [];
196
- const isUpdate = existData.length > 0;
197
258
  let previousVersionId = null;
198
259
  if (!isUpdate) {
199
260
  const prevCheck = await fetch(apiUrl(`/genes?owner_id=eq.${creds.user.id}&name=eq.${opts.name}&select=id&order=created_at.desc&limit=1`), { headers: authHeaders() });
@@ -215,6 +276,8 @@ async function publishGene(opts) {
215
276
  phenotype: opts.phenotype,
216
277
  wasm_path: wasmPath,
217
278
  wasm_size: wasmSize,
279
+ wasm_hash: wasmHash,
280
+ content_hash: opts.contentHash,
218
281
  published: true,
219
282
  };
220
283
  if (opts.readme)
@@ -223,11 +286,11 @@ async function publishGene(opts) {
223
286
  body.changelog = changelog;
224
287
  if (previousVersionId)
225
288
  body.previous_version_id = previousVersionId;
226
- const res = await fetch(apiUrl("/genes?on_conflict=owner_id,name,version"), {
289
+ const res = await fetch(apiUrl("/genes"), {
227
290
  method: "POST",
228
291
  headers: {
229
292
  ...authHeaders(true),
230
- Prefer: "return=representation,resolution=merge-duplicates",
293
+ Prefer: "return=representation",
231
294
  },
232
295
  body: JSON.stringify(body),
233
296
  });
@@ -246,6 +309,8 @@ async function publishGene(opts) {
246
309
  ? `${loadCloudConfig().endpoint}/storage/v1/object/public/gene-wasm/${wasmPath}`
247
310
  : null,
248
311
  wasm_size: row.wasm_size,
312
+ wasm_hash: row.wasm_hash ?? null,
313
+ content_hash: row.content_hash ?? null,
249
314
  downloads: 0,
250
315
  fitness: null,
251
316
  reputation_score: row.reputation_score ?? null,
@@ -255,6 +320,10 @@ async function publishGene(opts) {
255
320
  };
256
321
  }
257
322
  async function unpublishGene(id) {
323
+ const geneRes = await fetch(apiUrl(`/genes?id=eq.${id}&select=wasm_path,owner_id`), {
324
+ headers: authHeaders(),
325
+ });
326
+ const geneData = geneRes.ok ? (await geneRes.json()) : [];
258
327
  const res = await fetch(apiUrl(`/genes?id=eq.${id}`), {
259
328
  method: "PATCH",
260
329
  headers: {
@@ -267,6 +336,16 @@ async function unpublishGene(id) {
267
336
  const err = await res.text();
268
337
  throw new Error(`Failed to unpublish gene: ${err}`);
269
338
  }
339
+ if (geneData.length > 0 && geneData[0].wasm_path) {
340
+ try {
341
+ await fetch(storageUrl(`/object/${geneData[0].wasm_path}`), {
342
+ method: "DELETE",
343
+ headers: authHeaders(true),
344
+ });
345
+ }
346
+ catch { /* WASM cleanup is best-effort */ }
347
+ }
348
+ // Reputation recompute after unpublish is handled by server-side triggers (service_role only)
270
349
  }
271
350
  async function downloadGeneWasm(wasmUrl) {
272
351
  const res = await fetch(wasmUrl);
@@ -275,12 +354,12 @@ async function downloadGeneWasm(wasmUrl) {
275
354
  const arrayBuf = await res.arrayBuffer();
276
355
  return Buffer.from(arrayBuf);
277
356
  }
278
- async function trackDownload(geneId) {
357
+ async function trackDownload(geneId, source = "cli") {
279
358
  try {
280
359
  const res = await fetch(apiUrl("/rpc/track_download"), {
281
360
  method: "POST",
282
361
  headers: authHeaders(),
283
- body: JSON.stringify({ p_gene_id: geneId }),
362
+ body: JSON.stringify({ p_gene_id: geneId, p_source: source }),
284
363
  });
285
364
  if (!res.ok) {
286
365
  const body = await res.text().catch(() => "");
@@ -302,7 +381,6 @@ async function arenaSubmit(geneId, fitness) {
302
381
  success_rate: fitness.success_rate,
303
382
  latency_score: fitness.latency_score,
304
383
  resource_efficiency: fitness.resource_efficiency,
305
- total_calls: 1,
306
384
  };
307
385
  const res = await fetch(apiUrl("/arena_entries"), {
308
386
  method: "POST",
@@ -378,16 +456,9 @@ async function getGeneReputation(geneId) {
378
456
  });
379
457
  const data = await handleResponse(res);
380
458
  if (data.length === 0) {
381
- // No reputation computed yet — compute on the fly via RPC
382
- const rpcRes = await fetch(apiUrl("/rpc/compute_gene_reputation"), {
383
- method: "POST",
384
- headers: authHeaders(),
385
- body: JSON.stringify({ p_gene_id: geneId }),
386
- });
387
- const score = await handleResponse(rpcRes);
388
459
  return {
389
460
  gene_name: geneId,
390
- score,
461
+ score: 0,
391
462
  arena_score: 0,
392
463
  usage_score: 0,
393
464
  stability_score: 0,
@@ -414,14 +485,8 @@ async function getDeveloperReputation(userId) {
414
485
  });
415
486
  const data = await handleResponse(res);
416
487
  if (data.length === 0) {
417
- const rpcRes = await fetch(apiUrl("/rpc/compute_developer_reputation"), {
418
- method: "POST",
419
- headers: authHeaders(),
420
- body: JSON.stringify({ p_user_id: userId }),
421
- });
422
- const score = await handleResponse(rpcRes);
423
488
  return {
424
- score,
489
+ score: 0,
425
490
  genes_published: 0,
426
491
  total_downloads: 0,
427
492
  arena_wins: 0,
@@ -457,7 +522,13 @@ async function listGeneVersions(owner, name) {
457
522
  created_at: row.created_at,
458
523
  }));
459
524
  }
460
- async function getGeneStats(geneId) {
525
+ async function getGeneStats(idOrName) {
526
+ const isUuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(idOrName);
527
+ let geneId = idOrName;
528
+ if (!isUuid) {
529
+ const gene = await getGene(idOrName);
530
+ geneId = gene.id;
531
+ }
461
532
  const res = await fetch(apiUrl("/rpc/get_gene_stats"), {
462
533
  method: "POST",
463
534
  headers: authHeaders(),