superacli 1.1.21 → 1.1.23

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 (375) hide show
  1. package/.beads/.br_history/{issues.20260426_162712_190824905.jsonl → issues.20260427_104606_658098709.jsonl} +49 -48
  2. package/.beads/.br_history/{issues.20260426_162513_726336785.jsonl → issues.20260427_104607_085798670.jsonl} +50 -48
  3. package/.beads/.br_history/{issues.20260426_162331_516939737.jsonl → issues.20260427_104607_627598880.jsonl} +51 -48
  4. package/.beads/.br_history/{issues.20260426_134150_938793400.jsonl → issues.20260427_104608_071298223.jsonl} +52 -48
  5. package/.beads/.br_history/issues.20260427_104615_198124329.jsonl +261 -0
  6. package/.beads/.br_history/issues.20260427_104615_669652069.jsonl +261 -0
  7. package/.beads/.br_history/issues.20260427_104637_752744777.jsonl +261 -0
  8. package/.beads/.br_history/issues.20260427_104638_209211116.jsonl +261 -0
  9. package/.beads/.br_history/issues.20260427_104638_898729442.jsonl +261 -0
  10. package/.beads/.br_history/issues.20260427_104639_368827997.jsonl +261 -0
  11. package/.beads/.br_history/issues.20260427_104639_823343822.jsonl +261 -0
  12. package/.beads/.br_history/issues.20260427_104640_354170001.jsonl +261 -0
  13. package/.beads/.br_history/issues.20260427_104640_937129660.jsonl +261 -0
  14. package/.beads/.br_history/issues.20260427_104647_408876191.jsonl +261 -0
  15. package/.beads/.br_history/issues.20260427_104659_300660476.jsonl +261 -0
  16. package/.beads/.br_history/issues.20260427_104800_415120762.jsonl +261 -0
  17. package/.beads/.br_history/issues.20260427_104901_529669396.jsonl +261 -0
  18. package/.beads/.br_history/issues.20260427_105002_587183822.jsonl +261 -0
  19. package/.beads/.br_history/issues.20260427_105103_686748531.jsonl +261 -0
  20. package/.beads/.br_history/issues.20260427_105204_721591044.jsonl +261 -0
  21. package/.beads/.br_history/issues.20260427_105305_855661211.jsonl +261 -0
  22. package/.beads/.br_history/issues.20260427_105407_641630152.jsonl +261 -0
  23. package/.beads/.br_history/issues.20260427_105509_159649245.jsonl +261 -0
  24. package/.beads/.br_history/issues.20260427_105610_283950586.jsonl +261 -0
  25. package/.beads/.br_history/issues.20260427_105637_656057143.jsonl +261 -0
  26. package/.beads/.br_history/issues.20260427_105738_863187883.jsonl +261 -0
  27. package/.beads/.br_history/issues.20260427_105839_958463404.jsonl +261 -0
  28. package/.beads/.br_history/issues.20260427_105941_092827317.jsonl +261 -0
  29. package/.beads/.br_history/issues.20260427_110042_110436110.jsonl +261 -0
  30. package/.beads/.br_history/issues.20260427_110143_343801118.jsonl +261 -0
  31. package/.beads/.br_history/issues.20260427_110244_379134729.jsonl +261 -0
  32. package/.beads/.br_history/issues.20260427_110345_445658284.jsonl +261 -0
  33. package/.beads/.br_history/issues.20260427_110446_689391882.jsonl +261 -0
  34. package/.beads/.br_history/issues.20260427_110547_667705716.jsonl +261 -0
  35. package/.beads/.br_history/issues.20260427_110609_987816377.jsonl +261 -0
  36. package/.beads/.br_history/issues.20260427_110711_086550915.jsonl +261 -0
  37. package/.beads/.br_history/issues.20260427_110812_204821395.jsonl +261 -0
  38. package/.beads/.br_history/issues.20260427_110913_259688311.jsonl +261 -0
  39. package/.beads/.br_history/issues.20260427_111014_297775509.jsonl +261 -0
  40. package/.beads/.br_history/issues.20260427_111115_195150935.jsonl +261 -0
  41. package/.beads/.br_history/issues.20260427_111216_316259530.jsonl +261 -0
  42. package/.beads/.br_history/issues.20260427_111317_298020330.jsonl +261 -0
  43. package/.beads/.br_history/issues.20260427_111418_604431267.jsonl +261 -0
  44. package/.beads/.br_history/issues.20260427_111519_617870969.jsonl +261 -0
  45. package/.beads/.br_history/issues.20260427_111533_024097015.jsonl +261 -0
  46. package/.beads/.br_history/issues.20260427_111634_138814655.jsonl +261 -0
  47. package/.beads/.br_history/issues.20260427_111737_148398766.jsonl +261 -0
  48. package/.beads/.br_history/issues.20260427_111838_507704112.jsonl +261 -0
  49. package/.beads/.br_history/issues.20260427_111939_468325527.jsonl +261 -0
  50. package/.beads/.br_history/issues.20260427_112041_044923744.jsonl +261 -0
  51. package/.beads/.br_history/issues.20260427_112142_224127430.jsonl +261 -0
  52. package/.beads/.br_history/issues.20260427_112243_212317525.jsonl +261 -0
  53. package/.beads/.br_history/issues.20260427_112344_182300930.jsonl +261 -0
  54. package/.beads/.br_history/issues.20260427_112445_197922899.jsonl +261 -0
  55. package/.beads/.br_history/issues.20260427_112502_597304488.jsonl +261 -0
  56. package/.beads/.br_history/issues.20260427_112604_292832651.jsonl +261 -0
  57. package/.beads/.br_history/issues.20260427_112706_051581607.jsonl +261 -0
  58. package/.beads/.br_history/issues.20260427_112807_066213762.jsonl +261 -0
  59. package/.beads/.br_history/issues.20260427_112908_145315373.jsonl +261 -0
  60. package/.beads/.br_history/issues.20260427_113009_141079023.jsonl +261 -0
  61. package/.beads/.br_history/issues.20260427_113110_601071412.jsonl +261 -0
  62. package/.beads/.br_history/issues.20260427_113211_601412739.jsonl +261 -0
  63. package/.beads/.br_history/issues.20260427_113312_771171767.jsonl +261 -0
  64. package/.beads/.br_history/issues.20260427_113413_719165420.jsonl +261 -0
  65. package/.beads/.br_history/issues.20260427_113430_416576564.jsonl +261 -0
  66. package/.beads/.br_history/issues.20260427_113531_553842703.jsonl +261 -0
  67. package/.beads/.br_history/issues.20260427_113633_137526241.jsonl +261 -0
  68. package/.beads/.br_history/issues.20260427_113735_697152101.jsonl +261 -0
  69. package/.beads/.br_history/issues.20260427_113836_810884202.jsonl +261 -0
  70. package/.beads/.br_history/issues.20260427_113938_312284719.jsonl +261 -0
  71. package/.beads/.br_history/issues.20260427_114039_390178502.jsonl +261 -0
  72. package/.beads/.br_history/issues.20260427_114140_483586632.jsonl +261 -0
  73. package/.beads/.br_history/issues.20260427_114241_502376670.jsonl +261 -0
  74. package/.beads/.br_history/issues.20260427_114342_927243830.jsonl +261 -0
  75. package/.beads/.br_history/issues.20260427_114405_996651227.jsonl +261 -0
  76. package/.beads/.br_history/issues.20260427_114507_946708398.jsonl +261 -0
  77. package/.beads/.br_history/issues.20260427_114608_914493506.jsonl +261 -0
  78. package/.beads/.br_history/issues.20260427_114709_935565841.jsonl +261 -0
  79. package/.beads/.br_history/issues.20260427_114810_981588378.jsonl +261 -0
  80. package/.beads/.br_history/issues.20260427_114912_061702372.jsonl +261 -0
  81. package/.beads/.br_history/issues.20260427_115013_063113906.jsonl +261 -0
  82. package/.beads/.br_history/issues.20260427_115114_208497343.jsonl +261 -0
  83. package/.beads/.br_history/issues.20260427_115215_176080241.jsonl +261 -0
  84. package/.beads/.br_history/issues.20260427_115316_481573328.jsonl +261 -0
  85. package/.beads/.br_history/issues.20260427_115335_866978652.jsonl +261 -0
  86. package/.beads/.br_history/issues.20260427_115436_866087391.jsonl +261 -0
  87. package/.beads/.br_history/issues.20260427_115538_016094860.jsonl +261 -0
  88. package/.beads/.br_history/issues.20260427_115638_932947449.jsonl +261 -0
  89. package/.beads/.br_history/issues.20260427_115739_982932603.jsonl +261 -0
  90. package/.beads/.br_history/issues.20260427_115840_963681039.jsonl +261 -0
  91. package/.beads/.br_history/issues.20260427_115941_912431509.jsonl +261 -0
  92. package/.beads/.br_history/issues.20260427_120043_043356448.jsonl +261 -0
  93. package/.beads/.br_history/issues.20260427_120144_955596968.jsonl +261 -0
  94. package/.beads/.br_history/issues.20260427_120246_060733977.jsonl +261 -0
  95. package/.beads/.br_history/issues.20260427_120307_717985017.jsonl +261 -0
  96. package/.beads/.br_history/issues.20260427_120408_871846736.jsonl +261 -0
  97. package/.beads/.br_history/issues.20260427_121003_963750732.jsonl +261 -0
  98. package/.beads/.br_history/issues.20260427_121006_018509431.jsonl +261 -0
  99. package/.beads/.br_history/issues.20260427_121019_617062931.jsonl +261 -0
  100. package/.beads/.br_history/issues.20260427_121021_689536311.jsonl +261 -0
  101. package/.beads/.br_recovery/beads.db-wal.20260427_104615_902749843.rebuild-failed +0 -0
  102. package/.beads/.br_recovery/beads.db-wal.20260427_121006_010373120.rebuild-failed +0 -0
  103. package/.beads/.br_recovery/beads.db.20260427_104615_902749843.rebuild-failed +0 -0
  104. package/.beads/.br_recovery/beads.db.20260427_121006_010373120.rebuild-failed +0 -0
  105. package/.beads/beads.db.corrupted +0 -0
  106. package/.beads/issues.jsonl +144 -144
  107. package/.supercli/adapters/test-cli-adapter.js +19 -0
  108. package/cli/adapters/mcp.js +89 -3
  109. package/cli/adapters/openapi.js +71 -2
  110. package/cli/config.js +69 -1
  111. package/cli/daemon.js +349 -0
  112. package/cli/plugins-manager.js +42 -9
  113. package/cli/server-command.js +174 -4
  114. package/cli/supercli.js +35 -15
  115. package/docs/changelog-2026-04.html +6 -0
  116. package/docs/index.html +94 -11
  117. package/docs/plugins.html +30 -0
  118. package/docs/server.md +80 -0
  119. package/graphify-out/GRAPH_REPORT.md +154 -162
  120. package/graphify-out/cache/11938479cfbdb8e52bf5f0f3c132d56204245ebb19aefe89bb0394feb36dbd5e.json +1 -0
  121. package/graphify-out/cache/141362b25039dee7a4959ef475befea0a25671aae66f3d14917e711e597ffbf6.json +1 -0
  122. package/graphify-out/cache/2f23b1be3f6434f60138a04261d83ca71b128f405bd68fb19abf48cd61108dfc.json +1 -0
  123. package/graphify-out/cache/362adb1b6b483f56d09feaf652f4122366e568aaede752f48383b76d61f5d9d6.json +1 -0
  124. package/graphify-out/cache/42bc8f64d69d2cd9ecf64e92e38f89f7ea479f69c947de5984919e2fd5a716ee.json +1 -0
  125. package/graphify-out/cache/4b5cffce31d9193b7d0a8f15e8a41c66f6733a6490ebaeff2c8ca19701c72c0e.json +1 -0
  126. package/graphify-out/cache/5ef4e31750d9e7bc4ff4a7b535f247d9ab5ab9627d72e20794779ec4be424c66.json +1 -0
  127. package/graphify-out/cache/6d5023ecffa52382d31152c8c06e86e286789228a3d4f7fde72087f3eafa11bc.json +1 -0
  128. package/graphify-out/cache/6e5776e123142a78f50fa0bfd5ae2d289282051a9b392ae507de7aa9017f95d4.json +1 -0
  129. package/graphify-out/cache/75982dc60fa7353600ca48a3b33f5ba497eea9d5743daac6e61e9cf4f64774be.json +1 -0
  130. package/graphify-out/cache/7796066b51d3a99071debdfb5f40c854400b5bf3aa7c1e83dd6ae88eddca0370.json +1 -0
  131. package/graphify-out/cache/8ccd3b557a1ea98005fba84433f160ccd4a951fbdb6a4c9b7d7ba894f905b06b.json +1 -0
  132. package/graphify-out/cache/90ab53b8f1f3306e7c3a1f92ec628717ea90f4e684db764f7d7aa8e884fe2cae.json +1 -0
  133. package/graphify-out/cache/99c8133d0ccf5bf29a0a03caa6811d2ff8d73bcccf20681687876c890b94740e.json +1 -0
  134. package/graphify-out/cache/9fa6604cc820f3857c55c753ca0024788e4cbb61c4e12ba7ce0e4a1ce4ee0655.json +1 -0
  135. package/graphify-out/cache/a1e24a07beede2876e688cdb6c14e2d24abb22064862a6420cac321efabd3efd.json +1 -0
  136. package/graphify-out/cache/a418312f2805259c33007a18b36b6ae3b6a4da376ccae6006a3b9999262495db.json +1 -0
  137. package/graphify-out/cache/a6d9c029bd31a99b67357291305e27b01c5ef388925f7f2a6e985fec4efa8024.json +1 -0
  138. package/graphify-out/cache/a6ed52b709dd79f98adf72c483e8dfb6098203d7327470b82feb5e11390a5cf4.json +1 -0
  139. package/graphify-out/cache/b045ae4443d972ee8f47b91a0d61c984a190195b38ae1d331430b4c51c43acfd.json +1 -0
  140. package/graphify-out/cache/bc514f4074f89d2f7e7834670602e50bba0f24b8cd8c9d21ff4d361d3fd4d558.json +1 -0
  141. package/graphify-out/cache/be3fc87936f9f24d2d4f4b22b9d2a16f33f538cef1a181663120e23ecf16b81a.json +1 -0
  142. package/graphify-out/cache/c5a4822edbe3a95a56f9f943eed1567e5a5c913d59b1fa3df4ad54ffd9b02697.json +1 -0
  143. package/graphify-out/cache/cf411f1ddde50ee97c1c501f59ed7985bcdc022134574816bcce37ac20848e64.json +1 -0
  144. package/graphify-out/cache/d88625b5813742ca941ce8155cb77afb02425632002f621aca34f217440a392d.json +1 -0
  145. package/graphify-out/cache/da97fdc8af2a3306c292921110f84648bba2b0e85d27473b460b0e8a862ff225.json +1 -0
  146. package/graphify-out/cache/e88de9f1ae117f26fd217c3717eff7e525a284cc942b5f4d26ef2c4d65db59bd.json +1 -0
  147. package/graphify-out/cache/ebf6bd96ef2d8d396389ac7199e6ba818ee2d0c5dfc131fab7cdece9fb710f11.json +1 -0
  148. package/graphify-out/cache/f2a302550a6fe0649d36b8ef0b04b77673bca9f115732af8ae89751944dc9cc6.json +1 -0
  149. package/graphify-out/cache/fb46bd3ef530273918fc8915842453f21b418d536653d3b705b75b417255c246.json +1 -0
  150. package/graphify-out/cache/fcfdab94fe91af1f21fcefdba5a96674b9a16bb768288f3573fe68765163c765.json +1 -0
  151. package/graphify-out/graph.json +2669 -1121
  152. package/package.json +1 -1
  153. package/plugins/context-mode/plugin.json +10 -0
  154. package/plugins/context-mode/scripts/post-install.js +1 -1
  155. package/plugins/example-server-resources/meta.json +11 -0
  156. package/plugins/example-server-resources/plugin.json +46 -0
  157. package/server/app.js +43 -11
  158. package/server/middleware/auth.js +70 -0
  159. package/server/routes/adapters.js +3 -11
  160. package/server/routes/docs.js +10 -0
  161. package/server/routes/jobs.js +3 -2
  162. package/server/routes/mcp.js +1 -0
  163. package/server/routes/plugins.js +209 -10
  164. package/server/routes/specs.js +8 -3
  165. package/server/services/adaptersService.js +1 -0
  166. package/server/services/pluginResourceService.js +262 -0
  167. package/server/services/pluginsService.js +24 -0
  168. package/server/uploads/superbackend-openapi.json +47 -0
  169. package/server/uploads/test-auth-openapi.json +74 -0
  170. package/server/uploads/test-auth-spec.json +36 -0
  171. package/server/views/adapters.ejs +1 -0
  172. package/server/views/clients.ejs +82 -0
  173. package/server/views/docs.ejs +7 -0
  174. package/server/views/jobs.ejs +26 -2
  175. package/server/views/layout.ejs +0 -23
  176. package/server/views/mcp.ejs +278 -21
  177. package/server/views/partials/head.ejs +2 -0
  178. package/server/views/plugins.ejs +81 -1
  179. package/server/views/specs.ejs +217 -22
  180. package/.beads/.br_history/issues.20260424_173219_825545950.jsonl +0 -161
  181. package/.beads/.br_history/issues.20260424_173236_386891868.jsonl +0 -162
  182. package/.beads/.br_history/issues.20260424_174502_086707155.jsonl +0 -163
  183. package/.beads/.br_history/issues.20260424_174510_654230822.jsonl +0 -164
  184. package/.beads/.br_history/issues.20260424_174517_409774596.jsonl +0 -165
  185. package/.beads/.br_history/issues.20260424_174523_607561636.jsonl +0 -166
  186. package/.beads/.br_history/issues.20260424_174532_546016322.jsonl +0 -167
  187. package/.beads/.br_history/issues.20260424_175209_319624367.jsonl +0 -168
  188. package/.beads/.br_history/issues.20260424_175214_798999893.jsonl +0 -169
  189. package/.beads/.br_history/issues.20260424_175217_989449734.jsonl +0 -170
  190. package/.beads/.br_history/issues.20260424_175221_701416034.jsonl +0 -171
  191. package/.beads/.br_history/issues.20260424_175225_550538874.jsonl +0 -172
  192. package/.beads/.br_history/issues.20260424_180143_241956058.jsonl +0 -173
  193. package/.beads/.br_history/issues.20260424_180153_817576164.jsonl +0 -174
  194. package/.beads/.br_history/issues.20260424_180201_739387030.jsonl +0 -175
  195. package/.beads/.br_history/issues.20260424_180213_488389024.jsonl +0 -176
  196. package/.beads/.br_history/issues.20260424_180221_754279177.jsonl +0 -177
  197. package/.beads/.br_history/issues.20260424_181149_604365436.jsonl +0 -178
  198. package/.beads/.br_history/issues.20260424_181158_931468591.jsonl +0 -179
  199. package/.beads/.br_history/issues.20260424_181209_516766803.jsonl +0 -180
  200. package/.beads/.br_history/issues.20260424_181219_459169740.jsonl +0 -181
  201. package/.beads/.br_history/issues.20260424_181227_996490697.jsonl +0 -182
  202. package/.beads/.br_history/issues.20260424_181958_717811271.jsonl +0 -183
  203. package/.beads/.br_history/issues.20260424_182002_913828749.jsonl +0 -184
  204. package/.beads/.br_history/issues.20260424_182006_779786523.jsonl +0 -185
  205. package/.beads/.br_history/issues.20260424_182010_368190795.jsonl +0 -186
  206. package/.beads/.br_history/issues.20260424_182016_217217108.jsonl +0 -187
  207. package/.beads/.br_history/issues.20260424_182539_287444292.jsonl +0 -188
  208. package/.beads/.br_history/issues.20260424_182543_343189534.jsonl +0 -189
  209. package/.beads/.br_history/issues.20260424_182547_119975837.jsonl +0 -190
  210. package/.beads/.br_history/issues.20260424_182550_849315940.jsonl +0 -191
  211. package/.beads/.br_history/issues.20260424_182554_677413036.jsonl +0 -192
  212. package/.beads/.br_history/issues.20260424_183140_390494612.jsonl +0 -193
  213. package/.beads/.br_history/issues.20260424_183144_266256714.jsonl +0 -194
  214. package/.beads/.br_history/issues.20260424_183152_839579876.jsonl +0 -195
  215. package/.beads/.br_history/issues.20260424_183202_355634088.jsonl +0 -196
  216. package/.beads/.br_history/issues.20260424_183209_438616861.jsonl +0 -197
  217. package/.beads/.br_history/issues.20260424_183753_517602948.jsonl +0 -198
  218. package/.beads/.br_history/issues.20260424_183757_533544458.jsonl +0 -199
  219. package/.beads/.br_history/issues.20260424_183803_063929316.jsonl +0 -200
  220. package/.beads/.br_history/issues.20260424_183807_014724964.jsonl +0 -201
  221. package/.beads/.br_history/issues.20260424_183813_278844212.jsonl +0 -202
  222. package/.beads/.br_history/issues.20260424_190900_876564388.jsonl +0 -203
  223. package/.beads/.br_history/issues.20260424_192047_121286991.jsonl +0 -204
  224. package/.beads/.br_history/issues.20260424_192811_866934994.jsonl +0 -205
  225. package/.beads/.br_history/issues.20260424_193837_426102367.jsonl +0 -206
  226. package/.beads/.br_history/issues.20260424_194617_271952813.jsonl +0 -207
  227. package/.beads/.br_history/issues.20260424_195430_952967644.jsonl +0 -208
  228. package/.beads/.br_history/issues.20260424_200234_439280977.jsonl +0 -209
  229. package/.beads/.br_history/issues.20260424_200923_545127361.jsonl +0 -210
  230. package/.beads/.br_history/issues.20260424_204056_586059018.jsonl +0 -211
  231. package/.beads/.br_history/issues.20260424_205301_854556209.jsonl +0 -212
  232. package/.beads/.br_history/issues.20260424_210455_501610650.jsonl +0 -213
  233. package/.beads/.br_history/issues.20260424_212803_108840399.jsonl +0 -214
  234. package/.beads/.br_history/issues.20260425_045812_041336580.jsonl +0 -215
  235. package/.beads/.br_history/issues.20260425_045914_762139232.jsonl +0 -216
  236. package/.beads/.br_history/issues.20260425_050011_038094726.jsonl +0 -217
  237. package/.beads/.br_history/issues.20260425_050140_047103928.jsonl +0 -218
  238. package/.beads/.br_history/issues.20260425_054328_968771145.jsonl +0 -219
  239. package/.beads/.br_history/issues.20260425_054419_800564203.jsonl +0 -220
  240. package/.beads/.br_history/issues.20260425_054543_771812828.jsonl +0 -221
  241. package/.beads/.br_history/issues.20260425_054648_963773974.jsonl +0 -222
  242. package/.beads/.br_history/issues.20260425_054751_122349828.jsonl +0 -223
  243. package/.beads/.br_history/issues.20260425_060749_403415856.jsonl +0 -224
  244. package/.beads/.br_history/issues.20260425_062503_208821903.jsonl +0 -225
  245. package/.beads/.br_history/issues.20260425_063134_587505560.jsonl +0 -226
  246. package/.beads/.br_history/issues.20260425_064005_565019560.jsonl +0 -227
  247. package/.beads/.br_history/issues.20260425_064651_250053752.jsonl +0 -228
  248. package/.beads/.br_history/issues.20260425_065904_323410469.jsonl +0 -229
  249. package/.beads/.br_history/issues.20260425_070603_854872783.jsonl +0 -230
  250. package/.beads/.br_history/issues.20260425_071232_499550581.jsonl +0 -231
  251. package/.beads/.br_history/issues.20260425_071859_753108611.jsonl +0 -232
  252. package/.beads/.br_history/issues.20260425_171215_558114276.jsonl +0 -233
  253. package/.beads/.br_history/issues.20260425_171228_711028872.jsonl +0 -234
  254. package/.beads/.br_history/issues.20260425_171908_608455863.jsonl +0 -235
  255. package/.beads/.br_history/issues.20260425_172952_108071113.jsonl +0 -236
  256. package/.beads/.br_history/issues.20260425_200313_037876111.jsonl +0 -237
  257. package/.beads/.br_history/issues.20260425_201117_411540946.jsonl +0 -238
  258. package/.beads/.br_history/issues.20260425_210522_892936637.jsonl +0 -239
  259. package/.beads/.br_history/issues.20260425_210949_356368198.jsonl +0 -240
  260. package/.beads/.br_history/issues.20260425_211617_355720902.jsonl +0 -241
  261. package/.beads/.br_history/issues.20260425_213515_555595766.jsonl +0 -242
  262. package/.beads/.br_history/issues.20260425_214642_203845514.jsonl +0 -243
  263. package/.beads/.br_history/issues.20260425_221221_451474472.jsonl +0 -244
  264. package/.beads/.br_history/issues.20260425_222608_800503496.jsonl +0 -245
  265. package/.beads/.br_history/issues.20260426_071735_330251998.jsonl +0 -246
  266. package/.beads/.br_history/issues.20260426_071755_925764854.jsonl +0 -247
  267. package/.beads/.br_history/issues.20260426_071818_936440407.jsonl +0 -248
  268. package/.beads/.br_history/issues.20260426_071834_033200504.jsonl +0 -249
  269. package/.beads/.br_history/issues.20260426_072406_524696668.jsonl +0 -250
  270. package/.beads/.br_history/issues.20260426_073231_913315951.jsonl +0 -251
  271. package/.beads/.br_history/issues.20260426_074828_051470117.jsonl +0 -252
  272. package/.beads/.br_history/issues.20260426_080300_773872374.jsonl +0 -253
  273. package/.beads/.br_history/issues.20260426_121735_535252712.jsonl +0 -254
  274. package/.beads/.br_history/issues.20260426_125144_933153546.jsonl +0 -255
  275. package/.beads/.br_history/issues.20260426_132438_591463320.jsonl +0 -256
  276. /package/.beads/.br_history/{issues.20260424_173219_825545950.jsonl.meta.json → issues.20260427_104606_658098709.jsonl.meta.json} +0 -0
  277. /package/.beads/.br_history/{issues.20260424_173236_386891868.jsonl.meta.json → issues.20260427_104607_085798670.jsonl.meta.json} +0 -0
  278. /package/.beads/.br_history/{issues.20260424_174502_086707155.jsonl.meta.json → issues.20260427_104607_627598880.jsonl.meta.json} +0 -0
  279. /package/.beads/.br_history/{issues.20260424_174510_654230822.jsonl.meta.json → issues.20260427_104608_071298223.jsonl.meta.json} +0 -0
  280. /package/.beads/.br_history/{issues.20260424_174517_409774596.jsonl.meta.json → issues.20260427_104615_198124329.jsonl.meta.json} +0 -0
  281. /package/.beads/.br_history/{issues.20260424_174523_607561636.jsonl.meta.json → issues.20260427_104615_669652069.jsonl.meta.json} +0 -0
  282. /package/.beads/.br_history/{issues.20260424_174532_546016322.jsonl.meta.json → issues.20260427_104637_752744777.jsonl.meta.json} +0 -0
  283. /package/.beads/.br_history/{issues.20260424_175209_319624367.jsonl.meta.json → issues.20260427_104638_209211116.jsonl.meta.json} +0 -0
  284. /package/.beads/.br_history/{issues.20260424_175214_798999893.jsonl.meta.json → issues.20260427_104638_898729442.jsonl.meta.json} +0 -0
  285. /package/.beads/.br_history/{issues.20260424_175217_989449734.jsonl.meta.json → issues.20260427_104639_368827997.jsonl.meta.json} +0 -0
  286. /package/.beads/.br_history/{issues.20260424_175221_701416034.jsonl.meta.json → issues.20260427_104639_823343822.jsonl.meta.json} +0 -0
  287. /package/.beads/.br_history/{issues.20260424_175225_550538874.jsonl.meta.json → issues.20260427_104640_354170001.jsonl.meta.json} +0 -0
  288. /package/.beads/.br_history/{issues.20260424_180143_241956058.jsonl.meta.json → issues.20260427_104640_937129660.jsonl.meta.json} +0 -0
  289. /package/.beads/.br_history/{issues.20260424_180153_817576164.jsonl.meta.json → issues.20260427_104647_408876191.jsonl.meta.json} +0 -0
  290. /package/.beads/.br_history/{issues.20260424_180201_739387030.jsonl.meta.json → issues.20260427_104659_300660476.jsonl.meta.json} +0 -0
  291. /package/.beads/.br_history/{issues.20260424_180213_488389024.jsonl.meta.json → issues.20260427_104800_415120762.jsonl.meta.json} +0 -0
  292. /package/.beads/.br_history/{issues.20260424_180221_754279177.jsonl.meta.json → issues.20260427_104901_529669396.jsonl.meta.json} +0 -0
  293. /package/.beads/.br_history/{issues.20260424_181149_604365436.jsonl.meta.json → issues.20260427_105002_587183822.jsonl.meta.json} +0 -0
  294. /package/.beads/.br_history/{issues.20260424_181158_931468591.jsonl.meta.json → issues.20260427_105103_686748531.jsonl.meta.json} +0 -0
  295. /package/.beads/.br_history/{issues.20260424_181209_516766803.jsonl.meta.json → issues.20260427_105204_721591044.jsonl.meta.json} +0 -0
  296. /package/.beads/.br_history/{issues.20260424_181219_459169740.jsonl.meta.json → issues.20260427_105305_855661211.jsonl.meta.json} +0 -0
  297. /package/.beads/.br_history/{issues.20260424_181227_996490697.jsonl.meta.json → issues.20260427_105407_641630152.jsonl.meta.json} +0 -0
  298. /package/.beads/.br_history/{issues.20260424_181958_717811271.jsonl.meta.json → issues.20260427_105509_159649245.jsonl.meta.json} +0 -0
  299. /package/.beads/.br_history/{issues.20260424_182002_913828749.jsonl.meta.json → issues.20260427_105610_283950586.jsonl.meta.json} +0 -0
  300. /package/.beads/.br_history/{issues.20260424_182006_779786523.jsonl.meta.json → issues.20260427_105637_656057143.jsonl.meta.json} +0 -0
  301. /package/.beads/.br_history/{issues.20260424_182010_368190795.jsonl.meta.json → issues.20260427_105738_863187883.jsonl.meta.json} +0 -0
  302. /package/.beads/.br_history/{issues.20260424_182016_217217108.jsonl.meta.json → issues.20260427_105839_958463404.jsonl.meta.json} +0 -0
  303. /package/.beads/.br_history/{issues.20260424_182539_287444292.jsonl.meta.json → issues.20260427_105941_092827317.jsonl.meta.json} +0 -0
  304. /package/.beads/.br_history/{issues.20260424_182543_343189534.jsonl.meta.json → issues.20260427_110042_110436110.jsonl.meta.json} +0 -0
  305. /package/.beads/.br_history/{issues.20260424_182547_119975837.jsonl.meta.json → issues.20260427_110143_343801118.jsonl.meta.json} +0 -0
  306. /package/.beads/.br_history/{issues.20260424_182550_849315940.jsonl.meta.json → issues.20260427_110244_379134729.jsonl.meta.json} +0 -0
  307. /package/.beads/.br_history/{issues.20260424_182554_677413036.jsonl.meta.json → issues.20260427_110345_445658284.jsonl.meta.json} +0 -0
  308. /package/.beads/.br_history/{issues.20260424_183140_390494612.jsonl.meta.json → issues.20260427_110446_689391882.jsonl.meta.json} +0 -0
  309. /package/.beads/.br_history/{issues.20260424_183144_266256714.jsonl.meta.json → issues.20260427_110547_667705716.jsonl.meta.json} +0 -0
  310. /package/.beads/.br_history/{issues.20260424_183152_839579876.jsonl.meta.json → issues.20260427_110609_987816377.jsonl.meta.json} +0 -0
  311. /package/.beads/.br_history/{issues.20260424_183202_355634088.jsonl.meta.json → issues.20260427_110711_086550915.jsonl.meta.json} +0 -0
  312. /package/.beads/.br_history/{issues.20260424_183209_438616861.jsonl.meta.json → issues.20260427_110812_204821395.jsonl.meta.json} +0 -0
  313. /package/.beads/.br_history/{issues.20260424_183753_517602948.jsonl.meta.json → issues.20260427_110913_259688311.jsonl.meta.json} +0 -0
  314. /package/.beads/.br_history/{issues.20260424_183757_533544458.jsonl.meta.json → issues.20260427_111014_297775509.jsonl.meta.json} +0 -0
  315. /package/.beads/.br_history/{issues.20260424_183803_063929316.jsonl.meta.json → issues.20260427_111115_195150935.jsonl.meta.json} +0 -0
  316. /package/.beads/.br_history/{issues.20260424_183807_014724964.jsonl.meta.json → issues.20260427_111216_316259530.jsonl.meta.json} +0 -0
  317. /package/.beads/.br_history/{issues.20260424_183813_278844212.jsonl.meta.json → issues.20260427_111317_298020330.jsonl.meta.json} +0 -0
  318. /package/.beads/.br_history/{issues.20260424_190900_876564388.jsonl.meta.json → issues.20260427_111418_604431267.jsonl.meta.json} +0 -0
  319. /package/.beads/.br_history/{issues.20260424_192047_121286991.jsonl.meta.json → issues.20260427_111519_617870969.jsonl.meta.json} +0 -0
  320. /package/.beads/.br_history/{issues.20260424_192811_866934994.jsonl.meta.json → issues.20260427_111533_024097015.jsonl.meta.json} +0 -0
  321. /package/.beads/.br_history/{issues.20260424_193837_426102367.jsonl.meta.json → issues.20260427_111634_138814655.jsonl.meta.json} +0 -0
  322. /package/.beads/.br_history/{issues.20260424_194617_271952813.jsonl.meta.json → issues.20260427_111737_148398766.jsonl.meta.json} +0 -0
  323. /package/.beads/.br_history/{issues.20260424_195430_952967644.jsonl.meta.json → issues.20260427_111838_507704112.jsonl.meta.json} +0 -0
  324. /package/.beads/.br_history/{issues.20260424_200234_439280977.jsonl.meta.json → issues.20260427_111939_468325527.jsonl.meta.json} +0 -0
  325. /package/.beads/.br_history/{issues.20260424_200923_545127361.jsonl.meta.json → issues.20260427_112041_044923744.jsonl.meta.json} +0 -0
  326. /package/.beads/.br_history/{issues.20260424_204056_586059018.jsonl.meta.json → issues.20260427_112142_224127430.jsonl.meta.json} +0 -0
  327. /package/.beads/.br_history/{issues.20260424_205301_854556209.jsonl.meta.json → issues.20260427_112243_212317525.jsonl.meta.json} +0 -0
  328. /package/.beads/.br_history/{issues.20260424_210455_501610650.jsonl.meta.json → issues.20260427_112344_182300930.jsonl.meta.json} +0 -0
  329. /package/.beads/.br_history/{issues.20260424_212803_108840399.jsonl.meta.json → issues.20260427_112445_197922899.jsonl.meta.json} +0 -0
  330. /package/.beads/.br_history/{issues.20260425_045812_041336580.jsonl.meta.json → issues.20260427_112502_597304488.jsonl.meta.json} +0 -0
  331. /package/.beads/.br_history/{issues.20260425_045914_762139232.jsonl.meta.json → issues.20260427_112604_292832651.jsonl.meta.json} +0 -0
  332. /package/.beads/.br_history/{issues.20260425_050011_038094726.jsonl.meta.json → issues.20260427_112706_051581607.jsonl.meta.json} +0 -0
  333. /package/.beads/.br_history/{issues.20260425_050140_047103928.jsonl.meta.json → issues.20260427_112807_066213762.jsonl.meta.json} +0 -0
  334. /package/.beads/.br_history/{issues.20260425_054328_968771145.jsonl.meta.json → issues.20260427_112908_145315373.jsonl.meta.json} +0 -0
  335. /package/.beads/.br_history/{issues.20260425_054419_800564203.jsonl.meta.json → issues.20260427_113009_141079023.jsonl.meta.json} +0 -0
  336. /package/.beads/.br_history/{issues.20260425_054543_771812828.jsonl.meta.json → issues.20260427_113110_601071412.jsonl.meta.json} +0 -0
  337. /package/.beads/.br_history/{issues.20260425_054648_963773974.jsonl.meta.json → issues.20260427_113211_601412739.jsonl.meta.json} +0 -0
  338. /package/.beads/.br_history/{issues.20260425_054751_122349828.jsonl.meta.json → issues.20260427_113312_771171767.jsonl.meta.json} +0 -0
  339. /package/.beads/.br_history/{issues.20260425_060749_403415856.jsonl.meta.json → issues.20260427_113413_719165420.jsonl.meta.json} +0 -0
  340. /package/.beads/.br_history/{issues.20260425_062503_208821903.jsonl.meta.json → issues.20260427_113430_416576564.jsonl.meta.json} +0 -0
  341. /package/.beads/.br_history/{issues.20260425_063134_587505560.jsonl.meta.json → issues.20260427_113531_553842703.jsonl.meta.json} +0 -0
  342. /package/.beads/.br_history/{issues.20260425_064005_565019560.jsonl.meta.json → issues.20260427_113633_137526241.jsonl.meta.json} +0 -0
  343. /package/.beads/.br_history/{issues.20260425_064651_250053752.jsonl.meta.json → issues.20260427_113735_697152101.jsonl.meta.json} +0 -0
  344. /package/.beads/.br_history/{issues.20260425_065904_323410469.jsonl.meta.json → issues.20260427_113836_810884202.jsonl.meta.json} +0 -0
  345. /package/.beads/.br_history/{issues.20260425_070603_854872783.jsonl.meta.json → issues.20260427_113938_312284719.jsonl.meta.json} +0 -0
  346. /package/.beads/.br_history/{issues.20260425_071232_499550581.jsonl.meta.json → issues.20260427_114039_390178502.jsonl.meta.json} +0 -0
  347. /package/.beads/.br_history/{issues.20260425_071859_753108611.jsonl.meta.json → issues.20260427_114140_483586632.jsonl.meta.json} +0 -0
  348. /package/.beads/.br_history/{issues.20260425_171215_558114276.jsonl.meta.json → issues.20260427_114241_502376670.jsonl.meta.json} +0 -0
  349. /package/.beads/.br_history/{issues.20260425_171228_711028872.jsonl.meta.json → issues.20260427_114342_927243830.jsonl.meta.json} +0 -0
  350. /package/.beads/.br_history/{issues.20260425_171908_608455863.jsonl.meta.json → issues.20260427_114405_996651227.jsonl.meta.json} +0 -0
  351. /package/.beads/.br_history/{issues.20260425_172952_108071113.jsonl.meta.json → issues.20260427_114507_946708398.jsonl.meta.json} +0 -0
  352. /package/.beads/.br_history/{issues.20260425_200313_037876111.jsonl.meta.json → issues.20260427_114608_914493506.jsonl.meta.json} +0 -0
  353. /package/.beads/.br_history/{issues.20260425_201117_411540946.jsonl.meta.json → issues.20260427_114709_935565841.jsonl.meta.json} +0 -0
  354. /package/.beads/.br_history/{issues.20260425_210522_892936637.jsonl.meta.json → issues.20260427_114810_981588378.jsonl.meta.json} +0 -0
  355. /package/.beads/.br_history/{issues.20260425_210949_356368198.jsonl.meta.json → issues.20260427_114912_061702372.jsonl.meta.json} +0 -0
  356. /package/.beads/.br_history/{issues.20260425_211617_355720902.jsonl.meta.json → issues.20260427_115013_063113906.jsonl.meta.json} +0 -0
  357. /package/.beads/.br_history/{issues.20260425_213515_555595766.jsonl.meta.json → issues.20260427_115114_208497343.jsonl.meta.json} +0 -0
  358. /package/.beads/.br_history/{issues.20260425_214642_203845514.jsonl.meta.json → issues.20260427_115215_176080241.jsonl.meta.json} +0 -0
  359. /package/.beads/.br_history/{issues.20260425_221221_451474472.jsonl.meta.json → issues.20260427_115316_481573328.jsonl.meta.json} +0 -0
  360. /package/.beads/.br_history/{issues.20260425_222608_800503496.jsonl.meta.json → issues.20260427_115335_866978652.jsonl.meta.json} +0 -0
  361. /package/.beads/.br_history/{issues.20260426_071735_330251998.jsonl.meta.json → issues.20260427_115436_866087391.jsonl.meta.json} +0 -0
  362. /package/.beads/.br_history/{issues.20260426_071755_925764854.jsonl.meta.json → issues.20260427_115538_016094860.jsonl.meta.json} +0 -0
  363. /package/.beads/.br_history/{issues.20260426_071818_936440407.jsonl.meta.json → issues.20260427_115638_932947449.jsonl.meta.json} +0 -0
  364. /package/.beads/.br_history/{issues.20260426_071834_033200504.jsonl.meta.json → issues.20260427_115739_982932603.jsonl.meta.json} +0 -0
  365. /package/.beads/.br_history/{issues.20260426_072406_524696668.jsonl.meta.json → issues.20260427_115840_963681039.jsonl.meta.json} +0 -0
  366. /package/.beads/.br_history/{issues.20260426_073231_913315951.jsonl.meta.json → issues.20260427_115941_912431509.jsonl.meta.json} +0 -0
  367. /package/.beads/.br_history/{issues.20260426_074828_051470117.jsonl.meta.json → issues.20260427_120043_043356448.jsonl.meta.json} +0 -0
  368. /package/.beads/.br_history/{issues.20260426_080300_773872374.jsonl.meta.json → issues.20260427_120144_955596968.jsonl.meta.json} +0 -0
  369. /package/.beads/.br_history/{issues.20260426_121735_535252712.jsonl.meta.json → issues.20260427_120246_060733977.jsonl.meta.json} +0 -0
  370. /package/.beads/.br_history/{issues.20260426_125144_933153546.jsonl.meta.json → issues.20260427_120307_717985017.jsonl.meta.json} +0 -0
  371. /package/.beads/.br_history/{issues.20260426_132438_591463320.jsonl.meta.json → issues.20260427_120408_871846736.jsonl.meta.json} +0 -0
  372. /package/.beads/.br_history/{issues.20260426_134150_938793400.jsonl.meta.json → issues.20260427_121003_963750732.jsonl.meta.json} +0 -0
  373. /package/.beads/.br_history/{issues.20260426_162331_516939737.jsonl.meta.json → issues.20260427_121006_018509431.jsonl.meta.json} +0 -0
  374. /package/.beads/.br_history/{issues.20260426_162513_726336785.jsonl.meta.json → issues.20260427_121019_617062931.jsonl.meta.json} +0 -0
  375. /package/.beads/.br_history/{issues.20260426_162712_190824905.jsonl.meta.json → issues.20260427_121021_689536311.jsonl.meta.json} +0 -0
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @name test-cli-adapter
3
+ * @description Test adapter for CLI
4
+ * @context cli
5
+ * @timeout 30000
6
+ * @memory 128
7
+ * @network false
8
+ * @updated 2026-04-27T14:40:52.449Z
9
+ */
10
+
11
+ async function execute(cmd, flags, context) {
12
+ return {
13
+ ok: true,
14
+ message: "Hello from test adapter",
15
+ command: cmd.command
16
+ }
17
+ }
18
+
19
+ module.exports = { execute }
@@ -220,7 +220,7 @@ async function execute(cmd, flags, context) {
220
220
 
221
221
  const input = {};
222
222
  for (const [k, v] of Object.entries(flags)) {
223
- if (!["human", "json", "compact"].includes(k)) {
223
+ if (!["human", "json", "compact", "stream"].includes(k)) {
224
224
  input[k] = v;
225
225
  }
226
226
  }
@@ -271,11 +271,35 @@ async function execute(cmd, flags, context) {
271
271
  );
272
272
  }
273
273
 
274
+ const result = await callHttpMcpTool(config, toolName, input, flags.stream === true);
275
+ return result;
276
+ }
277
+
278
+ async function callHttpMcpTool(config, toolName, input, streamMode = false) {
274
279
  const toolUrl = config.url.replace(/\/+$/, "");
280
+
281
+ // Try SSE first, then fallback to simple HTTP
282
+ const headers = {
283
+ "Content-Type": "application/json",
284
+ "Accept": "text/event-stream, application/json",
285
+ ...(config.headers || {}),
286
+ };
287
+
288
+ // Use JSON-RPC format for MCP protocol compatibility
289
+ const body = JSON.stringify({
290
+ jsonrpc: "2.0",
291
+ method: "tools/call",
292
+ params: {
293
+ name: toolName,
294
+ arguments: input,
295
+ },
296
+ id: 1,
297
+ });
298
+
275
299
  const tr = await fetch(`${toolUrl}/tool`, {
276
300
  method: "POST",
277
- headers: { "Content-Type": "application/json", ...(config.headers || {}) },
278
- body: JSON.stringify({ tool: toolName, input }),
301
+ headers,
302
+ body,
279
303
  });
280
304
 
281
305
  if (!tr.ok) {
@@ -290,7 +314,69 @@ async function execute(cmd, flags, context) {
290
314
  );
291
315
  }
292
316
 
317
+ const contentType = tr.headers.get("content-type") || "";
318
+
319
+ // Check if response is SSE
320
+ if (contentType.includes("text/event-stream")) {
321
+ return parseSseResponse(tr, streamMode);
322
+ }
323
+
324
+ // Standard JSON response
293
325
  return tr.json();
294
326
  }
