groove-dev 0.27.64 → 0.27.66
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/README.md +1 -1
- 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 +103 -31
- package/node_modules/@groove-dev/daemon/src/providers/claude-code.js +0 -1
- package/node_modules/@groove-dev/gui/dist/assets/{index-DiiEKVEo.js → index-BvvSZvQz.js} +1735 -1735
- package/node_modules/@groove-dev/gui/dist/assets/index-DFp5IOnd.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/components/network/activity-chart.jsx +10 -14
- package/node_modules/@groove-dev/gui/src/components/network/compute-header.jsx +67 -200
- package/node_modules/@groove-dev/gui/src/components/network/earnings-card.jsx +30 -0
- package/node_modules/@groove-dev/gui/src/components/network/fleet-table.jsx +114 -72
- package/node_modules/@groove-dev/gui/src/components/network/identity-bar.jsx +94 -0
- package/node_modules/@groove-dev/gui/src/components/network/node-card.jsx +88 -0
- package/node_modules/@groove-dev/gui/src/components/network/wallet-view.jsx +77 -0
- package/node_modules/@groove-dev/gui/src/components/onboarding/setup-wizard.jsx +1 -1
- package/node_modules/@groove-dev/gui/src/stores/groove.js +13 -0
- package/node_modules/@groove-dev/gui/src/views/network.jsx +59 -18
- 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 +103 -31
- package/packages/daemon/src/providers/claude-code.js +0 -1
- package/packages/gui/dist/assets/{index-DiiEKVEo.js → index-BvvSZvQz.js} +1735 -1735
- package/packages/gui/dist/assets/index-DFp5IOnd.css +1 -0
- package/packages/gui/dist/index.html +2 -2
- package/packages/gui/package.json +1 -1
- package/packages/gui/src/components/network/activity-chart.jsx +10 -14
- package/packages/gui/src/components/network/compute-header.jsx +67 -200
- package/packages/gui/src/components/network/earnings-card.jsx +30 -0
- package/packages/gui/src/components/network/fleet-table.jsx +114 -72
- package/packages/gui/src/components/network/identity-bar.jsx +94 -0
- package/packages/gui/src/components/network/node-card.jsx +88 -0
- package/packages/gui/src/components/network/wallet-view.jsx +77 -0
- package/packages/gui/src/components/onboarding/setup-wizard.jsx +1 -1
- package/packages/gui/src/stores/groove.js +13 -0
- package/packages/gui/src/views/network.jsx +59 -18
- package/node_modules/@groove-dev/gui/dist/assets/index-B3AqeyS4.css +0 -1
- package/packages/gui/dist/assets/index-B3AqeyS4.css +0 -1
package/README.md
CHANGED
|
@@ -216,7 +216,7 @@ Append-only, `0600` permissions, auto-rotates at 5MB. When team auth is added, e
|
|
|
216
216
|
|
|
217
217
|
| Provider | Auth | Models |
|
|
218
218
|
|----------|------|--------|
|
|
219
|
-
| **Claude Code** | Subscription | Opus 4.
|
|
219
|
+
| **Claude Code** | Subscription | Opus 4.6, Sonnet 4.6, Haiku 4.5 |
|
|
220
220
|
| **Codex** | API Key | o3, o4-mini, GPT-4.1, GPT-4.1 Mini, GPT-4.1 Nano |
|
|
221
221
|
| **Gemini CLI** | API Key | 3.1 Pro, 3 Flash, 3.1 Flash Lite, 2.5 Pro, 2.5 Flash |
|
|
222
222
|
| **Ollama** | Local | Any |
|
|
@@ -4145,9 +4145,36 @@ Keep responses concise. Help them think, don't lecture them about the system the
|
|
|
4145
4145
|
|
|
4146
4146
|
// Network node lifecycle (gated)
|
|
4147
4147
|
|
|
4148
|
+
let _localHwCache = null;
|
|
4149
|
+
function getLocalHardware() {
|
|
4150
|
+
if (!_localHwCache) {
|
|
4151
|
+
const sys = OllamaProvider.getSystemHardware();
|
|
4152
|
+
const vramGb = sys.gpu?.vram || 0;
|
|
4153
|
+
const ramGb = sys.totalRamGb || 0;
|
|
4154
|
+
const vramMb = vramGb * 1024;
|
|
4155
|
+
const ramMb = ramGb * 1024;
|
|
4156
|
+
const fmtGb = (gb) => gb > 0 ? `${gb} GB` : null;
|
|
4157
|
+
_localHwCache = {
|
|
4158
|
+
device: sys.gpu?.type === 'nvidia' ? 'cuda' : sys.gpu?.type === 'apple-silicon' ? 'metal' : 'cpu',
|
|
4159
|
+
gpu: sys.gpu?.name || null,
|
|
4160
|
+
memory: fmtGb(vramGb) || fmtGb(ramGb),
|
|
4161
|
+
vram: fmtGb(vramGb),
|
|
4162
|
+
ram: fmtGb(ramGb),
|
|
4163
|
+
cpuCores: sys.cores || null,
|
|
4164
|
+
ram_mb: ramMb,
|
|
4165
|
+
vram_mb: vramMb,
|
|
4166
|
+
gpu_model: sys.gpu?.name || null,
|
|
4167
|
+
cpu_cores: sys.cores || 0,
|
|
4168
|
+
bandwidth_mbps: 0,
|
|
4169
|
+
max_context_length: 0,
|
|
4170
|
+
};
|
|
4171
|
+
}
|
|
4172
|
+
return _localHwCache;
|
|
4173
|
+
}
|
|
4174
|
+
|
|
4148
4175
|
function snapshotNode() {
|
|
4149
4176
|
const n = daemon.networkNode || {};
|
|
4150
|
-
const hw = n.hardware ||
|
|
4177
|
+
const hw = n.hardware || getLocalHardware();
|
|
4151
4178
|
return {
|
|
4152
4179
|
active: !!n.active,
|
|
4153
4180
|
status: n.status || 'stopped',
|
|
@@ -4155,7 +4182,7 @@ Keep responses concise. Help them think, don't lecture them about the system the
|
|
|
4155
4182
|
layers: n.layers || null,
|
|
4156
4183
|
model: n.model || null,
|
|
4157
4184
|
sessions: n.sessions || 0,
|
|
4158
|
-
hardware:
|
|
4185
|
+
hardware: hw,
|
|
4159
4186
|
installed: !!(daemon.config?.networkBeta?.installed),
|
|
4160
4187
|
ram_mb: Number(hw.ram_mb) || 0,
|
|
4161
4188
|
vram_mb: Number(hw.vram_mb) || 0,
|
|
@@ -4212,6 +4239,12 @@ Keep responses concise. Help them think, don't lecture them about the system the
|
|
|
4212
4239
|
cpuCores: caps.cpu_cores || null,
|
|
4213
4240
|
bandwidthMbps: caps.bandwidth_mbps || null,
|
|
4214
4241
|
maxContext: caps.max_context_length || null,
|
|
4242
|
+
ram_mb: Number(caps.ram_mb) || 0,
|
|
4243
|
+
vram_mb: Number(caps.vram_mb) || 0,
|
|
4244
|
+
gpu_model: caps.gpu_model || null,
|
|
4245
|
+
cpu_cores: Number(caps.cpu_cores) || 0,
|
|
4246
|
+
bandwidth_mbps: Number(caps.bandwidth_mbps) || 0,
|
|
4247
|
+
max_context_length: Number(caps.max_context_length) || 0,
|
|
4215
4248
|
};
|
|
4216
4249
|
}
|
|
4217
4250
|
|
|
@@ -4282,7 +4315,7 @@ Keep responses concise. Help them think, don't lecture them about the system the
|
|
|
4282
4315
|
layers: null,
|
|
4283
4316
|
model: null,
|
|
4284
4317
|
sessions: 0,
|
|
4285
|
-
hardware:
|
|
4318
|
+
hardware: getLocalHardware(),
|
|
4286
4319
|
startedAt: Date.now(),
|
|
4287
4320
|
events: [],
|
|
4288
4321
|
};
|
|
@@ -4454,14 +4487,15 @@ Keep responses concise. Help them think, don't lecture them about the system the
|
|
|
4454
4487
|
daemon.networkNode.layers = self.layers;
|
|
4455
4488
|
changed = true;
|
|
4456
4489
|
}
|
|
4457
|
-
|
|
4458
|
-
|
|
4459
|
-
|
|
4460
|
-
|
|
4461
|
-
|
|
4462
|
-
|
|
4463
|
-
|
|
4464
|
-
|
|
4490
|
+
const prev = daemon.networkNode.hardware || getLocalHardware();
|
|
4491
|
+
const enriched = { ...prev };
|
|
4492
|
+
if (self.device) enriched.device = self.device;
|
|
4493
|
+
if (self.gpu_model) { enriched.gpu = self.gpu_model; enriched.gpu_model = self.gpu_model; }
|
|
4494
|
+
if (Number(self.ram_mb) > 0) { enriched.ram_mb = Number(self.ram_mb); }
|
|
4495
|
+
if (Number(self.vram_mb) > 0) { enriched.vram_mb = Number(self.vram_mb); enriched.memory = enriched.vram_mb >= 1024 ? `${(enriched.vram_mb / 1024).toFixed(1)} GB` : `${enriched.vram_mb} MB`; }
|
|
4496
|
+
if (Number(self.cpu_cores) > 0) { enriched.cpu_cores = Number(self.cpu_cores); enriched.cpuCores = Number(self.cpu_cores); }
|
|
4497
|
+
daemon.networkNode.hardware = enriched;
|
|
4498
|
+
changed = true;
|
|
4465
4499
|
}
|
|
4466
4500
|
const availModel = Array.isArray(data.models)
|
|
4467
4501
|
? data.models.find((m) => m && m.available !== false)
|
|
@@ -4474,25 +4508,39 @@ Keep responses concise. Help them think, don't lecture them about the system the
|
|
|
4474
4508
|
}
|
|
4475
4509
|
|
|
4476
4510
|
const capStr = (s, max = 200) => (typeof s === 'string' ? s.slice(0, max) : s);
|
|
4477
|
-
const
|
|
4478
|
-
|
|
4479
|
-
|
|
4480
|
-
|
|
4481
|
-
|
|
4482
|
-
|
|
4483
|
-
|
|
4484
|
-
|
|
4485
|
-
|
|
4486
|
-
|
|
4487
|
-
|
|
4488
|
-
|
|
4489
|
-
|
|
4490
|
-
|
|
4491
|
-
|
|
4492
|
-
|
|
4493
|
-
|
|
4494
|
-
|
|
4495
|
-
|
|
4511
|
+
const selfId = daemon.networkNode?.nodeId;
|
|
4512
|
+
const localHw = getLocalHardware();
|
|
4513
|
+
const safeNodes = (Array.isArray(data.nodes) ? data.nodes : []).map((n) => {
|
|
4514
|
+
const nid = n.node_id || n.nodeId || '';
|
|
4515
|
+
const isSelf = selfId && nid && (nid === selfId || (nid.length >= 6 && selfId.startsWith(nid.replace(/\.{2,}$/, ''))));
|
|
4516
|
+
const base = {
|
|
4517
|
+
node_id: capStr(nid),
|
|
4518
|
+
device: capStr(n.device),
|
|
4519
|
+
layers: Array.isArray(n.layers) ? n.layers.slice(0, 2) : n.layers,
|
|
4520
|
+
status: capStr(n.status, 50),
|
|
4521
|
+
active_sessions: n.active_sessions ?? 0,
|
|
4522
|
+
ram_mb: Number(n.ram_mb) || 0,
|
|
4523
|
+
vram_mb: Number(n.vram_mb) || 0,
|
|
4524
|
+
gpu_model: capStr(n.gpu_model || '', 200),
|
|
4525
|
+
cpu_cores: Number(n.cpu_cores) || 0,
|
|
4526
|
+
bandwidth_mbps: Number(n.bandwidth_mbps) || 0.0,
|
|
4527
|
+
max_context_length: Number(n.max_context_length) || 0,
|
|
4528
|
+
load: Number(n.load) || 0.0,
|
|
4529
|
+
gpu_utilization_pct: Number(n.gpu_utilization_pct) || 0,
|
|
4530
|
+
vram_used_mb: Number(n.vram_used_mb) || 0,
|
|
4531
|
+
ram_used_mb: Number(n.ram_used_mb) || 0,
|
|
4532
|
+
ram_pct: Number(n.ram_pct) || 0,
|
|
4533
|
+
uptime_seconds: Number(n.uptime_seconds) || 0,
|
|
4534
|
+
};
|
|
4535
|
+
if (isSelf) {
|
|
4536
|
+
if (!base.device) base.device = localHw.device;
|
|
4537
|
+
if (!base.gpu_model) base.gpu_model = localHw.gpu_model || '';
|
|
4538
|
+
if (!base.ram_mb) base.ram_mb = localHw.ram_mb;
|
|
4539
|
+
if (!base.vram_mb) base.vram_mb = localHw.vram_mb;
|
|
4540
|
+
if (!base.cpu_cores) base.cpu_cores = localHw.cpu_cores;
|
|
4541
|
+
}
|
|
4542
|
+
return base;
|
|
4543
|
+
});
|
|
4496
4544
|
|
|
4497
4545
|
return res.json({
|
|
4498
4546
|
nodes: safeNodes,
|
|
@@ -4515,7 +4563,7 @@ Keep responses concise. Help them think, don't lecture them about the system the
|
|
|
4515
4563
|
const localCpuCores = sysHw.cores || 0;
|
|
4516
4564
|
const selfNode = node.active && node.nodeId ? [{
|
|
4517
4565
|
node_id: node.nodeId,
|
|
4518
|
-
device: hw.device || '
|
|
4566
|
+
device: hw.device || (sysHw.gpu?.type === 'nvidia' ? 'cuda' : sysHw.gpu?.type === 'apple-silicon' ? 'metal' : 'cpu'),
|
|
4519
4567
|
layers: node.layers || [0, 0],
|
|
4520
4568
|
status: node.status === 'connected' ? 'active' : node.status,
|
|
4521
4569
|
active_sessions: node.sessions || 0,
|
|
@@ -5178,6 +5226,30 @@ Keep responses concise. Help them think, don't lecture them about the system the
|
|
|
5178
5226
|
})();
|
|
5179
5227
|
});
|
|
5180
5228
|
|
|
5229
|
+
// --- Wallet & earnings stubs (Base L2 — wired to real data post-mainnet) ---
|
|
5230
|
+
|
|
5231
|
+
app.get('/api/network/wallet', networkGate, (req, res) => {
|
|
5232
|
+
res.json({ connected: false, address: null, balance: '0.00', token: 'GROOVE', chain: 'base-l2' });
|
|
5233
|
+
});
|
|
5234
|
+
|
|
5235
|
+
app.get('/api/network/earnings', networkGate, (req, res) => {
|
|
5236
|
+
res.json({ today: 0, thisWeek: 0, allTime: 0, history: [], currency: 'GROOVE' });
|
|
5237
|
+
});
|
|
5238
|
+
|
|
5239
|
+
app.post('/api/network/wallet/connect', networkGate, (req, res) => {
|
|
5240
|
+
res.status(501).json({ error: 'Wallet connection not yet available. Coming with mainnet launch.' });
|
|
5241
|
+
});
|
|
5242
|
+
|
|
5243
|
+
app.get('/api/network/node/identity', networkGate, (req, res) => {
|
|
5244
|
+
const node = daemon.networkNode;
|
|
5245
|
+
res.json({
|
|
5246
|
+
nodeId: node?.nodeId || null,
|
|
5247
|
+
address: node?.nodeId || null,
|
|
5248
|
+
startedAt: node?.startedAt || null,
|
|
5249
|
+
uptime: node?.startedAt ? Math.floor((Date.now() - node.startedAt) / 1000) : 0,
|
|
5250
|
+
});
|
|
5251
|
+
});
|
|
5252
|
+
|
|
5181
5253
|
// Startup hook — called from index.js once the server is up. Non-blocking;
|
|
5182
5254
|
// updates daemon.networkUpdateAvailable and broadcasts so the GUI can badge.
|
|
5183
5255
|
daemon.checkNetworkUpdate = async function checkNetworkUpdate() {
|
|
@@ -40,7 +40,6 @@ export class ClaudeCodeProvider extends Provider {
|
|
|
40
40
|
static managesOwnContext = true; // Claude Code compacts context internally (~25-37% → 2-8%)
|
|
41
41
|
static models = [
|
|
42
42
|
{ id: 'claude-opus-4-6', name: 'Claude Opus 4.6', tier: 'heavy', contextWindow: 1_000_000 },
|
|
43
|
-
{ id: 'claude-opus-4-7', name: 'Claude Opus 4.7', tier: 'heavy', contextWindow: 1_000_000 },
|
|
44
43
|
{ id: 'claude-sonnet-4-6', name: 'Claude Sonnet 4.6', tier: 'medium', contextWindow: 200_000 },
|
|
45
44
|
{ id: 'claude-haiku-4-5-20251001', name: 'Claude Haiku 4.5', tier: 'light', contextWindow: 200_000 },
|
|
46
45
|
];
|