@automagik/genie 4.260330.4 → 4.260330.6

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.
@@ -10,7 +10,7 @@
10
10
  "plugins": [
11
11
  {
12
12
  "name": "genie",
13
- "version": "4.260330.4",
13
+ "version": "4.260330.6",
14
14
  "source": "./plugins/genie",
15
15
  "description": "Human-AI partnership for Claude Code. Share a terminal, orchestrate workers, evolve together. Brainstorm ideas, wish them into plans, make with parallel agents, ship as one team. A coding genie that grows with your project."
16
16
  }
package/knip.json CHANGED
@@ -23,5 +23,5 @@
23
23
  "project": ["src/**/*.ts", "src/**/*.tsx"],
24
24
  "ignoreBinaries": ["tmux", "which"],
25
25
  "ignoreExportsUsedInFile": false,
26
- "ignoreDependencies": ["@tauri-apps/cli"]
26
+ "ignoreDependencies": ["@tauri-apps/cli", "react-dom", "@vitejs/plugin-react", "vite", "@types/react-dom"]
27
27
  }
@@ -2,7 +2,7 @@
2
2
  "id": "genie",
3
3
  "name": "Genie",
4
4
  "description": "Skills, agents, and hooks for the Genie CLI terminal orchestration toolkit",
5
- "version": "4.260330.4",
5
+ "version": "4.260330.6",
6
6
  "configSchema": {
7
7
  "type": "object",
8
8
  "additionalProperties": false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@automagik/genie",
3
- "version": "4.260330.4",
3
+ "version": "4.260330.6",
4
4
  "description": "Collaborative terminal toolkit for human + AI workflows",
5
5
  "type": "module",
6
6
  "bin": {
@@ -32,6 +32,7 @@
32
32
  "pgserve": "^1.1.6",
33
33
  "postgres": "^3.4.8",
34
34
  "react": "^19.2.4",
35
+ "react-dom": "^19.2.4",
35
36
  "uuid": "^11.1.0",
36
37
  "zod": "^3.25.0"
37
38
  },
@@ -44,10 +45,13 @@
44
45
  "@types/js-yaml": "^4.0.9",
45
46
  "@types/node": "^22.0.0",
46
47
  "@types/react": "^19.2.14",
48
+ "@types/react-dom": "^19.0.0",
49
+ "@vitejs/plugin-react": "^4.5.2",
47
50
  "esbuild": "^0.27.3",
48
51
  "husky": "^9.1.7",
49
52
  "knip": "^5.86.0",
50
- "typescript": "^5.8.0"
53
+ "typescript": "^5.8.0",
54
+ "vite": "^6.3.5"
51
55
  },
