groove-dev 0.8.4 → 0.9.0

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
@@ -55,7 +55,7 @@ Each provider implements: `isInstalled()`, `buildSpawnCommand()`, `buildHeadless
55
55
  | Claude Code | `claude-code.js` | Subscription | Opus/Sonnet/Haiku | Yes |
56
56
  | Codex | `codex.js` | API Key | o3/o4-mini | No |
57
57
  | Gemini CLI | `gemini.js` | API Key | Pro/Flash | No |
58
- | Aider | `aider.js` | API Key | Any | Yes |
58
+
59
59
  | Ollama | `ollama.js` | Local | Any | No |
60
60
 
61
61
  ### Terminal Adapters (packages/daemon/src/terminal/)
package/README.md CHANGED
@@ -59,7 +59,7 @@ Spawn a planner, describe your project. The planner writes a detailed plan and r
59
59
  | **Claude Code** | Subscription | Opus, Sonnet, Haiku |
60
60
  | **Codex** | API Key | o3, o4-mini |
61
61
  | **Gemini CLI** | API Key | 2.5 Pro, 2.5 Flash |
62
- | **Aider** | API Key | Any |
62
+
63
63
  | **Ollama** | Local | Any |
64
64
 
65
65
  GROOVE is a process manager — it spawns actual AI tool binaries. It never proxies API calls, never touches OAuth tokens, never impersonates any client. Your AI tools talk directly to their servers.
@@ -101,7 +101,7 @@ GROOVE routes tasks to the cheapest model that can handle them. Planners get Opu
101
101
  └─────────────────┬───────────────────────┘
102
102
 
103
103
  ┌──────────────────────▼──────────────────────┐
104
- │ Claude Code · Codex · Gemini · Aider · Ollama
104
+ │ Claude Code · Codex · Gemini · Ollama
105
105
  └─────────────────────────────────────────────┘
106
106
  ```
107
107
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groove-dev/cli",
3
- "version": "0.8.4",
3
+ "version": "0.9.0",
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.8.4",
3
+ "version": "0.9.0",
4
4
  "description": "GROOVE daemon — agent orchestration engine",
5
5
  "license": "FSL-1.1-Apache-2.0",
6
6
  "type": "module",