295
327
 
328
+ async function parseSseResponse(response, streamMode) {
329
+ const body = await response.text();
330
+ const lines = body.split("\n");
331
+ const events = [];
332
+ let currentEvent = null;
333
+
334
+ for (const line of lines) {
335
+ if (line.startsWith("event: ")) {
336
+ currentEvent = { event: line.substring(7), data: "" };
337
+ } else if (line.startsWith("data: ")) {
338
+ if (currentEvent) {
339
+ currentEvent.data += line.substring(6);
340
+ }
341
+ } else if (line === "" && currentEvent) {
342
+ // End of event
343
+ try {
344
+ currentEvent.parsed = JSON.parse(currentEvent.data);
345
+ events.push(currentEvent);
346
+
347
+ // In stream mode, we could yield here
348
+ if (streamMode) {
349
+ // For now, just accumulate - streaming support would need generator
350
+ }
351
+ } catch {
352
+ // Invalid JSON, skip
353
+ }
354
+ currentEvent = null;
355
+ }
356
+ }
357
+
358
+ // Handle final event if not terminated properly
359
+ if (currentEvent && currentEvent.data) {
360
+ try {
361
+ currentEvent.parsed = JSON.parse(currentEvent.data);
362
+ events.push(currentEvent);
363
+ } catch {
364
+ // Invalid JSON, skip
365
+ }
366
+ }
367
+
368
+ // Find the result event (usually the last one with content)
369
+ const resultEvent = events.find(e => e.event === "message" || e.parsed?.content);
370
+
371
+ if (resultEvent && resultEvent.parsed) {
372
+ return resultEvent.parsed;
373
+ }
374
+
375
+ // Fallback: return all parsed events
376
+ return {
377
+ events: events.map(e => e.parsed || e.data),
378
+ stream: streamMode,
379
+ };
380
+ }
381
+
296
382
  module.exports = { execute };
