superacli 1.0.1 → 1.1.2
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/.beads/.br_history/issues.20260308_200823_636718328.jsonl +20 -0
- package/.beads/.br_history/issues.20260308_200823_636718328.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_200827_033159453.jsonl +21 -0
- package/.beads/.br_history/issues.20260308_200827_033159453.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_200829_595900053.jsonl +22 -0
- package/.beads/.br_history/issues.20260308_200829_595900053.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_200834_079930100.jsonl +23 -0
- package/.beads/.br_history/issues.20260308_200834_079930100.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_200858_370924996.jsonl +24 -0
- package/.beads/.br_history/issues.20260308_200858_370924996.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_201031_019730855.jsonl +24 -0
- package/.beads/.br_history/issues.20260308_201031_019730855.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_201031_578974884.jsonl +24 -0
- package/.beads/.br_history/issues.20260308_201031_578974884.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_201054_780345548.jsonl +24 -0
- package/.beads/.br_history/issues.20260308_201054_780345548.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_201054_896980019.jsonl +24 -0
- package/.beads/.br_history/issues.20260308_201054_896980019.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_201128_599819688.jsonl +24 -0
- package/.beads/.br_history/issues.20260308_201128_599819688.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_201128_710221699.jsonl +24 -0
- package/.beads/.br_history/issues.20260308_201128_710221699.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_201204_745649213.jsonl +24 -0
- package/.beads/.br_history/issues.20260308_201204_745649213.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_201338_908436144.jsonl +24 -0
- package/.beads/.br_history/issues.20260308_201338_908436144.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_201344_734860714.jsonl +25 -0
- package/.beads/.br_history/issues.20260308_201344_734860714.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_201630_819282295.jsonl +25 -0
- package/.beads/.br_history/issues.20260308_201630_819282295.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_203538_054279699.jsonl +25 -0
- package/.beads/.br_history/issues.20260308_203538_054279699.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_203547_597113070.jsonl +26 -0
- package/.beads/.br_history/issues.20260308_203547_597113070.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_203547_775139216.jsonl +27 -0
- package/.beads/.br_history/issues.20260308_203547_775139216.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_203547_950724773.jsonl +28 -0
- package/.beads/.br_history/issues.20260308_203547_950724773.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_203548_107684523.jsonl +29 -0
- package/.beads/.br_history/issues.20260308_203548_107684523.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_203548_310389993.jsonl +30 -0
- package/.beads/.br_history/issues.20260308_203548_310389993.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_203825_953337320.jsonl +31 -0
- package/.beads/.br_history/issues.20260308_203825_953337320.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_204056_071377736.jsonl +32 -0
- package/.beads/.br_history/issues.20260308_204056_071377736.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_205141_517616844.jsonl +32 -0
- package/.beads/.br_history/issues.20260308_205141_517616844.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_205141_648994024.jsonl +32 -0
- package/.beads/.br_history/issues.20260308_205141_648994024.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_205141_867598036.jsonl +32 -0
- package/.beads/.br_history/issues.20260308_205141_867598036.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_205142_094157355.jsonl +32 -0
- package/.beads/.br_history/issues.20260308_205142_094157355.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_205142_327315677.jsonl +32 -0
- package/.beads/.br_history/issues.20260308_205142_327315677.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_205142_545563822.jsonl +32 -0
- package/.beads/.br_history/issues.20260308_205142_545563822.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_205213_061989333.jsonl +32 -0
- package/.beads/.br_history/issues.20260308_205213_061989333.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_205213_181103364.jsonl +32 -0
- package/.beads/.br_history/issues.20260308_205213_181103364.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_205213_408872234.jsonl +32 -0
- package/.beads/.br_history/issues.20260308_205213_408872234.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_205213_616681652.jsonl +32 -0
- package/.beads/.br_history/issues.20260308_205213_616681652.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_205213_821507069.jsonl +32 -0
- package/.beads/.br_history/issues.20260308_205213_821507069.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_205214_026661112.jsonl +32 -0
- package/.beads/.br_history/issues.20260308_205214_026661112.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_205454_955250554.jsonl +32 -0
- package/.beads/.br_history/issues.20260308_205454_955250554.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_205556_337800392.jsonl +33 -0
- package/.beads/.br_history/issues.20260308_205556_337800392.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_205824_274686694.jsonl +33 -0
- package/.beads/.br_history/issues.20260308_205824_274686694.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_210240_583768328.jsonl +34 -0
- package/.beads/.br_history/issues.20260308_210240_583768328.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212223_641541494.jsonl +34 -0
- package/.beads/.br_history/issues.20260308_212223_641541494.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212227_735550996.jsonl +35 -0
- package/.beads/.br_history/issues.20260308_212227_735550996.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212232_547298548.jsonl +36 -0
- package/.beads/.br_history/issues.20260308_212232_547298548.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212528_843628125.jsonl +37 -0
- package/.beads/.br_history/issues.20260308_212528_843628125.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212529_094530502.jsonl +38 -0
- package/.beads/.br_history/issues.20260308_212529_094530502.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212529_331000853.jsonl +39 -0
- package/.beads/.br_history/issues.20260308_212529_331000853.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212529_587925652.jsonl +40 -0
- package/.beads/.br_history/issues.20260308_212529_587925652.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212804_927764103.jsonl +41 -0
- package/.beads/.br_history/issues.20260308_212804_927764103.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212805_153673453.jsonl +42 -0
- package/.beads/.br_history/issues.20260308_212805_153673453.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212805_415982363.jsonl +43 -0
- package/.beads/.br_history/issues.20260308_212805_415982363.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212805_657497741.jsonl +44 -0
- package/.beads/.br_history/issues.20260308_212805_657497741.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212805_952838724.jsonl +45 -0
- package/.beads/.br_history/issues.20260308_212805_952838724.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212806_325433779.jsonl +46 -0
- package/.beads/.br_history/issues.20260308_212806_325433779.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212806_584685598.jsonl +47 -0
- package/.beads/.br_history/issues.20260308_212806_584685598.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212806_827817208.jsonl +48 -0
- package/.beads/.br_history/issues.20260308_212806_827817208.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212807_111320451.jsonl +49 -0
- package/.beads/.br_history/issues.20260308_212807_111320451.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212807_409545536.jsonl +50 -0
- package/.beads/.br_history/issues.20260308_212807_409545536.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212807_625063294.jsonl +51 -0
- package/.beads/.br_history/issues.20260308_212807_625063294.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212807_843906551.jsonl +52 -0
- package/.beads/.br_history/issues.20260308_212807_843906551.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212808_100304073.jsonl +53 -0
- package/.beads/.br_history/issues.20260308_212808_100304073.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212808_324723976.jsonl +54 -0
- package/.beads/.br_history/issues.20260308_212808_324723976.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212808_557513104.jsonl +55 -0
- package/.beads/.br_history/issues.20260308_212808_557513104.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_212808_788048322.jsonl +56 -0
- package/.beads/.br_history/issues.20260308_212808_788048322.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_213702_613249728.jsonl +57 -0
- package/.beads/.br_history/issues.20260308_213702_613249728.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_213715_115792063.jsonl +57 -0
- package/.beads/.br_history/issues.20260308_213715_115792063.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_213715_462220666.jsonl +57 -0
- package/.beads/.br_history/issues.20260308_213715_462220666.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_213727_191258923.jsonl +57 -0
- package/.beads/.br_history/issues.20260308_213727_191258923.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_213727_684383652.jsonl +57 -0
- package/.beads/.br_history/issues.20260308_213727_684383652.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_213735_751882991.jsonl +57 -0
- package/.beads/.br_history/issues.20260308_213735_751882991.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_222052_279844960.jsonl +57 -0
- package/.beads/.br_history/issues.20260308_222052_279844960.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_222056_873282114.jsonl +57 -0
- package/.beads/.br_history/issues.20260308_222056_873282114.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_222103_402410761.jsonl +57 -0
- package/.beads/.br_history/issues.20260308_222103_402410761.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_235202_180577215.jsonl +57 -0
- package/.beads/.br_history/issues.20260308_235202_180577215.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_235202_387414163.jsonl +57 -0
- package/.beads/.br_history/issues.20260308_235202_387414163.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_235202_564422794.jsonl +57 -0
- package/.beads/.br_history/issues.20260308_235202_564422794.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_235202_742600597.jsonl +57 -0
- package/.beads/.br_history/issues.20260308_235202_742600597.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_235208_133360069.jsonl +57 -0
- package/.beads/.br_history/issues.20260308_235208_133360069.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_235505_473406307.jsonl +57 -0
- package/.beads/.br_history/issues.20260308_235505_473406307.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_235505_662360489.jsonl +57 -0
- package/.beads/.br_history/issues.20260308_235505_662360489.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_235505_843935624.jsonl +57 -0
- package/.beads/.br_history/issues.20260308_235505_843935624.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260308_235506_044530221.jsonl +57 -0
- package/.beads/.br_history/issues.20260308_235506_044530221.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_002618_115728731.jsonl +57 -0
- package/.beads/.br_history/issues.20260309_002618_115728731.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_003748_878174586.jsonl +57 -0
- package/.beads/.br_history/issues.20260309_003748_878174586.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_004057_868755623.jsonl +57 -0
- package/.beads/.br_history/issues.20260309_004057_868755623.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_004058_512842163.jsonl +57 -0
- package/.beads/.br_history/issues.20260309_004058_512842163.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_004058_994445226.jsonl +57 -0
- package/.beads/.br_history/issues.20260309_004058_994445226.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_004059_475988596.jsonl +57 -0
- package/.beads/.br_history/issues.20260309_004059_475988596.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_161902_566857851.jsonl +57 -0
- package/.beads/.br_history/issues.20260309_161902_566857851.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_170512_277017739.jsonl +57 -0
- package/.beads/.br_history/issues.20260309_170512_277017739.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_170512_477876921.jsonl +57 -0
- package/.beads/.br_history/issues.20260309_170512_477876921.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_170512_664382701.jsonl +57 -0
- package/.beads/.br_history/issues.20260309_170512_664382701.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_170512_859400333.jsonl +57 -0
- package/.beads/.br_history/issues.20260309_170512_859400333.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_212326_082771164.jsonl +57 -0
- package/.beads/.br_history/issues.20260309_212326_082771164.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_212326_245619716.jsonl +58 -0
- package/.beads/.br_history/issues.20260309_212326_245619716.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_212326_403198317.jsonl +59 -0
- package/.beads/.br_history/issues.20260309_212326_403198317.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_212332_539197678.jsonl +60 -0
- package/.beads/.br_history/issues.20260309_212332_539197678.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_212332_731373599.jsonl +60 -0
- package/.beads/.br_history/issues.20260309_212332_731373599.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_212332_928710953.jsonl +60 -0
- package/.beads/.br_history/issues.20260309_212332_928710953.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_213021_341505240.jsonl +60 -0
- package/.beads/.br_history/issues.20260309_213021_341505240.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_213022_023136934.jsonl +60 -0
- package/.beads/.br_history/issues.20260309_213022_023136934.jsonl.meta.json +1 -0
- package/.beads/.br_history/issues.20260309_213022_400050719.jsonl +60 -0
- package/.beads/.br_history/issues.20260309_213022_400050719.jsonl.meta.json +1 -0
- package/.beads/config.yaml +4 -0
- package/.beads/issues.jsonl +60 -0
- package/.beads/metadata.json +4 -0
- package/README.md +226 -43
- package/__tests__/adapter-schema.test.js +119 -0
- package/__tests__/ask.test.js +327 -0
- package/__tests__/aws-plugin.test.js +84 -0
- package/__tests__/az-plugin.test.js +84 -0
- package/__tests__/builtin-adapter.test.js +29 -0
- package/__tests__/cline-plugin.test.js +109 -0
- package/__tests__/cline-skill.test.js +49 -0
- package/__tests__/config.test.js +297 -0
- package/__tests__/docker-plugin.test.js +95 -0
- package/__tests__/executor.test.js +303 -0
- package/__tests__/eza-plugin.test.js +81 -0
- package/__tests__/gcloud-plugin.test.js +86 -0
- package/__tests__/gh-plugin.test.js +86 -0
- package/__tests__/helm-plugin.test.js +81 -0
- package/__tests__/help-json.test.js +19 -0
- package/__tests__/http-adapter.test.js +118 -0
- package/__tests__/just-plugin.test.js +82 -0
- package/__tests__/kubectl-plugin.test.js +83 -0
- package/__tests__/linear-plugin.test.js +81 -0
- package/__tests__/mcp-adapter.test.js +187 -0
- package/__tests__/mcp-local.test.js +105 -0
- package/__tests__/namespace-passthrough.test.js +69 -0
- package/__tests__/nextest-plugin.test.js +82 -0
- package/__tests__/npm-plugin.test.js +81 -0
- package/__tests__/nullclaw-plugin.test.js +157 -0
- package/__tests__/openapi-adapter.test.js +199 -0
- package/__tests__/plan-runtime.test.js +43 -0
- package/__tests__/planner.test.js +47 -0
- package/__tests__/plugin-agency-agents.test.js +62 -0
- package/__tests__/plugin-nullclaw.test.js +78 -0
- package/__tests__/plugin-visual-explainer.test.js +62 -0
- package/__tests__/plugins-command.test.js +220 -0
- package/__tests__/plugins-manager.test.js +353 -0
- package/__tests__/plugins-registry.test.js +114 -0
- package/__tests__/plugins-store.test.js +115 -0
- package/__tests__/pnpm-plugin.test.js +81 -0
- package/__tests__/poetry-plugin.test.js +83 -0
- package/__tests__/process-adapter.test.js +143 -0
- package/__tests__/pulumi-plugin.test.js +81 -0
- package/__tests__/railway-plugin.test.js +84 -0
- package/__tests__/server-app.test.js +67 -0
- package/__tests__/server-config-service.test.js +79 -0
- package/__tests__/server-routes-ask.test.js +89 -0
- package/__tests__/server-routes-commands.test.js +55 -0
- package/__tests__/server-routes-config.test.js +87 -0
- package/__tests__/server-routes-jobs.test.js +53 -0
- package/__tests__/server-routes-misc.test.js +112 -0
- package/__tests__/server-storage-adapter.test.js +40 -0
- package/__tests__/server-storage-file.test.js +73 -0
- package/__tests__/server-storage-mongo.test.js +74 -0
- package/__tests__/shell-adapter.test.js +90 -0
- package/__tests__/skills-catalog.test.js +98 -0
- package/__tests__/skills.test.js +442 -0
- package/__tests__/stripe-plugin.test.js +81 -0
- package/__tests__/supabase-plugin.test.js +86 -0
- package/__tests__/terraform-plugin.test.js +83 -0
- package/__tests__/uv-plugin.test.js +81 -0
- package/__tests__/vercel-plugin.test.js +81 -0
- package/__tests__/watchexec-plugin.test.js +80 -0
- package/cli/adapter-schema.js +108 -0
- package/cli/adapters/builtin.js +43 -0
- package/cli/adapters/process.js +262 -0
- package/cli/adapters/shell.js +82 -0
- package/cli/config.js +12 -9
- package/cli/executor.js +6 -1
- package/cli/help-json.js +3 -1
- package/cli/namespace-passthrough.js +38 -0
- package/cli/plugin-install-guidance.js +320 -0
- package/cli/plugins-command.js +138 -0
- package/cli/plugins-manager.js +552 -0
- package/cli/plugins-registry.js +80 -0
- package/cli/plugins-store.js +56 -0
- package/cli/skills-catalog.js +237 -0
- package/cli/skills.js +180 -6
- package/cli/supercli.js +150 -58
- package/docs/docs.html +224 -0
- package/docs/feature-gaps.md +16 -0
- package/docs/index.html +164 -0
- package/docs/plugin-examples.md +397 -0
- package/docs/plugin-harness-guide.md +452 -0
- package/docs/plugins.md +44 -0
- package/docs/skills/cline-non-interactive/SKILL.md +59 -0
- package/docs/skills-catalog.md +81 -0
- package/docs/supported-harnesses.md +277 -0
- package/docs/visual-overview.md +21 -0
- package/jest.config.js +25 -0
- package/package.json +9 -3
- package/plugins/agency-agents/plugin.json +15 -0
- package/plugins/agency-agents/scripts/post-install.js +122 -0
- package/plugins/aws/README.md +46 -0
- package/plugins/aws/plugin.json +42 -0
- package/plugins/az/README.md +46 -0
- package/plugins/az/plugin.json +42 -0
- package/plugins/beads/plugin.json +202 -0
- package/plugins/clickup/plugin.json +38 -0
- package/plugins/clickup/scripts/post-install.js +107 -0
- package/plugins/clickup/scripts/post-uninstall.js +30 -0
- package/plugins/cline/README.md +48 -0
- package/plugins/cline/plugin.json +92 -0
- package/plugins/commiat/plugin.json +36 -0
- package/plugins/docker/MANIFEST.md +39 -0
- package/plugins/docker/README.md +35 -0
- package/plugins/docker/examples/build-image.sh +7 -0
- package/plugins/docker/examples/inspect-container.sh +6 -0
- package/plugins/docker/examples/list-containers.sh +4 -0
- package/plugins/docker/examples/multi-step-workflow.sh +10 -0
- package/plugins/docker/examples/run-container.sh +7 -0
- package/plugins/docker/plugin.json +266 -0
- package/plugins/eza/README.md +40 -0
- package/plugins/eza/plugin.json +42 -0
- package/plugins/gcloud/README.md +46 -0
- package/plugins/gcloud/plugin.json +42 -0
- package/plugins/gh/README.md +46 -0
- package/plugins/gh/plugin.json +43 -0
- package/plugins/gwc/plugin.json +35 -0
- package/plugins/helm/README.md +42 -0
- package/plugins/helm/plugin.json +42 -0
- package/plugins/just/README.md +42 -0
- package/plugins/just/plugin.json +42 -0
- package/plugins/kubectl/README.md +46 -0
- package/plugins/kubectl/plugin.json +42 -0
- package/plugins/linear/README.md +60 -0
- package/plugins/linear/plugin.json +42 -0
- package/plugins/nextest/README.md +42 -0
- package/plugins/nextest/plugin.json +42 -0
- package/plugins/npm/README.md +46 -0
- package/plugins/npm/plugin.json +42 -0
- package/plugins/nullclaw/README.md +45 -0
- package/plugins/nullclaw/plugin.json +64 -0
- package/plugins/nullclaw/scripts/post-install.js +189 -0
- package/plugins/nullclaw/scripts/post-uninstall.js +25 -0
- package/plugins/openfang/plugin.json +37 -0
- package/plugins/openfang/scripts/post-install.js +163 -0
- package/plugins/openfang/scripts/post-uninstall.js +30 -0
- package/plugins/plugins.json +295 -0
- package/plugins/pnpm/README.md +46 -0
- package/plugins/pnpm/plugin.json +42 -0
- package/plugins/poetry/README.md +46 -0
- package/plugins/poetry/plugin.json +42 -0
- package/plugins/pulumi/README.md +46 -0
- package/plugins/pulumi/plugin.json +42 -0
- package/plugins/railway/README.md +58 -0
- package/plugins/railway/plugin.json +43 -0
- package/plugins/stripe/README.md +49 -0
- package/plugins/stripe/plugin.json +52 -0
- package/plugins/supabase/README.md +55 -0
- package/plugins/supabase/plugin.json +42 -0
- package/plugins/superpowers/plugin.json +22 -0
- package/plugins/superpowers/scripts/post-install.js +124 -0
- package/plugins/superpowers/scripts/post-uninstall.js +30 -0
- package/plugins/terraform/README.md +46 -0
- package/plugins/terraform/plugin.json +42 -0
- package/plugins/uv/README.md +46 -0
- package/plugins/uv/plugin.json +42 -0
- package/plugins/vercel/README.md +47 -0
- package/plugins/vercel/plugin.json +42 -0
- package/plugins/visual-explainer/plugin.json +15 -0
- package/plugins/visual-explainer/scripts/post-install.js +111 -0
- package/plugins/watchexec/README.md +40 -0
- package/plugins/watchexec/plugin.json +42 -0
- package/tests/test-aws-smoke.sh +56 -0
- package/tests/test-az-smoke.sh +56 -0
- package/tests/test-cli.js +116 -2
- package/tests/test-cline-smoke.sh +37 -0
- package/tests/test-eza-smoke.sh +33 -0
- package/tests/test-gcloud-smoke.sh +56 -0
- package/tests/test-gh-smoke.sh +56 -0
- package/tests/test-helm-smoke.sh +33 -0
- package/tests/test-just-smoke.sh +40 -0
- package/tests/test-kubectl-smoke.sh +37 -0
- package/tests/test-linear-smoke.sh +97 -0
- package/tests/test-nextest-smoke.sh +33 -0
- package/tests/test-npm-smoke.sh +32 -0
- package/tests/test-nullclaw-smoke.sh +51 -0
- package/tests/test-plugins-registry.js +212 -0
- package/tests/test-pnpm-smoke.sh +33 -0
- package/tests/test-poetry-smoke.sh +33 -0
- package/tests/test-pulumi-smoke.sh +33 -0
- package/tests/test-railway-smoke.sh +95 -0
- package/tests/test-stripe-smoke.sh +55 -0
- package/tests/test-supabase-smoke.sh +95 -0
- package/tests/test-terraform-smoke.sh +33 -0
- package/tests/test-uv-smoke.sh +33 -0
- package/tests/test-vercel-smoke.sh +55 -0
- package/tests/test-watchexec-smoke.sh +33 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
6
|
+
CLI="${ROOT_DIR}/cli/supercli.js"
|
|
7
|
+
|
|
8
|
+
echo "== Helm smoke test (interactive) =="
|
|
9
|
+
|
|
10
|
+
if ! command -v helm >/dev/null 2>&1; then
|
|
11
|
+
echo "Helm not found in PATH."
|
|
12
|
+
echo "Install it first: https://helm.sh/docs/intro/install/"
|
|
13
|
+
exit 1
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
if ! command -v node >/dev/null 2>&1; then
|
|
17
|
+
echo "Node.js not found in PATH"
|
|
18
|
+
exit 1
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
echo "Installing/refreshing helm plugin..."
|
|
22
|
+
node "${CLI}" plugins install helm --on-conflict replace --json >/dev/null
|
|
23
|
+
|
|
24
|
+
echo "Checking Helm CLI availability (helm version --short)..."
|
|
25
|
+
helm version --short >/dev/null
|
|
26
|
+
|
|
27
|
+
echo "Running wrapped command smoke test..."
|
|
28
|
+
node "${CLI}" helm cli version --json
|
|
29
|
+
|
|
30
|
+
echo "Running passthrough smoke test..."
|
|
31
|
+
node "${CLI}" helm version --short
|
|
32
|
+
|
|
33
|
+
echo "Smoke test completed."
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
6
|
+
CLI="${ROOT_DIR}/cli/supercli.js"
|
|
7
|
+
TMP_DIR="$(mktemp -d)"
|
|
8
|
+
trap 'rm -rf "${TMP_DIR}"' EXIT
|
|
9
|
+
|
|
10
|
+
echo "== just smoke test (interactive) =="
|
|
11
|
+
|
|
12
|
+
if ! command -v just >/dev/null 2>&1; then
|
|
13
|
+
echo "just not found in PATH."
|
|
14
|
+
echo "Install it first: https://just.systems"
|
|
15
|
+
exit 1
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
if ! command -v node >/dev/null 2>&1; then
|
|
19
|
+
echo "Node.js not found in PATH"
|
|
20
|
+
exit 1
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
cat > "${TMP_DIR}/justfile" <<'EOF'
|
|
24
|
+
default:
|
|
25
|
+
@echo smoke-ok
|
|
26
|
+
EOF
|
|
27
|
+
|
|
28
|
+
echo "Installing/refreshing just plugin..."
|
|
29
|
+
node "${CLI}" plugins install just --on-conflict replace --json >/dev/null
|
|
30
|
+
|
|
31
|
+
echo "Checking just CLI availability (just --version)..."
|
|
32
|
+
just --version >/dev/null
|
|
33
|
+
|
|
34
|
+
echo "Running wrapped command smoke test..."
|
|
35
|
+
node "${CLI}" just cli version --json
|
|
36
|
+
|
|
37
|
+
echo "Running passthrough smoke test..."
|
|
38
|
+
node "${CLI}" just --list --justfile "${TMP_DIR}/justfile"
|
|
39
|
+
|
|
40
|
+
echo "Smoke test completed."
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
6
|
+
CLI="${ROOT_DIR}/cli/supercli.js"
|
|
7
|
+
|
|
8
|
+
echo "== kubectl smoke test (interactive) =="
|
|
9
|
+
|
|
10
|
+
if ! command -v kubectl >/dev/null 2>&1; then
|
|
11
|
+
echo "kubectl not found in PATH."
|
|
12
|
+
echo "Install it first: https://kubernetes.io/docs/tasks/tools/"
|
|
13
|
+
exit 1
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
if ! command -v node >/dev/null 2>&1; then
|
|
17
|
+
echo "Node.js not found in PATH"
|
|
18
|
+
exit 1
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
echo "Installing/refreshing kubectl plugin..."
|
|
22
|
+
node "${CLI}" plugins install kubectl --on-conflict replace --json >/dev/null
|
|
23
|
+
|
|
24
|
+
echo "Checking Kubernetes context (kubectl config current-context)..."
|
|
25
|
+
if ! kubectl config current-context >/dev/null 2>&1; then
|
|
26
|
+
echo "No active kubectl context found. Configure kubeconfig first, then rerun this script."
|
|
27
|
+
echo "Verify with: kubectl config current-context"
|
|
28
|
+
exit 1
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
echo "Running wrapped command smoke test..."
|
|
32
|
+
node "${CLI}" kubectl config current-context --json
|
|
33
|
+
|
|
34
|
+
echo "Running passthrough smoke test..."
|
|
35
|
+
node "${CLI}" kubectl get pods -o json
|
|
36
|
+
|
|
37
|
+
echo "Smoke test completed."
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
6
|
+
CLI="${ROOT_DIR}/cli/supercli.js"
|
|
7
|
+
LOCAL_LINEAR_BIN="${ROOT_DIR}/node_modules/.bin/linear"
|
|
8
|
+
|
|
9
|
+
LINEAR_CMD=()
|
|
10
|
+
LINEAR_CMD_LABEL=""
|
|
11
|
+
|
|
12
|
+
resolve_linear_cmd() {
|
|
13
|
+
if command -v linear >/dev/null 2>&1; then
|
|
14
|
+
LINEAR_CMD=("linear")
|
|
15
|
+
LINEAR_CMD_LABEL="linear"
|
|
16
|
+
return 0
|
|
17
|
+
fi
|
|
18
|
+
if [[ -x "${LOCAL_LINEAR_BIN}" ]]; then
|
|
19
|
+
LINEAR_CMD=("${LOCAL_LINEAR_BIN}")
|
|
20
|
+
LINEAR_CMD_LABEL="${LOCAL_LINEAR_BIN}"
|
|
21
|
+
return 0
|
|
22
|
+
fi
|
|
23
|
+
if npx --no-install linear --help >/dev/null 2>&1; then
|
|
24
|
+
LINEAR_CMD=("npx" "--no-install" "linear")
|
|
25
|
+
LINEAR_CMD_LABEL="npx --no-install linear"
|
|
26
|
+
return 0
|
|
27
|
+
fi
|
|
28
|
+
return 1
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
run_linear() {
|
|
32
|
+
"${LINEAR_CMD[@]}" "$@"
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
echo "== Linear smoke test (interactive) =="
|
|
36
|
+
|
|
37
|
+
if ! resolve_linear_cmd; then
|
|
38
|
+
echo "Linear CLI not found."
|
|
39
|
+
echo "Checked:"
|
|
40
|
+
echo " - PATH binary: linear"
|
|
41
|
+
echo " - Local bin: ${LOCAL_LINEAR_BIN}"
|
|
42
|
+
echo " - npx --no-install linear"
|
|
43
|
+
echo "Install one of these and rerun:"
|
|
44
|
+
echo " npm install -g @schpet/linear-cli"
|
|
45
|
+
echo " npm install -D @schpet/linear-cli"
|
|
46
|
+
exit 1
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
echo "Using Linear command: ${LINEAR_CMD_LABEL}"
|
|
50
|
+
|
|
51
|
+
# Ensure dcli process-adapter preflight can resolve `linear` via PATH even when
|
|
52
|
+
# the CLI is only installed locally in node_modules/.bin.
|
|
53
|
+
if [[ -x "${LOCAL_LINEAR_BIN}" ]]; then
|
|
54
|
+
export PATH="$(dirname "${LOCAL_LINEAR_BIN}"):${PATH}"
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
if ! command -v node >/dev/null 2>&1; then
|
|
58
|
+
echo "Node.js not found in PATH"
|
|
59
|
+
exit 1
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
echo "Installing/refreshing linear plugin..."
|
|
63
|
+
node "${CLI}" plugins install linear --on-conflict replace --json >/dev/null
|
|
64
|
+
|
|
65
|
+
echo "Checking Linear authentication (auth whoami)..."
|
|
66
|
+
if ! run_linear auth whoami >/dev/null 2>&1; then
|
|
67
|
+
if [[ ! -t 0 ]]; then
|
|
68
|
+
echo "Not authenticated and no TTY available. Run a Linear login command manually, then rerun this script."
|
|
69
|
+
exit 1
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
echo "Linear login is required for live smoke tests."
|
|
73
|
+
read -r -p "Run 'linear auth login' now? [Y/n] " ANSWER
|
|
74
|
+
ANSWER="${ANSWER:-Y}"
|
|
75
|
+
if [[ "${ANSWER}" =~ ^[Yy]$ ]]; then
|
|
76
|
+
run_linear auth login
|
|
77
|
+
else
|
|
78
|
+
echo "Cancelled. Run a Linear login command and retry when ready."
|
|
79
|
+
exit 1
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
if ! run_linear auth whoami >/dev/null 2>&1; then
|
|
83
|
+
echo "Linear authentication check still failed after login."
|
|
84
|
+
echo "Verify with: ${LINEAR_CMD_LABEL} auth whoami"
|
|
85
|
+
exit 1
|
|
86
|
+
fi
|
|
87
|
+
else
|
|
88
|
+
echo "Linear CLI is already authenticated. Skipping login."
|
|
89
|
+
fi
|
|
90
|
+
|
|
91
|
+
echo "Running wrapped command smoke test..."
|
|
92
|
+
node "${CLI}" linear account whoami --json
|
|
93
|
+
|
|
94
|
+
echo "Running passthrough smoke test..."
|
|
95
|
+
node "${CLI}" linear --help
|
|
96
|
+
|
|
97
|
+
echo "Smoke test completed."
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
6
|
+
CLI="${ROOT_DIR}/cli/supercli.js"
|
|
7
|
+
|
|
8
|
+
echo "== nextest smoke test (interactive) =="
|
|
9
|
+
|
|
10
|
+
if ! command -v cargo-nextest >/dev/null 2>&1; then
|
|
11
|
+
echo "cargo-nextest not found in PATH."
|
|
12
|
+
echo "Install it first: https://nexte.st"
|
|
13
|
+
exit 1
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
if ! command -v node >/dev/null 2>&1; then
|
|
17
|
+
echo "Node.js not found in PATH"
|
|
18
|
+
exit 1
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
echo "Installing/refreshing nextest plugin..."
|
|
22
|
+
node "${CLI}" plugins install nextest --on-conflict replace --json >/dev/null
|
|
23
|
+
|
|
24
|
+
echo "Checking cargo-nextest CLI availability (cargo-nextest --version)..."
|
|
25
|
+
cargo-nextest --version >/dev/null
|
|
26
|
+
|
|
27
|
+
echo "Running wrapped command smoke test..."
|
|
28
|
+
node "${CLI}" nextest cli version --json
|
|
29
|
+
|
|
30
|
+
echo "Running passthrough smoke test..."
|
|
31
|
+
node "${CLI}" nextest --help
|
|
32
|
+
|
|
33
|
+
echo "Smoke test completed."
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
6
|
+
CLI="${ROOT_DIR}/cli/supercli.js"
|
|
7
|
+
|
|
8
|
+
echo "== npm smoke test (interactive) =="
|
|
9
|
+
|
|
10
|
+
if ! command -v npm >/dev/null 2>&1; then
|
|
11
|
+
echo "npm not found in PATH."
|
|
12
|
+
exit 1
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
if ! command -v node >/dev/null 2>&1; then
|
|
16
|
+
echo "Node.js not found in PATH"
|
|
17
|
+
exit 1
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
echo "Installing/refreshing npm plugin..."
|
|
21
|
+
node "${CLI}" plugins install npm --on-conflict replace --json >/dev/null
|
|
22
|
+
|
|
23
|
+
echo "Checking npm CLI availability (npm --version)..."
|
|
24
|
+
npm --version >/dev/null
|
|
25
|
+
|
|
26
|
+
echo "Running wrapped command smoke test..."
|
|
27
|
+
node "${CLI}" npm cli version --json
|
|
28
|
+
|
|
29
|
+
echo "Running passthrough smoke test..."
|
|
30
|
+
node "${CLI}" npm --help
|
|
31
|
+
|
|
32
|
+
echo "Smoke test completed."
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
6
|
+
CLI="${ROOT_DIR}/cli/supercli.js"
|
|
7
|
+
TEMP_HOME="$(mktemp -d)"
|
|
8
|
+
|
|
9
|
+
cleanup() {
|
|
10
|
+
rm -rf "${TEMP_HOME}"
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
trap cleanup EXIT
|
|
14
|
+
|
|
15
|
+
echo "== nullclaw skills plugin smoke test (interactive) =="
|
|
16
|
+
|
|
17
|
+
if ! command -v curl >/dev/null 2>&1; then
|
|
18
|
+
echo "curl not found in PATH."
|
|
19
|
+
exit 1
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
if ! command -v node >/dev/null 2>&1; then
|
|
23
|
+
echo "Node.js not found in PATH"
|
|
24
|
+
exit 1
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
if ! command -v nullclaw >/dev/null 2>&1; then
|
|
28
|
+
echo "nullclaw not found in PATH."
|
|
29
|
+
echo "Install it first: brew install nullclaw"
|
|
30
|
+
exit 1
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
echo "Installing/refreshing nullclaw plugin..."
|
|
34
|
+
SUPERCLI_HOME="${TEMP_HOME}" node "${CLI}" plugins install nullclaw --on-conflict replace --json >/dev/null
|
|
35
|
+
|
|
36
|
+
echo "Listing indexed nullclaw skills..."
|
|
37
|
+
SUPERCLI_HOME="${TEMP_HOME}" node "${CLI}" skills list --catalog --provider nullclaw --json
|
|
38
|
+
|
|
39
|
+
echo "Fetching agent protocol skill..."
|
|
40
|
+
SUPERCLI_HOME="${TEMP_HOME}" node "${CLI}" skills get nullclaw:root.agents
|
|
41
|
+
|
|
42
|
+
echo "Fetching command reference skill..."
|
|
43
|
+
SUPERCLI_HOME="${TEMP_HOME}" node "${CLI}" skills get nullclaw:docs.en.commands
|
|
44
|
+
|
|
45
|
+
echo "Running wrapped version command..."
|
|
46
|
+
SUPERCLI_HOME="${TEMP_HOME}" node "${CLI}" nullclaw cli version --json
|
|
47
|
+
|
|
48
|
+
echo "Running passthrough command..."
|
|
49
|
+
SUPERCLI_HOME="${TEMP_HOME}" node "${CLI}" nullclaw --help
|
|
50
|
+
|
|
51
|
+
echo "Smoke test completed."
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const { execSync } = require("child_process")
|
|
4
|
+
const fs = require("fs")
|
|
5
|
+
const os = require("os")
|
|
6
|
+
const path = require("path")
|
|
7
|
+
|
|
8
|
+
const CLI = path.join(__dirname, "..", "cli", "supercli.js")
|
|
9
|
+
|
|
10
|
+
function runNoServer(args, opts = {}) {
|
|
11
|
+
try {
|
|
12
|
+
const env = { ...process.env }
|
|
13
|
+
delete env.SUPERCLI_SERVER
|
|
14
|
+
const output = execSync(`node ${CLI} ${args}`, {
|
|
15
|
+
encoding: "utf-8",
|
|
16
|
+
timeout: 15000,
|
|
17
|
+
env,
|
|
18
|
+
...opts
|
|
19
|
+
})
|
|
20
|
+
return { ok: true, output: output.trim() }
|
|
21
|
+
} catch (err) {
|
|
22
|
+
return {
|
|
23
|
+
ok: false,
|
|
24
|
+
output: (err.stdout || "").trim(),
|
|
25
|
+
stderr: (err.stderr || "").trim(),
|
|
26
|
+
code: err.status
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function assert(cond, message) {
|
|
32
|
+
if (!cond) throw new Error(message || "Assertion failed")
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function makeRemotePluginRepo() {
|
|
36
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), "dcli-remote-plugin-"))
|
|
37
|
+
const manifestDir = path.join(root, "plugins", "supercli")
|
|
38
|
+
fs.mkdirSync(manifestDir, { recursive: true })
|
|
39
|
+
fs.writeFileSync(path.join(manifestDir, "plugin.json"), JSON.stringify({
|
|
40
|
+
name: "remote-demo",
|
|
41
|
+
version: "0.0.1",
|
|
42
|
+
description: "Remote fixture plugin",
|
|
43
|
+
source: "https://example.local/remote-demo",
|
|
44
|
+
checks: [{ type: "binary", name: "node" }],
|
|
45
|
+
commands: [
|
|
46
|
+
{
|
|
47
|
+
namespace: "remote",
|
|
48
|
+
resource: "install",
|
|
49
|
+
action: "steps",
|
|
50
|
+
description: "Returns install guidance",
|
|
51
|
+
adapter: "builtin",
|
|
52
|
+
adapterConfig: { builtin: "beads_install_steps" },
|
|
53
|
+
args: []
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}, null, 2))
|
|
57
|
+
|
|
58
|
+
execSync("git init -b main", { cwd: root, stdio: "ignore" })
|
|
59
|
+
execSync("git add .", { cwd: root, stdio: "ignore" })
|
|
60
|
+
execSync("git -c user.name='dcli-test' -c user.email='test@example.com' commit -m 'add plugin'", {
|
|
61
|
+
cwd: root,
|
|
62
|
+
stdio: "ignore"
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
return root
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
console.log("\n⚡ Plugin Registry Tests\n")
|
|
69
|
+
|
|
70
|
+
const explore = runNoServer("plugins explore --name COMMI --tags ai,missing --json")
|
|
71
|
+
assert(explore.ok, "plugins explore should succeed")
|
|
72
|
+
const exploreData = JSON.parse(explore.output)
|
|
73
|
+
assert(Array.isArray(exploreData.plugins), "plugins explore should return plugins")
|
|
74
|
+
assert(exploreData.plugins.some(p => p.name === "commiat"), "explore filters should find commiat")
|
|
75
|
+
|
|
76
|
+
const stripeExplore = runNoServer("plugins explore --name stripe --tags payments --json")
|
|
77
|
+
assert(stripeExplore.ok, "stripe explore should succeed")
|
|
78
|
+
const stripeExploreData = JSON.parse(stripeExplore.output)
|
|
79
|
+
assert(stripeExploreData.plugins.some(p => p.name === "stripe"), "explore filters should find stripe")
|
|
80
|
+
|
|
81
|
+
const vercelExplore = runNoServer("plugins explore --name vercel --tags hosting --json")
|
|
82
|
+
assert(vercelExplore.ok, "vercel explore should succeed")
|
|
83
|
+
const vercelExploreData = JSON.parse(vercelExplore.output)
|
|
84
|
+
assert(vercelExploreData.plugins.some(p => p.name === "vercel"), "explore filters should find vercel")
|
|
85
|
+
|
|
86
|
+
const linearExplore = runNoServer("plugins explore --name linear --tags issues --json")
|
|
87
|
+
assert(linearExplore.ok, "linear explore should succeed")
|
|
88
|
+
const linearExploreData = JSON.parse(linearExplore.output)
|
|
89
|
+
assert(linearExploreData.plugins.some(p => p.name === "linear"), "explore filters should find linear")
|
|
90
|
+
|
|
91
|
+
const railwayExplore = runNoServer("plugins explore --name railway --tags infrastructure --json")
|
|
92
|
+
assert(railwayExplore.ok, "railway explore should succeed")
|
|
93
|
+
const railwayExploreData = JSON.parse(railwayExplore.output)
|
|
94
|
+
assert(railwayExploreData.plugins.some(p => p.name === "railway"), "explore filters should find railway")
|
|
95
|
+
|
|
96
|
+
const supabaseExplore = runNoServer("plugins explore --name supabase --tags database --json")
|
|
97
|
+
assert(supabaseExplore.ok, "supabase explore should succeed")
|
|
98
|
+
const supabaseExploreData = JSON.parse(supabaseExplore.output)
|
|
99
|
+
assert(supabaseExploreData.plugins.some(p => p.name === "supabase"), "explore filters should find supabase")
|
|
100
|
+
|
|
101
|
+
const ghExplore = runNoServer("plugins explore --name gh --tags github --json")
|
|
102
|
+
assert(ghExplore.ok, "gh explore should succeed")
|
|
103
|
+
const ghExploreData = JSON.parse(ghExplore.output)
|
|
104
|
+
assert(ghExploreData.plugins.some(p => p.name === "gh"), "explore filters should find gh")
|
|
105
|
+
|
|
106
|
+
const kubectlExplore = runNoServer("plugins explore --name kubectl --tags kubernetes --json")
|
|
107
|
+
assert(kubectlExplore.ok, "kubectl explore should succeed")
|
|
108
|
+
const kubectlExploreData = JSON.parse(kubectlExplore.output)
|
|
109
|
+
assert(kubectlExploreData.plugins.some(p => p.name === "kubectl"), "explore filters should find kubectl")
|
|
110
|
+
|
|
111
|
+
const terraformExplore = runNoServer("plugins explore --name terraform --tags iac --json")
|
|
112
|
+
assert(terraformExplore.ok, "terraform explore should succeed")
|
|
113
|
+
const terraformExploreData = JSON.parse(terraformExplore.output)
|
|
114
|
+
assert(terraformExploreData.plugins.some(p => p.name === "terraform"), "explore filters should find terraform")
|
|
115
|
+
|
|
116
|
+
const awsExplore = runNoServer("plugins explore --name aws --tags cloud --json")
|
|
117
|
+
assert(awsExplore.ok, "aws explore should succeed")
|
|
118
|
+
const awsExploreData = JSON.parse(awsExplore.output)
|
|
119
|
+
assert(awsExploreData.plugins.some(p => p.name === "aws"), "explore filters should find aws")
|
|
120
|
+
|
|
121
|
+
const gcloudExplore = runNoServer("plugins explore --name gcloud --tags google-cloud --json")
|
|
122
|
+
assert(gcloudExplore.ok, "gcloud explore should succeed")
|
|
123
|
+
const gcloudExploreData = JSON.parse(gcloudExplore.output)
|
|
124
|
+
assert(gcloudExploreData.plugins.some(p => p.name === "gcloud"), "explore filters should find gcloud")
|
|
125
|
+
|
|
126
|
+
const azExplore = runNoServer("plugins explore --name az --tags azure --json")
|
|
127
|
+
assert(azExplore.ok, "az explore should succeed")
|
|
128
|
+
const azExploreData = JSON.parse(azExplore.output)
|
|
129
|
+
assert(azExploreData.plugins.some(p => p.name === "az"), "explore filters should find az")
|
|
130
|
+
|
|
131
|
+
const helmExplore = runNoServer("plugins explore --name helm --tags kubernetes --json")
|
|
132
|
+
assert(helmExplore.ok, "helm explore should succeed")
|
|
133
|
+
const helmExploreData = JSON.parse(helmExplore.output)
|
|
134
|
+
assert(helmExploreData.plugins.some(p => p.name === "helm"), "explore filters should find helm")
|
|
135
|
+
|
|
136
|
+
const npmExplore = runNoServer("plugins explore --name npm --tags javascript --json")
|
|
137
|
+
assert(npmExplore.ok, "npm explore should succeed")
|
|
138
|
+
const npmExploreData = JSON.parse(npmExplore.output)
|
|
139
|
+
assert(npmExploreData.plugins.some(p => p.name === "npm"), "explore filters should find npm")
|
|
140
|
+
|
|
141
|
+
const pulumiExplore = runNoServer("plugins explore --name pulumi --tags iac --json")
|
|
142
|
+
assert(pulumiExplore.ok, "pulumi explore should succeed")
|
|
143
|
+
const pulumiExploreData = JSON.parse(pulumiExplore.output)
|
|
144
|
+
assert(pulumiExploreData.plugins.some(p => p.name === "pulumi"), "explore filters should find pulumi")
|
|
145
|
+
|
|
146
|
+
const pnpmExplore = runNoServer("plugins explore --name pnpm --tags javascript --json")
|
|
147
|
+
assert(pnpmExplore.ok, "pnpm explore should succeed")
|
|
148
|
+
const pnpmExploreData = JSON.parse(pnpmExplore.output)
|
|
149
|
+
assert(pnpmExploreData.plugins.some(p => p.name === "pnpm"), "explore filters should find pnpm")
|
|
150
|
+
|
|
151
|
+
const uvExplore = runNoServer("plugins explore --name uv --tags python --json")
|
|
152
|
+
assert(uvExplore.ok, "uv explore should succeed")
|
|
153
|
+
const uvExploreData = JSON.parse(uvExplore.output)
|
|
154
|
+
assert(uvExploreData.plugins.some(p => p.name === "uv"), "explore filters should find uv")
|
|
155
|
+
|
|
156
|
+
const poetryExplore = runNoServer("plugins explore --name poetry --tags python --json")
|
|
157
|
+
assert(poetryExplore.ok, "poetry explore should succeed")
|
|
158
|
+
const poetryExploreData = JSON.parse(poetryExplore.output)
|
|
159
|
+
assert(poetryExploreData.plugins.some(p => p.name === "poetry"), "explore filters should find poetry")
|
|
160
|
+
|
|
161
|
+
const ezaExplore = runNoServer("plugins explore --name eza --tags rust --json")
|
|
162
|
+
assert(ezaExplore.ok, "eza explore should succeed")
|
|
163
|
+
const ezaExploreData = JSON.parse(ezaExplore.output)
|
|
164
|
+
assert(ezaExploreData.plugins.some(p => p.name === "eza"), "explore filters should find eza")
|
|
165
|
+
|
|
166
|
+
const justExplore = runNoServer("plugins explore --name just --tags task-runner --json")
|
|
167
|
+
assert(justExplore.ok, "just explore should succeed")
|
|
168
|
+
const justExploreData = JSON.parse(justExplore.output)
|
|
169
|
+
assert(justExploreData.plugins.some(p => p.name === "just"), "explore filters should find just")
|
|
170
|
+
|
|
171
|
+
const watchexecExplore = runNoServer("plugins explore --name watchexec --tags file-watchers --json")
|
|
172
|
+
assert(watchexecExplore.ok, "watchexec explore should succeed")
|
|
173
|
+
const watchexecExploreData = JSON.parse(watchexecExplore.output)
|
|
174
|
+
assert(watchexecExploreData.plugins.some(p => p.name === "watchexec"), "explore filters should find watchexec")
|
|
175
|
+
|
|
176
|
+
const nextestExplore = runNoServer("plugins explore --name nextest --tags testing --json")
|
|
177
|
+
assert(nextestExplore.ok, "nextest explore should succeed")
|
|
178
|
+
const nextestExploreData = JSON.parse(nextestExplore.output)
|
|
179
|
+
assert(nextestExploreData.plugins.some(p => p.name === "nextest"), "explore filters should find nextest")
|
|
180
|
+
|
|
181
|
+
const clineExplore = runNoServer("plugins explore --name cline --tags streaming --json")
|
|
182
|
+
assert(clineExplore.ok, "cline explore should succeed")
|
|
183
|
+
const clineExploreData = JSON.parse(clineExplore.output)
|
|
184
|
+
assert(clineExploreData.plugins.some(p => p.name === "cline"), "explore filters should find cline")
|
|
185
|
+
|
|
186
|
+
const nullclawExplore = runNoServer("plugins explore --name nullclaw --tags skills --json")
|
|
187
|
+
assert(nullclawExplore.ok, "nullclaw explore should succeed")
|
|
188
|
+
const nullclawExploreData = JSON.parse(nullclawExplore.output)
|
|
189
|
+
assert(nullclawExploreData.plugins.some(p => p.name === "nullclaw"), "explore filters should find nullclaw")
|
|
190
|
+
|
|
191
|
+
const repoPath = makeRemotePluginRepo()
|
|
192
|
+
const install = runNoServer(`plugins install --git ${repoPath} --manifest-path plugins/supercli/plugin.json --ref main --json`)
|
|
193
|
+
assert(install.ok, "remote git install should succeed")
|
|
194
|
+
const installData = JSON.parse(install.output)
|
|
195
|
+
assert(installData.plugin === "remote-demo", "installed plugin should match remote manifest")
|
|
196
|
+
|
|
197
|
+
const show = runNoServer("plugins show remote-demo --json")
|
|
198
|
+
assert(show.ok, "plugins show for remote plugin should succeed")
|
|
199
|
+
const showData = JSON.parse(show.output)
|
|
200
|
+
assert(showData.plugin.resolved_from && showData.plugin.resolved_from.type === "git", "remote plugin should track git source")
|
|
201
|
+
|
|
202
|
+
const doctor = runNoServer("plugins doctor remote-demo --json")
|
|
203
|
+
assert(doctor.ok, "doctor remote plugin should succeed")
|
|
204
|
+
const doctorData = JSON.parse(doctor.output)
|
|
205
|
+
assert(doctorData.ok === true, "remote plugin doctor should pass")
|
|
206
|
+
|
|
207
|
+
const remove = runNoServer("plugins remove remote-demo --json")
|
|
208
|
+
assert(remove.ok, "remote plugin remove should succeed")
|
|
209
|
+
|
|
210
|
+
fs.rmSync(repoPath, { recursive: true, force: true })
|
|
211
|
+
|
|
212
|
+
console.log("✅ Plugin registry tests passed\n")
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
6
|
+
CLI="${ROOT_DIR}/cli/supercli.js"
|
|
7
|
+
|
|
8
|
+
echo "== pnpm smoke test (interactive) =="
|
|
9
|
+
|
|
10
|
+
if ! command -v pnpm >/dev/null 2>&1; then
|
|
11
|
+
echo "pnpm not found in PATH."
|
|
12
|
+
echo "Install it first: https://pnpm.io/installation"
|
|
13
|
+
exit 1
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
if ! command -v node >/dev/null 2>&1; then
|
|
17
|
+
echo "Node.js not found in PATH"
|
|
18
|
+
exit 1
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
echo "Installing/refreshing pnpm plugin..."
|
|
22
|
+
node "${CLI}" plugins install pnpm --on-conflict replace --json >/dev/null
|
|
23
|
+
|
|
24
|
+
echo "Checking pnpm CLI availability (pnpm --version)..."
|
|
25
|
+
pnpm --version >/dev/null
|
|
26
|
+
|
|
27
|
+
echo "Running wrapped command smoke test..."
|
|
28
|
+
node "${CLI}" pnpm cli version --json
|
|
29
|
+
|
|
30
|
+
echo "Running passthrough smoke test..."
|
|
31
|
+
node "${CLI}" pnpm --help
|
|
32
|
+
|
|
33
|
+
echo "Smoke test completed."
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
6
|
+
CLI="${ROOT_DIR}/cli/supercli.js"
|
|
7
|
+
|
|
8
|
+
echo "== Poetry smoke test (interactive) =="
|
|
9
|
+
|
|
10
|
+
if ! command -v poetry >/dev/null 2>&1; then
|
|
11
|
+
echo "Poetry not found in PATH."
|
|
12
|
+
echo "Install it first: https://python-poetry.org/docs/#installation"
|
|
13
|
+
exit 1
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
if ! command -v node >/dev/null 2>&1; then
|
|
17
|
+
echo "Node.js not found in PATH"
|
|
18
|
+
exit 1
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
echo "Installing/refreshing poetry plugin..."
|
|
22
|
+
node "${CLI}" plugins install poetry --on-conflict replace --json >/dev/null
|
|
23
|
+
|
|
24
|
+
echo "Checking Poetry CLI availability (poetry --version)..."
|
|
25
|
+
poetry --version >/dev/null
|
|
26
|
+
|
|
27
|
+
echo "Running wrapped command smoke test..."
|
|
28
|
+
node "${CLI}" poetry cli version --json
|
|
29
|
+
|
|
30
|
+
echo "Running passthrough smoke test..."
|
|
31
|
+
node "${CLI}" poetry --help
|
|
32
|
+
|
|
33
|
+
echo "Smoke test completed."
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
6
|
+
CLI="${ROOT_DIR}/cli/supercli.js"
|
|
7
|
+
|
|
8
|
+
echo "== Pulumi smoke test (interactive) =="
|
|
9
|
+
|
|
10
|
+
if ! command -v pulumi >/dev/null 2>&1; then
|
|
11
|
+
echo "Pulumi not found in PATH."
|
|
12
|
+
echo "Install it first: https://www.pulumi.com/docs/iac/download-install/"
|
|
13
|
+
exit 1
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
if ! command -v node >/dev/null 2>&1; then
|
|
17
|
+
echo "Node.js not found in PATH"
|
|
18
|
+
exit 1
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
echo "Installing/refreshing pulumi plugin..."
|
|
22
|
+
node "${CLI}" plugins install pulumi --on-conflict replace --json >/dev/null
|
|
23
|
+
|
|
24
|
+
echo "Checking Pulumi CLI availability (pulumi version)..."
|
|
25
|
+
pulumi version >/dev/null
|
|
26
|
+
|
|
27
|
+
echo "Running wrapped command smoke test..."
|
|
28
|
+
node "${CLI}" pulumi cli version --json
|
|
29
|
+
|
|
30
|
+
echo "Running passthrough smoke test..."
|
|
31
|
+
node "${CLI}" pulumi version
|
|
32
|
+
|
|
33
|
+
echo "Smoke test completed."
|