@dupecom/botcha-cloudflare 0.21.0 → 0.23.0
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/README.md +74 -9
- package/dist/agent-auth.d.ts +129 -0
- package/dist/agent-auth.d.ts.map +1 -0
- package/dist/agent-auth.js +210 -0
- package/dist/agents.d.ts +10 -0
- package/dist/agents.d.ts.map +1 -1
- package/dist/agents.js +51 -1
- package/dist/app-gate.d.ts +6 -0
- package/dist/app-gate.d.ts.map +1 -0
- package/dist/app-gate.js +69 -0
- package/dist/apps.d.ts +9 -0
- package/dist/apps.d.ts.map +1 -1
- package/dist/apps.js +26 -0
- package/dist/dashboard/account.d.ts +63 -0
- package/dist/dashboard/account.d.ts.map +1 -0
- package/dist/dashboard/account.js +488 -0
- package/dist/dashboard/api.js +15 -68
- package/dist/dashboard/auth.d.ts.map +1 -1
- package/dist/dashboard/auth.js +14 -14
- package/dist/dashboard/docs.d.ts.map +1 -1
- package/dist/dashboard/docs.js +146 -3
- package/dist/dashboard/layout.d.ts.map +1 -1
- package/dist/dashboard/layout.js +2 -2
- package/dist/dashboard/mcp-setup.d.ts +15 -0
- package/dist/dashboard/mcp-setup.d.ts.map +1 -0
- package/dist/dashboard/mcp-setup.js +391 -0
- package/dist/dashboard/showcase.d.ts +6 -10
- package/dist/dashboard/showcase.d.ts.map +1 -1
- package/dist/dashboard/showcase.js +67 -991
- package/dist/dashboard/whitepaper.d.ts.map +1 -1
- package/dist/dashboard/whitepaper.js +42 -4
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +452 -52
- package/dist/mcp.d.ts +20 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +1290 -0
- package/dist/oauth-agent.d.ts +130 -0
- package/dist/oauth-agent.d.ts.map +1 -0
- package/dist/oauth-agent.js +194 -0
- package/dist/static.d.ts +732 -1
- package/dist/static.d.ts.map +1 -1
- package/dist/static.js +646 -2
- package/dist/tap-a2a-routes.d.ts +355 -0
- package/dist/tap-a2a-routes.d.ts.map +1 -0
- package/dist/tap-a2a-routes.js +475 -0
- package/dist/tap-a2a.d.ts +199 -0
- package/dist/tap-a2a.d.ts.map +1 -0
- package/dist/tap-a2a.js +502 -0
- package/dist/tap-agents.d.ts +15 -0
- package/dist/tap-agents.d.ts.map +1 -1
- package/dist/tap-agents.js +31 -1
- package/dist/tap-ans-routes.d.ts +302 -0
- package/dist/tap-ans-routes.d.ts.map +1 -0
- package/dist/tap-ans-routes.js +535 -0
- package/dist/tap-ans.d.ts +241 -0
- package/dist/tap-ans.d.ts.map +1 -0
- package/dist/tap-ans.js +481 -0
- package/dist/tap-delegation-routes.d.ts.map +1 -1
- package/dist/tap-delegation-routes.js +11 -0
- package/dist/tap-did.d.ts +140 -0
- package/dist/tap-did.d.ts.map +1 -0
- package/dist/tap-did.js +262 -0
- package/dist/tap-oidca-routes.d.ts +383 -0
- package/dist/tap-oidca-routes.d.ts.map +1 -0
- package/dist/tap-oidca-routes.js +597 -0
- package/dist/tap-oidca.d.ts +288 -0
- package/dist/tap-oidca.d.ts.map +1 -0
- package/dist/tap-oidca.js +461 -0
- package/dist/tap-routes.d.ts +24 -8
- package/dist/tap-routes.d.ts.map +1 -1
- package/dist/tap-routes.js +169 -23
- package/dist/tap-vc-routes.d.ts +358 -0
- package/dist/tap-vc-routes.d.ts.map +1 -0
- package/dist/tap-vc-routes.js +367 -0
- package/dist/tap-vc.d.ts +125 -0
- package/dist/tap-vc.d.ts.map +1 -0
- package/dist/tap-vc.js +245 -0
- package/dist/tap-x402-routes.d.ts +89 -0
- package/dist/tap-x402-routes.d.ts.map +1 -0
- package/dist/tap-x402-routes.js +579 -0
- package/dist/tap-x402.d.ts +222 -0
- package/dist/tap-x402.d.ts.map +1 -0
- package/dist/tap-x402.js +546 -0
- package/dist/webhooks.d.ts +99 -0
- package/dist/webhooks.d.ts.map +1 -0
- package/dist/webhooks.js +642 -0
- package/package.json +3 -1
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "hono/jsx/jsx-runtime";
|
|
2
|
+
import { DASHBOARD_CSS } from './styles';
|
|
3
|
+
import { GlobalFooter, OGMeta } from './layout';
|
|
4
|
+
// ============ CSS ============
|
|
5
|
+
const MCP_CSS = `
|
|
6
|
+
.mcp-page {
|
|
7
|
+
max-width: 860px;
|
|
8
|
+
margin: 0 auto;
|
|
9
|
+
padding: 3rem 2rem 4rem;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/* ---- Header ---- */
|
|
13
|
+
.mcp-header {
|
|
14
|
+
text-align: center;
|
|
15
|
+
margin-bottom: 3rem;
|
|
16
|
+
padding-bottom: 2rem;
|
|
17
|
+
border-bottom: 1px solid var(--border);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.mcp-badge {
|
|
21
|
+
display: inline-block;
|
|
22
|
+
font-size: 0.625rem;
|
|
23
|
+
font-weight: 700;
|
|
24
|
+
letter-spacing: 0.15em;
|
|
25
|
+
text-transform: uppercase;
|
|
26
|
+
padding: 0.3rem 0.875rem;
|
|
27
|
+
border: 1px solid var(--border);
|
|
28
|
+
color: var(--text-muted);
|
|
29
|
+
margin-bottom: 1.5rem;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.mcp-title {
|
|
33
|
+
font-size: 2rem;
|
|
34
|
+
font-weight: 700;
|
|
35
|
+
line-height: 1.15;
|
|
36
|
+
margin: 0 0 0.75rem;
|
|
37
|
+
color: var(--text);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.mcp-subtitle {
|
|
41
|
+
font-size: 0.875rem;
|
|
42
|
+
color: var(--text-muted);
|
|
43
|
+
line-height: 1.6;
|
|
44
|
+
margin: 0 auto 1.5rem;
|
|
45
|
+
max-width: 560px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* ---- One-liner hero ---- */
|
|
49
|
+
.mcp-oneliner {
|
|
50
|
+
margin: 0 auto 2.5rem;
|
|
51
|
+
max-width: 680px;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.mcp-oneliner-label {
|
|
55
|
+
font-size: 0.6875rem;
|
|
56
|
+
font-weight: 700;
|
|
57
|
+
letter-spacing: 0.1em;
|
|
58
|
+
text-transform: uppercase;
|
|
59
|
+
color: var(--text-muted);
|
|
60
|
+
margin-bottom: 0.5rem;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.mcp-oneliner-box {
|
|
64
|
+
display: flex;
|
|
65
|
+
align-items: center;
|
|
66
|
+
gap: 0;
|
|
67
|
+
border: 1px solid var(--accent);
|
|
68
|
+
background: var(--bg-raised);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.mcp-oneliner-code {
|
|
72
|
+
flex: 1;
|
|
73
|
+
padding: 0.875rem 1rem;
|
|
74
|
+
font-family: var(--font);
|
|
75
|
+
font-size: 0.875rem;
|
|
76
|
+
color: var(--green);
|
|
77
|
+
overflow-x: auto;
|
|
78
|
+
white-space: nowrap;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.mcp-copy-btn {
|
|
82
|
+
padding: 0.875rem 1rem;
|
|
83
|
+
border: none;
|
|
84
|
+
border-left: 1px solid var(--accent);
|
|
85
|
+
background: var(--accent);
|
|
86
|
+
color: #fff;
|
|
87
|
+
font-family: var(--font);
|
|
88
|
+
font-size: 0.6875rem;
|
|
89
|
+
font-weight: 700;
|
|
90
|
+
letter-spacing: 0.08em;
|
|
91
|
+
text-transform: uppercase;
|
|
92
|
+
cursor: pointer;
|
|
93
|
+
white-space: nowrap;
|
|
94
|
+
transition: opacity 0.1s;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.mcp-copy-btn:hover { opacity: 0.75; }
|
|
98
|
+
.mcp-copy-btn.copied { background: var(--green); border-color: var(--green); }
|
|
99
|
+
|
|
100
|
+
/* ---- Tool tabs ---- */
|
|
101
|
+
.mcp-tabs {
|
|
102
|
+
display: flex;
|
|
103
|
+
flex-wrap: wrap;
|
|
104
|
+
gap: 0;
|
|
105
|
+
border: 1px solid var(--border);
|
|
106
|
+
border-bottom: none;
|
|
107
|
+
margin-bottom: 0;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.mcp-tab {
|
|
111
|
+
padding: 0.625rem 1rem;
|
|
112
|
+
font-family: var(--font);
|
|
113
|
+
font-size: 0.6875rem;
|
|
114
|
+
font-weight: 700;
|
|
115
|
+
letter-spacing: 0.08em;
|
|
116
|
+
text-transform: uppercase;
|
|
117
|
+
cursor: pointer;
|
|
118
|
+
border: none;
|
|
119
|
+
border-right: 1px solid var(--border);
|
|
120
|
+
border-bottom: 1px solid var(--border);
|
|
121
|
+
background: var(--bg-raised);
|
|
122
|
+
color: var(--text-muted);
|
|
123
|
+
transition: background 0.1s, color 0.1s;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.mcp-tab:last-child { border-right: none; }
|
|
127
|
+
|
|
128
|
+
.mcp-tab.active {
|
|
129
|
+
background: var(--bg);
|
|
130
|
+
color: var(--text);
|
|
131
|
+
border-bottom-color: var(--bg);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.mcp-tab:hover:not(.active) {
|
|
135
|
+
color: var(--text);
|
|
136
|
+
background: var(--bg);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* ---- Tool panels ---- */
|
|
140
|
+
.mcp-panels {
|
|
141
|
+
border: 1px solid var(--border);
|
|
142
|
+
margin-bottom: 2.5rem;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.mcp-panel {
|
|
146
|
+
display: none;
|
|
147
|
+
padding: 1.5rem;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.mcp-panel.active { display: block; }
|
|
151
|
+
|
|
152
|
+
.mcp-panel-title {
|
|
153
|
+
font-size: 0.75rem;
|
|
154
|
+
font-weight: 700;
|
|
155
|
+
letter-spacing: 0.06em;
|
|
156
|
+
text-transform: uppercase;
|
|
157
|
+
color: var(--text-muted);
|
|
158
|
+
margin-bottom: 0.5rem;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.mcp-panel-desc {
|
|
162
|
+
font-size: 0.8125rem;
|
|
163
|
+
color: var(--text-muted);
|
|
164
|
+
line-height: 1.6;
|
|
165
|
+
margin-bottom: 1.25rem;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.mcp-panel-desc a {
|
|
169
|
+
color: var(--text-muted);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.mcp-snippet-wrap {
|
|
173
|
+
position: relative;
|
|
174
|
+
margin-bottom: 1rem;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.mcp-snippet-label {
|
|
178
|
+
font-size: 0.625rem;
|
|
179
|
+
font-weight: 700;
|
|
180
|
+
letter-spacing: 0.1em;
|
|
181
|
+
text-transform: uppercase;
|
|
182
|
+
color: var(--text-dim);
|
|
183
|
+
margin-bottom: 0.375rem;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.mcp-snippet {
|
|
187
|
+
background: var(--bg-raised);
|
|
188
|
+
border: 1px solid var(--border);
|
|
189
|
+
padding: 1rem 1.25rem;
|
|
190
|
+
font-size: 0.8125rem;
|
|
191
|
+
color: var(--text);
|
|
192
|
+
white-space: pre;
|
|
193
|
+
overflow-x: auto;
|
|
194
|
+
line-height: 1.5;
|
|
195
|
+
font-family: var(--font);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.mcp-snippet-footer {
|
|
199
|
+
display: flex;
|
|
200
|
+
justify-content: flex-end;
|
|
201
|
+
margin-top: 0.5rem;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.mcp-snippet-copy {
|
|
205
|
+
padding: 0.3rem 0.75rem;
|
|
206
|
+
border: 1px solid var(--border);
|
|
207
|
+
background: var(--bg);
|
|
208
|
+
color: var(--text-muted);
|
|
209
|
+
font-family: var(--font);
|
|
210
|
+
font-size: 0.625rem;
|
|
211
|
+
font-weight: 700;
|
|
212
|
+
letter-spacing: 0.08em;
|
|
213
|
+
text-transform: uppercase;
|
|
214
|
+
cursor: pointer;
|
|
215
|
+
transition: border-color 0.1s, color 0.1s;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.mcp-snippet-copy:hover { border-color: var(--accent); color: var(--text); }
|
|
219
|
+
.mcp-snippet-copy.copied { border-color: var(--green); color: var(--green); }
|
|
220
|
+
|
|
221
|
+
.mcp-config-path {
|
|
222
|
+
font-size: 0.6875rem;
|
|
223
|
+
color: var(--text-dim);
|
|
224
|
+
margin-top: 0.375rem;
|
|
225
|
+
margin-bottom: 1rem;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.mcp-config-path code {
|
|
229
|
+
color: var(--text-muted);
|
|
230
|
+
font-size: 0.6875rem;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/* ---- Info strip ---- */
|
|
234
|
+
.mcp-info {
|
|
235
|
+
border: 1px solid var(--border);
|
|
236
|
+
padding: 1.25rem 1.5rem;
|
|
237
|
+
margin-bottom: 2rem;
|
|
238
|
+
display: grid;
|
|
239
|
+
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
240
|
+
gap: 1rem;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.mcp-info-item {}
|
|
244
|
+
|
|
245
|
+
.mcp-info-label {
|
|
246
|
+
font-size: 0.625rem;
|
|
247
|
+
font-weight: 700;
|
|
248
|
+
letter-spacing: 0.1em;
|
|
249
|
+
text-transform: uppercase;
|
|
250
|
+
color: var(--text-dim);
|
|
251
|
+
margin-bottom: 0.25rem;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.mcp-info-value {
|
|
255
|
+
font-size: 0.8125rem;
|
|
256
|
+
color: var(--text);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
.mcp-info-value a { color: var(--text); }
|
|
260
|
+
|
|
261
|
+
/* ---- Tools table ---- */
|
|
262
|
+
.mcp-tools-title {
|
|
263
|
+
font-size: 0.75rem;
|
|
264
|
+
font-weight: 700;
|
|
265
|
+
letter-spacing: 0.1em;
|
|
266
|
+
text-transform: uppercase;
|
|
267
|
+
color: var(--text-muted);
|
|
268
|
+
margin-bottom: 0.75rem;
|
|
269
|
+
margin-top: 2rem;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
.mcp-tools-grid {
|
|
273
|
+
display: grid;
|
|
274
|
+
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
|
|
275
|
+
gap: 0.5rem;
|
|
276
|
+
margin-bottom: 2rem;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.mcp-tool-card {
|
|
280
|
+
border: 1px solid var(--border);
|
|
281
|
+
padding: 0.875rem 1rem;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.mcp-tool-name {
|
|
285
|
+
font-size: 0.75rem;
|
|
286
|
+
font-weight: 700;
|
|
287
|
+
color: var(--text);
|
|
288
|
+
margin-bottom: 0.25rem;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
.mcp-tool-name code {
|
|
292
|
+
font-size: 0.6875rem;
|
|
293
|
+
color: var(--green);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
.mcp-tool-desc {
|
|
297
|
+
font-size: 0.75rem;
|
|
298
|
+
color: var(--text-muted);
|
|
299
|
+
line-height: 1.5;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
@media (max-width: 600px) {
|
|
303
|
+
.mcp-title { font-size: 1.5rem; }
|
|
304
|
+
.mcp-oneliner-code { font-size: 0.75rem; }
|
|
305
|
+
.mcp-tab { padding: 0.5rem 0.625rem; font-size: 0.5625rem; }
|
|
306
|
+
}
|
|
307
|
+
`;
|
|
308
|
+
// ============ SNIPPET CONTENT ============
|
|
309
|
+
const SNIPPETS = {
|
|
310
|
+
claudeCode: {
|
|
311
|
+
cli: `claude mcp add --transport http botcha https://botcha.ai/mcp`,
|
|
312
|
+
json: `{
|
|
313
|
+
"mcpServers": {
|
|
314
|
+
"botcha": {
|
|
315
|
+
"type": "http",
|
|
316
|
+
"url": "https://botcha.ai/mcp"
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}`,
|
|
320
|
+
},
|
|
321
|
+
claudeDesktop: `{
|
|
322
|
+
"mcpServers": {
|
|
323
|
+
"botcha": {
|
|
324
|
+
"type": "http",
|
|
325
|
+
"url": "https://botcha.ai/mcp"
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}`,
|
|
329
|
+
opencode: `{
|
|
330
|
+
"$schema": "https://opencode.ai/config.json",
|
|
331
|
+
"mcp": {
|
|
332
|
+
"botcha": {
|
|
333
|
+
"type": "remote",
|
|
334
|
+
"url": "https://botcha.ai/mcp",
|
|
335
|
+
"enabled": true
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}`,
|
|
339
|
+
cursor: `{
|
|
340
|
+
"mcpServers": {
|
|
341
|
+
"botcha": {
|
|
342
|
+
"url": "https://botcha.ai/mcp"
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}`,
|
|
346
|
+
windsurf: `{
|
|
347
|
+
"mcpServers": {
|
|
348
|
+
"botcha": {
|
|
349
|
+
"serverUrl": "https://botcha.ai/mcp"
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}`,
|
|
353
|
+
generic: `{
|
|
354
|
+
"mcpServers": {
|
|
355
|
+
"botcha": {
|
|
356
|
+
"type": "http",
|
|
357
|
+
"url": "https://botcha.ai/mcp"
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}`,
|
|
361
|
+
};
|
|
362
|
+
// ============ COMPONENT ============
|
|
363
|
+
export const MCPSetupPage = ({ version = '0.22.0' }) => {
|
|
364
|
+
return (_jsxs("html", { lang: "en", children: [_jsxs("head", { children: [_jsx("meta", { charset: "UTF-8" }), _jsx("meta", { name: "viewport", content: "width=device-width, initial-scale=1.0" }), _jsx("title", { children: "BOTCHA MCP Server \u2014 Add to Your AI Agent" }), _jsx(OGMeta, { title: "BOTCHA MCP Server", description: "Add BOTCHA to Claude Code, Claude Desktop, OpenCode, Cursor, or Windsurf in one command. Read-only documentation server \u2014 no auth required.", url: "https://botcha.ai/mcp" }), _jsx("style", { dangerouslySetInnerHTML: { __html: DASHBOARD_CSS + MCP_CSS } })] }), _jsxs("body", { children: [_jsxs("main", { class: "mcp-page", children: [_jsxs("header", { class: "mcp-header", children: [_jsx("div", { class: "mcp-badge", children: "MCP Server" }), _jsx("h1", { class: "mcp-title", children: "Add BOTCHA to your agent" }), _jsxs("p", { class: "mcp-subtitle", children: ["BOTCHA exposes its full API reference as an", ' ', _jsx("a", { href: "https://modelcontextprotocol.io/specification/2025-03-26", target: "_blank", rel: "noopener", children: "MCP (2025-03-26)" }), ' ', "server. Ask it anything about BOTCHA features, endpoints, or get code examples. No authentication required."] })] }), _jsxs("div", { class: "mcp-oneliner", children: [_jsx("div", { class: "mcp-oneliner-label", children: "Fastest way \u2014 Claude Code CLI" }), _jsxs("div", { class: "mcp-oneliner-box", children: [_jsx("div", { class: "mcp-oneliner-code", id: "oneliner-text", children: SNIPPETS.claudeCode.cli }), _jsx("button", { class: "mcp-copy-btn", id: "oneliner-copy", onclick: "copyText('oneliner-text', 'oneliner-copy')", children: "Copy" })] })] }), _jsxs("div", { class: "mcp-info", children: [_jsxs("div", { class: "mcp-info-item", children: [_jsx("div", { class: "mcp-info-label", children: "Endpoint" }), _jsx("div", { class: "mcp-info-value", children: _jsx("a", { href: "/mcp", children: "https://botcha.ai/mcp" }) })] }), _jsxs("div", { class: "mcp-info-item", children: [_jsx("div", { class: "mcp-info-label", children: "Transport" }), _jsx("div", { class: "mcp-info-value", children: "Streamable HTTP" })] }), _jsxs("div", { class: "mcp-info-item", children: [_jsx("div", { class: "mcp-info-label", children: "Auth" }), _jsx("div", { class: "mcp-info-value", children: "None \u2014 read-only docs server" })] }), _jsxs("div", { class: "mcp-info-item", children: [_jsx("div", { class: "mcp-info-label", children: "Discovery" }), _jsx("div", { class: "mcp-info-value", children: _jsx("a", { href: "/.well-known/mcp.json", children: "/.well-known/mcp.json" }) })] })] }), _jsxs("div", { class: "mcp-tabs", id: "mcp-tabs", role: "tablist", children: [_jsx("button", { class: "mcp-tab active", onclick: "switchTab('claude-code')", role: "tab", children: "Claude Code" }), _jsx("button", { class: "mcp-tab", onclick: "switchTab('claude-desktop')", role: "tab", children: "Claude Desktop" }), _jsx("button", { class: "mcp-tab", onclick: "switchTab('opencode')", role: "tab", children: "OpenCode" }), _jsx("button", { class: "mcp-tab", onclick: "switchTab('cursor')", role: "tab", children: "Cursor" }), _jsx("button", { class: "mcp-tab", onclick: "switchTab('windsurf')", role: "tab", children: "Windsurf" }), _jsx("button", { class: "mcp-tab", onclick: "switchTab('generic')", role: "tab", children: ".mcp.json" })] }), _jsxs("div", { class: "mcp-panels", children: [_jsxs("div", { class: "mcp-panel active", id: "panel-claude-code", children: [_jsx("div", { class: "mcp-panel-title", children: "Claude Code" }), _jsxs("p", { class: "mcp-panel-desc", children: ["Run this command once \u2014 it adds BOTCHA to your user-scoped MCP config (", _jsx("code", { children: "~/.claude.json" }), "). Available across all your projects."] }), _jsx("div", { class: "mcp-snippet-label", children: "Terminal" }), _jsx("div", { class: "mcp-snippet", id: "cc-cli", children: SNIPPETS.claudeCode.cli }), _jsx("div", { class: "mcp-snippet-footer", children: _jsx("button", { class: "mcp-snippet-copy", onclick: "copyText('cc-cli', this)", children: "Copy" }) }), _jsxs("p", { class: "mcp-panel-desc", style: "margin-top: 1.25rem;", children: ["Or share with your team by checking a ", _jsx("code", { children: ".mcp.json" }), " file into your project root:"] }), _jsx("div", { class: "mcp-snippet-label", children: ".mcp.json (project root)" }), _jsx("div", { class: "mcp-snippet", id: "cc-json", children: SNIPPETS.claudeCode.json }), _jsx("div", { class: "mcp-snippet-footer", children: _jsx("button", { class: "mcp-snippet-copy", onclick: "copyText('cc-json', this)", children: "Copy" }) })] }), _jsxs("div", { class: "mcp-panel", id: "panel-claude-desktop", children: [_jsx("div", { class: "mcp-panel-title", children: "Claude Desktop" }), _jsx("p", { class: "mcp-panel-desc", children: "Add to your Claude Desktop config file, then restart the app." }), _jsxs("div", { class: "mcp-config-path", children: ["macOS: ", _jsx("code", { children: "~/Library/Application Support/Claude/claude_desktop_config.json" }), _jsx("br", {}), "Windows: ", _jsx("code", { children: "%APPDATA%\\Claude\\claude_desktop_config.json" })] }), _jsx("div", { class: "mcp-snippet-label", children: "claude_desktop_config.json" }), _jsx("div", { class: "mcp-snippet", id: "cd-json", children: SNIPPETS.claudeDesktop }), _jsx("div", { class: "mcp-snippet-footer", children: _jsx("button", { class: "mcp-snippet-copy", onclick: "copyText('cd-json', this)", children: "Copy" }) })] }), _jsxs("div", { class: "mcp-panel", id: "panel-opencode", children: [_jsx("div", { class: "mcp-panel-title", children: "OpenCode" }), _jsxs("p", { class: "mcp-panel-desc", children: ["Add to your", ' ', _jsx("a", { href: "https://opencode.ai/docs/mcp-servers/", target: "_blank", rel: "noopener", children: "OpenCode config" }), ". Global config is at ", _jsx("code", { children: "~/.config/opencode/config.json" }), ", or create ", _jsx("code", { children: "opencode.json" }), " in your project root for per-project config."] }), _jsx("div", { class: "mcp-snippet-label", children: "opencode.json / ~/.config/opencode/config.json" }), _jsx("div", { class: "mcp-snippet", id: "oc-json", children: SNIPPETS.opencode }), _jsx("div", { class: "mcp-snippet-footer", children: _jsx("button", { class: "mcp-snippet-copy", onclick: "copyText('oc-json', this)", children: "Copy" }) })] }), _jsxs("div", { class: "mcp-panel", id: "panel-cursor", children: [_jsx("div", { class: "mcp-panel-title", children: "Cursor" }), _jsxs("p", { class: "mcp-panel-desc", children: ["Add to your Cursor MCP config. Project-level: ", _jsx("code", { children: ".cursor/mcp.json" }), ". Global: ", _jsx("code", { children: "~/.cursor/mcp.json" }), ". Or use ", _jsx("strong", { children: "Cursor Settings \u2192 MCP" }), " to add a remote server."] }), _jsx("div", { class: "mcp-snippet-label", children: ".cursor/mcp.json" }), _jsx("div", { class: "mcp-snippet", id: "cursor-json", children: SNIPPETS.cursor }), _jsx("div", { class: "mcp-snippet-footer", children: _jsx("button", { class: "mcp-snippet-copy", onclick: "copyText('cursor-json', this)", children: "Copy" }) })] }), _jsxs("div", { class: "mcp-panel", id: "panel-windsurf", children: [_jsx("div", { class: "mcp-panel-title", children: "Windsurf (Cascade)" }), _jsxs("p", { class: "mcp-panel-desc", children: ["Add to ", _jsx("code", { children: "~/.codeium/windsurf/mcp_config.json" }), ". Windsurf uses ", _jsx("code", { children: "serverUrl" }), " for remote HTTP MCP servers. You can also add it via ", _jsx("strong", { children: "MCP Marketplace \u2192 Add custom" }), " in the Cascade panel."] }), _jsx("div", { class: "mcp-snippet-label", children: "~/.codeium/windsurf/mcp_config.json" }), _jsx("div", { class: "mcp-snippet", id: "ws-json", children: SNIPPETS.windsurf }), _jsx("div", { class: "mcp-snippet-footer", children: _jsx("button", { class: "mcp-snippet-copy", onclick: "copyText('ws-json', this)", children: "Copy" }) })] }), _jsxs("div", { class: "mcp-panel", id: "panel-generic", children: [_jsx("div", { class: "mcp-panel-title", children: "Generic .mcp.json" }), _jsxs("p", { class: "mcp-panel-desc", children: ["Standard MCP 2025-03-26 config compatible with any Streamable HTTP client. Drop this into your project's ", _jsx("code", { children: ".mcp.json" }), " or your agent's config directory."] }), _jsx("div", { class: "mcp-snippet-label", children: ".mcp.json" }), _jsx("div", { class: "mcp-snippet", id: "gen-json", children: SNIPPETS.generic }), _jsx("div", { class: "mcp-snippet-footer", children: _jsx("button", { class: "mcp-snippet-copy", onclick: "copyText('gen-json', this)", children: "Copy" }) })] })] }), _jsx("div", { class: "mcp-tools-title", children: "Available Tools" }), _jsxs("div", { class: "mcp-tools-grid", children: [_jsxs("div", { class: "mcp-tool-card", children: [_jsx("div", { class: "mcp-tool-name", children: _jsx("code", { children: "list_features" }) }), _jsx("div", { class: "mcp-tool-desc", children: "List all 17 BOTCHA features with category and summary" })] }), _jsxs("div", { class: "mcp-tool-card", children: [_jsx("div", { class: "mcp-tool-name", children: _jsx("code", { children: "get_feature" }) }), _jsx("div", { class: "mcp-tool-desc", children: "Full detail on a feature \u2014 endpoints, spec links, usage notes" })] }), _jsxs("div", { class: "mcp-tool-card", children: [_jsx("div", { class: "mcp-tool-name", children: _jsx("code", { children: "search_docs" }) }), _jsx("div", { class: "mcp-tool-desc", children: "Keyword search across all features and endpoint descriptions" })] }), _jsxs("div", { class: "mcp-tool-card", children: [_jsx("div", { class: "mcp-tool-name", children: _jsx("code", { children: "list_endpoints" }) }), _jsx("div", { class: "mcp-tool-desc", children: "All 25+ API endpoints grouped by category" })] }), _jsxs("div", { class: "mcp-tool-card", children: [_jsx("div", { class: "mcp-tool-name", children: _jsx("code", { children: "get_endpoint" }) }), _jsx("div", { class: "mcp-tool-desc", children: "Auth, params, request/response shape for one endpoint" })] }), _jsxs("div", { class: "mcp-tool-card", children: [_jsx("div", { class: "mcp-tool-name", children: _jsx("code", { children: "get_example" }) }), _jsx("div", { class: "mcp-tool-desc", children: "Code example in TypeScript, Python, or curl" })] })] }), _jsxs("p", { style: "font-size: 0.75rem; color: var(--text-dim); text-align: center;", children: [_jsx("a", { href: "/docs#mcp", children: "Full docs" }), ' · ', _jsx("a", { href: "/.well-known/mcp.json", children: "Discovery JSON" }), ' · ', _jsx("a", { href: "/openapi.json", children: "OpenAPI" }), ' · ', _jsx("a", { href: "/ai.txt", children: "ai.txt" }), ' · ', _jsx("a", { href: "https://github.com/dupe-com/botcha", target: "_blank", rel: "noopener", children: "GitHub" })] })] }), _jsx(GlobalFooter, {}), _jsx("script", { dangerouslySetInnerHTML: { __html: `
|
|
365
|
+
function switchTab(id) {
|
|
366
|
+
document.querySelectorAll('.mcp-tab').forEach(function(t, i) {
|
|
367
|
+
var panels = ['claude-code','claude-desktop','opencode','cursor','windsurf','generic'];
|
|
368
|
+
t.classList.toggle('active', panels[i] === id);
|
|
369
|
+
});
|
|
370
|
+
document.querySelectorAll('.mcp-panel').forEach(function(p) {
|
|
371
|
+
p.classList.toggle('active', p.id === 'panel-' + id);
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
function copyText(sourceId, btn) {
|
|
376
|
+
var el = document.getElementById(sourceId);
|
|
377
|
+
var text = el ? el.textContent : '';
|
|
378
|
+
navigator.clipboard.writeText(text.trim()).then(function() {
|
|
379
|
+
var b = typeof btn === 'string' ? document.getElementById(btn) : btn;
|
|
380
|
+
if (!b) return;
|
|
381
|
+
var orig = b.textContent;
|
|
382
|
+
b.textContent = 'Copied!';
|
|
383
|
+
b.classList.add('copied');
|
|
384
|
+
setTimeout(function() {
|
|
385
|
+
b.textContent = orig;
|
|
386
|
+
b.classList.remove('copied');
|
|
387
|
+
}, 1800);
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
` } })] })] }));
|
|
391
|
+
};
|
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* BOTCHA
|
|
2
|
+
* BOTCHA Homepage
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* where it fits in the agent infrastructure stack, and lets visitors
|
|
6
|
-
* solve a live challenge.
|
|
4
|
+
* Served at GET / for HTML (browser) requests.
|
|
7
5
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* 3. Terminal Demo — animated CLI walkthrough
|
|
12
|
-
* 4. Live Demo — interactive challenge solver
|
|
6
|
+
* Deliberately minimal — this site is for agents.
|
|
7
|
+
* Humans should point their agent at botcha.ai; the agent
|
|
8
|
+
* auto-discovers everything via ai.txt, OpenAPI, and MCP.
|
|
13
9
|
*/
|
|
14
10
|
import type { FC } from 'hono/jsx';
|
|
15
|
-
export declare const SHOWCASE_CSS = "\n /* ============ Showcase layout ============ */\n .showcase-page {\n max-width: 100%;\n overflow-x: hidden;\n }\n\n .showcase-divider {\n max-width: 800px;\n margin: 0 auto;\n border: none;\n border-top: 1px solid var(--border);\n }\n\n /* ============ Section 1: TAP Announcement Hero ============ */\n .showcase-tap-hero {\n max-width: 800px;\n margin: 0 auto;\n padding: 4rem 2rem 3rem;\n text-align: center;\n }\n\n .showcase-tap-hero-badge {\n display: inline-block;\n font-size: 0.625rem;\n font-weight: 700;\n letter-spacing: 0.15em;\n text-transform: uppercase;\n padding: 0.3rem 0.875rem;\n background: var(--green);\n color: #fff;\n margin-bottom: 1.5rem;\n }\n\n .showcase-tap-hero-title {\n font-size: 2.5rem;\n font-weight: 700;\n line-height: 1.1;\n margin: 0 0 1.25rem;\n color: var(--text);\n }\n\n .showcase-tap-links {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-wrap: wrap;\n gap: 0.375rem;\n margin-bottom: 1.5rem;\n }\n\n .showcase-tap-link {\n font-size: 0.6875rem;\n color: var(--text-muted);\n text-decoration: underline;\n text-underline-offset: 3px;\n transition: color 0.15s;\n }\n\n .showcase-tap-link:hover {\n color: var(--green);\n opacity: 1;\n }\n\n .showcase-tap-links-sep {\n color: var(--text-dim);\n font-size: 0.625rem;\n }\n\n .showcase-tap-hero-subtitle {\n font-size: 0.9375rem;\n line-height: 1.7;\n color: var(--text-muted);\n max-width: 600px;\n margin: 0 auto 2.5rem;\n }\n\n .showcase-tap-hero-features {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 1.5rem;\n text-align: left;\n }\n\n .showcase-tap-feature {\n padding: 1.25rem;\n border: 1px solid var(--border);\n background: var(--bg);\n }\n\n .showcase-tap-feature-title {\n font-size: 0.8125rem;\n font-weight: 700;\n margin-bottom: 0.5rem;\n color: var(--text);\n }\n\n .showcase-tap-feature-desc {\n font-size: 0.75rem;\n line-height: 1.6;\n color: var(--text-muted);\n }\n\n /* ============ CAPTCHA vs BOTCHA Comparison ============ */\n .showcase-hero {\n max-width: 1100px;\n margin: 0 auto;\n padding: 4rem 2rem 2rem;\n }\n\n .showcase-hero-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 2rem;\n margin-bottom: 3rem;\n }\n\n .showcase-hero-column {\n border: 2px solid var(--border);\n padding: 2rem;\n background: var(--bg);\n }\n\n .showcase-hero-column.old-world {\n border-color: var(--red);\n }\n\n .showcase-hero-column.new-world {\n border-color: var(--green);\n }\n\n .showcase-hero-label {\n font-size: 0.6875rem;\n font-weight: 700;\n letter-spacing: 0.15em;\n text-transform: uppercase;\n margin-bottom: 0.75rem;\n color: var(--text-dim);\n }\n\n .showcase-hero-title {\n font-size: 2rem;\n font-weight: 700;\n margin-bottom: 1.25rem;\n line-height: 1;\n }\n\n .showcase-hero-title.strikethrough {\n text-decoration: line-through;\n color: var(--red);\n }\n\n .showcase-hero-title.active {\n color: var(--green);\n }\n\n .showcase-hero-visual {\n font-family: var(--font);\n font-size: 0.6875rem;\n line-height: 1.3;\n margin: 1.25rem 0;\n padding: 1rem;\n background: #fafafa;\n border: 1px solid var(--border);\n white-space: pre;\n overflow-x: auto;\n }\n\n .showcase-hero-visual.old-world {\n color: var(--red);\n border-color: var(--red);\n background: #fff5f5;\n }\n\n .showcase-hero-visual.new-world {\n color: var(--green);\n border-color: var(--green);\n background: #f5fff7;\n }\n\n .showcase-hero-subtitle {\n font-size: 0.875rem;\n margin-bottom: 1rem;\n line-height: 1.5;\n color: var(--text);\n }\n\n .showcase-hero-features {\n list-style: none;\n padding: 0;\n margin: 0;\n font-size: 0.75rem;\n color: var(--text-muted);\n }\n\n .showcase-hero-features li {\n padding: 0.25rem 0;\n }\n\n .showcase-hero-features li::before {\n content: \"\\2192 \";\n color: var(--text-dim);\n }\n\n .showcase-hero-tagline {\n text-align: center;\n padding: 2rem 2rem 0;\n }\n\n .showcase-hero-tagline-main {\n font-size: 1.5rem;\n font-weight: 700;\n margin-bottom: 0.5rem;\n color: var(--text);\n }\n\n .showcase-hero-tagline-sub {\n font-size: 0.875rem;\n color: var(--text-muted);\n }\n\n /* ============ Section 2: Protocol Stack ============ */\n .showcase-protocol-stack {\n max-width: 800px;\n margin: 0 auto;\n padding: 4rem 2rem;\n }\n\n .showcase-protocol-stack h2 {\n font-size: 1.5rem;\n font-weight: 700;\n margin-bottom: 0.5rem;\n }\n\n .showcase-protocol-stack .subtitle {\n color: var(--text-muted);\n font-size: 0.875rem;\n margin-bottom: 2.5rem;\n }\n\n .showcase-stack-diagram {\n position: relative;\n margin: 0 0 2rem 0;\n }\n\n .showcase-stack-layer {\n border: 2px solid var(--border);\n background: var(--bg);\n padding: 1.25rem 1.5rem;\n position: relative;\n }\n\n .showcase-stack-layer + .showcase-stack-layer {\n margin-top: -2px;\n }\n\n .showcase-stack-layer-highlight {\n border: 3px solid var(--accent);\n background: var(--bg-raised);\n z-index: 1;\n }\n\n .showcase-stack-layer-number {\n font-size: 0.625rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--text-dim);\n margin-bottom: 0.375rem;\n }\n\n .showcase-stack-layer-highlight .showcase-stack-layer-number {\n color: var(--green);\n }\n\n .showcase-stack-layer-title {\n font-size: 1.125rem;\n font-weight: 700;\n margin-bottom: 0.25rem;\n display: flex;\n align-items: center;\n gap: 0.75rem;\n }\n\n .showcase-stack-layer-subtitle {\n font-size: 0.8125rem;\n color: var(--text-muted);\n margin-bottom: 0.375rem;\n }\n\n .showcase-stack-layer-features {\n font-size: 0.75rem;\n color: var(--text-dim);\n }\n\n .showcase-you-are-here {\n display: inline-block;\n background: var(--green);\n color: white;\n font-size: 0.5625rem;\n font-weight: 700;\n padding: 0.2rem 0.5rem;\n letter-spacing: 0.05em;\n }\n\n .showcase-buzzword-badges {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n margin-bottom: 2rem;\n }\n\n .showcase-badge {\n display: inline-block;\n font-size: 0.6875rem;\n padding: 0.3rem 0.625rem;\n border: 1px solid var(--border);\n background: var(--bg);\n color: var(--text-muted);\n white-space: nowrap;\n }\n\n .showcase-protocol-explanation {\n font-size: 0.8125rem;\n line-height: 1.7;\n color: var(--text-muted);\n }\n\n /* ============ Section 3: Terminal Demo ============ */\n .showcase-terminal-section {\n max-width: 1100px;\n margin: 0 auto;\n padding: 4rem 2rem;\n }\n\n .showcase-terminal-header {\n text-align: center;\n margin-bottom: 2.5rem;\n }\n\n .showcase-terminal-title {\n font-size: 1.5rem;\n font-weight: 700;\n margin: 0 0 0.5rem 0;\n color: var(--text);\n }\n\n .showcase-terminal-subtitle {\n font-size: 0.875rem;\n color: var(--text-muted);\n margin: 0;\n line-height: 1.5;\n }\n\n .showcase-terminal-container {\n max-width: 640px;\n margin: 0 auto;\n }\n\n .showcase-terminal-window {\n background: #0d0d0d;\n border: 1px solid var(--border);\n overflow: hidden;\n }\n\n .showcase-terminal-chrome {\n background: #1a1a1a;\n padding: 0.75rem 1rem;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n border-bottom: 1px solid #333;\n }\n\n .showcase-terminal-dot {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n }\n\n .showcase-terminal-dot--red { background: #ff5f56; }\n .showcase-terminal-dot--yellow { background: #ffbd2e; }\n .showcase-terminal-dot--green { background: #27c93f; }\n\n .showcase-terminal-title-text {\n font-size: 0.6875rem;\n color: #888;\n margin-left: 0.5rem;\n }\n\n .showcase-terminal-content {\n padding: 1.5rem;\n font-size: 0.8125rem;\n line-height: 1.6;\n color: #f0f0f0;\n height: 460px;\n overflow-y: hidden;\n font-family: var(--font);\n }\n\n .showcase-terminal-line {\n margin-bottom: 0.375rem;\n white-space: pre-wrap;\n word-break: break-word;\n }\n\n .showcase-terminal-prompt { color: #888; }\n .showcase-terminal-command { color: #f0f0f0; }\n .showcase-terminal-flag { color: #9a9aff; }\n .showcase-terminal-success { color: #4ade80; }\n .showcase-terminal-label { color: #888; }\n .showcase-terminal-value { color: #fff; }\n\n .showcase-terminal-cursor {\n display: inline-block;\n background: #f0f0f0;\n animation: showcase-cursor-blink 1s step-end infinite;\n }\n\n @keyframes showcase-cursor-blink {\n 0%, 50% { opacity: 1; }\n 51%, 100% { opacity: 0; }\n }\n\n .showcase-terminal-replay-container {\n text-align: center;\n margin-top: 1.5rem;\n }\n\n .showcase-terminal-replay-btn {\n background: var(--bg);\n border: 1px solid var(--border);\n padding: 0.5rem 1rem;\n font-family: var(--font);\n font-size: 0.75rem;\n color: var(--text-muted);\n cursor: pointer;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n }\n\n .showcase-terminal-replay-btn:hover {\n border-color: var(--accent);\n color: var(--text);\n }\n\n /* ============ Section 4: Live Demo ============ */\n .showcase-livedemo {\n padding: 4rem 2rem;\n background: var(--bg-raised);\n border-top: 2px solid var(--border);\n border-bottom: 2px solid var(--border);\n }\n\n .showcase-livedemo-container {\n max-width: 700px;\n margin: 0 auto;\n text-align: center;\n }\n\n .showcase-livedemo-title {\n font-size: 1.5rem;\n font-weight: 700;\n margin-bottom: 0.5rem;\n color: var(--text);\n }\n\n .showcase-livedemo-subtitle {\n font-size: 0.875rem;\n color: var(--text-muted);\n margin-bottom: 2.5rem;\n line-height: 1.6;\n }\n\n .showcase-livedemo-button {\n display: inline-block;\n padding: 1rem 2rem;\n font-size: 0.875rem;\n font-weight: 700;\n font-family: var(--font);\n color: #fff;\n background: var(--accent);\n border: 2px solid var(--accent);\n cursor: pointer;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n box-shadow: 4px 4px 0 var(--border-bright);\n transition: all 0.15s;\n margin-bottom: 1.5rem;\n }\n\n .showcase-livedemo-button:hover:not(:disabled) {\n transform: translate(-2px, -2px);\n box-shadow: 6px 6px 0 var(--border-bright);\n opacity: 1;\n }\n\n .showcase-livedemo-button:active:not(:disabled) {\n transform: translate(2px, 2px);\n box-shadow: 2px 2px 0 var(--border-bright);\n }\n\n .showcase-livedemo-button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .showcase-livedemo-result {\n margin-top: 2rem;\n padding: 1.5rem;\n background: var(--bg);\n border: 2px solid var(--border);\n box-shadow: 4px 4px 0 var(--border-bright);\n text-align: left;\n font-size: 0.8125rem;\n line-height: 1.8;\n }\n\n .showcase-livedemo-result-line {\n opacity: 0;\n animation: showcase-livedemo-fadein 0.3s ease forwards;\n margin-bottom: 0.375rem;\n }\n\n .showcase-livedemo-result-line:nth-child(1) { animation-delay: 0ms; }\n .showcase-livedemo-result-line:nth-child(2) { animation-delay: 100ms; }\n .showcase-livedemo-result-line:nth-child(3) { animation-delay: 200ms; }\n .showcase-livedemo-result-line:nth-child(4) { animation-delay: 300ms; }\n .showcase-livedemo-result-line:nth-child(5) { animation-delay: 400ms; }\n .showcase-livedemo-result-line:nth-child(6) { animation-delay: 500ms; }\n .showcase-livedemo-result-line:nth-child(7) { animation-delay: 600ms; }\n\n @keyframes showcase-livedemo-fadein {\n from { opacity: 0; transform: translateY(-4px); }\n to { opacity: 1; transform: translateY(0); }\n }\n\n .showcase-livedemo-label {\n color: var(--text-dim);\n font-weight: 600;\n }\n\n .showcase-livedemo-value {\n color: var(--text);\n }\n\n .showcase-livedemo-time-fast {\n color: var(--green);\n font-weight: 700;\n }\n\n .showcase-livedemo-time-slow {\n color: var(--red);\n font-weight: 700;\n }\n\n .showcase-livedemo-status-success {\n color: var(--green);\n font-weight: 700;\n font-size: 1rem;\n }\n\n .showcase-livedemo-status-error {\n color: var(--red);\n font-weight: 700;\n }\n\n .showcase-livedemo-token {\n font-family: var(--font);\n color: var(--text-muted);\n word-break: break-all;\n font-size: 0.75rem;\n }\n\n .showcase-livedemo-counter {\n margin-top: 1rem;\n font-size: 0.75rem;\n color: var(--text-dim);\n }\n\n .showcase-livedemo-error {\n margin-top: 1.5rem;\n padding: 1rem;\n background: var(--bg);\n border: 2px solid var(--red);\n color: var(--red);\n text-align: left;\n font-size: 0.8125rem;\n }\n\n /* ============ Showcase footer ============ */\n .showcase-footer {\n max-width: 800px;\n margin: 0 auto;\n padding: 3rem 2rem 4rem;\n text-align: center;\n }\n\n .showcase-footer-cta {\n font-size: 1rem;\n font-weight: 700;\n margin-bottom: 1rem;\n color: var(--text);\n }\n\n .showcase-footer-steps {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n max-width: 420px;\n margin: 0 auto 2rem;\n text-align: left;\n }\n\n .showcase-footer-step {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.8125rem;\n padding: 0.625rem 1rem;\n background: var(--bg-raised);\n border: 1px solid var(--border);\n }\n\n .showcase-footer-step-number {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.375rem;\n height: 1.375rem;\n font-size: 0.6875rem;\n font-weight: 700;\n border: 1px solid var(--border-bright);\n color: var(--text-muted);\n flex-shrink: 0;\n }\n\n .showcase-footer-step code {\n color: var(--text);\n }\n\n .showcase-agent-prompt {\n max-width: 520px;\n margin: 2rem auto 2.5rem;\n text-align: center;\n }\n\n .showcase-agent-prompt-label {\n font-size: 0.6875rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--text-dim);\n margin-bottom: 0.75rem;\n }\n\n .showcase-agent-prompt-card {\n display: block;\n width: 100%;\n padding: 1.25rem;\n border: 1px solid var(--border);\n background: var(--bg);\n cursor: pointer;\n font-family: var(--font);\n text-align: left;\n transition: border-color 0.15s;\n }\n\n .showcase-agent-prompt-card:hover {\n border-color: var(--accent);\n }\n\n .showcase-agent-prompt-card code {\n display: block;\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--text);\n line-height: 1.5;\n background: none;\n border: none;\n padding: 0;\n text-transform: none;\n letter-spacing: normal;\n }\n\n .showcase-agent-prompt-copy {\n display: flex;\n align-items: center;\n gap: 0.375rem;\n margin-top: 0.75rem;\n font-size: 0.625rem;\n font-weight: 500;\n color: var(--text-muted);\n text-transform: uppercase;\n letter-spacing: 0.1em;\n transition: color 0.2s;\n }\n\n .showcase-agent-prompt-copy span {\n display: flex;\n }\n\n .showcase-footer-links {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: 0.5rem;\n margin-bottom: 2rem;\n }\n\n .showcase-footer-link {\n font-size: 0.6875rem;\n color: var(--text);\n text-decoration: none;\n padding: 0.25rem 0.625rem;\n border: 1px solid var(--border-bright);\n transition: border-color 0.15s;\n }\n\n .showcase-footer-link:hover {\n border-color: var(--accent);\n opacity: 1;\n }\n\n .showcase-footer-meta {\n font-size: 0.6875rem;\n color: var(--text-dim);\n }\n\n .showcase-footer-meta a {\n color: var(--text-muted);\n text-decoration: none;\n }\n\n .showcase-footer-sep {\n margin: 0 0.375rem;\n }\n\n /* ============ Responsive ============ */\n @media (max-width: 768px) {\n .showcase-tap-hero { padding: 3rem 1rem 2rem; }\n .showcase-tap-hero-title { font-size: 1.75rem; }\n .showcase-tap-hero-features {\n grid-template-columns: 1fr;\n gap: 1rem;\n }\n\n .showcase-hero { padding: 2rem 1rem 1rem; }\n .showcase-hero-grid {\n grid-template-columns: 1fr;\n gap: 1.5rem;\n }\n .showcase-hero-column { padding: 1.5rem; }\n .showcase-hero-title { font-size: 1.5rem; }\n .showcase-hero-visual { font-size: 0.5625rem; }\n .showcase-hero-tagline-main { font-size: 1.25rem; }\n\n .showcase-protocol-stack { padding: 3rem 1rem; }\n .showcase-stack-layer-title {\n flex-direction: column;\n align-items: flex-start;\n gap: 0.375rem;\n font-size: 1rem;\n }\n\n .showcase-terminal-section { padding: 3rem 1rem; }\n .showcase-terminal-content { padding: 1rem; font-size: 0.75rem; height: 420px; }\n\n .showcase-livedemo { padding: 3rem 1rem; }\n\n .showcase-footer { padding: 2rem 1rem 3rem; }\n }\n\n @media (max-width: 480px) {\n .showcase-hero-visual { font-size: 0.5rem; padding: 0.75rem; }\n .showcase-hero-tagline-main { font-size: 1rem; }\n }\n";
|
|
16
11
|
export declare const ShowcasePage: FC<{
|
|
17
12
|
version: string;
|
|
18
13
|
error?: string;
|
|
14
|
+
baseUrl?: string;
|
|
19
15
|
}>;
|
|
20
16
|
//# sourceMappingURL=showcase.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"showcase.d.ts","sourceRoot":"","sources":["../../src/dashboard/showcase.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"showcase.d.ts","sourceRoot":"","sources":["../../src/dashboard/showcase.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAqHnC,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAmFlF,CAAC"}
|