superacli 1.1.20 → 1.1.21
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/cli/adapter-schema.js +1 -6
- package/cli/config.js +95 -0
- package/cli/executor.js +90 -11
- package/cli/server-command.js +395 -0
- package/cli/supercli.js +82 -1
- package/docs/adapters.md +159 -0
- package/docs/changelog-2026-04.html +15 -0
- package/docs/index.html +314 -98
- package/docs/meta-plugins.json +24424 -1247
- package/docs/plugins-examples.md +8 -8
- package/docs/plugins-how-to.md +0 -13
- package/docs/plugins.html +165 -61
- package/docs/server.md +50 -0
- package/graphify-out/GRAPH_REPORT.md +141 -136
- package/graphify-out/cache/1821936911d6eb3130499b6b45b8e6d760d6c05328131e115ac9825a5e3061cd.json +1 -0
- package/graphify-out/cache/20b0e1261b41286d639e7b039c8143682001981f607e26eb2a492a06f12c233a.json +1 -0
- package/graphify-out/cache/21dc011c08a0813ac33c0520c9cf131d8922e6007df7d9b51df740974fee5fb3.json +1 -0
- package/graphify-out/cache/22d3d43c24fdff310ab8445bd442fbcf4714872c6950f15b90777e5a8358dcd9.json +1 -0
- package/graphify-out/cache/2b8a3fbc23afe7bbc1a5ecb60d4074f39afdf6cb42120922176c280f4cc4ab4b.json +1 -0
- package/graphify-out/cache/37418b8b152d9c436d75361969c39bc74a76260ab7209ceabf455f80452f1654.json +1 -0
- package/graphify-out/cache/3b9aae57e4326f5862f8153c13b7d809a34c422996993e7b491c5ea3a66b5e04.json +1 -0
- package/graphify-out/cache/448f8e0c5e77cfb15fa625ed40ee0dc1622d9814d24905fe4c12c4d175131dc9.json +1 -0
- package/graphify-out/cache/47dd42009ceac28b7a7fec5586e565e7bc850c80be96b8329e1ed7c49efbe34f.json +1 -0
- package/graphify-out/cache/492712949d38efbe312c303fe717e5c93e1ecc8888e1ceb855750afc48caffdb.json +1 -0
- package/graphify-out/cache/494fd6af80b6a1bb7a2a5641c6ad11e2fbe2a67b5a2b3ff57fd04bb49ccad1c4.json +1 -0
- package/graphify-out/cache/4b31b0de656deff083119780df64d17205c45e72233987e1c495f2121c4923fd.json +1 -0
- package/graphify-out/cache/5a16fa8cdd687a39661321adb39186ce8cf924a79ef936e42b365380b5e3543e.json +1 -0
- package/graphify-out/cache/644fcb129e595cfdb4e3a9757ed9658230347f5ed0652be45a894528a2b6585b.json +1 -0
- package/graphify-out/cache/6b8762db2c5f51408cf49d915f3e44bcc25c7ebb32abc635307fdf2a672b370c.json +1 -0
- package/graphify-out/cache/6db88050060880e56dd26ec58f29e3b56a409ace48e31bc75f54cab7dc74e409.json +1 -0
- package/graphify-out/cache/7932d1b6a9751b2cb2f4dc6b4e5f9fd7dcc2cee82d7866ec3d655482010533c0.json +1 -0
- package/graphify-out/cache/8140a76ff5b70dfdd0d020aeffff27f87af39da5b237c35baa938fcc4b288ba5.json +1 -0
- package/graphify-out/cache/8876638878758733a412bd4ca4cbd22863322689fbba9f037d92abfa877ea3ab.json +1 -0
- package/graphify-out/cache/90445359c448f8135207ddcd378c8391b9274460064cf998f1ea2ad6f2173703.json +1 -0
- package/graphify-out/cache/b01f675bb3942d2e8f359d11c38d52f28487544f54cdef518c60b7d8dfd2b383.json +1 -0
- package/graphify-out/cache/bc353b40b348d54c730d8498af675f57998b14ae796b4f952cdc200147008f13.json +1 -0
- package/graphify-out/cache/c38b2e784b1c441121b422db0c79b4911fb525d2a3cfad10d3fd561a07900bd5.json +1 -0
- package/graphify-out/cache/ce9df9bb2d36ecf310a53fb34526168bdf25773edf0826c1f55accebfa3c012d.json +1 -0
- package/graphify-out/cache/ceaeb0f99851d313b29cb1440240db1cf835de425b9b0c1e58fa3035355c2b2b.json +1 -0
- package/graphify-out/cache/d8f3e78931a41cd0f367fdab1d11b634bbffb2c90280c75a80a1a53a6b2d6bc7.json +1 -0
- package/graphify-out/cache/f574e4ce3bcb1250ca88410519fb4fd26c5b6cd786039410880fbd6e606ab23f.json +1 -0
- package/graphify-out/cache/faa65636d5f779b8b1c790dde11cc6470b48125bf42a12a77651827fd1653fd7.json +1 -0
- package/graphify-out/graph.json +4173 -2115
- package/ideal-plugins.csv +124 -0
- package/package.json +3 -2
- package/plugin-scores.csv +999 -0
- package/plugins/beads/plugin.json +2 -2
- package/plugins/biome/install-guidance.json +11 -0
- package/plugins/biome/meta.json +13 -0
- package/plugins/biome/plugin.json +83 -0
- package/plugins/biome/skills/quickstart/SKILL.md +25 -0
- package/plugins/bore/install-guidance.json +11 -0
- package/plugins/bore/meta.json +11 -0
- package/plugins/bore/plugin.json +65 -0
- package/plugins/bore/skills/quickstart/SKILL.md +25 -0
- package/plugins/ccf-deadlines/install-guidance.json +11 -0
- package/plugins/ccf-deadlines/meta.json +11 -0
- package/plugins/ccf-deadlines/plugin.json +28 -0
- package/plugins/ccf-deadlines/skills/quickstart/SKILL.md +25 -0
- package/plugins/code2prompt/install-guidance.json +11 -0
- package/plugins/code2prompt/meta.json +12 -0
- package/plugins/code2prompt/plugin.json +46 -0
- package/plugins/code2prompt/skills/quickstart/SKILL.md +25 -0
- package/plugins/commiat/install-guidance.json +10 -0
- package/plugins/commiat/plugin.json +2 -2
- package/plugins/dua-cli/install-guidance.json +11 -0
- package/plugins/dua-cli/meta.json +11 -0
- package/plugins/dua-cli/plugin.json +57 -0
- package/plugins/dua-cli/skills/quickstart/SKILL.md +25 -0
- package/plugins/forever/install-guidance.json +11 -0
- package/plugins/forever/meta.json +11 -0
- package/plugins/forever/plugin.json +75 -0
- package/plugins/forever/skills/quickstart/SKILL.md +25 -0
- package/plugins/gitmoji-cli/install-guidance.json +11 -0
- package/plugins/gitmoji-cli/meta.json +11 -0
- package/plugins/gitmoji-cli/plugin.json +49 -0
- package/plugins/gitmoji-cli/skills/quickstart/SKILL.md +25 -0
- package/plugins/google-maps-scraper/plugin.json +1 -1
- package/plugins/gwc/install-guidance.json +10 -0
- package/plugins/gwc/plugin.json +2 -2
- package/plugins/quarto/install-guidance.json +11 -0
- package/plugins/quarto/meta.json +11 -0
- package/plugins/quarto/plugin.json +61 -0
- package/plugins/quarto/skills/quickstart/SKILL.md +25 -0
- package/plugins/readme-md-generator/install-guidance.json +11 -0
- package/plugins/readme-md-generator/meta.json +11 -0
- package/plugins/readme-md-generator/plugin.json +28 -0
- package/plugins/readme-md-generator/skills/quickstart/SKILL.md +25 -0
- package/plugins/twarc/install-guidance.json +11 -0
- package/plugins/twarc/meta.json +13 -0
- package/plugins/twarc/plugin.json +165 -0
- package/plugins/twarc/skills/quickstart/SKILL.md +61 -0
- package/plugins/vale/install-guidance.json +11 -0
- package/plugins/vale/meta.json +12 -0
- package/plugins/vale/plugin.json +50 -0
- package/plugins/vale/skills/quickstart/SKILL.md +25 -0
- package/plugins/volta/install-guidance.json +11 -0
- package/plugins/volta/meta.json +12 -0
- package/plugins/volta/plugin.json +75 -0
- package/plugins/volta/skills/quickstart/SKILL.md +25 -0
- package/plugins/wgcf/install-guidance.json +11 -0
- package/plugins/wgcf/meta.json +12 -0
- package/plugins/wgcf/plugin.json +45 -0
- package/plugins/wgcf/skills/quickstart/SKILL.md +25 -0
- package/scripts/analyze-plugins.js +130 -0
- package/scripts/enrich-meta-plugins.js +67 -0
- package/server/app.js +23 -1
- package/server/routes/adapters.js +356 -0
- package/server/routes/dashboard.js +113 -0
- package/server/routes/jobs.js +26 -0
- package/server/services/adaptersService.js +284 -0
- package/server/services/pluginsService.js +4 -0
- package/server/views/adapter-edit.ejs +226 -0
- package/server/views/adapter-packages.ejs +191 -0
- package/server/views/adapters.ejs +112 -0
- package/server/views/command-edit.ejs +48 -21
- package/server/views/commands.ejs +25 -22
- package/server/views/dashboard.ejs +196 -0
- package/server/views/layout.ejs +94 -14
- package/server/views/mcp.ejs +38 -35
- package/server/views/partials/head.ejs +88 -12
- package/server/views/plugins.ejs +9 -0
- package/server/views/specs.ejs +33 -30
- package/cli/adapters/builtin.js +0 -43
- package/index.html +0 -384
package/server/views/layout.ejs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
|
-
<html lang="en"
|
|
2
|
+
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
@@ -8,31 +8,111 @@
|
|
|
8
8
|
<script src="https://cdn.tailwindcss.com"></script>
|
|
9
9
|
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
|
|
10
10
|
<style>
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
@import url('https://fonts.googleapis.com/css2?family=Newsreader:wght@400;500;600&family=Geist:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap');
|
|
12
|
+
|
|
13
|
+
body {
|
|
14
|
+
font-family: 'Geist', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
15
|
+
background-color: #FBFBFA;
|
|
16
|
+
color: #111111;
|
|
17
|
+
line-height: 1.6;
|
|
18
|
+
min-height: 100vh;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.editorial-heading {
|
|
22
|
+
font-family: 'Newsreader', serif;
|
|
23
|
+
font-weight: 500;
|
|
24
|
+
letter-spacing: -0.02em;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.mono-text {
|
|
28
|
+
font-family: 'JetBrains Mono', monospace;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.nav-active {
|
|
32
|
+
background-color: #F7F6F3;
|
|
33
|
+
color: #111111;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.bento-card {
|
|
37
|
+
background: white;
|
|
38
|
+
border: 1px solid #EAEAEA;
|
|
39
|
+
border-radius: 0.5rem;
|
|
40
|
+
transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.bento-card:hover {
|
|
44
|
+
border-color: #111111;
|
|
45
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.btn {
|
|
49
|
+
border: 1px solid #EAEAEA;
|
|
50
|
+
background: white;
|
|
51
|
+
color: #111111;
|
|
52
|
+
padding: 0.5rem 1rem;
|
|
53
|
+
border-radius: 0.375rem;
|
|
54
|
+
font-weight: 500;
|
|
55
|
+
transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.btn:hover {
|
|
59
|
+
border-color: #111111;
|
|
60
|
+
background: #F7F6F3;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.btn-primary {
|
|
64
|
+
background: #111111;
|
|
65
|
+
color: white;
|
|
66
|
+
border-color: #111111;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.btn-primary:hover {
|
|
70
|
+
background: #333333;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.badge {
|
|
74
|
+
display: inline-block;
|
|
75
|
+
padding: 0.25rem 0.5rem;
|
|
76
|
+
font-size: 0.75rem;
|
|
77
|
+
border-radius: 9999px;
|
|
78
|
+
background: #F7F6F3;
|
|
79
|
+
color: #787774;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.badge-outline {
|
|
83
|
+
background: transparent;
|
|
84
|
+
border: 1px solid #EAEAEA;
|
|
85
|
+
}
|
|
13
86
|
</style>
|
|
14
87
|
</head>
|
|
15
|
-
<body
|
|
88
|
+
<body>
|
|
16
89
|
|
|
17
90
|
<div class="flex min-h-screen">
|
|
18
91
|
<!-- Sidebar -->
|
|
19
|
-
<aside class="w-64 bg-
|
|
20
|
-
<a href="/api/commands" class="text-xl
|
|
21
|
-
<span
|
|
92
|
+
<aside class="w-64 bg-white p-6 flex flex-col gap-2 border-r border-[#EAEAEA]">
|
|
93
|
+
<a href="/api/commands" class="text-xl editorial-heading px-3 py-2 mb-6 flex items-center gap-2">
|
|
94
|
+
<span>⚡</span> SUPERCLI
|
|
22
95
|
</a>
|
|
23
|
-
<a href="/
|
|
24
|
-
|
|
96
|
+
<a href="/" class="btn justify-start">Dashboard</a>
|
|
97
|
+
<a href="/api/commands" class="btn justify-start <%= typeof commands !== 'undefined' ? 'nav-active' : '' %>">
|
|
98
|
+
Commands
|
|
25
99
|
</a>
|
|
26
|
-
<a href="/api/specs" class="btn
|
|
27
|
-
|
|
100
|
+
<a href="/api/specs" class="btn justify-start <%= typeof specs !== 'undefined' ? 'nav-active' : '' %>">
|
|
101
|
+
OpenAPI Specs
|
|
28
102
|
</a>
|
|
29
|
-
<a href="/api/mcp" class="btn
|
|
30
|
-
|
|
103
|
+
<a href="/api/mcp" class="btn justify-start <%= typeof servers !== 'undefined' ? 'nav-active' : '' %>">
|
|
104
|
+
MCP Servers
|
|
105
|
+
</a>
|
|
106
|
+
<a href="/api/jobs" class="btn justify-start <%= typeof jobs !== 'undefined' ? 'nav-active' : '' %>">
|
|
107
|
+
Jobs
|
|
108
|
+
</a>
|
|
109
|
+
<a href="/api/plugins" class="btn justify-start <%= typeof plugins !== 'undefined' ? 'nav-active' : '' %>">
|
|
110
|
+
Plugins
|
|
31
111
|
</a>
|
|
32
112
|
</aside>
|
|
33
113
|
|
|
34
114
|
<!-- Main content -->
|
|
35
|
-
<main class="flex-1 p-8">
|
|
115
|
+
<main class="flex-1 p-8 bg-[#FBFBFA]">
|
|
36
116
|
<%- body %>
|
|
37
117
|
</main>
|
|
38
118
|
</div>
|
package/server/views/mcp.ejs
CHANGED
|
@@ -1,60 +1,63 @@
|
|
|
1
1
|
<%- include("partials/head", { title: "MCP Servers" }) %>
|
|
2
2
|
|
|
3
3
|
<div id="mcp-app">
|
|
4
|
-
<div class="flex justify-between items-center mb-
|
|
5
|
-
<
|
|
6
|
-
|
|
4
|
+
<div class="flex justify-between items-center mb-8">
|
|
5
|
+
<div>
|
|
6
|
+
<p class="text-xs uppercase tracking-[0.2em] text-[#787774] mb-1">Management</p>
|
|
7
|
+
<h1 class="text-2xl editorial-heading text-[#111111]">MCP Servers</h1>
|
|
8
|
+
</div>
|
|
9
|
+
<button @click="showForm=!showForm" class="btn btn-primary">+ Add Server</button>
|
|
7
10
|
</div>
|
|
8
11
|
|
|
9
12
|
<!-- Add form -->
|
|
10
|
-
<div v-if="showForm" class="card
|
|
13
|
+
<div v-if="showForm" class="bento-card p-6 mb-6">
|
|
11
14
|
<form @submit.prevent="create">
|
|
12
|
-
<div class="flex gap-4 items-end mb-
|
|
13
|
-
<div class="
|
|
14
|
-
<label class="
|
|
15
|
-
<input v-model="form.name" class="
|
|
15
|
+
<div class="flex flex-col md:flex-row gap-4 items-end mb-4">
|
|
16
|
+
<div class="flex-1 w-full">
|
|
17
|
+
<label class="block text-xs font-semibold text-[#787774] uppercase tracking-wider mb-2">Name</label>
|
|
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">
|
|
16
19
|
</div>
|
|
17
|
-
<div class="
|
|
18
|
-
<label class="
|
|
19
|
-
<input v-model="form.url" class="
|
|
20
|
+
<div class="flex-1 w-full">
|
|
21
|
+
<label class="block text-xs font-semibold text-[#787774] uppercase tracking-wider mb-2">URL (HTTP MCP)</label>
|
|
22
|
+
<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">
|
|
20
23
|
</div>
|
|
21
|
-
<div class="
|
|
22
|
-
<label class="
|
|
23
|
-
<input v-model="form.command" class="
|
|
24
|
+
<div class="flex-1 w-full">
|
|
25
|
+
<label class="block text-xs font-semibold text-[#787774] uppercase tracking-wider mb-2">Command (stdio MCP)</label>
|
|
26
|
+
<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">
|
|
24
27
|
</div>
|
|
25
28
|
</div>
|
|
26
29
|
<div class="flex gap-4 items-center">
|
|
27
|
-
<label class="
|
|
28
|
-
<input type="checkbox" v-model="form.stateful" class="
|
|
29
|
-
<span class="
|
|
30
|
+
<label class="flex items-center gap-2 cursor-pointer">
|
|
31
|
+
<input type="checkbox" v-model="form.stateful" class="w-4 h-4 accent-[#111111]">
|
|
32
|
+
<span class="text-sm text-[#2F3437]">Stateful (requires daemon)</span>
|
|
30
33
|
</label>
|
|
31
|
-
<button type="submit" class="btn btn-primary
|
|
32
|
-
<button type="button" @click="showForm=false" class="btn
|
|
34
|
+
<button type="submit" class="btn btn-primary">Save</button>
|
|
35
|
+
<button type="button" @click="showForm=false" class="btn">Cancel</button>
|
|
33
36
|
</div>
|
|
34
37
|
</form>
|
|
35
38
|
</div>
|
|
36
39
|
|
|
37
|
-
<div class="overflow-
|
|
38
|
-
<table class="
|
|
40
|
+
<div class="bento-card overflow-hidden">
|
|
41
|
+
<table class="w-full">
|
|
39
42
|
<thead>
|
|
40
|
-
<tr>
|
|
41
|
-
<th>Name</th>
|
|
42
|
-
<th>Source</th>
|
|
43
|
-
<th>Type</th>
|
|
44
|
-
<th>Actions</th>
|
|
43
|
+
<tr class="border-b border-[#EAEAEA] bg-[#F7F6F3]">
|
|
44
|
+
<th class="px-6 py-3 text-left text-xs font-semibold text-[#787774] uppercase tracking-wider">Name</th>
|
|
45
|
+
<th class="px-6 py-3 text-left text-xs font-semibold text-[#787774] uppercase tracking-wider">Source</th>
|
|
46
|
+
<th class="px-6 py-3 text-left text-xs font-semibold text-[#787774] uppercase tracking-wider">Type</th>
|
|
47
|
+
<th class="px-6 py-3 text-left text-xs font-semibold text-[#787774] uppercase tracking-wider">Actions</th>
|
|
45
48
|
</tr>
|
|
46
49
|
</thead>
|
|
47
50
|
<tbody>
|
|
48
|
-
<tr v-if="servers.length===0"><td colspan="4" class="text-center
|
|
49
|
-
<tr v-for="s in servers" :key="s._id">
|
|
50
|
-
<td><code>{{ s.name }}</code></td>
|
|
51
|
-
<td class="max-w-xs truncate
|
|
52
|
-
<td>
|
|
53
|
-
<span v-if="s.stateful" class="badge
|
|
54
|
-
<span v-else class="badge
|
|
51
|
+
<tr v-if="servers.length===0"><td colspan="4" class="px-6 py-12 text-center text-[#787774]">No MCP servers registered.</td></tr>
|
|
52
|
+
<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"><code class="mono-text text-sm text-[#1F6C9F]">{{ s.name }}</code></td>
|
|
54
|
+
<td class="px-6 py-4 max-w-xs truncate text-[#2F3437]">{{ s.url || s.command || '' }}</td>
|
|
55
|
+
<td class="px-6 py-4">
|
|
56
|
+
<span v-if="s.stateful" class="badge bg-[#111111] text-white">stateful</span>
|
|
57
|
+
<span v-else class="badge">{{ s.url ? 'http' : 'stdio' }}</span>
|
|
55
58
|
</td>
|
|
56
|
-
<td>
|
|
57
|
-
<button @click="remove(s._id)" class="btn
|
|
59
|
+
<td class="px-6 py-4">
|
|
60
|
+
<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>
|
|
58
61
|
</td>
|
|
59
62
|
</tr>
|
|
60
63
|
</tbody>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
|
-
<html lang="en"
|
|
2
|
+
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
@@ -8,21 +8,97 @@
|
|
|
8
8
|
<script src="https://cdn.tailwindcss.com"></script>
|
|
9
9
|
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
|
|
10
10
|
<style>
|
|
11
|
-
|
|
11
|
+
@import url('https://fonts.googleapis.com/css2?family=Newsreader:wght@400;500;600&family=Geist:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap');
|
|
12
|
+
|
|
13
|
+
body {
|
|
14
|
+
font-family: 'Geist', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
15
|
+
background-color: #FBFBFA;
|
|
16
|
+
color: #111111;
|
|
17
|
+
line-height: 1.6;
|
|
18
|
+
min-height: 100vh;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.editorial-heading {
|
|
22
|
+
font-family: 'Newsreader', serif;
|
|
23
|
+
font-weight: 500;
|
|
24
|
+
letter-spacing: -0.02em;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.mono-text {
|
|
28
|
+
font-family: 'JetBrains Mono', monospace;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.nav-active {
|
|
32
|
+
background-color: #F7F6F3;
|
|
33
|
+
color: #111111;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.bento-card {
|
|
37
|
+
background: white;
|
|
38
|
+
border: 1px solid #EAEAEA;
|
|
39
|
+
border-radius: 0.5rem;
|
|
40
|
+
transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.bento-card:hover {
|
|
44
|
+
border-color: #111111;
|
|
45
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.btn {
|
|
49
|
+
border: 1px solid #EAEAEA;
|
|
50
|
+
background: white;
|
|
51
|
+
color: #111111;
|
|
52
|
+
padding: 0.5rem 1rem;
|
|
53
|
+
border-radius: 0.375rem;
|
|
54
|
+
font-weight: 500;
|
|
55
|
+
transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.btn:hover {
|
|
59
|
+
border-color: #111111;
|
|
60
|
+
background: #F7F6F3;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.btn-primary {
|
|
64
|
+
background: #111111;
|
|
65
|
+
color: white;
|
|
66
|
+
border-color: #111111;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.btn-primary:hover {
|
|
70
|
+
background: #333333;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.badge {
|
|
74
|
+
display: inline-block;
|
|
75
|
+
padding: 0.25rem 0.5rem;
|
|
76
|
+
font-size: 0.75rem;
|
|
77
|
+
border-radius: 9999px;
|
|
78
|
+
background: #F7F6F3;
|
|
79
|
+
color: #787774;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.badge-outline {
|
|
83
|
+
background: transparent;
|
|
84
|
+
border: 1px solid #EAEAEA;
|
|
85
|
+
}
|
|
12
86
|
</style>
|
|
13
87
|
</head>
|
|
14
|
-
<body
|
|
88
|
+
<body>
|
|
15
89
|
<div class="flex min-h-screen">
|
|
16
90
|
<!-- Sidebar -->
|
|
17
|
-
<aside class="w-64 bg-
|
|
18
|
-
<a href="/api/commands" class="text-xl
|
|
19
|
-
<span
|
|
91
|
+
<aside class="w-64 bg-white p-6 flex flex-col gap-2 border-r border-[#EAEAEA]">
|
|
92
|
+
<a href="/api/commands" class="text-xl editorial-heading px-3 py-2 mb-6 flex items-center gap-2">
|
|
93
|
+
<span>⚡</span> SUPERCLI
|
|
20
94
|
</a>
|
|
21
|
-
<a href="/
|
|
22
|
-
<a href="/api/
|
|
23
|
-
<a href="/api/
|
|
24
|
-
<a href="/api/
|
|
25
|
-
<a href="/api/
|
|
95
|
+
<a href="/" class="btn justify-start" id="nav-dashboard">Dashboard</a>
|
|
96
|
+
<a href="/api/commands" class="btn justify-start" id="nav-commands">Commands</a>
|
|
97
|
+
<a href="/api/adapters" class="btn justify-start" id="nav-adapters">Adapters</a>
|
|
98
|
+
<a href="/api/specs" class="btn justify-start" id="nav-specs">OpenAPI Specs</a>
|
|
99
|
+
<a href="/api/mcp" class="btn justify-start" id="nav-mcp">MCP Servers</a>
|
|
100
|
+
<a href="/api/plugins" class="btn justify-start" id="nav-plugins">Server Plugins</a>
|
|
101
|
+
<a href="/api/jobs" class="btn justify-start" id="nav-jobs">Jobs</a>
|
|
26
102
|
</aside>
|
|
27
103
|
<!-- Main content -->
|
|
28
|
-
<main class="flex-1 p-8">
|
|
104
|
+
<main class="flex-1 p-8 bg-[#FBFBFA]">
|
package/server/views/plugins.ejs
CHANGED
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
<span>{{ message.text }}</span>
|
|
11
11
|
</div>
|
|
12
12
|
|
|
13
|
+
<div v-if="settings.admin_mode_enabled" class="alert alert-error mb-4">
|
|
14
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 shrink-0 stroke-current" fill="none" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" /></svg>
|
|
15
|
+
<span><strong>Admin Mode Enabled:</strong> CLI clients can modify server state without authentication. Disable when not needed.</span>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
13
18
|
<div class="grid grid-cols-1 lg:grid-cols-3 gap-4 mb-6">
|
|
14
19
|
<div class="card bg-base-100 border border-base-300">
|
|
15
20
|
<div class="card-body p-4">
|
|
@@ -25,6 +30,10 @@
|
|
|
25
30
|
<option value="allow">allow</option>
|
|
26
31
|
</select>
|
|
27
32
|
</label>
|
|
33
|
+
<label class="label cursor-pointer justify-start gap-2 mb-3">
|
|
34
|
+
<input type="checkbox" v-model="settings.admin_mode_enabled" class="checkbox checkbox-error checkbox-sm" />
|
|
35
|
+
<span class="label-text text-xs text-error font-semibold">Admin Mode (allows CLI modifications)</span>
|
|
36
|
+
</label>
|
|
28
37
|
<button class="btn btn-sm btn-primary" @click="saveSettings">Save Settings</button>
|
|
29
38
|
</div>
|
|
30
39
|
</div>
|
package/server/views/specs.ejs
CHANGED
|
@@ -1,54 +1,57 @@
|
|
|
1
1
|
<%- include("partials/head", { title: "OpenAPI Specs" }) %>
|
|
2
2
|
|
|
3
3
|
<div id="specs-app">
|
|
4
|
-
<div class="flex justify-between items-center mb-
|
|
5
|
-
<
|
|
6
|
-
|
|
4
|
+
<div class="flex justify-between items-center mb-8">
|
|
5
|
+
<div>
|
|
6
|
+
<p class="text-xs uppercase tracking-[0.2em] text-[#787774] mb-1">Management</p>
|
|
7
|
+
<h1 class="text-2xl editorial-heading text-[#111111]">OpenAPI Specs</h1>
|
|
8
|
+
</div>
|
|
9
|
+
<button @click="showForm=!showForm" class="btn btn-primary">+ Add Spec</button>
|
|
7
10
|
</div>
|
|
8
11
|
|
|
9
12
|
<!-- Add form -->
|
|
10
|
-
<div v-if="showForm" class="card
|
|
11
|
-
<form @submit.prevent="create" class="flex gap-4 items-end">
|
|
12
|
-
<div class="
|
|
13
|
-
<label class="
|
|
14
|
-
<input v-model="form.name" class="
|
|
13
|
+
<div v-if="showForm" class="bento-card p-6 mb-6">
|
|
14
|
+
<form @submit.prevent="create" class="flex flex-col md:flex-row gap-4 items-end">
|
|
15
|
+
<div class="flex-1 w-full">
|
|
16
|
+
<label class="block text-xs font-semibold text-[#787774] uppercase tracking-wider mb-2">Name</label>
|
|
17
|
+
<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. referential-api">
|
|
15
18
|
</div>
|
|
16
|
-
<div class="
|
|
17
|
-
<label class="
|
|
18
|
-
<input v-model="form.url" class="
|
|
19
|
+
<div class="flex-1 w-full">
|
|
20
|
+
<label class="block text-xs font-semibold text-[#787774] uppercase tracking-wider mb-2">URL</label>
|
|
21
|
+
<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" required placeholder="https://api.example.com/openapi.json">
|
|
19
22
|
</div>
|
|
20
|
-
<div class="
|
|
21
|
-
<label class="
|
|
22
|
-
<select v-model="form.auth" class="
|
|
23
|
+
<div class="w-full md:w-32">
|
|
24
|
+
<label class="block text-xs font-semibold text-[#787774] uppercase tracking-wider mb-2">Auth</label>
|
|
25
|
+
<select v-model="form.auth" class="w-full px-4 py-3 bg-[#F7F6F3] border border-[#EAEAEA] rounded-md text-[#111111] focus:outline-none focus:border-[#111111] transition-colors">
|
|
23
26
|
<option value="none">none</option>
|
|
24
27
|
<option value="oauth">oauth</option>
|
|
25
28
|
<option value="apiKey">apiKey</option>
|
|
26
29
|
<option value="jwt">jwt</option>
|
|
27
30
|
</select>
|
|
28
31
|
</div>
|
|
29
|
-
<button type="submit" class="btn btn-primary
|
|
30
|
-
<button type="button" @click="showForm=false" class="btn
|
|
32
|
+
<button type="submit" class="btn btn-primary">Save</button>
|
|
33
|
+
<button type="button" @click="showForm=false" class="btn">Cancel</button>
|
|
31
34
|
</form>
|
|
32
35
|
</div>
|
|
33
36
|
|
|
34
|
-
<div class="overflow-
|
|
35
|
-
<table class="
|
|
37
|
+
<div class="bento-card overflow-hidden">
|
|
38
|
+
<table class="w-full">
|
|
36
39
|
<thead>
|
|
37
|
-
<tr>
|
|
38
|
-
<th>Name</th>
|
|
39
|
-
<th>URL</th>
|
|
40
|
-
<th>Auth</th>
|
|
41
|
-
<th>Actions</th>
|
|
40
|
+
<tr class="border-b border-[#EAEAEA] bg-[#F7F6F3]">
|
|
41
|
+
<th class="px-6 py-3 text-left text-xs font-semibold text-[#787774] uppercase tracking-wider">Name</th>
|
|
42
|
+
<th class="px-6 py-3 text-left text-xs font-semibold text-[#787774] uppercase tracking-wider">URL</th>
|
|
43
|
+
<th class="px-6 py-3 text-left text-xs font-semibold text-[#787774] uppercase tracking-wider">Auth</th>
|
|
44
|
+
<th class="px-6 py-3 text-left text-xs font-semibold text-[#787774] uppercase tracking-wider">Actions</th>
|
|
42
45
|
</tr>
|
|
43
46
|
</thead>
|
|
44
47
|
<tbody>
|
|
45
|
-
<tr v-if="specs.length===0"><td colspan="4" class="text-center
|
|
46
|
-
<tr v-for="s in specs" :key="s._id">
|
|
47
|
-
<td><code>{{ s.name }}</code></td>
|
|
48
|
-
<td class="max-w-xs truncate
|
|
49
|
-
<td
|
|
50
|
-
<td>
|
|
51
|
-
<button @click="remove(s._id)" class="btn
|
|
48
|
+
<tr v-if="specs.length===0"><td colspan="4" class="px-6 py-12 text-center text-[#787774]">No specs registered.</td></tr>
|
|
49
|
+
<tr v-for="s in specs" :key="s._id" class="border-b border-[#EAEAEA] hover:bg-[#F7F6F3] transition-colors">
|
|
50
|
+
<td class="px-6 py-4"><code class="mono-text text-sm text-[#1F6C9F]">{{ s.name }}</code></td>
|
|
51
|
+
<td class="px-6 py-4 max-w-xs truncate text-[#2F3437]">{{ s.url }}</td>
|
|
52
|
+
<td class="px-6 py-4"><span class="badge">{{ s.auth }}</span></td>
|
|
53
|
+
<td class="px-6 py-4">
|
|
54
|
+
<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>
|
|
52
55
|
</td>
|
|
53
56
|
</tr>
|
|
54
57
|
</tbody>
|
package/cli/adapters/builtin.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
function execute(cmd) {
|
|
2
|
-
const cfg = cmd.adapterConfig || {}
|
|
3
|
-
if (cfg.builtin === "beads_install_steps") {
|
|
4
|
-
return {
|
|
5
|
-
plugin: "beads",
|
|
6
|
-
binary: "br",
|
|
7
|
-
install_steps: [
|
|
8
|
-
"curl -fsSL \"https://raw.githubusercontent.com/Dicklesworthstone/beads_rust/main/install.sh?$(date +%s)\" | bash",
|
|
9
|
-
"br --version"
|
|
10
|
-
],
|
|
11
|
-
note: "Install execution is delegated to your LLM automation (dcli/scli/supercli)."
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
if (cfg.builtin === "gwc_install_steps") {
|
|
15
|
-
return {
|
|
16
|
-
plugin: "gwc",
|
|
17
|
-
binary: "gws",
|
|
18
|
-
install_steps: [
|
|
19
|
-
"npm install -g @googleworkspace/cli",
|
|
20
|
-
"gws --version"
|
|
21
|
-
],
|
|
22
|
-
note: "Install execution is delegated to your LLM automation (dcli/scli/supercli)."
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
if (cfg.builtin === "commiat_install_steps") {
|
|
26
|
-
return {
|
|
27
|
-
plugin: "commiat",
|
|
28
|
-
binary: "commiat",
|
|
29
|
-
install_steps: [
|
|
30
|
-
"npm install -g commiat",
|
|
31
|
-
"commiat --version"
|
|
32
|
-
],
|
|
33
|
-
note: "Install execution is delegated to your LLM automation (dcli/scli/supercli)."
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
throw Object.assign(new Error(`Unknown builtin action: ${cfg.builtin || "(missing)"}`), {
|
|
37
|
-
code: 85,
|
|
38
|
-
type: "invalid_argument",
|
|
39
|
-
recoverable: false
|
|
40
|
-
})
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
module.exports = { execute }
|