groove-dev 0.27.66 → 0.27.67
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/cli/package.json +1 -1
- package/node_modules/@groove-dev/daemon/package.json +1 -1
- package/node_modules/@groove-dev/daemon/src/api.js +12 -31
- package/node_modules/@groove-dev/daemon/src/tunnel-manager.js +25 -2
- package/node_modules/@groove-dev/gui/dist/assets/index-MPNqazCA.js +8614 -0
- package/node_modules/@groove-dev/gui/dist/assets/index-YeunozTU.css +1 -0
- package/node_modules/@groove-dev/gui/dist/index.html +2 -2
- package/node_modules/@groove-dev/gui/package.json +1 -1
- package/node_modules/@groove-dev/gui/src/app.jsx +5 -1
- package/node_modules/@groove-dev/gui/src/components/agents/agent-config.jsx +3 -1
- package/node_modules/@groove-dev/gui/src/components/agents/folder-browser.jsx +5 -4
- package/node_modules/@groove-dev/gui/src/components/layout/app-shell.jsx +1 -2
- package/node_modules/@groove-dev/gui/src/components/layout/breadcrumb-bar.jsx +1 -9
- package/node_modules/@groove-dev/gui/src/components/layout/project-picker.jsx +3 -1
- package/node_modules/@groove-dev/gui/src/components/layout/welcome-splash.jsx +132 -0
- package/node_modules/@groove-dev/gui/src/components/onboarding/setup-wizard.jsx +3 -1
- package/node_modules/@groove-dev/gui/src/components/pro/upgrade-modal.jsx +1 -2
- package/node_modules/@groove-dev/gui/src/components/settings/server-dialog.jsx +2 -0
- package/node_modules/@groove-dev/gui/src/components/settings/ssh-wizard.jsx +3 -0
- package/node_modules/@groove-dev/gui/src/stores/groove.js +10 -2
- package/node_modules/@groove-dev/gui/src/views/agents.jsx +14 -1
- package/node_modules/@groove-dev/gui/src/views/settings.jsx +3 -1
- package/package.json +1 -1
- package/packages/cli/package.json +1 -1
- package/packages/daemon/package.json +1 -1
- package/packages/daemon/src/api.js +12 -31
- package/packages/daemon/src/tunnel-manager.js +25 -2
- package/packages/gui/dist/assets/index-MPNqazCA.js +8614 -0
- package/packages/gui/dist/assets/index-YeunozTU.css +1 -0
- package/packages/gui/dist/index.html +2 -2
- package/packages/gui/package.json +1 -1
- package/packages/gui/src/app.jsx +5 -1
- package/packages/gui/src/components/agents/agent-config.jsx +3 -1
- package/packages/gui/src/components/agents/folder-browser.jsx +5 -4
- package/packages/gui/src/components/layout/app-shell.jsx +1 -2
- package/packages/gui/src/components/layout/breadcrumb-bar.jsx +1 -9
- package/packages/gui/src/components/layout/project-picker.jsx +3 -1
- package/packages/gui/src/components/layout/welcome-splash.jsx +132 -0
- package/packages/gui/src/components/onboarding/setup-wizard.jsx +3 -1
- package/packages/gui/src/components/pro/upgrade-modal.jsx +1 -2
- package/packages/gui/src/components/settings/server-dialog.jsx +2 -0
- package/packages/gui/src/components/settings/ssh-wizard.jsx +3 -0
- package/packages/gui/src/stores/groove.js +10 -2
- package/packages/gui/src/views/agents.jsx +14 -1
- package/packages/gui/src/views/settings.jsx +3 -1
- package/node_modules/@groove-dev/gui/dist/assets/index-BvvSZvQz.js +0 -8614
- package/node_modules/@groove-dev/gui/dist/assets/index-DFp5IOnd.css +0 -1
- package/packages/gui/dist/assets/index-BvvSZvQz.js +0 -8614
- package/packages/gui/dist/assets/index-DFp5IOnd.css +0 -1
|
@@ -34,6 +34,7 @@ export const useGrooveStore = create((set, get) => ({
|
|
|
34
34
|
ws: null,
|
|
35
35
|
daemonHost: null,
|
|
36
36
|
tunneled: false,
|
|
37
|
+
remoteHomedir: null,
|
|
37
38
|
|
|
38
39
|
// ── Teams ─────────────────────────────────────────────────
|
|
39
40
|
teams: [],
|
|
@@ -172,6 +173,7 @@ export const useGrooveStore = create((set, get) => ({
|
|
|
172
173
|
const isTunneled = String(s.port) !== browserPort;
|
|
173
174
|
if (isTunneled) updates.tunneled = true;
|
|
174
175
|
if (s.version) updates.version = s.version;
|
|
176
|
+
if (s.homedir) updates.remoteHomedir = s.homedir;
|
|
175
177
|
if (Object.keys(updates).length > 0) set(updates);
|
|
176
178
|
if (isTunneled) get().fetchProjectDir();
|
|
177
179
|
}).catch(() => {});
|
|
@@ -907,7 +909,7 @@ export const useGrooveStore = create((set, get) => ({
|
|
|
907
909
|
clearInterval(plannerPollInterval);
|
|
908
910
|
plannerPollInterval = null;
|
|
909
911
|
}
|
|
910
|
-
set({ connected: false, hydrated: false, ws: null, daemonHost: null, tunneled: false });
|
|
912
|
+
set({ connected: false, hydrated: false, ws: null, daemonHost: null, tunneled: false, remoteHomedir: null });
|
|
911
913
|
setTimeout(() => get().connect(), 2000);
|
|
912
914
|
};
|
|
913
915
|
ws.onerror = () => ws.close();
|
|
@@ -1540,7 +1542,13 @@ export const useGrooveStore = create((set, get) => ({
|
|
|
1540
1542
|
get().addToast('success', `Spawned ${agent.name}`);
|
|
1541
1543
|
return agent;
|
|
1542
1544
|
} catch (err) {
|
|
1543
|
-
|
|
1545
|
+
let detail = err.message;
|
|
1546
|
+
if (detail?.includes('workingDir must be within project directory')) {
|
|
1547
|
+
const projDir = get().projectDir || 'unknown';
|
|
1548
|
+
const workDir = config.workingDir || 'default';
|
|
1549
|
+
detail = `workingDir "${workDir}" is outside project directory "${projDir}". Change the project directory or pick a subfolder within it.`;
|
|
1550
|
+
}
|
|
1551
|
+
get().addToast('error', 'Spawn failed', detail);
|
|
1544
1552
|
throw err;
|
|
1545
1553
|
}
|
|
1546
1554
|
},
|
|
@@ -10,7 +10,7 @@ import { RootNode } from '../components/agents/root-node';
|
|
|
10
10
|
import { cn } from '../lib/cn';
|
|
11
11
|
import { Button } from '../components/ui/button';
|
|
12
12
|
import { Badge } from '../components/ui/badge';
|
|
13
|
-
import { Plus, Users, Zap, X, Check, Rocket, Server, Monitor, Code2, TestTube, Shield, Pencil, Copy, Trash2, ChevronDown, ChevronLeft, ChevronRight, FolderOpen } from 'lucide-react';
|
|
13
|
+
import { Plus, Users, Zap, X, Check, Rocket, Server, Monitor, Code2, TestTube, Shield, Pencil, Copy, Trash2, ChevronDown, ChevronLeft, ChevronRight, FolderOpen, Radio } from 'lucide-react';
|
|
14
14
|
import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuSeparator } from '../components/ui/context-menu';
|
|
15
15
|
|
|
16
16
|
const NODE_TYPES = { agentNode: AgentNode, rootNode: RootNode };
|
|
@@ -629,6 +629,19 @@ function EmptyState({ onPlanner, onSpawn }) {
|
|
|
629
629
|
<div className="text-xs text-text-3 font-sans mt-0.5">Choose a role and configure</div>
|
|
630
630
|
</div>
|
|
631
631
|
</button>
|
|
632
|
+
|
|
633
|
+
<button
|
|
634
|
+
onClick={() => useGrooveStore.getState().toggleQuickConnect()}
|
|
635
|
+
className="w-full flex items-center gap-3 p-4 rounded-lg border border-border bg-surface-1 hover:bg-surface-2 hover:border-border transition-all cursor-pointer group text-left"
|
|
636
|
+
>
|
|
637
|
+
<div className="w-10 h-10 rounded-lg bg-surface-4 flex items-center justify-center group-hover:scale-110 transition-transform flex-shrink-0">
|
|
638
|
+
<Radio size={20} className="text-text-1" />
|
|
639
|
+
</div>
|
|
640
|
+
<div className="min-w-0">
|
|
641
|
+
<div className="text-sm font-semibold text-text-0 font-sans">Connect to Remote Server</div>
|
|
642
|
+
<div className="text-xs text-text-3 font-sans mt-0.5">SSH tunnel to a remote machine</div>
|
|
643
|
+
</div>
|
|
644
|
+
</button>
|
|
632
645
|
</div>
|
|
633
646
|
|
|
634
647
|
{window.groove?.openFolder && (
|
|
@@ -1035,6 +1035,7 @@ export default function SettingsView() {
|
|
|
1035
1035
|
const [loading, setLoading] = useState(true);
|
|
1036
1036
|
const [folderBrowserOpen, setFolderBrowserOpen] = useState(false);
|
|
1037
1037
|
const addToast = useGrooveStore((s) => s.addToast);
|
|
1038
|
+
const remoteHomedir = useGrooveStore((s) => s.remoteHomedir);
|
|
1038
1039
|
|
|
1039
1040
|
function loadProviders() {
|
|
1040
1041
|
api.get('/providers').then((d) => setProviders(Array.isArray(d) ? d : [])).catch(() => {});
|
|
@@ -1296,7 +1297,8 @@ export default function SettingsView() {
|
|
|
1296
1297
|
<FolderBrowser
|
|
1297
1298
|
open={folderBrowserOpen}
|
|
1298
1299
|
onOpenChange={setFolderBrowserOpen}
|
|
1299
|
-
currentPath={config?.defaultWorkingDir || '/'}
|
|
1300
|
+
currentPath={config?.defaultWorkingDir || remoteHomedir || '/'}
|
|
1301
|
+
homePath={remoteHomedir}
|
|
1300
1302
|
onSelect={(dir) => updateConfig('defaultWorkingDir', dir)}
|
|
1301
1303
|
/>
|
|
1302
1304
|
</div>
|