@mrpatronz/nexusflow 0.1.0
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/GETTING_STARTED.md +109 -0
- package/README.md +310 -0
- package/dist/analyzers/detect-apis.d.ts +19 -0
- package/dist/analyzers/detect-apis.d.ts.map +1 -0
- package/dist/analyzers/detect-apis.js +121 -0
- package/dist/analyzers/detect-apis.js.map +1 -0
- package/dist/analyzers/detect-deps.d.ts +30 -0
- package/dist/analyzers/detect-deps.d.ts.map +1 -0
- package/dist/analyzers/detect-deps.js +121 -0
- package/dist/analyzers/detect-deps.js.map +1 -0
- package/dist/analyzers/detect-existing.d.ts +15 -0
- package/dist/analyzers/detect-existing.d.ts.map +1 -0
- package/dist/analyzers/detect-existing.js +65 -0
- package/dist/analyzers/detect-existing.js.map +1 -0
- package/dist/analyzers/detect-ports.d.ts +20 -0
- package/dist/analyzers/detect-ports.d.ts.map +1 -0
- package/dist/analyzers/detect-ports.js +103 -0
- package/dist/analyzers/detect-ports.js.map +1 -0
- package/dist/analyzers/index.d.ts +29 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +74 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/analyzers/readme-summarizer.d.ts +13 -0
- package/dist/analyzers/readme-summarizer.d.ts.map +1 -0
- package/dist/analyzers/readme-summarizer.js +59 -0
- package/dist/analyzers/readme-summarizer.js.map +1 -0
- package/dist/analyzers/tech-stack.d.ts +15 -0
- package/dist/analyzers/tech-stack.d.ts.map +1 -0
- package/dist/analyzers/tech-stack.js +284 -0
- package/dist/analyzers/tech-stack.js.map +1 -0
- package/dist/commands/create.d.ts +17 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +111 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/init.d.ts +10 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +50 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +9 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +32 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/logs.d.ts +12 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +54 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/open.d.ts +9 -0
- package/dist/commands/open.d.ts.map +1 -0
- package/dist/commands/open.js +49 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/start.d.ts +13 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +97 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +11 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +47 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +11 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +47 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/ui.d.ts +13 -0
- package/dist/commands/ui.d.ts.map +1 -0
- package/dist/commands/ui.js +44 -0
- package/dist/commands/ui.js.map +1 -0
- package/dist/core/config.d.ts +32 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +68 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/scanner.d.ts +18 -0
- package/dist/core/scanner.d.ts.map +1 -0
- package/dist/core/scanner.js +73 -0
- package/dist/core/scanner.js.map +1 -0
- package/dist/core/workspace.d.ts +53 -0
- package/dist/core/workspace.d.ts.map +1 -0
- package/dist/core/workspace.js +114 -0
- package/dist/core/workspace.js.map +1 -0
- package/dist/core/worktree.d.ts +27 -0
- package/dist/core/worktree.d.ts.map +1 -0
- package/dist/core/worktree.js +35 -0
- package/dist/core/worktree.js.map +1 -0
- package/dist/generators/base.d.ts +15 -0
- package/dist/generators/base.d.ts.map +1 -0
- package/dist/generators/base.js +175 -0
- package/dist/generators/base.js.map +1 -0
- package/dist/generators/claude.d.ts +17 -0
- package/dist/generators/claude.d.ts.map +1 -0
- package/dist/generators/claude.js +29 -0
- package/dist/generators/claude.js.map +1 -0
- package/dist/generators/codex.d.ts +16 -0
- package/dist/generators/codex.d.ts.map +1 -0
- package/dist/generators/codex.js +41 -0
- package/dist/generators/codex.js.map +1 -0
- package/dist/generators/copilot.d.ts +16 -0
- package/dist/generators/copilot.d.ts.map +1 -0
- package/dist/generators/copilot.js +49 -0
- package/dist/generators/copilot.js.map +1 -0
- package/dist/generators/cursor.d.ts +17 -0
- package/dist/generators/cursor.d.ts.map +1 -0
- package/dist/generators/cursor.js +37 -0
- package/dist/generators/cursor.js.map +1 -0
- package/dist/generators/index.d.ts +18 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +95 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/gui/assets/index-Cq9V485S.js +21 -0
- package/dist/gui/assets/index-Dh1b5gSZ.css +2 -0
- package/dist/gui/favicon.svg +1 -0
- package/dist/gui/icons.svg +24 -0
- package/dist/gui/index.html +18 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +169 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestration/detect.d.ts +29 -0
- package/dist/orchestration/detect.d.ts.map +1 -0
- package/dist/orchestration/detect.js +292 -0
- package/dist/orchestration/detect.js.map +1 -0
- package/dist/orchestration/index.d.ts +7 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +7 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/runner.d.ts +40 -0
- package/dist/orchestration/runner.d.ts.map +1 -0
- package/dist/orchestration/runner.js +242 -0
- package/dist/orchestration/runner.js.map +1 -0
- package/dist/server.d.ts +16 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +419 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +210 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/detect-ai.d.ts +21 -0
- package/dist/utils/detect-ai.d.ts.map +1 -0
- package/dist/utils/detect-ai.js +76 -0
- package/dist/utils/detect-ai.js.map +1 -0
- package/dist/utils/detect-editors.d.ts +19 -0
- package/dist/utils/detect-editors.d.ts.map +1 -0
- package/dist/utils/detect-editors.js +49 -0
- package/dist/utils/detect-editors.js.map +1 -0
- package/dist/utils/git.d.ts +27 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +57 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/prompts.d.ts +27 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +119 -0
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/session-finder.d.ts +29 -0
- package/dist/utils/session-finder.d.ts.map +1 -0
- package/dist/utils/session-finder.js +462 -0
- package/dist/utils/session-finder.js.map +1 -0
- package/gui/README.md +73 -0
- package/gui/eslint.config.js +22 -0
- package/gui/index.html +17 -0
- package/gui/package-lock.json +3054 -0
- package/gui/package.json +33 -0
- package/gui/public/favicon.svg +1 -0
- package/gui/public/icons.svg +24 -0
- package/gui/src/App.css +1 -0
- package/gui/src/App.tsx +1949 -0
- package/gui/src/assets/hero.png +0 -0
- package/gui/src/assets/react.svg +1 -0
- package/gui/src/assets/vite.svg +1 -0
- package/gui/src/index.css +1 -0
- package/gui/src/main.tsx +10 -0
- package/gui/tsconfig.app.json +25 -0
- package/gui/tsconfig.json +7 -0
- package/gui/tsconfig.node.json +24 -0
- package/gui/vite.config.ts +12 -0
- package/package.json +48 -0
- package/src/analyzers/detect-apis.ts +138 -0
- package/src/analyzers/detect-deps.ts +138 -0
- package/src/analyzers/detect-existing.ts +74 -0
- package/src/analyzers/detect-ports.ts +110 -0
- package/src/analyzers/index.ts +85 -0
- package/src/analyzers/readme-summarizer.ts +68 -0
- package/src/analyzers/tech-stack.ts +255 -0
- package/src/commands/create.ts +142 -0
- package/src/commands/init.ts +58 -0
- package/src/commands/list.ts +46 -0
- package/src/commands/logs.ts +63 -0
- package/src/commands/open.ts +54 -0
- package/src/commands/start.ts +117 -0
- package/src/commands/status.ts +54 -0
- package/src/commands/stop.ts +55 -0
- package/src/commands/ui.ts +47 -0
- package/src/core/config.ts +79 -0
- package/src/core/scanner.ts +91 -0
- package/src/core/workspace.ts +149 -0
- package/src/core/worktree.ts +50 -0
- package/src/generators/base.ts +187 -0
- package/src/generators/claude.ts +34 -0
- package/src/generators/codex.ts +48 -0
- package/src/generators/copilot.ts +56 -0
- package/src/generators/cursor.ts +44 -0
- package/src/generators/index.ts +122 -0
- package/src/index.ts +178 -0
- package/src/orchestration/detect.ts +313 -0
- package/src/orchestration/index.ts +7 -0
- package/src/orchestration/runner.ts +279 -0
- package/src/server.ts +466 -0
- package/src/types.ts +294 -0
- package/src/utils/detect-ai.ts +81 -0
- package/src/utils/detect-editors.ts +54 -0
- package/src/utils/git.ts +61 -0
- package/src/utils/prompts.ts +135 -0
- package/src/utils/session-finder.ts +483 -0
- package/tsconfig.json +19 -0
package/dist/server.js
ADDED
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module server
|
|
3
|
+
* Hono local web server for the NexusFlow GUI.
|
|
4
|
+
*/
|
|
5
|
+
import { Hono } from 'hono';
|
|
6
|
+
import { serve } from '@hono/node-server';
|
|
7
|
+
import { serveStatic } from '@hono/node-server/serve-static';
|
|
8
|
+
import { cors } from 'hono/cors';
|
|
9
|
+
import * as fs from 'node:fs/promises';
|
|
10
|
+
import * as path from 'node:path';
|
|
11
|
+
import { fileURLToPath } from 'node:url';
|
|
12
|
+
import { execa } from 'execa';
|
|
13
|
+
import { loadConfig, saveConfig, getConfigDir } from './core/config.js';
|
|
14
|
+
import { scanForRepos } from './core/scanner.js';
|
|
15
|
+
import { createWorkspace, listWorkspaces, loadFeatureConfig } from './core/workspace.js';
|
|
16
|
+
import { analyzeAllRepos } from './analyzers/index.js';
|
|
17
|
+
import { generateContextFiles } from './generators/index.js';
|
|
18
|
+
import { detectAIAssistants } from './utils/detect-ai.js';
|
|
19
|
+
import { detectEditors } from './utils/detect-editors.js';
|
|
20
|
+
import { findSessions, getSessionTranscript } from './utils/session-finder.js';
|
|
21
|
+
import { detectAllServices, detectOrchestrationTools, startServices, stopServices, loadRunningState, } from './orchestration/index.js';
|
|
22
|
+
// Resolve static files directory
|
|
23
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
24
|
+
const __dirname = path.dirname(__filename);
|
|
25
|
+
// In development, the static GUI is built to dist/gui
|
|
26
|
+
// In production, it will be served from dist/gui as well
|
|
27
|
+
const guiPath = path.join(__dirname, 'gui');
|
|
28
|
+
export const app = new Hono();
|
|
29
|
+
// Enable CORS for frontend dev server
|
|
30
|
+
app.use('/api/*', cors());
|
|
31
|
+
// ─── API Endpoints ────────────────────────────────────────────────────────
|
|
32
|
+
// 1. Get current configuration
|
|
33
|
+
app.get('/api/config', async (c) => {
|
|
34
|
+
try {
|
|
35
|
+
const configPath = path.join(getConfigDir(), 'config.json');
|
|
36
|
+
let exists = false;
|
|
37
|
+
try {
|
|
38
|
+
await fs.access(configPath);
|
|
39
|
+
exists = true;
|
|
40
|
+
}
|
|
41
|
+
catch { }
|
|
42
|
+
const config = await loadConfig();
|
|
43
|
+
return c.json({ config, exists });
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
47
|
+
return c.json({ error: msg }, 500);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
// 2. Save configuration
|
|
51
|
+
app.post('/api/config', async (c) => {
|
|
52
|
+
try {
|
|
53
|
+
const newConfig = await c.req.json();
|
|
54
|
+
await saveConfig(newConfig);
|
|
55
|
+
return c.json({ success: true, config: newConfig });
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
59
|
+
return c.json({ error: msg }, 500);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
// 3. Scan development directory for repositories
|
|
63
|
+
app.get('/api/repos', async (c) => {
|
|
64
|
+
try {
|
|
65
|
+
const config = await loadConfig();
|
|
66
|
+
const repos = await scanForRepos(config.devDir, config.scanDepth);
|
|
67
|
+
return c.json(repos);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
71
|
+
return c.json({ error: msg }, 500);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
// 4. List existing workspaces
|
|
75
|
+
app.get('/api/workspaces', async (c) => {
|
|
76
|
+
try {
|
|
77
|
+
const config = await loadConfig();
|
|
78
|
+
const workspaces = await listWorkspaces(config.workspacesDir);
|
|
79
|
+
return c.json(workspaces);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
83
|
+
return c.json({ error: msg }, 500);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
// 5. Detect available AI assistants
|
|
87
|
+
app.get('/api/ai-detect', async (c) => {
|
|
88
|
+
try {
|
|
89
|
+
const assistants = await detectAIAssistants();
|
|
90
|
+
return c.json(assistants);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
94
|
+
return c.json({ error: msg }, 500);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
// 6. Detect available editors
|
|
98
|
+
app.get('/api/editor-detect', async (c) => {
|
|
99
|
+
try {
|
|
100
|
+
const editors = await detectEditors();
|
|
101
|
+
return c.json(editors);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
105
|
+
return c.json({ error: msg }, 500);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
// 7. Create workspace
|
|
109
|
+
app.post('/api/workspace', async (c) => {
|
|
110
|
+
try {
|
|
111
|
+
const body = await c.req.json();
|
|
112
|
+
const config = await loadConfig();
|
|
113
|
+
const workspacePath = path.join(config.workspacesDir, body.branchName);
|
|
114
|
+
const feature = {
|
|
115
|
+
id: body.branchName,
|
|
116
|
+
branchName: body.branchName,
|
|
117
|
+
description: body.description,
|
|
118
|
+
repos: body.repos.map((r) => r.path),
|
|
119
|
+
assistants: body.assistants,
|
|
120
|
+
workspacePath,
|
|
121
|
+
createdAt: new Date().toISOString(),
|
|
122
|
+
resumption: body.resumption,
|
|
123
|
+
};
|
|
124
|
+
// Create worktrees
|
|
125
|
+
await createWorkspace(feature, body.repos);
|
|
126
|
+
// Analyze repos
|
|
127
|
+
const analysis = await analyzeAllRepos(body.repos);
|
|
128
|
+
// Convert map to plain object for context generators if needed
|
|
129
|
+
const ctx = {
|
|
130
|
+
feature,
|
|
131
|
+
repos: body.repos,
|
|
132
|
+
analysis,
|
|
133
|
+
};
|
|
134
|
+
// Generate AI context files
|
|
135
|
+
await generateContextFiles(ctx, body.assistants, workspacePath);
|
|
136
|
+
return c.json({ success: true, workspacePath, feature });
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
140
|
+
return c.json({ error: msg }, 500);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
// 8. Open workspace in editor
|
|
144
|
+
app.post('/api/open-editor', async (c) => {
|
|
145
|
+
try {
|
|
146
|
+
const { workspacePath, command } = await c.req.json();
|
|
147
|
+
// Spawn editor process
|
|
148
|
+
execa(command, [workspacePath], { detached: true, stdio: 'ignore' }).unref();
|
|
149
|
+
return c.json({ success: true });
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
153
|
+
return c.json({ error: msg }, 500);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
// 9. Get status of running services in all/specific workspace
|
|
157
|
+
app.get('/api/workspace/:id/services', async (c) => {
|
|
158
|
+
try {
|
|
159
|
+
const id = c.req.param('id');
|
|
160
|
+
const config = await loadConfig();
|
|
161
|
+
const workspacePath = path.join(config.workspacesDir, id);
|
|
162
|
+
// Detect all services
|
|
163
|
+
const services = await detectAllServices(workspacePath);
|
|
164
|
+
// Detect existing tools
|
|
165
|
+
const tools = await detectOrchestrationTools(workspacePath);
|
|
166
|
+
// Get currently running services from running state
|
|
167
|
+
const runningState = await loadRunningState(workspacePath);
|
|
168
|
+
return c.json({
|
|
169
|
+
services,
|
|
170
|
+
orchestrationTools: tools,
|
|
171
|
+
runningState: runningState?.services || [],
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
176
|
+
return c.json({ error: msg }, 500);
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
// 10. Start services in workspace
|
|
180
|
+
app.post('/api/workspace/:id/services/start', async (c) => {
|
|
181
|
+
try {
|
|
182
|
+
const id = c.req.param('id');
|
|
183
|
+
const { services } = await c.req.json();
|
|
184
|
+
const config = await loadConfig();
|
|
185
|
+
const workspacePath = path.join(config.workspacesDir, id);
|
|
186
|
+
const logDir = path.join(workspacePath, '.nexusflow-logs');
|
|
187
|
+
await startServices(services, workspacePath, logDir);
|
|
188
|
+
return c.json({ success: true });
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
192
|
+
return c.json({ error: msg }, 500);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
// 11. Stop services in workspace
|
|
196
|
+
app.post('/api/workspace/:id/services/stop', async (c) => {
|
|
197
|
+
try {
|
|
198
|
+
const id = c.req.param('id');
|
|
199
|
+
const config = await loadConfig();
|
|
200
|
+
const workspacePath = path.join(config.workspacesDir, id);
|
|
201
|
+
await stopServices(workspacePath);
|
|
202
|
+
return c.json({ success: true });
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
206
|
+
return c.json({ error: msg }, 500);
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
// 12. Get service logs
|
|
210
|
+
app.get('/api/workspace/:id/services/logs/:serviceName', async (c) => {
|
|
211
|
+
try {
|
|
212
|
+
const id = c.req.param('id');
|
|
213
|
+
const serviceName = c.req.param('serviceName');
|
|
214
|
+
const config = await loadConfig();
|
|
215
|
+
const workspacePath = path.join(config.workspacesDir, id);
|
|
216
|
+
const logFile = path.join(workspacePath, '.nexusflow-logs', `${serviceName}.log`);
|
|
217
|
+
let content = '';
|
|
218
|
+
try {
|
|
219
|
+
// Read last 200 lines or 50KB
|
|
220
|
+
const stats = await fs.stat(logFile);
|
|
221
|
+
const size = stats.size;
|
|
222
|
+
const start = Math.max(0, size - 50000);
|
|
223
|
+
const fd = await fs.open(logFile, 'r');
|
|
224
|
+
const buffer = Buffer.alloc(size - start);
|
|
225
|
+
await fd.read(buffer, 0, buffer.length, start);
|
|
226
|
+
await fd.close();
|
|
227
|
+
content = buffer.toString('utf-8');
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
content = 'No logs available yet.';
|
|
231
|
+
}
|
|
232
|
+
return c.json({ logs: content });
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
236
|
+
return c.json({ error: msg }, 500);
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
// 13. Get git changes in workspace sub-repositories
|
|
240
|
+
app.get('/api/workspace/:id/changes', async (c) => {
|
|
241
|
+
try {
|
|
242
|
+
const id = c.req.param('id');
|
|
243
|
+
const config = await loadConfig();
|
|
244
|
+
const workspacePath = path.join(config.workspacesDir, id);
|
|
245
|
+
// Load feature config to get repo paths
|
|
246
|
+
const feature = await loadFeatureConfig(workspacePath);
|
|
247
|
+
if (!feature) {
|
|
248
|
+
return c.json({ error: 'Workspace configuration not found.' }, 404);
|
|
249
|
+
}
|
|
250
|
+
const results = [];
|
|
251
|
+
// Check git status in each repo
|
|
252
|
+
for (const repoPath of feature.repos) {
|
|
253
|
+
const repoName = path.basename(repoPath);
|
|
254
|
+
const worktreePath = path.join(workspacePath, repoName);
|
|
255
|
+
try {
|
|
256
|
+
const { stdout } = await execa('git', ['status', '--porcelain'], { cwd: worktreePath });
|
|
257
|
+
const lines = stdout.split('\n').map((l) => l.trim()).filter(Boolean);
|
|
258
|
+
const files = lines.map((line) => {
|
|
259
|
+
const status = line.slice(0, 2).trim();
|
|
260
|
+
const file = line.slice(2).trim();
|
|
261
|
+
let type = 'modified';
|
|
262
|
+
if (status === 'A' || status === '??')
|
|
263
|
+
type = 'added';
|
|
264
|
+
else if (status === 'D')
|
|
265
|
+
type = 'deleted';
|
|
266
|
+
return { file, type, rawStatus: status };
|
|
267
|
+
});
|
|
268
|
+
results.push({
|
|
269
|
+
repoName,
|
|
270
|
+
repoPath: worktreePath,
|
|
271
|
+
files,
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
catch (error) {
|
|
275
|
+
results.push({
|
|
276
|
+
repoName,
|
|
277
|
+
repoPath: worktreePath,
|
|
278
|
+
files: [],
|
|
279
|
+
error: error instanceof Error ? error.message : String(error),
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return c.json({ changes: results });
|
|
284
|
+
}
|
|
285
|
+
catch (error) {
|
|
286
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
287
|
+
return c.json({ error: msg }, 500);
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
// 14. Resume session in workspace (copies CLI resume command and opens editor)
|
|
291
|
+
app.post('/api/workspace/:id/resume', async (c) => {
|
|
292
|
+
try {
|
|
293
|
+
const id = decodeURIComponent(c.req.param('id'));
|
|
294
|
+
const config = await loadConfig();
|
|
295
|
+
const workspacePath = path.join(config.workspacesDir, id);
|
|
296
|
+
// Load feature config to get repo paths
|
|
297
|
+
const feature = await loadFeatureConfig(workspacePath);
|
|
298
|
+
if (!feature) {
|
|
299
|
+
return c.json({ error: 'Workspace configuration not found.' }, 404);
|
|
300
|
+
}
|
|
301
|
+
const body = await c.req.json().catch(() => ({}));
|
|
302
|
+
const targetSessionId = body.sessionId;
|
|
303
|
+
const targetAssistant = body.assistant;
|
|
304
|
+
// Find the session to resume
|
|
305
|
+
let resumeCommand = '';
|
|
306
|
+
let selectedAssistant = targetAssistant || feature.assistants[0] || 'antigravity';
|
|
307
|
+
let selectedSessionId = targetSessionId;
|
|
308
|
+
if (!selectedSessionId) {
|
|
309
|
+
// Find the most recent session matching this workspace
|
|
310
|
+
const sessions = await findSessions(workspacePath, feature.repos);
|
|
311
|
+
if (sessions.length > 0) {
|
|
312
|
+
selectedSessionId = sessions[0].id;
|
|
313
|
+
selectedAssistant = sessions[0].assistant;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
if (selectedSessionId) {
|
|
317
|
+
if (selectedAssistant === 'antigravity') {
|
|
318
|
+
resumeCommand = `agy --conversation ${selectedSessionId}`;
|
|
319
|
+
}
|
|
320
|
+
else if (selectedAssistant === 'claude') {
|
|
321
|
+
resumeCommand = `claude --resume ${selectedSessionId}`;
|
|
322
|
+
}
|
|
323
|
+
else if (selectedAssistant === 'codex') {
|
|
324
|
+
resumeCommand = `codex resume ${selectedSessionId}`;
|
|
325
|
+
}
|
|
326
|
+
else if (selectedAssistant === 'copilot') {
|
|
327
|
+
resumeCommand = `copilot --resume ${selectedSessionId}`;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
// Fallback to continue command
|
|
332
|
+
if (selectedAssistant === 'antigravity') {
|
|
333
|
+
resumeCommand = 'agy --continue';
|
|
334
|
+
}
|
|
335
|
+
else if (selectedAssistant === 'claude') {
|
|
336
|
+
resumeCommand = 'claude --continue';
|
|
337
|
+
}
|
|
338
|
+
else if (selectedAssistant === 'codex') {
|
|
339
|
+
resumeCommand = 'codex resume --last';
|
|
340
|
+
}
|
|
341
|
+
else if (selectedAssistant === 'copilot') {
|
|
342
|
+
resumeCommand = 'copilot --continue';
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
resumeCommand = 'agy --continue';
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
// Open in editor if command is provided
|
|
349
|
+
if (body.command) {
|
|
350
|
+
try {
|
|
351
|
+
execa(body.command, [workspacePath], { detached: true, stdio: 'ignore' }).unref();
|
|
352
|
+
}
|
|
353
|
+
catch (e) {
|
|
354
|
+
console.error('Failed to launch editor:', e);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return c.json({ success: true, resumeCommand, workspacePath });
|
|
358
|
+
}
|
|
359
|
+
catch (error) {
|
|
360
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
361
|
+
return c.json({ error: msg }, 500);
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
// 15. List past AI sessions for a workspace
|
|
365
|
+
app.get('/api/workspace/:id/sessions', async (c) => {
|
|
366
|
+
try {
|
|
367
|
+
const id = decodeURIComponent(c.req.param('id'));
|
|
368
|
+
const config = await loadConfig();
|
|
369
|
+
const workspacePath = path.join(config.workspacesDir, id);
|
|
370
|
+
const feature = await loadFeatureConfig(workspacePath);
|
|
371
|
+
if (!feature) {
|
|
372
|
+
return c.json({ error: 'Workspace configuration not found.' }, 404);
|
|
373
|
+
}
|
|
374
|
+
const sessions = await findSessions(workspacePath, feature.repos);
|
|
375
|
+
return c.json({ sessions });
|
|
376
|
+
}
|
|
377
|
+
catch (error) {
|
|
378
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
379
|
+
return c.json({ error: msg }, 500);
|
|
380
|
+
}
|
|
381
|
+
});
|
|
382
|
+
// 16. Fetch transcript for a specific AI session
|
|
383
|
+
app.get('/api/session/:assistant/:sessionId/transcript', async (c) => {
|
|
384
|
+
try {
|
|
385
|
+
const assistant = c.req.param('assistant');
|
|
386
|
+
const sessionId = c.req.param('sessionId');
|
|
387
|
+
const messages = await getSessionTranscript(assistant, sessionId);
|
|
388
|
+
return c.json({ messages });
|
|
389
|
+
}
|
|
390
|
+
catch (error) {
|
|
391
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
392
|
+
return c.json({ error: msg }, 500);
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
// Serve index.html explicitly on root endpoint
|
|
396
|
+
app.get('/', async (c) => {
|
|
397
|
+
try {
|
|
398
|
+
const html = await fs.readFile(path.join(guiPath, 'index.html'), 'utf-8');
|
|
399
|
+
return c.html(html);
|
|
400
|
+
}
|
|
401
|
+
catch (error) {
|
|
402
|
+
return c.text('GUI dashboard built assets not found. Run "npm run build" first.', 404);
|
|
403
|
+
}
|
|
404
|
+
});
|
|
405
|
+
// Serve static assets from GUI build folder
|
|
406
|
+
app.use('/*', serveStatic({ root: path.relative(process.cwd(), guiPath) }));
|
|
407
|
+
/**
|
|
408
|
+
* Starts the local GUI web server.
|
|
409
|
+
*
|
|
410
|
+
* @param port - Port to run on.
|
|
411
|
+
*/
|
|
412
|
+
export function startServer(port = 3000) {
|
|
413
|
+
return new Promise((resolve) => {
|
|
414
|
+
const server = serve({ fetch: app.fetch, port }, (info) => {
|
|
415
|
+
resolve({ port: info.port, server });
|
|
416
|
+
});
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module types
|
|
3
|
+
* Shared interfaces and types for NexusFlow.
|
|
4
|
+
*/
|
|
5
|
+
/** Supported AI assistant identifiers. */
|
|
6
|
+
export type AIAssistant = 'claude' | 'antigravity' | 'codex' | 'copilot' | 'cursor';
|
|
7
|
+
/** Top-level NexusFlow configuration stored in ~/.nexusflow/config.json. */
|
|
8
|
+
export interface NexusFlowConfig {
|
|
9
|
+
/** Semantic version of the NexusFlow config schema. */
|
|
10
|
+
version: string;
|
|
11
|
+
/** Root development directory. Default: ~/dev */
|
|
12
|
+
devDir: string;
|
|
13
|
+
/** Directory where workspaces are created. Default: ~/dev/workspaces */
|
|
14
|
+
workspacesDir: string;
|
|
15
|
+
/** The user's preferred AI assistant, or null if none chosen yet. */
|
|
16
|
+
defaultAssistant: AIAssistant | null;
|
|
17
|
+
/** How many directory levels deep to scan for git repos. Default: 2 */
|
|
18
|
+
scanDepth: number;
|
|
19
|
+
}
|
|
20
|
+
/** Result of probing for an AI assistant on the system. */
|
|
21
|
+
export interface DetectedAI {
|
|
22
|
+
/** Canonical assistant identifier. */
|
|
23
|
+
name: AIAssistant;
|
|
24
|
+
/** Human-readable label shown in prompts. */
|
|
25
|
+
displayName: string;
|
|
26
|
+
/** Whether the assistant's CLI was found. */
|
|
27
|
+
detected: boolean;
|
|
28
|
+
/** The CLI command that was detected (e.g. 'claude', 'antigravity'). */
|
|
29
|
+
command?: string;
|
|
30
|
+
}
|
|
31
|
+
/** Result of probing for a code editor on the system. */
|
|
32
|
+
export interface DetectedEditor {
|
|
33
|
+
/** Human-readable editor name. */
|
|
34
|
+
name: string;
|
|
35
|
+
/** CLI command used to launch the editor. */
|
|
36
|
+
command: string;
|
|
37
|
+
/** Whether the editor's CLI was found in PATH. */
|
|
38
|
+
detected: boolean;
|
|
39
|
+
}
|
|
40
|
+
/** Metadata about a discovered git repository. */
|
|
41
|
+
export interface RepoInfo {
|
|
42
|
+
/** Directory name of the repo. */
|
|
43
|
+
name: string;
|
|
44
|
+
/** Absolute path to the repo root. */
|
|
45
|
+
path: string;
|
|
46
|
+
/** Default branch — typically 'main' or 'master'. */
|
|
47
|
+
defaultBranch: string;
|
|
48
|
+
}
|
|
49
|
+
/** Metadata about a past AI session. */
|
|
50
|
+
export interface AISession {
|
|
51
|
+
id: string;
|
|
52
|
+
assistant: AIAssistant;
|
|
53
|
+
title: string;
|
|
54
|
+
createdAt: string;
|
|
55
|
+
updatedAt: string;
|
|
56
|
+
messageCount: number;
|
|
57
|
+
workspacePath: string;
|
|
58
|
+
}
|
|
59
|
+
/** A single chat message in a session transcript. */
|
|
60
|
+
export interface ChatMessage {
|
|
61
|
+
role: 'user' | 'assistant';
|
|
62
|
+
content: string;
|
|
63
|
+
timestamp?: string;
|
|
64
|
+
}
|
|
65
|
+
/** Configuration for resuming the active session. */
|
|
66
|
+
export interface ResumptionConfig {
|
|
67
|
+
/** The command to run verification tests. */
|
|
68
|
+
testCommand?: string;
|
|
69
|
+
/** The command to spin up dev databases/mocks/caches. */
|
|
70
|
+
mockCommand?: string;
|
|
71
|
+
/** The command to start workspace services manually if needed. */
|
|
72
|
+
startCommand?: string;
|
|
73
|
+
}
|
|
74
|
+
/** A feature workspace that spans one or more repos. */
|
|
75
|
+
export interface Feature {
|
|
76
|
+
/** Unique identifier — the git branch name. */
|
|
77
|
+
id: string;
|
|
78
|
+
/** Git branch name created for this feature. */
|
|
79
|
+
branchName: string;
|
|
80
|
+
/** Short human-readable description of the feature. */
|
|
81
|
+
description: string;
|
|
82
|
+
/** Absolute paths to the repos included in this feature. */
|
|
83
|
+
repos: string[];
|
|
84
|
+
/** AI assistants enabled for this feature workspace. */
|
|
85
|
+
assistants: AIAssistant[];
|
|
86
|
+
/** Absolute path to the workspace directory on disk. */
|
|
87
|
+
workspacePath: string;
|
|
88
|
+
/** ISO-8601 timestamp of when the feature was created. */
|
|
89
|
+
createdAt: string;
|
|
90
|
+
/** Resumption configuration. */
|
|
91
|
+
resumption?: ResumptionConfig;
|
|
92
|
+
}
|
|
93
|
+
/** Runtime context for an active workspace — now includes analysis data. */
|
|
94
|
+
export interface WorkspaceContext {
|
|
95
|
+
/** The feature definition. */
|
|
96
|
+
feature: Feature;
|
|
97
|
+
/** Full repo metadata for every repo in the feature. */
|
|
98
|
+
repos: RepoInfo[];
|
|
99
|
+
/** Analysis results for each repo (keyed by repo path). */
|
|
100
|
+
analysis?: Map<string, ProjectAnalysis>;
|
|
101
|
+
}
|
|
102
|
+
/** Recognized language/runtime. */
|
|
103
|
+
export type Language = 'typescript' | 'javascript' | 'csharp' | 'python' | 'go' | 'java' | 'rust' | 'ruby' | 'php' | 'other';
|
|
104
|
+
/** Recognized framework. */
|
|
105
|
+
export type Framework = 'react' | 'nextjs' | 'angular' | 'vue' | 'svelte' | 'express' | 'nestjs' | 'fastify' | 'hono' | 'aspnet' | 'blazor' | 'django' | 'flask' | 'fastapi' | 'gin' | 'spring' | 'rails' | 'laravel' | 'other';
|
|
106
|
+
/** Recognized project type. */
|
|
107
|
+
export type ProjectType = 'frontend' | 'backend' | 'fullstack' | 'library' | 'api' | 'cli' | 'worker' | 'other';
|
|
108
|
+
/** Detected tech stack for a repo. */
|
|
109
|
+
export interface TechStack {
|
|
110
|
+
languages: Language[];
|
|
111
|
+
frameworks: Framework[];
|
|
112
|
+
buildTools: string[];
|
|
113
|
+
projectType: ProjectType;
|
|
114
|
+
}
|
|
115
|
+
/** A detected API endpoint or route. */
|
|
116
|
+
export interface ApiEndpoint {
|
|
117
|
+
method: string;
|
|
118
|
+
path: string;
|
|
119
|
+
source?: string;
|
|
120
|
+
}
|
|
121
|
+
/** An inter-repo dependency reference. */
|
|
122
|
+
export interface RepoDependency {
|
|
123
|
+
/** Name of the dependency (npm package, NuGet package, etc.). */
|
|
124
|
+
name: string;
|
|
125
|
+
/** Type of dependency. */
|
|
126
|
+
type: 'npm' | 'nuget' | 'pip' | 'go' | 'other';
|
|
127
|
+
/** Version constraint if known. */
|
|
128
|
+
version?: string;
|
|
129
|
+
}
|
|
130
|
+
/** Port/service configuration detected in a repo. */
|
|
131
|
+
export interface ServicePort {
|
|
132
|
+
port: number;
|
|
133
|
+
protocol: 'http' | 'https' | 'grpc' | 'other';
|
|
134
|
+
source: string;
|
|
135
|
+
}
|
|
136
|
+
/** Full analysis result for a single project/repo. */
|
|
137
|
+
export interface ProjectAnalysis {
|
|
138
|
+
/** Repo name. */
|
|
139
|
+
name: string;
|
|
140
|
+
/** Repo path. */
|
|
141
|
+
path: string;
|
|
142
|
+
/** Detected tech stack. */
|
|
143
|
+
techStack: TechStack;
|
|
144
|
+
/** Detected API endpoints. */
|
|
145
|
+
endpoints: ApiEndpoint[];
|
|
146
|
+
/** Detected dependencies. */
|
|
147
|
+
dependencies: RepoDependency[];
|
|
148
|
+
/** Detected ports/services. */
|
|
149
|
+
ports: ServicePort[];
|
|
150
|
+
/** Summary from README.md if found. */
|
|
151
|
+
readmeSummary: string | null;
|
|
152
|
+
/** Existing AI config files found in the repo. */
|
|
153
|
+
existingAIConfigs: ExistingAIConfig[];
|
|
154
|
+
}
|
|
155
|
+
/** An existing AI configuration file found in a repo. */
|
|
156
|
+
export interface ExistingAIConfig {
|
|
157
|
+
/** Which assistant this config is for. */
|
|
158
|
+
assistant: AIAssistant | 'agents';
|
|
159
|
+
/** File path relative to repo root. */
|
|
160
|
+
relativePath: string;
|
|
161
|
+
/** First 500 chars of the content for context. */
|
|
162
|
+
contentPreview: string;
|
|
163
|
+
}
|
|
164
|
+
/** How to start a single service/project. */
|
|
165
|
+
export interface ServiceConfig {
|
|
166
|
+
/** Display name for the service. */
|
|
167
|
+
name: string;
|
|
168
|
+
/** Absolute path to the project directory. */
|
|
169
|
+
cwd: string;
|
|
170
|
+
/** The command to run (e.g., 'npm', 'dotnet', 'python'). */
|
|
171
|
+
command: string;
|
|
172
|
+
/** Arguments for the command. */
|
|
173
|
+
args: string[];
|
|
174
|
+
/** Optional port the service listens on. */
|
|
175
|
+
port?: number;
|
|
176
|
+
/** How the start command was detected. */
|
|
177
|
+
source: 'package.json' | 'dotnet' | 'docker-compose' | 'aspire' | 'python' | 'go' | 'makefile' | 'manual';
|
|
178
|
+
}
|
|
179
|
+
/** Detected orchestration tool in a workspace. */
|
|
180
|
+
export interface OrchestrationDetection {
|
|
181
|
+
/** Which tool was found. */
|
|
182
|
+
tool: 'docker-compose' | 'aspire' | 'tilt' | 'procfile' | 'makefile';
|
|
183
|
+
/** Path to the config file. */
|
|
184
|
+
configPath: string;
|
|
185
|
+
/** Start command for this tool. */
|
|
186
|
+
startCommand: string;
|
|
187
|
+
/** Stop command for this tool. */
|
|
188
|
+
stopCommand: string;
|
|
189
|
+
}
|
|
190
|
+
/** A currently running service process. */
|
|
191
|
+
export interface RunningService {
|
|
192
|
+
/** Service name. */
|
|
193
|
+
name: string;
|
|
194
|
+
/** Process ID. */
|
|
195
|
+
pid: number;
|
|
196
|
+
/** Service config used to start it. */
|
|
197
|
+
config: ServiceConfig;
|
|
198
|
+
/** Timestamp when started. */
|
|
199
|
+
startedAt: string;
|
|
200
|
+
}
|
|
201
|
+
/** State file saved to track running services. */
|
|
202
|
+
export interface RunningState {
|
|
203
|
+
/** Workspace path this state belongs to. */
|
|
204
|
+
workspacePath: string;
|
|
205
|
+
/** List of running services. */
|
|
206
|
+
services: RunningService[];
|
|
207
|
+
/** Timestamp when the state was last updated. */
|
|
208
|
+
updatedAt: string;
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|