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,111 @@
1
+ const { spawnSync } = require("child_process")
2
+ const { addProvider, syncCatalog } = require("../../../cli/skills-catalog")
3
+
4
+ const OWNER = "javimosch"
5
+ const REPO = "visual-explainer"
6
+ const REF = "main"
7
+ const SOURCE_REPO = `https://github.com/${OWNER}/${REPO}`
8
+ const TREE_URL = `https://api.github.com/repos/${OWNER}/${REPO}/git/trees/${REF}?recursive=1`
9
+ const RAW_BASE_URL = `https://raw.githubusercontent.com/${OWNER}/${REPO}/${REF}`
10
+ const NORMALIZED_PREFIX = "plugins/visual-explainer-normalized/"
11
+
12
+ function integrationError(message, suggestions = []) {
13
+ return Object.assign(new Error(message), {
14
+ code: 105,
15
+ type: "integration_error",
16
+ recoverable: true,
17
+ suggestions
18
+ })
19
+ }
20
+
21
+ function fetchJson(url) {
22
+ const res = spawnSync("curl", ["-fsSL", url], { encoding: "utf-8", timeout: 15000 })
23
+ if (res.error) {
24
+ throw integrationError(`Failed to fetch visual-explainer metadata: ${res.error.message}`, ["Check internet connectivity", "Retry: supercli plugins install visual-explainer"])
25
+ }
26
+ if (res.status !== 0) {
27
+ throw integrationError(`Failed to fetch visual-explainer metadata: ${(res.stderr || "").trim() || `exit ${res.status}`}`, ["Check internet connectivity", "Retry: supercli plugins install visual-explainer"])
28
+ }
29
+ try {
30
+ return JSON.parse((res.stdout || "").trim() || "{}")
31
+ } catch (err) {
32
+ throw integrationError(`Invalid visual-explainer metadata response: ${err.message}`)
33
+ }
34
+ }
35
+
36
+ function isNormalizedSkillFile(filePath) {
37
+ return filePath.startsWith(NORMALIZED_PREFIX) && filePath.endsWith(".md")
38
+ }
39
+
40
+ function toSkillId(relativePath) {
41
+ if (relativePath === "SKILL.md") return "visual-explainer.skill"
42
+ return `visual-explainer.${relativePath.replace(/\.md$/, "").replace(/\//g, ".")}`
43
+ }
44
+
45
+ function toSkillName(relativePath) {
46
+ const base = relativePath.split("/").pop() || relativePath
47
+ return base
48
+ .replace(/\.md$/, "")
49
+ .split("-")
50
+ .map(part => (part ? part[0].toUpperCase() + part.slice(1) : part))
51
+ .join(" ")
52
+ }
53
+
54
+ function buildRemoteEntriesFromTree(treeResponse) {
55
+ const tree = Array.isArray(treeResponse.tree) ? treeResponse.tree : []
56
+ const entries = []
57
+
58
+ for (const node of tree) {
59
+ if (!node || node.type !== "blob" || typeof node.path !== "string") continue
60
+ if (!isNormalizedSkillFile(node.path)) continue
61
+ const relativePath = node.path.slice(NORMALIZED_PREFIX.length)
62
+ entries.push({
63
+ id: toSkillId(relativePath),
64
+ name: toSkillName(relativePath),
65
+ path: node.path,
66
+ source_url: `${RAW_BASE_URL}/${node.path}`
67
+ })
68
+ }
69
+
70
+ entries.sort((a, b) => a.id.localeCompare(b.id))
71
+ return entries
72
+ }
73
+
74
+ function run() {
75
+ const treeResponse = fetchJson(TREE_URL)
76
+ const entries = buildRemoteEntriesFromTree(treeResponse)
77
+ if (entries.length === 0) {
78
+ throw integrationError("visual-explainer plugin found no normalized remote skill files to index")
79
+ }
80
+
81
+ addProvider({
82
+ name: "visual-explainer",
83
+ type: "remote_static",
84
+ enabled: true,
85
+ source_repo: SOURCE_REPO,
86
+ ref: REF,
87
+ entries
88
+ })
89
+
90
+ const index = syncCatalog()
91
+ return {
92
+ provider: "visual-explainer",
93
+ entries: entries.length,
94
+ synced_skills: Array.isArray(index.skills) ? index.skills.length : 0
95
+ }
96
+ }
97
+
98
+ if (require.main === module) {
99
+ try {
100
+ const result = run()
101
+ process.stdout.write(JSON.stringify(result))
102
+ } catch (err) {
103
+ process.stderr.write(err.message)
104
+ process.exit(1)
105
+ }
106
+ }
107
+
108
+ module.exports = {
109
+ run,
110
+ buildRemoteEntriesFromTree
111
+ }
@@ -0,0 +1,40 @@
1
+ # watchexec Plugin Harness
2
+
3
+ This plugin integrates the watchexec CLI into dcli with one wrapped core command and full namespace passthrough.
4
+
5
+ ## Prerequisites
6
+
7
+ Ensure watchexec is available on your machine:
8
+
9
+ ```bash
10
+ watchexec --version
11
+ ```
12
+
13
+ ## Available Commands
14
+
15
+ ### CLI Version (Wrapped)
16
+
17
+ Returns the watchexec CLI version via `watchexec --version`.
18
+
19
+ ```bash
20
+ dcli watchexec cli version --json
21
+ ```
22
+
23
+ ### Full Passthrough
24
+
25
+ You can run any watchexec command through the `watchexec` namespace.
26
+
27
+ ```bash
28
+ # Show help
29
+ dcli watchexec --help
30
+
31
+ # Print the manual
32
+ dcli watchexec --manual
33
+
34
+ # Run a watcher command directly
35
+ dcli watchexec -e js -- echo changed
36
+ ```
37
+
38
+ ## Output
39
+
40
+ Wrapped commands and passthrough responses are returned in dcli envelope format when `--json` is used with dcli-level commands.
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "watchexec",
3
+ "version": "0.1.0",
4
+ "description": "watchexec CLI plugin for dcli",
5
+ "source": "https://github.com/watchexec/watchexec",
6
+ "checks": [
7
+ {
8
+ "type": "binary",
9
+ "name": "watchexec"
10
+ }
11
+ ],
12
+ "commands": [
13
+ {
14
+ "namespace": "watchexec",
15
+ "resource": "cli",
16
+ "action": "version",
17
+ "description": "Show watchexec CLI version",
18
+ "adapter": "process",
19
+ "adapterConfig": {
20
+ "command": "watchexec",
21
+ "baseArgs": ["--version"],
22
+ "parseJson": false,
23
+ "missingDependencyHelp": "Please install watchexec to use this command."
24
+ },
25
+ "args": []
26
+ },
27
+ {
28
+ "namespace": "watchexec",
29
+ "resource": "_",
30
+ "action": "_",
31
+ "description": "Passthrough command to execute any watchexec CLI command",
32
+ "adapter": "process",
33
+ "adapterConfig": {
34
+ "command": "watchexec",
35
+ "passthrough": true,
36
+ "parseJson": true,
37
+ "missingDependencyHelp": "Please install watchexec to use this command."
38
+ },
39
+ "args": []
40
+ }
41
+ ]
42
+ }
@@ -0,0 +1,56 @@
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 "== AWS CLI smoke test (interactive) =="
9
+
10
+ if ! command -v aws >/dev/null 2>&1; then
11
+ echo "AWS CLI not found in PATH."
12
+ echo "Install it first: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html"
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 aws plugin..."
22
+ node "${CLI}" plugins install aws --on-conflict replace --json >/dev/null
23
+
24
+ echo "Checking AWS authentication (aws sts get-caller-identity)..."
25
+ if ! aws sts get-caller-identity >/dev/null 2>&1; then
26
+ if [[ ! -t 0 ]]; then
27
+ echo "No working AWS credentials found and no TTY available. Run 'aws configure' manually, then rerun this script."
28
+ exit 1
29
+ fi
30
+
31
+ echo "AWS credentials are required for live smoke tests."
32
+ read -r -p "Run 'aws configure' now? [Y/n] " ANSWER
33
+ ANSWER="${ANSWER:-Y}"
34
+ if [[ "${ANSWER}" =~ ^[Yy]$ ]]; then
35
+ aws configure
36
+ else
37
+ echo "Cancelled. Run 'aws configure' and retry when ready."
38
+ exit 1
39
+ fi
40
+
41
+ if ! aws sts get-caller-identity >/dev/null 2>&1; then
42
+ echo "AWS authentication check still failed after configure."
43
+ echo "Verify with: aws sts get-caller-identity"
44
+ exit 1
45
+ fi
46
+ else
47
+ echo "AWS CLI is already authenticated. Skipping configuration."
48
+ fi
49
+
50
+ echo "Running wrapped command smoke test..."
51
+ node "${CLI}" aws account identity --json
52
+
53
+ echo "Running passthrough smoke test..."
54
+ node "${CLI}" aws s3api list-buckets
55
+
56
+ echo "Smoke test completed."
@@ -0,0 +1,56 @@
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 "== Azure CLI smoke test (interactive) =="
9
+
10
+ if ! command -v az >/dev/null 2>&1; then
11
+ echo "Azure CLI not found in PATH."
12
+ echo "Install it first: https://learn.microsoft.com/cli/azure/install-azure-cli"
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 az plugin..."
22
+ node "${CLI}" plugins install az --on-conflict replace --json >/dev/null
23
+
24
+ echo "Checking Azure authentication (az account show)..."
25
+ if ! az account show >/dev/null 2>&1; then
26
+ if [[ ! -t 0 ]]; then
27
+ echo "No working Azure login found and no TTY available. Run 'az login' manually, then rerun this script."
28
+ exit 1
29
+ fi
30
+
31
+ echo "Azure authentication is required for live smoke tests."
32
+ read -r -p "Run 'az login' now? [Y/n] " ANSWER
33
+ ANSWER="${ANSWER:-Y}"
34
+ if [[ "${ANSWER}" =~ ^[Yy]$ ]]; then
35
+ az login
36
+ else
37
+ echo "Cancelled. Run 'az login' and retry when ready."
38
+ exit 1
39
+ fi
40
+
41
+ if ! az account show >/dev/null 2>&1; then
42
+ echo "Azure authentication check still failed after login."
43
+ echo "Verify with: az account show"
44
+ exit 1
45
+ fi
46
+ else
47
+ echo "Azure CLI is already authenticated. Skipping login."
48
+ fi
49
+
50
+ echo "Running wrapped command smoke test..."
51
+ node "${CLI}" az account show --json
52
+
53
+ echo "Running passthrough smoke test..."
54
+ node "${CLI}" az group list
55
+
56
+ echo "Smoke test completed."
package/tests/test-cli.js CHANGED
@@ -6,6 +6,8 @@
6
6
  */
