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
@@ -0,0 +1,11 @@
1
+ {
2
+ "plugin": "toml2json",
3
+ "binary": "toml2json",
4
+ "check": "which toml2json",
5
+ "install_steps": [
6
+ "cargo install toml2json",
7
+ "Verify: toml2json --version",
8
+ "supercli plugins install ./plugins/toml2json --on-conflict replace --json"
9
+ ],
10
+ "note": "Tiny single-purpose tool available via crates.io."
11
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "description": "Very small CLI for converting TOML to JSON. Reads from stdin or files with pretty-print support.",
3
+ "tags": ["toml2json", "toml", "json", "converter", "cli", "rust"],
4
+ "has_learn": true
5
+ }
@@ -0,0 +1,85 @@
1
+ {
2
+ "name": "toml2json",
3
+ "version": "0.1.0",
4
+ "description": "Convert TOML to JSON from stdin or files",
5
+ "source": "https://github.com/woodruffw/toml2json",
6
+ "checks": [
7
+ { "type": "binary", "name": "toml2json" }
8
+ ],
9
+ "install_guidance": {
10
+ "plugin": "toml2json",
11
+ "binary": "toml2json",
12
+ "check": "which toml2json",
13
+ "install_steps": [
14
+ "cargo install toml2json",
15
+ "Verify: toml2json --version",
16
+ "supercli plugins install ./plugins/toml2json --on-conflict replace --json"
17
+ ]
18
+ },
19
+ "learn": {
20
+ "file": "skills/quickstart/SKILL.md"
21
+ },
22
+ "commands": [
23
+ {
24
+ "namespace": "toml2json",
25
+ "resource": "self",
26
+ "action": "version",
27
+ "description": "Print toml2json version",
28
+ "adapter": "process",
29
+ "adapterConfig": {
30
+ "command": "toml2json",
31
+ "baseArgs": ["--version"],
32
+ "missingDependencyHelp": "Install toml2json: cargo install toml2json"
33
+ },
34
+ "args": []
35
+ },
36
+ {
37
+ "namespace": "toml2json",
38
+ "resource": "convert",
39
+ "action": "file",
40
+ "description": "Convert a TOML file to JSON",
41
+ "adapter": "process",
42
+ "adapterConfig": {
43
+ "command": "toml2json",
44
+ "positionalArgs": ["file"],
45
+ "passthrough": true,
46
+ "timeout_ms": 30000,
47
+ "missingDependencyHelp": "Install toml2json"
48
+ },
49
+ "args": [
50
+ { "name": "file", "type": "string", "required": true, "description": "Path to TOML file" }
51
+ ]
52
+ },
53
+ {
54
+ "namespace": "toml2json",
55
+ "resource": "convert",
56
+ "action": "pretty",
57
+ "description": "Convert TOML to pretty-printed JSON",
58
+ "adapter": "process",
59
+ "adapterConfig": {
60
+ "command": "toml2json",
61
+ "baseArgs": ["--pretty"],
62
+ "positionalArgs": ["file"],
63
+ "passthrough": true,
64
+ "timeout_ms": 30000,
65
+ "missingDependencyHelp": "Install toml2json"
66
+ },
67
+ "args": [
68
+ { "name": "file", "type": "string", "required": false, "description": "Path to TOML file (reads stdin if omitted)" }
69
+ ]
70
+ },
71
+ {
72
+ "namespace": "toml2json",
73
+ "resource": "_",
74
+ "action": "_",
75
+ "description": "Passthrough to toml2json CLI",
76
+ "adapter": "process",
77
+ "adapterConfig": {
78
+ "command": "toml2json",
79
+ "passthrough": true,
80
+ "missingDependencyHelp": "Install toml2json"
81
+ },
82
+ "args": []
83
+ }
84
+ ]
85
+ }
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: toml2json
3
+ description: Use this skill when the user wants to convert TOML files to JSON format, or pipe TOML data through stdin to get JSON output.
4
+ ---
5
+
6
+ # toml2json Plugin
7
+
8
+ Very small CLI for converting TOML to JSON.
9
+
10
+ ## Commands
11
+
12
+ ### Convert
13
+ - `toml2json convert file` — Convert a TOML file to JSON
14
+ - `toml2json convert pretty` — Convert TOML to pretty-printed JSON
15
+
16
+ ## Usage Examples
17
+ - "Convert a TOML file to JSON"
18
+ - "Pretty-print a TOML configuration as JSON"
19
+ - "Pipe TOML data and convert it"
20
+
21
+ ## Installation
22
+
23
+ ```bash
24
+ cargo install toml2json
25
+ ```
26
+
27
+ ## Examples
28
+
29
+ ```bash
30
+ # Convert a file
31
+ toml2json config.toml
32
+
33
+ # Pretty-print
34
+ toml2json --pretty config.toml
35
+
36
+ # Pipe from stdin
37
+ cat config.toml | toml2json
38
+
39
+ # Use with jq
40
+ toml2json config.toml | jq '.key'
41
+ ```
42
+
43
+ ## Key Features
44
+ - Convert TOML to JSON
45
+ - Read from files or stdin
46
+ - Pretty-print output option
47
+ - Pipe-friendly for shell workflows
@@ -0,0 +1,11 @@
1
+ {
2
+ "plugin": "worktrunk",
3
+ "binary": "wt",
4
+ "check": "which wt",
5
+ "install_steps": [
6
+ "cargo install worktrunk",
7
+ "wt config shell install",
8
+ "supercli plugins install ./plugins/worktrunk --on-conflict replace --json"
9
+ ],
10
+ "note": "Also available via: brew, pacman, winget, conda. Binary name is 'wt'. Shell integration required for cd commands."
11
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "description": "Git worktree management CLI designed for parallel AI agent workflows. Makes worktrees as easy as branches.",
3
+ "tags": ["worktrunk", "git", "worktree", "branch", "cli", "rust"],
4
+ "has_learn": true
5
+ }
@@ -0,0 +1,116 @@
1
+ {
2
+ "name": "worktrunk",
3
+ "version": "0.1.0",
4
+ "description": "CLI for Git worktree management, designed for parallel AI agent workflows",
5
+ "source": "https://github.com/max-sixty/worktrunk",
6
+ "checks": [
7
+ { "type": "binary", "name": "wt" }
8
+ ],
9
+ "install_guidance": {
10
+ "plugin": "worktrunk",
11
+ "binary": "wt",
12
+ "check": "which wt",
13
+ "install_steps": [
14
+ "cargo install worktrunk",
15
+ "wt config shell install",
16
+ "supercli plugins install ./plugins/worktrunk --on-conflict replace --json"
17
+ ]
18
+ },
19
+ "learn": {
20
+ "file": "skills/quickstart/SKILL.md"
21
+ },
22
+ "commands": [
23
+ {
24
+ "namespace": "worktrunk",
25
+ "resource": "self",
26
+ "action": "version",
27
+ "description": "Print worktrunk version",
28
+ "adapter": "process",
29
+ "adapterConfig": {
30
+ "command": "wt",
31
+ "baseArgs": ["--version"],
32
+ "missingDependencyHelp": "Install worktrunk: cargo install worktrunk"
33
+ },
34
+ "args": []
35
+ },
36
+ {
37
+ "namespace": "worktrunk",
38
+ "resource": "branch",
39
+ "action": "switch",
40
+ "description": "Switch to a worktree branch",
41
+ "adapter": "process",
42
+ "adapterConfig": {
43
+ "command": "wt",
44
+ "baseArgs": ["switch"],
45
+ "passthrough": true,
46
+ "timeout_ms": 30000,
47
+ "missingDependencyHelp": "Install worktrunk"
48
+ },
49
+ "args": [
50
+ { "name": "branch", "type": "string", "required": true, "description": "Branch name to switch to" }
51
+ ]
52
+ },
53
+ {
54
+ "namespace": "worktrunk",
55
+ "resource": "branch",
56
+ "action": "create",
57
+ "description": "Create and switch to a new worktree branch",
58
+ "adapter": "process",
59
+ "adapterConfig": {
60
+ "command": "wt",
61
+ "baseArgs": ["switch", "-c"],
62
+ "passthrough": true,
63
+ "timeout_ms": 30000,
64
+ "missingDependencyHelp": "Install worktrunk"
65
+ },
66
+ "args": [
67
+ { "name": "branch", "type": "string", "required": true, "description": "New branch name" }
68
+ ]
69
+ },
70
+ {
71
+ "namespace": "worktrunk",
72
+ "resource": "branch",
73
+ "action": "list",
74
+ "description": "List all worktree branches",
75
+ "adapter": "process",
76
+ "adapterConfig": {
77
+ "command": "wt",
78
+ "baseArgs": ["list"],
79
+ "passthrough": true,
80
+ "timeout_ms": 10000,
81
+ "missingDependencyHelp": "Install worktrunk"
82
+ },
83
+ "args": []
84
+ },
85
+ {
86
+ "namespace": "worktrunk",
87
+ "resource": "branch",
88
+ "action": "remove",
89
+ "description": "Remove a worktree branch",
90
+ "adapter": "process",
91
+ "adapterConfig": {
92
+ "command": "wt",
93
+ "baseArgs": ["remove"],
94
+ "passthrough": true,
95
+ "timeout_ms": 30000,
96
+ "missingDependencyHelp": "Install worktrunk"
97
+ },
98
+ "args": [
99
+ { "name": "branch", "type": "string", "required": false, "description": "Branch name to remove (uses current if omitted)" }
100
+ ]
101
+ },
102
+ {
103
+ "namespace": "worktrunk",
104
+ "resource": "_",
105
+ "action": "_",
106
+ "description": "Passthrough to wt CLI",
107
+ "adapter": "process",
108
+ "adapterConfig": {
109
+ "command": "wt",
110
+ "passthrough": true,
111
+ "missingDependencyHelp": "Install worktrunk"
112
+ },
113
+ "args": []
114
+ }
115
+ ]
116
+ }
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: worktrunk
3
+ description: Use this skill when the user wants to manage Git worktrees, switch between parallel branches, or work with multiple worktrees.
4
+ ---
5
+
6
+ # worktrunk Plugin
7
+
8
+ CLI for Git worktree management, designed for parallel AI agent workflows.
9
+
10
+ ## Commands
11
+
12
+ ### Branch
13
+ - `worktrunk branch switch` — Switch to a worktree branch
14
+ - `worktrunk branch create` — Create and switch to a new worktree branch
15
+ - `worktrunk branch list` — List all worktree branches
16
+ - `worktrunk branch remove` — Remove a worktree branch
17
+
18
+ ## Usage Examples
19
+ - "Switch to a different worktree branch"
20
+ - "Create a new worktree for a feature branch"
21
+ - "List all my worktrees"
22
+ - "Remove a worktree I no longer need"
23
+
24
+ ## Installation
25
+
26
+ ```bash
27
+ cargo install worktrunk
28
+ wt config shell install
29
+ ```
30
+
31
+ ## Examples
32
+
33
+ ```bash
34
+ # Switch to existing branch
35
+ wt switch feature-branch
36
+
37
+ # Create and switch to new branch
38
+ wt switch -c new-feature
39
+
40
+ # Create with external tool execution
41
+ wt switch -c -x claude new-feature
42
+
43
+ # List all worktrees
44
+ wt list
45
+
46
+ # Remove current worktree
47
+ wt remove
48
+
49
+ # Remove specific worktree
50
+ wt remove old-branch
51
+
52
+ # Checkout PR
53
+ wt switch pr:123
54
+ ```
55
+
56
+ ## Key Features
57
+ - Branch-name based worktree addressing
58
+ - Automatic path computation
59
+ - Hooks for workflow automation
60
+ - LLM commit message generation
61
+ - PR checkout support
62
+ - Build cache sharing between worktrees
package/server/app.js CHANGED
@@ -1,6 +1,8 @@
1
1
  const express = require("express");