@@ -66,7 +66,7 @@ export function runFirstTimeSetup(grooveDir) {
66
66
  const providers = listProviders();
67
67
  const installed = providers.filter((p) => p.installed);
68
68
  if (installed.length > 0) {
69
- const preferred = ['claude-code', 'codex', 'gemini', 'aider', 'ollama'];
69
+ const preferred = ['claude-code', 'codex', 'gemini', 'ollama'];
70
70
  const best = preferred.find((id) => installed.some((p) => p.id === id));
71
71
  if (best) config.defaultProvider = best;
72
72
  }
@@ -4,14 +4,12 @@
4
4
  import { ClaudeCodeProvider } from './claude-code.js';
5
5
  import { CodexProvider } from './codex.js';
6
6
  import { GeminiProvider } from './gemini.js';
7
- import { AiderProvider } from './aider.js';
8
7
  import { OllamaProvider } from './ollama.js';
9
8
 
10
9
  const providers = {
11
10
  'claude-code': new ClaudeCodeProvider(),
12
11
  'codex': new CodexProvider(),
13
12
  'gemini': new GeminiProvider(),
14
- 'aider': new AiderProvider(),
15
13
  'ollama': new OllamaProvider(),
16
14
  };
17
15
 
@@ -52,22 +52,15 @@ export class OllamaProvider extends Provider {
52
52
  }
53
53
 
54
54
  buildSpawnCommand(agent) {
55
- // Ollama works best via Aider as a frontend
56
- // aider --model ollama/<model> gives a full coding experience
57
55
  const model = agent.model || 'qwen2.5-coder:7b';
58
-
59
- const args = [
60
- '--model', `ollama/${model}`,
61
- '--yes-always',
62
- '--no-auto-commits',
63
- ];
56
+ const args = ['run', model];
64
57
 
65
58
  if (agent.prompt) {
66
- args.push('--message', agent.prompt);
59
+ args.push(agent.prompt);
67
60
  }
68
61
 
69
62
  return {
70
- command: 'aider',
63
+ command: 'ollama',
71
64
  args,
72
65
  env: { OLLAMA_API_BASE: 'http://localhost:11434' },
73
66
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groove-dev/gui",
3
- "version": "0.8.4",
3
+ "version": "0.9.0",
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,7 +1,7 @@
1
1
  {
2
2
  "name": "groove-dev",
3
- "version": "0.8.4",
4
- "description": "Open-source agent orchestration layer for AI coding tools. GUI dashboard, multi-agent coordination, zero cold-start (Journalist), infinite sessions (adaptive context rotation), AI Project Manager, Quick Launch. Works with Claude Code, Codex, Gemini CLI, Aider, Ollama.",
3
+ "version": "0.9.0",
4
+ "description": "Open-source agent orchestration layer for AI coding tools. GUI dashboard, multi-agent coordination, zero cold-start (Journalist), infinite sessions (adaptive context rotation), AI Project Manager, Quick Launch. Works with Claude Code, Codex, Gemini CLI, Ollama.",
5
5
  "license": "FSL-1.1-Apache-2.0",
6
6
  "author": "Groove Dev <hello@groovedev.ai> (https://groovedev.ai)",
7
7
  "homepage": "https://groovedev.ai",
@@ -22,7 +22,7 @@
22
22
  "claude-code",
23
23
  "codex",
24
24
  "gemini",
25
- "aider",
25
+
26
26
  "ollama",
27
27
  "coding-assistant",
28
28
  "developer-tools",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groove-dev/cli",
3
- "version": "0.8.4",
3
+ "version": "0.9.0",
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.8.4",
3
+ "version": "0.9.0",
4
4
  "description": "GROOVE daemon — agent orchestration engine",
5
5
  "license": "FSL-1.1-Apache-2.0",
6
6
  "type": "module",
@@ -66,7 +66,7 @@ export function runFirstTimeSetup(grooveDir) {
66
66
  const providers = listProviders();
67
67
  const installed = providers.filter((p) => p.installed);
68
68
  if (installed.length > 0) {
69
- const preferred = ['claude-code', 'codex', 'gemini', 'aider', 'ollama'];
69
+ const preferred = ['claude-code', 'codex', 'gemini', 'ollama'];
70
70
  const best = preferred.find((id) => installed.some((p) => p.id === id));
71
71
  if (best) config.defaultProvider = best;
72
72
  }
@@ -4,14 +4,12 @@
4
4
  import { ClaudeCodeProvider } from './claude-code.js';
5
5
  import { CodexProvider } from './codex.js';
6
6
  import { GeminiProvider } from './gemini.js';
7
- import { AiderProvider } from './aider.js';
8
7
  import { OllamaProvider } from './ollama.js';
9
8
 
10
9
  const providers = {
11
10
  'claude-code': new ClaudeCodeProvider(),
12
11
  'codex': new CodexProvider(),
13
12
  'gemini': new GeminiProvider(),
14
- 'aider': new AiderProvider(),
15
13
  'ollama': new OllamaProvider(),
16
14
  };
17
15
 
@@ -52,22 +52,15 @@ export class OllamaProvider extends Provider {
52
52
  }
53
53
 
54
54
  buildSpawnCommand(agent) {
55
- // Ollama works best via Aider as a frontend
56
- // aider --model ollama/<model> gives a full coding experience
57
55
  const model = agent.model || 'qwen2.5-coder:7b';
58
-
59
- const args = [
60
- '--model', `ollama/${model}`,
61
- '--yes-always',
62
- '--no-auto-commits',
63
- ];
56
+ const args = ['run', model];
64
57
 
65
58
  if (agent.prompt) {
66
- args.push('--message', agent.prompt);
59
+ args.push(agent.prompt);
67
60
  }
68
61
 
69
62
  return {
70
- command: 'aider',
63
+ command: 'ollama',
71
64
  args,
72
65
  env: { OLLAMA_API_BASE: 'http://localhost:11434' },
73
66
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groove-dev/gui",
3
- "version": "0.8.4",
3
+ "version": "0.9.0",
4
4
  "description": "GROOVE GUI — visual agent control plane",
5
5
  "license": "FSL-1.1-Apache-2.0",
6
6
  "type": "module",
@@ -1,72 +0,0 @@
1
- // GROOVE — Aider Provider
2
- // FSL-1.1-Apache-2.0 — see LICENSE
3
-
4
- import { execSync } from 'child_process';
5
- import { Provider } from './base.js';
6
-
7
- export class AiderProvider extends Provider {
8
- static name = 'aider';
9
- static displayName = 'Aider';
10
- static command = 'aider';
11
- static authType = 'api-key';
12
- static envKey = 'OPENAI_API_KEY'; // Default, but Aider supports many providers
13
- static models = [
14
- { id: 'gpt-4o', name: 'GPT-4o', tier: 'heavy' },
15
- { id: 'gpt-4o-mini', name: 'GPT-4o Mini', tier: 'medium' },
16
- { id: 'claude-3-5-sonnet-20241022', name: 'Claude Sonnet', tier: 'medium' },
17
- ];
18
-
19
- static isInstalled() {
20
- try {
21
- execSync('which aider', { stdio: 'ignore' });
22
- return true;
23
- } catch {
24
- return false;
25
- }
26
- }
27
-
28
- static installCommand() {
29
- return 'pip install aider-chat';
30
- }
31
-
32
- buildSpawnCommand(agent) {
33
- const args = ['--yes-always']; // Auto-accept for autonomous operation
34
-
35
- if (agent.model) args.push('--model', agent.model);
36
-
37
- // Auto-commit off — let GROOVE manage commits
38
- args.push('--no-auto-commits');
39
-
40
- if (agent.prompt) {
41
- args.push('--message', agent.prompt);
42
- }
43
-
44
- return {
45
- command: 'aider',
46
- args,
47
- env: agent.apiKey ? { OPENAI_API_KEY: agent.apiKey } : {},
48
- };
49
- }
50
-
51
- buildHeadlessCommand(prompt, model) {
52
- const args = ['--message', prompt, '--yes-always', '--no-auto-commits'];
53
- if (model) args.push('--model', model);
54
- return { command: 'aider', args, env: {} };
55
- }
56
-
57
- switchModel() {
58
- return true; // Aider supports /model command
59
- }
60
-
61
- parseOutput(line) {
62
- const trimmed = line.trim();
63
- if (!trimmed) return null;
64
-
65
- // Aider shows file edits with specific markers
66
- if (trimmed.startsWith('───') || trimmed.startsWith('│')) {
67
- return { type: 'activity', subtype: 'edit', data: trimmed };
68
- }
69
-
70
- return { type: 'activity', data: trimmed };
71
- }
72
- }
@@ -1,72 +0,0 @@
1
- // GROOVE — Aider Provider
2
- // FSL-1.1-Apache-2.0 — see LICENSE
3
-
4
- import { execSync } from 'child_process';
5
- import { Provider } from './base.js';
6
-
7
- export class AiderProvider extends Provider {
8
- static name = 'aider';
9
- static displayName = 'Aider';
10
- static command = 'aider';
11
- static authType = 'api-key';
12
- static envKey = 'OPENAI_API_KEY'; // Default, but Aider supports many providers
13
- static models = [
14
- { id: 'gpt-4o', name: 'GPT-4o', tier: 'heavy' },
15
- { id: 'gpt-4o-mini', name: 'GPT-4o Mini', tier: 'medium' },
16
- { id: 'claude-3-5-sonnet-20241022', name: 'Claude Sonnet', tier: 'medium' },
17
- ];
18
-
19
- static isInstalled() {
20
- try {
21
- execSync('which aider', { stdio: 'ignore' });
22
- return true;
23
- } catch {
24
- return false;
25
- }
26
- }
27
-
28
- static installCommand() {
29
- return 'pip install aider-chat';
30
- }
31
-
32
- buildSpawnCommand(agent) {
33
- const args = ['--yes-always']; // Auto-accept for autonomous operation
34
-
35
- if (agent.model) args.push('--model', agent.model);
36
-
37
- // Auto-commit off — let GROOVE manage commits
38
- args.push('--no-auto-commits');
39
-
40
- if (agent.prompt) {
41
- args.push('--message', agent.prompt);
42
- }
43
-
44
- return {
45
- command: 'aider',
46
- args,
47
- env: agent.apiKey ? { OPENAI_API_KEY: agent.apiKey } : {},
48
- };
49
- }
50
-
51
- buildHeadlessCommand(prompt, model) {
52
- const args = ['--message', prompt, '--yes-always', '--no-auto-commits'];
53
- if (model) args.push('--model', model);
54
- return { command: 'aider', args, env: {} };
55
- }
56
-
57
- switchModel() {
58
- return true; // Aider supports /model command
59
- }
60
-
61
- parseOutput(line) {
62
- const trimmed = line.trim();
63
- if (!trimmed) return null;
64
-
65
- // Aider shows file edits with specific markers
66
- if (trimmed.startsWith('───') || trimmed.startsWith('│')) {
67
- return { type: 'activity', subtype: 'edit', data: trimmed };
68
- }
69
-
70
- return { type: 'activity', data: trimmed };
71
- }
72
- }