groove-dev 0.27.8 → 0.27.12
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/groove-icon.png +0 -0
- package/node_modules/@groove-dev/daemon/src/api.js +460 -25
- package/node_modules/@groove-dev/daemon/src/index.js +7 -0
- package/node_modules/@groove-dev/daemon/src/introducer.js +72 -4
- package/node_modules/@groove-dev/daemon/src/journalist.js +66 -11
- package/node_modules/@groove-dev/daemon/src/process.js +67 -7
- package/node_modules/@groove-dev/daemon/src/registry.js +1 -1
- package/node_modules/@groove-dev/daemon/src/repo-import.js +541 -0
- package/node_modules/@groove-dev/daemon/src/rotator.js +28 -1
- package/node_modules/@groove-dev/daemon/src/supervisor.js +2 -1
- package/node_modules/@groove-dev/daemon/src/tunnel-manager.js +504 -0
- package/node_modules/@groove-dev/daemon/src/validate.js +13 -0
- package/node_modules/@groove-dev/daemon/test/journalist.test.js +5 -4
- package/node_modules/@groove-dev/daemon/test/rotator.test.js +4 -1
- package/node_modules/@groove-dev/gui/dist/assets/index-BE6lYcd7.css +1 -0
- package/node_modules/@groove-dev/gui/dist/assets/index-zdzOLAZM.js +677 -0
- package/node_modules/@groove-dev/gui/dist/index.html +2 -2
- package/node_modules/@groove-dev/gui/src/app.css +14 -0
- package/node_modules/@groove-dev/gui/src/app.jsx +13 -0
- package/node_modules/@groove-dev/gui/src/components/agents/agent-config.jsx +130 -1
- package/node_modules/@groove-dev/gui/src/components/agents/agent-feed.jsx +2 -2
- package/node_modules/@groove-dev/gui/src/components/agents/agent-mdfiles.jsx +43 -1
- package/node_modules/@groove-dev/gui/src/components/agents/spawn-wizard.jsx +141 -1
- package/node_modules/@groove-dev/gui/src/components/dashboard/fleet-panel.jsx +3 -3
- package/node_modules/@groove-dev/gui/src/components/dashboard/intel-panel.jsx +4 -4
- package/node_modules/@groove-dev/gui/src/components/dashboard/routing-chart.jsx +3 -3
- package/node_modules/@groove-dev/gui/src/components/dashboard/team-burn-panel.jsx +1 -1
- package/node_modules/@groove-dev/gui/src/components/layout/activity-bar.jsx +4 -4
- package/node_modules/@groove-dev/gui/src/components/layout/app-shell.jsx +7 -1
- package/node_modules/@groove-dev/gui/src/components/layout/breadcrumb-bar.jsx +26 -8
- package/node_modules/@groove-dev/gui/src/components/layout/command-palette.jsx +14 -4
- package/node_modules/@groove-dev/gui/src/components/layout/status-bar.jsx +46 -11
- package/node_modules/@groove-dev/gui/src/components/marketplace/repo-card.jsx +64 -0
- package/node_modules/@groove-dev/gui/src/components/marketplace/repo-import.jsx +363 -0
- package/node_modules/@groove-dev/gui/src/components/marketplace/repo-nuke-dialog.jsx +68 -0
- package/node_modules/@groove-dev/gui/src/components/pro/pro-gate.jsx +22 -0
- package/node_modules/@groove-dev/gui/src/components/pro/upgrade-card.jsx +48 -0
- package/node_modules/@groove-dev/gui/src/components/settings/quick-connect.jsx +129 -0
- package/node_modules/@groove-dev/gui/src/components/settings/remote-server-card.jsx +243 -0
- package/node_modules/@groove-dev/gui/src/components/settings/server-dialog.jsx +192 -0
- package/node_modules/@groove-dev/gui/src/components/ui/approval-modal.jsx +63 -0
- package/node_modules/@groove-dev/gui/src/components/ui/toast.jsx +1 -1
- package/node_modules/@groove-dev/gui/src/lib/edition.js +4 -0
- package/node_modules/@groove-dev/gui/src/lib/electron.js +25 -0
- package/node_modules/@groove-dev/gui/src/lib/status.js +1 -0
- package/node_modules/@groove-dev/gui/src/stores/groove.js +139 -6
- package/node_modules/@groove-dev/gui/src/views/dashboard.jsx +38 -39
- package/node_modules/@groove-dev/gui/src/views/marketplace.jsx +82 -0
- package/node_modules/@groove-dev/gui/src/views/settings.jsx +66 -0
- package/node_modules/@groove-dev/gui/vite.config.js +3 -0
- package/package.json +7 -2
- package/packages/daemon/src/api.js +460 -25
- package/packages/daemon/src/index.js +7 -0
- package/packages/daemon/src/introducer.js +72 -4
- package/packages/daemon/src/journalist.js +66 -11
- package/packages/daemon/src/process.js +67 -7
- package/packages/daemon/src/registry.js +1 -1
- package/packages/daemon/src/repo-import.js +541 -0
- package/packages/daemon/src/rotator.js +28 -1
- package/packages/daemon/src/supervisor.js +2 -1
- package/packages/daemon/src/tunnel-manager.js +504 -0
- package/packages/daemon/src/validate.js +13 -0
- package/packages/gui/dist/assets/index-BE6lYcd7.css +1 -0
- package/packages/gui/dist/assets/index-zdzOLAZM.js +677 -0
- package/packages/gui/dist/index.html +2 -2
- package/packages/gui/node_modules/.vite/deps/@codemirror_lang-html.js +3 -3
- package/packages/gui/node_modules/.vite/deps/@codemirror_lang-javascript.js +2 -2
- package/packages/gui/node_modules/.vite/deps/@codemirror_lang-markdown.js +3 -3
- package/packages/gui/node_modules/.vite/deps/@codemirror_lang-python.js +5 -5
- package/packages/gui/node_modules/.vite/deps/@radix-ui_react-dialog.js +3 -3
- package/packages/gui/node_modules/.vite/deps/@radix-ui_react-scroll-area.js +1 -1
- package/packages/gui/node_modules/.vite/deps/@radix-ui_react-tabs.js +5 -5
- package/packages/gui/node_modules/.vite/deps/@radix-ui_react-tooltip.js +3 -3
- package/packages/gui/node_modules/.vite/deps/_metadata.json +53 -53
- package/packages/gui/node_modules/.vite/deps/{chunk-WYSQD5ZG.js → chunk-DH7AESXW.js} +2 -2
- package/packages/gui/node_modules/.vite/deps/{chunk-KXLIKZFX.js → chunk-GFE3G4IN.js} +133 -133
- package/packages/gui/node_modules/.vite/deps/chunk-GFE3G4IN.js.map +7 -0
- package/packages/gui/node_modules/.vite/deps/{chunk-3LBP22MX.js → chunk-LKZVMLRH.js} +6 -6
- package/packages/gui/node_modules/.vite/deps/{chunk-J6DMOQWP.js → chunk-MCVDVNE5.js} +2 -2
- package/packages/gui/node_modules/.vite/deps/{chunk-3Q7HT7ZF.js → chunk-SPKVQGZX.js} +6 -6
- package/packages/gui/src/app.css +14 -0
- package/packages/gui/src/app.jsx +13 -0
- package/packages/gui/src/components/agents/agent-config.jsx +130 -1
- package/packages/gui/src/components/agents/agent-feed.jsx +2 -2
- package/packages/gui/src/components/agents/agent-mdfiles.jsx +43 -1
- package/packages/gui/src/components/agents/spawn-wizard.jsx +141 -1
- package/packages/gui/src/components/dashboard/fleet-panel.jsx +3 -3
- package/packages/gui/src/components/dashboard/intel-panel.jsx +4 -4
- package/packages/gui/src/components/dashboard/routing-chart.jsx +3 -3
- package/packages/gui/src/components/dashboard/team-burn-panel.jsx +1 -1
- package/packages/gui/src/components/layout/activity-bar.jsx +4 -4
- package/packages/gui/src/components/layout/app-shell.jsx +7 -1
- package/packages/gui/src/components/layout/breadcrumb-bar.jsx +26 -8
- package/packages/gui/src/components/layout/command-palette.jsx +14 -4
- package/packages/gui/src/components/layout/status-bar.jsx +46 -11
- package/packages/gui/src/components/marketplace/repo-card.jsx +64 -0
- package/packages/gui/src/components/marketplace/repo-import.jsx +363 -0
- package/packages/gui/src/components/marketplace/repo-nuke-dialog.jsx +68 -0
- package/packages/gui/src/components/pro/pro-gate.jsx +22 -0
- package/packages/gui/src/components/pro/upgrade-card.jsx +48 -0
- package/packages/gui/src/components/settings/quick-connect.jsx +129 -0
- package/packages/gui/src/components/settings/remote-server-card.jsx +243 -0
- package/packages/gui/src/components/settings/server-dialog.jsx +192 -0
- package/packages/gui/src/components/ui/approval-modal.jsx +63 -0
- package/packages/gui/src/components/ui/toast.jsx +1 -1
- package/packages/gui/src/lib/edition.js +4 -0
- package/packages/gui/src/lib/electron.js +25 -0
- package/packages/gui/src/lib/status.js +1 -0
- package/packages/gui/src/stores/groove.js +139 -6
- package/packages/gui/src/views/dashboard.jsx +38 -39
- package/packages/gui/src/views/marketplace.jsx +82 -0
- package/packages/gui/src/views/settings.jsx +66 -0
- package/packages/gui/vite.config.js +3 -0
- package/integrations/FEDERATION_PLAN.md +0 -583
- package/integrations/VOICE_PLAN.md +0 -232
- package/node_modules/@groove-dev/gui/dist/assets/index-CwmR3-HY.css +0 -1
- package/node_modules/@groove-dev/gui/dist/assets/index-DiCjVtQL.js +0 -652
- package/packages/gui/dist/assets/index-CwmR3-HY.css +0 -1
- package/packages/gui/dist/assets/index-DiCjVtQL.js +0 -652
- package/packages/gui/node_modules/.vite/deps/chunk-KXLIKZFX.js.map +0 -7
- package/test-slack.mjs +0 -28
- /package/packages/gui/node_modules/.vite/deps/{chunk-WYSQD5ZG.js.map → chunk-DH7AESXW.js.map} +0 -0
- /package/packages/gui/node_modules/.vite/deps/{chunk-3LBP22MX.js.map → chunk-LKZVMLRH.js.map} +0 -0
- /package/packages/gui/node_modules/.vite/deps/{chunk-J6DMOQWP.js.map → chunk-MCVDVNE5.js.map} +0 -0
- /package/packages/gui/node_modules/.vite/deps/{chunk-3Q7HT7ZF.js.map → chunk-SPKVQGZX.js.map} +0 -0
|
@@ -18,9 +18,13 @@ import { useToast } from '../lib/hooks/use-toast';
|
|
|
18
18
|
import { fmtNum, timeAgo } from '../lib/format';
|
|
19
19
|
import { useGrooveStore } from '../stores/groove';
|
|
20
20
|
import { IntegrationWizard, GoogleWorkspaceWizard } from '../components/marketplace/integration-wizard';
|
|
21
|
+
import { RepoImport } from '../components/marketplace/repo-import';
|
|
22
|
+
import { RepoCard } from '../components/marketplace/repo-card';
|
|
23
|
+
import { RepoNukeDialog } from '../components/marketplace/repo-nuke-dialog';
|
|
21
24
|
import {
|
|
22
25
|
ChevronLeft, ChevronDown, Sparkles, Plug, LogIn, LogOut,
|
|
23
26
|
User, Upload, Package, Download, ShoppingBag, RefreshCw, Trash2,
|
|
27
|
+
GitBranch,
|
|
24
28
|
} from 'lucide-react';
|
|
25
29
|
|
|
26
30
|
// ── Skill Detail ─────────────────────────────────────────
|
|
@@ -623,6 +627,82 @@ function AuthArea() {
|
|
|
623
627
|
);
|
|
624
628
|
}
|
|
625
629
|
|
|
630
|
+
// ── GitHub Browse ───────────────────────────────────────
|
|
631
|
+
function GitHubBrowse() {
|
|
632
|
+
const importedRepos = useGrooveStore((s) => s.importedRepos);
|
|
633
|
+
const fetchImportedRepos = useGrooveStore((s) => s.fetchImportedRepos);
|
|
634
|
+
const softRemoveRepo = useGrooveStore((s) => s.softRemoveRepo);
|
|
635
|
+
const hardNukeRepo = useGrooveStore((s) => s.hardNukeRepo);
|
|
636
|
+
const toast = useToast();
|
|
637
|
+
|
|
638
|
+
const [nukeTarget, setNukeTarget] = useState(null);
|
|
639
|
+
|
|
640
|
+
useEffect(() => { fetchImportedRepos(); }, []);
|
|
641
|
+
|
|
642
|
+
async function handleRemove(repo) {
|
|
643
|
+
try {
|
|
644
|
+
await softRemoveRepo(repo.id);
|
|
645
|
+
toast.success(`Removed ${repo.repoName || repo.name}`);
|
|
646
|
+
} catch (err) {
|
|
647
|
+
toast.error('Remove failed', err.message);
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
async function handleNukeConfirm(deleteFiles) {
|
|
652
|
+
if (!nukeTarget) return;
|
|
653
|
+
try {
|
|
654
|
+
if (deleteFiles) {
|
|
655
|
+
await hardNukeRepo(nukeTarget.id);
|
|
656
|
+
} else {
|
|
657
|
+
await softRemoveRepo(nukeTarget.id);
|
|
658
|
+
}
|
|
659
|
+
toast.success(`${deleteFiles ? 'Nuked' : 'Removed'} ${nukeTarget.name || nukeTarget.repo}`);
|
|
660
|
+
} catch (err) {
|
|
661
|
+
toast.error('Nuke failed', err.message);
|
|
662
|
+
}
|
|
663
|
+
setNukeTarget(null);
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
return (
|
|
667
|
+
<ScrollArea className="h-full">
|
|
668
|
+
<div className="px-5 py-4 space-y-5">
|
|
669
|
+
<RepoImport />
|
|
670
|
+
|
|
671
|
+
{importedRepos.length > 0 && (
|
|
672
|
+
<div>
|
|
673
|
+
<h3 className="text-xs font-semibold text-text-2 font-sans uppercase tracking-wider mb-3">
|
|
674
|
+
Recently Imported
|
|
675
|
+
</h3>
|
|
676
|
+
<div className="space-y-2">
|
|
677
|
+
{(Array.isArray(importedRepos) ? importedRepos : []).map((repo) => (
|
|
678
|
+
<RepoCard
|
|
679
|
+
key={repo.id}
|
|
680
|
+
repo={repo}
|
|
681
|
+
onRemove={() => handleRemove(repo)}
|
|
682
|
+
onNuke={() => setNukeTarget(repo)}
|
|
683
|
+
/>
|
|
684
|
+
))}
|
|
685
|
+
</div>
|
|
686
|
+
</div>
|
|
687
|
+
)}
|
|
688
|
+
|
|
689
|
+
{importedRepos.length === 0 && (
|
|
690
|
+
<div className="text-center py-16 text-text-4 font-sans text-sm">
|
|
691
|
+
No repos imported yet. Paste a GitHub URL above to get started.
|
|
692
|
+
</div>
|
|
693
|
+
)}
|
|
694
|
+
</div>
|
|
695
|
+
|
|
696
|
+
<RepoNukeDialog
|
|
697
|
+
repo={nukeTarget}
|
|
698
|
+
open={!!nukeTarget}
|
|
699
|
+
onClose={() => setNukeTarget(null)}
|
|
700
|
+
onConfirm={handleNukeConfirm}
|
|
701
|
+
/>
|
|
702
|
+
</ScrollArea>
|
|
703
|
+
);
|
|
704
|
+
}
|
|
705
|
+
|
|
626
706
|
// ── Main ─────────────────────────────────────────────────
|
|
627
707
|
export default function MarketplaceView() {
|
|
628
708
|
const [tab, setTab] = useState('skills');
|
|
@@ -630,6 +710,7 @@ export default function MarketplaceView() {
|
|
|
630
710
|
const tabs = [
|
|
631
711
|
{ id: 'skills', label: 'Skills', icon: Sparkles },
|
|
632
712
|
{ id: 'integrations', label: 'Integrations', icon: Plug },
|
|
713
|
+
{ id: 'github', label: 'GitHub', icon: GitBranch },
|
|
633
714
|
{ id: 'library', label: 'My Library', icon: Package },
|
|
634
715
|
];
|
|
635
716
|
|
|
@@ -662,6 +743,7 @@ export default function MarketplaceView() {
|
|
|
662
743
|
<div className="flex-1 min-h-0">
|
|
663
744
|
{tab === 'skills' && <SkillsBrowse />}
|
|
664
745
|
{tab === 'integrations' && <IntegrationsBrowse />}
|
|
746
|
+
{tab === 'github' && <GitHubBrowse />}
|
|
665
747
|
{tab === 'library' && <MyLibrary />}
|
|
666
748
|
</div>
|
|
667
749
|
</div>
|
|
@@ -12,6 +12,9 @@ import { Sheet, SheetContent } from '../components/ui/sheet';
|
|
|
12
12
|
import { api } from '../lib/api';
|
|
13
13
|
import { cn } from '../lib/cn';
|
|
14
14
|
import { fmtUptime } from '../lib/format';
|
|
15
|
+
import { RemoteServerCard } from '../components/settings/remote-server-card';
|
|
16
|
+
import { ServerDialog } from '../components/settings/server-dialog';
|
|
17
|
+
import { ProGate } from '../components/pro/pro-gate';
|
|
15
18
|
import {
|
|
16
19
|
Key, Eye, EyeOff, Check, Cpu, ChevronDown,
|
|
17
20
|
FolderOpen, FolderSearch, RotateCw, Users, Gauge, Zap,
|
|
@@ -974,6 +977,9 @@ export default function SettingsView() {
|
|
|
974
977
|
const [gwList, setGwList] = useState([]);
|
|
975
978
|
const [loading, setLoading] = useState(true);
|
|
976
979
|
const [folderBrowserOpen, setFolderBrowserOpen] = useState(false);
|
|
980
|
+
const [serverDialogOpen, setServerDialogOpen] = useState(false);
|
|
981
|
+
const [editingServer, setEditingServer] = useState(null);
|
|
982
|
+
const savedTunnels = useGrooveStore((s) => s.savedTunnels);
|
|
977
983
|
const addToast = useGrooveStore((s) => s.addToast);
|
|
978
984
|
const marketplaceUser = useGrooveStore((s) => s.marketplaceUser);
|
|
979
985
|
const marketplaceAuthenticated = useGrooveStore((s) => s.marketplaceAuthenticated);
|
|
@@ -992,6 +998,7 @@ export default function SettingsView() {
|
|
|
992
998
|
Promise.all([api.get('/providers'), api.get('/config'), api.get('/status'), api.get('/gateways')])
|
|
993
999
|
.then(([p, c, s, g]) => { setProviders(Array.isArray(p) ? p : []); setConfig(c); setDaemonInfo(s); setGwList(Array.isArray(g) ? g : []); setLoading(false); })
|
|
994
1000
|
.catch(() => setLoading(false));
|
|
1001
|
+
useGrooveStore.getState().fetchTunnels();
|
|
995
1002
|
}, []);
|
|
996
1003
|
|
|
997
1004
|
async function addGateway(type) {
|
|
@@ -1221,9 +1228,68 @@ export default function SettingsView() {
|
|
|
1221
1228
|
</div>
|
|
1222
1229
|
</div>
|
|
1223
1230
|
)}
|
|
1231
|
+
|
|
1232
|
+
{/* ═══════ REMOTE SERVERS ═══════ */}
|
|
1233
|
+
<div>
|
|
1234
|
+
<div className="flex items-center gap-2 mb-2.5 px-0.5">
|
|
1235
|
+
<span className="text-2xs font-semibold text-text-3 font-sans uppercase tracking-wider">Remote Servers</span>
|
|
1236
|
+
<div className="flex-1 h-px bg-border-subtle" />
|
|
1237
|
+
</div>
|
|
1238
|
+
<ProGate feature="Remote Access" description="Connect to remote servers via SSH tunnel and manage agents across machines">
|
|
1239
|
+
<div>
|
|
1240
|
+
<div className="flex justify-end mb-2.5">
|
|
1241
|
+
<Button
|
|
1242
|
+
variant="ghost"
|
|
1243
|
+
size="sm"
|
|
1244
|
+
onClick={() => { setEditingServer(null); setServerDialogOpen(true); }}
|
|
1245
|
+
className="h-6 text-2xs gap-1 text-text-3 hover:text-accent"
|
|
1246
|
+
>
|
|
1247
|
+
<Plus size={11} /> Add Server
|
|
1248
|
+
</Button>
|
|
1249
|
+
</div>
|
|
1250
|
+
{savedTunnels.length === 0 ? (
|
|
1251
|
+
<div className="rounded-lg border border-dashed border-border-subtle bg-surface-1/50 px-4 py-6 text-center">
|
|
1252
|
+
<Radio size={20} className="text-text-4 mx-auto mb-2" />
|
|
1253
|
+
<p className="text-xs text-text-3 font-sans">No remote servers configured.</p>
|
|
1254
|
+
<p className="text-2xs text-text-4 font-sans mt-1">Add one to connect to a VPS or remote machine.</p>
|
|
1255
|
+
</div>
|
|
1256
|
+
) : (
|
|
1257
|
+
<div className="grid grid-cols-2 gap-3">
|
|
1258
|
+
{savedTunnels.map((server) => (
|
|
1259
|
+
<RemoteServerCard
|
|
1260
|
+
key={server.id}
|
|
1261
|
+
server={server}
|
|
1262
|
+
onConnect={() => useGrooveStore.getState().connectTunnel(server.id)}
|
|
1263
|
+
onDisconnect={() => useGrooveStore.getState().disconnectTunnel(server.id)}
|
|
1264
|
+
onTest={() => useGrooveStore.getState().testTunnel(server.id)}
|
|
1265
|
+
onEdit={(s) => { setEditingServer(s); setServerDialogOpen(true); }}
|
|
1266
|
+
onDelete={(id) => useGrooveStore.getState().deleteTunnel(id)}
|
|
1267
|
+
/>
|
|
1268
|
+
))}
|
|
1269
|
+
</div>
|
|
1270
|
+
)}
|
|
1271
|
+
</div>
|
|
1272
|
+
</ProGate>
|
|
1273
|
+
</div>
|
|
1274
|
+
|
|
1224
1275
|
</div>
|
|
1225
1276
|
</ScrollArea>
|
|
1226
1277
|
|
|
1278
|
+
{/* Server Dialog */}
|
|
1279
|
+
<ServerDialog
|
|
1280
|
+
open={serverDialogOpen}
|
|
1281
|
+
onOpenChange={setServerDialogOpen}
|
|
1282
|
+
server={editingServer}
|
|
1283
|
+
onSave={async (data) => {
|
|
1284
|
+
if (data.id) {
|
|
1285
|
+
await useGrooveStore.getState().updateTunnel(data.id, data);
|
|
1286
|
+
} else {
|
|
1287
|
+
await useGrooveStore.getState().saveTunnel(data);
|
|
1288
|
+
}
|
|
1289
|
+
addToast('success', data.id ? 'Server updated' : 'Server added');
|
|
1290
|
+
}}
|
|
1291
|
+
/>
|
|
1292
|
+
|
|
1227
1293
|
{/* Folder Browser Modal */}
|
|
1228
1294
|
<FolderBrowser
|
|
1229
1295
|
open={folderBrowserOpen}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "groove-dev",
|
|
3
|
-
"version": "0.27.
|
|
3
|
+
"version": "0.27.12",
|
|
4
4
|
"description": "Open-source agent orchestration layer — the AI company OS. Local model agent engine (GGUF/Ollama/llama-server), HuggingFace model browser, MCP integrations (Slack, Gmail, Stripe, 15+), agent scheduling (cron), business roles (CMO, CFO, EA). GUI dashboard, multi-agent coordination, zero cold-start, infinite sessions. Works with Claude Code, Codex, Gemini CLI, Ollama, any local model.",
|
|
5
5
|
"license": "FSL-1.1-Apache-2.0",
|
|
6
6
|
"author": "Groove Dev <hello@groovedev.ai> (https://groovedev.ai)",
|
|
@@ -43,7 +43,8 @@
|
|
|
43
43
|
"workspaces": [
|
|
44
44
|
"packages/daemon",
|
|
45
45
|
"packages/cli",
|
|
46
|
-
"packages/gui"
|
|
46
|
+
"packages/gui",
|
|
47
|
+
"packages/desktop"
|
|
47
48
|
],
|
|
48
49
|
"engines": {
|
|
49
50
|
"node": ">=20.0.0"
|
|
@@ -52,6 +53,10 @@
|
|
|
52
53
|
"dev:daemon": "npm run dev -w packages/daemon",
|
|
53
54
|
"dev:gui": "npm run dev -w packages/gui",
|
|
54
55
|
"build": "npm run build -w packages/gui",
|
|
56
|
+
"build:pro": "GROOVE_EDITION=pro npm run build -w packages/gui",
|
|
57
|
+
"start:desktop": "npm run start -w packages/desktop",
|
|
58
|
+
"build:desktop": "npm run build -w packages/desktop",
|
|
59
|
+
"dist:desktop": "npm run build:pro && npm run dist -w packages/desktop",
|
|
55
60
|
"test": "node --test packages/daemon/test/*.test.js",
|
|
56
61
|
"prepublishOnly": "npm run build"
|
|
57
62
|
},
|