2
2
  const path = require("path");
3
3
  const { getStorage } = require("./storage/adapter");
4
+ const { registerAllPluginResources, syncPluginResources } = require("./services/pluginResourceService");
5
+ const { requireAuth } = require("./middleware/auth");
4
6
 
5
7
  const dashboardRouter = require("./routes/dashboard");
6
8
  const adaptersRouter = require("./routes/adapters");
@@ -12,6 +14,9 @@ const plansRouter = require("./routes/plans");
12
14
  const jobsRouter = require("./routes/jobs");
13
15
  const askRouter = require("./routes/ask");
14
16
  const pluginsRouter = require("./routes/plugins");
17
+ const docsRouter = require("./routes/docs");
18
+ const settingsRouter = require("./routes/settings");
19
+ const clientsRouter = require("./routes/clients");
15
20
 
16
21
  const PORT = process.env.PORT || 3000;
17
22
 
@@ -23,22 +28,25 @@ app.use(express.urlencoded({ extended: true, limit: "20mb" }));
23
28
  app.set("view engine", "ejs");
24
29
  app.set("views", path.join(__dirname, "views"));
25
30
 
31
+ // Static file serving - must be before API routes
26
32
  app.use("/static", express.static(path.join(__dirname, "public")));
33
+ app.use("/uploads", express.static(path.join(__dirname, "uploads")));
34
+ app.use("/docs", express.static(path.join(__dirname, "../docs")));
27
35
 
