groove-dev 0.27.74 → 0.27.75
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/cli/package.json +1 -1
- package/node_modules/@groove-dev/daemon/package.json +1 -1
- package/node_modules/@groove-dev/daemon/src/api.js +256 -4
- package/node_modules/@groove-dev/daemon/src/conversations.js +16 -0
- package/node_modules/@groove-dev/daemon/src/index.js +41 -1
- package/node_modules/@groove-dev/daemon/src/preview.js +18 -2
- package/node_modules/@groove-dev/daemon/src/process.js +6 -1
- package/node_modules/@groove-dev/daemon/src/providers/base.js +4 -0
- package/node_modules/@groove-dev/daemon/src/providers/codex.js +38 -0
- package/node_modules/@groove-dev/daemon/src/providers/grok.js +156 -0
- package/node_modules/@groove-dev/daemon/src/providers/index.js +5 -1
- package/node_modules/@groove-dev/daemon/src/providers/nano-banana.js +103 -0
- package/node_modules/@groove-dev/gui/dist/assets/index-CAT9SCJi.js +8620 -0
- package/node_modules/@groove-dev/gui/dist/assets/index-CVzz6zyb.css +1 -0
- package/node_modules/@groove-dev/gui/dist/index.html +2 -2
- package/node_modules/@groove-dev/gui/package.json +1 -1
- package/node_modules/@groove-dev/gui/src/app.css +29 -0
- package/node_modules/@groove-dev/gui/src/app.jsx +2 -0
- package/node_modules/@groove-dev/gui/src/components/chat/chat-header.jsx +16 -5
- package/node_modules/@groove-dev/gui/src/components/chat/chat-input.jsx +40 -7
- package/node_modules/@groove-dev/gui/src/components/chat/chat-messages.jsx +149 -31
- package/node_modules/@groove-dev/gui/src/components/chat/chat-view.jsx +26 -2
- package/node_modules/@groove-dev/gui/src/components/chat/model-picker.jsx +105 -52
- package/node_modules/@groove-dev/gui/src/components/layout/activity-bar.jsx +5 -2
- package/node_modules/@groove-dev/gui/src/components/layout/welcome-splash.jsx +215 -88
- package/node_modules/@groove-dev/gui/src/components/preview/preview-toolbar.jsx +81 -0
- package/node_modules/@groove-dev/gui/src/components/preview/preview-workspace.jsx +263 -0
- package/node_modules/@groove-dev/gui/src/components/preview/screenshot-overlay.jsx +203 -0
- package/node_modules/@groove-dev/gui/src/components/ui/toast.jsx +6 -2
- package/node_modules/@groove-dev/gui/src/stores/groove.js +149 -9
- package/node_modules/@groove-dev/gui/src/views/preview.jsx +6 -0
- package/node_modules/@groove-dev/gui/src/views/settings.jsx +199 -114
- package/package.json +1 -1
- package/packages/cli/package.json +1 -1
- package/packages/daemon/package.json +1 -1
- package/packages/daemon/src/api.js +256 -4
- package/packages/daemon/src/conversations.js +16 -0
- package/packages/daemon/src/index.js +41 -1
- package/packages/daemon/src/preview.js +18 -2
- package/packages/daemon/src/process.js +6 -1
- package/packages/daemon/src/providers/base.js +4 -0
- package/packages/daemon/src/providers/codex.js +38 -0
- package/packages/daemon/src/providers/grok.js +156 -0
- package/packages/daemon/src/providers/index.js +5 -1
- package/packages/daemon/src/providers/nano-banana.js +103 -0
- package/packages/gui/dist/assets/index-CAT9SCJi.js +8620 -0
- package/packages/gui/dist/assets/index-CVzz6zyb.css +1 -0
- package/packages/gui/dist/index.html +2 -2
- package/packages/gui/package.json +1 -1
- package/packages/gui/src/app.css +29 -0
- package/packages/gui/src/app.jsx +2 -0
- package/packages/gui/src/components/chat/chat-header.jsx +16 -5
- package/packages/gui/src/components/chat/chat-input.jsx +40 -7
- package/packages/gui/src/components/chat/chat-messages.jsx +149 -31
- package/packages/gui/src/components/chat/chat-view.jsx +26 -2
- package/packages/gui/src/components/chat/model-picker.jsx +105 -52
- package/packages/gui/src/components/layout/activity-bar.jsx +5 -2
- package/packages/gui/src/components/layout/welcome-splash.jsx +215 -88
- package/packages/gui/src/components/preview/preview-toolbar.jsx +81 -0
- package/packages/gui/src/components/preview/preview-workspace.jsx +263 -0
- package/packages/gui/src/components/preview/screenshot-overlay.jsx +203 -0
- package/packages/gui/src/components/ui/toast.jsx +6 -2
- package/packages/gui/src/stores/groove.js +149 -9
- package/packages/gui/src/views/preview.jsx +6 -0
- package/packages/gui/src/views/settings.jsx +199 -114
- package/node_modules/@groove-dev/gui/dist/assets/index-DFP3r2yE.js +0 -8615
- package/node_modules/@groove-dev/gui/dist/assets/index-QR7lyguO.css +0 -1
- package/packages/gui/dist/assets/index-DFP3r2yE.js +0 -8615
- package/packages/gui/dist/assets/index-QR7lyguO.css +0 -1
|
@@ -7,6 +7,8 @@ import { ClaudeCodeProvider } from './claude-code.js';
|
|
|
7
7
|
import { CodexProvider } from './codex.js';
|
|
8
8
|
import { GeminiProvider } from './gemini.js';
|
|
9
9
|
import { OllamaProvider } from './ollama.js';
|
|
10
|
+
import { GrokProvider } from './grok.js';
|
|
11
|
+
import { NanaBananaProvider } from './nano-banana.js';
|
|
10
12
|
import { LocalProvider } from './local.js';
|
|
11
13
|
import { GrooveNetworkProvider } from './groove-network.js';
|
|
12
14
|
|
|
@@ -67,7 +69,9 @@ const providers = {
|
|
|
67
69
|
'claude-code': new ClaudeCodeProvider(),
|
|
68
70
|
'codex': new CodexProvider(),
|
|
69
71
|
'gemini': new GeminiProvider(),
|
|
72
|
+
'grok': new GrokProvider(),
|
|
70
73
|
'ollama': new OllamaProvider(),
|
|
74
|
+
'nano-banana': new NanaBananaProvider(),
|
|
71
75
|
'local': new LocalProvider(),
|
|
72
76
|
'groove-network': new GrooveNetworkProvider(),
|
|
73
77
|
};
|
|
@@ -93,7 +97,7 @@ export function getProvider(name) {
|
|
|
93
97
|
|
|
94
98
|
// Providers hidden from UI but kept for backward compatibility
|
|
95
99
|
// (existing agents with provider='ollama' still resolve via getProvider)
|
|
96
|
-
const HIDDEN_PROVIDERS = new Set(['ollama']);
|
|
100
|
+
const HIDDEN_PROVIDERS = new Set(['ollama', 'nano-banana']);
|
|
97
101
|
|
|
98
102
|
export function listProviders() {
|
|
99
103
|
return Object.entries(providers)
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// GROOVE — Nano Banana Provider (Google Image Generation)
|
|
2
|
+
// FSL-1.1-Apache-2.0 — see LICENSE
|
|
3
|
+
//
|
|
4
|
+
// Nano Banana is Google's image generation family built on Gemini models:
|
|
5
|
+
// - Nano Banana 2 (Gemini 3.1 Flash Image) — fast generation
|
|
6
|
+
// - Nano Banana Pro (Gemini 3 Pro Image) — professional quality, up to 4K
|
|
7
|
+
// Uses the Gemini API with responseModalities: ["IMAGE"].
|
|
8
|
+
|
|
9
|
+
import { Provider } from './base.js';
|
|
10
|
+
|
|
11
|
+
export class NanaBananaProvider extends Provider {
|
|
12
|
+
static name = 'nano-banana';
|
|
13
|
+
static displayName = 'Nano Banana';
|
|
14
|
+
static command = '';
|
|
15
|
+
static authType = 'api-key';
|
|
16
|
+
static envKey = 'GEMINI_API_KEY';
|
|
17
|
+
static models = [
|
|
18
|
+
{ id: 'nano-banana-2', name: 'Nano Banana 2', tier: 'medium', type: 'image', geminiModel: 'gemini-2.0-flash-preview-image-generation', pricing: { perImage: 0.02 } },
|
|
19
|
+
{ id: 'nano-banana-pro', name: 'Nano Banana Pro', tier: 'heavy', type: 'image', geminiModel: 'gemini-2.0-flash-preview-image-generation', pricing: { perImage: 0.05 } },
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
static isInstalled() {
|
|
23
|
+
return true; // API-only, shares GEMINI_API_KEY
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
static installCommand() {
|
|
27
|
+
return '';
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
buildSpawnCommand() {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
buildHeadlessCommand() {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
switchModel() {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
parseOutput() {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async generateImage(prompt, options = {}) {
|
|
47
|
+
const apiKey = options.apiKey;
|
|
48
|
+
if (!apiKey) throw new Error('GEMINI_API_KEY required for Nano Banana image generation');
|
|
49
|
+
|
|
50
|
+
const modelEntry = NanaBananaProvider.models.find((m) => m.id === (options.model || 'nano-banana-2'));
|
|
51
|
+
const geminiModel = modelEntry?.geminiModel || 'gemini-2.0-flash-preview-image-generation';
|
|
52
|
+
|
|
53
|
+
const res = await fetch(
|
|
54
|
+
`https://generativelanguage.googleapis.com/v1beta/models/${geminiModel}:generateContent?key=${apiKey}`,
|
|
55
|
+
{
|
|
56
|
+
method: 'POST',
|
|
57
|
+
headers: { 'Content-Type': 'application/json' },
|
|
58
|
+
body: JSON.stringify({
|
|
59
|
+
contents: [{ parts: [{ text: prompt }] }],
|
|
60
|
+
generationConfig: {
|
|
61
|
+
responseModalities: ['TEXT', 'IMAGE'],
|
|
62
|
+
},
|
|
63
|
+
}),
|
|
64
|
+
},
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
if (!res.ok) {
|
|
68
|
+
const text = await res.text();
|
|
69
|
+
throw new Error(`Nano Banana API ${res.status}: ${text.slice(0, 200)}`);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const data = await res.json();
|
|
73
|
+
const parts = data.candidates?.[0]?.content?.parts || [];
|
|
74
|
+
const imagePart = parts.find((p) => p.inlineData);
|
|
75
|
+
|
|
76
|
+
if (!imagePart) {
|
|
77
|
+
const textPart = parts.find((p) => p.text);
|
|
78
|
+
throw new Error(textPart?.text || 'No image generated');
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
url: null,
|
|
83
|
+
b64_json: imagePart.inlineData.data,
|
|
84
|
+
mimeType: imagePart.inlineData.mimeType || 'image/png',
|
|
85
|
+
model: options.model || 'nano-banana-2',
|
|
86
|
+
provider: 'nano-banana',
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
static setupGuide() {
|
|
91
|
+
return {
|
|
92
|
+
installSteps: [],
|
|
93
|
+
authMethods: ['api-key'],
|
|
94
|
+
authInstructions: {
|
|
95
|
+
apiKeyHelp: 'Uses your Gemini API key — get one at aistudio.google.com',
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
static authMethods() {
|
|
101
|
+
return ['api-key'];
|
|
102
|
+
}
|
|
103
|
+
}
|