@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.
Files changed (91) hide show
  1. package/README.md +16 -0
  2. package/dist/cli/commands/index.d.ts +1 -0
  3. package/dist/cli/commands/index.d.ts.map +1 -1
  4. package/dist/cli/commands/index.js +1 -0
  5. package/dist/cli/commands/index.js.map +1 -1
  6. package/dist/cli/commands/web.d.ts +6 -0
  7. package/dist/cli/commands/web.d.ts.map +1 -0
  8. package/dist/cli/commands/web.js +79 -0
  9. package/dist/cli/commands/web.js.map +1 -0
  10. package/dist/cli/index.js +2 -1
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +2 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/providers/cli-providers.d.ts.map +1 -1
  17. package/dist/providers/cli-providers.js +17 -2
  18. package/dist/providers/cli-providers.js.map +1 -1
  19. package/dist/web/index.d.ts +8 -0
  20. package/dist/web/index.d.ts.map +1 -0
  21. package/dist/web/index.js +8 -0
  22. package/dist/web/index.js.map +1 -0
  23. package/dist/web/middleware/auth.d.ts +21 -0
  24. package/dist/web/middleware/auth.d.ts.map +1 -0
  25. package/dist/web/middleware/auth.js +31 -0
  26. package/dist/web/middleware/auth.js.map +1 -0
  27. package/dist/web/middleware/cors.d.ts +7 -0
  28. package/dist/web/middleware/cors.d.ts.map +1 -0
  29. package/dist/web/middleware/cors.js +28 -0
  30. package/dist/web/middleware/cors.js.map +1 -0
  31. package/dist/web/middleware/error.d.ts +16 -0
  32. package/dist/web/middleware/error.d.ts.map +1 -0
  33. package/dist/web/middleware/error.js +51 -0
  34. package/dist/web/middleware/error.js.map +1 -0
  35. package/dist/web/middleware/index.d.ts +7 -0
  36. package/dist/web/middleware/index.d.ts.map +1 -0
  37. package/dist/web/middleware/index.js +7 -0
  38. package/dist/web/middleware/index.js.map +1 -0
  39. package/dist/web/router.d.ts +40 -0
  40. package/dist/web/router.d.ts.map +1 -0
  41. package/dist/web/router.js +162 -0
  42. package/dist/web/router.js.map +1 -0
  43. package/dist/web/routes/agents.d.ts +7 -0
  44. package/dist/web/routes/agents.d.ts.map +1 -0
  45. package/dist/web/routes/agents.js +182 -0
  46. package/dist/web/routes/agents.js.map +1 -0
  47. package/dist/web/routes/index.d.ts +10 -0
  48. package/dist/web/routes/index.d.ts.map +1 -0
  49. package/dist/web/routes/index.js +10 -0
  50. package/dist/web/routes/index.js.map +1 -0
  51. package/dist/web/routes/memory.d.ts +7 -0
  52. package/dist/web/routes/memory.d.ts.map +1 -0
  53. package/dist/web/routes/memory.js +146 -0
  54. package/dist/web/routes/memory.js.map +1 -0
  55. package/dist/web/routes/sessions.d.ts +7 -0
  56. package/dist/web/routes/sessions.d.ts.map +1 -0
  57. package/dist/web/routes/sessions.js +75 -0
  58. package/dist/web/routes/sessions.js.map +1 -0
  59. package/dist/web/routes/system.d.ts +7 -0
  60. package/dist/web/routes/system.d.ts.map +1 -0
  61. package/dist/web/routes/system.js +147 -0
  62. package/dist/web/routes/system.js.map +1 -0
  63. package/dist/web/routes/tasks.d.ts +7 -0
  64. package/dist/web/routes/tasks.d.ts.map +1 -0
  65. package/dist/web/routes/tasks.js +188 -0
  66. package/dist/web/routes/tasks.js.map +1 -0
  67. package/dist/web/routes/workflows.d.ts +7 -0
  68. package/dist/web/routes/workflows.d.ts.map +1 -0
  69. package/dist/web/routes/workflows.js +132 -0
  70. package/dist/web/routes/workflows.js.map +1 -0
  71. package/dist/web/server.d.ts +49 -0
  72. package/dist/web/server.d.ts.map +1 -0
  73. package/dist/web/server.js +230 -0
  74. package/dist/web/server.js.map +1 -0
  75. package/dist/web/types.d.ts +127 -0
  76. package/dist/web/types.d.ts.map +1 -0
  77. package/dist/web/types.js +5 -0
  78. package/dist/web/types.js.map +1 -0
  79. package/dist/web/websocket/event-bridge.d.ts +78 -0
  80. package/dist/web/websocket/event-bridge.d.ts.map +1 -0
  81. package/dist/web/websocket/event-bridge.js +131 -0
  82. package/dist/web/websocket/event-bridge.js.map +1 -0
  83. package/dist/web/websocket/handler.d.ts +23 -0
  84. package/dist/web/websocket/handler.d.ts.map +1 -0
  85. package/dist/web/websocket/handler.js +282 -0
  86. package/dist/web/websocket/handler.js.map +1 -0
  87. package/dist/web/websocket/index.d.ts +6 -0
  88. package/dist/web/websocket/index.d.ts.map +1 -0
  89. package/dist/web/websocket/index.js +6 -0
  90. package/dist/web/websocket/index.js.map +1 -0
  91. 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,5 @@
1
+ /**
2
+ * Web server types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -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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"}