28
- // API routes
29
- app.use("/api/dashboard", dashboardRouter);
30
- app.use("/api/adapters", adaptersRouter);
31
- app.use("/api/config", configRouter);
32
- app.use("/api/commands", commandsRouter);
33
- app.use("/api/specs", specsRouter);
34
- app.use("/api/mcp", mcpRouter);
35
- app.use("/api/plans", plansRouter);
36
- app.use("/api/jobs", jobsRouter);
37
- app.use("/api/ask", askRouter);
36
+ // API routes (with authentication)
37
+ app.use("/api/dashboard", requireAuth, dashboardRouter);
38
+ app.use("/api/adapters", requireAuth, adaptersRouter);
39
+ app.use("/api/commands", requireAuth, commandsRouter);
40
+ app.use("/api/specs", requireAuth, specsRouter);
41
+ app.use("/api/mcp", requireAuth, mcpRouter);
42
+ app.use("/api/plans", requireAuth, plansRouter);
43
+ app.use("/api/jobs", requireAuth, jobsRouter);
44
+ app.use("/api/ask", requireAuth, askRouter);
38
45
  app.use("/api/plugins", pluginsRouter);
39
-
40
- // Tree/command endpoints under /api (config router handles them)
41
- app.use("/api", configRouter);
46
+ app.use("/api/docs", requireAuth, docsRouter);
47
+ app.use("/api/clients", requireAuth, clientsRouter);
48
+ app.use("/api", settingsRouter);
49
+ app.use("/api/config", requireAuth, configRouter);
42
50
 
