groove-dev 0.27.47 → 0.27.48

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 CHANGED
@@ -263,3 +263,10 @@ Audit-driven release. Multi-agent orchestration system with 7 coordination layer
263
263
  - Dashboard: routing donut, cache panel, context health gauges
264
264
  - Monitor/QC agent mode (stay active, loop)
265
265
  - Distribution: demo video, HN launch, Twitter content
266
+
267
+ <!-- GROOVE:START -->
268
+ ## GROOVE Orchestration (auto-injected)
269
+ Active agents: 0
270
+ See AGENTS_REGISTRY.md for full agent state.
271
+ **Memory policy:** GROOVE manages project memory automatically. Do not read or write MEMORY.md or .groove/memory/ files directly.
272
+ <!-- GROOVE:END -->
@@ -0,0 +1,68 @@
1
+ # BUG: POST /api/beta/validate returns 404 — not deployed
2
+
3
+ From: Groove UI Team
4
+ To: groovedev.ai Team
5
+ Date: 2026-04-18
6
+ Priority: BLOCKING
7
+
8
+ ## The Problem
9
+
10
+ The beta invite code validation endpoint is returning 404 from nginx. The route handler was built (routes/beta.js, mounted in server.js) but it's not reachable in production.
11
+
12
+ ```bash
13
+ curl -s https://groovedev.ai/api/beta/validate \
14
+ -H 'Content-Type: application/json' \
15
+ -d '{"code":"GROOVE-NET-ALPHA-001","machineId":"test"}'
16
+ ```
17
+
18
+ Returns:
19
+ ```html
20
+ <center>nginx/1.24.0 (Ubuntu)</center>
21
+ 404
22
+ ```
23
+
24
+ This is an nginx 404, not an app-level 404. The request never reaches the Node.js server.
25
+
26
+ ## What Should Happen
27
+
28
+ The endpoint should return:
29
+ ```json
30
+ {"valid": true, "expiresAt": "2026-07-18T00:00:00Z", "features": ["network-node", "network-consumer"], "message": "Welcome to the Groove Network beta"}
31
+ ```
32
+
33
+ Or for invalid codes:
34
+ ```json
35
+ {"valid": false, "message": "Invalid invite code"}
36
+ ```
37
+
38
+ ## Likely Causes
39
+
40
+ 1. Nginx isn't proxying /api/beta/* to the Node.js app — needs a location block or the existing proxy_pass doesn't cover this path
41
+ 2. The Node.js server isn't running or was restarted without the new routes
42
+ 3. The route is mounted at a different path than /api/beta/validate
43
+
44
+ ## What to Check
45
+
46
+ 1. Nginx config — does it proxy /api/* to the Node.js backend? If routes are whitelisted individually, add /api/beta/*
47
+ 2. Is the Node.js server running? Check with: `pm2 status` or `systemctl status groovedev` (whatever process manager is used)
48
+ 3. Did server.js get deployed with the beta route mount? Verify the deployed code includes: `app.use('/api/beta', betaRoutes)` or equivalent
49
+ 4. Test locally on the server: `curl http://localhost:<app-port>/api/beta/validate -H 'Content-Type: application/json' -d '{"code":"test","machineId":"test"}'` — if this works, it's purely an nginx issue
50
+
51
+ ## Impact
52
+
53
+ Every Groove app trying to activate a beta invite code fails. We have a hardcoded fallback for 5 ALPHA codes, but any codes generated through the admin portal (like GROOVE-NET-SWIFT-899) are completely broken until this is fixed. Beta testers cannot activate.
54
+
55
+ ## Expected Nginx Config
56
+
57
+ Something like this should work (adjust upstream port):
58
+ ```nginx
59
+ location /api/beta/ {
60
+ proxy_pass http://127.0.0.1:3000;
61
+ proxy_set_header Host $host;
62
+ proxy_set_header X-Real-IP $remote_addr;
63
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
64
+ proxy_set_header X-Forwarded-Proto $scheme;
65
+ }
66
+ ```
67
+
68
+ Or if there's already a catch-all /api/ proxy, make sure it's not being overridden by a more specific location block.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groove-dev/cli",
3
- "version": "0.27.47",
3
+ "version": "0.27.48",
4
4
  "description": "GROOVE CLI — manage AI coding agents from your terminal",
5
5
  "license": "FSL-1.1-Apache-2.0",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groove-dev/daemon",
3
- "version": "0.27.47",
3
+ "version": "0.27.48",
4
4
  "description": "GROOVE daemon — agent orchestration engine",
5
5
  "license": "FSL-1.1-Apache-2.0",
6
6
  "type": "module",
@@ -4002,7 +4002,7 @@ Keep responses concise. Help them think, don't lecture them about the system the
4002
4002
 
4003
4003
  let proc;
4004
4004
  try {
4005
- proc = spawn('python', args, {
4005
+ proc = spawn('python3.12', args, {
4006
4006
  cwd: deployPath,
4007
4007
  env: { ...process.env, PYTHONUNBUFFERED: '1' },
4008
4008
  stdio: ['ignore', 'pipe', 'pipe'],
@@ -26,7 +26,7 @@ function getConfig() {
26
26
  export class GrooveNetworkProvider extends Provider {
27
27
  static name = 'groove-network';
28
28
  static displayName = 'Groove Network';
29
- static command = 'python';
29
+ static command = 'python3.12';
30
30
  static authType = 'none';
31
31
 
32
32
  static models = [
@@ -60,7 +60,7 @@ export class GrooveNetworkProvider extends Provider {
60
60
  ];
61
61
 
62
62
  return {
63
- command: 'python',
63
+ command: 'python3.12',
64
64
  args,
65
65
  env: { PYTHONUNBUFFERED: '1' },
66
66
  cwd: deployPath,
@@ -73,7 +73,7 @@ export class GrooveNetworkProvider extends Provider {
73
73
  const m = model || GrooveNetworkProvider.models[0].id;
74
74
  const deployPath = expandHome(cfg.deployPath) || resolve(homedir(), 'Desktop/groove-deploy');
75
75
  return {
76
- command: 'python',
76
+ command: 'python3.12',
77
77
  args: [
78
78
  '-m', 'src.consumer.client',
79
79
  '--relay', relay,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groove-dev/gui",
3
- "version": "0.27.47",
3
+ "version": "0.27.48",
4
4
  "description": "GROOVE GUI — visual agent control plane",
5
5
  "license": "FSL-1.1-Apache-2.0",
6
6
  "type": "module",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "groove-dev",
3
- "version": "0.27.47",
3
+ "version": "0.27.48",
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)",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groove-dev/cli",
3
- "version": "0.27.47",
3
+ "version": "0.27.48",
4
4
  "description": "GROOVE CLI — manage AI coding agents from your terminal",
5
5
  "license": "FSL-1.1-Apache-2.0",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groove-dev/daemon",
3
- "version": "0.27.47",
3
+ "version": "0.27.48",
4
4
  "description": "GROOVE daemon — agent orchestration engine",
5
5
  "license": "FSL-1.1-Apache-2.0",
6
6
  "type": "module",
@@ -4002,7 +4002,7 @@ Keep responses concise. Help them think, don't lecture them about the system the
4002
4002
 
4003
4003
  let proc;
4004
4004
  try {
4005
- proc = spawn('python', args, {
4005
+ proc = spawn('python3.12', args, {
4006
4006
  cwd: deployPath,
4007
4007
  env: { ...process.env, PYTHONUNBUFFERED: '1' },
4008
4008
  stdio: ['ignore', 'pipe', 'pipe'],
@@ -26,7 +26,7 @@ function getConfig() {
26
26
  export class GrooveNetworkProvider extends Provider {
27
27
  static name = 'groove-network';
28
28
  static displayName = 'Groove Network';
29
- static command = 'python';
29
+ static command = 'python3.12';
30
30
  static authType = 'none';
31
31
 
32
32
  static models = [
@@ -60,7 +60,7 @@ export class GrooveNetworkProvider extends Provider {
60
60
  ];
61
61
 
62
62
  return {
63
- command: 'python',
63
+ command: 'python3.12',
64
64
  args,
65
65
  env: { PYTHONUNBUFFERED: '1' },
66
66
  cwd: deployPath,
@@ -73,7 +73,7 @@ export class GrooveNetworkProvider extends Provider {
73
73
  const m = model || GrooveNetworkProvider.models[0].id;
74
74
  const deployPath = expandHome(cfg.deployPath) || resolve(homedir(), 'Desktop/groove-deploy');
75
75
  return {
76
- command: 'python',
76
+ command: 'python3.12',
77
77
  args: [
78
78
  '-m', 'src.consumer.client',
79
79
  '--relay', relay,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groove-dev/gui",
3
- "version": "0.27.47",
3
+ "version": "0.27.48",
4
4
  "description": "GROOVE GUI — visual agent control plane",
5
5
  "license": "FSL-1.1-Apache-2.0",
6
6
  "type": "module",