@mrpatronz/nexusflow 0.2.12 → 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.
Files changed (233) hide show
  1. package/.github/dependabot.yml +52 -52
  2. package/.github/workflows/dependabot-merge.yml +53 -0
  3. package/.github/workflows/release.yml +112 -100
  4. package/.vscode/launch.json +17 -17
  5. package/.vscode/tasks.json +17 -17
  6. package/GETTING_STARTED.md +114 -109
  7. package/README.md +336 -311
  8. package/desktop/build-installer.js +228 -0
  9. package/desktop/build.js +118 -0
  10. package/desktop/installer/nexusflow.iss +35 -0
  11. package/desktop/neutralino.config.json +39 -0
  12. package/desktop/package-lock.json +1060 -0
  13. package/desktop/package.json +14 -0
  14. package/dist/commands/add-repo.d.ts.map +1 -1
  15. package/dist/commands/add-repo.js +24 -14
  16. package/dist/commands/add-repo.js.map +1 -1
  17. package/dist/commands/commit.js +1 -1
  18. package/dist/commands/commit.js.map +1 -1
  19. package/dist/commands/desktop.d.ts +12 -0
  20. package/dist/commands/desktop.d.ts.map +1 -0
  21. package/dist/commands/desktop.js +119 -0
  22. package/dist/commands/desktop.js.map +1 -0
  23. package/dist/commands/diff.js +1 -1
  24. package/dist/commands/diff.js.map +1 -1
  25. package/dist/commands/doctor.js +1 -1
  26. package/dist/commands/doctor.js.map +1 -1
  27. package/dist/commands/handoff.js +1 -1
  28. package/dist/commands/handoff.js.map +1 -1
  29. package/dist/commands/logs.js +1 -1
  30. package/dist/commands/logs.js.map +1 -1
  31. package/dist/commands/open.d.ts.map +1 -1
  32. package/dist/commands/open.js +12 -7
  33. package/dist/commands/open.js.map +1 -1
  34. package/dist/commands/pack.js +1 -1
  35. package/dist/commands/pack.js.map +1 -1
  36. package/dist/commands/refresh.js +13 -8
  37. package/dist/commands/refresh.js.map +1 -1
  38. package/dist/commands/remove.d.ts.map +1 -1
  39. package/dist/commands/remove.js +12 -7
  40. package/dist/commands/remove.js.map +1 -1
  41. package/dist/commands/start.js +1 -1
  42. package/dist/commands/start.js.map +1 -1
  43. package/dist/commands/status.js +1 -1
  44. package/dist/commands/status.js.map +1 -1
  45. package/dist/commands/stop.js +1 -1
  46. package/dist/commands/stop.js.map +1 -1
  47. package/dist/commands/sync.d.ts.map +1 -1
  48. package/dist/commands/sync.js +14 -11
  49. package/dist/commands/sync.js.map +1 -1
  50. package/dist/commands/tui.d.ts +8 -0
  51. package/dist/commands/tui.d.ts.map +1 -0
  52. package/dist/commands/tui.js +386 -0
  53. package/dist/commands/tui.js.map +1 -0
  54. package/dist/commands/ui.d.ts +3 -1
  55. package/dist/commands/ui.d.ts.map +1 -1
  56. package/dist/commands/ui.js +76 -19
  57. package/dist/commands/ui.js.map +1 -1
  58. package/dist/core/workspace.d.ts +7 -0
  59. package/dist/core/workspace.d.ts.map +1 -1
  60. package/dist/core/workspace.js +45 -1
  61. package/dist/core/workspace.js.map +1 -1
  62. package/dist/generators/base.d.ts.map +1 -1
  63. package/dist/generators/base.js +78 -66
  64. package/dist/generators/base.js.map +1 -1
  65. package/dist/generators/codex.js +11 -11
  66. package/dist/generators/copilot.js +17 -17
  67. package/dist/generators/cursor.js +5 -5
  68. package/dist/generators/index.d.ts.map +1 -1
  69. package/dist/generators/index.js +64 -50
  70. package/dist/generators/index.js.map +1 -1
  71. package/dist/generators/map-generator.js +14 -14
  72. package/dist/generators/skills-generator.js +28 -28
  73. package/dist/gui/app_logo.png +0 -0
  74. package/dist/gui/assets/index-Ct3qq-X4.js +25 -0
  75. package/dist/gui/assets/index-P_ZrgHXg.css +1 -0
  76. package/dist/gui/icons.svg +24 -24
  77. package/dist/gui/index.html +18 -18
  78. package/dist/index.js +43 -0
  79. package/dist/index.js.map +1 -1
  80. package/dist/orchestration/runner.d.ts +5 -6
  81. package/dist/orchestration/runner.d.ts.map +1 -1
  82. package/dist/orchestration/runner.js +105 -102
  83. package/dist/orchestration/runner.js.map +1 -1
  84. package/dist/server.d.ts.map +1 -1
  85. package/dist/server.js +235 -2
  86. package/dist/server.js.map +1 -1
  87. package/dist/server.test.js +78 -0
  88. package/dist/server.test.js.map +1 -1
  89. package/dist/types.d.ts +4 -0
  90. package/dist/types.d.ts.map +1 -1
  91. package/dist/utils/detect-editors.js +1 -1
  92. package/dist/utils/detect-editors.js.map +1 -1
  93. package/dist/utils/detect-editors.test.js +3 -3
  94. package/dist/utils/detect-editors.test.js.map +1 -1
  95. package/dist/utils/git.d.ts +16 -0
  96. package/dist/utils/git.d.ts.map +1 -1
  97. package/dist/utils/git.js +52 -0
  98. package/dist/utils/git.js.map +1 -1
  99. package/dist/utils/multi-git.d.ts +2 -0
  100. package/dist/utils/multi-git.d.ts.map +1 -1
  101. package/dist/utils/multi-git.js +5 -2
  102. package/dist/utils/multi-git.js.map +1 -1
  103. package/dist/utils/prompts.d.ts +1 -0
  104. package/dist/utils/prompts.d.ts.map +1 -1
  105. package/dist/utils/prompts.js +77 -15
  106. package/dist/utils/prompts.js.map +1 -1
  107. package/dist/utils/update-check.d.ts +3 -1
  108. package/dist/utils/update-check.d.ts.map +1 -1
  109. package/dist/utils/update-check.js +23 -6
  110. package/dist/utils/update-check.js.map +1 -1
  111. package/dist/utils/workflows.d.ts +11 -0
  112. package/dist/utils/workflows.d.ts.map +1 -0
  113. package/dist/utils/workflows.js +156 -0
  114. package/dist/utils/workflows.js.map +1 -0
  115. package/dist/utils/workflows.test.d.ts +2 -0
  116. package/dist/utils/workflows.test.d.ts.map +1 -0
  117. package/dist/utils/workflows.test.js +86 -0
  118. package/dist/utils/workflows.test.js.map +1 -0
  119. package/extension/media/icon.svg +1 -0
  120. package/extension/package-lock.json +2673 -2811
  121. package/extension/package.json +108 -61
  122. package/extension/src/extension.ts +631 -168
  123. package/extension/tsconfig.json +21 -19
  124. package/gui/README.md +73 -73
  125. package/gui/e2e/wizard.spec.ts +346 -327
  126. package/gui/eslint.config.js +26 -22
  127. package/gui/index.html +17 -17
  128. package/gui/package-lock.json +3079 -3118
  129. package/gui/package.json +36 -36
  130. package/gui/playwright.config.ts +41 -41
  131. package/gui/public/app_logo.png +0 -0
  132. package/gui/public/icons.svg +24 -24
  133. package/gui/src/App.css +1 -1
  134. package/gui/src/App.tsx +3407 -2498
  135. package/gui/src/assets/vite.svg +1 -1
  136. package/gui/src/features/changes/ChangesViewer.tsx +388 -212
  137. package/gui/src/features/knowledge/KnowledgeBase.tsx +84 -84
  138. package/gui/src/features/onboarding/OnboardingWizard.tsx +230 -230
  139. package/gui/src/features/plan/ImplementationPlan.tsx +32 -32
  140. package/gui/src/features/services/ServiceConsole.tsx +250 -159
  141. package/gui/src/features/sessions/SessionHistory.tsx +195 -195
  142. package/gui/src/features/workspace/WorkspaceList.tsx +666 -514
  143. package/gui/src/index.css +152 -17
  144. package/gui/src/main.tsx +94 -10
  145. package/gui/src/types.ts +62 -62
  146. package/gui/tsconfig.app.json +25 -25
  147. package/gui/tsconfig.json +7 -7
  148. package/gui/tsconfig.node.json +24 -24
  149. package/gui/vite.config.ts +12 -12
  150. package/package.json +56 -55
  151. package/resources/workflows/plan-implement-review.md +8 -0
  152. package/resources/workflows/research-verify.md +6 -0
  153. package/resources/workflows/solo-developer.md +3 -0
  154. package/scripts/simulate-workspaces.ts +55 -55
  155. package/src/analyzers/detect-apis.ts +290 -290
  156. package/src/analyzers/detect-deps.ts +315 -315
  157. package/src/analyzers/detect-existing.ts +74 -74
  158. package/src/analyzers/detect-ports.ts +110 -110
  159. package/src/analyzers/index.ts +97 -97
  160. package/src/analyzers/messaging-analyzer.ts +254 -254
  161. package/src/analyzers/readme-summarizer.ts +102 -102
  162. package/src/analyzers/run-analyzer.ts +269 -269
  163. package/src/analyzers/tech-stack.ts +283 -283
  164. package/src/commands/add-repo.ts +157 -141
  165. package/src/commands/commands.test.ts +155 -155
  166. package/src/commands/commit.ts +131 -131
  167. package/src/commands/create.ts +207 -207
  168. package/src/commands/desktop.ts +128 -0
  169. package/src/commands/diff.ts +125 -125
  170. package/src/commands/doctor.ts +357 -357
  171. package/src/commands/handoff.ts +266 -266
  172. package/src/commands/init.ts +134 -134
  173. package/src/commands/list.ts +46 -46
  174. package/src/commands/logs.ts +63 -63
  175. package/src/commands/mcp.ts +92 -92
  176. package/src/commands/open.ts +129 -121
  177. package/src/commands/pack.ts +73 -73
  178. package/src/commands/refresh.ts +147 -139
  179. package/src/commands/remove.ts +98 -90
  180. package/src/commands/start.ts +117 -117
  181. package/src/commands/status.ts +54 -54
  182. package/src/commands/stop.ts +55 -55
  183. package/src/commands/sync.ts +151 -145
  184. package/src/commands/tui.ts +424 -0
  185. package/src/commands/ui.ts +111 -47
  186. package/src/core/config.test.ts +96 -96
  187. package/src/core/config.ts +115 -115
  188. package/src/core/graph.ts +344 -344
  189. package/src/core/packer.test.ts +99 -99
  190. package/src/core/packer.ts +107 -107
  191. package/src/core/scanner.test.ts +61 -61
  192. package/src/core/scanner.ts +91 -91
  193. package/src/core/workspace.ts +380 -333
  194. package/src/core/worktree.ts +120 -120
  195. package/src/generators/antigravity.ts +32 -32
  196. package/src/generators/base.ts +240 -227
  197. package/src/generators/claude.ts +34 -34
  198. package/src/generators/codex.ts +48 -48
  199. package/src/generators/copilot.ts +56 -56
  200. package/src/generators/cursor.ts +44 -44
  201. package/src/generators/index.ts +250 -230
  202. package/src/generators/map-generator.test.ts +159 -159
  203. package/src/generators/map-generator.ts +542 -542
  204. package/src/generators/plan-generator.ts +481 -481
  205. package/src/generators/skills-generator.ts +259 -259
  206. package/src/index.ts +426 -382
  207. package/src/mcp/server.ts +294 -294
  208. package/src/orchestration/detect.ts +313 -313
  209. package/src/orchestration/index.ts +7 -7
  210. package/src/orchestration/runner.ts +283 -279
  211. package/src/server.test.ts +555 -464
  212. package/src/server.ts +1308 -1047
  213. package/src/types.ts +408 -403
  214. package/src/utils/detect-ai.test.ts +44 -44
  215. package/src/utils/detect-ai.ts +84 -84
  216. package/src/utils/detect-editors.test.ts +48 -48
  217. package/src/utils/detect-editors.ts +57 -57
  218. package/src/utils/git.test.ts +74 -74
  219. package/src/utils/git.ts +117 -61
  220. package/src/utils/local-ai.test.ts +130 -130
  221. package/src/utils/local-ai.ts +111 -111
  222. package/src/utils/multi-git.ts +313 -306
  223. package/src/utils/prompts.ts +209 -135
  224. package/src/utils/session-finder.ts +483 -483
  225. package/src/utils/system-scanner.test.ts +89 -89
  226. package/src/utils/system-scanner.ts +96 -96
  227. package/src/utils/update-check.ts +309 -275
  228. package/src/utils/workflows.test.ts +114 -0
  229. package/src/utils/workflows.ts +178 -0
  230. package/tsconfig.json +19 -19
  231. package/vitest.config.ts +14 -14
  232. package/dist/gui/assets/index-Ca2VRMrQ.js +0 -22
  233. package/dist/gui/assets/index-fj0RJiOb.css +0 -2
