groove-dev 0.22.6 → 0.22.8
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/CLAUDE.md +0 -7
- package/node_modules/@groove-dev/daemon/src/api.js +24 -15
- package/node_modules/@groove-dev/daemon/src/gateways/manager.js +3 -0
- package/node_modules/@groove-dev/gui/dist/assets/{index-DZxQV2hQ.js → index-CTKfkH67.js} +16 -16
- package/node_modules/@groove-dev/gui/dist/index.html +1 -1
- package/node_modules/@groove-dev/gui/src/stores/groove.js +17 -3
- package/node_modules/@groove-dev/gui/src/views/agents.jsx +5 -2
- package/package.json +1 -1
- package/packages/daemon/src/api.js +24 -15
- package/packages/daemon/src/gateways/manager.js +3 -0
- package/packages/gui/dist/assets/{index-DZxQV2hQ.js → index-CTKfkH67.js} +16 -16
- package/packages/gui/dist/index.html +1 -1
- package/packages/gui/src/stores/groove.js +17 -3
- package/packages/gui/src/views/agents.jsx +5 -2
package/CLAUDE.md
CHANGED
|
@@ -258,10 +258,3 @@ Fully functional multi-agent orchestration system with complete GUI v2 rebuild.
|
|
|
258
258
|
- Monitor/QC agent mode (stay active, loop)
|
|
259
259
|
- Semantic degradation detection
|
|
260
260
|
- Distribution: demo video, HN launch, Twitter content
|
|
261
|
-
|
|
262
|
-
<!-- GROOVE:START -->
|
|
263
|
-
## GROOVE Orchestration (auto-injected)
|
|
264
|
-
Active agents: 0
|
|
265
|
-
See AGENTS_REGISTRY.md for full agent state.
|
|
266
|
-
**Memory policy:** Ignore auto-memory. Do not read or write MEMORY.md. GROOVE manages all context.
|
|
267
|
-
<!-- GROOVE:END -->
|
|
@@ -1470,6 +1470,7 @@ Keep responses concise. Help them think, don't lecture them about the system the
|
|
|
1470
1470
|
}
|
|
1471
1471
|
|
|
1472
1472
|
const defaultDir = daemon.config?.defaultWorkingDir || undefined;
|
|
1473
|
+
const defaultTeamId = daemon.teams.getDefault()?.id || null;
|
|
1473
1474
|
|
|
1474
1475
|
// Separate phase 1 (builders) and phase 2 (QC/finisher)
|
|
1475
1476
|
const phase1 = agents.filter((a) => !a.phase || a.phase === 1);
|
|
@@ -1485,21 +1486,28 @@ Keep responses concise. Help them think, don't lecture them about the system the
|
|
|
1485
1486
|
|
|
1486
1487
|
// Spawn phase 1 agents immediately
|
|
1487
1488
|
const spawned = [];
|
|
1489
|
+
const failed = [];
|
|
1488
1490
|
const phase1Ids = [];
|
|
1489
1491
|
for (const config of phase1) {
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1492
|
+
try {
|
|
1493
|
+
const validated = validateAgentConfig({
|
|
1494
|
+
role: config.role,
|
|
1495
|
+
scope: config.scope || [],
|
|
1496
|
+
prompt: config.prompt || '',
|
|
1497
|
+
provider: config.provider || 'claude-code',
|
|
1498
|
+
model: config.model || 'auto',
|
|
1499
|
+
permission: config.permission || 'auto',
|
|
1500
|
+
workingDir: config.workingDir || defaultDir,
|
|
1501
|
+
name: config.name || undefined,
|
|
1502
|
+
});
|
|
1503
|
+
validated.teamId = defaultTeamId;
|
|
1504
|
+
const agent = await daemon.processes.spawn(validated);
|
|
1505
|
+
spawned.push({ id: agent.id, name: agent.name, role: agent.role });
|
|
1506
|
+
phase1Ids.push(agent.id);
|
|
1507
|
+
} catch (err) {
|
|
1508
|
+
failed.push({ role: config.role, error: err.message });
|
|
1509
|
+
console.log(`[Groove] Failed to spawn ${config.role}: ${err.message}`);
|
|
1510
|
+
}
|
|
1503
1511
|
}
|
|
1504
1512
|
|
|
1505
1513
|
// If there are phase 2 agents, register them for auto-spawn on phase 1 completion
|
|
@@ -1513,15 +1521,16 @@ Keep responses concise. Help them think, don't lecture them about the system the
|
|
|
1513
1521
|
permission: c.permission || 'auto',
|
|
1514
1522
|
workingDir: c.workingDir || defaultDir,
|
|
1515
1523
|
name: c.name || undefined,
|
|
1524
|
+
teamId: defaultTeamId,
|
|
1516
1525
|
})),
|
|
1517
1526
|
});
|
|
1518
1527
|
}
|
|
1519
1528
|
|
|
1520
1529
|
daemon.audit.log('team.launch', {
|
|
1521
|
-
phase1: spawned.length, phase2Pending: phase2.length,
|
|
1530
|
+
phase1: spawned.length, phase2Pending: phase2.length, failed: failed.length,
|
|
1522
1531
|
agents: spawned.map((a) => a.role),
|
|
1523
1532
|
});
|
|
1524
|
-
res.json({ launched: spawned.length, phase2Pending: phase2.length, agents: spawned });
|
|
1533
|
+
res.json({ launched: spawned.length, phase2Pending: phase2.length, agents: spawned, failed });
|
|
1525
1534
|
} catch (err) {
|
|
1526
1535
|
res.status(500).json({ error: err.message });
|
|
1527
1536
|
}
|
|
@@ -775,6 +775,7 @@ export class GatewayManager {
|
|
|
775
775
|
|
|
776
776
|
const agents = plan.agents;
|
|
777
777
|
const defaultDir = this.daemon.config?.defaultWorkingDir || undefined;
|
|
778
|
+
const defaultTeamId = this.daemon.teams.getDefault()?.id || null;
|
|
778
779
|
|
|
779
780
|
// Separate phases
|
|
780
781
|
const phase1 = agents.filter((a) => !a.phase || a.phase === 1);
|
|
@@ -804,6 +805,7 @@ export class GatewayManager {
|
|
|
804
805
|
workingDir: config.workingDir || defaultDir,
|
|
805
806
|
name: config.name || undefined,
|
|
806
807
|
});
|
|
808
|
+
validated.teamId = defaultTeamId;
|
|
807
809
|
const agent = await this.daemon.processes.spawn(validated);
|
|
808
810
|
spawned.push(agent);
|
|
809
811
|
phase1Ids.push(agent.id);
|
|
@@ -823,6 +825,7 @@ export class GatewayManager {
|
|
|
823
825
|
permission: c.permission || 'auto',
|
|
824
826
|
workingDir: c.workingDir || defaultDir,
|
|
825
827
|
name: c.name || undefined,
|
|
828
|
+
teamId: defaultTeamId,
|
|
826
829
|
})),
|
|
827
830
|
});
|
|
828
831
|
}
|