groove-dev 0.27.44 → 0.27.47

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 (48) hide show
  1. package/default/groovedev-beta-auth-endpoint.md +166 -0
  2. package/node_modules/@groove-dev/cli/package.json +1 -1
  3. package/node_modules/@groove-dev/daemon/package.json +1 -1
  4. package/node_modules/@groove-dev/daemon/src/api.js +619 -0
  5. package/node_modules/@groove-dev/daemon/src/firstrun.js +11 -0
  6. package/node_modules/@groove-dev/daemon/src/index.js +28 -0
  7. package/node_modules/@groove-dev/daemon/src/integrations.js +2 -2
  8. package/node_modules/@groove-dev/daemon/src/providers/claude-code.js +1 -1
  9. package/node_modules/@groove-dev/daemon/src/providers/groove-network.js +114 -0
  10. package/node_modules/@groove-dev/daemon/src/providers/index.js +2 -0
  11. package/node_modules/@groove-dev/gui/dist/assets/index-B9oPxmNj.js +8607 -0
  12. package/node_modules/@groove-dev/gui/dist/assets/index-CyVj0fHl.css +1 -0
  13. package/node_modules/@groove-dev/gui/dist/index.html +2 -2
  14. package/node_modules/@groove-dev/gui/package.json +1 -1
  15. package/node_modules/@groove-dev/gui/src/app.jsx +3 -0
  16. package/node_modules/@groove-dev/gui/src/components/layout/activity-bar.jsx +7 -2
  17. package/node_modules/@groove-dev/gui/src/components/network/network-status.jsx +164 -0
  18. package/node_modules/@groove-dev/gui/src/components/network/node-details.jsx +66 -0
  19. package/node_modules/@groove-dev/gui/src/components/network/node-toggle.jsx +172 -0
  20. package/node_modules/@groove-dev/gui/src/stores/groove.js +190 -0
  21. package/node_modules/@groove-dev/gui/src/views/network.jsx +227 -0
  22. package/node_modules/@groove-dev/gui/src/views/settings.jsx +93 -5
  23. package/package.json +1 -1
  24. package/packages/cli/package.json +1 -1
  25. package/packages/daemon/package.json +1 -1
  26. package/packages/daemon/src/api.js +619 -0
  27. package/packages/daemon/src/firstrun.js +11 -0
  28. package/packages/daemon/src/index.js +28 -0
  29. package/packages/daemon/src/integrations.js +2 -2
  30. package/packages/daemon/src/providers/claude-code.js +1 -1
  31. package/packages/daemon/src/providers/groove-network.js +114 -0
  32. package/packages/daemon/src/providers/index.js +2 -0
  33. package/packages/gui/dist/assets/index-B9oPxmNj.js +8607 -0
  34. package/packages/gui/dist/assets/index-CyVj0fHl.css +1 -0
  35. package/packages/gui/dist/index.html +2 -2
  36. package/packages/gui/package.json +1 -1
  37. package/packages/gui/src/app.jsx +3 -0
  38. package/packages/gui/src/components/layout/activity-bar.jsx +7 -2
  39. package/packages/gui/src/components/network/network-status.jsx +164 -0
  40. package/packages/gui/src/components/network/node-details.jsx +66 -0
  41. package/packages/gui/src/components/network/node-toggle.jsx +172 -0
  42. package/packages/gui/src/stores/groove.js +190 -0
  43. package/packages/gui/src/views/network.jsx +227 -0
  44. package/packages/gui/src/views/settings.jsx +93 -5
  45. package/node_modules/@groove-dev/gui/dist/assets/index-B5Uor698.js +0 -8607
  46. package/node_modules/@groove-dev/gui/dist/assets/index-VGmIZurO.css +0 -1
  47. package/packages/gui/dist/assets/index-B5Uor698.js +0 -8607
  48. package/packages/gui/dist/assets/index-VGmIZurO.css +0 -1
@@ -15,7 +15,7 @@ import { fmtUptime } from '../lib/format';
15
15
  import {
16
16
  Key, Eye, EyeOff, Check, Cpu,
17
17
  FolderOpen, FolderSearch, Users, Gauge,
18
- ShieldCheck, Settings,
18
+ ShieldCheck, Settings, Lock,
19
19
  Newspaper, Radio, Send, MessageSquare, MessageCircle,
20
20
  Plus, Trash2, Plug, PlugZap, TestTube, X, HelpCircle, ExternalLink,
21
21
  } from 'lucide-react';
@@ -940,6 +940,91 @@ function AddGatewayCard({ existingTypes, onAdd }) {
940
940
  );
941
941
  }
942
942
 
