groove-dev 0.24.16 → 0.25.1

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.
@@ -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-v1z73h9P.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-DjEycx1f.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-DqErNcey.css">
13
+ <link rel="stylesheet" crossorigin href="/assets/index-CX6VBcgs.css">
14
14
  </head>
15
15
  <body>
16
16
  <div id="root"></div>
@@ -10,7 +10,7 @@ import { roleColor } from '../../lib/status';
10
10
  import {
11
11
  Server, Monitor, Code2, TestTube, Cloud, FileText,
12
12
  Shield, Database, Megaphone, Calculator, UserCheck,
13
- Headphones, BarChart3, Rocket, ChevronDown,
13
+ Headphones, BarChart3, Rocket, ChevronDown, Pen, Presentation,
14
14
  } from 'lucide-react';
15
15
 
16
16
  const ROLE_PRESETS = [
@@ -28,6 +28,8 @@ const ROLE_PRESETS = [
28
28
  { id: 'ea', label: 'EA', desc: 'Executive assistant, scheduling', icon: UserCheck, tier: 'Light' },
29
29
  { id: 'support', label: 'Support', desc: 'Customer support, FAQs', icon: Headphones, tier: 'Medium' },
30
30
  { id: 'analyst', label: 'Analyst', desc: 'Data analysis, insights', icon: BarChart3, tier: 'Medium' },
31
+ { id: 'creative', label: 'Writer', desc: 'Copy, articles, proposals', icon: Pen, tier: 'Heavy', skillHint: true },
32
+ { id: 'slides', label: 'Slides', desc: 'Pitch decks, presentations', icon: Presentation, tier: 'Heavy', skillHint: true },
31
33
  ];
32
34
 
33
35
  export function SpawnWizard() {
@@ -111,7 +113,12 @@ export function SpawnWizard() {
111
113
  <preset.icon size={16} style={{ color: colors.text }} />
112
114
  </div>
113
115
  <div className="min-w-0">
114
- <div className="text-xs font-semibold text-text-0 font-sans">{preset.label}</div>
116
+ <div className="flex items-center gap-1.5">
117
+ <span className="text-xs font-semibold text-text-0 font-sans">{preset.label}</span>
118
+ {preset.skillHint && (
119
+ <span className="text-2xs font-mono text-warning/70 bg-warning/8 px-1 py-px rounded">skill</span>
120
+ )}
121
+ </div>
115
122
  <div className="text-2xs text-text-3 font-sans truncate">{preset.desc}</div>
116
123
  </div>
117
124
  </button>
@@ -40,6 +40,8 @@ export const ROLE_COLORS = {
40
40
  ea: { bg: 'rgba(97, 175, 239, 0.12)', text: '#61afef', border: '#61afef' },
41
41
  support: { bg: 'rgba(51, 175, 188, 0.12)', text: '#33afbc', border: '#33afbc' },
42
42
  analyst: { bg: 'rgba(198, 120, 221, 0.12)', text: '#c678dd', border: '#c678dd' },
43
+ creative: { bg: 'rgba(229, 192, 123, 0.12)', text: '#e5c07b', border: '#e5c07b' },
44
+ slides: { bg: 'rgba(209, 154, 102, 0.12)', text: '#d19a66', border: '#d19a66' },
43
45
  };
44
46
 
45
47
  export function roleColor(role) {
@@ -491,7 +491,11 @@ export const useGrooveStore = create((set, get) => ({
491
491
  set({ recommendedTeam: null }); // Dismiss modal immediately
492
492
  get().addToast('info', 'Launching team...');
493
493
  const result = await api.post('/recommended-team/launch');
494
- get().addToast('success', `Launched ${result.launched} agents`, result.phase2Pending ? `${result.phase2Pending} QC agents queued` : undefined);
494
+ const sub = [
495
+ result.phase2Pending ? `${result.phase2Pending} QC queued` : '',
496
+ result.projectDir ? `→ ${result.projectDir}/` : '',
497
+ ].filter(Boolean).join(' · ');
498
+ get().addToast('success', `Launched ${result.launched} agents`, sub || undefined);
495
499
  // Clean up stale files
496
500
  api.post('/cleanup').catch(() => {});
497
501
  return result;
@@ -514,6 +514,14 @@ function RecommendedTeamCard() {
514
514
  })}
515
515
  </div>
516
516
 
517
+ {/* Project dir indicator */}
518
+ {recommendedTeam.projectDir && (
519
+ <div className="flex items-center gap-1.5 text-2xs text-text-2 font-mono">
520
+ <span className="text-text-4">Project:</span>
521
+ <span className="text-accent">{recommendedTeam.projectDir}/</span>
522
+ </div>
523
+ )}
524
+
517
525
  {/* Phase 2 indicator */}
518
526
  {phase2.length > 0 && (
519
527
  <div className="flex items-center gap-1.5 text-2xs text-text-3 font-sans">