@@ -98,6 +98,65 @@ function buildUrl(baseUrl, pathStr, method, operation, flags) {
98
98
  return { url: fullUrl, method };
99
99
  }
100
100
 
101
+ function resolveAuthValue(authConfig, flags) {
102
+ if (!authConfig) return null;
103
+
104
+ const { argName, envVar } = authConfig;
105
+
106
+ // Check command arguments first (highest priority)
107
+ if (argName && flags[argName] !== undefined) {
108
+ return flags[argName];
109
+ }
110
+
111
+ // Check environment variable
112
+ if (envVar && process.env[envVar] !== undefined) {
113
+ return process.env[envVar];
114
+ }
115
+
116
+ return null;
117
+ }
118
+
119
+ function applyAuth(fetchOpts, authConfig, authValue) {
120
+ if (!authConfig || !authValue) return;
121
+
122
+ const { type, bearer, headerName, queryName, bodyName } = authConfig;
123
+
124
+ switch (type) {
125
+ case "bearer":
126
+ fetchOpts.headers["Authorization"] = `Bearer ${authValue}`;
127
+ break;
128
+ case "basic": {
129
+ const base64 = Buffer.from(authValue).toString("base64");
130
+ fetchOpts.headers["Authorization"] = `Basic ${base64}`;
131
+ break;
132
+ }
133
+ case "api-key":
134
+ if (headerName) {
135
+ fetchOpts.headers[headerName] = authValue;
136
+ } else if (queryName) {
137
+ // Add to URL query params
138
+ const url = new URL(fetchOpts.url || "");
139
+ url.searchParams.set(queryName, authValue);
140
+ fetchOpts.url = url.toString();
141
+ } else if (bodyName) {
142
+ // Add to body for POST/PUT/PATCH
143
+ if (fetchOpts.body) {
144
+ try {
145
+ const bodyObj = JSON.parse(fetchOpts.body);
146
+ bodyObj[bodyName] = authValue;
147
+ fetchOpts.body = JSON.stringify(bodyObj);
148
+ } catch {
149
+ // If body isn't JSON, can't add auth field
150
+ }
151
+ }
152
+ }
153
+ break;
154
+ default:
155
+ // Unknown auth type, ignore
156
+ break;
157
+ }
158
+ }
159
+
101
160
  async function execute(cmd, flags, context) {
102
161
  const config = cmd.adapterConfig || {};
103
162
  const specName = config.spec;
@@ -123,7 +182,7 @@ async function execute(cmd, flags, context) {
123
182
  flags,
124
183
  );
125
184
 
126
- const fetchOpts = { method: httpMethod, headers: {} };
185
+ const fetchOpts = { method: httpMethod, headers: {}, url };
127
186
 
128
187
  // Handle request body for POST/PUT/PATCH
129
188
  if (["POST", "PUT", "PATCH"].includes(httpMethod)) {
@@ -137,7 +196,17 @@ async function execute(cmd, flags, context) {
137
196
  fetchOpts.headers["Content-Type"] = "application/json";
138
197
  }
139
198
 
140
- const r = await fetch(url, fetchOpts);
199
+ // Apply auth if configured
200
+ const authConfig = config.auth;
201
+ const authValue = resolveAuthValue(authConfig, flags);
202
+ if (authConfig && authValue) {
203
+ applyAuth(fetchOpts, authConfig, authValue);
204
+ }
205
+
206
+ const finalUrl = fetchOpts.url || url;
207
+ delete fetchOpts.url;
208
+
209
+ const r = await fetch(finalUrl, fetchOpts);
141
210
  if (!r.ok) {
142
211
  const text = await r.text().catch(() => "");
143
212
  throw Object.assign(
package/cli/config.js CHANGED
@@ -1,6 +1,7 @@
1
1
  const fs = require("fs")
2
2
  const path = require("path")
3
3
  const os = require("os")
4
+ const crypto = require("crypto")
4
5
  const {
5
6
  getEffectivePluginCommands,
6
7
  listInstalledPlugins,
@@ -13,6 +14,22 @@ const { spawnSync } = require("child_process")
13
14
  const CACHE_DIR = path.join(os.homedir(), ".supercli")
14
15
  const CACHE_FILE = path.join(CACHE_DIR, "config.json")
15
16
 
17
+ function getClientId() {
18
+ // Allow ENV override for custom identification
19
+ if (process.env.SUPERCLI_CLIENT_ID) {
20
+ return String(process.env.SUPERCLI_CLIENT_ID).trim()
21
+ }
22
+ // Minimal machine fingerprint
23
+ const pieces = [
24
+ os.hostname(),
25
+ os.type(),
26
+ os.release(),
27
+ os.arch(),
28
+ os.userInfo().username,
29
+ ]
30
+ return crypto.createHash('sha256').update(pieces.join('|')).digest('hex')
31
+ }
32
+
16
33
  function ensureCacheDir() {
17
34
  if (!fs.existsSync(CACHE_DIR)) {
18
35
  fs.mkdirSync(CACHE_DIR, { recursive: true })
@@ -331,6 +348,48 @@ async function syncServerPlugins(server) {
331
348
  return diagnostics
332
349
  }
333
350
 
351
+ async function syncClientPluginResources(server) {
352
+ const { readPluginsLock } = require("./plugins-store")
353
+ const lock = readPluginsLock()
354
+ const installed = lock.installed || {}
355
+ const clientId = getClientId()
356
+
357
+ // Filter plugins with server_resources
358
+ const pluginsWithResources = []
359
+ for (const [name, plugin] of Object.entries(installed)) {
360
+ if (plugin.server_resources && (plugin.server_resources.mcp || plugin.server_resources.specs)) {
361
+ pluginsWithResources.push({
362
+ name: name,
363
+ server_resources: plugin.server_resources
364
+ })
365
+ }
366
+ }
367
+
368
+ if (pluginsWithResources.length === 0) {
369
+ return { synced: 0, errors: [] }
370
+ }
371
+
372
+ try {
373
+ const r = await fetch(`${server}/api/plugins/client-resources`, {
374
+ method: "POST",
375
+ headers: { "Content-Type": "application/json" },
376
+ body: JSON.stringify({
377
+ client_id: clientId,
378
+ plugins: pluginsWithResources
379
+ })
380
+ })
381
+
382
+ if (!r.ok) {
383
+ throw new Error(`Failed to sync plugin resources: ${r.status} ${r.statusText}`)
384
+ }
385
+
386
+ const result = await r.json()
387
+ return { synced: pluginsWithResources.length, result }
388
+ } catch (err) {
389
+ return { synced: 0, errors: [err.message] }
390
+ }
391
+ }
392
+
334
393
  async function syncConfig(server) {
335
394
  const config = await fetchRemoteConfig(server)
336
395
 
@@ -370,6 +429,14 @@ async function syncConfig(server) {
370
429
  }
371
430
  }
372
431
 
432
+ // Sync client plugin resources
433
+ let clientResources = { synced: 0, errors: [] }
434
+ try {
435
+ clientResources = await syncClientPluginResources(server)
436
+ } catch (err) {
437
+ clientResources = { synced: 0, errors: [err.message] }
438
+ }
439
+
373
440
  // Sync CLI-context adapters
374
441
  let cliAdapters = { total: 0, synced: 0, failed: 0 }
375
442
  try {
@@ -382,6 +449,7 @@ async function syncConfig(server) {
382
449
  return {
383
450
  ...written,
384
451
  server_plugins: serverPlugins,
452
+ client_resources: clientResources,
385
453
  cli_adapters: cliAdapters,
386
454
  }
387
455
  }
@@ -549,4 +617,4 @@ async function showConfig() {
549
617
  }
550
618
  }
551
619
 
552
- module.exports = { loadConfig, syncConfig, showConfig, setMcpServer, removeMcpServer, listMcpServers, upsertCommand, removeCommandsByNamespace }
620
+ module.exports = { loadConfig, syncConfig, showConfig, setMcpServer, removeMcpServer, listMcpServers, upsertCommand, removeCommandsByNamespace, syncClientPluginResources, getClientId }
package/cli/daemon.js ADDED
@@ -0,0 +1,349 @@
1
+ const fs = require("fs");
2
+ const path = require("path");
3
+ const os = require("os");
4
+ const { spawn } = require("child_process");
5
+
6
+ const SUPERCLI_DIR = path.join(os.homedir(), ".supercli");
7
+ const LOGS_DIR = path.join(SUPERCLI_DIR, "logs");
8
+ const PID_FILE = path.join(SUPERCLI_DIR, "daemon.pid");
9
+ const HEARTBEAT_FILE = path.join(SUPERCLI_DIR, "daemon.heartbeat");
10
+ const CONFIG_FILE = path.join(SUPERCLI_DIR, "daemon.json");
11
+
12
+ // Default daemon configuration
13
+ const DEFAULT_CONFIG = {
14
+ enabled: true,
15
+ sync_interval_seconds: 60,
16
+ log_retention_hours: 24,
17
+ server_url: "http://localhost:3000",
18
+ };
19
+
20
+ // Ensure directories exist
21
+ function ensureDirectories() {
22
+ if (!fs.existsSync(SUPERCLI_DIR)) {
23
+ fs.mkdirSync(SUPERCLI_DIR, { recursive: true });
24
+ }
25
+ if (!fs.existsSync(LOGS_DIR)) {
26
+ fs.mkdirSync(LOGS_DIR, { recursive: true });
27
+ }
28
+ }
29
+
30
+ // Load daemon configuration
31
+ function loadConfig() {
32
+ ensureDirectories();
33
+ if (!fs.existsSync(CONFIG_FILE)) {
34
+ fs.writeFileSync(CONFIG_FILE, JSON.stringify(DEFAULT_CONFIG, null, 2));
35
+ return DEFAULT_CONFIG;
36
+ }
37
+ try {
38
+ return { ...DEFAULT_CONFIG, ...JSON.parse(fs.readFileSync(CONFIG_FILE, "utf8")) };
39
+ } catch (err) {
40
+ return DEFAULT_CONFIG;
41
+ }
42
+ }
43
+
44
+ // Get daily log file path
45
+ function getLogFilePath() {
46
+ const date = new Date().toISOString().split("T")[0];
47
+ return path.join(LOGS_DIR, `jobs-${date}.jsonl`);
48
+ }
49
+
50
+ // Write log entry to daily log file
51
+ function writeLog(logEntry) {
52
+ ensureDirectories();
53
+ const logFile = getLogFilePath();
54
+ const entry = { ...logEntry, synced: false };
55
+ fs.appendFileSync(logFile, JSON.stringify(entry) + "\n");
56
+ }
57
+
58
+ // Check if daemon is running
59
+ function isDaemonRunning() {
60
+ if (!fs.existsSync(PID_FILE)) {
61
+ return false;
62
+ }
63
+ try {
64
+ const pid = parseInt(fs.readFileSync(PID_FILE, "utf8").trim());
65
+ // Check if process is running
66
+ try {
67
+ process.kill(pid, 0);
68
+ return true;
69
+ } catch (e) {
70
+ // Process not found, clean up stale PID file
71
+ fs.unlinkSync(PID_FILE);
72
+ return false;
73
+ }
74
+ } catch (err) {
75
+ return false;
76
+ }
77
+ }
78
+
79
+ // Write heartbeat timestamp
80
+ function writeHeartbeat() {
81
+ ensureDirectories();
82
+ fs.writeFileSync(HEARTBEAT_FILE, new Date().toISOString());
83
+ }
84
+
85
+ // Get heartbeat timestamp
86
+ function getHeartbeat() {
87
+ if (!fs.existsSync(HEARTBEAT_FILE)) {
88
+ return null;
89
+ }
90
+ try {
91
+ return new Date(fs.readFileSync(HEARTBEAT_FILE, "utf8").trim());
92
+ } catch (err) {
93
+ return null;
94
+ }
95
+ }
96
+
97
+ // Start daemon process
98
+ function startDaemon() {
99
+ ensureDirectories();
100
+ if (isDaemonRunning()) {
101
+ return { ok: true, message: "Daemon already running" };
102
+ }
103
+
104
+ const config = loadConfig();
105
+ if (!config.enabled) {
106
+ return { ok: false, message: "Daemon is disabled in config" };
107
+ }
108
+
109
+ // Spawn daemon as independent process
110
+ const daemonScript = path.join(__dirname, "daemon.js");
111
+ const nodePath = process.execPath;
112
+
113
+ const child = spawn(nodePath, [daemonScript, "--daemon"], {
114
+ detached: true,
115
+ stdio: "ignore",
116
+ });
117
+
118
+ child.unref(); // Allow parent to exit without waiting for child
119
+
120
+ return { ok: true, message: "Daemon started" };
121
+ }
122
+
123
+ // Stop daemon process
124
+ function stopDaemon() {
125
+ if (!isDaemonRunning()) {
126
+ return { ok: true, message: "Daemon not running" };
127
+ }
128
+
129
+ try {
130
+ const pid = parseInt(fs.readFileSync(PID_FILE, "utf8").trim());
131
+ process.kill(pid, "SIGTERM");
132
+ fs.unlinkSync(PID_FILE);
133
+ return { ok: true, message: "Daemon stopped" };
134
+ } catch (err) {
135
+ return { ok: false, message: `Failed to stop daemon: ${err.message}` };
136
+ }
137
+ }
138
+
139
+ // Get daemon status
140
+ function getDaemonStatus() {
141
+ const running = isDaemonRunning();
142
+ const heartbeat = getHeartbeat();
143
+ const config = loadConfig();
144
+
145
+ return {
146
+ running,
147
+ enabled: config.enabled,
148
+ heartbeat: heartbeat ? heartbeat.toISOString() : null,
149
+ pid: running ? parseInt(fs.readFileSync(PID_FILE, "utf8").trim()) : null,
150
+ };
151
+ }
152
+
153
+ // Sync logs to server
154
+ async function syncLogs(config) {
155
+ const logFile = getLogFilePath();
156
+ if (!fs.existsSync(logFile)) {
157
+ return { synced: 0, errors: 0 };
158
+ }
159
+
160
+ const lines = fs.readFileSync(logFile, "utf8").split("\n").filter(Boolean);
161
+ const unsyncedLogs = [];
162
+
163
+ for (const line of lines) {
164
+ try {
165
+ const log = JSON.parse(line);
166
+ if (!log.synced) {
167
+ unsyncedLogs.push(log);
168
+ }
169
+ } catch (err) {
170
+ // Skip invalid lines
171
+ }
172
+ }
173
+
174
+ if (unsyncedLogs.length === 0) {
175
+ return { synced: 0, errors: 0 };
176
+ }
177
+
178
+ let synced = 0;
179
+ let errors = 0;
180
+
181
+ // Upload logs one at a time (server expects single job object)
182
+ for (const log of unsyncedLogs) {
183
+ try {
184
+ const headers = { "Content-Type": "application/json" };
185
+ const apiKey = process.env.SUPERCLI_API_KEY;
186
+ if (apiKey) {
187
+ headers["X-API-Key"] = apiKey;
188
+ }
189
+
190
+ const response = await fetch(`${config.server_url}/api/jobs`, {
191
+ method: "POST",
192
+ headers,
193
+ body: JSON.stringify({
194
+ command: log.command,
195
+ args: log.args,
196
+ status: log.status,
197
+ duration_ms: log.duration_ms,
198
+ timestamp: log.timestamp,
199
+ client_id: log.client_id,
200
+ }),
201
+ });
202
+
203
+ if (response.ok) {
204
+ synced++;
205
+ // Mark log as synced
206
+ updateSyncStatus(logFile, [log.timestamp]);
207
+ } else {
208
+ errors++;
209
+ }
210
+ } catch (err) {
211
+ errors++;
212
+ }
213
+ }
214
+
215
+ return { synced, errors };
216
+ }
217
+
218
+ // Update sync status in log file
219
+ function updateSyncStatus(logFile, timestamps) {
220
+ const lines = fs.readFileSync(logFile, "utf8").split("\n").filter(Boolean);
221
+ const timestampSet = new Set(timestamps);
222
+ const updatedLines = lines.map((line) => {
223
+ try {
224
+ const log = JSON.parse(line);
225
+ if (timestampSet.has(log.timestamp)) {
226
+ log.synced = true;
227
+ return JSON.stringify(log);
228
+ }
229
+ return line;
230
+ } catch (err) {
231
+ return line;
232
+ }
233
+ });
234
+ fs.writeFileSync(logFile, updatedLines.join("\n") + "\n");
235
+ }
236
+
237
+ // Prune old logs
238
+ function pruneLogs(config) {
239
+ ensureDirectories();
240
+ const retentionMs = config.log_retention_hours * 60 * 60 * 1000;
241
+ const cutoff = Date.now() - retentionMs;
242
+
243
+ const files = fs.readdirSync(LOGS_DIR);
244
+ let pruned = 0;
245
+
246
+ for (const file of files) {
247
+ if (!file.startsWith("jobs-") || !file.endsWith(".jsonl")) {
248
+ continue;
249
+ }
250
+
251
+ const filePath = path.join(LOGS_DIR, file);
252
+ const lines = fs.readFileSync(filePath, "utf8").split("\n").filter(Boolean);
253
+ const keptLines = [];
254
+
255
+ for (const line of lines) {
256
+ try {
257
+ const log = JSON.parse(line);
258
+ const logTime = new Date(log.timestamp).getTime();
259
+ // Keep if: not synced OR within retention period
260
+ if (!log.synced || logTime > cutoff) {
261
+ keptLines.push(line);
262
+ } else {
263
+ pruned++;
264
+ }
265
+ } catch (err) {
266
+ // Keep invalid lines
267
+ keptLines.push(line);
268
+ }
269
+ }
270
+
271
+ if (keptLines.length === 0) {
272
+ // Delete empty file
273
+ fs.unlinkSync(filePath);
274
+ } else {
275
+ fs.writeFileSync(filePath, keptLines.join("\n") + "\n");
276
+ }
277
+ }
278
+
279
+ return { pruned };
280
+ }
281
+
282
+ // Daemon main loop
283
+ async function daemonMain() {
284
+ const config = loadConfig();
285
+ console.log("Daemon started, syncing every", config.sync_interval_seconds, "seconds");
286
+
287
+ while (true) {
288
+ try {
289
+ writeHeartbeat();
290
+ const syncResult = await syncLogs(config);
291
+ const pruneResult = pruneLogs(config);
292
+
293
+ if (syncResult.synced > 0 || pruneResult.pruned > 0) {
294
+ console.log(`Synced ${syncResult.synced} logs, pruned ${pruneResult.pruned} logs`);
295
+ }
296
+ } catch (err) {
297
+ console.error("Daemon error:", err);
298
+ }
299
+
300
+ await new Promise((resolve) => setTimeout(resolve, config.sync_interval_seconds * 1000));
301
+ }
302
+ }
303
+
304
+ // CLI entry point
305
+ if (require.main === module) {
306
+ const args = process.argv.slice(2);
307
+
308
+ if (args.includes("--daemon")) {
309
+ // Run as daemon process
310
+ const pid = process.pid;
311
+ ensureDirectories();
312
+ fs.writeFileSync(PID_FILE, pid.toString());
313
+ daemonMain().catch((err) => {
314
+ console.error("Daemon fatal error:", err);
315
+ process.exit(1);
316
+ });
317
+ } else {
318
+ // CLI commands
319
+ const command = args[0];
320
+
321
+ switch (command) {
322
+ case "start":
323
+ console.log(JSON.stringify(startDaemon(), null, 2));
324
+ break;
325
+ case "stop":
326
+ console.log(JSON.stringify(stopDaemon(), null, 2));
327
+ break;
328
+ case "status":
329
+ console.log(JSON.stringify(getDaemonStatus(), null, 2));
330
+ break;
331
+ default:
332
+ console.log("Usage: node daemon.js {start|stop|status}");
333
+ process.exit(1);
334
+ }
335
+ }
336
+ }
337
+
338
+ module.exports = {
339
+ startDaemon,
340
+ stopDaemon,
341
+ isDaemonRunning,
342
+ writeLog,
343
+ syncLogs,
344
+ pruneLogs,
345
+ writeHeartbeat,
346
+ getHeartbeat,
347
+ getDaemonStatus,
348
+ loadConfig,
349
+ };