groove-dev 0.26.30 → 0.26.32
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/daemon/src/api.js +24 -3
- package/node_modules/@groove-dev/daemon/src/registry.js +1 -1
- package/node_modules/@groove-dev/daemon/src/router.js +21 -15
- package/node_modules/@groove-dev/gui/dist/assets/{index-vxioP1y2.js → index-CwUZRfEx.js} +12 -12
- package/node_modules/@groove-dev/gui/dist/index.html +1 -1
- package/node_modules/@groove-dev/gui/src/components/dashboard/fleet-panel.jsx +6 -5
- package/package.json +1 -1
- package/packages/daemon/src/api.js +24 -3
- package/packages/daemon/src/registry.js +1 -1
- package/packages/daemon/src/router.js +21 -15
- package/packages/gui/dist/assets/{index-vxioP1y2.js → index-CwUZRfEx.js} +12 -12
- package/packages/gui/dist/index.html +1 -1
- package/packages/gui/src/components/dashboard/fleet-panel.jsx +6 -5
|
@@ -1822,14 +1822,35 @@ Keep responses concise. Help them think, don't lecture them about the system the
|
|
|
1822
1822
|
);
|
|
1823
1823
|
|
|
1824
1824
|
if (existing && prompt) {
|
|
1825
|
-
//
|
|
1825
|
+
// Reuse existing agent: kill the old process and spawn fresh with full context.
|
|
1826
|
+
// This ensures the agent gets intro context, project map, and design system —
|
|
1827
|
+
// resume() bypasses all of that and the agent spawns blind.
|
|
1826
1828
|
try {
|
|
1827
|
-
|
|
1829
|
+
// Kill old process if running
|
|
1830
|
+
if (existing.status === 'running' || existing.status === 'starting') {
|
|
1831
|
+
try { await daemon.processes.kill(existing.id); } catch { /* already dead */ }
|
|
1832
|
+
}
|
|
1833
|
+
// Remove old entry
|
|
1834
|
+
daemon.registry.remove(existing.id);
|
|
1835
|
+
daemon.locks.release(existing.id);
|
|
1836
|
+
|
|
1837
|
+
// Spawn fresh with the same name/team but new prompt + full context
|
|
1838
|
+
const validated = validateAgentConfig({
|
|
1839
|
+
role: existing.role,
|
|
1840
|
+
scope: config.scope || existing.scope || [],
|
|
1841
|
+
prompt,
|
|
1842
|
+
provider: config.provider || existing.provider || undefined,
|
|
1843
|
+
model: config.model || existing.model || 'auto',
|
|
1844
|
+
permission: config.permission || existing.permission || 'auto',
|
|
1845
|
+
workingDir: existing.workingDir || projectWorkingDir,
|
|
1846
|
+
name: existing.name,
|
|
1847
|
+
});
|
|
1848
|
+
validated.teamId = defaultTeamId;
|
|
1849
|
+
const newAgent = await daemon.processes.spawn(validated);
|
|
1828
1850
|
reused.push({ id: newAgent.id, name: newAgent.name, role: newAgent.role, reusedFrom: existing.name });
|
|
1829
1851
|
phase1Ids.push(newAgent.id);
|
|
1830
1852
|
daemon.audit.log('team.reuse', { oldId: existing.id, newId: newAgent.id, role: config.role });
|
|
1831
1853
|
} catch (err) {
|
|
1832
|
-
// Reuse failed — fall through to spawn
|
|
1833
1854
|
failed.push({ role: config.role, error: `reuse failed: ${err.message}` });
|
|
1834
1855
|
}
|
|
1835
1856
|
} else {
|
|
@@ -51,7 +51,7 @@ export class Registry extends EventEmitter {
|
|
|
51
51
|
if (!agent) return null;
|
|
52
52
|
|
|
53
53
|
// Only allow known fields to prevent prototype pollution
|
|
54
|
-
const SAFE_FIELDS = ['status', 'pid', 'tokensUsed', 'contextUsage', 'lastActivity', 'model', 'provider', 'name', 'routingMode', 'routingReason', 'sessionId', 'skills', 'integrations', 'workingDir', 'effort', 'costUsd', 'durationMs', 'turns', 'inputTokens', 'outputTokens', 'teamId'];
|
|
54
|
+
const SAFE_FIELDS = ['status', 'pid', 'tokensUsed', 'contextUsage', 'lastActivity', 'model', 'provider', 'name', 'routingMode', 'routingReason', 'sessionId', 'skills', 'integrations', 'workingDir', 'effort', 'costUsd', 'durationMs', 'turns', 'inputTokens', 'outputTokens', 'teamId', 'permission', 'scope'];
|
|
55
55
|
for (const key of Object.keys(updates)) {
|
|
56
56
|
if (SAFE_FIELDS.includes(key)) {
|
|
57
57
|
agent[key] = updates[key];
|
|
@@ -12,22 +12,28 @@ const MODES = {
|
|
|
12
12
|
AUTO_FLOOR: 'auto-floor', // Auto, but never below a floor model
|
|
13
13
|
};
|
|
14
14
|
|
|
15
|
-
// Role-based tier hints for new agents with no classifier data yet
|
|
15
|
+
// Role-based tier hints for new agents with no classifier data yet.
|
|
16
|
+
// Default everything to heavy — intelligence out of the box. Users can
|
|
17
|
+
// downgrade to auto/medium if they want to optimize cost. A failed task
|
|
18
|
+
// at a cheaper model costs more than a successful one at the best model.
|
|
16
19
|
const ROLE_HINTS = {
|
|
17
|
-
planner: 'heavy',
|
|
18
|
-
fullstack: 'heavy',
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
testing: '
|
|
25
|
-
devops: '
|
|
26
|
-
database: '
|
|
27
|
-
analyst: '
|
|
28
|
-
docs: '
|
|
29
|
-
support: '
|
|
30
|
-
ea: '
|
|
20
|
+
planner: 'heavy',
|
|
21
|
+
fullstack: 'heavy',
|
|
22
|
+
frontend: 'heavy',
|
|
23
|
+
backend: 'heavy',
|
|
24
|
+
slides: 'heavy',
|
|
25
|
+
creative: 'heavy',
|
|
26
|
+
security: 'heavy',
|
|
27
|
+
testing: 'heavy',
|
|
28
|
+
devops: 'heavy',
|
|
29
|
+
database: 'heavy',
|
|
30
|
+
analyst: 'heavy',
|
|
31
|
+
docs: 'heavy',
|
|
32
|
+
support: 'heavy',
|
|
33
|
+
ea: 'heavy',
|
|
34
|
+
cmo: 'heavy',
|
|
35
|
+
cfo: 'heavy',
|
|
36
|
+
home: 'heavy',
|
|
31
37
|
};
|
|
32
38
|
|
|
33
39
|
export class ModelRouter {
|