groove-dev 0.27.48 → 0.27.50

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.
Files changed (29) hide show
  1. package/CLAUDE.md +0 -7
  2. package/default/security-review-prompt.md +98 -0
  3. package/node_modules/@groove-dev/cli/package.json +1 -1
  4. package/node_modules/@groove-dev/daemon/package.json +1 -1
  5. package/node_modules/@groove-dev/daemon/src/api.js +309 -24
  6. package/node_modules/@groove-dev/daemon/src/firstrun.js +1 -1
  7. package/node_modules/@groove-dev/daemon/src/index.js +7 -0
  8. package/node_modules/@groove-dev/daemon/src/providers/groove-network.js +47 -7
  9. package/node_modules/@groove-dev/gui/dist/assets/{index-B9oPxmNj.js → index-Dd4u8X70.js} +1723 -1723
  10. package/node_modules/@groove-dev/gui/dist/index.html +1 -1
  11. package/node_modules/@groove-dev/gui/package.json +1 -1
  12. package/node_modules/@groove-dev/gui/src/components/network/network-status.jsx +12 -0
  13. package/node_modules/@groove-dev/gui/src/components/network/node-toggle.jsx +18 -15
  14. package/node_modules/@groove-dev/gui/src/stores/groove.js +128 -1
  15. package/node_modules/@groove-dev/gui/src/views/network.jsx +82 -2
  16. package/package.json +1 -1
  17. package/packages/cli/package.json +1 -1
  18. package/packages/daemon/package.json +1 -1
  19. package/packages/daemon/src/api.js +309 -24
  20. package/packages/daemon/src/firstrun.js +1 -1
  21. package/packages/daemon/src/index.js +7 -0
  22. package/packages/daemon/src/providers/groove-network.js +47 -7
  23. package/packages/gui/dist/assets/{index-B9oPxmNj.js → index-Dd4u8X70.js} +1723 -1723
  24. package/packages/gui/dist/index.html +1 -1
  25. package/packages/gui/package.json +1 -1
  26. package/packages/gui/src/components/network/network-status.jsx +12 -0
  27. package/packages/gui/src/components/network/node-toggle.jsx +18 -15
  28. package/packages/gui/src/stores/groove.js +128 -1
  29. package/packages/gui/src/views/network.jsx +82 -2
@@ -2,7 +2,7 @@
2
2
  // FSL-1.1-Apache-2.0 — see LICENSE
3
3
 
4
4
  import { homedir } from 'os';
5
- import { resolve } from 'path';
5
+ import { resolve, join } from 'path';
6
6
  import { existsSync } from 'fs';
7
7
  import { Provider } from './base.js';
8
8
 
@@ -23,6 +23,41 @@ function getConfig() {
23
23
  return _daemonRef?.config?.networkBeta || null;
24
24
  }
25
25
 
26
+ // Parse a version tag like 'v0.1.0' or '0.2.0-rc1' into [major, minor, patch].
27
+ // Non-numeric suffixes are stripped. Returns null if unparseable.
28
+ export function parseSemver(v) {
29
+ if (!v || typeof v !== 'string') return null;
30
+ const m = v.trim().replace(/^v/i, '').match(/^(\d+)\.(\d+)\.(\d+)/);
31
+ if (!m) return null;
32
+ return [parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10)];
33
+ }
34
+
35
+ // Returns negative / 0 / positive, like String.prototype.localeCompare.
36
+ // Unparseable versions compare as "lower" than parseable ones.
37
+ export function compareSemver(a, b) {
38
+ const pa = parseSemver(a);
39
+ const pb = parseSemver(b);
40
+ if (!pa && !pb) return 0;
41
+ if (!pa) return -1;
42
+ if (!pb) return 1;
43
+ for (let i = 0; i < 3; i++) {
44
+ if (pa[i] !== pb[i]) return pa[i] - pb[i];
45
+ }
46
+ return 0;
47
+ }
48
+
49
+ // v0.2.0+ renamed the `--relay` flag to `--signal`. Older installs still need
50
+ // `--relay` until the user updates. Unparseable / missing versions are treated
51
+ // as pre-0.2.0 to stay compatible with existing v0.1.0 installs.
52
+ export function supportsSignalFlag(version) {
53
+ return compareSemver(version, '0.2.0') >= 0;
54
+ }
55
+
56
+ function signalFlagName() {
57
+ const cfg = getConfig() || {};
58
+ return supportsSignalFlag(cfg.version) ? '--signal' : '--relay';
59
+ }
60
+
26
61
  export class GrooveNetworkProvider extends Provider {
27
62
  static name = 'groove-network';
28
63
  static displayName = 'Groove Network';
@@ -44,7 +79,7 @@ export class GrooveNetworkProvider extends Provider {
44
79
 
45
80
  buildSpawnCommand(agent) {
46
81
  const cfg = getConfig() || {};
47
- const relay = cfg.relayUrl || 'localhost:8770';
82
+ const signal = cfg.signalUrl || 'signal.groovedev.ai';
48
83
  const model = agent.model || GrooveNetworkProvider.models[0].id;
49
84
  const maxTokens = agent.maxTokens || 500;
50
85
  const prompt = agent.prompt || '';
@@ -53,14 +88,15 @@ export class GrooveNetworkProvider extends Provider {
53
88
 
54
89
  const args = [
55
90
  '-m', 'src.consumer.client',
56
- '--relay', relay,
91
+ signalFlagName(), signal,
57
92
  '--model', model,
58
93
  '--prompt', prompt,
59
94
  '--max-tokens', String(maxTokens),
95
+ '--json',
60
96
  ];
61
97
 
62
98
  return {
63
- command: 'python3.12',
99
+ command: join(deployPath, 'venv', 'bin', 'python3.12'),
64
100
  args,
65
101
  env: { PYTHONUNBUFFERED: '1' },
66
102
  cwd: deployPath,
@@ -69,17 +105,18 @@ export class GrooveNetworkProvider extends Provider {
69
105
 
70
106
  buildHeadlessCommand(prompt, model) {
71
107
  const cfg = getConfig() || {};
72
- const relay = cfg.relayUrl || 'localhost:8770';
108
+ const signal = cfg.signalUrl || 'signal.groovedev.ai';
73
109
  const m = model || GrooveNetworkProvider.models[0].id;
74
110
  const deployPath = expandHome(cfg.deployPath) || resolve(homedir(), 'Desktop/groove-deploy');
75
111
  return {
76
- command: 'python3.12',
112
+ command: join(deployPath, 'venv', 'bin', 'python3.12'),
77
113
  args: [
78
114
  '-m', 'src.consumer.client',
79
- '--relay', relay,
115
+ signalFlagName(), signal,
80
116
  '--model', m,
81
117
  '--prompt', prompt,
82
118
  '--max-tokens', '500',
119
+ '--json',
83
120
  ],
84
121
  env: { PYTHONUNBUFFERED: '1' },
85
122
  cwd: deployPath,
@@ -105,6 +142,9 @@ export class GrooveNetworkProvider extends Provider {
105
142
  sessionId: msg.session_id,
106
143
  tokensGenerated: msg.tokens_generated,
107
144
  error: msg.error,
145
+ signal: msg.signal,
146
+ nodesAvailable: msg.nodes_available,
147
+ nodes: msg.nodes,
108
148
  raw: msg,
109
149
  };
110
150
  }