43
51
  app.use("/", dashboardRouter);
44
52
 
@@ -66,12 +74,37 @@ app.get("/mcp", (req, res) => res.redirect("/api/mcp"));
66
74
  app.get("/jobs", (req, res) => res.redirect("/api/jobs"));
67
75
  app.get("/plugins", (req, res) => res.redirect("/api/plugins"));
68
76
  app.get("/adapters", (req, res) => res.redirect("/api/adapters"));
77
+ app.get("/docs", (req, res) => res.redirect("/api/docs"));
78
+
79
+ // Doc sub-page redirects
80
+ app.get("/api/plugins.html", (req, res) => res.redirect("/docs/plugins.html"));
81
+ app.get("/api/adapters.html", (req, res) => res.redirect("/docs/adapters.html"));
82
+ app.get("/api/server.md", (req, res) => res.redirect("/docs/server.md"));
83
+ app.get("/api/changelog.html", (req, res) => res.redirect("/docs/changelog.html"));
69
84
 
70
85
  async function start() {
71
86
  try {
72
87
  // Initialize storage singleton
73
88
  getStorage();
74
89
 
90
+ // Sync plugin resources (cleanup orphaned)
91
+ console.log("[Plugin Resources] Syncing plugin resources...");
92
+ const syncResults = await syncPluginResources();
93
+ if (syncResults.removedMcp.length > 0 || syncResults.removedSpecs.length > 0) {
94
+ console.log(`[Plugin Resources] Cleaned up ${syncResults.removedMcp.length} MCP and ${syncResults.removedSpecs.length} orphaned specs`);
95
+ }
96
+ if (syncResults.errors.length > 0) {
97
+ console.warn(`[Plugin Resources] ${syncResults.errors.length} sync errors`);
98
+ }
99
+
100
+ // Register plugin resources (self-healing)
101
+ console.log("[Plugin Resources] Registering plugin resources...");
102
+ const resourceResults = await registerAllPluginResources();
103
+ if (resourceResults.totalErrors > 0) {
104
+ console.warn(`[Plugin Resources] ${resourceResults.totalErrors} errors during registration`);
105
+ }
106
+ console.log(`[Plugin Resources] Registered ${resourceResults.registeredMcp} MCP servers and ${resourceResults.registeredSpecs} OpenAPI specs`);
107
+
75
108
  app.listen(PORT, () => {
76
109
  console.log(`SUPERCLI server running on http://localhost:${PORT}`);
77
110
  });
@@ -0,0 +1,70 @@
1
+ const { getSettings } = require("../services/pluginsService");
2
+
3
+ // Cache settings for 30 seconds to avoid repeated storage reads
4
+ let cachedSettings = null;
5
+ let cacheExpiry = 0;
6
+
7
+ async function getCachedSettings() {
8
+ const now = Date.now();
9
+ if (cachedSettings && now < cacheExpiry) {
10
+ return cachedSettings;
11
+ }
12
+ cachedSettings = await getSettings();
13
+ cacheExpiry = now + 30000; // 30 seconds
14
+ return cachedSettings;
15
+ }
16
+
17
+ /**
18
+ * Authentication middleware for API endpoints
19
+ *
20
+ * Flow:
21
+ * 1. Check admin_mode_enabled - if true, skip all auth
22
+ * 2. Check public_access - if true, allow all requests
23
+ * 3. Allow settings endpoint when no API keys exist (for bootstrapping)
24
+ * 4. Check X-API-Key header - validate against stored API keys
25
+ * 5. Return 401 if no valid auth
26
+ */
27
+ async function requireAuth(req, res, next) {
28
+ try {
29
+ const settings = await getCachedSettings();
30
+
31
+ // Admin mode - skip all authentication
32
+ if (settings.admin_mode_enabled === true) {
33
+ return next();
34
+ }
35
+
36
+ // Public access - allow all requests
37
+ if (settings.public_access === true) {
38
+ return next();
39
+ }
40
+
41
+ // Allow HTML views (browser navigation) without auth
42
+ // This allows users to navigate the UI without API keys
43
+ if (req.accepts("html") && !req.headers["x-requested-with"] && req.query.format !== "json") {
44
+ return next();
45
+ }
46
+
47
+ // Check API key
48
+ const apiKey = req.headers["x-api-key"];
49
+ if (!apiKey) {
50
+ return res.status(401).json({ error: "Unauthorized: API key required" });
51
+ }
52
+
53
+ // Validate API key against stored keys
54
+ const apiKeys = Array.isArray(settings.api_keys) ? settings.api_keys : [];
55
+ const isValid = apiKeys.some(k => k.key === apiKey);
56
+
57
+ if (!isValid) {
58
+ return res.status(401).json({ error: "Unauthorized: Invalid API key" });
59
+ }
60
+
61
+ // Valid API key
62
+ next();
63
+ } catch (err) {
64
+ console.error("Auth middleware error:", err);
65
+ // Fail open on error to avoid breaking existing deployments
66
+ next();
67
+ }
68
+ }
69
+
70
+ module.exports = { requireAuth, getCachedSettings };
@@ -55,6 +55,9 @@ router.get("/:name/packages", async (req, res, next) => {
55
55
  return res.status(404).render("error", { message: `Adapter '${name}' not found` })
56
56
  }
57
57
  const packages = await adaptersService.getAdapterPackages(name)
58
+ if (req.headers.accept?.includes("application/json") || req.query.format === "json") {
59
+ return res.json({ packages })
60
+ }
58
61
  res.render("adapter-packages", { adapter, packages })
59
62
  } catch (err) {
60
63
  next(err)
@@ -151,17 +154,6 @@ router.delete("/:name", async (req, res, next) => {
151
154
  }
152
155
  })
153
156
 
154
- // Get adapter packages
155
- router.get("/:name/packages", async (req, res, next) => {
156
- try {
157
- const { name } = req.params
158
- const packages = await adaptersService.getAdapterPackages(name)
159
- res.json({ packages })
160
- } catch (err) {
161
- next(err)
162
- }
163
- })
164
-
165
157
  // Add package to adapter
166
158
  router.post("/:name/packages", async (req, res, next) => {
167
159
  try {
@@ -0,0 +1,46 @@
1
+ const { Router } = require("express");
2
+ const { getStorage } = require("../storage/adapter");
3
+ const { requireAuth } = require("../middleware/auth");
4
+
5
+ const router = Router();
6
+
7
+ // Helper function to handle errors
8
+ function handleError(res, err) {
9
+ console.error(err);
10
+ const status = err.status || 500;
11
+ const error = err.error || { code: 500, type: "internal_error", message: err.message || "Internal server error" };
12
+ res.status(status).json({ error });
13
+ }
14
+
15
+ // List clients endpoint
16
+ router.get("/", requireAuth, async (req, res) => {
17
+ try {
18
+ const storage = getStorage();
19
+ const clientKeys = await storage.listKeys("client:");
20
+ const clients = [];
21
+
22
+ for (const key of clientKeys) {
23
+ try {
24
+ const client = await storage.get(key);
25
+ if (client && client.client_id) {
26
+ clients.push(client);
27
+ }
28
+ } catch (err) {
29
+ // Skip if client read fails
30
+ }
31
+ }
32
+
33
+ // Sort by last_seen descending
34
+ clients.sort((a, b) => new Date(b.last_seen) - new Date(a.last_seen));
35
+
36
+ if (req.query.format !== "json" && req.accepts("html") && !req.xhr && !req.headers["x-requested-with"]) {
37
+ return res.render("clients", { clients });
38
+ }
39
+
40
+ res.json({ clients });
41
+ } catch (err) {
42
+ handleError(res, err);
43
+ }
44
+ });
45
+
46
+ module.exports = router;
@@ -0,0 +1,10 @@
1
+ const { Router } = require("express")
2
+
3
+ const router = Router()
4
+
5
+ // GET /api/docs - redirect to standalone docs with fromServerUI param
6
+ router.get("/", (req, res) => {
7
+ res.redirect("/docs/index.html?fromServerUI=1")
8
+ })
9
+
10
+ module.exports = router
@@ -7,7 +7,7 @@ const router = Router()
7
7
  router.post("/", async (req, res) => {
8
8
  try {
9
9
  const storage = getStorage()
10
- const { command, args, status, duration_ms, timestamp, plan_id, error } = req.body
10
+ const { command, args, status, duration_ms, timestamp, plan_id, error, client_id } = req.body
11
11
 
12
12
  // Generate a unique sequential-ish ID
13
13
  const jobId = `job:${Date.now()}_${Math.random().toString(36).substring(2, 9)}`
@@ -20,7 +20,8 @@ router.post("/", async (req, res) => {
20
20
  duration_ms: duration_ms || 0,
21
21
  plan_id: plan_id || null,
22
22
  error: error || null,
23
- timestamp: timestamp || new Date().toISOString()
23
+ timestamp: timestamp || new Date().toISOString(),
24
+ client_id: client_id || null
24
25
  }
25
26
 
26
27
  await storage.set(jobId, doc)
@@ -19,6 +19,7 @@ function sanitizeMcpPayload(payload, fallbackName) {
19
19
  }
20
20
  if (typeof payload.timeout_ms === "number" && payload.timeout_ms > 0) out.timeout_ms = payload.timeout_ms
21
21
  if (payload.stateful === true || payload.stateful === "true" || payload.stateful === "on") out.stateful = true
22
+ if (typeof payload.pluginSource === "string") out.pluginSource = payload.pluginSource
22
23
  return out
23
24
  }
24
25