superacli 1.1.22 → 1.1.26

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 (257) hide show
  1. package/.beads/.br_history/{issues.20260427_104638_898729442.jsonl → issues.20260427_114912_061702372.jsonl} +65 -65
  2. package/.beads/.br_history/{issues.20260427_104638_209211116.jsonl → issues.20260427_115013_063113906.jsonl} +66 -66
  3. package/.beads/.br_history/{issues.20260427_104637_752744777.jsonl → issues.20260427_115114_208497343.jsonl} +67 -67
  4. package/.beads/.br_history/{issues.20260427_104615_669652069.jsonl → issues.20260427_115215_176080241.jsonl} +68 -68
  5. package/.beads/.br_history/issues.20260427_115316_481573328.jsonl +261 -0
  6. package/.beads/.br_history/issues.20260427_115335_866978652.jsonl +261 -0
  7. package/.beads/.br_history/issues.20260427_115436_866087391.jsonl +261 -0
  8. package/.beads/.br_history/issues.20260427_115538_016094860.jsonl +261 -0
  9. package/.beads/.br_history/issues.20260427_115638_932947449.jsonl +261 -0
  10. package/.beads/.br_history/issues.20260427_115739_982932603.jsonl +261 -0
  11. package/.beads/.br_history/issues.20260427_115840_963681039.jsonl +261 -0
  12. package/.beads/.br_history/issues.20260427_115941_912431509.jsonl +261 -0
  13. package/.beads/.br_history/issues.20260427_120043_043356448.jsonl +261 -0
  14. package/.beads/.br_history/issues.20260427_120144_955596968.jsonl +261 -0
  15. package/.beads/.br_history/issues.20260427_120246_060733977.jsonl +261 -0
  16. package/.beads/.br_history/issues.20260427_120307_717985017.jsonl +261 -0
  17. package/.beads/.br_history/issues.20260427_120408_871846736.jsonl +261 -0
  18. package/.beads/.br_history/issues.20260427_121003_963750732.jsonl +261 -0
  19. package/.beads/.br_history/issues.20260427_121006_018509431.jsonl +261 -0
  20. package/.beads/.br_history/issues.20260427_121019_617062931.jsonl +261 -0
  21. package/.beads/.br_history/issues.20260427_121021_689536311.jsonl +261 -0
  22. package/.beads/.br_history/issues.20260428_172005_240631447.jsonl +261 -0
  23. package/.beads/.br_history/issues.20260430_073641_144807989.jsonl +262 -0
  24. package/.beads/.br_history/issues.20260430_073642_807075699.jsonl +263 -0
  25. package/.beads/.br_history/issues.20260430_073645_625754223.jsonl +264 -0
  26. package/.beads/.br_history/issues.20260430_090639_154646058.jsonl +265 -0
  27. package/.beads/.br_history/issues.20260430_090640_350560318.jsonl +266 -0
  28. package/.beads/.br_history/issues.20260430_090641_509319001.jsonl +267 -0
  29. package/.beads/.br_history/issues.20260430_095140_396749398.jsonl +268 -0
  30. package/.beads/.br_history/issues.20260501_230041_334056077.jsonl +269 -0
  31. package/.beads/.br_recovery/beads.db-wal.20260427_121006_010373120.rebuild-failed +0 -0
  32. package/.beads/.br_recovery/beads.db.20260427_121006_010373120.rebuild-failed +0 -0
  33. package/.beads/beads.db.corrupted +0 -0
  34. package/.beads/issues.jsonl +46 -37
  35. package/.supercli/adapters/test-cli-adapter.js +19 -0
  36. package/cli/adapters/mcp.js +89 -3
  37. package/cli/adapters/openapi.js +71 -2
  38. package/cli/config.js +69 -1
  39. package/cli/daemon.js +349 -0
  40. package/cli/plugins-manager.js +41 -1
  41. package/cli/server-command.js +174 -4
  42. package/cli/supercli.js +35 -15
  43. package/docs/changelog-2026-04.html +6 -0
  44. package/docs/index.html +95 -8
  45. package/docs/plugins.html +30 -0
  46. package/docs/server.md +80 -0
  47. package/graphify-out/GRAPH_REPORT.md +140 -128
  48. package/graphify-out/cache/036077d325d5aa25fc6ad7f01ca32721b02e3f981231f67fb22f59380063572b.json +1 -0
  49. package/graphify-out/cache/11938479cfbdb8e52bf5f0f3c132d56204245ebb19aefe89bb0394feb36dbd5e.json +1 -0
  50. package/graphify-out/cache/141362b25039dee7a4959ef475befea0a25671aae66f3d14917e711e597ffbf6.json +1 -0
  51. package/graphify-out/cache/362adb1b6b483f56d09feaf652f4122366e568aaede752f48383b76d61f5d9d6.json +1 -0
  52. package/graphify-out/cache/42bc8f64d69d2cd9ecf64e92e38f89f7ea479f69c947de5984919e2fd5a716ee.json +1 -0
  53. package/graphify-out/cache/4b5cffce31d9193b7d0a8f15e8a41c66f6733a6490ebaeff2c8ca19701c72c0e.json +1 -0
  54. package/graphify-out/cache/5262fb95a8855fc90efbfff767eb3aacca82c4da5799605a969554580a255404.json +1 -0
  55. package/graphify-out/cache/5ef4e31750d9e7bc4ff4a7b535f247d9ab5ab9627d72e20794779ec4be424c66.json +1 -0
  56. package/graphify-out/cache/68e2b11c95ede4f05b88d001040008cb3ac72d7bd27f351497c87e128fb3b221.json +1 -0
  57. package/graphify-out/cache/6d5023ecffa52382d31152c8c06e86e286789228a3d4f7fde72087f3eafa11bc.json +1 -0
  58. package/graphify-out/cache/6e5776e123142a78f50fa0bfd5ae2d289282051a9b392ae507de7aa9017f95d4.json +1 -0
  59. package/graphify-out/cache/75982dc60fa7353600ca48a3b33f5ba497eea9d5743daac6e61e9cf4f64774be.json +1 -0
  60. package/graphify-out/cache/7796066b51d3a99071debdfb5f40c854400b5bf3aa7c1e83dd6ae88eddca0370.json +1 -0
  61. package/graphify-out/cache/8308aa47b396b929d5b896051ca91422afdde4861108d6f18f5094901093df79.json +1 -0
  62. package/graphify-out/cache/8ccd3b557a1ea98005fba84433f160ccd4a951fbdb6a4c9b7d7ba894f905b06b.json +1 -0
  63. package/graphify-out/cache/90ab53b8f1f3306e7c3a1f92ec628717ea90f4e684db764f7d7aa8e884fe2cae.json +1 -0
  64. package/graphify-out/cache/9832101a7622924f58b9e7d7752b41518049447171f7955e4c50dfd386574e12.json +1 -0
  65. package/graphify-out/cache/9fa6604cc820f3857c55c753ca0024788e4cbb61c4e12ba7ce0e4a1ce4ee0655.json +1 -0
  66. package/graphify-out/cache/a1e24a07beede2876e688cdb6c14e2d24abb22064862a6420cac321efabd3efd.json +1 -0
  67. package/graphify-out/cache/a418312f2805259c33007a18b36b6ae3b6a4da376ccae6006a3b9999262495db.json +1 -0
  68. package/graphify-out/cache/a6d9c029bd31a99b67357291305e27b01c5ef388925f7f2a6e985fec4efa8024.json +1 -0
  69. package/graphify-out/cache/a6ed52b709dd79f98adf72c483e8dfb6098203d7327470b82feb5e11390a5cf4.json +1 -0
  70. package/graphify-out/cache/b045ae4443d972ee8f47b91a0d61c984a190195b38ae1d331430b4c51c43acfd.json +1 -0
  71. package/graphify-out/cache/b849fb88344c2f88f3d22e42b67516e071c7d1e65f77f4ca23f25af6edfca3b3.json +1 -0
  72. package/graphify-out/cache/bc514f4074f89d2f7e7834670602e50bba0f24b8cd8c9d21ff4d361d3fd4d558.json +1 -0
  73. package/graphify-out/cache/be3fc87936f9f24d2d4f4b22b9d2a16f33f538cef1a181663120e23ecf16b81a.json +1 -0
  74. package/graphify-out/cache/c5a4822edbe3a95a56f9f943eed1567e5a5c913d59b1fa3df4ad54ffd9b02697.json +1 -0
  75. package/graphify-out/cache/cf411f1ddde50ee97c1c501f59ed7985bcdc022134574816bcce37ac20848e64.json +1 -0
  76. package/graphify-out/cache/d88625b5813742ca941ce8155cb77afb02425632002f621aca34f217440a392d.json +1 -0
  77. package/graphify-out/cache/da97fdc8af2a3306c292921110f84648bba2b0e85d27473b460b0e8a862ff225.json +1 -0
  78. package/graphify-out/cache/e88de9f1ae117f26fd217c3717eff7e525a284cc942b5f4d26ef2c4d65db59bd.json +1 -0
  79. package/graphify-out/cache/ebf6bd96ef2d8d396389ac7199e6ba818ee2d0c5dfc131fab7cdece9fb710f11.json +1 -0
  80. package/graphify-out/cache/f2a302550a6fe0649d36b8ef0b04b77673bca9f115732af8ae89751944dc9cc6.json +1 -0
  81. package/graphify-out/cache/f9ee11f4395cb41b6f6900079cb7e94297c89b1b0b4798398d2f7a2e244c683b.json +1 -0
  82. package/graphify-out/cache/fb46bd3ef530273918fc8915842453f21b418d536653d3b705b75b417255c246.json +1 -0
  83. package/graphify-out/cache/fcfdab94fe91af1f21fcefdba5a96674b9a16bb768288f3573fe68765163c765.json +1 -0
  84. package/graphify-out/graph.json +2420 -1157
  85. package/package.json +1 -1
  86. package/plugins/bluebuild/install-guidance.json +11 -0
  87. package/plugins/bluebuild/meta.json +5 -0
  88. package/plugins/bluebuild/plugin.json +99 -0
  89. package/plugins/bluebuild/skills/quickstart/SKILL.md +47 -0
  90. package/plugins/cargo-public-api/install-guidance.json +11 -0
  91. package/plugins/cargo-public-api/meta.json +5 -0
  92. package/plugins/cargo-public-api/plugin.json +88 -0
  93. package/plugins/cargo-public-api/skills/quickstart/SKILL.md +51 -0
  94. package/plugins/context-mode/plugin.json +10 -0
  95. package/plugins/context-mode/scripts/post-install.js +1 -1
  96. package/plugins/csview/install-guidance.json +11 -0
  97. package/plugins/csview/meta.json +5 -0
  98. package/plugins/csview/plugin.json +67 -0
  99. package/plugins/csview/skills/quickstart/SKILL.md +51 -0
  100. package/plugins/cymbal/install-guidance.json +11 -0
  101. package/plugins/cymbal/meta.json +5 -0
  102. package/plugins/cymbal/plugin.json +121 -0
  103. package/plugins/cymbal/skills/quickstart/SKILL.md +54 -0
  104. package/plugins/difftastic/install-guidance.json +11 -0
  105. package/plugins/difftastic/meta.json +5 -0
  106. package/plugins/difftastic/plugin.json +87 -0
  107. package/plugins/difftastic/skills/quickstart/SKILL.md +53 -0
  108. package/plugins/dlm/install-guidance.json +11 -0
  109. package/plugins/dlm/meta.json +5 -0
  110. package/plugins/dlm/plugin.json +85 -0
  111. package/plugins/dlm/skills/quickstart/SKILL.md +49 -0
  112. package/plugins/dofigen/install-guidance.json +11 -0
  113. package/plugins/dofigen/meta.json +5 -0
  114. package/plugins/dofigen/plugin.json +84 -0
  115. package/plugins/dofigen/skills/quickstart/SKILL.md +50 -0
  116. package/plugins/example-server-resources/meta.json +11 -0
  117. package/plugins/example-server-resources/plugin.json +46 -0
  118. package/plugins/http-nu/install-guidance.json +11 -0
  119. package/plugins/http-nu/meta.json +5 -0
  120. package/plugins/http-nu/plugin.json +84 -0
  121. package/plugins/http-nu/skills/quickstart/SKILL.md +52 -0
  122. package/plugins/hwatch/install-guidance.json +11 -0
  123. package/plugins/hwatch/meta.json +5 -0
  124. package/plugins/hwatch/plugin.json +100 -0
  125. package/plugins/hwatch/skills/quickstart/SKILL.md +54 -0
  126. package/plugins/hyperfine/install-guidance.json +3 -3
  127. package/plugins/hyperfine/meta.json +2 -2
  128. package/plugins/hyperfine/plugin.json +39 -16
  129. package/plugins/hyperfine/skills/quickstart/SKILL.md +33 -61
  130. package/plugins/json5/install-guidance.json +12 -0
  131. package/plugins/json5/meta.json +5 -0
  132. package/plugins/json5/plugin.json +88 -0
  133. package/plugins/json5/skills/quickstart/SKILL.md +55 -0
  134. package/plugins/mdsf/install-guidance.json +11 -0
  135. package/plugins/mdsf/meta.json +5 -0
  136. package/plugins/mdsf/plugin.json +101 -0
  137. package/plugins/mdsf/skills/quickstart/SKILL.md +55 -0
  138. package/plugins/oha/install-guidance.json +11 -0
  139. package/plugins/oha/meta.json +5 -0
  140. package/plugins/oha/plugin.json +67 -0
  141. package/plugins/oha/skills/quickstart/SKILL.md +44 -0
  142. package/plugins/pv-migrate/install-guidance.json +11 -0
  143. package/plugins/pv-migrate/meta.json +5 -0
  144. package/plugins/pv-migrate/plugin.json +102 -0
  145. package/plugins/pv-migrate/skills/quickstart/SKILL.md +58 -0
  146. package/plugins/rash/install-guidance.json +11 -0
  147. package/plugins/rash/meta.json +5 -0
  148. package/plugins/rash/plugin.json +85 -0
  149. package/plugins/rash/skills/quickstart/SKILL.md +46 -0
  150. package/plugins/rsonpath/install-guidance.json +11 -0
  151. package/plugins/rsonpath/meta.json +5 -0
  152. package/plugins/rsonpath/plugin.json +87 -0
  153. package/plugins/rsonpath/skills/quickstart/SKILL.md +44 -0
  154. package/plugins/rsql/install-guidance.json +11 -0
  155. package/plugins/rsql/meta.json +5 -0
  156. package/plugins/rsql/plugin.json +84 -0
  157. package/plugins/rsql/skills/quickstart/SKILL.md +52 -0
  158. package/plugins/temporal/install-guidance.json +11 -0
  159. package/plugins/temporal/meta.json +5 -0
  160. package/plugins/temporal/plugin.json +95 -0
  161. package/plugins/temporal/skills/quickstart/SKILL.md +49 -0
  162. package/plugins/tkn/install-guidance.json +11 -0
  163. package/plugins/tkn/meta.json +5 -0
  164. package/plugins/tkn/plugin.json +98 -0
  165. package/plugins/tkn/skills/quickstart/SKILL.md +50 -0
  166. package/plugins/toml2json/install-guidance.json +11 -0
  167. package/plugins/toml2json/meta.json +5 -0
  168. package/plugins/toml2json/plugin.json +85 -0
  169. package/plugins/toml2json/skills/quickstart/SKILL.md +47 -0
  170. package/plugins/worktrunk/install-guidance.json +11 -0
  171. package/plugins/worktrunk/meta.json +5 -0
  172. package/plugins/worktrunk/plugin.json +116 -0
  173. package/plugins/worktrunk/skills/quickstart/SKILL.md +62 -0
  174. package/server/app.js +46 -13
  175. package/server/middleware/auth.js +70 -0
  176. package/server/routes/adapters.js +3 -11
  177. package/server/routes/clients.js +46 -0
  178. package/server/routes/docs.js +10 -0
  179. package/server/routes/jobs.js +3 -2
  180. package/server/routes/mcp.js +1 -0
  181. package/server/routes/plugins.js +109 -26
  182. package/server/routes/settings.js +93 -0
  183. package/server/routes/specs.js +8 -3
  184. package/server/services/adaptersService.js +1 -0
  185. package/server/services/pluginResourceService.js +262 -0
  186. package/server/services/pluginsService.js +24 -0
  187. package/server/uploads/superbackend-openapi.json +47 -0
  188. package/server/uploads/test-auth-openapi.json +74 -0
  189. package/server/uploads/test-auth-spec.json +36 -0
  190. package/server/views/adapters.ejs +1 -0
  191. package/server/views/api-keys.ejs +147 -0
  192. package/server/views/clients.ejs +82 -0
  193. package/server/views/docs.ejs +7 -0
  194. package/server/views/jobs.ejs +26 -2
  195. package/server/views/layout.ejs +35 -21
  196. package/server/views/mcp.ejs +278 -21
  197. package/server/views/partials/head.ejs +4 -0
  198. package/server/views/plugins.ejs +33 -32
  199. package/server/views/settings.ejs +99 -0
  200. package/server/views/specs.ejs +217 -22
  201. package/.beads/.br_history/issues.20260427_103259_082222986.jsonl +0 -261
  202. package/.beads/.br_history/issues.20260427_103400_358332602.jsonl +0 -261
  203. package/.beads/.br_history/issues.20260427_103419_681839669.jsonl +0 -261
  204. package/.beads/.br_history/issues.20260427_103522_226669683.jsonl +0 -261
  205. package/.beads/.br_history/issues.20260427_103623_568379011.jsonl +0 -261
  206. package/.beads/.br_history/issues.20260427_103724_772051154.jsonl +0 -261
  207. package/.beads/.br_history/issues.20260427_103825_935228905.jsonl +0 -261
  208. package/.beads/.br_history/issues.20260427_103927_159626780.jsonl +0 -261
  209. package/.beads/.br_history/issues.20260427_104028_436388960.jsonl +0 -261
  210. package/.beads/.br_history/issues.20260427_104129_670562810.jsonl +0 -261
  211. package/.beads/.br_history/issues.20260427_104230_885162615.jsonl +0 -261
  212. package/.beads/.br_history/issues.20260427_104332_071213892.jsonl +0 -261
  213. package/.beads/.br_history/issues.20260427_104349_051129644.jsonl +0 -261
  214. package/.beads/.br_history/issues.20260427_104450_358444507.jsonl +0 -261
  215. package/.beads/.br_history/issues.20260427_104555_654123963.jsonl +0 -261
  216. package/.beads/.br_history/issues.20260427_104559_805009051.jsonl +0 -261
  217. package/.beads/.br_history/issues.20260427_104600_255068030.jsonl +0 -261
  218. package/.beads/.br_history/issues.20260427_104600_717042012.jsonl +0 -261
  219. package/.beads/.br_history/issues.20260427_104601_215845416.jsonl +0 -261
  220. package/.beads/.br_history/issues.20260427_104601_899140331.jsonl +0 -261
  221. package/.beads/.br_history/issues.20260427_104606_172300551.jsonl +0 -261
  222. package/.beads/.br_history/issues.20260427_104606_658098709.jsonl +0 -261
  223. package/.beads/.br_history/issues.20260427_104607_085798670.jsonl +0 -261
  224. package/.beads/.br_history/issues.20260427_104607_627598880.jsonl +0 -261
  225. package/.beads/.br_history/issues.20260427_104608_071298223.jsonl +0 -261
  226. package/.beads/.br_history/issues.20260427_104615_198124329.jsonl +0 -261
  227. package/scripts/post-tweet-issues.js +0 -161
  228. /package/.beads/.br_history/{issues.20260427_103259_082222986.jsonl.meta.json → issues.20260427_114912_061702372.jsonl.meta.json} +0 -0
  229. /package/.beads/.br_history/{issues.20260427_103400_358332602.jsonl.meta.json → issues.20260427_115013_063113906.jsonl.meta.json} +0 -0
  230. /package/.beads/.br_history/{issues.20260427_103419_681839669.jsonl.meta.json → issues.20260427_115114_208497343.jsonl.meta.json} +0 -0
  231. /package/.beads/.br_history/{issues.20260427_103522_226669683.jsonl.meta.json → issues.20260427_115215_176080241.jsonl.meta.json} +0 -0
  232. /package/.beads/.br_history/{issues.20260427_103623_568379011.jsonl.meta.json → issues.20260427_115316_481573328.jsonl.meta.json} +0 -0
  233. /package/.beads/.br_history/{issues.20260427_103724_772051154.jsonl.meta.json → issues.20260427_115335_866978652.jsonl.meta.json} +0 -0
  234. /package/.beads/.br_history/{issues.20260427_103825_935228905.jsonl.meta.json → issues.20260427_115436_866087391.jsonl.meta.json} +0 -0
  235. /package/.beads/.br_history/{issues.20260427_103927_159626780.jsonl.meta.json → issues.20260427_115538_016094860.jsonl.meta.json} +0 -0
  236. /package/.beads/.br_history/{issues.20260427_104028_436388960.jsonl.meta.json → issues.20260427_115638_932947449.jsonl.meta.json} +0 -0
  237. /package/.beads/.br_history/{issues.20260427_104129_670562810.jsonl.meta.json → issues.20260427_115739_982932603.jsonl.meta.json} +0 -0
  238. /package/.beads/.br_history/{issues.20260427_104230_885162615.jsonl.meta.json → issues.20260427_115840_963681039.jsonl.meta.json} +0 -0
  239. /package/.beads/.br_history/{issues.20260427_104332_071213892.jsonl.meta.json → issues.20260427_115941_912431509.jsonl.meta.json} +0 -0
  240. /package/.beads/.br_history/{issues.20260427_104349_051129644.jsonl.meta.json → issues.20260427_120043_043356448.jsonl.meta.json} +0 -0
  241. /package/.beads/.br_history/{issues.20260427_104450_358444507.jsonl.meta.json → issues.20260427_120144_955596968.jsonl.meta.json} +0 -0
  242. /package/.beads/.br_history/{issues.20260427_104555_654123963.jsonl.meta.json → issues.20260427_120246_060733977.jsonl.meta.json} +0 -0
  243. /package/.beads/.br_history/{issues.20260427_104559_805009051.jsonl.meta.json → issues.20260427_120307_717985017.jsonl.meta.json} +0 -0
  244. /package/.beads/.br_history/{issues.20260427_104600_255068030.jsonl.meta.json → issues.20260427_120408_871846736.jsonl.meta.json} +0 -0
  245. /package/.beads/.br_history/{issues.20260427_104600_717042012.jsonl.meta.json → issues.20260427_121003_963750732.jsonl.meta.json} +0 -0
  246. /package/.beads/.br_history/{issues.20260427_104601_215845416.jsonl.meta.json → issues.20260427_121006_018509431.jsonl.meta.json} +0 -0
  247. /package/.beads/.br_history/{issues.20260427_104601_899140331.jsonl.meta.json → issues.20260427_121019_617062931.jsonl.meta.json} +0 -0
  248. /package/.beads/.br_history/{issues.20260427_104606_172300551.jsonl.meta.json → issues.20260427_121021_689536311.jsonl.meta.json} +0 -0
  249. /package/.beads/.br_history/{issues.20260427_104606_658098709.jsonl.meta.json → issues.20260428_172005_240631447.jsonl.meta.json} +0 -0
  250. /package/.beads/.br_history/{issues.20260427_104607_085798670.jsonl.meta.json → issues.20260430_073641_144807989.jsonl.meta.json} +0 -0
  251. /package/.beads/.br_history/{issues.20260427_104607_627598880.jsonl.meta.json → issues.20260430_073642_807075699.jsonl.meta.json} +0 -0
  252. /package/.beads/.br_history/{issues.20260427_104608_071298223.jsonl.meta.json → issues.20260430_073645_625754223.jsonl.meta.json} +0 -0
  253. /package/.beads/.br_history/{issues.20260427_104615_198124329.jsonl.meta.json → issues.20260430_090639_154646058.jsonl.meta.json} +0 -0
  254. /package/.beads/.br_history/{issues.20260427_104615_669652069.jsonl.meta.json → issues.20260430_090640_350560318.jsonl.meta.json} +0 -0
  255. /package/.beads/.br_history/{issues.20260427_104637_752744777.jsonl.meta.json → issues.20260430_090641_509319001.jsonl.meta.json} +0 -0
  256. /package/.beads/.br_history/{issues.20260427_104638_209211116.jsonl.meta.json → issues.20260430_095140_396749398.jsonl.meta.json} +0 -0
  257. /package/.beads/.br_history/{issues.20260427_104638_898729442.jsonl.meta.json → issues.20260501_230041_334056077.jsonl.meta.json} +0 -0
