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,74 @@
1
+ {
2
+ "openapi": "3.0.0",
3
+ "info": {
4
+ "title": "Test Auth API",
5
+ "version": "1.0.0"
6
+ },
7
+ "servers": [
8
+ {
9
+ "url": "http://localhost:3001"
10
+ }
11
+ ],
12
+ "paths": {
13
+ "/api/data": {
14
+ "get": {
15
+ "operationId": "getData",
16
+ "summary": "Get authenticated data",
17
+ "description": "Returns data when authenticated with Bearer token",
18
+ "responses": {
19
+ "200": {
20
+ "description": "Success",
21
+ "content": {
22
+ "application/json": {
23
+ "schema": {
24
+ "type": "object",
25
+ "properties": {
26
+ "message": {
27
+ "type": "string"
28
+ },
29
+ "data": {
30
+ "type": "object"
31
+ }
32
+ }
33
+ }
34
+ }
35
+ }
36
+ },
37
+ "401": {
38
+ "description": "Unauthorized"
39
+ },
40
+ "403": {
41
+ "description": "Forbidden"
42
+ }
43
+ }
44
+ }
45
+ },
46
+ "/api/key-data": {
47
+ "get": {
48
+ "operationId": "getKeyData",
49
+ "summary": "Get data with API key",
50
+ "description": "Returns data when authenticated with API key in X-Api-Key header",
51
+ "responses": {
52
+ "200": {
53
+ "description": "Success",
54
+ "content": {
55
+ "application/json": {
56
+ "schema": {
57
+ "type": "object",
58
+ "properties": {
59
+ "message": {
60
+ "type": "string"
61
+ },
62
+ "data": {
63
+ "type": "object"
64
+ }
65
+ }
66
+ }
67
+ }
68
+ }
69
+ }
70
+ }
71
+ }
72
+ }
73
+ }
74
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "openapi": "3.0.0",
3
+ "info": {
4
+ "title": "Test Auth API",
5
+ "version": "1.0.0"
6
+ },
7
+ "servers": [
8
+ {
9
+ "url": "https://httpbin.org"
10
+ }
11
+ ],
12
+ "paths": {
13
+ "/bearer": {
14
+ "get": {
15
+ "operationId": "testBearerAuth",
16
+ "summary": "Test bearer auth",
17
+ "responses": {
18
+ "200": {
19
+ "description": "Returns authorization header"
20
+ }
21
+ }
22
+ }
23
+ },
24
+ "/headers": {
25
+ "get": {
26
+ "operationId": "testHeaderAuth",
27
+ "summary": "Returns request headers",
28
+ "responses": {
29
+ "200": {
30
+ "description": "Returns headers"
31
+ }
32
+ }
33
+ }
34
+ }
35
+ }
36
+ }
@@ -25,6 +25,7 @@
25
25
  <tr><td colspan="5" class="px-6 py-12 text-center text-[#787774]">No adapters yet. Create one to get started.</td></tr>
26
26
  <% } %>
