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.
Files changed (171) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/CLAUDE.md +24 -19
  3. package/node_modules/@groove-dev/cli/bin/groove.js +2 -0
  4. package/node_modules/@groove-dev/cli/package.json +1 -1
  5. package/node_modules/@groove-dev/cli/src/commands/nuke.js +16 -4
  6. package/node_modules/@groove-dev/cli/src/commands/stop.js +17 -2
  7. package/node_modules/@groove-dev/daemon/integrations-registry.json +681 -75
  8. package/node_modules/@groove-dev/daemon/package.json +1 -1
  9. package/node_modules/@groove-dev/daemon/src/adaptive.js +23 -25
  10. package/node_modules/@groove-dev/daemon/src/api.js +346 -22
  11. package/node_modules/@groove-dev/daemon/src/classifier.js +53 -6
  12. package/node_modules/@groove-dev/daemon/src/firstrun.js +14 -1
  13. package/node_modules/@groove-dev/daemon/src/gateways/manager.js +2 -2
  14. package/node_modules/@groove-dev/daemon/src/index.js +28 -4
  15. package/node_modules/@groove-dev/daemon/src/integrations.js +215 -14
  16. package/node_modules/@groove-dev/daemon/src/introducer.js +84 -11
  17. package/node_modules/@groove-dev/daemon/src/journalist.js +43 -1
  18. package/node_modules/@groove-dev/daemon/src/lockmanager.js +60 -0
  19. package/node_modules/@groove-dev/daemon/src/mcp-manager.js +270 -0
  20. package/node_modules/@groove-dev/daemon/src/memory.js +370 -0
  21. package/node_modules/@groove-dev/daemon/src/pm.js +1 -1
  22. package/node_modules/@groove-dev/daemon/src/process.js +141 -9
  23. package/node_modules/@groove-dev/daemon/src/registry.js +1 -1
  24. package/node_modules/@groove-dev/daemon/src/rotator.js +334 -31
  25. package/node_modules/@groove-dev/daemon/src/router.js +43 -0
  26. package/node_modules/@groove-dev/daemon/src/tokentracker.js +70 -18
  27. package/node_modules/@groove-dev/daemon/src/validate.js +5 -13
  28. package/node_modules/@groove-dev/daemon/templates/groove-slides.cjs +306 -0
  29. package/node_modules/@groove-dev/daemon/test/classifier.test.js +3 -5
  30. package/node_modules/@groove-dev/daemon/test/lockmanager.test.js +64 -0
  31. package/node_modules/@groove-dev/daemon/test/memory.test.js +252 -0
  32. package/node_modules/@groove-dev/daemon/test/rotator.test.js +108 -0
  33. package/node_modules/@groove-dev/daemon/test/router.test.js +64 -0
  34. package/node_modules/@groove-dev/daemon/test/slides-engine.test.js +230 -0
  35. package/node_modules/@groove-dev/daemon/test/tokentracker.test.js +78 -0
  36. package/node_modules/@groove-dev/gui/dist/assets/index-DjORRpF0.css +1 -0
  37. package/node_modules/@groove-dev/gui/dist/assets/index-eCrVowF0.js +652 -0
  38. package/node_modules/@groove-dev/gui/dist/index.html +2 -2
  39. package/node_modules/@groove-dev/gui/package.json +1 -4
  40. package/node_modules/@groove-dev/gui/src/components/agents/agent-chat.jsx +26 -17
  41. package/node_modules/@groove-dev/gui/src/components/agents/agent-config.jsx +22 -1
  42. package/node_modules/@groove-dev/gui/src/components/agents/agent-feed.jsx +53 -21
  43. package/node_modules/@groove-dev/gui/src/components/agents/agent-node.jsx +132 -90
  44. package/node_modules/@groove-dev/gui/src/components/agents/spawn-wizard.jsx +212 -1
  45. package/node_modules/@groove-dev/gui/src/components/dashboard/cache-ring.jsx +6 -2
  46. package/node_modules/@groove-dev/gui/src/components/dashboard/intel-panel.jsx +495 -174
  47. package/node_modules/@groove-dev/gui/src/components/dashboard/kpi-card.jsx +12 -2
  48. package/node_modules/@groove-dev/gui/src/components/dashboard/team-burn-panel.jsx +55 -0
  49. package/node_modules/@groove-dev/gui/src/components/layout/activity-bar.jsx +3 -3
  50. package/node_modules/@groove-dev/gui/src/components/layout/app-shell.jsx +24 -19
  51. package/node_modules/@groove-dev/gui/src/components/layout/command-palette.jsx +2 -2
  52. package/node_modules/@groove-dev/gui/src/components/marketplace/integration-wizard.jsx +391 -61
  53. package/node_modules/@groove-dev/gui/src/components/marketplace/marketplace-card.jsx +29 -7
  54. package/node_modules/@groove-dev/gui/src/lib/format.js +0 -6
  55. package/node_modules/@groove-dev/gui/src/lib/hooks/use-dashboard.js +23 -5
  56. package/node_modules/@groove-dev/gui/src/stores/groove.js +59 -9
  57. package/node_modules/@groove-dev/gui/src/views/agents.jsx +84 -10
  58. package/node_modules/@groove-dev/gui/src/views/dashboard.jsx +24 -21
  59. package/node_modules/@groove-dev/gui/src/views/marketplace.jsx +153 -85
  60. package/package.json +2 -8
  61. package/packages/cli/bin/groove.js +2 -0
  62. package/packages/cli/package.json +1 -1
  63. package/packages/cli/src/commands/nuke.js +16 -4
  64. package/packages/cli/src/commands/stop.js +17 -2
  65. package/packages/daemon/integrations-registry.json +681 -75
  66. package/packages/daemon/package.json +1 -1
  67. package/packages/daemon/src/adaptive.js +23 -25
  68. package/packages/daemon/src/api.js +346 -22
  69. package/packages/daemon/src/classifier.js +53 -6
  70. package/packages/daemon/src/firstrun.js +14 -1
  71. package/packages/daemon/src/gateways/manager.js +2 -2
  72. package/packages/daemon/src/index.js +28 -4
  73. package/packages/daemon/src/integrations.js +215 -14
  74. package/packages/daemon/src/introducer.js +84 -11
  75. package/packages/daemon/src/journalist.js +43 -1
  76. package/packages/daemon/src/lockmanager.js +60 -0
  77. package/packages/daemon/src/mcp-manager.js +270 -0
  78. package/packages/daemon/src/memory.js +370 -0
  79. package/packages/daemon/src/pm.js +1 -1
  80. package/packages/daemon/src/process.js +141 -9
  81. package/packages/daemon/src/registry.js +1 -1
  82. package/packages/daemon/src/rotator.js +334 -31
  83. package/packages/daemon/src/router.js +43 -0
  84. package/packages/daemon/src/tokentracker.js +70 -18
  85. package/packages/daemon/src/validate.js +5 -13
  86. package/packages/daemon/templates/groove-slides.cjs +306 -0
  87. package/packages/gui/dist/assets/index-DjORRpF0.css +1 -0
  88. package/packages/gui/dist/assets/index-eCrVowF0.js +652 -0
  89. package/packages/gui/dist/index.html +2 -2
  90. package/packages/gui/package.json +1 -4
  91. package/packages/gui/src/components/agents/agent-chat.jsx +26 -17
  92. package/packages/gui/src/components/agents/agent-config.jsx +22 -1
  93. package/packages/gui/src/components/agents/agent-feed.jsx +53 -21
  94. package/packages/gui/src/components/agents/agent-node.jsx +132 -90
  95. package/packages/gui/src/components/agents/spawn-wizard.jsx +212 -1
  96. package/packages/gui/src/components/dashboard/cache-ring.jsx +6 -2
  97. package/packages/gui/src/components/dashboard/intel-panel.jsx +495 -174
  98. package/packages/gui/src/components/dashboard/kpi-card.jsx +12 -2
  99. package/packages/gui/src/components/dashboard/team-burn-panel.jsx +55 -0
  100. package/packages/gui/src/components/layout/activity-bar.jsx +3 -3
  101. package/packages/gui/src/components/layout/app-shell.jsx +24 -19
  102. package/packages/gui/src/components/layout/command-palette.jsx +2 -2
  103. package/packages/gui/src/components/marketplace/integration-wizard.jsx +391 -61
  104. package/packages/gui/src/components/marketplace/marketplace-card.jsx +29 -7
  105. package/packages/gui/src/lib/format.js +0 -6
  106. package/packages/gui/src/lib/hooks/use-dashboard.js +23 -5
  107. package/packages/gui/src/stores/groove.js +59 -9
  108. package/packages/gui/src/views/agents.jsx +84 -10
  109. package/packages/gui/src/views/dashboard.jsx +24 -21
  110. package/packages/gui/src/views/marketplace.jsx +153 -85
  111. package/node_modules/@groove-dev/gui/dist/assets/index-CEFKgLGB.css +0 -1
  112. package/node_modules/@groove-dev/gui/dist/assets/index-CaKBNWcK.js +0 -638
  113. package/node_modules/@groove-dev/gui/dist/groove-logo-short.png +0 -0
  114. package/node_modules/@groove-dev/gui/dist/groove-logo.png +0 -0
  115. package/node_modules/@groove-dev/gui/public/groove-logo-short.png +0 -0
  116. package/node_modules/@groove-dev/gui/public/groove-logo.png +0 -0
  117. package/node_modules/@groove-dev/gui/src/components/ui/dropdown-menu.jsx +0 -60
  118. package/node_modules/@groove-dev/gui/src/lib/hooks/use-media-query.js +0 -18
  119. package/node_modules/@radix-ui/react-dropdown-menu/LICENSE +0 -21
  120. package/node_modules/@radix-ui/react-dropdown-menu/README.md +0 -3
  121. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.d.mts +0 -97
  122. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.d.ts +0 -97
  123. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.js +0 -337
  124. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.js.map +0 -7
  125. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs +0 -305
  126. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs.map +0 -7
  127. package/node_modules/@radix-ui/react-dropdown-menu/package.json +0 -75
  128. package/node_modules/@radix-ui/react-popover/LICENSE +0 -21
  129. package/node_modules/@radix-ui/react-popover/README.md +0 -3
  130. package/node_modules/@radix-ui/react-popover/dist/index.d.mts +0 -85
  131. package/node_modules/@radix-ui/react-popover/dist/index.d.ts +0 -85
  132. package/node_modules/@radix-ui/react-popover/dist/index.js +0 -352
  133. package/node_modules/@radix-ui/react-popover/dist/index.js.map +0 -7
  134. package/node_modules/@radix-ui/react-popover/dist/index.mjs +0 -320
  135. package/node_modules/@radix-ui/react-popover/dist/index.mjs.map +0 -7
  136. package/node_modules/@radix-ui/react-popover/package.json +0 -82
  137. package/node_modules/@radix-ui/react-separator/LICENSE +0 -21
  138. package/node_modules/@radix-ui/react-separator/README.md +0 -3
  139. package/node_modules/@radix-ui/react-separator/dist/index.d.mts +0 -21
  140. package/node_modules/@radix-ui/react-separator/dist/index.d.ts +0 -21
  141. package/node_modules/@radix-ui/react-separator/dist/index.js +0 -65
  142. package/node_modules/@radix-ui/react-separator/dist/index.js.map +0 -7
  143. package/node_modules/@radix-ui/react-separator/dist/index.mjs +0 -32
  144. package/node_modules/@radix-ui/react-separator/dist/index.mjs.map +0 -7
  145. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/LICENSE +0 -21
  146. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/README.md +0 -3
  147. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.d.mts +0 -52
  148. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.d.ts +0 -52
  149. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.js +0 -80
  150. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.js.map +0 -7
  151. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.mjs +0 -47
  152. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.mjs.map +0 -7
  153. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/package.json +0 -69
  154. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/LICENSE +0 -21
  155. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/README.md +0 -3
  156. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.d.mts +0 -22
  157. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.d.ts +0 -22
  158. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.js +0 -152
  159. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.js.map +0 -7
  160. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.mjs +0 -119
  161. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.mjs.map +0 -7
  162. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/package.json +0 -64
  163. package/node_modules/@radix-ui/react-separator/package.json +0 -69
  164. package/packages/gui/dist/assets/index-CEFKgLGB.css +0 -1
  165. package/packages/gui/dist/assets/index-CaKBNWcK.js +0 -638
  166. package/packages/gui/dist/groove-logo-short.png +0 -0
  167. package/packages/gui/dist/groove-logo.png +0 -0
  168. package/packages/gui/public/groove-logo-short.png +0 -0
  169. package/packages/gui/public/groove-logo.png +0 -0
  170. package/packages/gui/src/components/ui/dropdown-menu.jsx +0 -60
  171. 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">{label}</div>
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, BarChart3, Puzzle, Users, Box, Newspaper, Settings } from 'lucide-react';
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: BarChart3, label: 'Dashboard' },
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.nav ? item.id : item.id)}
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
- {/* Center: main content + terminal */}
79
+ {/* Content area (right of activity bar) */}
79
80
  <div className="flex-1 flex flex-col min-w-0 min-h-0">
80
- {/* Main content collapses when terminal is maximized */}
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
- {/* Terminal self-contained with its own panel, tabs, controls */}
88
- {terminalContent}
89
- </div>
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
- {showDetail && (
92
- <DetailPanel
93
- width={detailPanelWidth}
94
- onWidthChange={setDetailPanelWidth}
95
- onClose={closeDetail}
96
- >
97
- {detailContent}
98
- </DetailPanel>
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, BarChart3, Puzzle, Users, Plus,
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: BarChart3, category: 'Navigation', action: (s) => { s.setActiveView('dashboard'); } },
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' }); } },