groove-dev 0.17.2 → 0.17.3
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/integrations-registry.json +9 -9
- package/node_modules/@groove-dev/gui/dist/assets/{index-CEf7nLM2.js → index-DXy6tMX5.js} +11 -11
- package/node_modules/@groove-dev/gui/dist/index.html +1 -1
- package/node_modules/@groove-dev/gui/src/views/IntegrationsStore.jsx +61 -70
- package/package.json +1 -1
- package/packages/daemon/integrations-registry.json +9 -9
- package/packages/gui/dist/assets/{index-CEf7nLM2.js → index-DXy6tMX5.js} +11 -11
- package/packages/gui/dist/index.html +1 -1
- package/packages/gui/src/views/IntegrationsStore.jsx +61 -70
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>GROOVE</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-DXy6tMX5.js"></script>
|
|
8
8
|
<link rel="stylesheet" crossorigin href="/assets/index-BhjOFLBc.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
@@ -221,106 +221,97 @@ function CredentialModal({ integration, onClose }) {
|
|
|
221
221
|
{/* OAuth flow for Google integrations */}
|
|
222
222
|
{isOAuth && (
|
|
223
223
|
<div style={{ marginBottom: 16 }}>
|
|
224
|
-
{
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
224
|
+
{/* Always show the primary Connect button */}
|
|
225
|
+
<button
|
|
226
|
+
onClick={oauthStatus === 'ready' ? handleOAuthConnect : () => setShowGoogleSetup(true)}
|
|
227
|
+
disabled={oauthStatus === 'checking' || oauthStatus === 'connecting'}
|
|
228
|
+
style={{
|
|
229
|
+
display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 8,
|
|
230
|
+
width: '100%', padding: '12px 16px', marginBottom: 12,
|
|
231
|
+
background: oauthStatus === 'connecting' ? 'var(--bg-active)' : '#4285f4',
|
|
232
|
+
color: '#fff', border: 'none', borderRadius: 6,
|
|
233
|
+
fontSize: 13, fontWeight: 600, cursor: 'pointer',
|
|
234
|
+
fontFamily: 'var(--font)',
|
|
235
|
+
opacity: oauthStatus === 'checking' ? 0.5 : 1,
|
|
236
|
+
}}
|
|
237
|
+
>
|
|
238
|
+
{oauthStatus === 'checking' ? 'Checking...'
|
|
239
|
+
: oauthStatus === 'connecting' ? 'Waiting for authorization...'
|
|
240
|
+
: `Connect with Google`}
|
|
241
|
+
</button>
|
|
229
242
|
|
|
230
|
-
{
|
|
243
|
+
{/* First-time setup: show inline when Connect is clicked and OAuth not configured */}
|
|
244
|
+
{showGoogleSetup && oauthStatus === 'not-configured' && (
|
|
231
245
|
<div style={{
|
|
232
|
-
padding:
|
|
233
|
-
background: '
|
|
246
|
+
padding: 14, borderRadius: 8,
|
|
247
|
+
background: 'var(--bg-surface)', border: '1px solid var(--border)',
|
|
234
248
|
}}>
|
|
235
|
-
<div style={{ fontSize:
|
|
236
|
-
|
|
249
|
+
<div style={{ fontSize: 11, fontWeight: 600, color: 'var(--text-bright)', marginBottom: 8 }}>
|
|
250
|
+
First-time setup (one time for all Google services)
|
|
237
251
|
</div>
|
|
238
|
-
<div style={{ fontSize:
|
|
239
|
-
|
|
240
|
-
This is a one-time setup that works for Gmail, Calendar, and Drive.
|
|
252
|
+
<div style={{ fontSize: 10, color: 'var(--text-dim)', lineHeight: 1.6, marginBottom: 10 }}>
|
|
253
|
+
Create a free Google Cloud OAuth app to let Groove connect on your behalf:
|
|
241
254
|
</div>
|
|
255
|
+
|
|
242
256
|
<a
|
|
243
|
-
href="https://console.cloud.google.com/apis/credentials"
|
|
257
|
+
href="https://console.cloud.google.com/apis/credentials/oauthclient"
|
|
244
258
|
target="_blank"
|
|
245
259
|
rel="noopener noreferrer"
|
|
246
260
|
style={{
|
|
247
|
-
display: '
|
|
248
|
-
|
|
249
|
-
|
|
261
|
+
display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 6,
|
|
262
|
+
padding: '8px 14px', marginBottom: 10,
|
|
263
|
+
background: 'var(--bg-active)', color: 'var(--accent)',
|
|
264
|
+
border: '1px solid var(--accent)', borderRadius: 6,
|
|
265
|
+
fontSize: 11, fontWeight: 600, textDecoration: 'none',
|
|
250
266
|
}}
|
|
251
267
|
>
|
|
252
268
|
Open Google Cloud Console {'\u2197'}
|
|
253
269
|
</a>
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
270
|
+
|
|
271
|
+
<div style={{ fontSize: 10, color: 'var(--text-muted)', lineHeight: 1.7, marginBottom: 12 }}>
|
|
272
|
+
1. Create a project if you don't have one{'\n'}
|
|
273
|
+
2. Set up OAuth consent screen (External, add your email as test user){'\n'}
|
|
274
|
+
3. Create credentials {'\u2192'} OAuth client ID {'\u2192'} Desktop app{'\n'}
|
|
275
|
+
4. Paste the Client ID and Secret below:
|
|
259
276
|
</div>
|
|
260
|
-
<button
|
|
261
|
-
onClick={() => setShowGoogleSetup(true)}
|
|
262
|
-
style={{ ...modal.saveBtn, width: '100%' }}
|
|
263
|
-
>
|
|
264
|
-
I have my Client ID and Secret
|
|
265
|
-
</button>
|
|
266
|
-
</div>
|
|
267
|
-
)}
|
|
268
277
|
|
|
269
|
-
|
|
270
|
-
<div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>
|
|
271
|
-
<div>
|
|
272
|
-
<label style={modal.label}>Google OAuth Client ID</label>
|
|
278
|
+
<div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>
|
|
273
279
|
<input
|
|
274
280
|
value={googleClientId}
|
|
275
281
|
onChange={(e) => setGoogleClientId(e.target.value)}
|
|
276
|
-
placeholder="
|
|
282
|
+
placeholder="Client ID (e.g. 123456.apps.googleusercontent.com)"
|
|
277
283
|
style={modal.input}
|
|
278
284
|
/>
|
|
279
|
-
</div>
|
|
280
|
-
<div>
|
|
281
|
-
<label style={modal.label}>Google OAuth Client Secret</label>
|
|
282
285
|
<input
|
|
283
286
|
type="password"
|
|
284
287
|
value={googleClientSecret}
|
|
285
288
|
onChange={(e) => setGoogleClientSecret(e.target.value)}
|
|
286
|
-
placeholder="GOCSPX-..."
|
|
289
|
+
placeholder="Client Secret (e.g. GOCSPX-...)"
|
|
287
290
|
style={modal.input}
|
|
288
291
|
/>
|
|
292
|
+
<button
|
|
293
|
+
onClick={async () => {
|
|
294
|
+
await handleGoogleSetup();
|
|
295
|
+
// After saving, immediately trigger the OAuth connect flow
|
|
296
|
+
if (googleClientId && googleClientSecret) {
|
|
297
|
+
setTimeout(() => handleOAuthConnect(), 500);
|
|
298
|
+
}
|
|
299
|
+
}}
|
|
300
|
+
disabled={saving || !googleClientId || !googleClientSecret}
|
|
301
|
+
style={{
|
|
302
|
+
...modal.saveBtn, width: '100%',
|
|
303
|
+
opacity: saving || !googleClientId || !googleClientSecret ? 0.4 : 1,
|
|
304
|
+
}}
|
|
305
|
+
>
|
|
306
|
+
{saving ? 'Saving...' : 'Save & Connect'}
|
|
307
|
+
</button>
|
|
289
308
|
</div>
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
style={{
|
|
294
|
-
...modal.saveBtn, width: '100%',
|
|
295
|
-
opacity: saving || !googleClientId || !googleClientSecret ? 0.4 : 1,
|
|
296
|
-
}}
|
|
297
|
-
>
|
|
298
|
-
{saving ? 'Saving...' : 'Save Google OAuth Credentials'}
|
|
299
|
-
</button>
|
|
300
|
-
<div style={{ fontSize: 9, color: 'var(--text-muted)', textAlign: 'center' }}>
|
|
301
|
-
Stored encrypted, only on this machine. One-time setup for all Google integrations.
|
|
309
|
+
|
|
310
|
+
<div style={{ fontSize: 9, color: 'var(--text-muted)', textAlign: 'center', marginTop: 6 }}>
|
|
311
|
+
One-time setup. Works for Gmail, Calendar, and Drive. Encrypted on this machine only.
|
|
302
312
|
</div>
|
|
303
313
|
</div>
|
|
304
314
|
)}
|
|
305
|
-
|
|
306
|
-
{(oauthStatus === 'ready' || oauthStatus === 'connecting') && (
|
|
307
|
-
<button
|
|
308
|
-
onClick={handleOAuthConnect}
|
|
309
|
-
disabled={oauthStatus === 'connecting'}
|
|
310
|
-
style={{
|
|
311
|
-
display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 8,
|
|
312
|
-
width: '100%', padding: '12px 16px',
|
|
313
|
-
background: oauthStatus === 'connecting' ? 'var(--bg-active)' : '#4285f4',
|
|
314
|
-
color: '#fff', border: 'none', borderRadius: 6,
|
|
315
|
-
fontSize: 13, fontWeight: 600, cursor: 'pointer',
|
|
316
|
-
fontFamily: 'var(--font)',
|
|
317
|
-
}}
|
|
318
|
-
>
|
|
319
|
-
{oauthStatus === 'connecting'
|
|
320
|
-
? 'Waiting for authorization...'
|
|
321
|
-
: `Connect with Google`}
|
|
322
|
-
</button>
|
|
323
|
-
)}
|
|
324
315
|
</div>
|
|
325
316
|
)}
|
|
326
317
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "groove-dev",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.3",
|
|
4
4
|
"description": "Open-source agent orchestration layer — the AI company OS. 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.",
|
|
5
5
|
"license": "FSL-1.1-Apache-2.0",
|
|
6
6
|
"author": "Groove Dev <hello@groovedev.ai> (https://groovedev.ai)",
|
|
@@ -107,9 +107,9 @@
|
|
|
107
107
|
{ "key": "GOOGLE_REFRESH_TOKEN", "label": "Refresh Token", "required": true, "hidden": true }
|
|
108
108
|
],
|
|
109
109
|
"setupSteps": [
|
|
110
|
-
"Click 'Connect with Google' below",
|
|
111
|
-
"
|
|
112
|
-
"
|
|
110
|
+
"Click 'Connect with Google' below to sign in",
|
|
111
|
+
"Authorize Groove to access your calendar",
|
|
112
|
+
"Done — credentials are encrypted and stored locally"
|
|
113
113
|
],
|
|
114
114
|
"featured": false,
|
|
115
115
|
"downloads": 0,
|
|
@@ -137,9 +137,9 @@
|
|
|
137
137
|
{ "key": "GOOGLE_REFRESH_TOKEN", "label": "Refresh Token", "required": true, "hidden": true }
|
|
138
138
|
],
|
|
139
139
|
"setupSteps": [
|
|
140
|
-
"Click 'Connect with Google' below",
|
|
141
|
-
"
|
|
142
|
-
"
|
|
140
|
+
"Click 'Connect with Google' below to sign in",
|
|
141
|
+
"Authorize Groove to access your email",
|
|
142
|
+
"Done — credentials are encrypted and stored locally"
|
|
143
143
|
],
|
|
144
144
|
"featured": false,
|
|
145
145
|
"downloads": 0,
|
|
@@ -221,9 +221,9 @@
|
|
|
221
221
|
{ "key": "GOOGLE_REFRESH_TOKEN", "label": "Refresh Token", "required": true, "hidden": true }
|
|
222
222
|
],
|
|
223
223
|
"setupSteps": [
|
|
224
|
-
"Click 'Connect with Google' below",
|
|
225
|
-
"
|
|
226
|
-
"
|
|
224
|
+
"Click 'Connect with Google' below to sign in",
|
|
225
|
+
"Authorize Groove to access your Drive",
|
|
226
|
+
"Done — credentials are encrypted and stored locally"
|
|
227
227
|
],
|
|
228
228
|
"featured": false,
|
|
229
229
|
"downloads": 0,
|