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.
Files changed (389) hide show
  1. package/.beads/.br_history/issues.20260308_200823_636718328.jsonl +20 -0
  2. package/.beads/.br_history/issues.20260308_200823_636718328.jsonl.meta.json +1 -0
  3. package/.beads/.br_history/issues.20260308_200827_033159453.jsonl +21 -0
  4. package/.beads/.br_history/issues.20260308_200827_033159453.jsonl.meta.json +1 -0
  5. package/.beads/.br_history/issues.20260308_200829_595900053.jsonl +22 -0
  6. package/.beads/.br_history/issues.20260308_200829_595900053.jsonl.meta.json +1 -0
  7. package/.beads/.br_history/issues.20260308_200834_079930100.jsonl +23 -0
  8. package/.beads/.br_history/issues.20260308_200834_079930100.jsonl.meta.json +1 -0
  9. package/.beads/.br_history/issues.20260308_200858_370924996.jsonl +24 -0
  10. package/.beads/.br_history/issues.20260308_200858_370924996.jsonl.meta.json +1 -0
  11. package/.beads/.br_history/issues.20260308_201031_019730855.jsonl +24 -0
  12. package/.beads/.br_history/issues.20260308_201031_019730855.jsonl.meta.json +1 -0
  13. package/.beads/.br_history/issues.20260308_201031_578974884.jsonl +24 -0
  14. package/.beads/.br_history/issues.20260308_201031_578974884.jsonl.meta.json +1 -0
  15. package/.beads/.br_history/issues.20260308_201054_780345548.jsonl +24 -0
  16. package/.beads/.br_history/issues.20260308_201054_780345548.jsonl.meta.json +1 -0
  17. package/.beads/.br_history/issues.20260308_201054_896980019.jsonl +24 -0
  18. package/.beads/.br_history/issues.20260308_201054_896980019.jsonl.meta.json +1 -0
  19. package/.beads/.br_history/issues.20260308_201128_599819688.jsonl +24 -0
  20. package/.beads/.br_history/issues.20260308_201128_599819688.jsonl.meta.json +1 -0
  21. package/.beads/.br_history/issues.20260308_201128_710221699.jsonl +24 -0
  22. package/.beads/.br_history/issues.20260308_201128_710221699.jsonl.meta.json +1 -0
  23. package/.beads/.br_history/issues.20260308_201204_745649213.jsonl +24 -0
  24. package/.beads/.br_history/issues.20260308_201204_745649213.jsonl.meta.json +1 -0
  25. package/.beads/.br_history/issues.20260308_201338_908436144.jsonl +24 -0
  26. package/.beads/.br_history/issues.20260308_201338_908436144.jsonl.meta.json +1 -0
  27. package/.beads/.br_history/issues.20260308_201344_734860714.jsonl +25 -0
  28. package/.beads/.br_history/issues.20260308_201344_734860714.jsonl.meta.json +1 -0
  29. package/.beads/.br_history/issues.20260308_201630_819282295.jsonl +25 -0
  30. package/.beads/.br_history/issues.20260308_201630_819282295.jsonl.meta.json +1 -0
  31. package/.beads/.br_history/issues.20260308_203538_054279699.jsonl +25 -0
  32. package/.beads/.br_history/issues.20260308_203538_054279699.jsonl.meta.json +1 -0
  33. package/.beads/.br_history/issues.20260308_203547_597113070.jsonl +26 -0
  34. package/.beads/.br_history/issues.20260308_203547_597113070.jsonl.meta.json +1 -0
  35. package/.beads/.br_history/issues.20260308_203547_775139216.jsonl +27 -0
  36. package/.beads/.br_history/issues.20260308_203547_775139216.jsonl.meta.json +1 -0
  37. package/.beads/.br_history/issues.20260308_203547_950724773.jsonl +28 -0
  38. package/.beads/.br_history/issues.20260308_203547_950724773.jsonl.meta.json +1 -0
  39. package/.beads/.br_history/issues.20260308_203548_107684523.jsonl +29 -0
  40. package/.beads/.br_history/issues.20260308_203548_107684523.jsonl.meta.json +1 -0
  41. package/.beads/.br_history/issues.20260308_203548_310389993.jsonl +30 -0
  42. package/.beads/.br_history/issues.20260308_203548_310389993.jsonl.meta.json +1 -0
  43. package/.beads/.br_history/issues.20260308_203825_953337320.jsonl +31 -0
  44. package/.beads/.br_history/issues.20260308_203825_953337320.jsonl.meta.json +1 -0
  45. package/.beads/.br_history/issues.20260308_204056_071377736.jsonl +32 -0
  46. package/.beads/.br_history/issues.20260308_204056_071377736.jsonl.meta.json +1 -0
  47. package/.beads/.br_history/issues.20260308_205141_517616844.jsonl +32 -0
  48. package/.beads/.br_history/issues.20260308_205141_517616844.jsonl.meta.json +1 -0
  49. package/.beads/.br_history/issues.20260308_205141_648994024.jsonl +32 -0
  50. package/.beads/.br_history/issues.20260308_205141_648994024.jsonl.meta.json +1 -0
  51. package/.beads/.br_history/issues.20260308_205141_867598036.jsonl +32 -0
  52. package/.beads/.br_history/issues.20260308_205141_867598036.jsonl.meta.json +1 -0
  53. package/.beads/.br_history/issues.20260308_205142_094157355.jsonl +32 -0
  54. package/.beads/.br_history/issues.20260308_205142_094157355.jsonl.meta.json +1 -0
  55. package/.beads/.br_history/issues.20260308_205142_327315677.jsonl +32 -0
  56. package/.beads/.br_history/issues.20260308_205142_327315677.jsonl.meta.json +1 -0
  57. package/.beads/.br_history/issues.20260308_205142_545563822.jsonl +32 -0
  58. package/.beads/.br_history/issues.20260308_205142_545563822.jsonl.meta.json +1 -0
  59. package/.beads/.br_history/issues.20260308_205213_061989333.jsonl +32 -0
  60. package/.beads/.br_history/issues.20260308_205213_061989333.jsonl.meta.json +1 -0
  61. package/.beads/.br_history/issues.20260308_205213_181103364.jsonl +32 -0
  62. package/.beads/.br_history/issues.20260308_205213_181103364.jsonl.meta.json +1 -0
  63. package/.beads/.br_history/issues.20260308_205213_408872234.jsonl +32 -0
  64. package/.beads/.br_history/issues.20260308_205213_408872234.jsonl.meta.json +1 -0
  65. package/.beads/.br_history/issues.20260308_205213_616681652.jsonl +32 -0
  66. package/.beads/.br_history/issues.20260308_205213_616681652.jsonl.meta.json +1 -0
  67. package/.beads/.br_history/issues.20260308_205213_821507069.jsonl +32 -0
  68. package/.beads/.br_history/issues.20260308_205213_821507069.jsonl.meta.json +1 -0
  69. package/.beads/.br_history/issues.20260308_205214_026661112.jsonl +32 -0
  70. package/.beads/.br_history/issues.20260308_205214_026661112.jsonl.meta.json +1 -0
  71. package/.beads/.br_history/issues.20260308_205454_955250554.jsonl +32 -0
  72. package/.beads/.br_history/issues.20260308_205454_955250554.jsonl.meta.json +1 -0
  73. package/.beads/.br_history/issues.20260308_205556_337800392.jsonl +33 -0
  74. package/.beads/.br_history/issues.20260308_205556_337800392.jsonl.meta.json +1 -0
  75. package/.beads/.br_history/issues.20260308_205824_274686694.jsonl +33 -0
  76. package/.beads/.br_history/issues.20260308_205824_274686694.jsonl.meta.json +1 -0
  77. package/.beads/.br_history/issues.20260308_210240_583768328.jsonl +34 -0
  78. package/.beads/.br_history/issues.20260308_210240_583768328.jsonl.meta.json +1 -0
  79. package/.beads/.br_history/issues.20260308_212223_641541494.jsonl +34 -0
  80. package/.beads/.br_history/issues.20260308_212223_641541494.jsonl.meta.json +1 -0
  81. package/.beads/.br_history/issues.20260308_212227_735550996.jsonl +35 -0
  82. package/.beads/.br_history/issues.20260308_212227_735550996.jsonl.meta.json +1 -0
  83. package/.beads/.br_history/issues.20260308_212232_547298548.jsonl +36 -0
  84. package/.beads/.br_history/issues.20260308_212232_547298548.jsonl.meta.json +1 -0
  85. package/.beads/.br_history/issues.20260308_212528_843628125.jsonl +37 -0
  86. package/.beads/.br_history/issues.20260308_212528_843628125.jsonl.meta.json +1 -0
  87. package/.beads/.br_history/issues.20260308_212529_094530502.jsonl +38 -0
  88. package/.beads/.br_history/issues.20260308_212529_094530502.jsonl.meta.json +1 -0
  89. package/.beads/.br_history/issues.20260308_212529_331000853.jsonl +39 -0
  90. package/.beads/.br_history/issues.20260308_212529_331000853.jsonl.meta.json +1 -0
  91. package/.beads/.br_history/issues.20260308_212529_587925652.jsonl +40 -0
  92. package/.beads/.br_history/issues.20260308_212529_587925652.jsonl.meta.json +1 -0
  93. package/.beads/.br_history/issues.20260308_212804_927764103.jsonl +41 -0
  94. package/.beads/.br_history/issues.20260308_212804_927764103.jsonl.meta.json +1 -0
  95. package/.beads/.br_history/issues.20260308_212805_153673453.jsonl +42 -0
  96. package/.beads/.br_history/issues.20260308_212805_153673453.jsonl.meta.json +1 -0
  97. package/.beads/.br_history/issues.20260308_212805_415982363.jsonl +43 -0
  98. package/.beads/.br_history/issues.20260308_212805_415982363.jsonl.meta.json +1 -0
  99. package/.beads/.br_history/issues.20260308_212805_657497741.jsonl +44 -0
  100. package/.beads/.br_history/issues.20260308_212805_657497741.jsonl.meta.json +1 -0
  101. package/.beads/.br_history/issues.20260308_212805_952838724.jsonl +45 -0
  102. package/.beads/.br_history/issues.20260308_212805_952838724.jsonl.meta.json +1 -0
  103. package/.beads/.br_history/issues.20260308_212806_325433779.jsonl +46 -0
  104. package/.beads/.br_history/issues.20260308_212806_325433779.jsonl.meta.json +1 -0
  105. package/.beads/.br_history/issues.20260308_212806_584685598.jsonl +47 -0
  106. package/.beads/.br_history/issues.20260308_212806_584685598.jsonl.meta.json +1 -0
  107. package/.beads/.br_history/issues.20260308_212806_827817208.jsonl +48 -0
  108. package/.beads/.br_history/issues.20260308_212806_827817208.jsonl.meta.json +1 -0
  109. package/.beads/.br_history/issues.20260308_212807_111320451.jsonl +49 -0
  110. package/.beads/.br_history/issues.20260308_212807_111320451.jsonl.meta.json +1 -0
  111. package/.beads/.br_history/issues.20260308_212807_409545536.jsonl +50 -0
  112. package/.beads/.br_history/issues.20260308_212807_409545536.jsonl.meta.json +1 -0
  113. package/.beads/.br_history/issues.20260308_212807_625063294.jsonl +51 -0
  114. package/.beads/.br_history/issues.20260308_212807_625063294.jsonl.meta.json +1 -0
  115. package/.beads/.br_history/issues.20260308_212807_843906551.jsonl +52 -0
  116. package/.beads/.br_history/issues.20260308_212807_843906551.jsonl.meta.json +1 -0
  117. package/.beads/.br_history/issues.20260308_212808_100304073.jsonl +53 -0
  118. package/.beads/.br_history/issues.20260308_212808_100304073.jsonl.meta.json +1 -0
  119. package/.beads/.br_history/issues.20260308_212808_324723976.jsonl +54 -0
  120. package/.beads/.br_history/issues.20260308_212808_324723976.jsonl.meta.json +1 -0
  121. package/.beads/.br_history/issues.20260308_212808_557513104.jsonl +55 -0
  122. package/.beads/.br_history/issues.20260308_212808_557513104.jsonl.meta.json +1 -0
  123. package/.beads/.br_history/issues.20260308_212808_788048322.jsonl +56 -0
  124. package/.beads/.br_history/issues.20260308_212808_788048322.jsonl.meta.json +1 -0
  125. package/.beads/.br_history/issues.20260308_213702_613249728.jsonl +57 -0
  126. package/.beads/.br_history/issues.20260308_213702_613249728.jsonl.meta.json +1 -0
  127. package/.beads/.br_history/issues.20260308_213715_115792063.jsonl +57 -0
  128. package/.beads/.br_history/issues.20260308_213715_115792063.jsonl.meta.json +1 -0
  129. package/.beads/.br_history/issues.20260308_213715_462220666.jsonl +57 -0
  130. package/.beads/.br_history/issues.20260308_213715_462220666.jsonl.meta.json +1 -0
  131. package/.beads/.br_history/issues.20260308_213727_191258923.jsonl +57 -0
  132. package/.beads/.br_history/issues.20260308_213727_191258923.jsonl.meta.json +1 -0
  133. package/.beads/.br_history/issues.20260308_213727_684383652.jsonl +57 -0
  134. package/.beads/.br_history/issues.20260308_213727_684383652.jsonl.meta.json +1 -0
  135. package/.beads/.br_history/issues.20260308_213735_751882991.jsonl +57 -0
  136. package/.beads/.br_history/issues.20260308_213735_751882991.jsonl.meta.json +1 -0
  137. package/.beads/.br_history/issues.20260308_222052_279844960.jsonl +57 -0
  138. package/.beads/.br_history/issues.20260308_222052_279844960.jsonl.meta.json +1 -0
  139. package/.beads/.br_history/issues.20260308_222056_873282114.jsonl +57 -0
  140. package/.beads/.br_history/issues.20260308_222056_873282114.jsonl.meta.json +1 -0
  141. package/.beads/.br_history/issues.20260308_222103_402410761.jsonl +57 -0
  142. package/.beads/.br_history/issues.20260308_222103_402410761.jsonl.meta.json +1 -0
  143. package/.beads/.br_history/issues.20260308_235202_180577215.jsonl +57 -0
  144. package/.beads/.br_history/issues.20260308_235202_180577215.jsonl.meta.json +1 -0
  145. package/.beads/.br_history/issues.20260308_235202_387414163.jsonl +57 -0
  146. package/.beads/.br_history/issues.20260308_235202_387414163.jsonl.meta.json +1 -0
  147. package/.beads/.br_history/issues.20260308_235202_564422794.jsonl +57 -0
  148. package/.beads/.br_history/issues.20260308_235202_564422794.jsonl.meta.json +1 -0
  149. package/.beads/.br_history/issues.20260308_235202_742600597.jsonl +57 -0
  150. package/.beads/.br_history/issues.20260308_235202_742600597.jsonl.meta.json +1 -0
  151. package/.beads/.br_history/issues.20260308_235208_133360069.jsonl +57 -0
  152. package/.beads/.br_history/issues.20260308_235208_133360069.jsonl.meta.json +1 -0
  153. package/.beads/.br_history/issues.20260308_235505_473406307.jsonl +57 -0
  154. package/.beads/.br_history/issues.20260308_235505_473406307.jsonl.meta.json +1 -0
  155. package/.beads/.br_history/issues.20260308_235505_662360489.jsonl +57 -0
  156. package/.beads/.br_history/issues.20260308_235505_662360489.jsonl.meta.json +1 -0
  157. package/.beads/.br_history/issues.20260308_235505_843935624.jsonl +57 -0
  158. package/.beads/.br_history/issues.20260308_235505_843935624.jsonl.meta.json +1 -0
  159. package/.beads/.br_history/issues.20260308_235506_044530221.jsonl +57 -0
  160. package/.beads/.br_history/issues.20260308_235506_044530221.jsonl.meta.json +1 -0
  161. package/.beads/.br_history/issues.20260309_002618_115728731.jsonl +57 -0
  162. package/.beads/.br_history/issues.20260309_002618_115728731.jsonl.meta.json +1 -0
  163. package/.beads/.br_history/issues.20260309_003748_878174586.jsonl +57 -0
  164. package/.beads/.br_history/issues.20260309_003748_878174586.jsonl.meta.json +1 -0
  165. package/.beads/.br_history/issues.20260309_004057_868755623.jsonl +57 -0
  166. package/.beads/.br_history/issues.20260309_004057_868755623.jsonl.meta.json +1 -0
  167. package/.beads/.br_history/issues.20260309_004058_512842163.jsonl +57 -0
  168. package/.beads/.br_history/issues.20260309_004058_512842163.jsonl.meta.json +1 -0
  169. package/.beads/.br_history/issues.20260309_004058_994445226.jsonl +57 -0
  170. package/.beads/.br_history/issues.20260309_004058_994445226.jsonl.meta.json +1 -0
  171. package/.beads/.br_history/issues.20260309_004059_475988596.jsonl +57 -0
  172. package/.beads/.br_history/issues.20260309_004059_475988596.jsonl.meta.json +1 -0
  173. package/.beads/.br_history/issues.20260309_161902_566857851.jsonl +57 -0
  174. package/.beads/.br_history/issues.20260309_161902_566857851.jsonl.meta.json +1 -0
  175. package/.beads/.br_history/issues.20260309_170512_277017739.jsonl +57 -0
  176. package/.beads/.br_history/issues.20260309_170512_277017739.jsonl.meta.json +1 -0
  177. package/.beads/.br_history/issues.20260309_170512_477876921.jsonl +57 -0
  178. package/.beads/.br_history/issues.20260309_170512_477876921.jsonl.meta.json +1 -0
  179. package/.beads/.br_history/issues.20260309_170512_664382701.jsonl +57 -0
  180. package/.beads/.br_history/issues.20260309_170512_664382701.jsonl.meta.json +1 -0
  181. package/.beads/.br_history/issues.20260309_170512_859400333.jsonl +57 -0
  182. package/.beads/.br_history/issues.20260309_170512_859400333.jsonl.meta.json +1 -0
  183. package/.beads/.br_history/issues.20260309_212326_082771164.jsonl +57 -0
  184. package/.beads/.br_history/issues.20260309_212326_082771164.jsonl.meta.json +1 -0
  185. package/.beads/.br_history/issues.20260309_212326_245619716.jsonl +58 -0
  186. package/.beads/.br_history/issues.20260309_212326_245619716.jsonl.meta.json +1 -0
  187. package/.beads/.br_history/issues.20260309_212326_403198317.jsonl +59 -0
  188. package/.beads/.br_history/issues.20260309_212326_403198317.jsonl.meta.json +1 -0
  189. package/.beads/.br_history/issues.20260309_212332_539197678.jsonl +60 -0
  190. package/.beads/.br_history/issues.20260309_212332_539197678.jsonl.meta.json +1 -0
  191. package/.beads/.br_history/issues.20260309_212332_731373599.jsonl +60 -0
  192. package/.beads/.br_history/issues.20260309_212332_731373599.jsonl.meta.json +1 -0
  193. package/.beads/.br_history/issues.20260309_212332_928710953.jsonl +60 -0
  194. package/.beads/.br_history/issues.20260309_212332_928710953.jsonl.meta.json +1 -0
  195. package/.beads/.br_history/issues.20260309_213021_341505240.jsonl +60 -0
  196. package/.beads/.br_history/issues.20260309_213021_341505240.jsonl.meta.json +1 -0
  197. package/.beads/.br_history/issues.20260309_213022_023136934.jsonl +60 -0
  198. package/.beads/.br_history/issues.20260309_213022_023136934.jsonl.meta.json +1 -0
  199. package/.beads/.br_history/issues.20260309_213022_400050719.jsonl +60 -0
  200. package/.beads/.br_history/issues.20260309_213022_400050719.jsonl.meta.json +1 -0
  201. package/.beads/config.yaml +4 -0
  202. package/.beads/issues.jsonl +60 -0
  203. package/.beads/metadata.json +4 -0
  204. package/README.md +226 -43
  205. package/__tests__/adapter-schema.test.js +119 -0
  206. package/__tests__/ask.test.js +327 -0
  207. package/__tests__/aws-plugin.test.js +84 -0
  208. package/__tests__/az-plugin.test.js +84 -0
  209. package/__tests__/builtin-adapter.test.js +29 -0
  210. package/__tests__/cline-plugin.test.js +109 -0
  211. package/__tests__/cline-skill.test.js +49 -0
  212. package/__tests__/config.test.js +297 -0
  213. package/__tests__/docker-plugin.test.js +95 -0
  214. package/__tests__/executor.test.js +303 -0
  215. package/__tests__/eza-plugin.test.js +81 -0
  216. package/__tests__/gcloud-plugin.test.js +86 -0
  217. package/__tests__/gh-plugin.test.js +86 -0
  218. package/__tests__/helm-plugin.test.js +81 -0
  219. package/__tests__/help-json.test.js +19 -0
  220. package/__tests__/http-adapter.test.js +118 -0
  221. package/__tests__/just-plugin.test.js +82 -0
  222. package/__tests__/kubectl-plugin.test.js +83 -0
  223. package/__tests__/linear-plugin.test.js +81 -0
  224. package/__tests__/mcp-adapter.test.js +187 -0
  225. package/__tests__/mcp-local.test.js +105 -0
  226. package/__tests__/namespace-passthrough.test.js +69 -0
  227. package/__tests__/nextest-plugin.test.js +82 -0
  228. package/__tests__/npm-plugin.test.js +81 -0
  229. package/__tests__/nullclaw-plugin.test.js +157 -0
  230. package/__tests__/openapi-adapter.test.js +199 -0
  231. package/__tests__/plan-runtime.test.js +43 -0
  232. package/__tests__/planner.test.js +47 -0
  233. package/__tests__/plugin-agency-agents.test.js +62 -0
  234. package/__tests__/plugin-nullclaw.test.js +78 -0
  235. package/__tests__/plugin-visual-explainer.test.js +62 -0
  236. package/__tests__/plugins-command.test.js +220 -0
  237. package/__tests__/plugins-manager.test.js +353 -0
  238. package/__tests__/plugins-registry.test.js +114 -0
  239. package/__tests__/plugins-store.test.js +115 -0
  240. package/__tests__/pnpm-plugin.test.js +81 -0
  241. package/__tests__/poetry-plugin.test.js +83 -0
  242. package/__tests__/process-adapter.test.js +143 -0
  243. package/__tests__/pulumi-plugin.test.js +81 -0
  244. package/__tests__/railway-plugin.test.js +84 -0
  245. package/__tests__/server-app.test.js +67 -0
  246. package/__tests__/server-config-service.test.js +79 -0
  247. package/__tests__/server-routes-ask.test.js +89 -0
  248. package/__tests__/server-routes-commands.test.js +55 -0
  249. package/__tests__/server-routes-config.test.js +87 -0
  250. package/__tests__/server-routes-jobs.test.js +53 -0
  251. package/__tests__/server-routes-misc.test.js +112 -0
  252. package/__tests__/server-storage-adapter.test.js +40 -0
  253. package/__tests__/server-storage-file.test.js +73 -0
  254. package/__tests__/server-storage-mongo.test.js +74 -0
  255. package/__tests__/shell-adapter.test.js +90 -0
  256. package/__tests__/skills-catalog.test.js +98 -0
  257. package/__tests__/skills.test.js +442 -0
  258. package/__tests__/stripe-plugin.test.js +81 -0
  259. package/__tests__/supabase-plugin.test.js +86 -0
  260. package/__tests__/terraform-plugin.test.js +83 -0
  261. package/__tests__/uv-plugin.test.js +81 -0
  262. package/__tests__/vercel-plugin.test.js +81 -0
  263. package/__tests__/watchexec-plugin.test.js +80 -0
  264. package/cli/adapter-schema.js +108 -0
  265. package/cli/adapters/builtin.js +43 -0
  266. package/cli/adapters/process.js +262 -0
  267. package/cli/adapters/shell.js +82 -0
  268. package/cli/config.js +12 -9
  269. package/cli/executor.js +6 -1
  270. package/cli/help-json.js +3 -1
  271. package/cli/namespace-passthrough.js +38 -0
  272. package/cli/plugin-install-guidance.js +320 -0
  273. package/cli/plugins-command.js +138 -0
  274. package/cli/plugins-manager.js +552 -0
  275. package/cli/plugins-registry.js +80 -0
  276. package/cli/plugins-store.js +56 -0
  277. package/cli/skills-catalog.js +237 -0
  278. package/cli/skills.js +180 -6
  279. package/cli/supercli.js +150 -58
  280. package/docs/docs.html +224 -0
  281. package/docs/feature-gaps.md +16 -0
  282. package/docs/index.html +164 -0
  283. package/docs/plugin-examples.md +397 -0
  284. package/docs/plugin-harness-guide.md +452 -0
  285. package/docs/plugins.md +44 -0
  286. package/docs/skills/cline-non-interactive/SKILL.md +59 -0
  287. package/docs/skills-catalog.md +81 -0
  288. package/docs/supported-harnesses.md +277 -0
  289. package/docs/visual-overview.md +21 -0
  290. package/jest.config.js +25 -0
  291. package/package.json +9 -3
  292. package/plugins/agency-agents/plugin.json +15 -0
  293. package/plugins/agency-agents/scripts/post-install.js +122 -0
  294. package/plugins/aws/README.md +46 -0
  295. package/plugins/aws/plugin.json +42 -0
  296. package/plugins/az/README.md +46 -0
  297. package/plugins/az/plugin.json +42 -0
  298. package/plugins/beads/plugin.json +202 -0
  299. package/plugins/clickup/plugin.json +38 -0
  300. package/plugins/clickup/scripts/post-install.js +107 -0
  301. package/plugins/clickup/scripts/post-uninstall.js +30 -0
  302. package/plugins/cline/README.md +48 -0
  303. package/plugins/cline/plugin.json +92 -0
  304. package/plugins/commiat/plugin.json +36 -0
  305. package/plugins/docker/MANIFEST.md +39 -0
  306. package/plugins/docker/README.md +35 -0
  307. package/plugins/docker/examples/build-image.sh +7 -0
  308. package/plugins/docker/examples/inspect-container.sh +6 -0
  309. package/plugins/docker/examples/list-containers.sh +4 -0
  310. package/plugins/docker/examples/multi-step-workflow.sh +10 -0
  311. package/plugins/docker/examples/run-container.sh +7 -0
  312. package/plugins/docker/plugin.json +266 -0
  313. package/plugins/eza/README.md +40 -0
  314. package/plugins/eza/plugin.json +42 -0
  315. package/plugins/gcloud/README.md +46 -0
  316. package/plugins/gcloud/plugin.json +42 -0
  317. package/plugins/gh/README.md +46 -0
  318. package/plugins/gh/plugin.json +43 -0
  319. package/plugins/gwc/plugin.json +35 -0
  320. package/plugins/helm/README.md +42 -0
  321. package/plugins/helm/plugin.json +42 -0
  322. package/plugins/just/README.md +42 -0
  323. package/plugins/just/plugin.json +42 -0
  324. package/plugins/kubectl/README.md +46 -0
  325. package/plugins/kubectl/plugin.json +42 -0
  326. package/plugins/linear/README.md +60 -0
  327. package/plugins/linear/plugin.json +42 -0
  328. package/plugins/nextest/README.md +42 -0
  329. package/plugins/nextest/plugin.json +42 -0
  330. package/plugins/npm/README.md +46 -0
  331. package/plugins/npm/plugin.json +42 -0
  332. package/plugins/nullclaw/README.md +45 -0
  333. package/plugins/nullclaw/plugin.json +64 -0
  334. package/plugins/nullclaw/scripts/post-install.js +189 -0
  335. package/plugins/nullclaw/scripts/post-uninstall.js +25 -0
  336. package/plugins/openfang/plugin.json +37 -0
  337. package/plugins/openfang/scripts/post-install.js +163 -0
  338. package/plugins/openfang/scripts/post-uninstall.js +30 -0
  339. package/plugins/plugins.json +295 -0
  340. package/plugins/pnpm/README.md +46 -0
  341. package/plugins/pnpm/plugin.json +42 -0
  342. package/plugins/poetry/README.md +46 -0
  343. package/plugins/poetry/plugin.json +42 -0
  344. package/plugins/pulumi/README.md +46 -0
  345. package/plugins/pulumi/plugin.json +42 -0
  346. package/plugins/railway/README.md +58 -0
  347. package/plugins/railway/plugin.json +43 -0
  348. package/plugins/stripe/README.md +49 -0
  349. package/plugins/stripe/plugin.json +52 -0
  350. package/plugins/supabase/README.md +55 -0
  351. package/plugins/supabase/plugin.json +42 -0
  352. package/plugins/superpowers/plugin.json +22 -0
  353. package/plugins/superpowers/scripts/post-install.js +124 -0
  354. package/plugins/superpowers/scripts/post-uninstall.js +30 -0
  355. package/plugins/terraform/README.md +46 -0
  356. package/plugins/terraform/plugin.json +42 -0
  357. package/plugins/uv/README.md +46 -0
  358. package/plugins/uv/plugin.json +42 -0
  359. package/plugins/vercel/README.md +47 -0
  360. package/plugins/vercel/plugin.json +42 -0
  361. package/plugins/visual-explainer/plugin.json +15 -0
  362. package/plugins/visual-explainer/scripts/post-install.js +111 -0
  363. package/plugins/watchexec/README.md +40 -0
  364. package/plugins/watchexec/plugin.json +42 -0
  365. package/tests/test-aws-smoke.sh +56 -0
  366. package/tests/test-az-smoke.sh +56 -0
  367. package/tests/test-cli.js +116 -2
  368. package/tests/test-cline-smoke.sh +37 -0
  369. package/tests/test-eza-smoke.sh +33 -0
  370. package/tests/test-gcloud-smoke.sh +56 -0
  371. package/tests/test-gh-smoke.sh +56 -0
  372. package/tests/test-helm-smoke.sh +33 -0
  373. package/tests/test-just-smoke.sh +40 -0
  374. package/tests/test-kubectl-smoke.sh +37 -0
  375. package/tests/test-linear-smoke.sh +97 -0
  376. package/tests/test-nextest-smoke.sh +33 -0
  377. package/tests/test-npm-smoke.sh +32 -0
  378. package/tests/test-nullclaw-smoke.sh +51 -0
  379. package/tests/test-plugins-registry.js +212 -0
  380. package/tests/test-pnpm-smoke.sh +33 -0
  381. package/tests/test-poetry-smoke.sh +33 -0
  382. package/tests/test-pulumi-smoke.sh +33 -0
  383. package/tests/test-railway-smoke.sh +95 -0
  384. package/tests/test-stripe-smoke.sh +55 -0
  385. package/tests/test-supabase-smoke.sh +95 -0
  386. package/tests/test-terraform-smoke.sh +33 -0
  387. package/tests/test-uv-smoke.sh +33 -0
  388. package/tests/test-vercel-smoke.sh +55 -0
  389. 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."