52
56
  "repository": {
53
57
  "type": "git",
@@ -0,0 +1,28 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Genie</title>
7
+ <style>
8
+ * { margin: 0; padding: 0; box-sizing: border-box; }
9
+ html, body, #root { height: 100%; width: 100%; overflow: hidden; }
10
+ body {
11
+ background: #1a1028;
12
+ color: #e2e8f0;
13
+ font-family: 'JetBrains Mono', 'Fira Code', 'SF Mono', monospace;
14
+ -webkit-font-smoothing: antialiased;
15
+ }
16
+ /* Prevent text selection on nav elements */
17
+ [data-nav] { user-select: none; -webkit-user-select: none; }
18
+ /* Scrollbar styling */
19
+ ::-webkit-scrollbar { width: 6px; height: 6px; }
20
+ ::-webkit-scrollbar-track { background: #414868; }
21
+ ::-webkit-scrollbar-thumb { background: #7aa2f7; border-radius: 3px; }
22
+ </style>
23
+ </head>
24
+ <body>
25
+ <div id="root"></div>
26
+ <script type="module" src="/src/main.tsx"></script>
27
+ </body>
28
+ </html>
@@ -9,14 +9,23 @@
9
9
  "./components": "./components.ts",
10
10
  "./views/*": "./views/*/ui/*.tsx"
11
11
  },
12
+ "scripts": {
13
+ "dev": "vite",
14
+ "build": "vite build",
15
+ "preview": "vite preview"
16
+ },
12
17
  "genieOs": {
13
18
  "services": ["sidecar"]
14
19
  },
15
- "peerDependencies": {
16
- "react": ">=19"
20
+ "dependencies": {
21
+ "react": "^19.2.4",
22
+ "react-dom": "^19.2.4"
17
23
  },
18
24
  "devDependencies": {
19
25
  "typescript": "^5.8.0",
20
- "@types/react": "^19.2.14"
26
+ "@types/react": "^19.2.14",
27
+ "@types/react-dom": "^19.0.0",
28
+ "@vitejs/plugin-react": "^4.5.2",
29
+ "vite": "^6.3.5"
21
30
  }
22
31
  }
@@ -0,0 +1,98 @@
1
+ import { Suspense, useState } from 'react';
2
+ import { components } from '../components';
3
+ import { StatusBar } from '../lib/StatusBar';
4
+ import { theme } from '../lib/theme';
5
+
6
+ type ViewKey = keyof typeof components;
7
+
8
+ const NAV_ITEMS: Array<{ key: ViewKey; label: string; icon: string }> = [
9
+ { key: 'dashboard', label: 'Dashboard', icon: '\u25c6' },
10
+ { key: 'agents', label: 'Agents', icon: '\u25cb' },
11
+ { key: 'tasks', label: 'Tasks', icon: '\u2610' },
12
+ { key: 'terminal', label: 'Terminal', icon: '>' },
13
+ { key: 'activity', label: 'Activity', icon: '\u2022' },
14
+ ];
15
+
16
+ export function App() {
17
+ const [activeView, setActiveView] = useState<ViewKey>('dashboard');
18
+
19
+ const ActiveComponent = components[activeView];
20
+
21
+ return (
22
+ <div style={{ display: 'flex', flexDirection: 'column', height: '100vh', backgroundColor: theme.bg }}>
23
+ {/* Main area: sidebar + content */}
24
+ <div style={{ display: 'flex', flex: 1, overflow: 'hidden' }}>
25
+ {/* Sidebar nav */}
26
+ <nav
27
+ data-nav
28
+ style={{
29
+ width: '56px',
30
+ minWidth: '56px',
31
+ backgroundColor: theme.bgCard,
32
+ borderRight: `1px solid ${theme.border}`,
33
+ display: 'flex',
34
+ flexDirection: 'column',
35
+ alignItems: 'center',
36
+ paddingTop: '12px',
37
+ gap: '4px',
38
+ }}
39
+ >
40
+ {NAV_ITEMS.map((item) => {
41
+ const isActive = activeView === item.key;
42
+ return (
43
+ <button
44
+ key={item.key}
45
+ type="button"
46
+ title={item.label}
47
+ onClick={() => setActiveView(item.key)}
48
+ style={{
49
+ width: '40px',
50
+ height: '40px',
51
+ display: 'flex',
52
+ alignItems: 'center',
53
+ justifyContent: 'center',
54
+ borderRadius: theme.radiusSm,
55
+ border: 'none',
56
+ cursor: 'pointer',
57
+ fontSize: '16px',
58
+ fontFamily: theme.fontFamily,
59
+ backgroundColor: isActive ? theme.bgCardHover : 'transparent',
60
+ color: isActive ? theme.purple : theme.textMuted,
61
+ borderLeft: isActive ? `2px solid ${theme.violet}` : '2px solid transparent',
62
+ transition: 'all 0.1s ease',
63
+ }}
64
+ >
65
+ {item.icon}
66
+ </button>
67
+ );
68
+ })}
69
+ </nav>
70
+
71
+ {/* View content */}
72
+ <main style={{ flex: 1, overflow: 'hidden' }}>
73
+ <Suspense
74
+ fallback={
75
+ <div
76
+ style={{
77
+ display: 'flex',
78
+ alignItems: 'center',
79
+ justifyContent: 'center',
80
+ height: '100%',
81
+ color: theme.textMuted,
82
+ fontSize: '14px',
83
+ }}
84
+ >
85
+ Loading...
86
+ </div>
87
+ }
88
+ >
89
+ {ActiveComponent && <ActiveComponent windowId="main" />}
90
+ </Suspense>
91
+ </main>
92
+ </div>
93
+
94
+ {/* Status bar */}
95
+ <StatusBar activeView={activeView} />
96
+ </div>
97
+ );
98
+ }
@@ -0,0 +1,11 @@
1
+ import { StrictMode } from 'react';
2
+ import { createRoot } from 'react-dom/client';
3
+ import { App } from './App';
4
+
5
+ const root = document.getElementById('root');
6
+ if (!root) throw new Error('Root element not found');
7
+ createRoot(root).render(
8
+ <StrictMode>
9
+ <App />
10
+ </StrictMode>,
11
+ );
@@ -4,6 +4,8 @@
4
4
  "version": "0.1.0",
5
5
  "identifier": "dev.automagik.genie",
6
6
  "build": {
7
+ "beforeDevCommand": "bun run dev",
8
+ "beforeBuildCommand": "bun run build",
7
9
  "frontendDist": "../dist",
8
10
  "devUrl": "http://localhost:1420"
9
11
  },
@@ -16,5 +16,5 @@
16
16
  }
17
17
  },
18
18
  "include": ["./**/*.ts", "./**/*.tsx"],
19
- "exclude": ["node_modules"]
19
+ "exclude": ["node_modules", "dist", "src-tauri"]
20
20
  }
@@ -0,0 +1,14 @@
1
+ import react from '@vitejs/plugin-react';
2
+ import { defineConfig } from 'vite';
3
+
4
+ export default defineConfig({
5
+ plugins: [react()],
6
+ server: {
7
+ port: 1420,
8
+ strictPort: true,
9
+ },
10
+ build: {
11
+ outDir: 'dist',
12
+ emptyOutDir: true,
13
+ },
14
+ });
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "genie",
3
- "version": "4.260330.4",
3
+ "version": "4.260330.6",
4
4
  "description": "Human-AI partnership for Claude Code. Share a terminal, orchestrate workers, evolve together. Brainstorm ideas, turn them into wishes, execute with /work, validate with /review, and ship as one team.",
5
5
  "author": {
6
6
  "name": "Namastex Labs"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "genie-plugin",
3
- "version": "4.260330.4",
3
+ "version": "4.260330.6",
4
4
  "private": true,
5
5
  "description": "Runtime dependencies for genie bundled CLIs",
6
6
  "type": "module",