@mrpatronz/nexusflow 0.2.13 → 0.2.17
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/.github/dependabot.yml +52 -52
- package/.github/workflows/dependabot-merge.yml +53 -0
- package/.github/workflows/release.yml +112 -100
- package/.vscode/launch.json +17 -17
- package/.vscode/tasks.json +17 -17
- package/GETTING_STARTED.md +114 -109
- package/README.md +336 -311
- package/desktop/build-installer.js +228 -0
- package/desktop/build.js +118 -0
- package/desktop/installer/nexusflow.iss +35 -0
- package/desktop/neutralino.config.json +39 -0
- package/desktop/package-lock.json +1060 -0
- package/desktop/package.json +14 -0
- package/dist/commands/desktop.d.ts +12 -0
- package/dist/commands/desktop.d.ts.map +1 -0
- package/dist/commands/desktop.js +119 -0
- package/dist/commands/desktop.js.map +1 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +1 -3
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/tui.d.ts +8 -0
- package/dist/commands/tui.d.ts.map +1 -0
- package/dist/commands/tui.js +386 -0
- package/dist/commands/tui.js.map +1 -0
- package/dist/commands/ui.d.ts +3 -1
- package/dist/commands/ui.d.ts.map +1 -1
- package/dist/commands/ui.js +76 -19
- package/dist/commands/ui.js.map +1 -1
- package/dist/generators/base.d.ts.map +1 -1
- package/dist/generators/base.js +78 -66
- package/dist/generators/base.js.map +1 -1
- package/dist/generators/codex.js +11 -11
- package/dist/generators/copilot.js +17 -17
- package/dist/generators/cursor.js +5 -5
- package/dist/generators/index.js +50 -50
- package/dist/generators/map-generator.js +14 -14
- package/dist/generators/skills-generator.js +28 -28
- package/dist/gui/app_logo.png +0 -0
- package/dist/gui/assets/index-Ct3qq-X4.js +25 -0
- package/dist/gui/assets/index-P_ZrgHXg.css +1 -0
- package/dist/gui/icons.svg +24 -24
- package/dist/gui/index.html +18 -18
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +182 -1
- package/dist/server.js.map +1 -1
- package/dist/server.test.js +78 -0
- package/dist/server.test.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/git.d.ts +16 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +52 -0
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/multi-git.d.ts +2 -0
- package/dist/utils/multi-git.d.ts.map +1 -1
- package/dist/utils/multi-git.js +5 -2
- package/dist/utils/multi-git.js.map +1 -1
- package/dist/utils/update-check.d.ts +3 -1
- package/dist/utils/update-check.d.ts.map +1 -1
- package/dist/utils/update-check.js +23 -6
- package/dist/utils/update-check.js.map +1 -1
- package/dist/utils/workflows.d.ts +11 -0
- package/dist/utils/workflows.d.ts.map +1 -0
- package/dist/utils/workflows.js +156 -0
- package/dist/utils/workflows.js.map +1 -0
- package/dist/utils/workflows.test.d.ts +2 -0
- package/dist/utils/workflows.test.d.ts.map +1 -0
- package/dist/utils/workflows.test.js +86 -0
- package/dist/utils/workflows.test.js.map +1 -0
- package/extension/media/icon.svg +1 -0
- package/extension/package-lock.json +2673 -2811
- package/extension/package.json +108 -70
- package/extension/src/extension.ts +631 -204
- package/extension/tsconfig.json +21 -19
- package/gui/README.md +73 -73
- package/gui/e2e/wizard.spec.ts +346 -327
- package/gui/eslint.config.js +26 -26
- package/gui/index.html +17 -17
- package/gui/package-lock.json +3079 -3118
- package/gui/package.json +36 -36
- package/gui/playwright.config.ts +41 -41
- package/gui/public/app_logo.png +0 -0
- package/gui/public/icons.svg +24 -24
- package/gui/src/App.css +1 -1
- package/gui/src/App.tsx +3407 -2722
- package/gui/src/assets/vite.svg +1 -1
- package/gui/src/features/changes/ChangesViewer.tsx +388 -388
- package/gui/src/features/knowledge/KnowledgeBase.tsx +84 -84
- package/gui/src/features/onboarding/OnboardingWizard.tsx +230 -230
- package/gui/src/features/plan/ImplementationPlan.tsx +32 -32
- package/gui/src/features/services/ServiceConsole.tsx +250 -250
- package/gui/src/features/sessions/SessionHistory.tsx +195 -195
- package/gui/src/features/workspace/WorkspaceList.tsx +666 -666
- package/gui/src/index.css +152 -110
- package/gui/src/main.tsx +94 -10
- package/gui/src/types.ts +62 -62
- package/gui/tsconfig.app.json +25 -25
- package/gui/tsconfig.json +7 -7
- package/gui/tsconfig.node.json +24 -24
- package/gui/vite.config.ts +12 -12
- package/package.json +56 -56
- package/resources/workflows/plan-implement-review.md +8 -0
- package/resources/workflows/research-verify.md +6 -0
- package/resources/workflows/solo-developer.md +3 -0
- package/scripts/simulate-workspaces.ts +55 -55
- package/src/analyzers/detect-apis.ts +290 -290
- package/src/analyzers/detect-deps.ts +315 -315
- package/src/analyzers/detect-existing.ts +74 -74
- package/src/analyzers/detect-ports.ts +110 -110
- package/src/analyzers/index.ts +97 -97
- package/src/analyzers/messaging-analyzer.ts +254 -254
- package/src/analyzers/readme-summarizer.ts +102 -102
- package/src/analyzers/run-analyzer.ts +269 -269
- package/src/analyzers/tech-stack.ts +283 -283
- package/src/commands/add-repo.ts +157 -157
- package/src/commands/commands.test.ts +155 -155
- package/src/commands/commit.ts +131 -131
- package/src/commands/create.ts +207 -207
- package/src/commands/desktop.ts +128 -0
- package/src/commands/diff.ts +125 -125
- package/src/commands/doctor.ts +357 -357
- package/src/commands/handoff.ts +266 -266
- package/src/commands/init.ts +134 -134
- package/src/commands/list.ts +46 -46
- package/src/commands/logs.ts +63 -63
- package/src/commands/mcp.ts +92 -92
- package/src/commands/open.ts +129 -129
- package/src/commands/pack.ts +73 -73
- package/src/commands/refresh.ts +147 -147
- package/src/commands/remove.ts +98 -98
- package/src/commands/start.ts +117 -117
- package/src/commands/status.ts +54 -54
- package/src/commands/stop.ts +55 -55
- package/src/commands/sync.ts +151 -153
- package/src/commands/tui.ts +424 -0
- package/src/commands/ui.ts +111 -47
- package/src/core/config.test.ts +96 -96
- package/src/core/config.ts +115 -115
- package/src/core/graph.ts +344 -344
- package/src/core/packer.test.ts +99 -99
- package/src/core/packer.ts +107 -107
- package/src/core/scanner.test.ts +61 -61
- package/src/core/scanner.ts +91 -91
- package/src/core/workspace.ts +380 -380
- package/src/core/worktree.ts +120 -120
- package/src/generators/antigravity.ts +32 -32
- package/src/generators/base.ts +240 -227
- package/src/generators/claude.ts +34 -34
- package/src/generators/codex.ts +48 -48
- package/src/generators/copilot.ts +56 -56
- package/src/generators/cursor.ts +44 -44
- package/src/generators/index.ts +250 -250
- package/src/generators/map-generator.test.ts +159 -159
- package/src/generators/map-generator.ts +542 -542
- package/src/generators/plan-generator.ts +481 -481
- package/src/generators/skills-generator.ts +259 -259
- package/src/index.ts +426 -382
- package/src/mcp/server.ts +294 -294
- package/src/orchestration/detect.ts +313 -313
- package/src/orchestration/index.ts +7 -7
- package/src/orchestration/runner.ts +283 -283
- package/src/server.test.ts +555 -464
- package/src/server.ts +1308 -1104
- package/src/types.ts +408 -403
- package/src/utils/detect-ai.test.ts +44 -44
- package/src/utils/detect-ai.ts +84 -84
- package/src/utils/detect-editors.test.ts +48 -48
- package/src/utils/detect-editors.ts +57 -57
- package/src/utils/git.test.ts +74 -74
- package/src/utils/git.ts +117 -61
- package/src/utils/local-ai.test.ts +130 -130
- package/src/utils/local-ai.ts +111 -111
- package/src/utils/multi-git.ts +313 -306
- package/src/utils/prompts.ts +209 -209
- package/src/utils/session-finder.ts +483 -483
- package/src/utils/system-scanner.test.ts +89 -89
- package/src/utils/system-scanner.ts +96 -96
- package/src/utils/update-check.ts +309 -275
- package/src/utils/workflows.test.ts +114 -0
- package/src/utils/workflows.ts +178 -0
- package/tsconfig.json +19 -19
- package/vitest.config.ts +14 -14
- package/dist/gui/assets/index-CFWwqFux.js +0 -23
- package/dist/gui/assets/index-Dvc9QMvl.css +0 -2
package/gui/src/index.css
CHANGED
|
@@ -1,110 +1,152 @@
|
|
|
1
|
-
@import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
@
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
.
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
|
|
1
|
+
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&family=Space+Grotesk:wght@300..700&display=swap');
|
|
2
|
+
@import "tailwindcss";
|
|
3
|
+
|
|
4
|
+
/* Global Font Overrides to Monospace */
|
|
5
|
+
body {
|
|
6
|
+
font-family: 'JetBrains Mono', monospace !important;
|
|
7
|
+
background-color: #030408 !important;
|
|
8
|
+
background-image:
|
|
9
|
+
radial-gradient(at 50% 0%, rgba(139, 92, 246, 0.06) 0px, transparent 50%),
|
|
10
|
+
radial-gradient(at 0% 100%, rgba(6, 182, 212, 0.04) 0px, transparent 50%) !important;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
h1, h2, h3, h4, h5, h6, button, input, select, textarea, code, pre {
|
|
14
|
+
font-family: 'JetBrains Mono', monospace !important;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* Custom Sleek Scrollbars */
|
|
18
|
+
::-webkit-scrollbar {
|
|
19
|
+
width: 6px;
|
|
20
|
+
height: 6px;
|
|
21
|
+
}
|
|
22
|
+
::-webkit-scrollbar-track {
|
|
23
|
+
background: #05070c;
|
|
24
|
+
}
|
|
25
|
+
::-webkit-scrollbar-thumb {
|
|
26
|
+
background: #1f2937;
|
|
27
|
+
border-radius: 3px;
|
|
28
|
+
border: 1px solid rgba(255, 255, 255, 0.03);
|
|
29
|
+
}
|
|
30
|
+
::-webkit-scrollbar-thumb:hover {
|
|
31
|
+
background: #374151;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* Glassmorphism and Terminal UI Helpers */
|
|
35
|
+
@utility glass-card {
|
|
36
|
+
background: rgba(5, 7, 12, 0.6) !important;
|
|
37
|
+
backdrop-filter: blur(12px);
|
|
38
|
+
-webkit-backdrop-filter: blur(12px);
|
|
39
|
+
border: 1px solid rgba(255, 255, 255, 0.04) !important;
|
|
40
|
+
box-shadow: 0 4px 20px 0 rgba(0, 0, 0, 0.5) !important;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@utility glass-card-glow {
|
|
44
|
+
box-shadow: 0 0 15px rgba(6, 182, 212, 0.05), inset 0 0 1px 1px rgba(255, 255, 255, 0.03);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@utility text-glow-cyan {
|
|
48
|
+
text-shadow: 0 0 8px rgba(6, 182, 212, 0.4);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@utility text-glow-green {
|
|
52
|
+
text-shadow: 0 0 8px rgba(16, 185, 129, 0.4);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@utility neon-border {
|
|
56
|
+
box-shadow: 0 0 10px rgba(6, 182, 212, 0.1);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@utility neon-border-green {
|
|
60
|
+
box-shadow: 0 0 10px rgba(16, 185, 129, 0.1);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* CRT Scanline effect */
|
|
64
|
+
.crt-screen {
|
|
65
|
+
position: relative;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.crt-screen::after {
|
|
69
|
+
content: " ";
|
|
70
|
+
display: block;
|
|
71
|
+
position: absolute;
|
|
72
|
+
top: 0; left: 0; bottom: 0; right: 0;
|
|
73
|
+
background: linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.2) 50%), linear-gradient(90deg, rgba(255, 0, 0, 0.04), rgba(0, 255, 0, 0.01), rgba(0, 255, 0, 0.04));
|
|
74
|
+
z-index: 10;
|
|
75
|
+
background-size: 100% 4px, 6px 100%;
|
|
76
|
+
pointer-events: none;
|
|
77
|
+
opacity: 0.35;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@utility animate-slide-in {
|
|
81
|
+
animation: slide-in 0.3s cubic-bezier(0.16, 1, 0.3, 1) forwards;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@utility animate-fade-in {
|
|
85
|
+
animation: fade-in 0.2s ease-out forwards;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@utility animate-spin-slow {
|
|
89
|
+
animation: spin 8s linear infinite;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
@utility animate-pulse-glow-green {
|
|
93
|
+
animation: pulse-glow-green 2s infinite ease-in-out;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
@utility animate-pulse-glow-cyan {
|
|
97
|
+
animation: pulse-glow-cyan 2.5s infinite ease-in-out;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
@keyframes slide-in {
|
|
101
|
+
from {
|
|
102
|
+
transform: translateY(0.5rem);
|
|
103
|
+
opacity: 0;
|
|
104
|
+
}
|
|
105
|
+
to {
|
|
106
|
+
transform: translateY(0);
|
|
107
|
+
opacity: 1;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
@keyframes fade-in {
|
|
112
|
+
from {
|
|
113
|
+
opacity: 0;
|
|
114
|
+
}
|
|
115
|
+
to {
|
|
116
|
+
opacity: 1;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
@keyframes pulse-glow-green {
|
|
121
|
+
0%, 100% {
|
|
122
|
+
box-shadow: 0 0 4px rgba(52, 211, 153, 0.15);
|
|
123
|
+
opacity: 0.8;
|
|
124
|
+
}
|
|
125
|
+
50% {
|
|
126
|
+
box-shadow: 0 0 10px rgba(52, 211, 153, 0.4);
|
|
127
|
+
opacity: 1;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
@keyframes pulse-glow-cyan {
|
|
132
|
+
0%, 100% {
|
|
133
|
+
box-shadow: 0 0 4px rgba(6, 182, 212, 0.15);
|
|
134
|
+
}
|
|
135
|
+
50% {
|
|
136
|
+
box-shadow: 0 0 12px rgba(6, 182, 212, 0.4);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/* Custom terminal colors */
|
|
141
|
+
.term-matrix {
|
|
142
|
+
color: #10b981;
|
|
143
|
+
background-color: #030712;
|
|
144
|
+
}
|
|
145
|
+
.term-dracula {
|
|
146
|
+
color: #f8f8f2;
|
|
147
|
+
background-color: #282a36;
|
|
148
|
+
}
|
|
149
|
+
.term-classic {
|
|
150
|
+
color: #e5e7eb;
|
|
151
|
+
background-color: #0b0f19;
|
|
152
|
+
}
|
package/gui/src/main.tsx
CHANGED
|
@@ -1,10 +1,94 @@
|
|
|
1
|
-
import { StrictMode } from 'react'
|
|
2
|
-
import { createRoot } from 'react-dom/client'
|
|
3
|
-
import './index.css'
|
|
4
|
-
import App from './App.tsx'
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { StrictMode } from 'react'
|
|
2
|
+
import { createRoot } from 'react-dom/client'
|
|
3
|
+
import './index.css'
|
|
4
|
+
import App from './App.tsx'
|
|
5
|
+
|
|
6
|
+
declare global {
|
|
7
|
+
interface Window {
|
|
8
|
+
Neutralino?: any;
|
|
9
|
+
NL_PATH?: string;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async function waitForBackend(url: string, maxRetries = 25, delay = 200): Promise<boolean> {
|
|
14
|
+
for (let i = 0; i < maxRetries; i++) {
|
|
15
|
+
try {
|
|
16
|
+
const res = await fetch(url);
|
|
17
|
+
if (res.ok) {
|
|
18
|
+
console.log(`Backend connection established on attempt ${i + 1}`);
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
} catch {
|
|
22
|
+
// Ignored, retry
|
|
23
|
+
}
|
|
24
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
25
|
+
}
|
|
26
|
+
console.warn(`Backend connection timed out after ${maxRetries} attempts`);
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function renderApp() {
|
|
31
|
+
createRoot(document.getElementById('root')!).render(
|
|
32
|
+
<StrictMode>
|
|
33
|
+
<App />
|
|
34
|
+
</StrictMode>,
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (typeof window !== 'undefined' && window.Neutralino) {
|
|
39
|
+
window.Neutralino.init();
|
|
40
|
+
window.Neutralino.events.on('windowClose', () => {
|
|
41
|
+
window.Neutralino.app.exit();
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
(async () => {
|
|
45
|
+
const backendUrl = 'http://localhost:3000/api/config';
|
|
46
|
+
try {
|
|
47
|
+
const res = await fetch(backendUrl);
|
|
48
|
+
if (res.ok) {
|
|
49
|
+
console.log('NexusFlow Hono backend is already running.');
|
|
50
|
+
renderApp();
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
} catch {
|
|
54
|
+
console.log('NexusFlow Hono backend not detected. Launching...');
|
|
55
|
+
try {
|
|
56
|
+
const isWin = navigator.platform.includes('Win') || navigator.userAgent.includes('Windows');
|
|
57
|
+
const nlPath = window.NL_PATH || '.';
|
|
58
|
+
|
|
59
|
+
// Construct paths for packaged mode
|
|
60
|
+
const nodeBinary = isWin ? `${nlPath}/node/node.exe` : `${nlPath}/node/bin/node`;
|
|
61
|
+
const serverScript = `${nlPath}/server/dist/index.js`;
|
|
62
|
+
|
|
63
|
+
// Check if we are running in packaged mode by testing if the embedded node exists
|
|
64
|
+
let isPackaged = false;
|
|
65
|
+
try {
|
|
66
|
+
await window.Neutralino.filesystem.getStats(nodeBinary);
|
|
67
|
+
isPackaged = true;
|
|
68
|
+
} catch {
|
|
69
|
+
// File doesn't exist or filesystem API failed, meaning dev mode
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
let cmd: string;
|
|
73
|
+
if (isPackaged) {
|
|
74
|
+
console.log('Running in packaged mode, using embedded node and server...');
|
|
75
|
+
cmd = `"${nodeBinary}" "${serverScript}" ui --server-only --port 3000`;
|
|
76
|
+
} else {
|
|
77
|
+
console.log('Running in development mode, using global node and relative path...');
|
|
78
|
+
cmd = 'node ../NexusFlow/dist/index.js ui --server-only --port 3000';
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
console.log('Spawning backend command:', cmd);
|
|
82
|
+
await window.Neutralino.os.execCommand(cmd, { background: true });
|
|
83
|
+
console.log('Hono backend successfully spawned. Waiting for port 3000...');
|
|
84
|
+
await waitForBackend(backendUrl);
|
|
85
|
+
} catch (err) {
|
|
86
|
+
console.error('Failed to spawn Hono backend:', err);
|
|
87
|
+
} finally {
|
|
88
|
+
renderApp();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
})();
|
|
92
|
+
} else {
|
|
93
|
+
renderApp();
|
|
94
|
+
}
|
package/gui/src/types.ts
CHANGED
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
// Types matched with src/types.ts
|
|
2
|
-
|
|
3
|
-
export interface NexusFlowConfig {
|
|
4
|
-
version: string;
|
|
5
|
-
devDir: string;
|
|
6
|
-
workspacesDir: string;
|
|
7
|
-
defaultAssistant: string | null;
|
|
8
|
-
defaultEditor?: string | null;
|
|
9
|
-
scanDepth: number;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export interface DetectedAI {
|
|
13
|
-
name: string;
|
|
14
|
-
displayName: string;
|
|
15
|
-
detected: boolean;
|
|
16
|
-
command?: string;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface DetectedEditor {
|
|
20
|
-
name: string;
|
|
21
|
-
command: string;
|
|
22
|
-
detected: boolean;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export interface RepoInfo {
|
|
26
|
-
name: string;
|
|
27
|
-
path: string;
|
|
28
|
-
defaultBranch: string;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export interface Feature {
|
|
32
|
-
id: string;
|
|
33
|
-
branchName: string;
|
|
34
|
-
description: string;
|
|
35
|
-
repos: string[];
|
|
36
|
-
assistants: string[];
|
|
37
|
-
workspacePath: string;
|
|
38
|
-
createdAt: string;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export interface ServiceConfig {
|
|
42
|
-
name: string;
|
|
43
|
-
cwd: string;
|
|
44
|
-
command: string;
|
|
45
|
-
args: string[];
|
|
46
|
-
port?: number;
|
|
47
|
-
source: string;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export interface OrchestrationDetection {
|
|
51
|
-
tool: string;
|
|
52
|
-
configPath: string;
|
|
53
|
-
startCommand: string;
|
|
54
|
-
stopCommand: string;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export interface RunningService {
|
|
58
|
-
name: string;
|
|
59
|
-
pid: number;
|
|
60
|
-
config: ServiceConfig;
|
|
61
|
-
startedAt: string;
|
|
62
|
-
}
|
|
1
|
+
// Types matched with src/types.ts
|
|
2
|
+
|
|
3
|
+
export interface NexusFlowConfig {
|
|
4
|
+
version: string;
|
|
5
|
+
devDir: string;
|
|
6
|
+
workspacesDir: string;
|
|
7
|
+
defaultAssistant: string | null;
|
|
8
|
+
defaultEditor?: string | null;
|
|
9
|
+
scanDepth: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface DetectedAI {
|
|
13
|
+
name: string;
|
|
14
|
+
displayName: string;
|
|
15
|
+
detected: boolean;
|
|
16
|
+
command?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface DetectedEditor {
|
|
20
|
+
name: string;
|
|
21
|
+
command: string;
|
|
22
|
+
detected: boolean;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface RepoInfo {
|
|
26
|
+
name: string;
|
|
27
|
+
path: string;
|
|
28
|
+
defaultBranch: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface Feature {
|
|
32
|
+
id: string;
|
|
33
|
+
branchName: string;
|
|
34
|
+
description: string;
|
|
35
|
+
repos: string[];
|
|
36
|
+
assistants: string[];
|
|
37
|
+
workspacePath: string;
|
|
38
|
+
createdAt: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface ServiceConfig {
|
|
42
|
+
name: string;
|
|
43
|
+
cwd: string;
|
|
44
|
+
command: string;
|
|
45
|
+
args: string[];
|
|
46
|
+
port?: number;
|
|
47
|
+
source: string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface OrchestrationDetection {
|
|
51
|
+
tool: string;
|
|
52
|
+
configPath: string;
|
|
53
|
+
startCommand: string;
|
|
54
|
+
stopCommand: string;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface RunningService {
|
|
58
|
+
name: string;
|
|
59
|
+
pid: number;
|
|
60
|
+
config: ServiceConfig;
|
|
61
|
+
startedAt: string;
|
|
62
|
+
}
|
package/gui/tsconfig.app.json
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
|
|
4
|
-
"target": "es2023",
|
|
5
|
-
"lib": ["ES2023", "DOM"],
|
|
6
|
-
"module": "esnext",
|
|
7
|
-
"types": ["vite/client"],
|
|
8
|
-
"skipLibCheck": true,
|
|
9
|
-
|
|
10
|
-
/* Bundler mode */
|
|
11
|
-
"moduleResolution": "bundler",
|
|
12
|
-
"allowImportingTsExtensions": true,
|
|
13
|
-
"verbatimModuleSyntax": true,
|
|
14
|
-
"moduleDetection": "force",
|
|
15
|
-
"noEmit": true,
|
|
16
|
-
"jsx": "react-jsx",
|
|
17
|
-
|
|
18
|
-
/* Linting */
|
|
19
|
-
"noUnusedLocals": true,
|
|
20
|
-
"noUnusedParameters": true,
|
|
21
|
-
"erasableSyntaxOnly": true,
|
|
22
|
-
"noFallthroughCasesInSwitch": true
|
|
23
|
-
},
|
|
24
|
-
"include": ["src"]
|
|
25
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
|
|
4
|
+
"target": "es2023",
|
|
5
|
+
"lib": ["ES2023", "DOM"],
|
|
6
|
+
"module": "esnext",
|
|
7
|
+
"types": ["vite/client"],
|
|
8
|
+
"skipLibCheck": true,
|
|
9
|
+
|
|
10
|
+
/* Bundler mode */
|
|
11
|
+
"moduleResolution": "bundler",
|
|
12
|
+
"allowImportingTsExtensions": true,
|
|
13
|
+
"verbatimModuleSyntax": true,
|
|
14
|
+
"moduleDetection": "force",
|
|
15
|
+
"noEmit": true,
|
|
16
|
+
"jsx": "react-jsx",
|
|
17
|
+
|
|
18
|
+
/* Linting */
|
|
19
|
+
"noUnusedLocals": true,
|
|
20
|
+
"noUnusedParameters": true,
|
|
21
|
+
"erasableSyntaxOnly": true,
|
|
22
|
+
"noFallthroughCasesInSwitch": true
|
|
23
|
+
},
|
|
24
|
+
"include": ["src"]
|
|
25
|
+
}
|
package/gui/tsconfig.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
{
|
|
2
|
-
"files": [],
|
|
3
|
-
"references": [
|
|
4
|
-
{ "path": "./tsconfig.app.json" },
|
|
5
|
-
{ "path": "./tsconfig.node.json" }
|
|
6
|
-
]
|
|
7
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"files": [],
|
|
3
|
+
"references": [
|
|
4
|
+
{ "path": "./tsconfig.app.json" },
|
|
5
|
+
{ "path": "./tsconfig.node.json" }
|
|
6
|
+
]
|
|
7
|
+
}
|
package/gui/tsconfig.node.json
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
|
|
4
|
-
"target": "es2023",
|
|
5
|
-
"lib": ["ES2023"],
|
|
6
|
-
"module": "esnext",
|
|
7
|
-
"types": ["node"],
|
|
8
|
-
"skipLibCheck": true,
|
|
9
|
-
|
|
10
|
-
/* Bundler mode */
|
|
11
|
-
"moduleResolution": "bundler",
|
|
12
|
-
"allowImportingTsExtensions": true,
|
|
13
|
-
"verbatimModuleSyntax": true,
|
|
14
|
-
"moduleDetection": "force",
|
|
15
|
-
"noEmit": true,
|
|
16
|
-
|
|
17
|
-
/* Linting */
|
|
18
|
-
"noUnusedLocals": true,
|
|
19
|
-
"noUnusedParameters": true,
|
|
20
|
-
"erasableSyntaxOnly": true,
|
|
21
|
-
"noFallthroughCasesInSwitch": true
|
|
22
|
-
},
|
|
23
|
-
"include": ["vite.config.ts"]
|
|
24
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
|
|
4
|
+
"target": "es2023",
|
|
5
|
+
"lib": ["ES2023"],
|
|
6
|
+
"module": "esnext",
|
|
7
|
+
"types": ["node"],
|
|
8
|
+
"skipLibCheck": true,
|
|
9
|
+
|
|
10
|
+
/* Bundler mode */
|
|
11
|
+
"moduleResolution": "bundler",
|
|
12
|
+
"allowImportingTsExtensions": true,
|
|
13
|
+
"verbatimModuleSyntax": true,
|
|
14
|
+
"moduleDetection": "force",
|
|
15
|
+
"noEmit": true,
|
|
16
|
+
|
|
17
|
+
/* Linting */
|
|
18
|
+
"noUnusedLocals": true,
|
|
19
|
+
"noUnusedParameters": true,
|
|
20
|
+
"erasableSyntaxOnly": true,
|
|
21
|
+
"noFallthroughCasesInSwitch": true
|
|
22
|
+
},
|
|
23
|
+
"include": ["vite.config.ts"]
|
|
24
|
+
}
|
package/gui/vite.config.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { defineConfig } from 'vite'
|
|
2
|
-
import react from '@vitejs/plugin-react'
|
|
3
|
-
import tailwindcss from '@tailwindcss/vite'
|
|
4
|
-
|
|
5
|
-
// https://vite.dev/config/
|
|
6
|
-
export default defineConfig({
|
|
7
|
-
plugins: [react(), tailwindcss()],
|
|
8
|
-
build: {
|
|
9
|
-
outDir: '../dist/gui',
|
|
10
|
-
emptyOutDir: true,
|
|
11
|
-
},
|
|
12
|
-
})
|
|
1
|
+
import { defineConfig } from 'vite'
|
|
2
|
+
import react from '@vitejs/plugin-react'
|
|
3
|
+
import tailwindcss from '@tailwindcss/vite'
|
|
4
|
+
|
|
5
|
+
// https://vite.dev/config/
|
|
6
|
+
export default defineConfig({
|
|
7
|
+
plugins: [react(), tailwindcss()],
|
|
8
|
+
build: {
|
|
9
|
+
outDir: '../dist/gui',
|
|
10
|
+
emptyOutDir: true,
|
|
11
|
+
},
|
|
12
|
+
})
|