@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.
- package/CHANGELOG.md +46 -11
- package/README.md +92 -58
- package/README.zh.md +90 -49
- package/dist/cloud/auth.d.ts +9 -3
- package/dist/cloud/auth.d.ts.map +1 -1
- package/dist/cloud/auth.js +28 -13
- package/dist/cloud/auth.js.map +1 -1
- package/dist/cloud/client.d.ts +4 -3
- package/dist/cloud/client.d.ts.map +1 -1
- package/dist/cloud/client.js +139 -68
- package/dist/cloud/client.js.map +1 -1
- package/dist/cloud/types.d.ts +3 -0
- package/dist/cloud/types.d.ts.map +1 -1
- package/dist/cloud/types.js.map +1 -1
- package/dist/commands/agent-create.d.ts +20 -0
- package/dist/commands/agent-create.d.ts.map +1 -1
- package/dist/commands/agent-create.js +91 -80
- package/dist/commands/agent-create.js.map +1 -1
- package/dist/commands/agent-list.d.ts.map +1 -1
- package/dist/commands/agent-list.js +27 -24
- package/dist/commands/agent-list.js.map +1 -1
- package/dist/commands/agent-run.d.ts +24 -0
- package/dist/commands/agent-run.d.ts.map +1 -1
- package/dist/commands/agent-run.js +166 -44
- package/dist/commands/agent-run.js.map +1 -1
- package/dist/commands/api-key.d.ts +3 -0
- package/dist/commands/api-key.d.ts.map +1 -0
- package/dist/commands/api-key.js +235 -0
- package/dist/commands/api-key.js.map +1 -0
- package/dist/commands/arena-list.d.ts.map +1 -1
- package/dist/commands/arena-list.js +113 -97
- package/dist/commands/arena-list.js.map +1 -1
- package/dist/commands/arena-submit.d.ts.map +1 -1
- package/dist/commands/arena-submit.js +114 -37
- package/dist/commands/arena-submit.js.map +1 -1
- package/dist/commands/arena-watch.d.ts.map +1 -1
- package/dist/commands/arena-watch.js +59 -87
- package/dist/commands/arena-watch.js.map +1 -1
- package/dist/commands/compare.d.ts.map +1 -1
- package/dist/commands/compare.js +40 -50
- package/dist/commands/compare.js.map +1 -1
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +80 -58
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/hello.d.ts +3 -0
- package/dist/commands/hello.d.ts.map +1 -0
- package/dist/commands/hello.js +575 -0
- package/dist/commands/hello.js.map +1 -0
- package/dist/commands/info.d.ts.map +1 -1
- package/dist/commands/info.js +130 -40
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +39 -60
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +35 -9
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +111 -58
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +23 -10
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/network.d.ts.map +1 -1
- package/dist/commands/network.js +48 -67
- package/dist/commands/network.js.map +1 -1
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js +152 -53
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/reputation.js +84 -85
- package/dist/commands/reputation.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +32 -12
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +8 -9
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +80 -54
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/self-update.d.ts +7 -0
- package/dist/commands/self-update.d.ts.map +1 -0
- package/dist/commands/self-update.js +187 -0
- package/dist/commands/self-update.js.map +1 -0
- package/dist/commands/stats.d.ts.map +1 -1
- package/dist/commands/stats.js +20 -26
- package/dist/commands/stats.js.map +1 -1
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +104 -79
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/user-config.d.ts +3 -0
- package/dist/commands/user-config.d.ts.map +1 -0
- package/dist/commands/user-config.js +82 -0
- package/dist/commands/user-config.js.map +1 -0
- package/dist/commands/versions.d.ts.map +1 -1
- package/dist/commands/versions.js +46 -33
- package/dist/commands/versions.js.map +1 -1
- package/dist/commands/vg.d.ts.map +1 -1
- package/dist/commands/vg.js +65 -63
- package/dist/commands/vg.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +33 -23
- package/dist/commands/whoami.js.map +1 -1
- package/dist/commands/wrap.d.ts.map +1 -1
- package/dist/commands/wrap.js +57 -40
- package/dist/commands/wrap.js.map +1 -1
- package/dist/index.js +61 -1
- package/dist/index.js.map +1 -1
- package/dist/publish/pre-publish-check.d.ts +15 -0
- package/dist/publish/pre-publish-check.d.ts.map +1 -0
- package/dist/publish/pre-publish-check.js +228 -0
- package/dist/publish/pre-publish-check.js.map +1 -0
- package/dist/runtime/domain-failover.d.ts +1 -1
- package/dist/runtime/domain-failover.js +1 -1
- package/dist/runtime/network-gateway.d.ts +1 -1
- package/dist/runtime/network-gateway.d.ts.map +1 -1
- package/dist/runtime/network-gateway.js +10 -10
- package/dist/runtime/network-gateway.js.map +1 -1
- package/dist/scanner/scanner.js +3 -3
- package/dist/scanner/scanner.js.map +1 -1
- package/dist/utils/binding.d.ts +1 -0
- package/dist/utils/binding.d.ts.map +1 -1
- package/dist/utils/binding.js +37 -15
- package/dist/utils/binding.js.map +1 -1
- package/dist/utils/content-hash.d.ts +3 -0
- package/dist/utils/content-hash.d.ts.map +1 -0
- package/dist/utils/content-hash.js +25 -0
- package/dist/utils/content-hash.js.map +1 -0
- package/dist/utils/detect-source-language.d.ts +20 -0
- package/dist/utils/detect-source-language.d.ts.map +1 -0
- package/dist/utils/detect-source-language.js +83 -0
- package/dist/utils/detect-source-language.js.map +1 -0
- package/dist/utils/display.d.ts +44 -1
- package/dist/utils/display.d.ts.map +1 -1
- package/dist/utils/display.js +443 -14
- package/dist/utils/display.js.map +1 -1
- package/dist/utils/domain-suggest.d.ts.map +1 -1
- package/dist/utils/domain-suggest.js +3 -3
- package/dist/utils/domain-suggest.js.map +1 -1
- package/dist/utils/javy-compiler.d.ts.map +1 -1
- package/dist/utils/javy-compiler.js +10 -3
- package/dist/utils/javy-compiler.js.map +1 -1
- package/dist/utils/open-browser.d.ts +7 -3
- package/dist/utils/open-browser.d.ts.map +1 -1
- package/dist/utils/open-browser.js +15 -4
- package/dist/utils/open-browser.js.map +1 -1
- package/dist/utils/palette.d.ts +49 -0
- package/dist/utils/palette.d.ts.map +1 -0
- package/dist/utils/palette.js +80 -0
- package/dist/utils/palette.js.map +1 -0
- package/dist/utils/private-fs.d.ts +3 -0
- package/dist/utils/private-fs.d.ts.map +1 -0
- package/dist/utils/private-fs.js +25 -0
- package/dist/utils/private-fs.js.map +1 -0
- package/dist/utils/project-root.d.ts +2 -0
- package/dist/utils/project-root.d.ts.map +1 -0
- package/dist/utils/project-root.js +49 -0
- package/dist/utils/project-root.js.map +1 -0
- package/dist/utils/run-logger.d.ts +24 -0
- package/dist/utils/run-logger.d.ts.map +1 -0
- package/dist/utils/run-logger.js +70 -0
- package/dist/utils/run-logger.js.map +1 -0
- package/dist/utils/sandbox-defaults.d.ts +9 -0
- package/dist/utils/sandbox-defaults.d.ts.map +1 -0
- package/dist/utils/sandbox-defaults.js +12 -0
- package/dist/utils/sandbox-defaults.js.map +1 -0
- package/dist/utils/update-check.d.ts +20 -0
- package/dist/utils/update-check.d.ts.map +1 -0
- package/dist/utils/update-check.js +155 -0
- package/dist/utils/update-check.js.map +1 -0
- package/dist/utils/user-config.d.ts +10 -0
- package/dist/utils/user-config.d.ts.map +1 -0
- package/dist/utils/user-config.js +54 -0
- package/dist/utils/user-config.js.map +1 -0
- package/dist/utils/validate-gene-name.d.ts +7 -0
- package/dist/utils/validate-gene-name.d.ts.map +1 -0
- package/dist/utils/validate-gene-name.js +28 -0
- package/dist/utils/validate-gene-name.js.map +1 -0
- package/genes/genesis-code-format/phenotype.json +4 -3
- package/genes/genesis-file-read/phenotype.json +4 -3
- package/genes/genesis-l0-constraint/phenotype.json +4 -3
- package/genes/genesis-web-search/phenotype.json +5 -4
- package/genes/genesis-web-search-lite/phenotype.json +4 -3
- package/package.json +35 -8
- package/scripts/postinstall.js +38 -0
- package/dist/errors/formatter.d.ts +0 -25
- package/dist/errors/formatter.d.ts.map +0 -1
- package/dist/errors/formatter.js +0 -43
- package/dist/errors/formatter.js.map +0 -1
- package/genes/academic-writer/.cloud-manifest.json +0 -6
- package/genes/academic-writer/.gene-manifest.json +0 -8
- package/genes/academic-writer/SKILL.md +0 -274
- package/genes/academic-writer/phenotype.json +0 -28
- package/genes/ai-components/.cloud-manifest.json +0 -6
- package/genes/ai-components/.gene-manifest.json +0 -8
- package/genes/ai-components/SKILL.md +0 -381
- package/genes/ai-components/phenotype.json +0 -28
- package/genes/algorithmic-art/.cloud-manifest.json +0 -6
- package/genes/algorithmic-art/.gene-manifest.json +0 -8
- package/genes/algorithmic-art/SKILL.md +0 -405
- package/genes/algorithmic-art/phenotype.json +0 -28
- package/genes/answer-synthesizer/.cloud-manifest.json +0 -6
- package/genes/answer-synthesizer/index.ts +0 -194
- package/genes/answer-synthesizer/phenotype.json +0 -61
- package/genes/api-designer/.cloud-manifest.json +0 -6
- package/genes/api-designer/.gene-manifest.json +0 -8
- package/genes/api-designer/SKILL.md +0 -456
- package/genes/api-designer/phenotype.json +0 -28
- package/genes/auto-coder/.cloud-manifest.json +0 -6
- package/genes/auto-coder/.gene-manifest.json +0 -8
- package/genes/auto-coder/SKILL.md +0 -400
- package/genes/auto-coder/phenotype.json +0 -28
- package/genes/auto-writer/.cloud-manifest.json +0 -6
- package/genes/auto-writer/.gene-manifest.json +0 -8
- package/genes/auto-writer/SKILL.md +0 -361
- package/genes/auto-writer/phenotype.json +0 -28
- package/genes/brand-personality/.cloud-manifest.json +0 -6
- package/genes/brand-personality/.gene-manifest.json +0 -8
- package/genes/brand-personality/SKILL.md +0 -549
- package/genes/brand-personality/phenotype.json +0 -28
- package/genes/business-writer/.cloud-manifest.json +0 -6
- package/genes/business-writer/.gene-manifest.json +0 -8
- package/genes/business-writer/SKILL.md +0 -448
- package/genes/business-writer/phenotype.json +0 -28
- package/genes/citation-manager/.cloud-manifest.json +0 -6
- package/genes/citation-manager/.gene-manifest.json +0 -8
- package/genes/citation-manager/SKILL.md +0 -279
- package/genes/citation-manager/index.ts +0 -162
- package/genes/citation-manager/package.json +0 -1
- package/genes/citation-manager/phenotype.json +0 -50
- package/genes/code-complexity/.cloud-manifest.json +0 -6
- package/genes/code-complexity/README.md +0 -35
- package/genes/code-complexity/index.ts +0 -101
- package/genes/code-complexity/phenotype.json +0 -34
- package/genes/copywriter/.cloud-manifest.json +0 -6
- package/genes/copywriter/.gene-manifest.json +0 -8
- package/genes/copywriter/SKILL.md +0 -329
- package/genes/copywriter/phenotype.json +0 -28
- package/genes/creative-writer/.cloud-manifest.json +0 -6
- package/genes/creative-writer/.gene-manifest.json +0 -8
- package/genes/creative-writer/SKILL.md +0 -356
- package/genes/creative-writer/phenotype.json +0 -28
- package/genes/data-modeler/.cloud-manifest.json +0 -6
- package/genes/data-modeler/.gene-manifest.json +0 -8
- package/genes/data-modeler/SKILL.md +0 -486
- package/genes/data-modeler/phenotype.json +0 -28
- package/genes/debugger/.cloud-manifest.json +0 -6
- package/genes/debugger/.gene-manifest.json +0 -8
- package/genes/debugger/SKILL.md +0 -416
- package/genes/debugger/phenotype.json +0 -28
- package/genes/design-tokens/.cloud-manifest.json +0 -6
- package/genes/design-tokens/.gene-manifest.json +0 -8
- package/genes/design-tokens/SKILL.md +0 -222
- package/genes/design-tokens/index.ts +0 -128
- package/genes/design-tokens/package.json +0 -1
- package/genes/design-tokens/phenotype.json +0 -1
- package/genes/devops-automator/.cloud-manifest.json +0 -6
- package/genes/devops-automator/.gene-manifest.json +0 -8
- package/genes/devops-automator/SKILL.md +0 -490
- package/genes/devops-automator/phenotype.json +0 -28
- package/genes/doc-coauthoring/.cloud-manifest.json +0 -6
- package/genes/doc-coauthoring/.gene-manifest.json +0 -8
- package/genes/doc-coauthoring/SKILL.md +0 -375
- package/genes/doc-coauthoring/phenotype.json +0 -28
- package/genes/doc-retrieval/.cloud-manifest.json +0 -6
- package/genes/doc-retrieval/index.ts +0 -134
- package/genes/doc-retrieval/phenotype.json +0 -54
- package/genes/docs-writer/.cloud-manifest.json +0 -6
- package/genes/docs-writer/.gene-manifest.json +0 -8
- package/genes/docs-writer/SKILL.md +0 -492
- package/genes/docs-writer/phenotype.json +0 -28
- package/genes/evolve-life/.cloud-manifest.json +0 -6
- package/genes/evolve-life/.compile-result.json +0 -12
- package/genes/evolve-life/README.md +0 -52
- package/genes/evolve-life/gene.ir.wasm +0 -0
- package/genes/evolve-life/gene.wasm +0 -0
- package/genes/evolve-life/index.ts +0 -255
- package/genes/evolve-life/phenotype.json +0 -129
- package/genes/evolve-life-bitwise/.cloud-manifest.json +0 -6
- package/genes/evolve-life-bitwise/.compile-result.json +0 -12
- package/genes/evolve-life-bitwise/gene.ir.wasm +0 -0
- package/genes/evolve-life-bitwise/gene.wasm +0 -0
- package/genes/evolve-life-bitwise/index.ts +0 -273
- package/genes/evolve-life-bitwise/phenotype.json +0 -129
- package/genes/evolve-life-sparse/.cloud-manifest.json +0 -6
- package/genes/evolve-life-sparse/.compile-result.json +0 -12
- package/genes/evolve-life-sparse/gene.ir.wasm +0 -0
- package/genes/evolve-life-sparse/gene.wasm +0 -0
- package/genes/evolve-life-sparse/index.ts +0 -236
- package/genes/evolve-life-sparse/phenotype.json +0 -129
- package/genes/fact-checker/.cloud-manifest.json +0 -6
- package/genes/fact-checker/.gene-manifest.json +0 -8
- package/genes/fact-checker/SKILL.md +0 -373
- package/genes/fact-checker/phenotype.json +0 -28
- package/genes/git-workflow/.cloud-manifest.json +0 -6
- package/genes/git-workflow/.gene-manifest.json +0 -8
- package/genes/git-workflow/SKILL.md +0 -407
- package/genes/git-workflow/phenotype.json +0 -28
- package/genes/grammar-checker/.cloud-manifest.json +0 -6
- package/genes/grammar-checker/.gene-manifest.json +0 -8
- package/genes/grammar-checker/SKILL.md +0 -194
- package/genes/grammar-checker/index.ts +0 -168
- package/genes/grammar-checker/package.json +0 -1
- package/genes/grammar-checker/phenotype.json +0 -52
- package/genes/guard-balanced/.gene-manifest.json +0 -8
- package/genes/guard-balanced/phenotype.json +0 -105
- package/genes/guard-balanced/system-prompt.md +0 -23
- package/genes/guard-strict/.gene-manifest.json +0 -8
- package/genes/guard-strict/phenotype.json +0 -107
- package/genes/guard-strict/system-prompt.md +0 -18
- package/genes/json-validator/.cloud-manifest.json +0 -6
- package/genes/json-validator/README.md +0 -42
- package/genes/json-validator/index.ts +0 -112
- package/genes/json-validator/phenotype.json +0 -42
- package/genes/license-advisor/.cloud-manifest.json +0 -6
- package/genes/license-advisor/.gene-manifest.json +0 -8
- package/genes/license-advisor/SKILL.md +0 -117
- package/genes/license-advisor/phenotype.json +0 -28
- package/genes/logic-architect/.cloud-manifest.json +0 -6
- package/genes/logic-architect/.gene-manifest.json +0 -8
- package/genes/logic-architect/SKILL.md +0 -451
- package/genes/logic-architect/phenotype.json +0 -28
- package/genes/markdown-formatter/.cloud-manifest.json +0 -6
- package/genes/markdown-formatter/README.md +0 -34
- package/genes/markdown-formatter/index.ts +0 -86
- package/genes/markdown-formatter/phenotype.json +0 -32
- package/genes/orch/.cloud-manifest.json +0 -6
- package/genes/orch/.gene-manifest.json +0 -8
- package/genes/orch/SKILL.md +0 -504
- package/genes/orch/phenotype.json +0 -28
- package/genes/particle-barneshut/.cloud-manifest.json +0 -6
- package/genes/particle-barneshut/.compile-result.json +0 -12
- package/genes/particle-barneshut/README.md +0 -55
- package/genes/particle-barneshut/gene.ir.wasm +0 -0
- package/genes/particle-barneshut/gene.wasm +0 -0
- package/genes/particle-barneshut/index.ts +0 -486
- package/genes/particle-barneshut/phenotype.json +0 -137
- package/genes/particle-brute/.cloud-manifest.json +0 -6
- package/genes/particle-brute/.compile-result.json +0 -12
- package/genes/particle-brute/README.md +0 -55
- package/genes/particle-brute/gene.ir.wasm +0 -0
- package/genes/particle-brute/gene.wasm +0 -0
- package/genes/particle-brute/index.ts +0 -277
- package/genes/particle-brute/phenotype.json +0 -137
- package/genes/particle-spatial/.cloud-manifest.json +0 -6
- package/genes/particle-spatial/.compile-result.json +0 -12
- package/genes/particle-spatial/README.md +0 -53
- package/genes/particle-spatial/gene.ir.wasm +0 -0
- package/genes/particle-spatial/gene.wasm +0 -0
- package/genes/particle-spatial/index.ts +0 -352
- package/genes/particle-spatial/phenotype.json +0 -137
- package/genes/performance-optimizer/.cloud-manifest.json +0 -6
- package/genes/performance-optimizer/.gene-manifest.json +0 -8
- package/genes/performance-optimizer/SKILL.md +0 -480
- package/genes/performance-optimizer/phenotype.json +0 -28
- package/genes/plagiarism-checker/.cloud-manifest.json +0 -6
- package/genes/plagiarism-checker/.gene-manifest.json +0 -8
- package/genes/plagiarism-checker/SKILL.md +0 -342
- package/genes/plagiarism-checker/phenotype.json +0 -28
- package/genes/product-manager/.cloud-manifest.json +0 -6
- package/genes/product-manager/.gene-manifest.json +0 -8
- package/genes/product-manager/SKILL.md +0 -249
- package/genes/product-manager/phenotype.json +0 -28
- package/genes/project-reviewer/.cloud-manifest.json +0 -6
- package/genes/project-reviewer/.gene-manifest.json +0 -8
- package/genes/project-reviewer/SKILL.md +0 -312
- package/genes/project-reviewer/phenotype.json +0 -28
- package/genes/prompt-engineer/.cloud-manifest.json +0 -6
- package/genes/prompt-engineer/.gene-manifest.json +0 -8
- package/genes/prompt-engineer/SKILL.md +0 -411
- package/genes/prompt-engineer/phenotype.json +0 -28
- package/genes/prompt-review-perf/.gene-manifest.json +0 -8
- package/genes/prompt-review-perf/phenotype.json +0 -61
- package/genes/prompt-review-perf/system-prompt.md +0 -22
- package/genes/prompt-review-readability/.gene-manifest.json +0 -8
- package/genes/prompt-review-readability/phenotype.json +0 -60
- package/genes/prompt-review-readability/system-prompt.md +0 -21
- package/genes/prompt-review-security/.gene-manifest.json +0 -8
- package/genes/prompt-review-security/phenotype.json +0 -60
- package/genes/prompt-review-security/system-prompt.md +0 -21
- package/genes/readability-analyzer/.cloud-manifest.json +0 -6
- package/genes/readability-analyzer/.gene-manifest.json +0 -8
- package/genes/readability-analyzer/SKILL.md +0 -357
- package/genes/readability-analyzer/index.ts +0 -123
- package/genes/readability-analyzer/package.json +0 -1
- package/genes/readability-analyzer/phenotype.json +0 -35
- package/genes/rotifer-protocol/SKILL.md +0 -121
- package/genes/rule-router-frequency/.gene-manifest.json +0 -8
- package/genes/rule-router-frequency/phenotype.json +0 -76
- package/genes/rule-router-frequency/system-prompt.md +0 -26
- package/genes/rule-router-relevance/.gene-manifest.json +0 -8
- package/genes/rule-router-relevance/phenotype.json +0 -76
- package/genes/rule-router-relevance/system-prompt.md +0 -29
- package/genes/security-auditor/.cloud-manifest.json +0 -6
- package/genes/security-auditor/.gene-manifest.json +0 -8
- package/genes/security-auditor/SKILL.md +0 -494
- package/genes/security-auditor/phenotype.json +0 -28
- package/genes/seo-optimizer/.cloud-manifest.json +0 -6
- package/genes/seo-optimizer/.gene-manifest.json +0 -8
- package/genes/seo-optimizer/SKILL.md +0 -327
- package/genes/seo-optimizer/index.ts +0 -206
- package/genes/seo-optimizer/package.json +0 -1
- package/genes/seo-optimizer/phenotype.json +0 -1
- package/genes/source-linker/.cloud-manifest.json +0 -6
- package/genes/source-linker/index.ts +0 -88
- package/genes/source-linker/phenotype.json +0 -45
- package/genes/style-optimizer/.cloud-manifest.json +0 -6
- package/genes/style-optimizer/.gene-manifest.json +0 -8
- package/genes/style-optimizer/SKILL.md +0 -285
- package/genes/style-optimizer/phenotype.json +0 -28
- package/genes/tech-lead/.cloud-manifest.json +0 -6
- package/genes/tech-lead/.gene-manifest.json +0 -8
- package/genes/tech-lead/SKILL.md +0 -451
- package/genes/tech-lead/phenotype.json +0 -28
- package/genes/test-wrap/.cloud-manifest.json +0 -6
- package/genes/test-wrap/.gene-manifest.json +0 -8
- package/genes/test-wrap/phenotype.json +0 -28
- package/genes/testing-strategist/.cloud-manifest.json +0 -6
- package/genes/testing-strategist/.gene-manifest.json +0 -8
- package/genes/testing-strategist/SKILL.md +0 -500
- package/genes/testing-strategist/phenotype.json +0 -28
- package/genes/text-summarizer/.cloud-manifest.json +0 -6
- package/genes/text-summarizer/README.md +0 -34
- package/genes/text-summarizer/index.ts +0 -122
- package/genes/text-summarizer/phenotype.json +0 -32
- package/genes/tone-analyzer/.cloud-manifest.json +0 -6
- package/genes/tone-analyzer/.gene-manifest.json +0 -8
- package/genes/tone-analyzer/SKILL.md +0 -410
- package/genes/tone-analyzer/phenotype.json +0 -28
- package/genes/translator/.cloud-manifest.json +0 -6
- package/genes/translator/.gene-manifest.json +0 -8
- package/genes/translator/SKILL.md +0 -355
- package/genes/translator/phenotype.json +0 -28
- package/genes/ui-components/.cloud-manifest.json +0 -6
- package/genes/ui-components/.gene-manifest.json +0 -8
- package/genes/ui-components/SKILL.md +0 -467
- package/genes/ui-components/phenotype.json +0 -28
- package/genes/uiux-designer/.cloud-manifest.json +0 -6
- package/genes/uiux-designer/.gene-manifest.json +0 -8
- package/genes/uiux-designer/SKILL.md +0 -353
- package/genes/uiux-designer/phenotype.json +0 -28
- package/genes/url-extractor/.cloud-manifest.json +0 -6
- package/genes/url-extractor/README.md +0 -37
- package/genes/url-extractor/index.ts +0 -86
- package/genes/url-extractor/phenotype.json +0 -48
- package/genes/ux-patterns/.cloud-manifest.json +0 -6
- package/genes/ux-patterns/.gene-manifest.json +0 -8
- package/genes/ux-patterns/SKILL.md +0 -872
- package/genes/ux-patterns/phenotype.json +0 -28
- package/genes/web3-components/.cloud-manifest.json +0 -6
- package/genes/web3-components/.gene-manifest.json +0 -8
- package/genes/web3-components/SKILL.md +0 -390
- package/genes/web3-components/phenotype.json +0 -28
package/dist/index.js
CHANGED
|
@@ -30,12 +30,38 @@ const stats_js_1 = require("./commands/stats.js");
|
|
|
30
30
|
const compare_js_1 = require("./commands/compare.js");
|
|
31
31
|
const network_js_1 = require("./commands/network.js");
|
|
32
32
|
const vg_js_1 = require("./commands/vg.js");
|
|
33
|
+
const hello_js_1 = require("./commands/hello.js");
|
|
34
|
+
const self_update_js_1 = require("./commands/self-update.js");
|
|
35
|
+
const user_config_js_1 = require("./commands/user-config.js");
|
|
36
|
+
const api_key_js_1 = require("./commands/api-key.js");
|
|
37
|
+
const update_check_js_1 = require("./utils/update-check.js");
|
|
38
|
+
const user_config_js_2 = require("./utils/user-config.js");
|
|
39
|
+
const display_js_1 = require("./utils/display.js");
|
|
33
40
|
const pkg = JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(__dirname, "..", "package.json"), "utf-8"));
|
|
34
41
|
const program = new commander_1.Command();
|
|
35
42
|
program
|
|
36
43
|
.name("rotifer")
|
|
37
44
|
.description("Rotifer Playground — development environment for the Rotifer Protocol")
|
|
38
|
-
.version(pkg.version)
|
|
45
|
+
.version(pkg.version)
|
|
46
|
+
.option("--json", "Output machine-readable JSON to stdout")
|
|
47
|
+
.option("--plain", "Output plain text without color/styling")
|
|
48
|
+
.addHelpText("before", () => (0, display_js_1.banner)(pkg.version))
|
|
49
|
+
.configureHelp({
|
|
50
|
+
formatHelp(cmd, helper) {
|
|
51
|
+
if (cmd !== program)
|
|
52
|
+
return (0, display_js_1.formatSubcommandHelp)(cmd, helper);
|
|
53
|
+
return (0, display_js_1.formatGroupedHelp)(cmd, helper);
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
program.hook("preAction", () => {
|
|
57
|
+
const opts = program.opts();
|
|
58
|
+
if (opts.json) {
|
|
59
|
+
(0, display_js_1.setOutputMode)("json");
|
|
60
|
+
}
|
|
61
|
+
else if (opts.plain) {
|
|
62
|
+
(0, display_js_1.setOutputMode)("plain");
|
|
63
|
+
}
|
|
64
|
+
});
|
|
39
65
|
program.addCommand(init_js_1.initCommand);
|
|
40
66
|
program.addCommand(scan_js_1.scanCommand);
|
|
41
67
|
program.addCommand(wrap_js_1.wrapCommand);
|
|
@@ -62,7 +88,41 @@ const agent = program.command("agent").description("Agent lifecycle commands");
|
|
|
62
88
|
agent.addCommand(agent_create_js_1.agentCreateCommand);
|
|
63
89
|
agent.addCommand(agent_list_js_1.agentListCommand);
|
|
64
90
|
agent.addCommand(agent_run_js_1.agentRunCommand);
|
|
91
|
+
program.addCommand(hello_js_1.helloCommand);
|
|
65
92
|
program.addCommand(network_js_1.networkCommand);
|
|
66
93
|
program.addCommand(vg_js_1.vgCommand);
|
|
94
|
+
program.addCommand(self_update_js_1.selfUpdateCommand);
|
|
95
|
+
program.addCommand(user_config_js_1.userConfigCommand);
|
|
96
|
+
program.addCommand(api_key_js_1.apiKeyCommand);
|
|
97
|
+
// Propagate themed help formatting to all subcommands.
|
|
98
|
+
// Commander.js v14 strips ANSI if getOutHasColors() is falsy,
|
|
99
|
+
// but we manage colors via chalk. Override to pass through.
|
|
100
|
+
(function propagateHelp(cmd) {
|
|
101
|
+
for (const sub of cmd.commands) {
|
|
102
|
+
sub.configureHelp({
|
|
103
|
+
formatHelp(_cmd, helper) {
|
|
104
|
+
return (0, display_js_1.formatSubcommandHelp)(_cmd, helper);
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
sub.configureOutput({
|
|
108
|
+
getOutHasColors: () => process.stdout.isTTY ?? false,
|
|
109
|
+
getErrHasColors: () => process.stderr.isTTY ?? false,
|
|
110
|
+
});
|
|
111
|
+
propagateHelp(sub);
|
|
112
|
+
}
|
|
113
|
+
})(program);
|
|
114
|
+
const userConfig = (0, user_config_js_2.loadUserConfig)();
|
|
115
|
+
if (userConfig["update-check"] !== false) {
|
|
116
|
+
const cached = (0, update_check_js_1.checkCacheSync)("@rotifer/playground", pkg.version);
|
|
117
|
+
if (cached) {
|
|
118
|
+
process.on("exit", () => (0, update_check_js_1.printUpdateNotification)(cached, "@rotifer/playground"));
|
|
119
|
+
}
|
|
120
|
+
(0, update_check_js_1.checkForUpdate)("@rotifer/playground", pkg.version)
|
|
121
|
+
.then((info) => {
|
|
122
|
+
if (info && !cached)
|
|
123
|
+
(0, update_check_js_1.printUpdateNotification)(info, "@rotifer/playground");
|
|
124
|
+
})
|
|
125
|
+
.catch(() => { });
|
|
126
|
+
}
|
|
67
127
|
program.parse();
|
|
68
128
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Grade, ScanResult } from "../scanner/types.js";
|
|
2
|
+
export interface CheckItem {
|
|
3
|
+
name: string;
|
|
4
|
+
status: "pass" | "warn" | "fail";
|
|
5
|
+
message: string;
|
|
6
|
+
}
|
|
7
|
+
export interface PrePublishResult {
|
|
8
|
+
passed: boolean;
|
|
9
|
+
grade: Grade;
|
|
10
|
+
checks: CheckItem[];
|
|
11
|
+
blocking: CheckItem[];
|
|
12
|
+
scanResult: ScanResult | null;
|
|
13
|
+
}
|
|
14
|
+
export declare function runPrePublishChecks(geneDir: string, geneName: string): PrePublishResult;
|
|
15
|
+
//# sourceMappingURL=pre-publish-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pre-publish-check.d.ts","sourceRoot":"","sources":["../../src/publish/pre-publish-check.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B;AAoOD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAuBvF"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runPrePublishChecks = runPrePublishChecks;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
|
+
const index_js_1 = require("../scanner/index.js");
|
|
7
|
+
const WASM_MAGIC = new Uint8Array([0x00, 0x61, 0x73, 0x6d]); // \0asm
|
|
8
|
+
const MAX_WASM_SIZE = 50 * 1024 * 1024; // 50 MB — suspiciously large for a Gene
|
|
9
|
+
const SENSITIVE_PATTERNS = [
|
|
10
|
+
{ label: "AWS key", pattern: /AKIA[0-9A-Z]{16}/ },
|
|
11
|
+
{ label: "GitHub token", pattern: /ghp_[A-Za-z0-9]{36}/ },
|
|
12
|
+
{ label: "npm token", pattern: /npm_[A-Za-z0-9]{36}/ },
|
|
13
|
+
{ label: "Supabase service key", pattern: /eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9\.[A-Za-z0-9_-]{50,}/ },
|
|
14
|
+
{ label: "Private key block", pattern: /-----BEGIN (?:RSA |EC |DSA )?PRIVATE KEY-----/ },
|
|
15
|
+
{ label: "Generic secret assignment", pattern: /(?:secret|password|token|api_key)\s*[:=]\s*["'][A-Za-z0-9+/=]{20,}["']/i },
|
|
16
|
+
];
|
|
17
|
+
const SCAN_EXTENSIONS = new Set([".ts", ".js", ".mts", ".mjs", ".cjs", ".json", ".md"]);
|
|
18
|
+
function collectAllFiles(dir) {
|
|
19
|
+
const files = [];
|
|
20
|
+
const walk = (d) => {
|
|
21
|
+
let entries;
|
|
22
|
+
try {
|
|
23
|
+
entries = (0, node_fs_1.readdirSync)(d);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
for (const entry of entries) {
|
|
29
|
+
if (entry === "node_modules" || entry === ".git" || entry === "dist")
|
|
30
|
+
continue;
|
|
31
|
+
const full = (0, node_path_1.join)(d, entry);
|
|
32
|
+
try {
|
|
33
|
+
const st = (0, node_fs_1.statSync)(full);
|
|
34
|
+
if (st.isDirectory()) {
|
|
35
|
+
walk(full);
|
|
36
|
+
}
|
|
37
|
+
else if (SCAN_EXTENSIONS.has((0, node_path_1.extname)(entry))) {
|
|
38
|
+
files.push(full);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// skip unreadable entries
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
walk(dir);
|
|
47
|
+
return files;
|
|
48
|
+
}
|
|
49
|
+
function checkVgScan(geneDir, geneName) {
|
|
50
|
+
const result = (0, index_js_1.scan)(geneDir, geneName, { scanAll: true });
|
|
51
|
+
if (result.grade === "?") {
|
|
52
|
+
return {
|
|
53
|
+
check: { name: "V(g) Security Scan", status: "pass", message: "No code files found (pure-config gene)" },
|
|
54
|
+
scanResult: result,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
if (result.grade === "D") {
|
|
58
|
+
const criticals = result.findings.filter((f) => f.severity === "CRITICAL");
|
|
59
|
+
return {
|
|
60
|
+
check: {
|
|
61
|
+
name: "V(g) Security Scan",
|
|
62
|
+
status: "fail",
|
|
63
|
+
message: `Grade D — ${criticals.length} CRITICAL finding(s): ${criticals.map((f) => f.rule).join(", ")}`,
|
|
64
|
+
},
|
|
65
|
+
scanResult: result,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
if (result.grade === "C") {
|
|
69
|
+
return {
|
|
70
|
+
check: {
|
|
71
|
+
name: "V(g) Security Scan",
|
|
72
|
+
status: "warn",
|
|
73
|
+
message: `Grade C — ${result.findings.length} finding(s). Consider fixing HIGH-severity issues before publish.`,
|
|
74
|
+
},
|
|
75
|
+
scanResult: result,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
check: {
|
|
80
|
+
name: "V(g) Security Scan",
|
|
81
|
+
status: "pass",
|
|
82
|
+
message: `Grade ${result.grade} — ${result.findings.length} finding(s), ${result.stats.files_scanned} file(s) scanned`,
|
|
83
|
+
},
|
|
84
|
+
scanResult: result,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function checkIrWasm(geneDir) {
|
|
88
|
+
const wasmPath = (0, node_path_1.join)(geneDir, "gene.ir.wasm");
|
|
89
|
+
if (!(0, node_fs_1.existsSync)(wasmPath)) {
|
|
90
|
+
return { name: "IR WASM Integrity", status: "pass", message: "No WASM binary (non-Native gene)" };
|
|
91
|
+
}
|
|
92
|
+
const buf = (0, node_fs_1.readFileSync)(wasmPath);
|
|
93
|
+
if (buf.length === 0) {
|
|
94
|
+
return { name: "IR WASM Integrity", status: "fail", message: "WASM binary is empty (0 bytes)" };
|
|
95
|
+
}
|
|
96
|
+
const header = new Uint8Array(buf.buffer, buf.byteOffset, Math.min(4, buf.length));
|
|
97
|
+
if (header.length < 4 || !WASM_MAGIC.every((b, i) => header[i] === b)) {
|
|
98
|
+
return { name: "IR WASM Integrity", status: "fail", message: "Invalid WASM magic bytes — file may be corrupted" };
|
|
99
|
+
}
|
|
100
|
+
if (buf.length > MAX_WASM_SIZE) {
|
|
101
|
+
const sizeMB = (buf.length / (1024 * 1024)).toFixed(1);
|
|
102
|
+
return { name: "IR WASM Integrity", status: "warn", message: `WASM binary unusually large (${sizeMB} MB)` };
|
|
103
|
+
}
|
|
104
|
+
const sizeKB = (buf.length / 1024).toFixed(1);
|
|
105
|
+
return { name: "IR WASM Integrity", status: "pass", message: `Valid WASM binary (${sizeKB} KB)` };
|
|
106
|
+
}
|
|
107
|
+
function checkPhenotypeSchema(geneDir) {
|
|
108
|
+
const phenotypePath = (0, node_path_1.join)(geneDir, "phenotype.json");
|
|
109
|
+
if (!(0, node_fs_1.existsSync)(phenotypePath)) {
|
|
110
|
+
return { name: "Phenotype Schema", status: "fail", message: "Missing phenotype.json" };
|
|
111
|
+
}
|
|
112
|
+
let phenotype;
|
|
113
|
+
try {
|
|
114
|
+
phenotype = JSON.parse((0, node_fs_1.readFileSync)(phenotypePath, "utf-8"));
|
|
115
|
+
}
|
|
116
|
+
catch (e) {
|
|
117
|
+
return { name: "Phenotype Schema", status: "fail", message: `Invalid JSON: ${e.message}` };
|
|
118
|
+
}
|
|
119
|
+
const missing = [];
|
|
120
|
+
for (const field of ["domain", "version", "description", "inputSchema"]) {
|
|
121
|
+
if (!phenotype[field])
|
|
122
|
+
missing.push(field);
|
|
123
|
+
}
|
|
124
|
+
if (missing.length > 0) {
|
|
125
|
+
return { name: "Phenotype Schema", status: "warn", message: `Missing recommended fields: ${missing.join(", ")}` };
|
|
126
|
+
}
|
|
127
|
+
const fidelity = phenotype.fidelity;
|
|
128
|
+
if (fidelity && !["Wrapped", "Native", "Hybrid"].includes(fidelity)) {
|
|
129
|
+
return { name: "Phenotype Schema", status: "fail", message: `Invalid fidelity value: "${fidelity}"` };
|
|
130
|
+
}
|
|
131
|
+
return { name: "Phenotype Schema", status: "pass", message: "All required fields present" };
|
|
132
|
+
}
|
|
133
|
+
function checkSensitiveData(geneDir) {
|
|
134
|
+
const files = collectAllFiles(geneDir);
|
|
135
|
+
const leaks = [];
|
|
136
|
+
for (const file of files) {
|
|
137
|
+
if (file.endsWith(".wasm"))
|
|
138
|
+
continue;
|
|
139
|
+
let content;
|
|
140
|
+
try {
|
|
141
|
+
content = (0, node_fs_1.readFileSync)(file, "utf-8");
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
for (const { label, pattern } of SENSITIVE_PATTERNS) {
|
|
147
|
+
if (pattern.test(content)) {
|
|
148
|
+
const relPath = file.replace(geneDir + "/", "");
|
|
149
|
+
leaks.push(`${label} in ${relPath}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (leaks.length > 0) {
|
|
154
|
+
return {
|
|
155
|
+
name: "Sensitive Data Scan",
|
|
156
|
+
status: "fail",
|
|
157
|
+
message: `Found ${leaks.length} potential secret(s): ${leaks.slice(0, 3).join("; ")}${leaks.length > 3 ? ` (+${leaks.length - 3} more)` : ""}`,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
return { name: "Sensitive Data Scan", status: "pass", message: `Scanned ${files.length} file(s), no secrets detected` };
|
|
161
|
+
}
|
|
162
|
+
function checkDependencies(geneDir) {
|
|
163
|
+
const phenotypePath = (0, node_path_1.join)(geneDir, "phenotype.json");
|
|
164
|
+
if (!(0, node_fs_1.existsSync)(phenotypePath)) {
|
|
165
|
+
return { name: "Dependency Audit", status: "pass", message: "No phenotype.json to audit" };
|
|
166
|
+
}
|
|
167
|
+
let phenotype;
|
|
168
|
+
try {
|
|
169
|
+
phenotype = JSON.parse((0, node_fs_1.readFileSync)(phenotypePath, "utf-8"));
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
return { name: "Dependency Audit", status: "pass", message: "Could not parse phenotype.json" };
|
|
173
|
+
}
|
|
174
|
+
const deps = phenotype.dependencies;
|
|
175
|
+
if (!Array.isArray(deps) || deps.length === 0) {
|
|
176
|
+
return { name: "Dependency Audit", status: "pass", message: "No gene dependencies declared" };
|
|
177
|
+
}
|
|
178
|
+
const pkgJsonPath = (0, node_path_1.join)(geneDir, "package.json");
|
|
179
|
+
if (!(0, node_fs_1.existsSync)(pkgJsonPath)) {
|
|
180
|
+
return { name: "Dependency Audit", status: "pass", message: `${deps.length} gene dependency(ies) — no package.json to audit` };
|
|
181
|
+
}
|
|
182
|
+
let pkg;
|
|
183
|
+
try {
|
|
184
|
+
pkg = JSON.parse((0, node_fs_1.readFileSync)(pkgJsonPath, "utf-8"));
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return { name: "Dependency Audit", status: "warn", message: "Could not parse package.json" };
|
|
188
|
+
}
|
|
189
|
+
const allDeps = { ...(pkg.dependencies || {}), ...(pkg.devDependencies || {}) };
|
|
190
|
+
const warnings = [];
|
|
191
|
+
for (const [name, ver] of Object.entries(allDeps)) {
|
|
192
|
+
if (typeof ver === "string" && (ver.startsWith("file:") || ver.startsWith("link:"))) {
|
|
193
|
+
warnings.push(`${name}: local reference (${ver})`);
|
|
194
|
+
}
|
|
195
|
+
if (typeof ver === "string" && ver.includes("github:")) {
|
|
196
|
+
warnings.push(`${name}: GitHub reference (unversioned)`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (warnings.length > 0) {
|
|
200
|
+
return {
|
|
201
|
+
name: "Dependency Audit",
|
|
202
|
+
status: "warn",
|
|
203
|
+
message: `${warnings.length} concern(s): ${warnings.join("; ")}`,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
return { name: "Dependency Audit", status: "pass", message: `${Object.keys(allDeps).length} package(s) OK` };
|
|
207
|
+
}
|
|
208
|
+
function runPrePublishChecks(geneDir, geneName) {
|
|
209
|
+
const checks = [];
|
|
210
|
+
let scanResult = null;
|
|
211
|
+
const vg = checkVgScan(geneDir, geneName);
|
|
212
|
+
checks.push(vg.check);
|
|
213
|
+
scanResult = vg.scanResult;
|
|
214
|
+
checks.push(checkIrWasm(geneDir));
|
|
215
|
+
checks.push(checkPhenotypeSchema(geneDir));
|
|
216
|
+
checks.push(checkSensitiveData(geneDir));
|
|
217
|
+
checks.push(checkDependencies(geneDir));
|
|
218
|
+
const blocking = checks.filter((c) => c.status === "fail");
|
|
219
|
+
const grade = scanResult?.grade ?? "?";
|
|
220
|
+
return {
|
|
221
|
+
passed: blocking.length === 0,
|
|
222
|
+
grade,
|
|
223
|
+
checks,
|
|
224
|
+
blocking,
|
|
225
|
+
scanResult,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=pre-publish-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pre-publish-check.js","sourceRoot":"","sources":["../../src/publish/pre-publish-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* L2 Calibration auto-failover: when a gene fails, try the next-best
|
|
5
5
|
* gene in the same domain, ranked by running fitness score.
|
|
6
6
|
*
|
|
7
|
-
* Ported from
|
|
7
|
+
* Ported from examples/api-apocalypse/rotifer-agent.ts into the
|
|
8
8
|
* production runtime. Works with both WASM sandbox and Node.js execution.
|
|
9
9
|
*/
|
|
10
10
|
export interface GeneExecutor {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* L2 Calibration auto-failover: when a gene fails, try the next-best
|
|
6
6
|
* gene in the same domain, ranked by running fitness score.
|
|
7
7
|
*
|
|
8
|
-
* Ported from
|
|
8
|
+
* Ported from examples/api-apocalypse/rotifer-agent.ts into the
|
|
9
9
|
* production runtime. Works with both WASM sandbox and Node.js execution.
|
|
10
10
|
*/
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -20,7 +20,7 @@ export interface GatewayResponse {
|
|
|
20
20
|
status: number;
|
|
21
21
|
headers: Record<string, string>;
|
|
22
22
|
body: string;
|
|
23
|
-
|
|
23
|
+
isTruncated: boolean;
|
|
24
24
|
}
|
|
25
25
|
export declare class NetworkGatewayError extends Error {
|
|
26
26
|
readonly code: "DOMAIN_BLOCKED" | "RATE_LIMITED" | "TIMEOUT" | "RESPONSE_TOO_LARGE" | "NETWORK_ERROR";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network-gateway.d.ts","sourceRoot":"","sources":["../../src/runtime/network-gateway.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,
|
|
1
|
+
{"version":3,"file":"network-gateway.d.ts","sourceRoot":"","sources":["../../src/runtime/network-gateway.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,mBAAoB,SAAQ,KAAK;aAE1B,IAAI,EAChB,gBAAgB,GAChB,cAAc,GACd,SAAS,GACT,oBAAoB,GACpB,eAAe;gBALH,IAAI,EAChB,gBAAgB,GAChB,cAAc,GACd,SAAS,GACT,oBAAoB,GACpB,eAAe,EACnB,OAAO,EAAE,MAAM;CAKlB;AASD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,iBAAiB,CAAgB;IACzC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,UAAU,CAAK;gBAEX,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAI3C,IAAI,KAAK;;;;MAMR;IAEK,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC;IAkDjF,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,gBAAgB;YAiBV,cAAc;CAmC7B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAC7B;IACD,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACvF,OAAO,EAAE,cAAc,CAAC;CACzB,CAMA"}
|
|
@@ -51,7 +51,7 @@ class NetworkGateway {
|
|
|
51
51
|
body: options?.body,
|
|
52
52
|
signal: controller.signal,
|
|
53
53
|
});
|
|
54
|
-
const { text,
|
|
54
|
+
const { text, isTruncated } = await this.readBodyCapped(response);
|
|
55
55
|
this.totalRequests++;
|
|
56
56
|
this.totalBytes += text.length;
|
|
57
57
|
const headers = {};
|
|
@@ -62,7 +62,7 @@ class NetworkGateway {
|
|
|
62
62
|
status: response.status,
|
|
63
63
|
headers,
|
|
64
64
|
body: text,
|
|
65
|
-
|
|
65
|
+
isTruncated,
|
|
66
66
|
};
|
|
67
67
|
}
|
|
68
68
|
catch (err) {
|
|
@@ -83,13 +83,13 @@ class NetworkGateway {
|
|
|
83
83
|
catch {
|
|
84
84
|
throw new NetworkGatewayError("DOMAIN_BLOCKED", `Invalid URL: ${url}`);
|
|
85
85
|
}
|
|
86
|
-
const
|
|
86
|
+
const isAllowed = this.config.allowedDomains.some((d) => {
|
|
87
87
|
if (d.startsWith("*.")) {
|
|
88
88
|
return hostname.endsWith(d.slice(1)) || hostname === d.slice(2);
|
|
89
89
|
}
|
|
90
90
|
return hostname === d;
|
|
91
91
|
});
|
|
92
|
-
if (!
|
|
92
|
+
if (!isAllowed) {
|
|
93
93
|
throw new NetworkGatewayError("DOMAIN_BLOCKED", `Domain "${hostname}" is not in the allowed list: [${this.config.allowedDomains.join(", ")}]`);
|
|
94
94
|
}
|
|
95
95
|
}
|
|
@@ -105,21 +105,21 @@ class NetworkGateway {
|
|
|
105
105
|
async readBodyCapped(response) {
|
|
106
106
|
const reader = response.body?.getReader();
|
|
107
107
|
if (!reader) {
|
|
108
|
-
return { text: "",
|
|
108
|
+
return { text: "", isTruncated: false };
|
|
109
109
|
}
|
|
110
110
|
const chunks = [];
|
|
111
111
|
let totalSize = 0;
|
|
112
|
-
let
|
|
112
|
+
let isTruncated = false;
|
|
113
113
|
while (true) {
|
|
114
|
-
const { done, value } = await reader.read();
|
|
115
|
-
if (
|
|
114
|
+
const { done: isDone, value } = await reader.read();
|
|
115
|
+
if (isDone)
|
|
116
116
|
break;
|
|
117
117
|
if (totalSize + value.length > this.config.maxResponseBytes) {
|
|
118
118
|
const remaining = this.config.maxResponseBytes - totalSize;
|
|
119
119
|
if (remaining > 0) {
|
|
120
120
|
chunks.push(value.slice(0, remaining));
|
|
121
121
|
}
|
|
122
|
-
|
|
122
|
+
isTruncated = true;
|
|
123
123
|
reader.cancel();
|
|
124
124
|
break;
|
|
125
125
|
}
|
|
@@ -129,7 +129,7 @@ class NetworkGateway {
|
|
|
129
129
|
const decoder = new TextDecoder();
|
|
130
130
|
const text = chunks.map((c) => decoder.decode(c, { stream: true })).join("") +
|
|
131
131
|
decoder.decode();
|
|
132
|
-
return { text,
|
|
132
|
+
return { text, isTruncated };
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
135
|
exports.NetworkGateway = NetworkGateway;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network-gateway.js","sourceRoot":"","sources":["../../src/runtime/network-gateway.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAoMH,gDAWC;AAzLD,MAAa,mBAAoB,SAAQ,KAAK;IAE1B;IADlB,YACkB,IAKG,EACnB,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QARC,SAAI,GAAJ,IAAI,CAKD;QAInB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAbD,kDAaC;AAED,MAAM,cAAc,GAAkB;IACpC,cAAc,EAAE,EAAE;IAClB,YAAY,EAAE,MAAM;IACpB,gBAAgB,EAAE,SAAS,EAAE,QAAQ;IACrC,iBAAiB,EAAE,EAAE;CACtB,CAAC;AAEF,MAAa,cAAc;IACjB,MAAM,CAAgB;IACtB,iBAAiB,GAAa,EAAE,CAAC;IACjC,aAAa,GAAG,CAAC,CAAC;IAClB,UAAU,GAAG,CAAC,CAAC;IAEvB,YAAY,MAA+B;QACzC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;IACjD,CAAC;IAED,IAAI,KAAK;QACP,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,cAAc,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM;SAC9C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,OAA6B;QACpD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CACxB,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EACxB,IAAI,CAAC,MAAM,CAAC,YAAY,CACzB,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,MAAM;gBACjC,OAAO,EAAE,OAAO,EAAE,OAAO;gBACzB,IAAI,EAAE,OAAO,EAAE,IAAI;gBACnB,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,MAAM,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"network-gateway.js","sourceRoot":"","sources":["../../src/runtime/network-gateway.ts"],"names":[],"mappings":"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"}
|
package/dist/scanner/scanner.js
CHANGED
|
@@ -67,8 +67,8 @@ function computeGrade(findings) {
|
|
|
67
67
|
return "A";
|
|
68
68
|
}
|
|
69
69
|
function scan(dir, skillId, options) {
|
|
70
|
-
const
|
|
71
|
-
if (!
|
|
70
|
+
const shouldScanAll = options?.scanAll ?? false;
|
|
71
|
+
if (!shouldScanAll && !hasSrcDirectory(dir)) {
|
|
72
72
|
return {
|
|
73
73
|
skill_id: skillId ?? dir,
|
|
74
74
|
scanned_at: new Date().toISOString(),
|
|
@@ -77,7 +77,7 @@ function scan(dir, skillId, options) {
|
|
|
77
77
|
stats: { files_scanned: 0, lines_of_code: 0 },
|
|
78
78
|
};
|
|
79
79
|
}
|
|
80
|
-
const scanDir =
|
|
80
|
+
const scanDir = shouldScanAll ? dir : (0, node_path_1.join)(dir, "src");
|
|
81
81
|
const files = collectCodeFiles(scanDir);
|
|
82
82
|
const allFindings = [];
|
|
83
83
|
let totalLines = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/scanner/scanner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/scanner/scanner.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/binding.d.ts
CHANGED
|
@@ -39,6 +39,7 @@ export interface NativeBinding {
|
|
|
39
39
|
}
|
|
40
40
|
/**
|
|
41
41
|
* Try to load the napi native addon.
|
|
42
|
+
* Strategy: platform npm package first, then local .node file fallback.
|
|
42
43
|
* Returns null if the addon is not available (fallback to pure-TS path).
|
|
43
44
|
*/
|
|
44
45
|
export declare function tryLoadBinding(): NativeBinding | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../../src/utils/binding.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../../src/utils/binding.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,iBAAiB,CACf,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GACjB,iBAAiB,CAAC;IACrB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1C,iBAAiB,IAAI,MAAM,CAAC;IAC5B,mBAAmB,IAAI,MAAM,CAAC;IAC9B,sBAAsB,IAAI,MAAM,CAAC;IACjC,sBAAsB,IAAI,MAAM,CAAC;IACjC,WAAW,CACT,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,eAAe,CAAC,EAAE,MAAM,GACvB,mBAAmB,CAAC;IACvB,OAAO,CACL,aAAa,EAAE,MAAM,EACrB,eAAe,CAAC,EAAE,MAAM,EACxB,eAAe,CAAC,EAAE,MAAM,GACvB,iBAAiB,CAAC;IACrB,cAAc,CACZ,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,GAChB,iBAAiB,CAAC;CACtB;AAuBD;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,aAAa,GAAG,IAAI,CAmCrD;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C"}
|
package/dist/utils/binding.js
CHANGED
|
@@ -4,34 +4,56 @@ exports.tryLoadBinding = tryLoadBinding;
|
|
|
4
4
|
exports.isNativeAvailable = isNativeAvailable;
|
|
5
5
|
const node_path_1 = require("node:path");
|
|
6
6
|
const node_fs_1 = require("node:fs");
|
|
7
|
+
const private_fs_js_1 = require("./private-fs.js");
|
|
7
8
|
let _binding = null;
|
|
8
|
-
let
|
|
9
|
+
let _hasLoadAttempted = false;
|
|
10
|
+
const PLATFORM_PACKAGE_MAP = {
|
|
11
|
+
"darwin-arm64": "@rotifer/playground-darwin-arm64",
|
|
12
|
+
"darwin-x64": "@rotifer/playground-darwin-x64",
|
|
13
|
+
"linux-x64": "@rotifer/playground-linux-x64-gnu",
|
|
14
|
+
"win32-x64": "@rotifer/playground-win32-x64-msvc",
|
|
15
|
+
};
|
|
16
|
+
function initBinding(mod) {
|
|
17
|
+
if (!mod.PlaygroundBinding)
|
|
18
|
+
return null;
|
|
19
|
+
const tmpDir = (0, node_path_1.join)(process.env.HOME || process.env.USERPROFILE || "/tmp", ".rotifer", "napi-binding");
|
|
20
|
+
(0, private_fs_js_1.ensurePrivateDir)(tmpDir);
|
|
21
|
+
return new mod.PlaygroundBinding(tmpDir);
|
|
22
|
+
}
|
|
9
23
|
/**
|
|
10
24
|
* Try to load the napi native addon.
|
|
25
|
+
* Strategy: platform npm package first, then local .node file fallback.
|
|
11
26
|
* Returns null if the addon is not available (fallback to pure-TS path).
|
|
12
27
|
*/
|
|
13
28
|
function tryLoadBinding() {
|
|
14
|
-
if (
|
|
29
|
+
if (_hasLoadAttempted)
|
|
15
30
|
return _binding;
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
31
|
+
_hasLoadAttempted = true;
|
|
32
|
+
const platformKey = `${process.platform}-${process.arch}`;
|
|
33
|
+
const pkgName = PLATFORM_PACKAGE_MAP[platformKey];
|
|
34
|
+
if (pkgName) {
|
|
35
|
+
try {
|
|
36
|
+
const mod = require(pkgName);
|
|
37
|
+
_binding = initBinding(mod);
|
|
38
|
+
if (_binding)
|
|
39
|
+
return _binding;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// platform package not installed — fall through to local search
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const localCandidates = [
|
|
46
|
+
(0, node_path_1.join)(__dirname, "..", "..", `index.${platformKey}.node`),
|
|
47
|
+
(0, node_path_1.join)(__dirname, "..", "..", `index.${process.platform}-${process.arch}.node`),
|
|
22
48
|
(0, node_path_1.join)(__dirname, "..", "..", `rotifer-napi.${process.platform}-${process.arch}.node`),
|
|
23
49
|
];
|
|
24
|
-
for (const candidate of
|
|
50
|
+
for (const candidate of localCandidates) {
|
|
25
51
|
if ((0, node_fs_1.existsSync)(candidate)) {
|
|
26
52
|
try {
|
|
27
53
|
const mod = require(candidate);
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
require("node:fs").mkdirSync(tmpDir, { recursive: true });
|
|
31
|
-
const instance = new mod.PlaygroundBinding(tmpDir);
|
|
32
|
-
_binding = instance;
|
|
54
|
+
_binding = initBinding(mod);
|
|
55
|
+
if (_binding)
|
|
33
56
|
return _binding;
|
|
34
|
-
}
|
|
35
57
|
}
|
|
36
58
|
catch {
|
|
37
59
|
// addon exists but failed to load — continue
|