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/docs/plugins-examples.md
CHANGED
|
@@ -21,8 +21,8 @@ The beads plugin demonstrates selective command wrapping. It exposes key beads_r
|
|
|
21
21
|
"resource": "install",
|
|
22
22
|
"action": "steps",
|
|
23
23
|
"description": "Show beads_rust installation steps for LLM automation",
|
|
24
|
-
"adapter": "
|
|
25
|
-
"adapterConfig": { "
|
|
24
|
+
"adapter": "shell",
|
|
25
|
+
"adapterConfig": { "script": "cat install-guidance.json", "unsafe": true },
|
|
26
26
|
"args": []
|
|
27
27
|
},
|
|
28
28
|
{
|
|
@@ -126,7 +126,7 @@ The beads plugin demonstrates selective command wrapping. It exposes key beads_r
|
|
|
126
126
|
**Key Points**:
|
|
127
127
|
- Uses wrapped commands (selective exposure)
|
|
128
128
|
- JSON parsing for automation
|
|
129
|
-
-
|
|
129
|
+
- Install guidance via isolated install-guidance.json file
|
|
130
130
|
- Clear error messages with help guidance
|
|
131
131
|
- Multiple related commands under same namespace/resource
|
|
132
132
|
|
|
@@ -159,8 +159,8 @@ The Google Workspace CLI plugin demonstrates full passthrough, giving access to
|
|
|
159
159
|
"resource": "install",
|
|
160
160
|
"action": "steps",
|
|
161
161
|
"description": "Show gws installation steps for LLM automation",
|
|
162
|
-
"adapter": "
|
|
163
|
-
"adapterConfig": { "
|
|
162
|
+
"adapter": "shell",
|
|
163
|
+
"adapterConfig": { "script": "cat install-guidance.json", "unsafe": true },
|
|
164
164
|
"args": []
|
|
165
165
|
},
|
|
166
166
|
{
|
|
@@ -186,7 +186,7 @@ The Google Workspace CLI plugin demonstrates full passthrough, giving access to
|
|
|
186
186
|
- Single `_` wildcard command captures all gws functionality
|
|
187
187
|
- Longer timeout for complex operations
|
|
188
188
|
- Passthrough mode passes all arguments directly
|
|
189
|
-
-
|
|
189
|
+
- Install guidance via isolated install-guidance.json file
|
|
190
190
|
- Minimal manifest for maximum CLI access
|
|
191
191
|
|
|
192
192
|
**Usage Examples**:
|
|
@@ -220,8 +220,8 @@ A minimal passthrough plugin for commit automation.
|
|
|
220
220
|
"resource": "install",
|
|
221
221
|
"action": "steps",
|
|
222
222
|
"description": "Show commiat installation steps for LLM automation",
|
|
223
|
-
"adapter": "
|
|
224
|
-
"adapterConfig": { "
|
|
223
|
+
"adapter": "shell",
|
|
224
|
+
"adapterConfig": { "script": "cat install-guidance.json", "unsafe": true },
|
|
225
225
|
"args": []
|
|
226
226
|
},
|
|
227
227
|
{
|
package/docs/plugins-how-to.md
CHANGED
|
@@ -261,19 +261,6 @@ The most common adapter. Executes an external CLI binary.
|
|
|
261
261
|
| `timeout_ms` | number | Execution timeout in milliseconds |
|
|
262
262
|
| `missingDependencyHelp` | string | Message if binary not found |
|
|
263
263
|
|
|
264
|
-
### builtin Adapter
|
|
265
|
-
|
|
266
|
-
For dcli-specific functionality (e.g., showing installation steps).
|
|
267
|
-
|
|
268
|
-
```json
|
|
269
|
-
{
|
|
270
|
-
"adapter": "builtin",
|
|
271
|
-
"adapterConfig": {
|
|
272
|
-
"builtin": "beads_install_steps" // Builtin handler key
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
```
|
|
276
|
-
|
|
277
264
|
## Argument Mapping
|
|
278
265
|
|
|
279
266
|
### Positional Arguments
|
package/docs/plugins.html
CHANGED
|
@@ -30,39 +30,101 @@
|
|
|
30
30
|
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600&family=Inter:wght@400;500;600&display=swap" rel="stylesheet" />
|
|
31
31
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/daisyui@4.7.2/dist/full.min.css" />
|
|
32
32
|
<style>
|
|
33
|
+
@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');
|
|
34
|
+
|
|
33
35
|
body {
|
|
34
|
-
font-family: '
|
|
35
|
-
background-color: #
|
|
36
|
-
color: #
|
|
36
|
+
font-family: 'Geist', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
37
|
+
background-color: #FBFBFA;
|
|
38
|
+
color: #111111;
|
|
39
|
+
line-height: 1.6;
|
|
37
40
|
}
|
|
38
41
|
.sidebar-link {
|
|
39
|
-
transition:
|
|
42
|
+
transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
|
|
43
|
+
}
|
|
44
|
+
.editorial-heading {
|
|
45
|
+
font-family: 'Newsreader', serif;
|
|
46
|
+
letter-spacing: -0.03em;
|
|
47
|
+
line-height: 1.1;
|
|
48
|
+
}
|
|
49
|
+
.mono-text {
|
|
50
|
+
font-family: 'JetBrains Mono', monospace;
|
|
51
|
+
}
|
|
52
|
+
.bento-card {
|
|
53
|
+
border: 1px solid #EAEAEA;
|
|
54
|
+
border-radius: 12px;
|
|
55
|
+
background: #FFFFFF;
|
|
56
|
+
transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
|
|
57
|
+
}
|
|
58
|
+
.bento-card:hover {
|
|
59
|
+
box-shadow: 0 2px 8px rgba(0,0,0,0.04);
|
|
40
60
|
}
|
|
41
61
|
.tag {
|
|
42
|
-
|
|
62
|
+
background: #EDF3EC;
|
|
63
|
+
color: #346538;
|
|
64
|
+
border-radius: 9999px;
|
|
65
|
+
font-size: 0.75rem;
|
|
66
|
+
letter-spacing: 0.05em;
|
|
67
|
+
text-transform: uppercase;
|
|
68
|
+
transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
|
|
69
|
+
}
|
|
70
|
+
.tag.active {
|
|
71
|
+
background: #111111;
|
|
72
|
+
color: #FFFFFF;
|
|
73
|
+
}
|
|
74
|
+
.scroll-top-btn {
|
|
75
|
+
position: fixed;
|
|
76
|
+
bottom: 2rem;
|
|
77
|
+
right: 2rem;
|
|
78
|
+
width: 3rem;
|
|
79
|
+
height: 3rem;
|
|
80
|
+
background: #111111;
|
|
81
|
+
color: #FFFFFF;
|
|
82
|
+
border: 1px solid #EAEAEA;
|
|
83
|
+
border-radius: 50%;
|
|
84
|
+
display: flex;
|
|
85
|
+
align-items: center;
|
|
86
|
+
justify-content: center;
|
|
87
|
+
cursor: pointer;
|
|
88
|
+
opacity: 0;
|
|
89
|
+
visibility: hidden;
|
|
90
|
+
transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
|
|
91
|
+
z-index: 50;
|
|
92
|
+
}
|
|
93
|
+
.scroll-top-btn.visible {
|
|
94
|
+
opacity: 1;
|
|
95
|
+
visibility: visible;
|
|
96
|
+
}
|
|
97
|
+
.scroll-top-btn:hover {
|
|
98
|
+
background: #333333;
|
|
99
|
+
transform: scale(1.05);
|
|
43
100
|
}
|
|
44
101
|
</style>
|
|
45
102
|
</head>
|
|
46
|
-
<body class="bg-
|
|
103
|
+
<body class="bg-[#FBFBFA]">
|
|
47
104
|
<div class="flex min-h-screen">
|
|
48
|
-
<aside id="sidebar" class="w-72 flex-shrink-0 border-r border-
|
|
49
|
-
<div class="p-
|
|
105
|
+
<aside id="sidebar" class="w-72 flex-shrink-0 border-r border-[#EAEAEA] bg-white hidden lg:block">
|
|
106
|
+
<div class="p-8 space-y-10">
|
|
50
107
|
<div>
|
|
51
|
-
<p class="text-xs uppercase tracking-[0.
|
|
52
|
-
<h1 class="text-2xl font-
|
|
53
|
-
<p class="text-sm text-
|
|
108
|
+
<p class="text-xs uppercase tracking-[0.2em] text-[#787774]">Documentation</p>
|
|
109
|
+
<h1 class="text-2xl font-semibold mt-3 text-[#111111]">supercli</h1>
|
|
110
|
+
<p class="text-sm text-[#787774] mt-1">Plugin Directory</p>
|
|
54
111
|
</div>
|
|
55
|
-
<nav class="space-y-
|
|
112
|
+
<nav class="space-y-6">
|
|
56
113
|
<div>
|
|
57
|
-
<p class="text-xs uppercase tracking-widest text-
|
|
58
|
-
<ul class="space-y-
|
|
59
|
-
<li><a class="sidebar-link block
|
|
60
|
-
<li><a class="sidebar-link block
|
|
114
|
+
<p class="text-xs uppercase tracking-widest text-[#787774] mb-3">Navigation</p>
|
|
115
|
+
<ul class="space-y-1 text-sm">
|
|
116
|
+
<li><a class="sidebar-link block px-3 py-2 text-[#111111] hover:bg-[#F7F6F3] rounded-md" href="index.html">Documentation Home</a></li>
|
|
117
|
+
<li><a class="sidebar-link block px-3 py-2 bg-[#F7F6F3] text-[#111111] rounded-md" href="plugins.html">Plugin Directory</a></li>
|
|
61
118
|
</ul>
|
|
62
119
|
</div>
|
|
63
120
|
<div>
|
|
64
|
-
<p class="text-xs uppercase tracking-widest text-
|
|
65
|
-
<div id="
|
|
121
|
+
<p class="text-xs uppercase tracking-widest text-[#787774] mb-3">Popular Tags</p>
|
|
122
|
+
<div id="sidebarPopularTags" class="flex flex-wrap gap-2">
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
<div>
|
|
126
|
+
<p class="text-xs uppercase tracking-widest text-[#787774] mb-3">All Tags</p>
|
|
127
|
+
<div id="sidebarAllTags" class="flex flex-wrap gap-2 max-h-96 overflow-y-auto">
|
|
66
128
|
</div>
|
|
67
129
|
</div>
|
|
68
130
|
</nav>
|
|
@@ -70,32 +132,32 @@
|
|
|
70
132
|
</aside>
|
|
71
133
|
|
|
72
134
|
<div class="flex-1 flex flex-col">
|
|
73
|
-
<header class="border-b border-
|
|
74
|
-
<button id="mobileToggle" class="lg:hidden
|
|
135
|
+
<header class="border-b border-[#EAEAEA] px-8 py-6 flex items-center justify-between bg-white">
|
|
136
|
+
<button id="mobileToggle" class="lg:hidden px-4 py-2 text-sm border border-[#EAEAEA] rounded-md" type="button">Menu</button>
|
|
75
137
|
<div>
|
|
76
|
-
<p class="text-xs uppercase tracking-[0.
|
|
77
|
-
<h1 class="text-2xl font-
|
|
138
|
+
<p class="text-xs uppercase tracking-[0.2em] text-[#787774]">Plugins</p>
|
|
139
|
+
<h1 class="text-2xl font-semibold text-[#111111]">Plugin Directory</h1>
|
|
78
140
|
</div>
|
|
79
141
|
</header>
|
|
80
142
|
|
|
81
|
-
<main class="flex-1 overflow-y-auto">
|
|
82
|
-
<section class="border-b border-
|
|
143
|
+
<main class="flex-1 overflow-y-auto bg-[#FBFBFA]">
|
|
144
|
+
<section class="border-b border-[#EAEAEA] bg-white px-8 py-12">
|
|
83
145
|
<div class="max-w-6xl">
|
|
84
|
-
<div class="flex flex-col
|
|
85
|
-
<div class="
|
|
86
|
-
<input id="searchInput" type="text" placeholder="Search plugins by name or description..." class="w-full
|
|
146
|
+
<div class="flex flex-col gap-4">
|
|
147
|
+
<div class="w-full">
|
|
148
|
+
<input id="searchInput" type="text" placeholder="Search plugins by name or description..." class="w-full px-8 py-8 bg-[#F7F6F3] border border-[#EAEAEA] rounded-xl text-[#111111] placeholder:text-[#787774] focus:outline-none focus:border-[#111111] transition-colors text-2xl" />
|
|
87
149
|
</div>
|
|
88
150
|
<div class="flex flex-wrap gap-2" id="tagFilters">
|
|
89
151
|
</div>
|
|
90
152
|
</div>
|
|
91
|
-
<p class="text-sm text-
|
|
153
|
+
<p class="text-sm text-[#787774] mt-3"><span id="pluginCount">0</span> plugins</p>
|
|
92
154
|
</div>
|
|
93
155
|
</section>
|
|
94
156
|
|
|
95
|
-
<div class="max-w-6xl px-
|
|
157
|
+
<div class="max-w-6xl px-8 py-12">
|
|
96
158
|
<div id="pluginGrid" class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4">
|
|
97
159
|
</div>
|
|
98
|
-
<div id="noResults" class="hidden text-center py-12 text-
|
|
160
|
+
<div id="noResults" class="hidden text-center py-12 text-[#787774]">
|
|
99
161
|
<p class="text-xl">No plugins found</p>
|
|
100
162
|
<p class="text-sm mt-2">Try adjusting your search or filters</p>
|
|
101
163
|
</div>
|
|
@@ -104,21 +166,27 @@
|
|
|
104
166
|
</div>
|
|
105
167
|
</div>
|
|
106
168
|
|
|
107
|
-
<div id="mobileDrawer" class="fixed inset-0 bg-black/
|
|
108
|
-
<div class="w-72 bg-
|
|
109
|
-
<div class="flex items-center justify-between mb-
|
|
110
|
-
<h2 class="text-
|
|
111
|
-
<button id="drawerClose" class="
|
|
169
|
+
<div id="mobileDrawer" class="fixed inset-0 bg-black/40 hidden z-40 lg:hidden">
|
|
170
|
+
<div class="w-72 bg-white h-full border-r border-[#EAEAEA] p-8 overflow-y-auto">
|
|
171
|
+
<div class="flex items-center justify-between mb-8">
|
|
172
|
+
<h2 class="text-[#111111] text-xl font-semibold">Navigate</h2>
|
|
173
|
+
<button id="drawerClose" class="text-[#787774] text-sm">Close</button>
|
|
112
174
|
</div>
|
|
113
175
|
<div id="drawerNav" class="space-y-6 text-sm">
|
|
114
|
-
<ul class="space-y-
|
|
115
|
-
<li><a class="sidebar-link block
|
|
116
|
-
<li><a class="sidebar-link block
|
|
176
|
+
<ul class="space-y-1">
|
|
177
|
+
<li><a class="sidebar-link block px-3 py-2 text-[#111111] hover:bg-[#F7F6F3] rounded-md" href="index.html">Documentation Home</a></li>
|
|
178
|
+
<li><a class="sidebar-link block px-3 py-2 bg-[#F7F6F3] text-[#111111] rounded-md" href="plugins.html">Plugin Directory</a></li>
|
|
117
179
|
</ul>
|
|
118
180
|
</div>
|
|
119
181
|
</div>
|
|
120
182
|
</div>
|
|
121
183
|
|
|
184
|
+
<button id="scrollTopBtn" class="scroll-top-btn" aria-label="Scroll to top">
|
|
185
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
186
|
+
<path d="M12 19V5M5 12l7-7 7 7"/>
|
|
187
|
+
</svg>
|
|
188
|
+
</button>
|
|
189
|
+
|
|
122
190
|
<script>
|
|
123
191
|
let allPlugins = [];
|
|
124
192
|
let activeTags = new Set();
|
|
@@ -143,26 +211,35 @@
|
|
|
143
211
|
});
|
|
144
212
|
});
|
|
145
213
|
return Object.entries(tags)
|
|
146
|
-
.sort((a, b) => b[1] - a[1])
|
|
147
|
-
.slice(0, 20)
|
|
148
|
-
.map(([tag]) => tag);
|
|
214
|
+
.sort((a, b) => b[1] - a[1]);
|
|
149
215
|
}
|
|
150
216
|
|
|
151
217
|
function renderTagFilters() {
|
|
152
|
-
const
|
|
218
|
+
const tagsWithCounts = getAllTags();
|
|
219
|
+
const popularTags = tagsWithCounts.slice(0, 20).map(([tag]) => tag);
|
|
220
|
+
const allTags = tagsWithCounts.map(([tag]) => tag);
|
|
221
|
+
|
|
153
222
|
const container = document.getElementById('tagFilters');
|
|
154
|
-
const
|
|
223
|
+
const sidebarPopularTags = document.getElementById('sidebarPopularTags');
|
|
224
|
+
const sidebarAllTags = document.getElementById('sidebarAllTags');
|
|
155
225
|
|
|
156
|
-
container.innerHTML =
|
|
157
|
-
<button class="tag
|
|
158
|
-
data-tag="${tag}" onclick="toggleTag('${tag}')">
|
|
226
|
+
container.innerHTML = popularTags.map(tag => `
|
|
227
|
+
<button class="tag px-3 py-1 ${activeTags.has(tag) ? 'active' : ''}"
|
|
228
|
+
data-tag="${tag}" onclick="toggleTag('${tag}')" title="Filter by tag: ${tag}">
|
|
159
229
|
${tag}
|
|
160
230
|
</button>
|
|
161
231
|
`).join('');
|
|
162
232
|
|
|
163
|
-
|
|
164
|
-
<button class="tag
|
|
165
|
-
data-tag="${tag}" onclick="toggleTag('${tag}')">
|
|
233
|
+
sidebarPopularTags.innerHTML = popularTags.map(tag => `
|
|
234
|
+
<button class="tag px-3 py-1 ${activeTags.has(tag) ? 'active' : ''}"
|
|
235
|
+
data-tag="${tag}" onclick="toggleTag('${tag}')" title="Filter by tag: ${tag}">
|
|
236
|
+
${tag}
|
|
237
|
+
</button>
|
|
238
|
+
`).join('');
|
|
239
|
+
|
|
240
|
+
sidebarAllTags.innerHTML = allTags.map(tag => `
|
|
241
|
+
<button class="tag px-3 py-1 ${activeTags.has(tag) ? 'active' : ''}"
|
|
242
|
+
data-tag="${tag}" onclick="toggleTag('${tag}')" title="Filter by tag: ${tag}">
|
|
166
243
|
${tag}
|
|
167
244
|
</button>
|
|
168
245
|
`).join('');
|
|
@@ -198,12 +275,13 @@
|
|
|
198
275
|
|
|
199
276
|
const grid = document.getElementById('pluginGrid');
|
|
200
277
|
grid.innerHTML = filtered.map(p => `
|
|
201
|
-
<div class="
|
|
202
|
-
<div class="flex items-start justify-between mb-
|
|
203
|
-
<h3 class="text-lg font-
|
|
278
|
+
<div class="bento-card p-6">
|
|
279
|
+
<div class="flex items-start justify-between mb-4">
|
|
280
|
+
<h3 class="text-lg font-semibold text-[#111111]">${p.name}</h3>
|
|
204
281
|
<div class="flex items-center gap-2">
|
|
205
|
-
${p.
|
|
206
|
-
<
|
|
282
|
+
${p.score ? `<span class="px-2 py-0.5 bg-[#EDF3EC] text-[#346538] rounded-full text-xs font-semibold" title="Plugin quality score (out of 12)">${p.score.value}/12</span>` : ''}
|
|
283
|
+
${p.has_learn ? '<span class="tag px-2 py-0.5 text-[10px]" title="Has quickstart skill guide">learn</span>' : ''}
|
|
284
|
+
<button class="copy-btn p-2 text-[#787774] hover:text-[#111111] transition-colors"
|
|
207
285
|
data-cmd="supercli plugins install ${p.name}"
|
|
208
286
|
onclick="copyCmd(this)"
|
|
209
287
|
title="Copy install command">
|
|
@@ -213,10 +291,18 @@
|
|
|
213
291
|
</button>
|
|
214
292
|
</div>
|
|
215
293
|
</div>
|
|
216
|
-
<p class="text-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
<
|
|
294
|
+
<p class="text-[#2F3437] text-sm mb-4 line-clamp-2">${p.description}</p>
|
|
295
|
+
${p.score ? `
|
|
296
|
+
<div class="flex flex-wrap gap-2 mb-4 text-xs">
|
|
297
|
+
<span class="px-2 py-1 rounded bg-[#F7F6F3] text-[#787774]" title="Programming language">${p.score.language}</span>
|
|
298
|
+
<span class="px-2 py-1 rounded bg-[#F7F6F3] text-[#787774]" title="Installation complexity">${p.score.complexity}</span>
|
|
299
|
+
${p.score.json_support ? '<span class="px-2 py-1 rounded bg-[#E1F3FE] text-[#1F6C9F]" title="Supports JSON input/output">json</span>' : ''}
|
|
300
|
+
${p.score.no_interactive ? '<span class="px-2 py-1 rounded bg-[#EDF3EC] text-[#346538]" title="No interactive prompts">no-interactive</span>' : ''}
|
|
301
|
+
</div>
|
|
302
|
+
` : ''}
|
|
303
|
+
<div class="bg-[#F7F6F3] border border-[#EAEAEA] rounded-md px-3 py-2 mb-4 flex items-center justify-between">
|
|
304
|
+
<code class="text-xs mono-text text-[#1F6C9F]">supercli plugins install ${p.name}</code>
|
|
305
|
+
<button class="copy-btn p-1 text-[#787774] hover:text-[#111111] transition-colors"
|
|
220
306
|
data-cmd="supercli plugins install ${p.name}"
|
|
221
307
|
onclick="copyCmd(this)"
|
|
222
308
|
title="Copy install command">
|
|
@@ -227,7 +313,7 @@
|
|
|
227
313
|
</div>
|
|
228
314
|
<div class="flex flex-wrap gap-1">
|
|
229
315
|
${p.tags.slice(0, 5).map(t => `
|
|
230
|
-
<span class="text-xs px-2 py-1 rounded-full bg-
|
|
316
|
+
<span class="text-xs px-2 py-1 rounded-full bg-[#F7F6F3] text-[#787774]" title="Tag: ${t}">${t}</span>
|
|
231
317
|
`).join('')}
|
|
232
318
|
</div>
|
|
233
319
|
</div>
|
|
@@ -239,8 +325,8 @@
|
|
|
239
325
|
try {
|
|
240
326
|
await navigator.clipboard.writeText(cmd);
|
|
241
327
|
const svg = btn.querySelector('svg');
|
|
242
|
-
svg.classList.add('text-
|
|
243
|
-
setTimeout(() => svg.classList.remove('text-
|
|
328
|
+
svg.classList.add('text-[#346538]');
|
|
329
|
+
setTimeout(() => svg.classList.remove('text-[#346538]'), 1000);
|
|
244
330
|
} catch {
|
|
245
331
|
console.error('Copy failed');
|
|
246
332
|
}
|
|
@@ -259,6 +345,24 @@
|
|
|
259
345
|
if (e.target === mobileDrawer) mobileDrawer.classList.add('hidden');
|
|
260
346
|
});
|
|
261
347
|
|
|
348
|
+
// Scroll to top button
|
|
349
|
+
const scrollTopBtn = document.getElementById('scrollTopBtn');
|
|
350
|
+
|
|
351
|
+
window.addEventListener('scroll', () => {
|
|
352
|
+
if (window.scrollY > 300) {
|
|
353
|
+
scrollTopBtn.classList.add('visible');
|
|
354
|
+
} else {
|
|
355
|
+
scrollTopBtn.classList.remove('visible');
|
|
356
|
+
}
|
|
357
|
+
});
|
|
358
|
+
|
|
359
|
+
scrollTopBtn.addEventListener('click', () => {
|
|
360
|
+
window.scrollTo({
|
|
361
|
+
top: 0,
|
|
362
|
+
behavior: 'smooth'
|
|
363
|
+
});
|
|
364
|
+
});
|
|
365
|
+
|
|
262
366
|
loadPlugins();
|
|
263
367
|
</script>
|
|
264
368
|
</body>
|
package/docs/server.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Server
|
|
2
|
+
|
|
3
|
+
The supercli server provides a web UI for managing custom commands, OpenAPI specs, MCP servers, plugins, and viewing execution history.
|
|
4
|
+
|
|
5
|
+
## Commands
|
|
6
|
+
|
|
7
|
+
Create and manage custom commands through the server UI at `/commands`. Commands are indexed as `namespace.resource.action` and sync to the CLI via `sc sync`.
|
|
8
|
+
|
|
9
|
+
### Shell Adapter
|
|
10
|
+
|
|
11
|
+
The shell adapter executes bash scripts with argument interpolation. Use `{{variable}}` syntax to reference command arguments:
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{
|
|
15
|
+
"script": "echo 'Hello {{name}}'",
|
|
16
|
+
"timeout_ms": 5000,
|
|
17
|
+
"unsafe": true
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Arguments defined in the command schema are interpolated before execution. For example, with an argument named `name`:
|
|
22
|
+
|
|
23
|
+
- Command: `sc system test foo --name Pedro`
|
|
24
|
+
- Interpolated script: `echo 'Hello Pedro'`
|
|
25
|
+
|
|
26
|
+
**Important:** Shell adapter requires `adapterConfig.unsafe=true` for security policy reasons.
|
|
27
|
+
|
|
28
|
+
### Other Adapters
|
|
29
|
+
|
|
30
|
+
- **http**: Raw HTTP requests with customizable method, headers, and body
|
|
31
|
+
- **openapi**: Auto-generates commands from OpenAPI specifications
|
|
32
|
+
- **mcp**: Exposes MCP server tools as commands
|
|
33
|
+
- **process**: Spawns external processes with arguments
|
|
34
|
+
- **custom**: User-defined JavaScript functions
|
|
35
|
+
|
|
36
|
+
## OpenAPI
|
|
37
|
+
|
|
38
|
+
Manage OpenAPI specifications at `/specs`. Upload OpenAPI/Swagger JSON or YAML files to auto-generate command definitions for all endpoints.
|
|
39
|
+
|
|
40
|
+
## MCP
|
|
41
|
+
|
|
42
|
+
Manage Model Context Protocol server connections at `/mcp`. Connect to MCP servers via SSE or stdio to expose their tools as supercli commands.
|
|
43
|
+
|
|
44
|
+
## Plugins
|
|
45
|
+
|
|
46
|
+
Manage server plugins at `/plugins`. Upload plugin ZIP files, enable/disable plugins, and view plugin manifests. Server plugins extend CLI capabilities with custom commands and harnesses.
|
|
47
|
+
|
|
48
|
+
## Jobs
|
|
49
|
+
|
|
50
|
+
View command execution history at `/jobs`. Tracks all command executions with timestamps, duration, status, and output for debugging and observability.
|