7
7
 
8
8
  const { execSync } = require("child_process");
9
+ const fs = require("fs");
10
+ const os = require("os");
9
11
  const path = require("path");
10
12
 
11
13
  const SERVER = process.env.SUPERCLI_SERVER || "http://127.0.0.1:3000";
@@ -134,6 +136,18 @@ test("help --json returns namespaces", () => {
134
136
  assert(Array.isArray(d.namespaces), "should have namespaces array");
135
137
  });
136
138
 
139
+ test("no-args non-tty returns agent bootstrap payload", () => {
140
+ const r = runNoServer("--json");
141
+ assert(r.ok, "no-args json should succeed");
142
+ const d = JSON.parse(r.output);
143
+ assert(d.mode === "agent_bootstrap", "should return agent bootstrap mode");
144
+ assert(Array.isArray(d.next), "should include next commands");
145
+ assert(
146
+ d.next.includes("supercli skills teach --format skill.md"),
147
+ "should point agents to skills teach",
148
+ );
149
+ });
150
+
137
151
  // ── --help-json ──
138
152
  test("--help-json returns capability discovery", () => {
139
153
  run("sync --json");
@@ -163,8 +177,8 @@ test("sync is unavailable when SUPERCLI_SERVER is not set", () => {
163
177
  });
164
178
 
165
179
  test("plan works in local mode without SUPERCLI_SERVER", () => {
166
- run("sync --json");
167
- const r = runNoServer("plan test items list --json");
180
+ runNoServer("plugins install beads --json");
181
+ const r = runNoServer("plan beads install steps --json");
168
182
  assert(r.ok, "local plan should succeed");
169
183
  const d = JSON.parse(r.output);
170
184
  assert(d.execution_mode === "local", "execution_mode should be local");
@@ -173,6 +187,7 @@ test("plan works in local mode without SUPERCLI_SERVER", () => {
173
187
  Array.isArray(d.steps) && d.steps.length > 0,
174
188
  "should include plan steps",
175
189
  );
190
+ runNoServer("plugins remove beads --json");
176
191
  });
177
192
 
178
193
  test("local mcp registry can add/list/remove without SUPERCLI_SERVER", () => {
@@ -197,6 +212,95 @@ test("local mcp registry can add/list/remove without SUPERCLI_SERVER", () => {
197
212
  assert(remove.ok, "mcp remove should succeed");
198
213
  });
199
214
 
215
+ test("plugins install/list/show/remove works locally", () => {
216
+ const install = runNoServer("plugins install ./plugins/beads --json");
217
+ assert(install.ok, "plugins install should succeed");
218
+ const installData = JSON.parse(install.output);
219
+ assert(installData.ok === true, "install should return ok");
220
+
221
+ const list = runNoServer("plugins list --json");
222
+ assert(list.ok, "plugins list should succeed");
223
+ const listData = JSON.parse(list.output);
224
+ assert(Array.isArray(listData.plugins), "plugins list should return array");
225
+ assert(listData.plugins.find((p) => p.name === "beads"), "beads plugin should be listed");
226
+
227
+ const show = runNoServer("plugins show beads --json");
228
+ assert(show.ok, "plugins show should succeed");
229
+ const showData = JSON.parse(show.output);
230
+ assert(showData.plugin.name === "beads", "plugins show should return beads plugin");
231
+
232
+ const doctor = runNoServer("plugins doctor beads --json");
233
+ assert(doctor.ok, "plugins doctor should succeed");
234
+ const doctorData = JSON.parse(doctor.output);
235
+ assert(doctorData.plugin === "beads", "doctor should target beads plugin");
236
+ assert(Array.isArray(doctorData.checks), "doctor should include checks array");
237
+
238
+ const remove = runNoServer("plugins remove beads --json");
239
+ assert(remove.ok, "plugins remove should succeed");
240
+ });
241
+
242
+ test("beads install steps command works after plugin install", () => {
243
+ runNoServer("plugins install beads --json");
244
+ const r = runNoServer("beads install steps --json");
245
+ assert(r.ok, "beads install steps should succeed");
246
+ const d = JSON.parse(r.output);
247
+ assert(d.data && Array.isArray(d.data.install_steps), "should include install steps array");
248
+ runNoServer("plugins remove beads --json");
249
+ });
250
+
251
+ test("gwc plugin supports install/show/doctor and passthrough", () => {
252
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), "dcli-gws-"));
253
+ const gwsPath = path.join(dir, "gws");
254
+ fs.writeFileSync(
255
+ gwsPath,
256
+ [
257
+ "#!/usr/bin/env node",
258
+ "const args = process.argv.slice(2);",
259
+ "if (args.includes('--version')) { console.log('gws 0.0.0-test'); process.exit(0); }",
260
+ "if (args.length === 0 || args.includes('--help')) { console.log('gws-help-ok'); process.exit(0); }",
261
+ "console.log(JSON.stringify({ ok: true, args }));"
262
+ ].join("\n"),
263
+ "utf-8",
264
+ );
265
+ fs.chmodSync(gwsPath, 0o755);
266
+
267
+ const env = { ...process.env, PATH: `${dir}:${process.env.PATH || ""}` };
268
+
269
+ const install = runNoServer("plugins install ./plugins/gwc --json", { env });
270
+ assert(install.ok, "gwc install should succeed");
271
+
272
+ const show = runNoServer("plugins show gwc --json", { env });
273
+ assert(show.ok, "plugins show gwc should succeed");
274
+ const showData = JSON.parse(show.output);
275
+ assert(showData.plugin.name === "gwc", "plugins show should return gwc plugin");
276
+
277
+ const doctor = runNoServer("plugins doctor gwc --json", { env });
278
+ assert(doctor.ok, "plugins doctor gwc should succeed");
279
+ const doctorData = JSON.parse(doctor.output);
280
+ assert(doctorData.ok === true, "gwc doctor should pass with mocked gws binary");
281
+
282
+ const passthroughHelp = runNoServer("gwc --help --json", { env });
283
+ assert(passthroughHelp.ok, "gwc passthrough help should succeed");
284
+ const helpData = JSON.parse(passthroughHelp.output);
285
+ assert(helpData.data && helpData.data.raw.includes("gws-help-ok"), "gwc help should passthrough to gws");
286
+
287
+ const passthrough = runNoServer("gwc drive files list --params '{\"pageSize\":1}' --json", { env });
288
+ assert(passthrough.ok, "gwc passthrough call should succeed");
289
+ const passData = JSON.parse(passthrough.output);
290
+ assert(passData.data && passData.data.ok === true, "gwc passthrough should return gws JSON");
291
+ assert(Array.isArray(passData.data.args), "gwc passthrough should include forwarded args");
292
+ assert(passData.data.args[0] === "drive", "gwc passthrough should preserve positional args");
293
+
294
+ const installSteps = runNoServer("gwc install steps --json", { env });
295
+ assert(installSteps.ok, "gwc install steps should use builtin command");
296
+ const installData = JSON.parse(installSteps.output);
297
+ assert(Array.isArray(installData.data.install_steps), "gwc install steps should include install steps");
298
+
299
+ const remove = runNoServer("plugins remove gwc --json", { env });
300
+ assert(remove.ok, "plugins remove gwc should succeed");
301
+ fs.rmSync(dir, { recursive: true, force: true });
302
+ });
303
+
200
304
  // ── config show ──
201
305
  test("config show returns cache info", () => {
202
306
  // First sync
@@ -237,6 +341,10 @@ test("skills list --json returns minimal metadata", () => {
237
341
  Object.keys(first).sort().join(",") === "description,name",
238
342
  "skill metadata should only include name and description",
239
343
  );
344
+ assert(
345
+ d.skills.some((s) => s.name === "plugins.registry.usage"),
346
+ "skills list should include plugins registry usage skill",
347
+ );
240
348
  });
241
349
 
242
350
  // ── skills teach ──
@@ -267,6 +375,12 @@ test("skills get can include DAG section", () => {
267
375
  assert(r.output.includes("dag:"), "should include dag section");
268
376
  });
269
377
 
378
+ test("skills get plugins registry usage skill", () => {
379
+ const r = run("skills get plugins.registry.usage");
380
+ assert(r.ok, "plugins registry skill should succeed");
381
+ assert(r.output.includes("plugins explore"), "plugins registry skill should include explore guidance");
382
+ });
383
+
270
384
  // ── namespace listing ──
271
385
  test("namespace listing returns resources", () => {
272
386
  const r = run("test --json");
@@ -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 "== cline smoke test (interactive) =="
9
+
10
+ if ! command -v cline >/dev/null 2>&1; then
11
+ echo "cline not found in PATH."
12
+ echo "Install it first and verify with: cline --version"
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 cline plugin..."
22
+ node "${CLI}" plugins install cline --on-conflict replace --json >/dev/null
23
+
24
+ echo "Running wrapped version command..."
25
+ node "${CLI}" cline cli version --json
26
+
27
+ echo "Running wrapped non-interactive task command..."
28
+ node "${CLI}" cline task run --prompt "List files with more LOC in cwd" --cwd . --timeout 30 --json
29
+
30
+ echo "Running passthrough smoke test..."
31
+ node "${CLI}" cline --help
32
+
33
+ echo "Syncing and checking local skill catalog..."
34
+ node "${CLI}" skills sync --json >/dev/null
35
+ node "${CLI}" skills get repo:cline-non-interactive >/dev/null
36
+
37
+ 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 "== eza smoke test (interactive) =="
9
+
10
+ if ! command -v eza >/dev/null 2>&1; then
11
+ echo "eza not found in PATH."
12
+ echo "Install it first: https://eza.rocks"
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 eza plugin..."
22
+ node "${CLI}" plugins install eza --on-conflict replace --json >/dev/null
23
+
24
+ echo "Checking eza CLI availability (eza --version)..."
25
+ eza --version >/dev/null
26
+
27
+ echo "Running wrapped command smoke test..."
28
+ node "${CLI}" eza cli version --json
29
+
30
+ echo "Running passthrough smoke test..."
31
+ node "${CLI}" eza --oneline --color=never
32
+
33
+ echo "Smoke test completed."
@@ -0,0 +1,56 @@
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 "== Google Cloud CLI smoke test (interactive) =="
9
+
10
+ if ! command -v gcloud >/dev/null 2>&1; then
11
+ echo "gcloud not found in PATH."
12
+ echo "Install it first: https://cloud.google.com/sdk/docs/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 gcloud plugin..."
22
+ node "${CLI}" plugins install gcloud --on-conflict replace --json >/dev/null
23
+
24
+ echo "Checking Google Cloud authentication (gcloud auth list --format=json)..."
25
+ if ! gcloud auth list --format=json >/dev/null 2>&1; then
26
+ if [[ ! -t 0 ]]; then
27
+ echo "No working gcloud auth found and no TTY available. Run 'gcloud auth login' manually, then rerun this script."
28
+ exit 1
29
+ fi
30
+
31
+ echo "Google Cloud authentication is required for live smoke tests."
32
+ read -r -p "Run 'gcloud auth login' now? [Y/n] " ANSWER
33
+ ANSWER="${ANSWER:-Y}"
34
+ if [[ "${ANSWER}" =~ ^[Yy]$ ]]; then
35
+ gcloud auth login
36
+ else
37
+ echo "Cancelled. Run 'gcloud auth login' and retry when ready."
38
+ exit 1
39
+ fi
40
+
41
+ if ! gcloud auth list --format=json >/dev/null 2>&1; then
42
+ echo "Google Cloud authentication check still failed after login."
43
+ echo "Verify with: gcloud auth list --format=json"
44
+ exit 1
45
+ fi
46
+ else
47
+ echo "Google Cloud CLI is already authenticated. Skipping login."
48
+ fi
49
+
50
+ echo "Running wrapped command smoke test..."
51
+ node "${CLI}" gcloud account list --json
52
+
53
+ echo "Running passthrough smoke test..."
54
+ node "${CLI}" gcloud projects list --format=json
55
+
56
+ echo "Smoke test completed."
@@ -0,0 +1,56 @@
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 "== GitHub CLI smoke test (interactive) =="
9
+
10
+ if ! command -v gh >/dev/null 2>&1; then
11
+ echo "GitHub CLI not found in PATH (expected binary: gh)."
12
+ echo "Install it first: https://cli.github.com/"
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 gh plugin..."
22
+ node "${CLI}" plugins install gh --on-conflict replace --json >/dev/null
23
+
24
+ echo "Checking GitHub authentication (gh auth status)..."
25
+ if ! gh auth status >/dev/null 2>&1; then
26
+ if [[ ! -t 0 ]]; then
27
+ echo "Not authenticated and no TTY available. Run 'gh auth login' manually, then rerun this script."
28
+ exit 1
29
+ fi
30
+
31
+ echo "GitHub login is required for live smoke tests."
32
+ read -r -p "Run 'gh auth login' now? [Y/n] " ANSWER
33
+ ANSWER="${ANSWER:-Y}"
34
+ if [[ "${ANSWER}" =~ ^[Yy]$ ]]; then
35
+ gh auth login
36
+ else
37
+ echo "Cancelled. Run 'gh auth login' and retry when ready."
38
+ exit 1
39
+ fi
40
+
41
+ if ! gh auth status >/dev/null 2>&1; then
42
+ echo "GitHub authentication check still failed after login."
43
+ echo "Verify with: gh auth status"
44
+ exit 1
45
+ fi
46
+ else
47
+ echo "GitHub CLI is already authenticated. Skipping login."
48
+ fi
49
+
50
+ echo "Running wrapped command smoke test..."
51
+ node "${CLI}" gh account status --json
52
+
53
+ echo "Running passthrough smoke test..."
54
+ node "${CLI}" gh repo list --limit 1 --json name,nameWithOwner,url
55
+
56
+ echo "Smoke test completed."