27
27
  <% adapters.forEach(a => { %>
28
+ <% if (!a.name) return; %>
28
29
  <tr class="border-b border-[#EAEAEA] hover:bg-[#F7F6F3] transition-colors">
29
30
  <td class="px-6 py-4">
30
31
  <div class="flex flex-col">
@@ -0,0 +1,147 @@
1
+ <%- include("partials/head", { title: "API Keys" }) %>
2
+
3
+ <div id="api-keys-app" class="max-w-4xl">
4
+ <div class="flex justify-between items-center mb-6">
5
+ <h1 class="text-2xl font-bold">API Keys</h1>
6
+ <div class="text-sm opacity-80">Manage API keys for CLI and programmatic access.</div>
7
+ </div>
8
+
9
+ <div v-if="message.text" :class="['alert mb-4', message.type === 'error' ? 'alert-error' : 'alert-success']">
10
+ <span>{{ message.text }}</span>
11
+ </div>
12
+
13
+ <div class="card bg-base-100 border border-base-300">
14
+ <div class="card-body">
15
+ <h2 class="card-title">Create New API Key</h2>
16
+ <div class="form-control">
17
+ <div class="label">
18
+ <span class="label-text">Key Name</span>
19
+ </div>
20
+ <div class="flex gap-2">
21
+ <input v-model="newKeyName" class="input input-bordered flex-1" placeholder="e.g., 'CLI Agent' or 'Production'" />
22
+ <button class="btn btn-primary" @click="createApiKey">Create</button>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ </div>
27
+
28
+ <div class="card bg-base-100 border border-base-300 mt-4">
29
+ <div class="card-body">
30
+ <h2 class="card-title">Active API Keys</h2>
31
+ <div v-if="settings.api_keys && settings.api_keys.length > 0">
32
+ <table class="table table-zebra">
33
+ <thead>
34
+ <tr>
35
+ <th>Name</th>
36
+ <th>Key</th>
37
+ <th>Created</th>
38
+ <th>Action</th>
39
+ </tr>
40
+ </thead>
41
+ <tbody>
42
+ <tr v-for="apiKey in settings.api_keys" :key="apiKey.key">
43
+ <td>{{ apiKey.name }}</td>
44
+ <td>
45
+ <code>{{ apiKey.key.slice(0, 12) }}...</code>
46
+ <button class="btn btn-xs btn-ghost ml-2" @click="copyApiKey(apiKey.key)">📋</button>
47
+ </td>
48
+ <td>{{ new Date(apiKey.created_at).toLocaleString() }}</td>
49
+ <td>
50
+ <button class="btn btn-sm btn-error" @click="deleteApiKey(apiKey.key)">Delete</button>
51
+ </td>
52
+ </tr>
53
+ </tbody>
54
+ </table>
55
+ </div>
56
+ <div v-else class="text-center py-8 opacity-60">
57
+ <p>No API keys created yet</p>
58
+ <p class="text-sm mt-2">Create an API key to enable CLI and programmatic access to the server.</p>
59
+ </div>
60
+ </div>
61
+ </div>
62
+ </div>
63
+
64
+ <script>
65
+ const { createApp } = Vue
66
+
67
+ createApp({
68
+ data() {
69
+ return {
70
+ settings: {},
71
+ newKeyName: '',
72
+ message: { text: '', type: 'success' }
73
+ }
74
+ },
75
+ async mounted() {
76
+ await this.loadSettings()
77
+ },
78
+ methods: {
79
+ async loadSettings() {
80
+ try {
81
+ const res = await fetch('/api/settings?format=json')
82
+ const data = await res.json()
83
+ this.settings = data
84
+ } catch (err) {
85
+ this.setMessage('error', err.message)
86
+ }
87
+ },
88
+ async createApiKey() {
89
+ if (!this.newKeyName.trim()) {
90
+ this.setMessage('error', 'API key name is required')
91
+ return
92
+ }
93
+ try {
94
+ const res = await fetch('/api/api-keys', {
95
+ method: 'POST',
96
+ headers: { 'Content-Type': 'application/json' },
97
+ body: JSON.stringify({ name: this.newKeyName })
98
+ })
99
+ const result = await res.json()
100
+ this.setMessage('success', `Created API key '${result.name}'`)
101
+ this.newKeyName = ''
102
+ await this.loadSettings()
103
+ } catch (err) {
104
+ this.setMessage('error', err.message)
105
+ }
106
+ },
107
+ async deleteApiKey(key) {
108
+ if (!confirm('Delete this API key?')) return
109
+ try {
110
+ await fetch(`/api/api-keys/${encodeURIComponent(key)}`, {
111
+ method: 'DELETE'
112
+ })
113
+ this.setMessage('success', 'API key deleted')
114
+ await this.loadSettings()
115
+ } catch (err) {
116
+ this.setMessage('error', err.message)
117
+ }
118
+ },
119
+ async copyApiKey(key) {
120
+ try {
121
+ // Fallback for non-HTTPS contexts
122
+ const textArea = document.createElement("textarea")
123
+ textArea.value = key
124
+ textArea.style.position = "fixed"
125
+ textArea.style.left = "-9999px"
126
+ document.body.appendChild(textArea)
127
+ textArea.select()
128
+ try {
129
+ document.execCommand("copy")
130
+ this.setMessage('success', 'API key copied to clipboard')
131
+ } catch (err) {
132
+ throw new Error('Copy failed')
133
+ }
134
+ document.body.removeChild(textArea)
135
+ } catch (err) {
136
+ this.setMessage('error', 'Failed to copy API key')
137
+ }
138
+ },
139
+ setMessage(type, text) {
140
+ this.message = { type, text }
141
+ setTimeout(() => this.message = { text: '', type: 'success' }, 3000)
142
+ }
143
+ }
144
+ }).mount('#api-keys-app')
145
+ </script>
146
+
147
+ <%- include("partials/foot") %>
@@ -0,0 +1,82 @@
1
+ <%- include("partials/head", { title: "Clients" }) %>
2
+
3
+ <div id="clients-app">
4
+ <div class="flex justify-between items-center mb-8">
5
+ <div>
6
+ <p class="text-xs uppercase tracking-[0.2em] text-[#787774] mb-1">Monitoring</p>
7
+ <h1 class="text-2xl editorial-heading text-[#111111]">Connected Clients</h1>
8
+ <p class="text-sm text-[#787774] mt-1">CLI clients that have synced plugin resources to this server</p>
9
+ </div>
10
+ </div>
11
+
12
+ <div class="bento-card">
13
+ <div v-if="clients.length === 0" class="p-12 text-center text-[#787774]">
14
+ No clients have synced yet.
15
+ </div>
16
+
17
+ <table v-else class="min-w-full divide-y divide-[#EAEAEA]">
18
+ <thead class="bg-[#F7F6F3]">
19
+ <tr>
20
+ <th class="px-6 py-3 text-left text-xs font-semibold text-[#787774] uppercase tracking-wider">Client ID</th>
21
+ <th class="px-6 py-3 text-left text-xs font-semibold text-[#787774] uppercase tracking-wider">Last Seen</th>
22
+ <th class="px-6 py-3 text-left text-xs font-semibold text-[#787774] uppercase tracking-wider">Plugin Count</th>
23
+ </tr>
24
+ </thead>
25
+ <tbody class="bg-white divide-y divide-[#EAEAEA]">
26
+ <tr v-for="client in clients" :key="client.client_id" class="hover:bg-[#F7F6F3] transition-colors">
27
+ <td class="px-6 py-4">
28
+ <code class="mono-text text-sm text-[#1F6C9F]">{{ client.client_id.substring(0, 8) }}...</code>
29
+ </td>
30
+ <td class="px-6 py-4 text-sm text-[#2F3437]">
31
+ {{ formatLastSeen(client.last_seen) }}
32
+ </td>
33
+ <td class="px-6 py-4 text-sm text-[#2F3437]">
34
+ {{ client.plugin_count || 0 }}
35
+ </td>
36
+ </tr>
37
+ </tbody>
38
+ </table>
39
+ </div>
40
+ </div>
41
+
42
+ <script>
43
+ const { createApp } = Vue
44
+
45
+ createApp({
46
+ data() {
47
+ return {
48
+ clients: []
49
+ }
50
+ },
51
+ async mounted() {
52
+ await this.fetchClients()
53
+ },
54
+ methods: {
55
+ async fetchClients() {
56
+ try {
57
+ const r = await fetch('/api/plugins/clients?format=json')
58
+ const data = await r.json()
59
+ this.clients = data.clients || []
60
+ } catch (err) {
61
+ console.error('Failed to fetch clients:', err)
62
+ }
63
+ },
64
+ formatLastSeen(dateStr) {
65
+ if (!dateStr) return 'Never'
66
+ const date = new Date(dateStr)
67
+ const now = new Date()
68
+ const diffMs = now - date
69
+ const diffMins = Math.floor(diffMs / 60000)
70
+ const diffHours = Math.floor(diffMs / 3600000)
71
+ const diffDays = Math.floor(diffMs / 86400000)
72
+
73
+ if (diffMins < 1) return 'Just now'
74
+ if (diffMins < 60) return `${diffMins} min ago`
75
+ if (diffHours < 24) return `${diffHours}h ago`
76
+ if (diffDays < 7) return `${diffDays}d ago`
77
+ return date.toLocaleDateString()
78
+ }
79
+ }
80
+ }).mount('#clients-app')
81
+ </script>
82
+
@@ -0,0 +1,7 @@
1
+ <%- include("partials/head", { title: "Documentation" }) %>
2
+
3
+ <div id="docs-container">
4
+ <%- bodyContent %>
5
+ </div>
6
+
7
+ <%- include("partials/foot") %>
@@ -34,10 +34,11 @@
34
34
  <th>Status</th>
35
35
  <th>Duration</th>
36
36
  <th>Timestamp</th>
37
+ <th>Client</th>
37
38
  </tr>
38
39
  </thead>
39
40
  <tbody>
40
- <tr v-if="jobs.length===0"><td colspan="4" class="text-center opacity-60">No executions recorded yet.</td></tr>
41
+ <tr v-if="jobs.length===0"><td colspan="5" class="text-center opacity-60">No executions recorded yet.</td></tr>
41
42
  <tr v-for="j in jobs" :key="j._id">
42
43
  <td><code>{{ j.command }}</code></td>
43
44
  <td>
@@ -46,7 +47,15 @@
46
47
  </span>
47
48
  </td>
48
49
  <td>{{ j.duration_ms }}ms</td>
49
- <td class="opacity-70">{{ new Date(j.timestamp).toLocaleString() }}</td>
50
+ <td class="opacity-70">
51
+ <span :title="new Date(j.timestamp).toLocaleString()" class="cursor-help">
52
+ {{ formatRelativeTime(j.timestamp) }}
53
+ </span>
54
+ </td>
55
+ <td class="opacity-70">
56
+ <code v-if="j.client_id" class="text-xs">{{ j.client_id.substring(0, 8) }}...</code>
57
+ <span v-else class="text-xs opacity-50">-</span>
58
+ </td>
50
59
  </tr>
51
60
  </tbody>
52
61
  </table>
@@ -64,6 +73,21 @@
64
73
  async loadStats() {
65
74
  const r = await fetch('/api/jobs/stats')
66
75
  this.stats = await r.json()
76
+ },
77
+ formatRelativeTime(dateStr) {
78
+ if (!dateStr) return 'Never'
79
+ const date = new Date(dateStr)
80
+ const now = new Date()
81
+ const diffMs = now - date
82
+ const diffMins = Math.floor(diffMs / 60000)
83
+ const diffHours = Math.floor(diffMs / 3600000)
84
+ const diffDays = Math.floor(diffMs / 86400000)
85
+
86
+ if (diffMins < 1) return 'Just now'
87
+ if (diffMins < 60) return `${diffMins}m ago`
88
+ if (diffHours < 24) return `${diffHours}h ago`
89
+ if (diffDays < 7) return `${diffDays}d ago`
90
+ return date.toLocaleDateString()
67
91
  }
68
92
  }
69
93
  }).mount('#jobs-app')
