@blackms/aistack 1.0.12 → 1.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/README.md +16 -0
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +1 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/web.d.ts +6 -0
- package/dist/cli/commands/web.d.ts.map +1 -0
- package/dist/cli/commands/web.js +79 -0
- package/dist/cli/commands/web.js.map +1 -0
- package/dist/cli/index.js +2 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/cli-providers.d.ts.map +1 -1
- package/dist/providers/cli-providers.js +17 -2
- package/dist/providers/cli-providers.js.map +1 -1
- package/dist/web/index.d.ts +8 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +8 -0
- package/dist/web/index.js.map +1 -0
- package/dist/web/middleware/auth.d.ts +21 -0
- package/dist/web/middleware/auth.d.ts.map +1 -0
- package/dist/web/middleware/auth.js +31 -0
- package/dist/web/middleware/auth.js.map +1 -0
- package/dist/web/middleware/cors.d.ts +7 -0
- package/dist/web/middleware/cors.d.ts.map +1 -0
- package/dist/web/middleware/cors.js +28 -0
- package/dist/web/middleware/cors.js.map +1 -0
- package/dist/web/middleware/error.d.ts +16 -0
- package/dist/web/middleware/error.d.ts.map +1 -0
- package/dist/web/middleware/error.js +51 -0
- package/dist/web/middleware/error.js.map +1 -0
- package/dist/web/middleware/index.d.ts +7 -0
- package/dist/web/middleware/index.d.ts.map +1 -0
- package/dist/web/middleware/index.js +7 -0
- package/dist/web/middleware/index.js.map +1 -0
- package/dist/web/router.d.ts +40 -0
- package/dist/web/router.d.ts.map +1 -0
- package/dist/web/router.js +162 -0
- package/dist/web/router.js.map +1 -0
- package/dist/web/routes/agents.d.ts +7 -0
- package/dist/web/routes/agents.d.ts.map +1 -0
- package/dist/web/routes/agents.js +182 -0
- package/dist/web/routes/agents.js.map +1 -0
- package/dist/web/routes/index.d.ts +10 -0
- package/dist/web/routes/index.d.ts.map +1 -0
- package/dist/web/routes/index.js +10 -0
- package/dist/web/routes/index.js.map +1 -0
- package/dist/web/routes/memory.d.ts +7 -0
- package/dist/web/routes/memory.d.ts.map +1 -0
- package/dist/web/routes/memory.js +146 -0
- package/dist/web/routes/memory.js.map +1 -0
- package/dist/web/routes/sessions.d.ts +7 -0
- package/dist/web/routes/sessions.d.ts.map +1 -0
- package/dist/web/routes/sessions.js +75 -0
- package/dist/web/routes/sessions.js.map +1 -0
- package/dist/web/routes/system.d.ts +7 -0
- package/dist/web/routes/system.d.ts.map +1 -0
- package/dist/web/routes/system.js +147 -0
- package/dist/web/routes/system.js.map +1 -0
- package/dist/web/routes/tasks.d.ts +7 -0
- package/dist/web/routes/tasks.d.ts.map +1 -0
- package/dist/web/routes/tasks.js +188 -0
- package/dist/web/routes/tasks.js.map +1 -0
- package/dist/web/routes/workflows.d.ts +7 -0
- package/dist/web/routes/workflows.d.ts.map +1 -0
- package/dist/web/routes/workflows.js +132 -0
- package/dist/web/routes/workflows.js.map +1 -0
- package/dist/web/server.d.ts +49 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/server.js +230 -0
- package/dist/web/server.js.map +1 -0
- package/dist/web/types.d.ts +127 -0
- package/dist/web/types.d.ts.map +1 -0
- package/dist/web/types.js +5 -0
- package/dist/web/types.js.map +1 -0
- package/dist/web/websocket/event-bridge.d.ts +78 -0
- package/dist/web/websocket/event-bridge.d.ts.map +1 -0
- package/dist/web/websocket/event-bridge.js +131 -0
- package/dist/web/websocket/event-bridge.js.map +1 -0
- package/dist/web/websocket/handler.d.ts +23 -0
- package/dist/web/websocket/handler.d.ts.map +1 -0
- package/dist/web/websocket/handler.js +282 -0
- package/dist/web/websocket/handler.js.map +1 -0
- package/dist/web/websocket/index.d.ts +6 -0
- package/dist/web/websocket/index.d.ts.map +1 -0
- package/dist/web/websocket/index.js +6 -0
- package/dist/web/websocket/index.js.map +1 -0
- package/package.json +6 -2
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web server - HTTP + WebSocket server for AgentStack
|
|
3
|
+
*/
|
|
4
|
+
import type { AgentStackConfig } from '../types.js';
|
|
5
|
+
import type { WebConfig } from './types.js';
|
|
6
|
+
export declare const defaultWebConfig: WebConfig;
|
|
7
|
+
export declare class WebServer {
|
|
8
|
+
private server;
|
|
9
|
+
private router;
|
|
10
|
+
private config;
|
|
11
|
+
private webConfig;
|
|
12
|
+
private corsMiddleware;
|
|
13
|
+
constructor(config: AgentStackConfig, webConfig?: Partial<WebConfig>);
|
|
14
|
+
private setupRoutes;
|
|
15
|
+
/**
|
|
16
|
+
* Start the server
|
|
17
|
+
*/
|
|
18
|
+
start(): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Stop the server
|
|
21
|
+
*/
|
|
22
|
+
stop(): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Serve static files from the frontend build
|
|
25
|
+
*/
|
|
26
|
+
private serveStatic;
|
|
27
|
+
/**
|
|
28
|
+
* Get server status
|
|
29
|
+
*/
|
|
30
|
+
getStatus(): {
|
|
31
|
+
running: boolean;
|
|
32
|
+
host: string;
|
|
33
|
+
port: number;
|
|
34
|
+
wsClients: number;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Start the web server
|
|
39
|
+
*/
|
|
40
|
+
export declare function startWebServer(config: AgentStackConfig, webConfig?: Partial<WebConfig>): Promise<WebServer>;
|
|
41
|
+
/**
|
|
42
|
+
* Stop the web server
|
|
43
|
+
*/
|
|
44
|
+
export declare function stopWebServer(): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Get the web server instance
|
|
47
|
+
*/
|
|
48
|
+
export declare function getWebServer(): WebServer | null;
|
|
49
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAcpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAK5C,eAAO,MAAM,gBAAgB,EAAE,SAO9B,CAAC;AAEF,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,cAAc,CAA0C;gBAEpD,MAAM,EAAE,gBAAgB,EAAE,SAAS,GAAE,OAAO,CAAC,SAAS,CAAM;IASxE,OAAO,CAAC,WAAW;IA0BnB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmD5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB3B;;OAEG;YACW,WAAW;IAqEzB;;OAEG;IACH,SAAS,IAAI;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB;CAQF;AAKD;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,EACxB,SAAS,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAC7B,OAAO,CAAC,SAAS,CAAC,CASpB;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAKnD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,GAAG,IAAI,CAE/C"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web server - HTTP + WebSocket server for AgentStack
|
|
3
|
+
*/
|
|
4
|
+
import * as http from 'node:http';
|
|
5
|
+
import * as fs from 'node:fs';
|
|
6
|
+
import * as path from 'node:path';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
8
|
+
import { logger } from '../utils/logger.js';
|
|
9
|
+
import { Router, sendJson, sendError } from './router.js';
|
|
10
|
+
import { createCorsMiddleware } from './middleware/cors.js';
|
|
11
|
+
import { handleError } from './middleware/error.js';
|
|
12
|
+
import { handleWebSocketUpgrade, closeAllConnections, getClientCount } from './websocket/handler.js';
|
|
13
|
+
import { registerAgentRoutes, registerMemoryRoutes, registerTaskRoutes, registerSessionRoutes, registerWorkflowRoutes, registerSystemRoutes, } from './routes/index.js';
|
|
14
|
+
const log = logger.child('web:server');
|
|
15
|
+
// Default web configuration
|
|
16
|
+
export const defaultWebConfig = {
|
|
17
|
+
enabled: true,
|
|
18
|
+
port: 3001,
|
|
19
|
+
host: 'localhost',
|
|
20
|
+
cors: {
|
|
21
|
+
origins: ['http://localhost:5174', 'http://localhost:5173', 'http://localhost:3000'],
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
export class WebServer {
|
|
25
|
+
server = null;
|
|
26
|
+
router;
|
|
27
|
+
config;
|
|
28
|
+
webConfig;
|
|
29
|
+
corsMiddleware;
|
|
30
|
+
constructor(config, webConfig = {}) {
|
|
31
|
+
this.config = config;
|
|
32
|
+
this.webConfig = { ...defaultWebConfig, ...webConfig };
|
|
33
|
+
this.router = new Router();
|
|
34
|
+
this.corsMiddleware = createCorsMiddleware(this.webConfig);
|
|
35
|
+
this.setupRoutes();
|
|
36
|
+
}
|
|
37
|
+
setupRoutes() {
|
|
38
|
+
// API routes
|
|
39
|
+
registerAgentRoutes(this.router, this.config);
|
|
40
|
+
registerMemoryRoutes(this.router, this.config);
|
|
41
|
+
registerTaskRoutes(this.router, this.config);
|
|
42
|
+
registerSessionRoutes(this.router, this.config);
|
|
43
|
+
registerWorkflowRoutes(this.router, this.config);
|
|
44
|
+
registerSystemRoutes(this.router, this.config);
|
|
45
|
+
// Root endpoint
|
|
46
|
+
this.router.get('/api/v1', (_req, res) => {
|
|
47
|
+
sendJson(res, {
|
|
48
|
+
name: 'AgentStack Web API',
|
|
49
|
+
version: '1.0.0',
|
|
50
|
+
endpoints: [
|
|
51
|
+
'/api/v1/agents',
|
|
52
|
+
'/api/v1/memory',
|
|
53
|
+
'/api/v1/tasks',
|
|
54
|
+
'/api/v1/sessions',
|
|
55
|
+
'/api/v1/workflows',
|
|
56
|
+
'/api/v1/system',
|
|
57
|
+
],
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Start the server
|
|
63
|
+
*/
|
|
64
|
+
async start() {
|
|
65
|
+
return new Promise((resolve, reject) => {
|
|
66
|
+
this.server = http.createServer(async (req, res) => {
|
|
67
|
+
try {
|
|
68
|
+
// CORS handling
|
|
69
|
+
if (this.corsMiddleware(req, res)) {
|
|
70
|
+
return; // Preflight handled
|
|
71
|
+
}
|
|
72
|
+
// Try to handle with router
|
|
73
|
+
const handled = await this.router.handle(req, res);
|
|
74
|
+
if (!handled) {
|
|
75
|
+
// Try to serve static files for frontend
|
|
76
|
+
const staticServed = await this.serveStatic(req, res);
|
|
77
|
+
if (!staticServed) {
|
|
78
|
+
sendError(res, 404, 'Not found');
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
handleError(res, error);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
// Handle WebSocket upgrade
|
|
87
|
+
this.server.on('upgrade', (req, socket, head) => {
|
|
88
|
+
const url = req.url || '';
|
|
89
|
+
if (url === '/ws' || url.startsWith('/ws?')) {
|
|
90
|
+
handleWebSocketUpgrade(req, socket, head);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
socket.write('HTTP/1.1 404 Not Found\r\n\r\n');
|
|
94
|
+
socket.destroy();
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
this.server.on('error', (error) => {
|
|
98
|
+
log.error('Server error', { error: error.message });
|
|
99
|
+
reject(error);
|
|
100
|
+
});
|
|
101
|
+
this.server.listen(this.webConfig.port, this.webConfig.host, () => {
|
|
102
|
+
log.info('Web server started', {
|
|
103
|
+
host: this.webConfig.host,
|
|
104
|
+
port: this.webConfig.port,
|
|
105
|
+
url: `http://${this.webConfig.host}:${this.webConfig.port}`,
|
|
106
|
+
});
|
|
107
|
+
resolve();
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Stop the server
|
|
113
|
+
*/
|
|
114
|
+
async stop() {
|
|
115
|
+
return new Promise((resolve) => {
|
|
116
|
+
// Close WebSocket connections
|
|
117
|
+
closeAllConnections();
|
|
118
|
+
if (this.server) {
|
|
119
|
+
this.server.close(() => {
|
|
120
|
+
log.info('Web server stopped');
|
|
121
|
+
this.server = null;
|
|
122
|
+
resolve();
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
resolve();
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Serve static files from the frontend build
|
|
132
|
+
*/
|
|
133
|
+
async serveStatic(req, res) {
|
|
134
|
+
const url = req.url || '/';
|
|
135
|
+
// Don't serve static for API routes
|
|
136
|
+
if (url.startsWith('/api/')) {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
// Get the static directory
|
|
140
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
141
|
+
const __dirname = path.dirname(__filename);
|
|
142
|
+
const staticDir = path.resolve(__dirname, '../../web/dist');
|
|
143
|
+
// Check if static directory exists
|
|
144
|
+
if (!fs.existsSync(staticDir)) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
// Determine file path
|
|
148
|
+
let filePath = path.join(staticDir, url);
|
|
149
|
+
// If it's a directory, try index.html
|
|
150
|
+
if (fs.existsSync(filePath) && fs.statSync(filePath).isDirectory()) {
|
|
151
|
+
filePath = path.join(filePath, 'index.html');
|
|
152
|
+
}
|
|
153
|
+
// If file doesn't exist, serve index.html for SPA routing
|
|
154
|
+
if (!fs.existsSync(filePath)) {
|
|
155
|
+
filePath = path.join(staticDir, 'index.html');
|
|
156
|
+
}
|
|
157
|
+
// Check if file exists
|
|
158
|
+
if (!fs.existsSync(filePath)) {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
// Get content type
|
|
162
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
163
|
+
const contentTypes = {
|
|
164
|
+
'.html': 'text/html',
|
|
165
|
+
'.js': 'application/javascript',
|
|
166
|
+
'.css': 'text/css',
|
|
167
|
+
'.json': 'application/json',
|
|
168
|
+
'.png': 'image/png',
|
|
169
|
+
'.jpg': 'image/jpeg',
|
|
170
|
+
'.gif': 'image/gif',
|
|
171
|
+
'.svg': 'image/svg+xml',
|
|
172
|
+
'.ico': 'image/x-icon',
|
|
173
|
+
'.woff': 'font/woff',
|
|
174
|
+
'.woff2': 'font/woff2',
|
|
175
|
+
'.ttf': 'font/ttf',
|
|
176
|
+
'.eot': 'application/vnd.ms-fontobject',
|
|
177
|
+
};
|
|
178
|
+
const contentType = contentTypes[ext] || 'application/octet-stream';
|
|
179
|
+
try {
|
|
180
|
+
const content = fs.readFileSync(filePath);
|
|
181
|
+
res.writeHead(200, { 'Content-Type': contentType });
|
|
182
|
+
res.end(content);
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Get server status
|
|
191
|
+
*/
|
|
192
|
+
getStatus() {
|
|
193
|
+
return {
|
|
194
|
+
running: this.server !== null,
|
|
195
|
+
host: this.webConfig.host,
|
|
196
|
+
port: this.webConfig.port,
|
|
197
|
+
wsClients: getClientCount(),
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// Singleton instance
|
|
202
|
+
let serverInstance = null;
|
|
203
|
+
/**
|
|
204
|
+
* Start the web server
|
|
205
|
+
*/
|
|
206
|
+
export async function startWebServer(config, webConfig) {
|
|
207
|
+
if (serverInstance) {
|
|
208
|
+
log.warn('Web server already running');
|
|
209
|
+
return serverInstance;
|
|
210
|
+
}
|
|
211
|
+
serverInstance = new WebServer(config, webConfig);
|
|
212
|
+
await serverInstance.start();
|
|
213
|
+
return serverInstance;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Stop the web server
|
|
217
|
+
*/
|
|
218
|
+
export async function stopWebServer() {
|
|
219
|
+
if (serverInstance) {
|
|
220
|
+
await serverInstance.stop();
|
|
221
|
+
serverInstance = null;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Get the web server instance
|
|
226
|
+
*/
|
|
227
|
+
export function getWebServer() {
|
|
228
|
+
return serverInstance;
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web server types
|
|
3
|
+
*/
|
|
4
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
5
|
+
export interface WebConfig {
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
port: number;
|
|
8
|
+
host: string;
|
|
9
|
+
cors: {
|
|
10
|
+
origins: string[];
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export interface RouteHandler {
|
|
14
|
+
(req: IncomingMessage, res: ServerResponse, params: RouteParams): Promise<void> | void;
|
|
15
|
+
}
|
|
16
|
+
export interface RouteParams {
|
|
17
|
+
path: string[];
|
|
18
|
+
query: Record<string, string>;
|
|
19
|
+
body?: unknown;
|
|
20
|
+
}
|
|
21
|
+
export interface Route {
|
|
22
|
+
method: string;
|
|
23
|
+
pattern: RegExp;
|
|
24
|
+
handler: RouteHandler;
|
|
25
|
+
paramNames: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface ApiResponse<T = unknown> {
|
|
28
|
+
success: boolean;
|
|
29
|
+
data?: T;
|
|
30
|
+
error?: string;
|
|
31
|
+
timestamp: string;
|
|
32
|
+
}
|
|
33
|
+
export interface PaginatedResponse<T> extends ApiResponse<T[]> {
|
|
34
|
+
pagination: {
|
|
35
|
+
limit: number;
|
|
36
|
+
offset: number;
|
|
37
|
+
total: number;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export interface WSMessage {
|
|
41
|
+
type: string;
|
|
42
|
+
payload: unknown;
|
|
43
|
+
timestamp: string;
|
|
44
|
+
}
|
|
45
|
+
export interface WSClientInfo {
|
|
46
|
+
id: string;
|
|
47
|
+
connectedAt: Date;
|
|
48
|
+
subscriptions: Set<string>;
|
|
49
|
+
}
|
|
50
|
+
export interface SpawnAgentRequest {
|
|
51
|
+
type: string;
|
|
52
|
+
name?: string;
|
|
53
|
+
sessionId?: string;
|
|
54
|
+
metadata?: Record<string, unknown>;
|
|
55
|
+
}
|
|
56
|
+
export interface ExecuteAgentRequest {
|
|
57
|
+
task: string;
|
|
58
|
+
provider?: string;
|
|
59
|
+
model?: string;
|
|
60
|
+
context?: string;
|
|
61
|
+
}
|
|
62
|
+
export interface ChatRequest {
|
|
63
|
+
message: string;
|
|
64
|
+
context?: string;
|
|
65
|
+
}
|
|
66
|
+
export interface MemoryStoreRequest {
|
|
67
|
+
key: string;
|
|
68
|
+
content: string;
|
|
69
|
+
namespace?: string;
|
|
70
|
+
metadata?: Record<string, unknown>;
|
|
71
|
+
generateEmbedding?: boolean;
|
|
72
|
+
}
|
|
73
|
+
export interface MemorySearchRequest {
|
|
74
|
+
query: string;
|
|
75
|
+
namespace?: string;
|
|
76
|
+
limit?: number;
|
|
77
|
+
threshold?: number;
|
|
78
|
+
useVector?: boolean;
|
|
79
|
+
}
|
|
80
|
+
export interface CreateTaskRequest {
|
|
81
|
+
agentType: string;
|
|
82
|
+
input?: string;
|
|
83
|
+
sessionId?: string;
|
|
84
|
+
priority?: number;
|
|
85
|
+
}
|
|
86
|
+
export interface AssignTaskRequest {
|
|
87
|
+
agentId: string;
|
|
88
|
+
}
|
|
89
|
+
export interface CompleteTaskRequest {
|
|
90
|
+
output?: string;
|
|
91
|
+
}
|
|
92
|
+
export interface LaunchWorkflowRequest {
|
|
93
|
+
workflow: string;
|
|
94
|
+
config?: Record<string, unknown>;
|
|
95
|
+
}
|
|
96
|
+
export interface CreateSessionRequest {
|
|
97
|
+
metadata?: Record<string, unknown>;
|
|
98
|
+
}
|
|
99
|
+
export interface SystemStatus {
|
|
100
|
+
version: string;
|
|
101
|
+
uptime: number;
|
|
102
|
+
memory: {
|
|
103
|
+
heapUsed: number;
|
|
104
|
+
heapTotal: number;
|
|
105
|
+
external: number;
|
|
106
|
+
};
|
|
107
|
+
agents: {
|
|
108
|
+
active: number;
|
|
109
|
+
byStatus: Record<string, number>;
|
|
110
|
+
};
|
|
111
|
+
tasks: {
|
|
112
|
+
queued: number;
|
|
113
|
+
processing: number;
|
|
114
|
+
};
|
|
115
|
+
sessions: {
|
|
116
|
+
active: number;
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
export interface HealthCheck {
|
|
120
|
+
status: 'healthy' | 'degraded' | 'unhealthy';
|
|
121
|
+
checks: {
|
|
122
|
+
database: boolean;
|
|
123
|
+
memory: boolean;
|
|
124
|
+
providers: boolean;
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/web/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/web/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event bridge - connects internal EventEmitters to WebSocket clients
|
|
3
|
+
*/
|
|
4
|
+
import { EventEmitter } from 'node:events';
|
|
5
|
+
export declare const agentEvents: EventEmitter<[never]>;
|
|
6
|
+
export interface AgentSpawnedEvent {
|
|
7
|
+
id: string;
|
|
8
|
+
type: string;
|
|
9
|
+
name: string;
|
|
10
|
+
}
|
|
11
|
+
export interface AgentStoppedEvent {
|
|
12
|
+
id: string;
|
|
13
|
+
}
|
|
14
|
+
export interface AgentStatusEvent {
|
|
15
|
+
id: string;
|
|
16
|
+
status: string;
|
|
17
|
+
}
|
|
18
|
+
export interface TaskCreatedEvent {
|
|
19
|
+
task: unknown;
|
|
20
|
+
}
|
|
21
|
+
export interface TaskAssignedEvent {
|
|
22
|
+
taskId: string;
|
|
23
|
+
agentId: string;
|
|
24
|
+
}
|
|
25
|
+
export interface TaskCompletedEvent {
|
|
26
|
+
taskId: string;
|
|
27
|
+
result?: unknown;
|
|
28
|
+
}
|
|
29
|
+
export interface WorkflowStartEvent {
|
|
30
|
+
workflowId: string;
|
|
31
|
+
config: unknown;
|
|
32
|
+
}
|
|
33
|
+
export interface WorkflowPhaseEvent {
|
|
34
|
+
workflowId: string;
|
|
35
|
+
phase: string;
|
|
36
|
+
status: string;
|
|
37
|
+
}
|
|
38
|
+
export interface WorkflowCompleteEvent {
|
|
39
|
+
workflowId: string;
|
|
40
|
+
report: unknown;
|
|
41
|
+
}
|
|
42
|
+
export interface WorkflowErrorEvent {
|
|
43
|
+
workflowId: string;
|
|
44
|
+
error: string;
|
|
45
|
+
}
|
|
46
|
+
export interface MessageReceivedEvent {
|
|
47
|
+
from: string;
|
|
48
|
+
to: string;
|
|
49
|
+
content: string;
|
|
50
|
+
}
|
|
51
|
+
export type EventName = 'agent:spawned' | 'agent:stopped' | 'agent:status' | 'task:created' | 'task:assigned' | 'task:completed' | 'workflow:start' | 'workflow:phase' | 'workflow:complete' | 'workflow:error' | 'workflow:finding' | 'message:received';
|
|
52
|
+
export declare class EventBridge {
|
|
53
|
+
private listeners;
|
|
54
|
+
constructor();
|
|
55
|
+
/**
|
|
56
|
+
* Subscribe to all events
|
|
57
|
+
*/
|
|
58
|
+
subscribe(callback: (event: string, data: unknown) => void): () => void;
|
|
59
|
+
/**
|
|
60
|
+
* Subscribe to specific event
|
|
61
|
+
*/
|
|
62
|
+
subscribeToEvent(event: string, callback: (data: unknown) => void): () => void;
|
|
63
|
+
/**
|
|
64
|
+
* Broadcast event to all subscribers
|
|
65
|
+
*/
|
|
66
|
+
broadcast(event: string, data: unknown): void;
|
|
67
|
+
/**
|
|
68
|
+
* Get subscriber count for an event
|
|
69
|
+
*/
|
|
70
|
+
getSubscriberCount(event?: string): number;
|
|
71
|
+
/**
|
|
72
|
+
* Clear all listeners
|
|
73
|
+
*/
|
|
74
|
+
clear(): void;
|
|
75
|
+
}
|
|
76
|
+
export declare function getEventBridge(): EventBridge;
|
|
77
|
+
export declare function resetEventBridge(): void;
|
|
78
|
+
//# sourceMappingURL=event-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-bridge.d.ts","sourceRoot":"","sources":["../../../src/web/websocket/event-bridge.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,eAAO,MAAM,WAAW,uBAAqB,CAAC;AAG9C,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,MAAM,SAAS,GACjB,eAAe,GACf,eAAe,GACf,cAAc,GACd,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,GACnB,gBAAgB,GAChB,kBAAkB,GAClB,kBAAkB,CAAC;AAGvB,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAwD;;IA0BzE;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAevE;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAW9E;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAkC7C;;OAEG;IACH,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAY1C;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAKD,wBAAgB,cAAc,IAAI,WAAW,CAK5C;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAKvC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event bridge - connects internal EventEmitters to WebSocket clients
|
|
3
|
+
*/
|
|
4
|
+
import { EventEmitter } from 'node:events';
|
|
5
|
+
import { logger } from '../../utils/logger.js';
|
|
6
|
+
const log = logger.child('web:events');
|
|
7
|
+
// Agent events emitter - used by routes to emit events
|
|
8
|
+
export const agentEvents = new EventEmitter();
|
|
9
|
+
// Event bridge class for managing WebSocket subscriptions
|
|
10
|
+
export class EventBridge {
|
|
11
|
+
listeners = new Map();
|
|
12
|
+
constructor() {
|
|
13
|
+
// Wire up all agent events to broadcast
|
|
14
|
+
const events = [
|
|
15
|
+
'agent:spawned',
|
|
16
|
+
'agent:stopped',
|
|
17
|
+
'agent:status',
|
|
18
|
+
'task:created',
|
|
19
|
+
'task:assigned',
|
|
20
|
+
'task:completed',
|
|
21
|
+
'workflow:start',
|
|
22
|
+
'workflow:phase',
|
|
23
|
+
'workflow:complete',
|
|
24
|
+
'workflow:error',
|
|
25
|
+
'workflow:finding',
|
|
26
|
+
'message:received',
|
|
27
|
+
];
|
|
28
|
+
for (const event of events) {
|
|
29
|
+
agentEvents.on(event, (data) => {
|
|
30
|
+
this.broadcast(event, data);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Subscribe to all events
|
|
36
|
+
*/
|
|
37
|
+
subscribe(callback) {
|
|
38
|
+
const wrappedCallback = (data) => callback('*', data);
|
|
39
|
+
// Subscribe to all events
|
|
40
|
+
if (!this.listeners.has('*')) {
|
|
41
|
+
this.listeners.set('*', new Set());
|
|
42
|
+
}
|
|
43
|
+
this.listeners.get('*').add(wrappedCallback);
|
|
44
|
+
// Return unsubscribe function
|
|
45
|
+
return () => {
|
|
46
|
+
this.listeners.get('*')?.delete(wrappedCallback);
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Subscribe to specific event
|
|
51
|
+
*/
|
|
52
|
+
subscribeToEvent(event, callback) {
|
|
53
|
+
if (!this.listeners.has(event)) {
|
|
54
|
+
this.listeners.set(event, new Set());
|
|
55
|
+
}
|
|
56
|
+
this.listeners.get(event).add(callback);
|
|
57
|
+
return () => {
|
|
58
|
+
this.listeners.get(event)?.delete(callback);
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Broadcast event to all subscribers
|
|
63
|
+
*/
|
|
64
|
+
broadcast(event, data) {
|
|
65
|
+
log.debug('Broadcasting event', { event });
|
|
66
|
+
// Notify event-specific listeners
|
|
67
|
+
const eventListeners = this.listeners.get(event);
|
|
68
|
+
if (eventListeners) {
|
|
69
|
+
for (const listener of eventListeners) {
|
|
70
|
+
try {
|
|
71
|
+
listener(data);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
log.error('Error in event listener', {
|
|
75
|
+
event,
|
|
76
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Notify wildcard listeners
|
|
82
|
+
const wildcardListeners = this.listeners.get('*');
|
|
83
|
+
if (wildcardListeners) {
|
|
84
|
+
for (const listener of wildcardListeners) {
|
|
85
|
+
try {
|
|
86
|
+
listener({ event, data });
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
log.error('Error in wildcard listener', {
|
|
90
|
+
event,
|
|
91
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get subscriber count for an event
|
|
99
|
+
*/
|
|
100
|
+
getSubscriberCount(event) {
|
|
101
|
+
if (event) {
|
|
102
|
+
return this.listeners.get(event)?.size ?? 0;
|
|
103
|
+
}
|
|
104
|
+
let total = 0;
|
|
105
|
+
for (const listeners of this.listeners.values()) {
|
|
106
|
+
total += listeners.size;
|
|
107
|
+
}
|
|
108
|
+
return total;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Clear all listeners
|
|
112
|
+
*/
|
|
113
|
+
clear() {
|
|
114
|
+
this.listeners.clear();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Singleton instance
|
|
118
|
+
let eventBridge = null;
|
|
119
|
+
export function getEventBridge() {
|
|
120
|
+
if (!eventBridge) {
|
|
121
|
+
eventBridge = new EventBridge();
|
|
122
|
+
}
|
|
123
|
+
return eventBridge;
|
|
124
|
+
}
|
|
125
|
+
export function resetEventBridge() {
|
|
126
|
+
if (eventBridge) {
|
|
127
|
+
eventBridge.clear();
|
|
128
|
+
eventBridge = null;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=event-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-bridge.js","sourceRoot":"","sources":["../../../src/web/websocket/event-bridge.ts"],"names":[],"mappings":"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"}
|