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