package/gui/src/index.css CHANGED
@@ -1,17 +1,152 @@
1
- @import "tailwindcss";
2
-
3
- @utility animate-slide-in {
4
- animation: slide-in 0.2s cubic-bezier(0.16, 1, 0.3, 1) forwards;
5
- }
6
-
7
- @keyframes slide-in {
8
- from {
9
- transform: translateY(1rem);
10
- opacity: 0;
11
- }
12
- to {
13
- transform: translateY(0);
14
- opacity: 1;
15
- }
16
- }
17
-
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
- createRoot(document.getElementById('root')!).render(
7
- <StrictMode>
8
- <App />
9
- </StrictMode>,
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
+ }
@@ -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
+ }
@@ -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
+ }
@@ -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
+ })
package/package.json CHANGED
@@ -1,55 +1,56 @@
1
- {
2
- "name": "@mrpatronz/nexusflow",
3
- "version": "0.2.12",
4
- "description": "Combine multiple repos into a workspace with rich AI assistant context",
5
- "type": "module",
6
- "main": "dist/index.js",
7
- "bin": {
8
- "nexusflow": "dist/index.js"
9
- },
10
- "scripts": {
11
- "build": "tsc && npm run build --prefix gui && npm run extension:compile",
12
- "dev": "tsc --watch",
13
- "start": "node dist/index.js",
14
- "ui": "node dist/index.js ui",
15
- "test": "vitest run --passWithNoTests",
16
- "test:watch": "vitest",
17
- "test:gui": "npm run test:e2e --prefix gui",
18
- "clean": "rimraf dist",
19
- "prepublishOnly": "npm run build",
20
- "extension:install": "npm install --prefix extension",
21
- "extension:compile": "npm run compile --prefix extension"
22
- },
23
- "keywords": [
24
- "ai",
25
- "workspace",
26
- "multi-repo",
27
- "claude",
28
- "codex",
29
- "copilot",
30
- "cursor",
31
- "developer-tools"
32
- ],
33
- "author": "",
34
- "license": "MIT",
35
- "dependencies": {
36
- "@hono/node-server": "^2.0.4",
37
- "@inquirer/prompts": "^7.0.0",
38
- "@modelcontextprotocol/sdk": "^1.29.0",
39
- "chalk": "^5.3.0",
40
- "commander": "^13.0.0",
41
- "execa": "^9.5.0",
42
- "fs-extra": "^11.2.0",
43
- "globby": "^14.1.0",
44
- "hono": "^4.12.23",
45
- "ora": "^8.1.0",
46
- "repomix": "^1.14.1"
47
- },
48
- "devDependencies": {
49
- "@types/fs-extra": "^11.0.4",
50
- "@types/node": "^22.0.0",
51
- "rimraf": "^6.0.0",
52
- "typescript": "^5.7.0",
53
- "vitest": "^3.0.0"
54
- }
55
- }
1
+ {
2
+ "name": "@mrpatronz/nexusflow",
3
+ "version": "0.2.17",
4
+ "description": "Combine multiple repos into a workspace with rich AI assistant context",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "nexusflow": "dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc && npm run build --prefix gui && npm run extension:compile",
12
+ "dev": "tsc --watch",
13
+ "start": "node dist/index.js",
14
+ "ui": "node dist/index.js ui",
15
+ "test": "vitest run --passWithNoTests",
16
+ "test:watch": "vitest",
17
+ "test:gui": "npm run test:e2e --prefix gui",
18
+ "clean": "rimraf dist",
19
+ "prepublishOnly": "npm run build",
20
+ "extension:install": "npm install --prefix extension",
21
+ "extension:compile": "npm run compile --prefix extension"
22
+ },
23
+ "keywords": [
24
+ "ai",
25
+ "workspace",
26
+ "multi-repo",
27
+ "claude",
28
+ "codex",
29
+ "copilot",
30
+ "cursor",
31
+ "developer-tools"
32
+ ],
33
+ "author": "",
34
+ "license": "MIT",
35
+ "dependencies": {
36
+ "@hono/node-server": "^2.0.4",
37
+ "@inquirer/prompts": "^8.5.2",
38
+ "@modelcontextprotocol/sdk": "^1.29.0",
39
+ "chalk": "^5.3.0",
40
+ "commander": "^15.0.0",
41
+ "execa": "^9.5.0",
42
+ "fs-extra": "^11.2.0",
43
+ "globby": "^16.2.0",
44
+ "hono": "^4.12.25",
45
+ "ora": "^9.4.0",
46
+ "pm2": "^7.0.1",
47
+ "repomix": "^1.14.1"
48
+ },
49
+ "devDependencies": {
50
+ "@types/fs-extra": "^11.0.4",
51
+ "@types/node": "^25.9.3",
52
+ "rimraf": "^6.0.0",
53
+ "typescript": "^6.0.3",
54
+ "vitest": "^4.1.8"
55
+ }
56
+ }
@@ -0,0 +1,8 @@
1
+ # Team Cooperation Guidelines
2
+
3
+ You are the lead developer. You must coordinate a Plan-Implement-Review loop to complete the task:
4
+
5
+ 1. **Research & Plan**: Research the requirements and codebase first. Create a plan (`implementation_plan.md`) describing the proposed changes.
6
+ 2. **Implement**: Define a `Code_Implementer` subagent equipped with code editing and terminal tools. Send them the plan and instruct them to write the changes.
7
+ 3. **Review**: Once implemented, define a `Code_Reviewer` subagent to run verification tests and review the changes for correctness.
8
+ 4. **Loop**: If the reviewer finds bugs or test failures, send the feedback back to the implementer and repeat the cycle until the changes are approved.
@@ -0,0 +1,6 @@
1
+ # Team Cooperation Guidelines
2
+
3
+ You are the lead investigator. You must coordinate a research-heavy cycle:
4
+
5
+ 1. **Deep Research**: Define a `Research_Specialist` subagent to scan the codebase, find dependencies, and write a thorough context guide outlining how the system works.
6
+ 2. **Test-Driven Implement**: Write test suites first based on the research findings, then spawn a developer subagent to code until all tests pass successfully.
@@ -0,0 +1,3 @@
1
+ # Direct Execution Guidelines
2
+
3
+ You are a solo developer. Do not spawn subagents. Research, plan, edit, and verify all code changes yourself. Focus on delivering direct, simple edits to target files.