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
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# supercli — Universal Skill Router for AI Agents
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Discover and execute skills across CLIs, APIs, MCP servers, workflows, and custom automations through a single agent-friendly interface.
|
|
4
4
|
|
|
5
5
|
## BIN Aliases
|
|
6
6
|
|
|
@@ -9,27 +9,93 @@ Config-driven, AI-friendly CLI that dynamically generates commands from cloud co
|
|
|
9
9
|
- scli (Brand smaller)
|
|
10
10
|
- superacli (What was available) (Super Agent/ic CLI)
|
|
11
11
|
|
|
12
|
+
## What Is a Skill Layer?
|
|
13
|
+
|
|
14
|
+
Everything the system exposes becomes a **skill**:
|
|
15
|
+
|
|
16
|
+
| Source | Turns into |
|
|
17
|
+
| --- | --- |
|
|
18
|
+
| CLI command | Skill |
|
|
19
|
+
| OpenAPI endpoint | Skill |
|
|
20
|
+
| MCP tool | Skill |
|
|
21
|
+
| HTTP request | Skill |
|
|
22
|
+
| Workflow / plan step | Skill |
|
|
23
|
+
|
|
24
|
+
Agents query the skill layer once, and supercli handles discovery, routing, and execution across every connected ecosystem. Skills are addressable (e.g., `beads.issue.list` or `docker.container.ps`), searchable, and consistently described so agents never need bespoke integrations per tool.
|
|
25
|
+
|
|
26
|
+
### Core Responsibilities
|
|
27
|
+
|
|
28
|
+
1. **Discovery** – build a real-time catalog of skills across bundled harnesses, adapters, and plugins.
|
|
29
|
+
2. **Routing** – resolve the right execution adapter (CLI, HTTP, MCP, custom runtime) from an incoming skill ID.
|
|
30
|
+
3. **Execution** – normalize inputs/outputs, enforce envelopes, and surface deterministic status codes.
|
|
31
|
+
4. **Extension** – let teams add new skills by dropping in manifests, OpenAPI specs, or plugin harnesses.
|
|
32
|
+
|
|
33
|
+
Example skill executions:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
supercli beads issue list # Calls beads skill adapter
|
|
37
|
+
supercli gwc drive files list # Calls Google Workspace adapter
|
|
38
|
+
supercli docker container ps # Calls Docker plugin (when installed)
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Skill Sources
|
|
42
|
+
|
|
43
|
+
supercli generates skills from six primary channels:
|
|
44
|
+
|
|
45
|
+
- **Bundled Harnesses** – beads (tasks/issues), gwc (Google Workspace), commiat (commit automation)
|
|
46
|
+
- **Built-in Adapters** – OpenAPI specs, raw HTTP integrations, MCP (Model Context Protocol) servers
|
|
47
|
+
- **Plugin Harnesses** – community or internal CLIs installed via `supercli plugins install`
|
|
48
|
+
- **AI & Plans** – natural-language `ask` commands create execution DAGs composed of skills
|
|
49
|
+
- **Workflows** – repeatable plans and stored executions referenced as skills
|
|
50
|
+
- **Future Extensions** – popular CLIs such as gh, aws, docker, kubectl, terraform, etc.
|
|
51
|
+
|
|
12
52
|
## Architecture
|
|
13
53
|
|
|
14
54
|
```
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
55
|
+
Agents / Humans
|
|
56
|
+
│
|
|
57
|
+
supercli runtime
|
|
58
|
+
│
|
|
59
|
+
Skill Discovery Layer
|
|
60
|
+
│
|
|
61
|
+
Skill Router Core
|
|
62
|
+
│
|
|
63
|
+
┌──────────────┼──────────────┬───────────────┐
|
|
64
|
+
│ │ │ │
|
|
65
|
+
CLI Harnesses OpenAPI / HTTP MCP Servers Workflows / Plugins
|
|
26
66
|
```
|
|
27
67
|
|
|
68
|
+
The router intelligently:
|
|
69
|
+
- **Discovers** available skills from every adapter and caches metadata for fast lookup
|
|
70
|
+
- **Routes** commands to the correct harness based on namespace and capability metadata
|
|
71
|
+
- **Executes** with unified error handling, envelopes, and output formatting
|
|
72
|
+
- **Surfaces** machine-readable descriptions so agents can plan against the skill graph
|
|
73
|
+
|
|
74
|
+
## Why Skills Matter
|
|
75
|
+
|
|
76
|
+
Traditional CLIs force agents to learn tool-specific syntax. supercli replaces that effort with a discoverable skill graph so agents can:
|
|
77
|
+
|
|
78
|
+
- Search (`supercli skills search "database"`) to find relevant capabilities instantly
|
|
79
|
+
- Inspect (`supercli skills get beads.issue.create`) to pull schema-rich metadata
|
|
80
|
+
- Compose (`supercli plan …`) to build DAGs out of skills without writing glue code
|
|
81
|
+
- Delegate execution to the same router regardless of whether the source is a CLI, API, or MCP tool
|
|
82
|
+
|
|
83
|
+
## Skill Mesh Vision
|
|
84
|
+
|
|
85
|
+
supercli is steadily evolving toward a broader **skill mesh** that provides discovery, routing, execution, composition, and governance across every tool in the stack. Near-term focus areas include:
|
|
86
|
+
|
|
87
|
+
- **Deeper skill registry** with richer metadata, tagging, and policy controls
|
|
88
|
+
- **Graph-native discovery** so agents can traverse related skills and capability clusters
|
|
89
|
+
- **Execution DAG observability** for multi-skill plans with retries and status streaming
|
|
90
|
+
- **Agent endpoints** that expose the router over HTTP/webhooks for direct agent access beyond the CLI
|
|
91
|
+
|
|
92
|
+
These directional goals keep the README aligned with the system’s trajectory without overpromising unshipped features.
|
|
93
|
+
|
|
28
94
|
## Quick Start
|
|
29
95
|
|
|
30
96
|
```bash
|
|
31
97
|
# Quick usage (no install, local-only by default)
|
|
32
|
-
npx supercli help
|
|
98
|
+
npx supercli help # List available harnesses
|
|
33
99
|
npx supercli skills teach
|
|
34
100
|
|
|
35
101
|
# Install
|
|
@@ -46,57 +112,88 @@ npm start
|
|
|
46
112
|
# Open Web UI
|
|
47
113
|
open http://localhost:3000
|
|
48
114
|
|
|
49
|
-
# CLI usage
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
115
|
+
# CLI usage - Multi-harness routing
|
|
116
|
+
supercli help # List all harnesses
|
|
117
|
+
supercli beads # List beads skills
|
|
118
|
+
supercli gwc # List Google Workspace skills
|
|
119
|
+
supercli beads issue list # Execute beads command
|
|
120
|
+
supercli gwc drive files list # Execute Google Workspace command
|
|
53
121
|
|
|
54
|
-
#
|
|
55
|
-
|
|
56
|
-
|
|
122
|
+
# Skills discovery across harnesses
|
|
123
|
+
supercli skills list # All skills from all harnesses
|
|
124
|
+
supercli skills search "database" # Full-text search across harnesses
|
|
125
|
+
|
|
126
|
+
# AI-driven multi-harness execution
|
|
127
|
+
supercli ask "show my tasks and recent commits"
|
|
128
|
+
|
|
129
|
+
# Manage plugin harnesses
|
|
130
|
+
supercli plugins list
|
|
131
|
+
supercli plugins explore # Browse available plugins
|
|
132
|
+
supercli plugins install commiat # Install community plugin
|
|
57
133
|
```
|
|
58
134
|
|
|
59
135
|
## CLI Usage
|
|
60
136
|
|
|
137
|
+
### Multi-Harness Routing
|
|
138
|
+
|
|
61
139
|
```bash
|
|
140
|
+
# Basic harness routing
|
|
141
|
+
supercli <harness> # List skills in harness
|
|
142
|
+
supercli <harness> <skill-group> <action> # Execute skill
|
|
143
|
+
|
|
144
|
+
# Examples across different harnesses
|
|
145
|
+
supercli beads issue create --title "Fix bug"
|
|
146
|
+
supercli beads issue list --status open
|
|
147
|
+
supercli gwc drive files list --limit 10
|
|
148
|
+
supercli commiat validate --commit-msg "my message"
|
|
149
|
+
|
|
62
150
|
# Discovery
|
|
63
|
-
supercli help # List
|
|
64
|
-
supercli
|
|
65
|
-
supercli
|
|
151
|
+
supercli help # List all harnesses
|
|
152
|
+
supercli skills list # List all skills from all harnesses
|
|
153
|
+
supercli skills search --harness beads # Search within harness
|
|
154
|
+
supercli skills search "database" # Full-text search across harnesses
|
|
66
155
|
|
|
67
156
|
# Inspection
|
|
68
|
-
supercli inspect
|
|
69
|
-
supercli
|
|
157
|
+
supercli inspect beads issue create # Command details + schema
|
|
158
|
+
supercli skills get beads.issue.create # Get skill metadata
|
|
70
159
|
|
|
71
160
|
# Execution
|
|
72
|
-
supercli
|
|
73
|
-
supercli
|
|
74
|
-
|
|
75
|
-
# Plans (DAG)
|
|
76
|
-
supercli plan <ns> <res> <act> [--args] # Dry-run execution plan
|
|
77
|
-
supercli execute <plan_id> # Execute stored plan
|
|
161
|
+
supercli beads issue create --title "New task" # Standard execution
|
|
162
|
+
supercli beads issue list --json # JSON output
|
|
163
|
+
supercli beads issue list --compact # Token-optimized output
|
|
78
164
|
|
|
79
|
-
#
|
|
80
|
-
supercli
|
|
81
|
-
supercli
|
|
82
|
-
supercli skills teach # Emit starter meta-skill (default format)
|
|
83
|
-
supercli skills get <ns.res.act> --show-dag
|
|
165
|
+
# Plans (DAG execution)
|
|
166
|
+
supercli plan beads issue create --title "Task" # Dry-run execution plan
|
|
167
|
+
supercli execute <plan_id> # Execute stored plan
|
|
84
168
|
|
|
85
169
|
# Natural Language (AI)
|
|
86
|
-
export OPENAI_BASE_URL=https://api.openai.com/v1
|
|
87
|
-
supercli ask "list
|
|
170
|
+
export OPENAI_BASE_URL=https://api.openai.com/v1 # Enable AI resolution
|
|
171
|
+
supercli ask "list my tasks and summarize them" # Execute across harnesses
|
|
88
172
|
|
|
89
173
|
# Config & Server
|
|
90
|
-
supercli sync # Sync local cache from
|
|
174
|
+
supercli sync # Sync local cache from server
|
|
91
175
|
supercli config show # Show cache info
|
|
92
|
-
supercli --server # Start
|
|
176
|
+
supercli --server # Start backend server
|
|
177
|
+
|
|
178
|
+
# Plugin Harness Management
|
|
179
|
+
supercli plugins list # List installed harnesses
|
|
180
|
+
supercli plugins explore # Browse plugin registry
|
|
181
|
+
supercli plugins explore --tags git,ai # Search registry by tags
|
|
182
|
+
supercli plugins install commiat # Install from registry
|
|
183
|
+
supercli plugins install --git https://github.com/org/repo.git --ref main
|
|
184
|
+
supercli plugins show commiat # Show harness details
|
|
185
|
+
supercli plugins doctor commiat # Check harness health
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Built-in Adapters
|
|
93
189
|
|
|
190
|
+
```bash
|
|
94
191
|
# Local MCP registry (no server required)
|
|
95
192
|
supercli mcp list
|
|
96
193
|
supercli mcp add summarize-local --url http://127.0.0.1:8787
|
|
97
194
|
supercli mcp remove summarize-local
|
|
98
195
|
|
|
99
|
-
# Stdio MCP demo
|
|
196
|
+
# Stdio MCP demo
|
|
100
197
|
node examples/mcp-stdio/install-demo.js
|
|
101
198
|
supercli ai text summarize --text "Hello world" --json
|
|
102
199
|
|
|
@@ -118,6 +215,85 @@ supercli --help-json # Machine-readable capabilities
|
|
|
118
215
|
| `--human` | Formatted tables and key-value output |
|
|
119
216
|
| `--compact` | Compressed JSON (shortened keys) |
|
|
120
217
|
|
|
218
|
+
## Plugins as Harnesses
|
|
219
|
+
|
|
220
|
+
A **plugin harness** bridges dcli to an external CLI tool. Each plugin:
|
|
221
|
+
- Defines a manifest (`plugin.json`) with available commands
|
|
222
|
+
- Maps CLI arguments to dcli's command structure
|
|
223
|
+
- Supports command wrapping, passthrough, remote skills catalogs, or any combination of those patterns
|
|
224
|
+
- Includes dependency checks and installation guidance
|
|
225
|
+
|
|
226
|
+
### Currently Supported Harnesses
|
|
227
|
+
|
|
228
|
+
**Bundled with dcli:**
|
|
229
|
+
- **beads** (`br`) — Task/issue management via beads_rust
|
|
230
|
+
- **gwc** (`gws`) — Google Workspace CLI with full passthrough
|
|
231
|
+
- **commiat** — Commit automation with full passthrough
|
|
232
|
+
|
|
233
|
+
**Built-in Adapters:**
|
|
234
|
+
- **OpenAPI** — Generic OpenAPI spec resolution
|
|
235
|
+
- **HTTP** — Raw HTTP requests
|
|
236
|
+
- **MCP** — Model Context Protocol tools (stdio and SSE/HTTP)
|
|
237
|
+
|
|
238
|
+
**Popular Community Harnesses** (via plugins):
|
|
239
|
+
- GitHub CLI (`gh`)
|
|
240
|
+
- AWS CLI (`aws`)
|
|
241
|
+
- Google Cloud CLI (`gcloud`)
|
|
242
|
+
- Azure CLI (`az`)
|
|
243
|
+
- Docker (`docker`)
|
|
244
|
+
- Kubernetes (`kubectl`)
|
|
245
|
+
- Terraform (`terraform`)
|
|
246
|
+
- npm, pip, cargo (package managers)
|
|
247
|
+
- git, git-cliff (version control)
|
|
248
|
+
- And many more...
|
|
249
|
+
|
|
250
|
+
See [docs/supported-harnesses.md](docs/supported-harnesses.md) for the complete list.
|
|
251
|
+
|
|
252
|
+
### Installing Plugin Harnesses
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
# From built-in registry
|
|
256
|
+
supercli plugins install commiat
|
|
257
|
+
|
|
258
|
+
# From GitHub repository
|
|
259
|
+
supercli plugins install --git https://github.com/org/plugin-harness.git --ref main
|
|
260
|
+
|
|
261
|
+
# Local directory (development)
|
|
262
|
+
supercli plugins install ./path/to/plugin
|
|
263
|
+
|
|
264
|
+
# Browse registry
|
|
265
|
+
supercli plugins explore
|
|
266
|
+
supercli plugins explore --tags "github,ai"
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### Creating Your Own Harness
|
|
270
|
+
|
|
271
|
+
Turn any CLI into a dcli harness:
|
|
272
|
+
|
|
273
|
+
1. Create a `plugin.json` manifest defining commands
|
|
274
|
+
2. Specify wrapping or passthrough behavior
|
|
275
|
+
3. Include dependency checks and help guidance
|
|
276
|
+
4. Test with `supercli plugins install ./path`
|
|
277
|
+
5. Publish to registry with `supercli plugins publish`
|
|
278
|
+
|
|
279
|
+
See [docs/plugin-harness-guide.md](docs/plugin-harness-guide.md) for detailed instructions and examples.
|
|
280
|
+
|
|
281
|
+
### Planned Harnesses
|
|
282
|
+
|
|
283
|
+
The dcli community is actively developing plugins for popular CLIs:
|
|
284
|
+
|
|
285
|
+
- **GitHub Ecosystem**: gh (GitHub CLI), GitHub Actions workflows
|
|
286
|
+
- **Cloud Platforms**: aws, gcloud, az CLI tools
|
|
287
|
+
- **Container & DevOps**: docker, docker-compose, kubectl, helm, terraform
|
|
288
|
+
- **Version Control**: git, git-cliff, commitizen
|
|
289
|
+
- **Package Managers**: npm, pip, cargo, pnpm, yarn
|
|
290
|
+
- **AI/ML Tools**: huggingface, langchain, LLM CLIs
|
|
291
|
+
- **Infrastructure**: ansible, pulumi
|
|
292
|
+
- **Monitoring**: datadog, prometheus CLIs
|
|
293
|
+
- Many others based on community requests
|
|
294
|
+
|
|
295
|
+
Want to contribute a plugin harness? [See plugin guide](docs/plugin-harness-guide.md) and submit to the registry!
|
|
296
|
+
|
|
121
297
|
## Output Envelope
|
|
122
298
|
|
|
123
299
|
Every command returns a deterministic envelope:
|
|
@@ -158,11 +334,16 @@ Every command returns a deterministic envelope:
|
|
|
158
334
|
| GET | `/api/jobs` | Execution history |
|
|
159
335
|
| GET | `/api/jobs/stats` | Aggregate stats |
|
|
160
336
|
|
|
161
|
-
## Adapters
|
|
337
|
+
## Built-in Harnesses & Adapters
|
|
338
|
+
|
|
339
|
+
The following are built-in to dcli (no plugins required):
|
|
162
340
|
|
|
163
341
|
- **http** — Raw HTTP requests (method, url, headers)
|
|
164
342
|
- **openapi** — Resolves operation from OpenAPI spec
|
|
165
343
|
- **mcp** — Calls MCP server tools (supports both HTTP endpoints and local Stdio processes)
|
|
344
|
+
- **beads** — Task/issue management (if br is installed)
|
|
345
|
+
- **gwc** — Google Workspace (if gws is installed)
|
|
346
|
+
- **commiat** — Commit automation (if commiat is installed)
|
|
166
347
|
|
|
167
348
|
## Tech Stack
|
|
168
349
|
|
|
@@ -170,6 +351,8 @@ Every command returns a deterministic envelope:
|
|
|
170
351
|
- Pluggable KV Storage (Local JSON files by default, MongoDB optional)
|
|
171
352
|
- EJS + Vue3 CDN + Tailwind CDN + DaisyUI CDN
|
|
172
353
|
- Zero build tools
|
|
354
|
+
- Extensible plugin system for registering new harnesses
|
|
355
|
+
- Support for OpenAPI, HTTP, MCP, and custom CLI adapters
|
|
173
356
|
|
|
174
357
|
## Contributors
|
|
175
358
|
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
const { validateAdapterConfig } = require("../cli/adapter-schema")
|
|
2
|
+
|
|
3
|
+
describe("adapter-schema", () => {
|
|
4
|
+
test("accepts valid process adapter", () => {
|
|
5
|
+
expect(() => validateAdapterConfig({
|
|
6
|
+
adapter: "process",
|
|
7
|
+
adapterConfig: { command: "br", baseArgs: ["list"], timeout_ms: 5000 }
|
|
8
|
+
})).not.toThrow()
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
test("ignores unknown adapters", () => {
|
|
12
|
+
expect(() => validateAdapterConfig({ adapter: "custom" })).not.toThrow()
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
test("rejects non-object adapterConfig", () => {
|
|
16
|
+
expect(() => validateAdapterConfig({ adapter: "http", adapterConfig: "string" })).toThrow(/requires adapterConfig object/)
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
test("rejects invalid common types", () => {
|
|
20
|
+
expect(() => validateAdapterConfig({ adapter: "process", adapterConfig: { command: "a", parseJson: "yes" } })).toThrow(/must be boolean/)
|
|
21
|
+
expect(() => validateAdapterConfig({ adapter: "process", adapterConfig: { command: "a", cwd: 123 } })).toThrow(/must be string/)
|
|
22
|
+
expect(() => validateAdapterConfig({ adapter: "process", adapterConfig: { command: "a", safetyLevel: true } })).toThrow(/must be string/)
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
test("timeout_ms validation", () => {
|
|
26
|
+
expect(() => validateAdapterConfig({ adapter: "process", adapterConfig: { command: "a", timeout_ms: "none" } })).toThrow(/positive number/)
|
|
27
|
+
expect(() => validateAdapterConfig({ adapter: "process", adapterConfig: { command: "a", timeout_ms: -1 } })).toThrow(/positive number/)
|
|
28
|
+
expect(() => validateAdapterConfig({ adapter: "process", adapterConfig: { command: "a", timeout_ms: 20000 } })).toThrow(/cannot exceed 15000ms/)
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
test("http adapter validation", () => {
|
|
32
|
+
expect(() => validateAdapterConfig({ adapter: "http", adapterConfig: { url: 123 } })).toThrow(/requires adapterConfig.url/)
|
|
33
|
+
expect(() => validateAdapterConfig({ adapter: "http", adapterConfig: { url: "u", method: 1 } })).toThrow(/method must be string/)
|
|
34
|
+
expect(() => validateAdapterConfig({ adapter: "http", adapterConfig: { url: "u" } })).not.toThrow()
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
test("openapi adapter validation", () => {
|
|
38
|
+
expect(() => validateAdapterConfig({ adapter: "openapi", adapterConfig: { spec: 1 } })).toThrow(/requires adapterConfig.spec/)
|
|
39
|
+
expect(() => validateAdapterConfig({ adapter: "openapi", adapterConfig: { spec: "s", operationId: 1 } })).toThrow(/requires adapterConfig.operationId/)
|
|
40
|
+
expect(() => validateAdapterConfig({ adapter: "openapi", adapterConfig: { spec: "s", operationId: "o" } })).not.toThrow()
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
test("mcp adapter validation", () => {
|
|
44
|
+
expect(() => validateAdapterConfig({ adapter: "mcp", adapterConfig: { tool: 1 } })).toThrow(/requires adapterConfig.tool/)
|
|
45
|
+
expect(() => validateAdapterConfig({ adapter: "mcp", adapterConfig: { tool: "t" } })).toThrow(/requires one source/)
|
|
46
|
+
expect(() => validateAdapterConfig({ adapter: "mcp", adapterConfig: { tool: "t", server: "s" } })).not.toThrow()
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
test("process adapter validation", () => {
|
|
50
|
+
expect(() => validateAdapterConfig({ adapter: "process", adapterConfig: { command: 1 } })).toThrow(/requires adapterConfig.command/)
|
|
51
|
+
expect(() => validateAdapterConfig({ adapter: "process", adapterConfig: { command: "a", baseArgs: "none" } })).toThrow(/must be an array/)
|
|
52
|
+
expect(() => validateAdapterConfig({ adapter: "process", adapterConfig: { command: "a", positionalArgs: "none" } })).toThrow(/must be an array/)
|
|
53
|
+
expect(() => validateAdapterConfig({ adapter: "process", adapterConfig: { command: "a", passthrough: "yes" } })).toThrow(/must be boolean/)
|
|
54
|
+
expect(() => validateAdapterConfig({ adapter: "process", adapterConfig: { command: "a", flagsBeforePositionals: "yes" } })).toThrow(/must be boolean/)
|
|
55
|
+
expect(() => validateAdapterConfig({ adapter: "process", adapterConfig: { command: "a", missingDependencyHelp: 1 } })).toThrow(/must be string/)
|
|
56
|
+
expect(() => validateAdapterConfig({ adapter: "process", adapterConfig: { command: "a", env: [] } })).toThrow(/must be object/)
|
|
57
|
+
expect(() => validateAdapterConfig({ adapter: "process", adapterConfig: { command: "a", stream: true } })).toThrow(/must be string/)
|
|
58
|
+
expect(() => validateAdapterConfig({ adapter: "process", adapterConfig: { command: "a", stream: "sse" } })).toThrow(/must be 'jsonl'/)
|
|
59
|
+
expect(() => validateAdapterConfig({ adapter: "process", adapterConfig: { command: "a", stream: "jsonl" } })).not.toThrow()
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
test("builtin adapter validation", () => {
|
|
63
|
+
expect(() => validateAdapterConfig({ adapter: "builtin", adapterConfig: { builtin: 1 } })).toThrow(/requires adapterConfig.builtin/)
|
|
64
|
+
expect(() => validateAdapterConfig({ adapter: "builtin", adapterConfig: { builtin: "b" } })).not.toThrow()
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
test("shell adapter validation", () => {
|
|
68
|
+
expect(() => validateAdapterConfig({ adapter: "shell", adapterConfig: { script: 1, unsafe: true } })).toThrow(/requires adapterConfig.script/)
|
|
69
|
+
expect(() => validateAdapterConfig({ adapter: "shell", adapterConfig: { script: "s", unsafe: true, shell: 1 } })).toThrow(/shell must be string/)
|
|
70
|
+
expect(() => validateAdapterConfig({ adapter: "shell", adapterConfig: { script: "s", unsafe: true, env: "none" } })).toThrow(/must be object/)
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
test("rejects interactive config", () => {
|
|
74
|
+
expect(() => validateAdapterConfig({
|
|
75
|
+
adapter: "http",
|
|
76
|
+
adapterConfig: { url: "https://example.com", non_interactive: false }
|
|
77
|
+
})).toThrow(/Interactive command execution is not supported/)
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
test("requires unsafe true for shell adapter", () => {
|
|
81
|
+
expect(() => validateAdapterConfig({
|
|
82
|
+
adapter: "shell",
|
|
83
|
+
adapterConfig: { script: "echo hi" }
|
|
84
|
+
})).toThrow(/unsafe=true/)
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
test("accepts shell adapter with unsafe true", () => {
|
|
88
|
+
expect(() => validateAdapterConfig({
|
|
89
|
+
adapter: "shell",
|
|
90
|
+
adapterConfig: { script: "echo '{\"ok\":true}'", unsafe: true, timeout_ms: 1000 }
|
|
91
|
+
})).not.toThrow()
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
test("accepts process safety metadata", () => {
|
|
95
|
+
expect(() => validateAdapterConfig({
|
|
96
|
+
adapter: "process",
|
|
97
|
+
adapterConfig: {
|
|
98
|
+
command: "docker",
|
|
99
|
+
safetyLevel: "guarded",
|
|
100
|
+
interactiveFlags: ["-i", "--interactive"],
|
|
101
|
+
requiresInteractive: false
|
|
102
|
+
}
|
|
103
|
+
})).not.toThrow()
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
test("rejects non-array interactiveFlags", () => {
|
|
107
|
+
expect(() => validateAdapterConfig({
|
|
108
|
+
adapter: "process",
|
|
109
|
+
adapterConfig: { command: "docker", interactiveFlags: "--tty" }
|
|
110
|
+
})).toThrow(/interactiveFlags must be an array/)
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
test("rejects non-string interactiveFlags values", () => {
|
|
114
|
+
expect(() => validateAdapterConfig({
|
|
115
|
+
adapter: "process",
|
|
116
|
+
adapterConfig: { command: "docker", interactiveFlags: ["--tty", 42] }
|
|
117
|
+
})).toThrow(/interactiveFlags values must be strings/)
|
|
118
|
+
})
|
|
119
|
+
})
|