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.
- package/.beads/.br_history/{issues.20260426_162712_190824905.jsonl → issues.20260427_104606_658098709.jsonl} +49 -48
- package/.beads/.br_history/{issues.20260426_162513_726336785.jsonl → issues.20260427_104607_085798670.jsonl} +50 -48
- package/.beads/.br_history/{issues.20260426_162331_516939737.jsonl → issues.20260427_104607_627598880.jsonl} +51 -48
- package/.beads/.br_history/{issues.20260426_134150_938793400.jsonl → issues.20260427_104608_071298223.jsonl} +52 -48
- package/.beads/.br_history/issues.20260427_104615_198124329.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_104615_669652069.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_104637_752744777.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_104638_209211116.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_104638_898729442.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_104639_368827997.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_104639_823343822.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_104640_354170001.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_104640_937129660.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_104647_408876191.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_104659_300660476.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_104800_415120762.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_104901_529669396.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_105002_587183822.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_105103_686748531.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_105204_721591044.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_105305_855661211.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_105407_641630152.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_105509_159649245.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_105610_283950586.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_105637_656057143.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_105738_863187883.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_105839_958463404.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_105941_092827317.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_110042_110436110.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_110143_343801118.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_110244_379134729.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_110345_445658284.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_110446_689391882.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_110547_667705716.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_110609_987816377.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_110711_086550915.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_110812_204821395.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_110913_259688311.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_111014_297775509.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_111115_195150935.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_111216_316259530.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_111317_298020330.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_111418_604431267.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_111519_617870969.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_111533_024097015.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_111634_138814655.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_111737_148398766.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_111838_507704112.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_111939_468325527.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_112041_044923744.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_112142_224127430.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_112243_212317525.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_112344_182300930.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_112445_197922899.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_112502_597304488.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_112604_292832651.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_112706_051581607.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_112807_066213762.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_112908_145315373.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_113009_141079023.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_113110_601071412.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_113211_601412739.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_113312_771171767.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_113413_719165420.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_113430_416576564.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_113531_553842703.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_113633_137526241.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_113735_697152101.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_113836_810884202.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_113938_312284719.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_114039_390178502.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_114140_483586632.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_114241_502376670.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_114342_927243830.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_114405_996651227.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_114507_946708398.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_114608_914493506.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_114709_935565841.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_114810_981588378.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_114912_061702372.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_115013_063113906.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_115114_208497343.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_115215_176080241.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_115316_481573328.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_115335_866978652.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_115436_866087391.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_115538_016094860.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_115638_932947449.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_115739_982932603.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_115840_963681039.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_115941_912431509.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_120043_043356448.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_120144_955596968.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_120246_060733977.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_120307_717985017.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_120408_871846736.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_121003_963750732.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_121006_018509431.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_121019_617062931.jsonl +261 -0
- package/.beads/.br_history/issues.20260427_121021_689536311.jsonl +261 -0
- package/.beads/.br_recovery/beads.db-wal.20260427_104615_902749843.rebuild-failed +0 -0
- package/.beads/.br_recovery/beads.db-wal.20260427_121006_010373120.rebuild-failed +0 -0
- package/.beads/.br_recovery/beads.db.20260427_104615_902749843.rebuild-failed +0 -0
- package/.beads/.br_recovery/beads.db.20260427_121006_010373120.rebuild-failed +0 -0
- package/.beads/beads.db.corrupted +0 -0
- package/.beads/issues.jsonl +144 -144
- package/.supercli/adapters/test-cli-adapter.js +19 -0
- package/cli/adapters/mcp.js +89 -3
- package/cli/adapters/openapi.js +71 -2
- package/cli/config.js +69 -1
- package/cli/daemon.js +349 -0
- package/cli/plugins-manager.js +42 -9
- package/cli/server-command.js +174 -4
- package/cli/supercli.js +35 -15
- package/docs/changelog-2026-04.html +6 -0
- package/docs/index.html +94 -11
- package/docs/plugins.html +30 -0
- package/docs/server.md +80 -0
- package/graphify-out/GRAPH_REPORT.md +154 -162
- package/graphify-out/cache/11938479cfbdb8e52bf5f0f3c132d56204245ebb19aefe89bb0394feb36dbd5e.json +1 -0
- package/graphify-out/cache/141362b25039dee7a4959ef475befea0a25671aae66f3d14917e711e597ffbf6.json +1 -0
- package/graphify-out/cache/2f23b1be3f6434f60138a04261d83ca71b128f405bd68fb19abf48cd61108dfc.json +1 -0
- package/graphify-out/cache/362adb1b6b483f56d09feaf652f4122366e568aaede752f48383b76d61f5d9d6.json +1 -0
- package/graphify-out/cache/42bc8f64d69d2cd9ecf64e92e38f89f7ea479f69c947de5984919e2fd5a716ee.json +1 -0
- package/graphify-out/cache/4b5cffce31d9193b7d0a8f15e8a41c66f6733a6490ebaeff2c8ca19701c72c0e.json +1 -0
- package/graphify-out/cache/5ef4e31750d9e7bc4ff4a7b535f247d9ab5ab9627d72e20794779ec4be424c66.json +1 -0
- package/graphify-out/cache/6d5023ecffa52382d31152c8c06e86e286789228a3d4f7fde72087f3eafa11bc.json +1 -0
- package/graphify-out/cache/6e5776e123142a78f50fa0bfd5ae2d289282051a9b392ae507de7aa9017f95d4.json +1 -0
- package/graphify-out/cache/75982dc60fa7353600ca48a3b33f5ba497eea9d5743daac6e61e9cf4f64774be.json +1 -0
- package/graphify-out/cache/7796066b51d3a99071debdfb5f40c854400b5bf3aa7c1e83dd6ae88eddca0370.json +1 -0
- package/graphify-out/cache/8ccd3b557a1ea98005fba84433f160ccd4a951fbdb6a4c9b7d7ba894f905b06b.json +1 -0
- package/graphify-out/cache/90ab53b8f1f3306e7c3a1f92ec628717ea90f4e684db764f7d7aa8e884fe2cae.json +1 -0
- package/graphify-out/cache/99c8133d0ccf5bf29a0a03caa6811d2ff8d73bcccf20681687876c890b94740e.json +1 -0
- package/graphify-out/cache/9fa6604cc820f3857c55c753ca0024788e4cbb61c4e12ba7ce0e4a1ce4ee0655.json +1 -0
- package/graphify-out/cache/a1e24a07beede2876e688cdb6c14e2d24abb22064862a6420cac321efabd3efd.json +1 -0
- package/graphify-out/cache/a418312f2805259c33007a18b36b6ae3b6a4da376ccae6006a3b9999262495db.json +1 -0
- package/graphify-out/cache/a6d9c029bd31a99b67357291305e27b01c5ef388925f7f2a6e985fec4efa8024.json +1 -0
- package/graphify-out/cache/a6ed52b709dd79f98adf72c483e8dfb6098203d7327470b82feb5e11390a5cf4.json +1 -0
- package/graphify-out/cache/b045ae4443d972ee8f47b91a0d61c984a190195b38ae1d331430b4c51c43acfd.json +1 -0
- package/graphify-out/cache/bc514f4074f89d2f7e7834670602e50bba0f24b8cd8c9d21ff4d361d3fd4d558.json +1 -0
- package/graphify-out/cache/be3fc87936f9f24d2d4f4b22b9d2a16f33f538cef1a181663120e23ecf16b81a.json +1 -0
- package/graphify-out/cache/c5a4822edbe3a95a56f9f943eed1567e5a5c913d59b1fa3df4ad54ffd9b02697.json +1 -0
- package/graphify-out/cache/cf411f1ddde50ee97c1c501f59ed7985bcdc022134574816bcce37ac20848e64.json +1 -0
- package/graphify-out/cache/d88625b5813742ca941ce8155cb77afb02425632002f621aca34f217440a392d.json +1 -0
- package/graphify-out/cache/da97fdc8af2a3306c292921110f84648bba2b0e85d27473b460b0e8a862ff225.json +1 -0
- package/graphify-out/cache/e88de9f1ae117f26fd217c3717eff7e525a284cc942b5f4d26ef2c4d65db59bd.json +1 -0
- package/graphify-out/cache/ebf6bd96ef2d8d396389ac7199e6ba818ee2d0c5dfc131fab7cdece9fb710f11.json +1 -0
- package/graphify-out/cache/f2a302550a6fe0649d36b8ef0b04b77673bca9f115732af8ae89751944dc9cc6.json +1 -0
- package/graphify-out/cache/fb46bd3ef530273918fc8915842453f21b418d536653d3b705b75b417255c246.json +1 -0
- package/graphify-out/cache/fcfdab94fe91af1f21fcefdba5a96674b9a16bb768288f3573fe68765163c765.json +1 -0
- package/graphify-out/graph.json +2669 -1121
- package/package.json +1 -1
- package/plugins/context-mode/plugin.json +10 -0
- package/plugins/context-mode/scripts/post-install.js +1 -1
- package/plugins/example-server-resources/meta.json +11 -0
- package/plugins/example-server-resources/plugin.json +46 -0
- package/server/app.js +43 -11
- package/server/middleware/auth.js +70 -0
- package/server/routes/adapters.js +3 -11
- package/server/routes/docs.js +10 -0
- package/server/routes/jobs.js +3 -2
- package/server/routes/mcp.js +1 -0
- package/server/routes/plugins.js +209 -10
- package/server/routes/specs.js +8 -3
- package/server/services/adaptersService.js +1 -0
- package/server/services/pluginResourceService.js +262 -0
- package/server/services/pluginsService.js +24 -0
- package/server/uploads/superbackend-openapi.json +47 -0
- package/server/uploads/test-auth-openapi.json +74 -0
- package/server/uploads/test-auth-spec.json +36 -0
- package/server/views/adapters.ejs +1 -0
- package/server/views/clients.ejs +82 -0
- package/server/views/docs.ejs +7 -0
- package/server/views/jobs.ejs +26 -2
- package/server/views/layout.ejs +0 -23
- package/server/views/mcp.ejs +278 -21
- package/server/views/partials/head.ejs +2 -0
- package/server/views/plugins.ejs +81 -1
- package/server/views/specs.ejs +217 -22
- package/.beads/.br_history/issues.20260424_173219_825545950.jsonl +0 -161
- package/.beads/.br_history/issues.20260424_173236_386891868.jsonl +0 -162
- package/.beads/.br_history/issues.20260424_174502_086707155.jsonl +0 -163
- package/.beads/.br_history/issues.20260424_174510_654230822.jsonl +0 -164
- package/.beads/.br_history/issues.20260424_174517_409774596.jsonl +0 -165
- package/.beads/.br_history/issues.20260424_174523_607561636.jsonl +0 -166
- package/.beads/.br_history/issues.20260424_174532_546016322.jsonl +0 -167
- package/.beads/.br_history/issues.20260424_175209_319624367.jsonl +0 -168
- package/.beads/.br_history/issues.20260424_175214_798999893.jsonl +0 -169
- package/.beads/.br_history/issues.20260424_175217_989449734.jsonl +0 -170
- package/.beads/.br_history/issues.20260424_175221_701416034.jsonl +0 -171
- package/.beads/.br_history/issues.20260424_175225_550538874.jsonl +0 -172
- package/.beads/.br_history/issues.20260424_180143_241956058.jsonl +0 -173
- package/.beads/.br_history/issues.20260424_180153_817576164.jsonl +0 -174
- package/.beads/.br_history/issues.20260424_180201_739387030.jsonl +0 -175
- package/.beads/.br_history/issues.20260424_180213_488389024.jsonl +0 -176
- package/.beads/.br_history/issues.20260424_180221_754279177.jsonl +0 -177
- package/.beads/.br_history/issues.20260424_181149_604365436.jsonl +0 -178
- package/.beads/.br_history/issues.20260424_181158_931468591.jsonl +0 -179
- package/.beads/.br_history/issues.20260424_181209_516766803.jsonl +0 -180
- package/.beads/.br_history/issues.20260424_181219_459169740.jsonl +0 -181
- package/.beads/.br_history/issues.20260424_181227_996490697.jsonl +0 -182
- package/.beads/.br_history/issues.20260424_181958_717811271.jsonl +0 -183
- package/.beads/.br_history/issues.20260424_182002_913828749.jsonl +0 -184
- package/.beads/.br_history/issues.20260424_182006_779786523.jsonl +0 -185
- package/.beads/.br_history/issues.20260424_182010_368190795.jsonl +0 -186
- package/.beads/.br_history/issues.20260424_182016_217217108.jsonl +0 -187
- package/.beads/.br_history/issues.20260424_182539_287444292.jsonl +0 -188
- package/.beads/.br_history/issues.20260424_182543_343189534.jsonl +0 -189
- package/.beads/.br_history/issues.20260424_182547_119975837.jsonl +0 -190
- package/.beads/.br_history/issues.20260424_182550_849315940.jsonl +0 -191
- package/.beads/.br_history/issues.20260424_182554_677413036.jsonl +0 -192
- package/.beads/.br_history/issues.20260424_183140_390494612.jsonl +0 -193
- package/.beads/.br_history/issues.20260424_183144_266256714.jsonl +0 -194
- package/.beads/.br_history/issues.20260424_183152_839579876.jsonl +0 -195
- package/.beads/.br_history/issues.20260424_183202_355634088.jsonl +0 -196
- package/.beads/.br_history/issues.20260424_183209_438616861.jsonl +0 -197
- package/.beads/.br_history/issues.20260424_183753_517602948.jsonl +0 -198
- package/.beads/.br_history/issues.20260424_183757_533544458.jsonl +0 -199
- package/.beads/.br_history/issues.20260424_183803_063929316.jsonl +0 -200
- package/.beads/.br_history/issues.20260424_183807_014724964.jsonl +0 -201
- package/.beads/.br_history/issues.20260424_183813_278844212.jsonl +0 -202
- package/.beads/.br_history/issues.20260424_190900_876564388.jsonl +0 -203
- package/.beads/.br_history/issues.20260424_192047_121286991.jsonl +0 -204
- package/.beads/.br_history/issues.20260424_192811_866934994.jsonl +0 -205
- package/.beads/.br_history/issues.20260424_193837_426102367.jsonl +0 -206
- package/.beads/.br_history/issues.20260424_194617_271952813.jsonl +0 -207
- package/.beads/.br_history/issues.20260424_195430_952967644.jsonl +0 -208
- package/.beads/.br_history/issues.20260424_200234_439280977.jsonl +0 -209
- package/.beads/.br_history/issues.20260424_200923_545127361.jsonl +0 -210
- package/.beads/.br_history/issues.20260424_204056_586059018.jsonl +0 -211
- package/.beads/.br_history/issues.20260424_205301_854556209.jsonl +0 -212
- package/.beads/.br_history/issues.20260424_210455_501610650.jsonl +0 -213
- package/.beads/.br_history/issues.20260424_212803_108840399.jsonl +0 -214
- package/.beads/.br_history/issues.20260425_045812_041336580.jsonl +0 -215
- package/.beads/.br_history/issues.20260425_045914_762139232.jsonl +0 -216
- package/.beads/.br_history/issues.20260425_050011_038094726.jsonl +0 -217
- package/.beads/.br_history/issues.20260425_050140_047103928.jsonl +0 -218
- package/.beads/.br_history/issues.20260425_054328_968771145.jsonl +0 -219
- package/.beads/.br_history/issues.20260425_054419_800564203.jsonl +0 -220
- package/.beads/.br_history/issues.20260425_054543_771812828.jsonl +0 -221
- package/.beads/.br_history/issues.20260425_054648_963773974.jsonl +0 -222
- package/.beads/.br_history/issues.20260425_054751_122349828.jsonl +0 -223
- package/.beads/.br_history/issues.20260425_060749_403415856.jsonl +0 -224
- package/.beads/.br_history/issues.20260425_062503_208821903.jsonl +0 -225
- package/.beads/.br_history/issues.20260425_063134_587505560.jsonl +0 -226
- package/.beads/.br_history/issues.20260425_064005_565019560.jsonl +0 -227
- package/.beads/.br_history/issues.20260425_064651_250053752.jsonl +0 -228
- package/.beads/.br_history/issues.20260425_065904_323410469.jsonl +0 -229
- package/.beads/.br_history/issues.20260425_070603_854872783.jsonl +0 -230
- package/.beads/.br_history/issues.20260425_071232_499550581.jsonl +0 -231
- package/.beads/.br_history/issues.20260425_071859_753108611.jsonl +0 -232
- package/.beads/.br_history/issues.20260425_171215_558114276.jsonl +0 -233
- package/.beads/.br_history/issues.20260425_171228_711028872.jsonl +0 -234
- package/.beads/.br_history/issues.20260425_171908_608455863.jsonl +0 -235
- package/.beads/.br_history/issues.20260425_172952_108071113.jsonl +0 -236
- package/.beads/.br_history/issues.20260425_200313_037876111.jsonl +0 -237
- package/.beads/.br_history/issues.20260425_201117_411540946.jsonl +0 -238
- package/.beads/.br_history/issues.20260425_210522_892936637.jsonl +0 -239
- package/.beads/.br_history/issues.20260425_210949_356368198.jsonl +0 -240
- package/.beads/.br_history/issues.20260425_211617_355720902.jsonl +0 -241
- package/.beads/.br_history/issues.20260425_213515_555595766.jsonl +0 -242
- package/.beads/.br_history/issues.20260425_214642_203845514.jsonl +0 -243
- package/.beads/.br_history/issues.20260425_221221_451474472.jsonl +0 -244
- package/.beads/.br_history/issues.20260425_222608_800503496.jsonl +0 -245
- package/.beads/.br_history/issues.20260426_071735_330251998.jsonl +0 -246
- package/.beads/.br_history/issues.20260426_071755_925764854.jsonl +0 -247
- package/.beads/.br_history/issues.20260426_071818_936440407.jsonl +0 -248
- package/.beads/.br_history/issues.20260426_071834_033200504.jsonl +0 -249
- package/.beads/.br_history/issues.20260426_072406_524696668.jsonl +0 -250
- package/.beads/.br_history/issues.20260426_073231_913315951.jsonl +0 -251
- package/.beads/.br_history/issues.20260426_074828_051470117.jsonl +0 -252
- package/.beads/.br_history/issues.20260426_080300_773872374.jsonl +0 -253
- package/.beads/.br_history/issues.20260426_121735_535252712.jsonl +0 -254
- package/.beads/.br_history/issues.20260426_125144_933153546.jsonl +0 -255
- package/.beads/.br_history/issues.20260426_132438_591463320.jsonl +0 -256
- /package/.beads/.br_history/{issues.20260424_173219_825545950.jsonl.meta.json → issues.20260427_104606_658098709.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_173236_386891868.jsonl.meta.json → issues.20260427_104607_085798670.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_174502_086707155.jsonl.meta.json → issues.20260427_104607_627598880.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_174510_654230822.jsonl.meta.json → issues.20260427_104608_071298223.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_174517_409774596.jsonl.meta.json → issues.20260427_104615_198124329.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_174523_607561636.jsonl.meta.json → issues.20260427_104615_669652069.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_174532_546016322.jsonl.meta.json → issues.20260427_104637_752744777.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_175209_319624367.jsonl.meta.json → issues.20260427_104638_209211116.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_175214_798999893.jsonl.meta.json → issues.20260427_104638_898729442.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_175217_989449734.jsonl.meta.json → issues.20260427_104639_368827997.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_175221_701416034.jsonl.meta.json → issues.20260427_104639_823343822.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_175225_550538874.jsonl.meta.json → issues.20260427_104640_354170001.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_180143_241956058.jsonl.meta.json → issues.20260427_104640_937129660.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_180153_817576164.jsonl.meta.json → issues.20260427_104647_408876191.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_180201_739387030.jsonl.meta.json → issues.20260427_104659_300660476.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_180213_488389024.jsonl.meta.json → issues.20260427_104800_415120762.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_180221_754279177.jsonl.meta.json → issues.20260427_104901_529669396.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_181149_604365436.jsonl.meta.json → issues.20260427_105002_587183822.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_181158_931468591.jsonl.meta.json → issues.20260427_105103_686748531.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_181209_516766803.jsonl.meta.json → issues.20260427_105204_721591044.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_181219_459169740.jsonl.meta.json → issues.20260427_105305_855661211.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_181227_996490697.jsonl.meta.json → issues.20260427_105407_641630152.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_181958_717811271.jsonl.meta.json → issues.20260427_105509_159649245.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_182002_913828749.jsonl.meta.json → issues.20260427_105610_283950586.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_182006_779786523.jsonl.meta.json → issues.20260427_105637_656057143.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_182010_368190795.jsonl.meta.json → issues.20260427_105738_863187883.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_182016_217217108.jsonl.meta.json → issues.20260427_105839_958463404.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_182539_287444292.jsonl.meta.json → issues.20260427_105941_092827317.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_182543_343189534.jsonl.meta.json → issues.20260427_110042_110436110.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_182547_119975837.jsonl.meta.json → issues.20260427_110143_343801118.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_182550_849315940.jsonl.meta.json → issues.20260427_110244_379134729.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_182554_677413036.jsonl.meta.json → issues.20260427_110345_445658284.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_183140_390494612.jsonl.meta.json → issues.20260427_110446_689391882.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_183144_266256714.jsonl.meta.json → issues.20260427_110547_667705716.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_183152_839579876.jsonl.meta.json → issues.20260427_110609_987816377.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_183202_355634088.jsonl.meta.json → issues.20260427_110711_086550915.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_183209_438616861.jsonl.meta.json → issues.20260427_110812_204821395.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_183753_517602948.jsonl.meta.json → issues.20260427_110913_259688311.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_183757_533544458.jsonl.meta.json → issues.20260427_111014_297775509.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_183803_063929316.jsonl.meta.json → issues.20260427_111115_195150935.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_183807_014724964.jsonl.meta.json → issues.20260427_111216_316259530.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_183813_278844212.jsonl.meta.json → issues.20260427_111317_298020330.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_190900_876564388.jsonl.meta.json → issues.20260427_111418_604431267.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_192047_121286991.jsonl.meta.json → issues.20260427_111519_617870969.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_192811_866934994.jsonl.meta.json → issues.20260427_111533_024097015.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_193837_426102367.jsonl.meta.json → issues.20260427_111634_138814655.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_194617_271952813.jsonl.meta.json → issues.20260427_111737_148398766.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_195430_952967644.jsonl.meta.json → issues.20260427_111838_507704112.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_200234_439280977.jsonl.meta.json → issues.20260427_111939_468325527.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_200923_545127361.jsonl.meta.json → issues.20260427_112041_044923744.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_204056_586059018.jsonl.meta.json → issues.20260427_112142_224127430.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_205301_854556209.jsonl.meta.json → issues.20260427_112243_212317525.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_210455_501610650.jsonl.meta.json → issues.20260427_112344_182300930.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260424_212803_108840399.jsonl.meta.json → issues.20260427_112445_197922899.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_045812_041336580.jsonl.meta.json → issues.20260427_112502_597304488.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_045914_762139232.jsonl.meta.json → issues.20260427_112604_292832651.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_050011_038094726.jsonl.meta.json → issues.20260427_112706_051581607.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_050140_047103928.jsonl.meta.json → issues.20260427_112807_066213762.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_054328_968771145.jsonl.meta.json → issues.20260427_112908_145315373.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_054419_800564203.jsonl.meta.json → issues.20260427_113009_141079023.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_054543_771812828.jsonl.meta.json → issues.20260427_113110_601071412.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_054648_963773974.jsonl.meta.json → issues.20260427_113211_601412739.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_054751_122349828.jsonl.meta.json → issues.20260427_113312_771171767.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_060749_403415856.jsonl.meta.json → issues.20260427_113413_719165420.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_062503_208821903.jsonl.meta.json → issues.20260427_113430_416576564.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_063134_587505560.jsonl.meta.json → issues.20260427_113531_553842703.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_064005_565019560.jsonl.meta.json → issues.20260427_113633_137526241.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_064651_250053752.jsonl.meta.json → issues.20260427_113735_697152101.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_065904_323410469.jsonl.meta.json → issues.20260427_113836_810884202.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_070603_854872783.jsonl.meta.json → issues.20260427_113938_312284719.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_071232_499550581.jsonl.meta.json → issues.20260427_114039_390178502.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_071859_753108611.jsonl.meta.json → issues.20260427_114140_483586632.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_171215_558114276.jsonl.meta.json → issues.20260427_114241_502376670.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_171228_711028872.jsonl.meta.json → issues.20260427_114342_927243830.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_171908_608455863.jsonl.meta.json → issues.20260427_114405_996651227.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_172952_108071113.jsonl.meta.json → issues.20260427_114507_946708398.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_200313_037876111.jsonl.meta.json → issues.20260427_114608_914493506.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_201117_411540946.jsonl.meta.json → issues.20260427_114709_935565841.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_210522_892936637.jsonl.meta.json → issues.20260427_114810_981588378.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_210949_356368198.jsonl.meta.json → issues.20260427_114912_061702372.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_211617_355720902.jsonl.meta.json → issues.20260427_115013_063113906.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_213515_555595766.jsonl.meta.json → issues.20260427_115114_208497343.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_214642_203845514.jsonl.meta.json → issues.20260427_115215_176080241.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_221221_451474472.jsonl.meta.json → issues.20260427_115316_481573328.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260425_222608_800503496.jsonl.meta.json → issues.20260427_115335_866978652.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260426_071735_330251998.jsonl.meta.json → issues.20260427_115436_866087391.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260426_071755_925764854.jsonl.meta.json → issues.20260427_115538_016094860.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260426_071818_936440407.jsonl.meta.json → issues.20260427_115638_932947449.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260426_071834_033200504.jsonl.meta.json → issues.20260427_115739_982932603.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260426_072406_524696668.jsonl.meta.json → issues.20260427_115840_963681039.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260426_073231_913315951.jsonl.meta.json → issues.20260427_115941_912431509.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260426_074828_051470117.jsonl.meta.json → issues.20260427_120043_043356448.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260426_080300_773872374.jsonl.meta.json → issues.20260427_120144_955596968.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260426_121735_535252712.jsonl.meta.json → issues.20260427_120246_060733977.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260426_125144_933153546.jsonl.meta.json → issues.20260427_120307_717985017.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260426_132438_591463320.jsonl.meta.json → issues.20260427_120408_871846736.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260426_134150_938793400.jsonl.meta.json → issues.20260427_121003_963750732.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260426_162331_516939737.jsonl.meta.json → issues.20260427_121006_018509431.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260426_162513_726336785.jsonl.meta.json → issues.20260427_121019_617062931.jsonl.meta.json} +0 -0
- /package/.beads/.br_history/{issues.20260426_162712_190824905.jsonl.meta.json → issues.20260427_121021_689536311.jsonl.meta.json} +0 -0
package/server/views/mcp.ejs
CHANGED
|
@@ -9,30 +9,62 @@
|
|
|
9
9
|
<button @click="showForm=!showForm" class="btn btn-primary">+ Add Server</button>
|
|
10
10
|
</div>
|
|
11
11
|
|
|
12
|
-
<!-- Add form -->
|
|
12
|
+
<!-- Add/Edit form -->
|
|
13
13
|
<div v-if="showForm" class="bento-card p-6 mb-6">
|
|
14
|
-
<form @submit.prevent="create">
|
|
14
|
+
<form @submit.prevent="editing ? update() : create()">
|
|
15
15
|
<div class="flex flex-col md:flex-row gap-4 items-end mb-4">
|
|
16
16
|
<div class="flex-1 w-full">
|
|
17
17
|
<label class="block text-xs font-semibold text-[#787774] uppercase tracking-wider mb-2">Name</label>
|
|
18
18
|
<input v-model="form.name" class="w-full px-4 py-3 bg-[#F7F6F3] border border-[#EAEAEA] rounded-md text-[#111111] focus:outline-none focus:border-[#111111] transition-colors" required placeholder="e.g. context-mode">
|
|
19
19
|
</div>
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<div class="mb-4">
|
|
23
|
+
<label class="block text-xs font-semibold text-[#787774] uppercase tracking-wider mb-3">Transport Mode</label>
|
|
24
|
+
<div class="flex gap-6">
|
|
25
|
+
<label class="flex items-center gap-2 cursor-pointer">
|
|
26
|
+
<input type="radio" v-model="form.transport" value="http" class="w-4 h-4 accent-[#111111]">
|
|
27
|
+
<span class="text-sm text-[#2F3437]">SSE/HTTP</span>
|
|
28
|
+
</label>
|
|
29
|
+
<label class="flex items-center gap-2 cursor-pointer">
|
|
30
|
+
<input type="radio" v-model="form.transport" value="stdio" class="w-4 h-4 accent-[#111111]">
|
|
31
|
+
<span class="text-sm text-[#2F3437]">STDIO</span>
|
|
32
|
+
</label>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
<!-- SSE/HTTP fields -->
|
|
37
|
+
<div v-if="form.transport === 'http'" class="space-y-4">
|
|
38
|
+
<div>
|
|
39
|
+
<label class="block text-xs font-semibold text-[#787774] uppercase tracking-wider mb-2">URL</label>
|
|
22
40
|
<input v-model="form.url" class="w-full px-4 py-3 bg-[#F7F6F3] border border-[#EAEAEA] rounded-md text-[#111111] focus:outline-none focus:border-[#111111] transition-colors" placeholder="https://mcp.example.com">
|
|
41
|
+
<p class="text-xs text-[#787774] mt-1">Uses SSE with HTTP fallback</p>
|
|
23
42
|
</div>
|
|
24
|
-
<div
|
|
25
|
-
<label class="block text-xs font-semibold text-[#787774] uppercase tracking-wider mb-2">
|
|
26
|
-
<input v-model="form.
|
|
43
|
+
<div>
|
|
44
|
+
<label class="block text-xs font-semibold text-[#787774] uppercase tracking-wider mb-2">Timeout (ms)</label>
|
|
45
|
+
<input v-model="form.timeout_ms" type="number" class="w-full px-4 py-3 bg-[#F7F6F3] border border-[#EAEAEA] rounded-md text-[#111111] focus:outline-none focus:border-[#111111] transition-colors" placeholder="30000">
|
|
46
|
+
<p class="text-xs text-[#787774] mt-1">Default: 30000ms (30 seconds)</p>
|
|
27
47
|
</div>
|
|
28
48
|
</div>
|
|
29
|
-
|
|
49
|
+
|
|
50
|
+
<!-- STDIO fields -->
|
|
51
|
+
<div v-if="form.transport === 'stdio'" class="space-y-4">
|
|
52
|
+
<div>
|
|
53
|
+
<label class="block text-xs font-semibold text-[#787774] uppercase tracking-wider mb-2">Command</label>
|
|
54
|
+
<input v-model="form.command" class="w-full px-4 py-3 bg-[#F7F6F3] border border-[#EAEAEA] rounded-md text-[#111111] focus:outline-none focus:border-[#111111] transition-colors" placeholder="e.g. context-mode">
|
|
55
|
+
</div>
|
|
30
56
|
<label class="flex items-center gap-2 cursor-pointer">
|
|
31
57
|
<input type="checkbox" v-model="form.stateful" class="w-4 h-4 accent-[#111111]">
|
|
32
|
-
<
|
|
58
|
+
<div class="flex flex-col">
|
|
59
|
+
<span class="text-sm text-[#2F3437]">Stateful (requires daemon)</span>
|
|
60
|
+
<span class="text-xs text-[#787774]">Daemon runs on CLI side, starts when command is executed via CLI (not server)</span>
|
|
61
|
+
</div>
|
|
33
62
|
</label>
|
|
34
|
-
|
|
35
|
-
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
<div class="flex gap-4 items-center mt-4">
|
|
66
|
+
<button type="submit" class="btn btn-primary">{{ editing ? 'Update' : 'Save' }}</button>
|
|
67
|
+
<button type="button" @click="cancelEdit" class="btn">Cancel</button>
|
|
36
68
|
</div>
|
|
37
69
|
</form>
|
|
38
70
|
</div>
|
|
@@ -42,21 +74,45 @@
|
|
|
42
74
|
<thead>
|
|
43
75
|
<tr class="border-b border-[#EAEAEA] bg-[#F7F6F3]">
|
|
44
76
|
<th class="px-6 py-3 text-left text-xs font-semibold text-[#787774] uppercase tracking-wider">Name</th>
|
|
77
|
+
<th class="px-6 py-3 text-left text-xs font-semibold text-[#787774] uppercase tracking-wider">Plugin</th>
|
|
45
78
|
<th class="px-6 py-3 text-left text-xs font-semibold text-[#787774] uppercase tracking-wider">Source</th>
|
|
46
79
|
<th class="px-6 py-3 text-left text-xs font-semibold text-[#787774] uppercase tracking-wider">Type</th>
|
|
47
80
|
<th class="px-6 py-3 text-left text-xs font-semibold text-[#787774] uppercase tracking-wider">Actions</th>
|
|
48
81
|
</tr>
|
|
49
82
|
</thead>
|
|
50
83
|
<tbody>
|
|
51
|
-
<tr v-if="servers.length===0"><td colspan="
|
|
84
|
+
<tr v-if="servers.length===0"><td colspan="5" class="px-6 py-12 text-center text-[#787774]">No MCP servers registered.</td></tr>
|
|
52
85
|
<tr v-for="s in servers" :key="s._id" class="border-b border-[#EAEAEA] hover:bg-[#F7F6F3] transition-colors">
|
|
53
|
-
<td class="px-6 py-4"
|
|
86
|
+
<td class="px-6 py-4">
|
|
87
|
+
<code class="mono-text text-sm text-[#1F6C9F]">{{ s.displayName || s.name }}</code>
|
|
88
|
+
<div v-if="getUsedCommands(s).length > 0" class="mt-1 text-xs text-[#787774]">
|
|
89
|
+
used by: {{ getUsedCommands(s).map(c => `${c.namespace}.${c.resource}.${c.action}`).join(', ') }}
|
|
90
|
+
</div>
|
|
91
|
+
<div v-if="s.clientId" class="mt-1 text-xs text-[#787774]">
|
|
92
|
+
synced by: {{ s.clientId.substring(0, 8) }}...
|
|
93
|
+
</div>
|
|
94
|
+
</td>
|
|
95
|
+
<td class="px-6 py-4">
|
|
96
|
+
<span v-if="s.origin" class="px-2 py-1 rounded-full text-xs font-semibold" :class="{
|
|
97
|
+
'bg-blue-100 text-blue-700': s.origin === 'cli',
|
|
98
|
+
'bg-green-100 text-green-700': s.origin === 'server',
|
|
99
|
+
'bg-gray-100 text-gray-700': s.origin === 'manual'
|
|
100
|
+
}">{{ s.origin }}</span>
|
|
101
|
+
<span v-else class="text-xs text-[#787774]">manual</span>
|
|
102
|
+
</td>
|
|
54
103
|
<td class="px-6 py-4 max-w-xs truncate text-[#2F3437]">{{ s.url || s.command || '' }}</td>
|
|
55
104
|
<td class="px-6 py-4">
|
|
56
105
|
<span v-if="s.stateful" class="badge bg-[#111111] text-white">stateful</span>
|
|
57
|
-
<span v-else class="badge">{{ s.url ? 'http' : 'stdio' }}</span>
|
|
106
|
+
<span v-else class="badge">{{ s.url ? 'sse/http' : 'stdio' }}</span>
|
|
107
|
+
<span v-if="s.url && s.status" class="ml-2 text-xs" :class="{'text-green-600': s.status === 'alive', 'text-red-600': s.status === 'error'}">
|
|
108
|
+
{{ s.status === 'alive' ? '✓' : '✗' }} {{ s.lastCheck }}
|
|
109
|
+
</span>
|
|
58
110
|
</td>
|
|
59
111
|
<td class="px-6 py-4">
|
|
112
|
+
<button v-if="s.url" @click="check(s)" :disabled="s.checking" class="btn text-xs border-green-200 text-green-600 hover:bg-green-50 hover:border-green-300 mr-2" :class="{'opacity-50': s.checking}">
|
|
113
|
+
{{ s.checking ? 'Checking...' : 'Check' }}
|
|
114
|
+
</button>
|
|
115
|
+
<button @click="edit(s)" class="btn text-xs border-blue-200 text-blue-600 hover:bg-blue-50 hover:border-blue-300 mr-2">Edit</button>
|
|
60
116
|
<button @click="remove(s._id)" class="btn text-xs border-red-200 text-red-600 hover:bg-red-50 hover:border-red-300">Delete</button>
|
|
61
117
|
</td>
|
|
62
118
|
</tr>
|
|
@@ -72,16 +128,84 @@
|
|
|
72
128
|
data() {
|
|
73
129
|
return {
|
|
74
130
|
servers: initialServers,
|
|
131
|
+
commands: [],
|
|
75
132
|
showForm: false,
|
|
76
|
-
|
|
133
|
+
editing: false,
|
|
134
|
+
editId: null,
|
|
135
|
+
form: { name: '', transport: 'http', url: '', timeout_ms: 30000, command: '', stateful: false },
|
|
136
|
+
autoCheckInterval: null
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
mounted() {
|
|
140
|
+
// Start auto-check every minute for HTTP/SSE servers
|
|
141
|
+
this.autoCheckInterval = setInterval(() => {
|
|
142
|
+
this.autoCheck()
|
|
143
|
+
}, 60000)
|
|
144
|
+
|
|
145
|
+
// Fetch commands
|
|
146
|
+
this.fetchCommands()
|
|
147
|
+
|
|
148
|
+
// Refresh commands every 30 seconds
|
|
149
|
+
setInterval(() => {
|
|
150
|
+
this.fetchCommands()
|
|
151
|
+
}, 30000)
|
|
152
|
+
},
|
|
153
|
+
beforeUnmount() {
|
|
154
|
+
if (this.autoCheckInterval) {
|
|
155
|
+
clearInterval(this.autoCheckInterval)
|
|
77
156
|
}
|
|
78
157
|
},
|
|
79
158
|
methods: {
|
|
159
|
+
async fetchCommands() {
|
|
160
|
+
try {
|
|
161
|
+
const res = await fetch('/api/commands?format=json')
|
|
162
|
+
const data = await res.json()
|
|
163
|
+
this.commands = data.commands || data || []
|
|
164
|
+
} catch (err) {
|
|
165
|
+
console.error('Failed to fetch commands:', err)
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
getUsedCommands(server) {
|
|
169
|
+
// Find commands that use this MCP server
|
|
170
|
+
return this.commands.filter(cmd => {
|
|
171
|
+
const adapterConfig = cmd.adapterConfig || {}
|
|
172
|
+
// Match by server name (for stdio) or URL (for HTTP)
|
|
173
|
+
if (server.url) {
|
|
174
|
+
return adapterConfig.url === server.url
|
|
175
|
+
} else {
|
|
176
|
+
return adapterConfig.server === server.name
|
|
177
|
+
}
|
|
178
|
+
})
|
|
179
|
+
},
|
|
180
|
+
edit(server) {
|
|
181
|
+
this.editing = true
|
|
182
|
+
this.editId = server._id
|
|
183
|
+
this.form = {
|
|
184
|
+
name: server.name,
|
|
185
|
+
transport: server.url ? 'http' : 'stdio',
|
|
186
|
+
url: server.url || '',
|
|
187
|
+
timeout_ms: server.timeout_ms || 30000,
|
|
188
|
+
command: server.command || '',
|
|
189
|
+
stateful: server.stateful || false
|
|
190
|
+
}
|
|
191
|
+
this.showForm = true
|
|
192
|
+
},
|
|
193
|
+
cancelEdit() {
|
|
194
|
+
this.editing = false
|
|
195
|
+
this.editId = null
|
|
196
|
+
this.form = { name: '', transport: 'http', url: '', timeout_ms: 30000, command: '', stateful: false }
|
|
197
|
+
this.showForm = false
|
|
198
|
+
},
|
|
80
199
|
async create() {
|
|
81
200
|
const payload = { name: this.form.name }
|
|
82
|
-
if (this.form.
|
|
83
|
-
|
|
84
|
-
|
|
201
|
+
if (this.form.transport === 'http') {
|
|
202
|
+
payload.url = this.form.url
|
|
203
|
+
if (this.form.timeout_ms) payload.timeout_ms = parseInt(this.form.timeout_ms)
|
|
204
|
+
}
|
|
205
|
+
if (this.form.transport === 'stdio') {
|
|
206
|
+
payload.command = this.form.command
|
|
207
|
+
if (this.form.stateful) payload.stateful = true
|
|
208
|
+
}
|
|
85
209
|
const r = await fetch('/api/mcp', {
|
|
86
210
|
method: 'POST',
|
|
87
211
|
headers: { 'Content-Type': 'application/json' },
|
|
@@ -89,14 +213,147 @@
|
|
|
89
213
|
})
|
|
90
214
|
const doc = await r.json()
|
|
91
215
|
this.servers.push(doc)
|
|
92
|
-
this.
|
|
93
|
-
this.
|
|
216
|
+
this.cancelEdit()
|
|
217
|
+
await this.fetchCommands()
|
|
218
|
+
},
|
|
219
|
+
async update() {
|
|
220
|
+
const payload = { name: this.form.name }
|
|
221
|
+
if (this.form.transport === 'http') {
|
|
222
|
+
payload.url = this.form.url
|
|
223
|
+
if (this.form.timeout_ms) payload.timeout_ms = parseInt(this.form.timeout_ms)
|
|
224
|
+
}
|
|
225
|
+
if (this.form.transport === 'stdio') {
|
|
226
|
+
payload.command = this.form.command
|
|
227
|
+
if (this.form.stateful) payload.stateful = true
|
|
228
|
+
}
|
|
229
|
+
const r = await fetch('/api/mcp/' + this.editId, {
|
|
230
|
+
method: 'PUT',
|
|
231
|
+
headers: { 'Content-Type': 'application/json' },
|
|
232
|
+
body: JSON.stringify(payload)
|
|
233
|
+
})
|
|
234
|
+
const doc = await r.json()
|
|
235
|
+
const idx = this.servers.findIndex(s => s._id === this.editId)
|
|
236
|
+
if (idx !== -1) this.servers[idx] = { ...this.servers[idx], ...payload, updatedAt: new Date() }
|
|
237
|
+
this.cancelEdit()
|
|
238
|
+
await this.fetchCommands()
|
|
239
|
+
},
|
|
240
|
+
async check(server) {
|
|
241
|
+
server.checking = true
|
|
242
|
+
let sessionId = null
|
|
243
|
+
try {
|
|
244
|
+
const timeout = server.timeout_ms || 10000
|
|
245
|
+
const controller = new AbortController()
|
|
246
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout)
|
|
247
|
+
|
|
248
|
+
// Try different endpoints
|
|
249
|
+
const endpoints = ['/mcp', '/tool', '/sse']
|
|
250
|
+
let response = null
|
|
251
|
+
|
|
252
|
+
// First try without session (stateless)
|
|
253
|
+
for (const endpoint of endpoints) {
|
|
254
|
+
try {
|
|
255
|
+
response = await fetch(server.url + endpoint, {
|
|
256
|
+
method: 'POST',
|
|
257
|
+
headers: { 'Content-Type': 'application/json', 'Accept': 'application/json, text/event-stream' },
|
|
258
|
+
body: JSON.stringify({ jsonrpc: '2.0', method: 'tools/list', id: 1 }),
|
|
259
|
+
signal: controller.signal
|
|
260
|
+
})
|
|
261
|
+
// Accept any response that returns data (SSE might not be 200)
|
|
262
|
+
if (response.status >= 200 && response.status < 500) break
|
|
263
|
+
} catch (e) {
|
|
264
|
+
// Try next endpoint
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// If stateless check failed with session error, try with session
|
|
269
|
+
if (!response || response.status >= 500) {
|
|
270
|
+
// Try to create a session
|
|
271
|
+
for (const endpoint of endpoints) {
|
|
272
|
+
try {
|
|
273
|
+
const sessionRes = await fetch(server.url + endpoint, {
|
|
274
|
+
method: 'POST',
|
|
275
|
+
headers: { 'Content-Type': 'application/json', 'Accept': 'application/json, text/event-stream' },
|
|
276
|
+
body: JSON.stringify({ jsonrpc: '2.0', method: 'initialize', id: 1 }),
|
|
277
|
+
signal: controller.signal
|
|
278
|
+
})
|
|
279
|
+
if (sessionRes.status >= 200 && sessionRes.status < 500) {
|
|
280
|
+
const text = await sessionRes.text()
|
|
281
|
+
// Extract session ID from response
|
|
282
|
+
const match = text.match(/id:\s*([^\s_]+)/)
|
|
283
|
+
if (match) {
|
|
284
|
+
sessionId = match[1]
|
|
285
|
+
break
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
} catch (e) {
|
|
289
|
+
// Try next endpoint
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
// If we got a session, try the check with it
|
|
294
|
+
if (sessionId) {
|
|
295
|
+
for (const endpoint of endpoints) {
|
|
296
|
+
try {
|
|
297
|
+
response = await fetch(server.url + endpoint, {
|
|
298
|
+
method: 'POST',
|
|
299
|
+
headers: {
|
|
300
|
+
'Content-Type': 'application/json',
|
|
301
|
+
'Accept': 'application/json, text/event-stream',
|
|
302
|
+
'X-MCP-Session-Id': sessionId
|
|
303
|
+
},
|
|
304
|
+
body: JSON.stringify({ jsonrpc: '2.0', method: 'tools/list', id: 1 }),
|
|
305
|
+
signal: controller.signal
|
|
306
|
+
})
|
|
307
|
+
if (response.status >= 200 && response.status < 500) break
|
|
308
|
+
} catch (e) {
|
|
309
|
+
// Try next endpoint
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
clearTimeout(timeoutId)
|
|
316
|
+
|
|
317
|
+
if (response && response.status >= 200 && response.status < 500) {
|
|
318
|
+
server.status = 'alive'
|
|
319
|
+
server.lastCheck = new Date().toLocaleTimeString()
|
|
320
|
+
} else {
|
|
321
|
+
server.status = 'error'
|
|
322
|
+
server.lastCheck = new Date().toLocaleTimeString()
|
|
323
|
+
}
|
|
324
|
+
} catch (err) {
|
|
325
|
+
server.status = 'error'
|
|
326
|
+
server.lastCheck = new Date().toLocaleTimeString()
|
|
327
|
+
} finally {
|
|
328
|
+
server.checking = false
|
|
329
|
+
// Clean up session if created
|
|
330
|
+
if (sessionId) {
|
|
331
|
+
try {
|
|
332
|
+
await fetch(server.url + '/mcp', {
|
|
333
|
+
method: 'POST',
|
|
334
|
+
headers: { 'Content-Type': 'application/json' },
|
|
335
|
+
body: JSON.stringify({ jsonrpc: '2.0', method: 'shutdown', id: 1 })
|
|
336
|
+
})
|
|
337
|
+
} catch (e) {
|
|
338
|
+
// Ignore cleanup errors
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
94
342
|
},
|
|
95
343
|
async remove(id) {
|
|
96
344
|
if (!confirm('Delete this server?')) return
|
|
97
345
|
await fetch('/api/mcp/' + id, { method: 'DELETE' })
|
|
98
346
|
this.servers = this.servers.filter(s => s._id !== id)
|
|
99
|
-
|
|
347
|
+
await this.fetchCommands()
|
|
348
|
+
},
|
|
349
|
+
autoCheck() {
|
|
350
|
+
// Check all HTTP/SSE servers that aren't already being checked
|
|
351
|
+
this.servers.forEach(server => {
|
|
352
|
+
if (server.url && !server.checking) {
|
|
353
|
+
this.check(server)
|
|
354
|
+
}
|
|
355
|
+
})
|
|
356
|
+
},
|
|
100
357
|
}
|
|
101
358
|
}).mount('#mcp-app')
|
|
102
359
|
</script>
|
|
@@ -98,7 +98,9 @@
|
|
|
98
98
|
<a href="/api/specs" class="btn justify-start" id="nav-specs">OpenAPI Specs</a>
|
|
99
99
|
<a href="/api/mcp" class="btn justify-start" id="nav-mcp">MCP Servers</a>
|
|
100
100
|
<a href="/api/plugins" class="btn justify-start" id="nav-plugins">Server Plugins</a>
|
|
101
|
+
<a href="/api/plugins/clients" class="btn justify-start" id="nav-clients">Clients</a>
|
|
101
102
|
<a href="/api/jobs" class="btn justify-start" id="nav-jobs">Jobs</a>
|
|
103
|
+
<a href="/api/docs" class="btn justify-start" id="nav-docs">Documentation</a>
|
|
102
104
|
</aside>
|
|
103
105
|
<!-- Main content -->
|
|
104
106
|
<main class="flex-1 p-8 bg-[#FBFBFA]">
|
package/server/views/plugins.ejs
CHANGED
|
@@ -34,11 +34,58 @@
|
|
|
34
34
|
<input type="checkbox" v-model="settings.admin_mode_enabled" class="checkbox checkbox-error checkbox-sm" />
|
|
35
35
|
<span class="label-text text-xs text-error font-semibold">Admin Mode (allows CLI modifications)</span>
|
|
36
36
|
</label>
|
|
37
|
+
<label class="label cursor-pointer justify-start gap-2 mb-3">
|
|
38
|
+
<input type="checkbox" v-model="settings.public_access" class="checkbox checkbox-sm" />
|
|
39
|
+
<span class="label-text text-xs">Public Access (allow without API key)</span>
|
|
40
|
+
</label>
|
|
37
41
|
<button class="btn btn-sm btn-primary" @click="saveSettings">Save Settings</button>
|
|
38
42
|
</div>
|
|
39
43
|
</div>
|
|
40
44
|
|
|
41
|
-
<div class="card bg-base-100 border border-base-300
|
|
45
|
+
<div class="card bg-base-100 border border-base-300">
|
|
46
|
+
<div class="card-body p-4">
|
|
47
|
+
<h2 class="card-title text-base">API Keys</h2>
|
|
48
|
+
<div class="form-control mb-3">
|
|
49
|
+
<div class="label">
|
|
50
|
+
<span class="label-text text-xs">Create New API Key</span>
|
|
51
|
+
</div>
|
|
52
|
+
<div class="flex gap-2">
|
|
53
|
+
<input v-model="newKeyName" class="input input-bordered input-sm flex-1" placeholder="Key name (e.g., 'CLI Agent')" />
|
|
54
|
+
<button class="btn btn-sm btn-primary" @click="createApiKey">Create</button>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
<div v-if="settings.api_keys && settings.api_keys.length > 0" class="overflow-x-auto">
|
|
58
|
+
<table class="table table-zebra table-xs">
|
|
59
|
+
<thead>
|
|
60
|
+
<tr>
|
|
61
|
+
<th>Name</th>
|
|
62
|
+
<th>Key</th>
|
|
63
|
+
<th>Created</th>
|
|
64
|
+
<th>Action</th>
|
|
65
|
+
</tr>
|
|
66
|
+
</thead>
|
|
67
|
+
<tbody>
|
|
68
|
+
<tr v-for="apiKey in settings.api_keys" :key="apiKey.key">
|
|
69
|
+
<td>{{ apiKey.name }}</td>
|
|
70
|
+
<td>
|
|
71
|
+
<code class="text-xs">{{ apiKey.key.slice(0, 8) }}...</code>
|
|
72
|
+
<button class="btn btn-xs btn-ghost ml-1" @click="copyApiKey(apiKey.key)">📋</button>
|
|
73
|
+
</td>
|
|
74
|
+
<td class="text-xs">{{ new Date(apiKey.created_at).toLocaleDateString() }}</td>
|
|
75
|
+
<td>
|
|
76
|
+
<button class="btn btn-xs btn-error" @click="deleteApiKey(apiKey.key)">Delete</button>
|
|
77
|
+
</td>
|
|
78
|
+
</tr>
|
|
79
|
+
</tbody>
|
|
80
|
+
</table>
|
|
81
|
+
</div>
|
|
82
|
+
<div v-else class="text-xs opacity-60 text-center py-2">
|
|
83
|
+
No API keys created yet
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
<div class="card bg-base-100 border border-base-300">
|
|
42
89
|
<div class="card-body p-4">
|
|
43
90
|
<h2 class="card-title text-base">Create JSON Plugin</h2>
|
|
44
91
|
<div class="grid grid-cols-2 gap-2 mb-2">
|
|
@@ -154,6 +201,7 @@
|
|
|
154
201
|
archive_file: null,
|
|
155
202
|
manifestStr: '{\n "name": "my-plugin",\n "version": "0.0.0",\n "commands": []\n}',
|
|
156
203
|
},
|
|
204
|
+
newKeyName: '',
|
|
157
205
|
}
|
|
158
206
|
},
|
|
159
207
|
methods: {
|
|
@@ -266,6 +314,38 @@
|
|
|
266
314
|
this.setMessage('error', err.message)
|
|
267
315
|
}
|
|
268
316
|
},
|
|
317
|
+
async createApiKey() {
|
|
318
|
+
if (!this.newKeyName.trim()) {
|
|
319
|
+
this.setMessage('error', 'API key name is required')
|
|
320
|
+
return
|
|
321
|
+
}
|
|
322
|
+
try {
|
|
323
|
+
const result = await this.api('/api/plugins/api-keys', 'POST', { name: this.newKeyName })
|
|
324
|
+
this.setMessage('success', `Created API key '${result.name}'`)
|
|
325
|
+
this.newKeyName = ''
|
|
326
|
+
await this.reloadPlugins()
|
|
327
|
+
} catch (err) {
|
|
328
|
+
this.setMessage('error', err.message)
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
async deleteApiKey(key) {
|
|
332
|
+
if (!confirm('Delete this API key?')) return
|
|
333
|
+
try {
|
|
334
|
+
await this.api(`/api/plugins/api-keys/${encodeURIComponent(key)}`, 'DELETE')
|
|
335
|
+
this.setMessage('success', 'API key deleted')
|
|
336
|
+
await this.reloadPlugins()
|
|
337
|
+
} catch (err) {
|
|
338
|
+
this.setMessage('error', err.message)
|
|
339
|
+
}
|
|
340
|
+
},
|
|
341
|
+
async copyApiKey(key) {
|
|
342
|
+
try {
|
|
343
|
+
await navigator.clipboard.writeText(key)
|
|
344
|
+
this.setMessage('success', 'API key copied to clipboard')
|
|
345
|
+
} catch (err) {
|
|
346
|
+
this.setMessage('error', 'Failed to copy API key')
|
|
347
|
+
}
|
|
348
|
+
},
|
|
269
349
|
},
|
|
270
350
|
}).mount('#plugins-app')
|
|
271
351
|
</script>
|