@@ -88,27 +88,41 @@
88
88
  <body>
89
89
 
90
90
  <div class="flex min-h-screen">
91
- <!-- Sidebar -->
92
- <aside class="w-64 bg-white p-6 flex flex-col gap-2 border-r border-[#EAEAEA]">
93
- <a href="/api/commands" class="text-xl editorial-heading px-3 py-2 mb-6 flex items-center gap-2">
94
- <span>⚡</span> SUPERCLI
95
- </a>
96
- <a href="/" class="btn justify-start">Dashboard</a>
97
- <a href="/api/commands" class="btn justify-start <%= typeof commands !== 'undefined' ? 'nav-active' : '' %>">
98
- Commands
99
- </a>
100
- <a href="/api/specs" class="btn justify-start <%= typeof specs !== 'undefined' ? 'nav-active' : '' %>">
101
- OpenAPI Specs
102
- </a>
103
- <a href="/api/mcp" class="btn justify-start <%= typeof servers !== 'undefined' ? 'nav-active' : '' %>">
104
- MCP Servers
105
- </a>
106
- <a href="/api/jobs" class="btn justify-start <%= typeof jobs !== 'undefined' ? 'nav-active' : '' %>">
107
- Jobs
108
- </a>
109
- <a href="/api/plugins" class="btn justify-start <%= typeof plugins !== 'undefined' ? 'nav-active' : '' %>">
110
- Plugins
111
- </a>
91
+ <!-- Sidebar navigation -->
92
+ <aside class="w-64 bg-white border-r border-[#EAEAEA] p-6">
93
+ <div class="mb-8">
94
+ <h1 class="text-xl font-bold editorial-heading">SUPERCLI</h1>
95
+ <p class="text-sm text-[#787774]">Command Control Plane</p>
96
+ </div>
97
+ <nav class="space-y-2">
98
+ <a href="/api/plugins" class="block px-4 py-2 rounded-lg hover:bg-[#F7F6F3] transition-colors">
99
+ Plugins
100
+ </a>
101
+ <a href="/api/settings" class="block px-4 py-2 rounded-lg hover:bg-[#F7F6F3] transition-colors">
102
+ Settings
103
+ </a>
104
+ <a href="/api/api-keys" class="block px-4 py-2 rounded-lg hover:bg-[#F7F6F3] transition-colors">
105
+ API Keys
106
+ </a>
107
+ <a href="/api/commands" class="block px-4 py-2 rounded-lg hover:bg-[#F7F6F3] transition-colors">
108
+ Commands
109
+ </a>
110
+ <a href="/api/jobs" class="block px-4 py-2 rounded-lg hover:bg-[#F7F6F3] transition-colors">
111
+ Jobs
112
+ </a>
113
+ <a href="/api/clients" class="block px-4 py-2 rounded-lg hover:bg-[#F7F6F3] transition-colors">
114
+ Clients
115
+ </a>
116
+ <a href="/api/adapters" class="block px-4 py-2 rounded-lg hover:bg-[#F7F6F3] transition-colors">
117
+ Adapters
118
+ </a>
119
+ <a href="/api/specs" class="block px-4 py-2 rounded-lg hover:bg-[#F7F6F3] transition-colors">
120
+ OpenAPI Specs
121
+ </a>
122
+ <a href="/api/mcp" class="block px-4 py-2 rounded-lg hover:bg-[#F7F6F3] transition-colors">
123
+ MCP Servers
124
+ </a>
125
+ </nav>
112
126
  </aside>
113
127
 
114
128
  <!-- Main content -->