groove-dev 0.26.38 → 0.27.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/CHANGELOG.md +59 -0
- package/CLAUDE.md +24 -19
- package/node_modules/@groove-dev/cli/bin/groove.js +2 -0
- package/node_modules/@groove-dev/cli/package.json +1 -1
- package/node_modules/@groove-dev/cli/src/commands/nuke.js +16 -4
- package/node_modules/@groove-dev/cli/src/commands/stop.js +17 -2
- package/node_modules/@groove-dev/daemon/integrations-registry.json +681 -75
- package/node_modules/@groove-dev/daemon/package.json +1 -1
- package/node_modules/@groove-dev/daemon/src/adaptive.js +23 -25
- package/node_modules/@groove-dev/daemon/src/api.js +346 -22
- package/node_modules/@groove-dev/daemon/src/classifier.js +53 -6
- package/node_modules/@groove-dev/daemon/src/firstrun.js +14 -1
- package/node_modules/@groove-dev/daemon/src/gateways/manager.js +2 -2
- package/node_modules/@groove-dev/daemon/src/index.js +28 -4
- package/node_modules/@groove-dev/daemon/src/integrations.js +215 -14
- package/node_modules/@groove-dev/daemon/src/introducer.js +84 -11
- package/node_modules/@groove-dev/daemon/src/journalist.js +43 -1
- package/node_modules/@groove-dev/daemon/src/lockmanager.js +60 -0
- package/node_modules/@groove-dev/daemon/src/mcp-manager.js +270 -0
- package/node_modules/@groove-dev/daemon/src/memory.js +370 -0
- package/node_modules/@groove-dev/daemon/src/pm.js +1 -1
- package/node_modules/@groove-dev/daemon/src/process.js +141 -9
- package/node_modules/@groove-dev/daemon/src/registry.js +1 -1
- package/node_modules/@groove-dev/daemon/src/rotator.js +334 -31
- package/node_modules/@groove-dev/daemon/src/router.js +43 -0
- package/node_modules/@groove-dev/daemon/src/tokentracker.js +70 -18
- package/node_modules/@groove-dev/daemon/src/validate.js +5 -13
- package/node_modules/@groove-dev/daemon/templates/groove-slides.cjs +306 -0
- package/node_modules/@groove-dev/daemon/test/classifier.test.js +3 -5
- package/node_modules/@groove-dev/daemon/test/lockmanager.test.js +64 -0
- package/node_modules/@groove-dev/daemon/test/memory.test.js +252 -0
- package/node_modules/@groove-dev/daemon/test/rotator.test.js +108 -0
- package/node_modules/@groove-dev/daemon/test/router.test.js +64 -0
- package/node_modules/@groove-dev/daemon/test/slides-engine.test.js +230 -0
- package/node_modules/@groove-dev/daemon/test/tokentracker.test.js +78 -0
- package/node_modules/@groove-dev/gui/dist/assets/index-DjORRpF0.css +1 -0
- package/node_modules/@groove-dev/gui/dist/assets/index-eCrVowF0.js +652 -0
- package/node_modules/@groove-dev/gui/dist/index.html +2 -2
- package/node_modules/@groove-dev/gui/package.json +1 -4
- package/node_modules/@groove-dev/gui/src/components/agents/agent-chat.jsx +26 -17
- package/node_modules/@groove-dev/gui/src/components/agents/agent-config.jsx +22 -1
- package/node_modules/@groove-dev/gui/src/components/agents/agent-feed.jsx +53 -21
- package/node_modules/@groove-dev/gui/src/components/agents/agent-node.jsx +132 -90
- package/node_modules/@groove-dev/gui/src/components/agents/spawn-wizard.jsx +212 -1
- package/node_modules/@groove-dev/gui/src/components/dashboard/cache-ring.jsx +6 -2
- package/node_modules/@groove-dev/gui/src/components/dashboard/intel-panel.jsx +495 -174
- package/node_modules/@groove-dev/gui/src/components/dashboard/kpi-card.jsx +12 -2
- package/node_modules/@groove-dev/gui/src/components/dashboard/team-burn-panel.jsx +55 -0
- package/node_modules/@groove-dev/gui/src/components/layout/activity-bar.jsx +3 -3
- package/node_modules/@groove-dev/gui/src/components/layout/app-shell.jsx +24 -19
- package/node_modules/@groove-dev/gui/src/components/layout/command-palette.jsx +2 -2
- package/node_modules/@groove-dev/gui/src/components/marketplace/integration-wizard.jsx +391 -61
- package/node_modules/@groove-dev/gui/src/components/marketplace/marketplace-card.jsx +29 -7
- package/node_modules/@groove-dev/gui/src/lib/format.js +0 -6
- package/node_modules/@groove-dev/gui/src/lib/hooks/use-dashboard.js +23 -5
- package/node_modules/@groove-dev/gui/src/stores/groove.js +59 -9
- package/node_modules/@groove-dev/gui/src/views/agents.jsx +84 -10
- package/node_modules/@groove-dev/gui/src/views/dashboard.jsx +24 -21
- package/node_modules/@groove-dev/gui/src/views/marketplace.jsx +153 -85
- package/package.json +2 -8
- package/packages/cli/bin/groove.js +2 -0
- package/packages/cli/package.json +1 -1
- package/packages/cli/src/commands/nuke.js +16 -4
- package/packages/cli/src/commands/stop.js +17 -2
- package/packages/daemon/integrations-registry.json +681 -75
- package/packages/daemon/package.json +1 -1
- package/packages/daemon/src/adaptive.js +23 -25
- package/packages/daemon/src/api.js +346 -22
- package/packages/daemon/src/classifier.js +53 -6
- package/packages/daemon/src/firstrun.js +14 -1
- package/packages/daemon/src/gateways/manager.js +2 -2
- package/packages/daemon/src/index.js +28 -4
- package/packages/daemon/src/integrations.js +215 -14
- package/packages/daemon/src/introducer.js +84 -11
- package/packages/daemon/src/journalist.js +43 -1
- package/packages/daemon/src/lockmanager.js +60 -0
- package/packages/daemon/src/mcp-manager.js +270 -0
- package/packages/daemon/src/memory.js +370 -0
- package/packages/daemon/src/pm.js +1 -1
- package/packages/daemon/src/process.js +141 -9
- package/packages/daemon/src/registry.js +1 -1
- package/packages/daemon/src/rotator.js +334 -31
- package/packages/daemon/src/router.js +43 -0
- package/packages/daemon/src/tokentracker.js +70 -18
- package/packages/daemon/src/validate.js +5 -13
- package/packages/daemon/templates/groove-slides.cjs +306 -0
- package/packages/gui/dist/assets/index-DjORRpF0.css +1 -0
- package/packages/gui/dist/assets/index-eCrVowF0.js +652 -0
- package/packages/gui/dist/index.html +2 -2
- package/packages/gui/package.json +1 -4
- package/packages/gui/src/components/agents/agent-chat.jsx +26 -17
- package/packages/gui/src/components/agents/agent-config.jsx +22 -1
- package/packages/gui/src/components/agents/agent-feed.jsx +53 -21
- package/packages/gui/src/components/agents/agent-node.jsx +132 -90
- package/packages/gui/src/components/agents/spawn-wizard.jsx +212 -1
- package/packages/gui/src/components/dashboard/cache-ring.jsx +6 -2
- package/packages/gui/src/components/dashboard/intel-panel.jsx +495 -174
- package/packages/gui/src/components/dashboard/kpi-card.jsx +12 -2
- package/packages/gui/src/components/dashboard/team-burn-panel.jsx +55 -0
- package/packages/gui/src/components/layout/activity-bar.jsx +3 -3
- package/packages/gui/src/components/layout/app-shell.jsx +24 -19
- package/packages/gui/src/components/layout/command-palette.jsx +2 -2
- package/packages/gui/src/components/marketplace/integration-wizard.jsx +391 -61
- package/packages/gui/src/components/marketplace/marketplace-card.jsx +29 -7
- package/packages/gui/src/lib/format.js +0 -6
- package/packages/gui/src/lib/hooks/use-dashboard.js +23 -5
- package/packages/gui/src/stores/groove.js +59 -9
- package/packages/gui/src/views/agents.jsx +84 -10
- package/packages/gui/src/views/dashboard.jsx +24 -21
- package/packages/gui/src/views/marketplace.jsx +153 -85
- package/node_modules/@groove-dev/gui/dist/assets/index-CEFKgLGB.css +0 -1
- package/node_modules/@groove-dev/gui/dist/assets/index-CaKBNWcK.js +0 -638
- package/node_modules/@groove-dev/gui/dist/groove-logo-short.png +0 -0
- package/node_modules/@groove-dev/gui/dist/groove-logo.png +0 -0
- package/node_modules/@groove-dev/gui/public/groove-logo-short.png +0 -0
- package/node_modules/@groove-dev/gui/public/groove-logo.png +0 -0
- package/node_modules/@groove-dev/gui/src/components/ui/dropdown-menu.jsx +0 -60
- package/node_modules/@groove-dev/gui/src/lib/hooks/use-media-query.js +0 -18
- package/node_modules/@radix-ui/react-dropdown-menu/LICENSE +0 -21
- package/node_modules/@radix-ui/react-dropdown-menu/README.md +0 -3
- package/node_modules/@radix-ui/react-dropdown-menu/dist/index.d.mts +0 -97
- package/node_modules/@radix-ui/react-dropdown-menu/dist/index.d.ts +0 -97
- package/node_modules/@radix-ui/react-dropdown-menu/dist/index.js +0 -337
- package/node_modules/@radix-ui/react-dropdown-menu/dist/index.js.map +0 -7
- package/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs +0 -305
- package/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs.map +0 -7
- package/node_modules/@radix-ui/react-dropdown-menu/package.json +0 -75
- package/node_modules/@radix-ui/react-popover/LICENSE +0 -21
- package/node_modules/@radix-ui/react-popover/README.md +0 -3
- package/node_modules/@radix-ui/react-popover/dist/index.d.mts +0 -85
- package/node_modules/@radix-ui/react-popover/dist/index.d.ts +0 -85
- package/node_modules/@radix-ui/react-popover/dist/index.js +0 -352
- package/node_modules/@radix-ui/react-popover/dist/index.js.map +0 -7
- package/node_modules/@radix-ui/react-popover/dist/index.mjs +0 -320
- package/node_modules/@radix-ui/react-popover/dist/index.mjs.map +0 -7
- package/node_modules/@radix-ui/react-popover/package.json +0 -82
- package/node_modules/@radix-ui/react-separator/LICENSE +0 -21
- package/node_modules/@radix-ui/react-separator/README.md +0 -3
- package/node_modules/@radix-ui/react-separator/dist/index.d.mts +0 -21
- package/node_modules/@radix-ui/react-separator/dist/index.d.ts +0 -21
- package/node_modules/@radix-ui/react-separator/dist/index.js +0 -65
- package/node_modules/@radix-ui/react-separator/dist/index.js.map +0 -7
- package/node_modules/@radix-ui/react-separator/dist/index.mjs +0 -32
- package/node_modules/@radix-ui/react-separator/dist/index.mjs.map +0 -7
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/LICENSE +0 -21
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/README.md +0 -3
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.d.mts +0 -52
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.d.ts +0 -52
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.js +0 -80
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.js.map +0 -7
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.mjs +0 -47
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.mjs.map +0 -7
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/package.json +0 -69
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/LICENSE +0 -21
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/README.md +0 -3
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.d.mts +0 -22
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.d.ts +0 -22
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.js +0 -152
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.js.map +0 -7
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.mjs +0 -119
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.mjs.map +0 -7
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/package.json +0 -64
- package/node_modules/@radix-ui/react-separator/package.json +0 -69
- package/packages/gui/dist/assets/index-CEFKgLGB.css +0 -1
- package/packages/gui/dist/assets/index-CaKBNWcK.js +0 -638
- package/packages/gui/dist/groove-logo-short.png +0 -0
- package/packages/gui/dist/groove-logo.png +0 -0
- package/packages/gui/public/groove-logo-short.png +0 -0
- package/packages/gui/public/groove-logo.png +0 -0
- package/packages/gui/src/components/ui/dropdown-menu.jsx +0 -60
- package/packages/gui/src/lib/hooks/use-media-query.js +0 -18
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
import { memo } from 'react';
|
|
3
3
|
import { cn } from '../../lib/cn';
|
|
4
4
|
import { HEX } from '../../lib/theme-hex';
|
|
5
|
+
import { Tooltip } from '../ui/tooltip';
|
|
6
|
+
import { HelpCircle } from 'lucide-react';
|
|
5
7
|
|
|
6
8
|
function MiniSparkline({ data, color = HEX.accent, width = 72, height = 22 }) {
|
|
7
9
|
if (!data || data.length < 2) return <div style={{ width, height }} />;
|
|
@@ -32,7 +34,7 @@ function MiniSparkline({ data, color = HEX.accent, width = 72, height = 22 }) {
|
|
|
32
34
|
);
|
|
33
35
|
}
|
|
34
36
|
|
|
35
|
-
const KpiCard = memo(function KpiCard({ label, value, sparkData, color = HEX.accent, className }) {
|
|
37
|
+
const KpiCard = memo(function KpiCard({ label, value, sparkData, color = HEX.accent, hint, className }) {
|
|
36
38
|
return (
|
|
37
39
|
<div className={cn(
|
|
38
40
|
'flex items-center gap-2.5 px-3 py-2.5 min-w-0',
|
|
@@ -40,7 +42,14 @@ const KpiCard = memo(function KpiCard({ label, value, sparkData, color = HEX.acc
|
|
|
40
42
|
className,
|
|
41
43
|
)}>
|
|
42
44
|
<div className="flex-1 min-w-0">
|
|
43
|
-
<div className="text-2xs font-mono text-text-3 uppercase tracking-wider mb-0.5 truncate">
|
|
45
|
+
<div className="text-2xs font-mono text-text-3 uppercase tracking-wider mb-0.5 truncate flex items-center gap-1">
|
|
46
|
+
{label}
|
|
47
|
+
{hint && (
|
|
48
|
+
<Tooltip content={<span className="max-w-[220px] block leading-relaxed">{hint}</span>} side="bottom">
|
|
49
|
+
<HelpCircle size={10} className="text-text-4 hover:text-text-2 cursor-help flex-shrink-0 transition-colors" />
|
|
50
|
+
</Tooltip>
|
|
51
|
+
)}
|
|
52
|
+
</div>
|
|
44
53
|
<div className="text-base font-semibold font-mono text-text-0 tabular-nums leading-none">{value}</div>
|
|
45
54
|
</div>
|
|
46
55
|
<MiniSparkline data={sparkData} color={color} />
|
|
@@ -58,6 +67,7 @@ export function KpiStrip({ kpis }) {
|
|
|
58
67
|
value={kpi.value}
|
|
59
68
|
sparkData={kpi.sparkData}
|
|
60
69
|
color={kpi.color}
|
|
70
|
+
hint={kpi.hint}
|
|
61
71
|
className={cn(
|
|
62
72
|
'flex-1 basis-[12.5%] min-w-[140px]',
|
|
63
73
|
'border-b border-r border-border',
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// FSL-1.1-Apache-2.0 — see LICENSE
|
|
2
|
+
import { memo } from 'react';
|
|
3
|
+
import { fmtNum, fmtDollar } from '../../lib/format';
|
|
4
|
+
import { HEX } from '../../lib/theme-hex';
|
|
5
|
+
import { ScrollArea } from '../ui/scroll-area';
|
|
6
|
+
|
|
7
|
+
export const TeamBurnPanel = memo(function TeamBurnPanel({ teams = [] }) {
|
|
8
|
+
const totalTokens = teams.reduce((s, t) => s + (t.totalTokens || 0), 0);
|
|
9
|
+
const maxTokens = teams.reduce((m, t) => Math.max(m, t.totalTokens || 0), 0);
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<div className="flex flex-col h-full">
|
|
13
|
+
<div className="px-3 pt-2.5 pb-1 flex-shrink-0 flex items-center justify-between">
|
|
14
|
+
<span className="text-2xs font-mono text-text-3 uppercase tracking-widest">Team Burn</span>
|
|
15
|
+
<span className="text-2xs font-mono text-text-3">{fmtNum(totalTokens)} total</span>
|
|
16
|
+
</div>
|
|
17
|
+
<ScrollArea className="flex-1 min-h-0">
|
|
18
|
+
{teams.length === 0 ? (
|
|
19
|
+
<div className="px-3 py-6 text-center text-xs text-text-3 font-mono">No team activity yet</div>
|
|
20
|
+
) : (
|
|
21
|
+
<div className="px-3 pb-2 space-y-1.5">
|
|
22
|
+
{teams.map((t) => {
|
|
23
|
+
const pct = maxTokens > 0 ? (t.totalTokens / maxTokens) * 100 : 0;
|
|
24
|
+
return (
|
|
25
|
+
<div key={t.teamId} className="space-y-1">
|
|
26
|
+
<div className="flex items-center justify-between gap-2 min-w-0">
|
|
27
|
+
<div className="flex items-center gap-1.5 min-w-0">
|
|
28
|
+
<span className="text-xs font-semibold text-text-0 font-sans truncate">{t.teamName}</span>
|
|
29
|
+
{t.isDefault && (
|
|
30
|
+
<span className="text-[9px] font-mono text-text-3 uppercase tracking-wider">default</span>
|
|
31
|
+
)}
|
|
32
|
+
<span className="text-2xs font-mono text-text-3 flex-shrink-0">
|
|
33
|
+
{t.agentCount} {t.agentCount === 1 ? 'agent' : 'agents'}
|
|
34
|
+
</span>
|
|
35
|
+
</div>
|
|
36
|
+
<div className="flex items-center gap-2 flex-shrink-0 font-mono text-2xs">
|
|
37
|
+
<span className="text-text-1">{fmtNum(t.totalTokens)}</span>
|
|
38
|
+
<span className="text-text-3">{fmtDollar(t.totalCostUsd)}</span>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
<div className="h-0.5 bg-surface-2 rounded-sm overflow-hidden">
|
|
42
|
+
<div
|
|
43
|
+
className="h-full rounded-sm transition-all"
|
|
44
|
+
style={{ width: `${pct}%`, background: HEX.accent }}
|
|
45
|
+
/>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
);
|
|
49
|
+
})}
|
|
50
|
+
</div>
|
|
51
|
+
)}
|
|
52
|
+
</ScrollArea>
|
|
53
|
+
</div>
|
|
54
|
+
);
|
|
55
|
+
});
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// FSL-1.1-Apache-2.0 — see LICENSE
|
|
2
|
-
import { Network, Code2,
|
|
2
|
+
import { Network, Code2, ChartSpline, Puzzle, Users, Box, Newspaper, Settings } from 'lucide-react';
|
|
3
3
|
import { cn } from '../../lib/cn';
|
|
4
4
|
import { Tooltip } from '../ui/tooltip';
|
|
5
5
|
|
|
6
6
|
const NAV_ITEMS = [
|
|
7
7
|
{ id: 'agents', icon: Network, label: 'Agents' },
|
|
8
8
|
{ id: 'editor', icon: Code2, label: 'Editor' },
|
|
9
|
-
{ id: 'dashboard', icon:
|
|
9
|
+
{ id: 'dashboard', icon: ChartSpline, label: 'Dashboard' },
|
|
10
10
|
{ id: 'marketplace', icon: Puzzle, label: 'Marketplace' },
|
|
11
11
|
{ id: 'models', icon: Box, label: 'Models' },
|
|
12
12
|
{ id: 'teams', icon: Users, label: 'Teams' },
|
|
@@ -51,7 +51,7 @@ export function ActivityBar({ activeView, detailPanel, onNavigate, onTogglePanel
|
|
|
51
51
|
return (
|
|
52
52
|
<Tooltip key={item.id} content={item.label} side="right">
|
|
53
53
|
<button
|
|
54
|
-
onClick={() => item.panel ? onTogglePanel(item.id) : onNavigate(item.
|
|
54
|
+
onClick={() => item.panel ? onTogglePanel(item.id) : onNavigate(item.id)}
|
|
55
55
|
className={cn(
|
|
56
56
|
'w-10 h-10 flex items-center justify-center rounded-md transition-colors cursor-pointer',
|
|
57
57
|
isActive
|
|
@@ -9,6 +9,7 @@ import { BreadcrumbBar } from './breadcrumb-bar';
|
|
|
9
9
|
import { StatusBar } from './status-bar';
|
|
10
10
|
import { DetailPanel } from './detail-panel';
|
|
11
11
|
import { CommandPalette } from './command-palette';
|
|
12
|
+
import { TeamTabBar } from '../../views/agents';
|
|
12
13
|
|
|
13
14
|
export function AppShell({ children, detailContent, terminalContent }) {
|
|
14
15
|
const activeView = useGrooveStore((s) => s.activeView);
|
|
@@ -75,28 +76,32 @@ export function AppShell({ children, detailContent, terminalContent }) {
|
|
|
75
76
|
}}
|
|
76
77
|
/>
|
|
77
78
|
|
|
78
|
-
{/*
|
|
79
|
+
{/* Content area (right of activity bar) */}
|
|
79
80
|
<div className="flex-1 flex flex-col min-w-0 min-h-0">
|
|
80
|
-
{
|
|
81
|
-
{!(terminalVisible && terminalFullHeight) && (
|
|
82
|
-
<main className="flex-1 min-h-0 overflow-hidden relative">
|
|
83
|
-
{children}
|
|
84
|
-
</main>
|
|
85
|
-
)}
|
|
81
|
+
{activeView === 'agents' && <TeamTabBar />}
|
|
86
82
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
83
|
+
<div className="flex-1 flex min-h-0">
|
|
84
|
+
{/* Center: main content + terminal */}
|
|
85
|
+
<div className="flex-1 flex flex-col min-w-0 min-h-0">
|
|
86
|
+
{!(terminalVisible && terminalFullHeight) && (
|
|
87
|
+
<main className="flex-1 min-h-0 overflow-hidden relative">
|
|
88
|
+
{children}
|
|
89
|
+
</main>
|
|
90
|
+
)}
|
|
91
|
+
{terminalContent}
|
|
92
|
+
</div>
|
|
90
93
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
94
|
+
{showDetail && (
|
|
95
|
+
<DetailPanel
|
|
96
|
+
width={detailPanelWidth}
|
|
97
|
+
onWidthChange={setDetailPanelWidth}
|
|
98
|
+
onClose={closeDetail}
|
|
99
|
+
>
|
|
100
|
+
{detailContent}
|
|
101
|
+
</DetailPanel>
|
|
102
|
+
)}
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
100
105
|
</div>
|
|
101
106
|
|
|
102
107
|
<StatusBar
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { useState, useEffect, useRef, useMemo } from 'react';
|
|
3
3
|
import { useGrooveStore } from '../../stores/groove';
|
|
4
4
|
import {
|
|
5
|
-
Network, Code2,
|
|
5
|
+
Network, Code2, ChartSpline, Puzzle, Users, Plus,
|
|
6
6
|
RotateCw, Skull, MessageSquare, Terminal, Newspaper,
|
|
7
7
|
Search,
|
|
8
8
|
} from 'lucide-react';
|
|
@@ -12,7 +12,7 @@ import { AnimatePresence, motion } from 'framer-motion';
|
|
|
12
12
|
const STATIC_COMMANDS = [
|
|
13
13
|
{ id: 'nav:agents', label: 'Go to Agents', icon: Network, category: 'Navigation', action: (s) => { s.setActiveView('agents'); } },
|
|
14
14
|
{ id: 'nav:editor', label: 'Go to Editor', icon: Code2, category: 'Navigation', action: (s) => { s.setActiveView('editor'); } },
|
|
15
|
-
{ id: 'nav:dashboard', label: 'Go to Dashboard', icon:
|
|
15
|
+
{ id: 'nav:dashboard', label: 'Go to Dashboard', icon: ChartSpline, category: 'Navigation', action: (s) => { s.setActiveView('dashboard'); } },
|
|
16
16
|
{ id: 'nav:marketplace', label: 'Go to Marketplace', icon: Puzzle, category: 'Navigation', action: (s) => { s.setActiveView('marketplace'); } },
|
|
17
17
|
{ id: 'nav:teams', label: 'Go to Teams', icon: Users, category: 'Navigation', action: (s) => { s.setActiveView('teams'); } },
|
|
18
18
|
{ id: 'action:spawn', label: 'Spawn Agent', icon: Plus, category: 'Actions', action: (s) => { s.openDetail({ type: 'spawn' }); } },
|