groove-dev 0.21.1 → 0.21.2
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/node_modules/@groove-dev/gui/.groove/audit.log +7 -0
- package/node_modules/@groove-dev/gui/.groove/codebase-index.json +1 -1
- package/node_modules/@groove-dev/gui/.groove/credentials.json +6 -6
- package/node_modules/@groove-dev/gui/.groove/daemon.host +1 -0
- package/node_modules/@groove-dev/gui/.groove/daemon.pid +1 -0
- package/node_modules/@groove-dev/gui/.groove/gateways/{slack-14825b.json → slack-4cb274.json} +3 -3
- package/node_modules/@groove-dev/gui/.groove/timeline.json +72 -0
- package/node_modules/@groove-dev/gui/AGENTS_REGISTRY.md +9 -0
- package/node_modules/@groove-dev/gui/dist/assets/{index-ChDhUvQR.css → index-BrnkuLjA.css} +1 -1
- package/node_modules/@groove-dev/gui/dist/assets/index-C2KUoUoT.js +557 -0
- package/node_modules/@groove-dev/gui/dist/index.html +2 -2
- package/node_modules/@groove-dev/gui/src/views/settings.jsx +86 -4
- package/package.json +1 -1
- package/packages/gui/dist/assets/{index-ChDhUvQR.css → index-BrnkuLjA.css} +1 -1
- package/packages/gui/dist/assets/index-C2KUoUoT.js +557 -0
- package/packages/gui/dist/index.html +2 -2
- package/packages/gui/src/views/settings.jsx +86 -4
- package/node_modules/@groove-dev/gui/dist/assets/index-Clce-6_v.js +0 -552
- package/packages/gui/dist/assets/index-Clce-6_v.js +0 -552
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<link rel="icon" type="image/png" href="/favicon.png" />
|
|
7
7
|
<title>Groove GUI</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-C2KUoUoT.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/vendor-C0HXlhrU.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/reactflow-BQPfi37R.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/codemirror-BBL3i_JW.js">
|
|
12
12
|
<link rel="modulepreload" crossorigin href="/assets/xterm--7_ns2zW.js">
|
|
13
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
13
|
+
<link rel="stylesheet" crossorigin href="/assets/index-BrnkuLjA.css">
|
|
14
14
|
</head>
|
|
15
15
|
<body>
|
|
16
16
|
<div id="root"></div>
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
FolderOpen, FolderSearch, RotateCw, Users, Gauge, Zap,
|
|
17
17
|
LogIn, LogOut, User, ShieldCheck, Settings,
|
|
18
18
|
Newspaper, Layers, Radio, Send, MessageSquare, MessageCircle,
|
|
19
|
-
Plus, Trash2, Plug, PlugZap, TestTube, X,
|
|
19
|
+
Plus, Trash2, Plug, PlugZap, TestTube, X, HelpCircle, ExternalLink, ChevronRight,
|
|
20
20
|
} from 'lucide-react';
|
|
21
21
|
|
|
22
22
|
/* ── Toggle ────────────────────────────────────────────────── */
|
|
@@ -262,6 +262,40 @@ const GATEWAY_LABELS = { telegram: 'Telegram', discord: 'Discord', slack: 'Slack
|
|
|
262
262
|
const GATEWAY_PLACEHOLDERS = { telegram: 'Bot token from @BotFather', discord: 'Bot token from Developer Portal', slack: 'Bot token (xoxb-...)' };
|
|
263
263
|
const NOTIFICATION_PRESETS = ['critical', 'lifecycle', 'all'];
|
|
264
264
|
|
|
265
|
+
const SETUP_GUIDES = {
|
|
266
|
+
telegram: {
|
|
267
|
+
title: 'Telegram Setup',
|
|
268
|
+
steps: [
|
|
269
|
+
{ text: 'Open Telegram and message', link: 'https://t.me/BotFather', linkText: '@BotFather' },
|
|
270
|
+
{ text: 'Send /newbot and name it GroovePilot (or anything you like)' },
|
|
271
|
+
{ text: 'Copy the bot token and paste it below' },
|
|
272
|
+
{ text: 'After connecting, send any message to your bot to link the chat' },
|
|
273
|
+
],
|
|
274
|
+
},
|
|
275
|
+
discord: {
|
|
276
|
+
title: 'Discord Setup',
|
|
277
|
+
steps: [
|
|
278
|
+
{ text: 'Go to the', link: 'https://discord.com/developers/applications', linkText: 'Discord Developer Portal' },
|
|
279
|
+
{ text: 'Create an app, go to Bot tab, click Reset Token, copy it' },
|
|
280
|
+
{ text: 'OAuth2 > URL Generator: select bot scope + Send Messages + Read Message History' },
|
|
281
|
+
{ text: 'Open the generated URL to invite the bot to your server' },
|
|
282
|
+
{ text: 'Paste the bot token below' },
|
|
283
|
+
],
|
|
284
|
+
},
|
|
285
|
+
slack: {
|
|
286
|
+
title: 'Slack Setup',
|
|
287
|
+
steps: [
|
|
288
|
+
{ text: 'Create a new app at', link: 'https://api.slack.com/apps', linkText: 'api.slack.com/apps' },
|
|
289
|
+
{ text: 'Settings > Socket Mode: enable it' },
|
|
290
|
+
{ text: 'Basic Information > App-Level Tokens: generate one with connections:write scope' },
|
|
291
|
+
{ text: 'OAuth & Permissions > Bot Token Scopes: add chat:write, channels:read, groups:read, channels:history, app_mentions:read' },
|
|
292
|
+
{ text: 'Event Subscriptions: enable, subscribe to message.channels and app_mention bot events' },
|
|
293
|
+
{ text: 'Install to Workspace and copy the Bot Token (xoxb-...)' },
|
|
294
|
+
{ text: 'Paste both tokens below, then invite the bot to a channel' },
|
|
295
|
+
],
|
|
296
|
+
},
|
|
297
|
+
};
|
|
298
|
+
|
|
265
299
|
/* ── Gateway Card ─────────────────────────────────────────── */
|
|
266
300
|
|
|
267
301
|
function GatewayCard({ gateway, onRefresh }) {
|
|
@@ -272,6 +306,7 @@ function GatewayCard({ gateway, onRefresh }) {
|
|
|
272
306
|
const [testing, setTesting] = useState(false);
|
|
273
307
|
const [connecting, setConnecting] = useState(false);
|
|
274
308
|
const [channels, setChannels] = useState([]);
|
|
309
|
+
const [showGuide, setShowGuide] = useState(false);
|
|
275
310
|
const addToast = useGrooveStore((s) => s.addToast);
|
|
276
311
|
|
|
277
312
|
// Fetch channels when connected Slack gateway has no chatId
|
|
@@ -502,10 +537,47 @@ function GatewayCard({ gateway, onRefresh }) {
|
|
|
502
537
|
</>
|
|
503
538
|
)}
|
|
504
539
|
|
|
505
|
-
{/* Not connected, not editing — show state */}
|
|
540
|
+
{/* Not connected, not editing — show state + guide */}
|
|
506
541
|
{!gateway.connected && !settingToken && (
|
|
507
|
-
|
|
508
|
-
|
|
542
|
+
<>
|
|
543
|
+
<div className="text-xs text-text-3 font-sans mb-2">
|
|
544
|
+
{!gateway.enabled ? 'Gateway is disabled.' : gateway.hasCredentials ? 'Tokens saved — click Connect.' : 'Configure bot token to connect.'}
|
|
545
|
+
</div>
|
|
546
|
+
{!gateway.hasCredentials && (
|
|
547
|
+
<button
|
|
548
|
+
onClick={() => setShowGuide(!showGuide)}
|
|
549
|
+
className="flex items-center gap-1.5 text-2xs text-accent hover:text-accent/80 font-sans font-medium cursor-pointer mb-2"
|
|
550
|
+
>
|
|
551
|
+
<HelpCircle size={11} />
|
|
552
|
+
{showGuide ? 'Hide setup guide' : 'How to set up'}
|
|
553
|
+
<ChevronRight size={10} className={cn('transition-transform', showGuide && 'rotate-90')} />
|
|
554
|
+
</button>
|
|
555
|
+
)}
|
|
556
|
+
</>
|
|
557
|
+
)}
|
|
558
|
+
|
|
559
|
+
{/* Setup guide */}
|
|
560
|
+
{showGuide && SETUP_GUIDES[gateway.type] && (
|
|
561
|
+
<div className="mb-3 p-2.5 bg-accent/5 border border-accent/15 rounded-md">
|
|
562
|
+
<div className="text-2xs font-semibold text-accent font-sans mb-2">{SETUP_GUIDES[gateway.type].title}</div>
|
|
563
|
+
<ol className="space-y-1.5">
|
|
564
|
+
{SETUP_GUIDES[gateway.type].steps.map((step, i) => (
|
|
565
|
+
<li key={i} className="text-2xs text-text-3 font-sans flex gap-1.5">
|
|
566
|
+
<span className="text-text-4 font-mono w-4 flex-shrink-0">{i + 1}.</span>
|
|
567
|
+
<span>
|
|
568
|
+
{step.text}
|
|
569
|
+
{step.link && (
|
|
570
|
+
<>
|
|
571
|
+
{' '}
|
|
572
|
+
<a href={step.link} target="_blank" rel="noopener noreferrer" className="text-accent hover:underline inline-flex items-center gap-0.5">
|
|
573
|
+
{step.linkText}<ExternalLink size={8} />
|
|
574
|
+
</a>
|
|
575
|
+
</>
|
|
576
|
+
)}
|
|
577
|
+
</span>
|
|
578
|
+
</li>
|
|
579
|
+
))}
|
|
580
|
+
</ol>
|
|
509
581
|
</div>
|
|
510
582
|
)}
|
|
511
583
|
|
|
@@ -514,6 +586,16 @@ function GatewayCard({ gateway, onRefresh }) {
|
|
|
514
586
|
{/* Token input form */}
|
|
515
587
|
{settingToken && (
|
|
516
588
|
<div className="space-y-2.5 pt-1">
|
|
589
|
+
{/* Inline guide toggle when editing tokens */}
|
|
590
|
+
{SETUP_GUIDES[gateway.type] && (
|
|
591
|
+
<button
|
|
592
|
+
onClick={() => setShowGuide(!showGuide)}
|
|
593
|
+
className="flex items-center gap-1.5 text-2xs text-accent hover:text-accent/80 font-sans font-medium cursor-pointer"
|
|
594
|
+
>
|
|
595
|
+
<HelpCircle size={11} />
|
|
596
|
+
{showGuide ? 'Hide guide' : 'Where do I get these?'}
|
|
597
|
+
</button>
|
|
598
|
+
)}
|
|
517
599
|
<div>
|
|
518
600
|
<label className="text-2xs font-semibold text-text-2 font-sans mb-1.5 block">Bot Token</label>
|
|
519
601
|
<div className="relative">
|