@@ -1,10 +1,10 @@
1
1
  const fs = require("fs")
2
2
  const path = require("path")
3
- const os = require("os")
4
3
  const { spawnSync } = require("child_process")
5
4
  const { SUPPORTED_ADAPTERS } = require("./adapter-schema")
6
5
  const { getRegistryPlugin } = require("./plugins-registry")
7
6
  const { getPluginInstallGuidance } = require("./plugin-install-guidance")
7
+ const { syncClientPluginResources } = require("./config")
8
8
  const {
9
9
  readPluginsLock,
10
10
  writePluginsLock,
@@ -78,6 +78,36 @@ function parseManifestFile(manifestPath) {
78
78
  recoverable: false
79
79
  })
80
80
  }
81
+
82
+ // Validate server_resources if present
83
+ if (raw.server_resources) {
84
+ if (typeof raw.server_resources !== "object" || Array.isArray(raw.server_resources)) {
85
+ throw Object.assign(new Error("Invalid plugin manifest: server_resources must be an object"), {
86
+ code: 85,
87
+ type: "invalid_argument",
88
+ recoverable: false
89
+ })
90
+ }
91
+
92
+ // Validate mcp resources
93
+ if (raw.server_resources.mcp && !Array.isArray(raw.server_resources.mcp)) {
94
+ throw Object.assign(new Error("Invalid plugin manifest: server_resources.mcp must be an array"), {
95
+ code: 85,
96
+ type: "invalid_argument",
97
+ recoverable: false
98
+ })
99
+ }
100
+
101
+ // Validate spec resources
102
+ if (raw.server_resources.specs && !Array.isArray(raw.server_resources.specs)) {
103
+ throw Object.assign(new Error("Invalid plugin manifest: server_resources.specs must be an array"), {
104
+ code: 85,
105
+ type: "invalid_argument",
106
+ recoverable: false
107
+ })
108
+ }
109
+ }
110
+
81
111
  return raw