943
+ /* ── Early Access Section ─────────────────────────────────── */
944
+
945
+ function EarlyAccessSection() {
946
+ const networkUnlocked = useGrooveStore((s) => s.networkUnlocked);
947
+ const activateBeta = useGrooveStore((s) => s.activateBeta);
948
+ const deactivateBeta = useGrooveStore((s) => s.deactivateBeta);
949
+ const [code, setCode] = useState('');
950
+ const [submitting, setSubmitting] = useState(false);
951
+ const [error, setError] = useState('');
952
+
953
+ useEffect(() => {
954
+ if (!error) return;
955
+ const t = setTimeout(() => setError(''), 3000);
956
+ return () => clearTimeout(t);
957
+ }, [error]);
958
+
959
+ async function handleSubmit() {
960
+ const trimmed = code.trim();
961
+ if (!trimmed || submitting) return;
962
+ setSubmitting(true);
963
+ setError('');
964
+ try {
965
+ await activateBeta(trimmed);
966
+ setCode('');
967
+ } catch (err) {
968
+ setError(err.message || 'Invalid code');
969
+ } finally {
970
+ setSubmitting(false);
971
+ }
972
+ }
973
+
974
+ async function handleDeactivate() {
975
+ try { await deactivateBeta(); } catch { /* toast handled in store */ }
976
+ }
977
+
978
+ return (
979
+ <div>
980
+ <div className="flex items-center gap-2 mb-2.5 px-0.5">
981
+ <span className="text-2xs font-semibold text-text-3 font-sans uppercase tracking-wider">Early Access</span>
982
+ <div className="flex-1 h-px bg-border-subtle" />
983
+ </div>
984
+ <div className="rounded-lg border border-border-subtle bg-surface-1 px-4 py-3.5 max-w-md">
985
+ {networkUnlocked ? (
986
+ <div className="flex items-center gap-2.5">
987
+ <div className="w-6 h-6 rounded-full bg-success/10 flex items-center justify-center flex-shrink-0">
988
+ <Check size={12} className="text-success" />
989
+ </div>
990
+ <div className="flex-1 text-xs font-sans text-text-1">Early access enabled</div>
991
+ <button
992
+ onClick={handleDeactivate}
993
+ className="text-2xs text-text-4 hover:text-danger cursor-pointer font-sans"
994
+ >
995
+ Deactivate
996
+ </button>
997
+ </div>
998
+ ) : (
999
+ <div className="flex items-center gap-2">
1000
+ <Lock size={12} className="text-text-4 flex-shrink-0" />
1001
+ <input
1002
+ value={code}
1003
+ onChange={(e) => setCode(e.target.value)}
1004
+ onKeyDown={(e) => e.key === 'Enter' && handleSubmit()}
1005
+ type="text"
1006
+ placeholder="Enter invite code"
1007
+ className="flex-1 h-8 px-2.5 text-xs bg-surface-0 border border-border rounded-md text-text-0 font-mono placeholder:text-text-4 focus:outline-none focus:ring-1 focus:ring-accent"
1008
+ />
1009
+ <Button
1010
+ variant="primary"
1011
+ size="sm"
1012
+ onClick={handleSubmit}
1013
+ disabled={!code.trim() || submitting}
1014
+ className="h-8 text-xs px-3"
1015
+ >
1016
+ {submitting ? '...' : 'Submit'}
1017
+ </Button>
1018
+ </div>
1019
+ )}
1020
+ {error && !networkUnlocked && (
1021
+ <div className="mt-2 text-2xs text-danger font-sans">{error}</div>
1022
+ )}
1023
+ </div>
1024
+ </div>
1025
+ );
1026
+ }
1027
+
943
1028
  /* ── Main Settings View ────────────────────────────────────── */
944
1029
 
945
1030
  export default function SettingsView() {
@@ -996,7 +1081,8 @@ export default function SettingsView() {
996
1081
  );
997
1082
  }
998
1083
 
999
- const connectedCount = providers.filter((p) => {
1084
+ const visibleProviders = providers.filter((p) => p.id !== 'groove-network');
1085
+ const connectedCount = visibleProviders.filter((p) => {
1000
1086
  if (p.authType === 'local') return p.installed;
1001
1087
  if (p.authType === 'subscription') return p.installed;
1002
1088
  return p.installed && p.hasKey;
@@ -1032,10 +1118,10 @@ export default function SettingsView() {
1032
1118
  <div className="flex items-center gap-2 mb-2.5 px-0.5">
1033
1119
  <span className="text-2xs font-semibold text-text-3 font-sans uppercase tracking-wider">Providers</span>
1034
1120
  <div className="flex-1 h-px bg-border-subtle" />
1035
- <span className="text-2xs text-text-4 font-sans">{connectedCount}/{providers.length} connected</span>
1121
+ <span className="text-2xs text-text-4 font-sans">{connectedCount}/{visibleProviders.length} connected</span>
1036
1122
  </div>
1037
1123
  <div className="grid grid-cols-4 gap-3">
1038
- {providers.map((p) => (
1124
+ {visibleProviders.map((p) => (
1039
1125
  <ProviderCard key={p.id} provider={p} onKeyChange={loadProviders} />
1040
1126
  ))}
1041
1127
  </div>
@@ -1074,7 +1160,7 @@ export default function SettingsView() {
1074
1160
  onChange={(e) => updateConfig('defaultProvider', e.target.value)}
1075
1161
  className="w-full h-8 px-2.5 text-xs bg-surface-0 border border-border-subtle rounded-md text-text-0 font-mono focus:outline-none focus:ring-1 focus:ring-accent cursor-pointer"
1076
1162
  >
1077
- {providers.filter((p) => p.installed && (p.authType === 'local' || p.authType === 'subscription' || p.hasKey)).map((p) => (
1163
+ {visibleProviders.filter((p) => p.installed && (p.authType === 'local' || p.authType === 'subscription' || p.hasKey)).map((p) => (
1078
1164
  <option key={p.id} value={p.id}>{p.name}</option>
1079
1165
  ))}
1080
1166
  </select>
@@ -1200,6 +1286,8 @@ export default function SettingsView() {
1200
1286
  </div>
1201
1287
  )}
1202
1288
 
1289
+ {/* ═══════ EARLY ACCESS ═══════ */}
1290
+ <EarlyAccessSection />
1203
1291
 
1204
1292
  </div>
1205
1293
  </ScrollArea>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "groove-dev",
3
- "version": "0.27.44",
3
+ "version": "0.27.47",
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.44",
3
+ "version": "0.27.47",
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.44",
3
+ "version": "0.27.47",
4
4
  "description": "GROOVE daemon — agent orchestration engine",
5
5
  "license": "FSL-1.1-Apache-2.0",
6
6
  "type": "module",