82
112
  }
83
113
 
@@ -504,6 +534,7 @@ function installPlugin(ref, options = {}) {
504
534
  installed_at: new Date().toISOString(),
505
535
  commands: installedCommands,
506
536
  checks: manifest.checks || [],
537
+ server_resources: manifest.server_resources || {},
507
538
  lifecycle_hooks: {
508
539
  post_uninstall: serializeHook(loaded.manifestPath, manifest.post_uninstall, "post_uninstall")
509
540
  }
@@ -511,6 +542,15 @@ function installPlugin(ref, options = {}) {
511
542
 
512
543
  const postInstall = runPostInstall(manifest, loaded.manifestPath)
513
544
  writePluginsLock(lock)
545
+
546
+ // Sync client plugin resources to server if SUPERCLI_SERVER is set (fire and forget)
547
+ const server = process.env.SUPERCLI_SERVER
548
+ if (server && manifest.server_resources) {
549
+ syncClientPluginResources(server).catch(err => {
550
+ console.warn(`[Plugin ${manifest.name}] Failed to sync resources to server:`, err.message)
551
+ })
552
+ }
553
+
514
554
  return {
515
555
  plugin: manifest.name,
516
556
  version: manifest.version || "0.0.0",
@@ -2,6 +2,7 @@ const fs = require("fs")
2
2
  const path = require("path")
3
3
 
4
4
  const SERVER = process.env.SUPERCLI_SERVER
5
+ const API_KEY = process.env.SUPERCLI_API_KEY
5
6
 
6
7
  function getServerUrl() {
7
8
  return SERVER ? SERVER.replace(/\/$/, "") : null
@@ -13,12 +14,17 @@ async function serverFetch(endpoint, options = {}) {
13
14
  throw new Error("SUPERCLI_SERVER not set. Set it to your server URL.")
14
15
  }
15
16
  const url = `${base}${endpoint}`
17
+ const headers = {
18
+ "Content-Type": "application/json",
19
+ "Accept": "application/json",
20
+ ...options.headers,
21
+ }
22
+ if (API_KEY) {
23
+ headers["X-API-Key"] = API_KEY
24
+ }
16
25
  const res = await fetch(url, {
17
26
  ...options,
18
- headers: {
19
- "Content-Type": "application/json",
20
- ...options.headers,
21
- },
27
+ headers,
22
28
  })
23
29
  if (!res.ok) {
24
30
  const text = await res.text()
@@ -76,6 +82,8 @@ async function handleServerCommand(options) {
76
82
  return await handleOpenapi({ action, arg, flags, humanMode, output })
77
83
  case "jobs":
78
84
  return await handleJobs({ action, flags, humanMode, output, outputHumanTable })
85
+ case "adapters":
86
+ return await handleAdapters({ action, arg, flags, humanMode, output, outputHumanTable, positional })
79
87
  default:
80
88
  outputError({ code: 85, type: "invalid_argument", message: `Unknown server resource: ${resource}`, recoverable: false })
81
89
  return true
@@ -392,4 +400,166 @@ async function handleJobs({ action, flags, humanMode, output, outputHumanTable }
392
400
  throw new Error(`Unknown jobs action: ${action}. Use: list, prune`)
393
401
  }
394
402
 
403
+ async function handleAdapters({ action, arg, flags, humanMode, output, outputHumanTable, positional }) {
404
+ if (action === "list") {
405
+ const data = await serverFetch("/api/adapters?format=json")
406
+ if (humanMode) {
407
+ console.log("\n ⚡ Adapters\n")
408
+ outputHumanTable(data.adapters, [
409
+ { key: "name", label: "Name" },
410
+ { key: "execution_context", label: "Context" },
411
+ { key: "timeout_ms", label: "Timeout" },
412
+ { key: "allow_network", label: "Network" },
413
+ ])
414
+ console.log("")
415
+ } else {
416
+ output(data)
417
+ }
418
+ return true
419
+ }
420
+
421
+ if (action === "add") {
422
+ let payload
423
+ const jsonPath = flags["from-file"]
424
+ const sourcePath = flags["source-file"]
425
+ const jsonData = positional[3]
426
+
427
+ if (jsonPath) {
428
+ payload = readJsonFile(jsonPath)
429
+ if (sourcePath) {
430
+ payload.source = fs.readFileSync(path.resolve(sourcePath), "utf-8")
431
+ }
432
+ } else if (sourcePath) {
433
+ if (!jsonData) {
434
+ throw new Error("Usage: supercli server adapters add '{metadata}' --source-file <path>")
435
+ }
436
+ payload = JSON.parse(jsonData)
437
+ payload.source = fs.readFileSync(path.resolve(sourcePath), "utf-8")
438
+ } else if (flags["from-stdin"]) {
439
+ let stdinData = ""
440
+ for await (const chunk of process.stdin) {
441
+ stdinData += chunk
442
+ }
443
+ payload = JSON.parse(stdinData)
444
+ } else if (jsonData) {
445
+ payload = JSON.parse(jsonData)
446
+ } else {
447
+ throw new Error("Usage: supercli server adapters add '{json}' or --from-file <path> or --source-file <path>")
448
+ }
449
+
450
+ if (!payload.name || !payload.source) {
451
+ throw new Error("Adapter requires 'name' and 'source' fields")
452
+ }
453
+
454
+ const result = await serverFetch("/api/adapters", {
455
+ method: "POST",
456
+ body: JSON.stringify(payload),
457
+ })
458
+ output(result)
459
+ return true
460
+ }
461
+
462
+ if (action === "remove") {
463
+ const adapterName = positional[3]
464
+ if (!adapterName) {
465
+ throw new Error("Usage: supercli server adapters remove <name>")
466
+ }
467
+ const result = await serverFetch(`/api/adapters/${encodeURIComponent(adapterName)}`, {
468
+ method: "DELETE",
469
+ })
470
+ output(result)
471
+ return true
472
+ }
473
+
474
+ if (action === "update") {
475
+ const adapterName = positional[3]
476
+ const updateData = positional[4]
477
+ if (!adapterName) {
478
+ throw new Error("Usage: supercli server adapters update <name> '{json}' or --from-file <path>")
479
+ }
480
+ let payload
481
+ const jsonPath = flags["from-file"]
482
+ const sourcePath = flags["source-file"]
483
+
484
+ if (jsonPath) {
485
+ payload = readJsonFile(jsonPath)
486
+ if (sourcePath) {
487
+ payload.source = fs.readFileSync(path.resolve(sourcePath), "utf-8")
488
+ }
489
+ } else if (sourcePath) {
490
+ payload = JSON.parse(updateData || "{}")
491
+ payload.source = fs.readFileSync(path.resolve(sourcePath), "utf-8")
492
+ } else if (flags["from-stdin"]) {
493
+ let stdinData = ""
494
+ for await (const chunk of process.stdin) {
495
+ stdinData += chunk
496
+ }
497
+ payload = JSON.parse(stdinData)
498
+ } else {
499
+ payload = JSON.parse(updateData || "{}")
500
+ }
501
+
502
+ const result = await serverFetch(`/api/adapters/${encodeURIComponent(adapterName)}`, {
503
+ method: "PUT",
504
+ body: JSON.stringify(payload),
505
+ })
506
+ output(result)
507
+ return true
508
+ }
509
+
510
+ if (action === "packages") {
511
+ const packageAction = arg
512
+ const targetAdapterName = positional[4]
513
+
514
+ if (!targetAdapterName) {
515
+ throw new Error("Usage: supercli server adapters packages <list|add|remove> <name>")
516
+ }
517
+
518
+ if (packageAction === "list") {
519
+ const data = await serverFetch(`/api/adapters/${encodeURIComponent(targetAdapterName)}/packages?format=json`)
520
+ if (humanMode) {
521
+ console.log(`\n ⚡ Packages for ${targetAdapterName}\n`)
522
+ outputHumanTable(data.packages || [], [
523
+ { key: "package", label: "Package" },
524
+ { key: "version", label: "Version" },
525
+ ])
526
+ console.log("")
527
+ } else {
528
+ output(data)
529
+ }
530
+ return true
531
+ }
532
+
533
+ if (packageAction === "add") {
534
+ const packageName = flags.package
535
+ const version = flags.version
536
+ if (!packageName) {
537
+ throw new Error("Usage: supercli server adapters packages add <name> --package <pkg> --version <ver>")
538
+ }
539
+ const result = await serverFetch(`/api/adapters/${encodeURIComponent(targetAdapterName)}/packages`, {
540
+ method: "POST",
541
+ body: JSON.stringify({ package: packageName, version }),
542
+ })
543
+ output(result)
544
+ return true
545
+ }
546
+
547
+ if (packageAction === "remove") {
548
+ const packageName = flags.package
549
+ if (!packageName) {
550
+ throw new Error("Usage: supercli server adapters packages remove <name> --package <pkg>")
551
+ }
552
+ const result = await serverFetch(`/api/adapters/${encodeURIComponent(targetAdapterName)}/packages/${encodeURIComponent(packageName)}`, {
553
+ method: "DELETE",
554
+ })
555
+ output(result)
556
+ return true
557
+ }
558
+
559
+ throw new Error(`Unknown packages action: ${packageAction}. Use: list, add, remove`)
560
+ }
561
+
562
+ throw new Error(`Unknown adapters action: ${action}. Use: list, add, remove, update, packages`)
563
+ }
564
+
395
565
  module.exports = { handleServerCommand }
package/cli/supercli.js CHANGED
@@ -9,6 +9,7 @@ const {
9
9
  removeMcpServer,
10
10
  listMcpServers,
11
11
  upsertCommand,
12
+ getClientId,
12
13
  } = require("./config");
13
14
  const { execute } = require("./executor");
14
15
  const { buildCapabilities } = require("./help-json");
@@ -25,6 +26,7 @@ const { handleAskCommand } = require("./ask");
25
26
  const { handleSkillsCommand } = require("./skills");
26
27
  const { findNamespacePassthrough } = require("./namespace-passthrough");
27
28
  const { discoverPluginsByIntent } = require("./discover");
29
+ const { startDaemon, stopDaemon, getDaemonStatus, writeLog } = require("./daemon");
28
30
 
29
31
  const SERVER = process.env.SUPERCLI_SERVER;
30
32
  const hasServer = !!SERVER;
@@ -236,7 +238,7 @@ function renderTopLevelHelp(config) {
236
238
  console.log(' AI: supercli ask "<your natural language query>" # LLM-powered suggestions (no execution)');
237
239
  }
238
240
  console.log(" Server: supercli --server");
239
- console.log(" Server CLI: supercli server status | supercli server plugins <list|add|remove> | supercli server mcp <list|add|remove> | supercli server commands <list|add|remove> | supercli server jobs <list|prune>");
241
+ console.log(" Server CLI: supercli server status | supercli server plugins <list|add|remove> | supercli server mcp <list|add|remove> | supercli server commands <list|add|remove> | supercli server jobs <list|prune> | supercli server adapters <list|add|remove|update> | supercli server adapters packages <list|add|remove> <name>");
240
242
  console.log(
241
243
  " Flags: --help | --json | --human | --compact | --schema | --help-json | --server\n",
242
244
  );
@@ -570,6 +572,29 @@ async function main() {
570
572
  return;
571
573
  }
572
574
 
575
+ if (positional[0] === "daemon") {
576
+ const subcommand = positional[1] || "status";
577
+ switch (subcommand) {
578
+ case "start":
579
+ output(startDaemon());
580
+ break;
581
+ case "stop":
582
+ output(stopDaemon());
583
+ break;
584
+ case "status":
585
+ output(getDaemonStatus());
586
+ break;
587
+ default:
588
+ outputError({
589
+ code: 85,
590
+ type: "invalid_argument",
591
+ message: "Unknown daemon subcommand. Use: start|stop|status",
592
+ recoverable: false,
593
+ });
594
+ }
595
+ return;
596
+ }
597
+
573
598
  if (positional[0] === "commands") {
574
599
  const config = await loadConfig(SERVER);
575
600
  const namespaceFilter = flags.namespace
@@ -959,20 +984,15 @@ async function main() {
959
984
  data: result,
960
985
  };
961
986
 
962
- // Post job record (async, non-blocking)
963
- if (hasServer) {
964
- fetch(`${SERVER}/api/jobs`, {
965
- method: "POST",
966
- headers: { "Content-Type": "application/json" },
967
- body: JSON.stringify({
968
- command: `${namespace}.${resource}.${action}`,
969
- args: uFlags,
970
- status: "success",
971
- duration_ms: duration,
972
- timestamp: new Date().toISOString(),
973
- }),
974
- }).catch(() => {}); // silent fail
975
- }
987
+ // Write job record to local log (daemon will sync to server)
988
+ writeLog({
989
+ command: `${namespace}.${resource}.${action}`,
990
+ args: uFlags,
991
+ status: "success",
992
+ duration_ms: duration,
993
+ timestamp: new Date().toISOString(),
994
+ client_id: getClientId(),
995
+ });
976
996
 
977
997
  if (humanMode) {
978
998
  process.stderr.write(
@@ -158,6 +158,11 @@
158
158
  <li>Add server dashboard with command overview and job monitoring</li>
159
159
  <li>Add adapter management UI with package installation and configuration</li>
160
160
  <li>Add 12 new plugins: biome, bore, ccf-deadlines, code2prompt, dua-cli, forever, gitmoji-cli, quarto, readme-md-generator, vale, volta, wgcf</li>
161
+ <li>Add authentication system for API endpoints with public_access flag and API key management</li>
162
+ <li>Add daemon for background job log syncing to server</li>
163
+ <li>Add client tracking with client_id in job records</li>
164
+ <li>Add API keys management UI with create, list, copy, and delete functionality</li>
165
+ <li>Add clients.ejs for client management view</li>
161
166
  </ul>
162
167
  </section>
163
168
 
@@ -188,6 +193,7 @@
188
193
  </h2>
189
194
  <ul class="space-y-2 text-slate-300">
190
195
  <li>Bump version to 1.1.14</li>
196
+ <li>Bump version to 1.1.23</li>
191
197
  </ul>
192
198
  </section>
193
199
 
package/docs/index.html CHANGED
@@ -103,6 +103,9 @@
103
103
  background: #333333;
104
104
  transform: scale(1.05);
105
105
  }
106
+ .radial-gradient {
107
+ background: radial-gradient(circle at 30% 50%, rgba(0, 0, 0, 0.03) 0%, transparent 70%);
108
+ }
106
109
  </style>
107
110
  </head>
108
111
  <body class="bg-[#FBFBFA]">
@@ -114,6 +117,9 @@
114
117
  <h1 class="text-2xl font-semibold mt-3 text-[#111111]">supercli</h1>
115
118
  <p class="text-sm text-[#787774] mt-1">Universal Capability Router</p>
116
119
  </div>
120
+ <div id="backToServerUI" class="hidden">
121
+ <a href="/" class="block px-3 py-2 text-sm text-[#1F6C9F] hover:bg-[#F7F6F3] rounded-md">← Back to Server UI</a>
122
+ </div>
117
123
  <nav class="space-y-6">
118
124
  <div>
119
125
  <p class="text-xs uppercase tracking-widest text-[#787774] mb-3">Overview</p>
@@ -155,6 +161,46 @@
155
161
  </header>
156
162
 
157
163
  <main class="flex-1 overflow-y-auto bg-[#FBFBFA]">
164
+ <!-- Hero Section -->
165
+ <section class="relative px-8 py-20 bg-[#FBFBFA]">
166
+ <div class="absolute inset-0 opacity-[0.03] radial-gradient"></div>
167
+ <div class="max-w-5xl relative z-10">
168
+ <div class="space-y-8 scroll-reveal">
169
+ <div class="space-y-4">
170
+ <span class="tag px-3 py-1 inline-block">The Capability Layer</span>
171
+ <h2 class="editorial-heading text-6xl font-medium text-[#111111] leading-[1.1]">
172
+ Turn every tool into<br/>a discoverable capability
173
+ </h2>
174
+ </div>
175
+
176
+ <div class="max-w-2xl space-y-4 text-[#2F3437] text-lg">
177
+ <p>supercli standardizes inputs, outputs, and execution across 999+ bundled plugins — from AWS, GitHub, Docker, to Kubernetes and beyond.</p>
178
+ </div>
179
+
180
+ <div class="flex flex-wrap gap-8 pt-4">
181
+ <div class="space-y-1">
182
+ <p class="text-4xl font-semibold text-[#111111]">999+</p>
183
+ <p class="text-sm text-[#787774]">Bundled plugins</p>
184
+ </div>
185
+ <div class="space-y-1">
186
+ <p class="text-4xl font-semibold text-[#111111]">Zero</p>
187
+ <p class="text-sm text-[#787774]">Setup required</p>
188
+ </div>
189
+ <div class="space-y-1">
190
+ <p class="text-4xl font-semibold text-[#111111]">One</p>
191
+ <p class="text-sm text-[#787774]">Consistent interface</p>
192
+ </div>
193
+ </div>
194
+
195
+ <div class="pt-6">
196
+ <a href="plugins.html" class="inline-block px-8 py-4 bg-[#111111] text-white text-sm font-medium rounded-md hover:bg-[#333333] transition-colors">
197
+ Explore 999+ Plugins
198
+ </a>
199
+ </div>
200
+ </div>
201
+ </div>
202
+ </section>
203
+
158
204
  <section class="border-b border-[#EAEAEA] bg-white px-8 py-12">
159
205
  <div class="max-w-5xl">
160
206
  <p class="text-xs uppercase tracking-[0.2em] text-[#787774] mb-4">Quick filter</p>
@@ -195,14 +241,21 @@ supercli skills get beads.issue.create</code></pre>
195
241
  <h2 class="editorial-heading text-5xl font-medium text-[#111111]">Capability Sources</h2>
196
242
  </div>
197
243
  <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
244
+ <div class="bento-card p-6 md:col-span-2 bg-[#E1F3FE]/10 border-[#E1F3FE]/30">
245
+ <div class="flex items-start justify-between gap-4">
246
+ <div class="space-y-3">
247
+ <h3 class="font-semibold text-[#111111]">Plugin Harnesses</h3>
248
+ <p class="text-[#2F3437] text-sm">999 bundled plugins (gh, aws, gcloud, az, docker, kubectl, terraform, stripe, supabase, and many more) via <code class="mono-text bg-[#F7F6F3] px-1 py-0.5 rounded text-xs border border-[#EAEAEA]">supercli plugins install</code>.</p>
249
+ </div>
250
+ <a href="plugins.html" class="inline-flex items-center px-4 py-2 bg-[#111111] text-white text-sm font-medium rounded-md hover:bg-[#333333] transition-colors whitespace-nowrap">
251
+ Explore Plugins
252
+ </a>
253
+ </div>
254
+ </div>
198
255
  <div class="bento-card p-6">
199
256
  <h3 class="font-semibold text-[#111111] mb-2">Built-in Adapters</h3>
200
257
  <p class="text-[#2F3437] text-sm">OpenAPI specs, raw HTTP, and MCP servers become capabilities automatically.</p>
201
258
  </div>
202
- <div class="bento-card p-6">
203
- <h3 class="font-semibold text-[#111111] mb-2">Plugin Harnesses</h3>
204
- <p class="text-[#2F3437] text-sm">999 bundled plugins (gh, aws, gcloud, az, docker, kubectl, terraform, stripe, supabase, and many more) via <code class="mono-text bg-[#F7F6F3] px-1 py-0.5 rounded text-xs border border-[#EAEAEA]">supercli plugins install</code>.</p>
205
- </div>
206
259
  <div class="bento-card p-6">
207
260
  <h3 class="font-semibold text-[#111111] mb-2">AI Plans / Workflows</h3>
208
261
  <p class="text-[#2F3437] text-sm">Natural language <code class="mono-text bg-[#F7F6F3] px-1 py-0.5 rounded text-xs border border-[#EAEAEA]">ask</code> and <code class="mono-text bg-[#F7F6F3] px-1 py-0.5 rounded text-xs border border-[#EAEAEA]">plan</code> commands create DAGs of capabilities.</p>
@@ -281,14 +334,21 @@ supercli plugins show &lt;name&gt;</code></pre>
281
334
  <h2 class="editorial-heading text-5xl font-medium text-[#111111]">More Documentation</h2>
282
335
  </div>
283
336
  <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
337
+ <a href="plugins.html" class="bento-card p-6 md:col-span-2 bg-[#E1F3FE]/10 border-[#E1F3FE]/30 hover:border-[#E1F3FE]/50 transition-colors">
338
+ <div class="flex items-start justify-between gap-4">
339
+ <div class="space-y-2">
340
+ <h3 class="font-semibold text-[#111111] mono-text text-sm">Plugin Directory</h3>
341
+ <p class="text-[#2F3437] text-sm">Browse all 999+ plugins — from AWS and GitHub to Docker, Kubernetes, and beyond.</p>
342
+ </div>
343
+ <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#111111" stroke-width="2" class="flex-shrink-0 mt-1">
344
+ <path d="M5 12h14M12 5l7 7-7 7"/>
345
+ </svg>
346
+ </div>
347
+ </a>
284
348
  <div class="bento-card p-6">
285
349
  <h3 class="font-semibold text-[#111111] mb-2 mono-text text-sm">README.md</h3>
286
350
  <p class="text-[#2F3437] text-sm">Repository root documentation</p>
287
351
  </div>
288
- <a href="plugins.html" class="bento-card p-6 hover:border-[#111111] transition-colors">
289
- <h3 class="font-semibold text-[#111111] mb-2 mono-text text-sm">Plugin Directory</h3>
290
- <p class="text-[#2F3437] text-sm">Browse all 999 plugins</p>
291
- </a>
292
352
  <div class="bento-card p-6">
293
353
  <h3 class="font-semibold text-[#111111] mb-2 mono-text text-sm">docs/skills-catalog.md</h3>
294
354
  <p class="text-[#2F3437] text-sm">Skills reference catalog</p>
@@ -434,6 +494,33 @@ supercli plugins show &lt;name&gt;</code></pre>
434
494
  }
435
495
  loadServerDocs();
436
496
 
497
+ // Show "Back to Server UI" link if fromServerUI parameter is present
498
+ const urlParams = new URLSearchParams(window.location.search);
499
+ const fromServerUI = urlParams.get('fromServerUI') === '1';
500
+
501
+ if (fromServerUI) {
502
+ const backToServerUI = document.getElementById('backToServerUI');
503
+ if (backToServerUI) {
504
+ backToServerUI.classList.remove('hidden');
505
+ }
506
+
507
+ // Propagate fromServerUI parameter to all sidebar links (except back to server UI)
508
+ const sidebarLinks = document.querySelectorAll('#sidebar a');
509
+ sidebarLinks.forEach(link => {
510
+ const href = link.getAttribute('href');
511
+ // Skip the back to server UI link
512
+ if (link.closest('#backToServerUI')) return;
513
+
514
+ if (href && !href.startsWith('http') && !href.startsWith('#')) {
515
+ // Get current path to preserve /docs/ base
516
+ const currentPath = window.location.pathname.substring(0, window.location.pathname.lastIndexOf('/') + 1);
517
+ const url = new URL(currentPath + href, window.location.origin);
518
+ url.searchParams.set('fromServerUI', '1');
519
+ link.setAttribute('href', url.pathname + url.search);
520
+ }
521
+ });
522
+ }
523
+
437
524
  // Load adapters documentation dynamically
438
525
  async function loadAdaptersDocs() {
439
526
  try {
package/docs/plugins.html CHANGED
@@ -109,6 +109,9 @@
109
109
  <h1 class="text-2xl font-semibold mt-3 text-[#111111]">supercli</h1>
110
110
  <p class="text-sm text-[#787774] mt-1">Plugin Directory</p>
111
111
  </div>
112
+ <div id="backToServerUI" class="hidden">
113
+ <a href="/" class="block px-3 py-2 text-sm text-[#1F6C9F] hover:bg-[#F7F6F3] rounded-md">← Back to Server UI</a>
114
+ </div>
112
115
  <nav class="space-y-6">
113
116
  <div>
114
117
  <p class="text-xs uppercase tracking-widest text-[#787774] mb-3">Navigation</p>
@@ -345,6 +348,33 @@
345
348
  if (e.target === mobileDrawer) mobileDrawer.classList.add('hidden');
346
349
  });
347
350
 
351
+ // Show "Back to Server UI" link if fromServerUI parameter is present
352
+ const urlParams = new URLSearchParams(window.location.search);
353
+ const fromServerUI = urlParams.get('fromServerUI') === '1';
354
+
355
+ if (fromServerUI) {
356
+ const backToServerUI = document.getElementById('backToServerUI');
357
+ if (backToServerUI) {
358
+ backToServerUI.classList.remove('hidden');
359
+ }
360
+
361
+ // Propagate fromServerUI parameter to all sidebar links (except back to server UI)
362
+ const sidebarLinks = document.querySelectorAll('#sidebar a');
363
+ sidebarLinks.forEach(link => {
364
+ const href = link.getAttribute('href');
365
+ // Skip the back to server UI link
366
+ if (link.closest('#backToServerUI')) return;
367
+
368
+ if (href && !href.startsWith('http') && !href.startsWith('#')) {
369
+ // Get current path to preserve /docs/ base
370
+ const currentPath = window.location.pathname.substring(0, window.location.pathname.lastIndexOf('/') + 1);
371
+ const url = new URL(currentPath + href, window.location.origin);
372
+ url.searchParams.set('fromServerUI', '1');
373
+ link.setAttribute('href', url.pathname + url.search);
374
+ }
375
+ });
376
+ }
377
+
348
378
  // Scroll to top button
349
379
  const scrollTopBtn = document.getElementById('scrollTopBtn');
350
380
 
package/docs/server.md CHANGED
@@ -41,6 +41,86 @@ Manage OpenAPI specifications at `/specs`. Upload OpenAPI/Swagger JSON or YAML f
41
41
 
42
42
  Manage Model Context Protocol server connections at `/mcp`. Connect to MCP servers via SSE or stdio to expose their tools as supercli commands.
43
43
 
44
+ ### MCP Transport Modes
45
+
46
+ The supercli MCP adapter supports multiple transport modes:
47
+
48
+ #### HTTP/SSE MCP
49
+ - Use `adapterConfig.url` for HTTP-based MCP servers
50
+ - Supercli MCP adapter automatically supports SSE streaming
51
+ - Sends `Accept: text/event-stream, application/json` header
52
+ - Parses SSE responses and returns accumulated results
53
+ - Uses JSON-RPC 2.0 format for requests
54
+
55
+ Example configuration:
56
+ ```json
57
+ {
58
+ "adapterConfig": {
59
+ "url": "http://localhost:3002",
60
+ "tool": "get_deep_directory_tree"
61
+ }
62
+ }
63
+ ```
64
+
65
+ #### Stdio MCP with Daemon
66
+ - Use `adapterConfig.server` + `adapterConfig.stateful: true` for stdio MCPs
67
+ - Best for local stdio MCP servers
68
+ - Routes through MCP daemon for stateful stdio handling
69
+ - **Daemon runs on CLI side** (not server) - starts on-demand when first command is executed via CLI
70
+ - Daemon runs as detached background process with Unix socket at `~/.supercli/mcp-daemon.sock`
71
+ - Persists across command executions to maintain MCP server sessions
72
+ - Manual control: `supercli mcp daemon start/stop/status`
73
+
74
+ Example configuration:
75
+ ```json
76
+ {
77
+ "adapterConfig": {
78
+ "server": "deep-directory-tree",
79
+ "tool": "tool_name",
80
+ "stateful": true,
81
+ "timeout_ms": 60000
82
+ }
83
+ }
84
+ ```
85
+
86
+ #### Stdio MCP Direct
87
+ - Use `adapterConfig.command` for direct stdio calls
88
+ - May have compatibility issues with different MCP implementations
89
+
90
+ ### Using mcp-proxy with Supercli
91
+
92
+ The mcp-proxy tool transforms stdio MCPs into HTTP/SSE. Here's how to use it:
93
+
94
+ 1. Start mcp-proxy:
95
+ ```bash
96
+ npx -y mcp-proxy --port 3002 -- npx -y @andredezzy/deep-directory-tree-mcp
97
+ ```
98
+
99
+ 2. Add MCP server to supercli:
100
+ ```bash
101
+ supercli server mcp add '{"name":"deep-tree","url":"http://localhost:3002"}'
102
+ ```
103
+
104
+ 3. Create command:
105
+ ```bash
106
+ supercli server commands add '{"namespace":"tree","resource":"deep","action":"list","adapter":"mcp","adapterConfig":{"url":"http://localhost:3002","tool":"get_deep_directory_tree"}}'
107
+ ```
108
+
109
+ 4. Sync and use:
110
+ ```bash
111
+ supercli sync
112
+ supercli tree deep list --path /some/dir --depth 3
113
+ ```
114
+
115
+ **Note:** Use space syntax for arguments: `--path /dir` not `--path=/dir`
116
+
117
+ ### MCP Adapter Features
118
+
119
+ - **Auto-detection**: Automatically detects SSE responses and falls back to JSON
120
+ - **JSON-RPC Support**: Uses JSON-RPC 2.0 format for HTTP MCP calls
121
+ - **SSE Parsing**: Parses Server-Sent Events and accumulates results
122
+ - **Stream Flag**: Reserved for future streaming output support (`--stream`)
123
+
44
124
  ## Plugins
45
125
 
46
126
  Manage server plugins at `/plugins`. Upload plugin ZIP files, enable/disable plugins, and view plugin manifests. Server plugins extend CLI capabilities with custom commands and harnesses.