@esotech/contextuate 2.0.0 → 2.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 +169 -1
- package/dist/commands/claude.d.ts +21 -0
- package/dist/commands/claude.js +213 -0
- package/dist/commands/context.d.ts +1 -0
- package/dist/commands/create.d.ts +3 -0
- package/dist/commands/index.d.ts +4 -0
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.js +67 -6
- package/dist/commands/install.d.ts +28 -0
- package/dist/commands/install.js +116 -11
- package/dist/commands/monitor.d.ts +55 -0
- package/dist/commands/monitor.js +1007 -0
- package/dist/commands/remove.d.ts +3 -0
- package/dist/commands/run.d.ts +6 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +113 -1
- package/dist/monitor/daemon/circuit-breaker.d.ts +121 -0
- package/dist/monitor/daemon/circuit-breaker.js +552 -0
- package/dist/monitor/daemon/cli.d.ts +8 -0
- package/dist/monitor/daemon/cli.js +82 -0
- package/dist/monitor/daemon/index.d.ts +137 -0
- package/dist/monitor/daemon/index.js +695 -0
- package/dist/monitor/daemon/notifier.d.ts +25 -0
- package/dist/monitor/daemon/notifier.js +98 -0
- package/dist/monitor/daemon/processor.d.ts +89 -0
- package/dist/monitor/daemon/processor.js +455 -0
- package/dist/monitor/daemon/state.d.ts +80 -0
- package/dist/monitor/daemon/state.js +162 -0
- package/dist/monitor/daemon/watcher.d.ts +47 -0
- package/dist/monitor/daemon/watcher.js +171 -0
- package/dist/monitor/daemon/wrapper-manager.d.ts +106 -0
- package/dist/monitor/daemon/wrapper-manager.js +374 -0
- package/dist/monitor/hooks/emit-event.js +652 -0
- package/dist/monitor/persistence/file-store.d.ts +88 -0
- package/dist/monitor/persistence/file-store.js +335 -0
- package/dist/monitor/persistence/index.d.ts +7 -0
- package/dist/monitor/persistence/index.js +10 -0
- package/dist/monitor/server/adapters/redis.d.ts +38 -0
- package/dist/monitor/server/adapters/redis.js +213 -0
- package/dist/monitor/server/adapters/unix-socket.d.ts +33 -0
- package/dist/monitor/server/adapters/unix-socket.js +182 -0
- package/dist/monitor/server/broker.d.ts +135 -0
- package/dist/monitor/server/broker.js +475 -0
- package/dist/monitor/server/cli.d.ts +8 -0
- package/dist/monitor/server/cli.js +98 -0
- package/dist/monitor/server/fastify.d.ts +16 -0
- package/dist/monitor/server/fastify.js +184 -0
- package/dist/monitor/server/index.d.ts +36 -0
- package/dist/monitor/server/index.js +153 -0
- package/dist/monitor/server/websocket.d.ts +80 -0
- package/dist/monitor/server/websocket.js +453 -0
- package/dist/monitor/ui/assets/index-4IssW9On.js +59 -0
- package/dist/monitor/ui/assets/index-vo9hLe5R.css +32 -0
- package/dist/monitor/ui/favicon.png +0 -0
- package/dist/monitor/ui/index.html +14 -0
- package/dist/monitor/ui/logo.png +0 -0
- package/dist/monitor/ui/logo.svg +1 -0
- package/dist/runtime/driver.d.ts +16 -0
- package/dist/runtime/tools.d.ts +10 -0
- package/dist/templates/README.md +33 -7
- package/dist/templates/agents/aegis.md +4 -0
- package/dist/templates/agents/archon.md +13 -22
- package/dist/templates/agents/atlas.md +4 -0
- package/dist/templates/agents/canvas.md +4 -0
- package/dist/templates/agents/chronicle.md +4 -0
- package/dist/templates/agents/chronos.md +4 -0
- package/dist/templates/agents/cipher.md +4 -0
- package/dist/templates/agents/crucible.md +4 -0
- package/dist/templates/agents/echo.md +4 -0
- package/dist/templates/agents/forge.md +4 -0
- package/dist/templates/agents/ledger.md +4 -0
- package/dist/templates/agents/meridian.md +4 -0
- package/dist/templates/agents/nexus.md +4 -0
- package/dist/templates/agents/pythia.md +217 -0
- package/dist/templates/agents/scribe.md +4 -0
- package/dist/templates/agents/sentinel.md +4 -0
- package/dist/templates/agents/{oracle.md → thoth.md} +11 -7
- package/dist/templates/agents/unity.md +4 -0
- package/dist/templates/agents/vox.md +4 -0
- package/dist/templates/agents/weaver.md +4 -0
- package/dist/templates/framework-agents/documentation-expert.md +3 -3
- package/dist/templates/framework-agents/tools-expert.md +8 -8
- package/dist/templates/skills/consult.md +138 -0
- package/dist/templates/skills/orchestrate.md +173 -0
- package/dist/templates/skills/pythia.md +37 -0
- package/dist/templates/standards/agent-roles.md +68 -21
- package/dist/templates/standards/coding-standards.md +9 -26
- package/dist/templates/templates/context.md +17 -2
- package/dist/templates/templates/contextuate.md +21 -28
- package/dist/templates/templates/standards/go.md +167 -0
- package/dist/templates/templates/standards/java.md +167 -0
- package/dist/templates/templates/standards/javascript.md +292 -0
- package/dist/templates/templates/standards/php.md +181 -0
- package/dist/templates/templates/standards/python.md +175 -0
- package/dist/templates/tools/agent-creator.md +252 -0
- package/dist/templates/tools/agent-creator.tool.md +2 -2
- package/dist/templates/tools/quickref.md +216 -0
- package/dist/templates/tools/spawn.md +31 -0
- package/dist/templates/tools/standards-detector.md +301 -0
- package/dist/templates/version.json +1 -1
- package/dist/types/monitor.d.ts +660 -0
- package/dist/types/monitor.js +75 -0
- package/dist/utils/git.d.ts +9 -0
- package/dist/utils/tokens.d.ts +10 -0
- package/package.json +18 -5
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Fastify HTTP Server
|
|
4
|
+
*
|
|
5
|
+
* Serves the Vue UI and provides REST API endpoints
|
|
6
|
+
* for the monitor dashboard.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
42
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.createFastifyServer = createFastifyServer;
|
|
46
|
+
const fastify_1 = __importDefault(require("fastify"));
|
|
47
|
+
const static_1 = __importDefault(require("@fastify/static"));
|
|
48
|
+
const cors_1 = __importDefault(require("@fastify/cors"));
|
|
49
|
+
const path = __importStar(require("path"));
|
|
50
|
+
const fs = __importStar(require("fs"));
|
|
51
|
+
async function createFastifyServer(options) {
|
|
52
|
+
const { host, port, broker, persistence } = options;
|
|
53
|
+
const app = (0, fastify_1.default)({
|
|
54
|
+
logger: {
|
|
55
|
+
level: 'warn',
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
// Enable CORS for development
|
|
59
|
+
await app.register(cors_1.default, {
|
|
60
|
+
origin: true,
|
|
61
|
+
credentials: true,
|
|
62
|
+
});
|
|
63
|
+
// Serve static UI files
|
|
64
|
+
// When running from dist/, __dirname is dist/monitor/server/
|
|
65
|
+
// UI is at dist/monitor/ui/
|
|
66
|
+
const uiDistPath = path.join(__dirname, '../ui');
|
|
67
|
+
// When running from src/ during dev, UI dist is at src/monitor/ui/dist/
|
|
68
|
+
const uiDevPath = path.join(__dirname, '../ui/dist');
|
|
69
|
+
let staticPath = null;
|
|
70
|
+
// Check for index.html to confirm it's the right directory
|
|
71
|
+
if (fs.existsSync(path.join(uiDistPath, 'index.html'))) {
|
|
72
|
+
staticPath = uiDistPath;
|
|
73
|
+
}
|
|
74
|
+
else if (fs.existsSync(path.join(uiDevPath, 'index.html'))) {
|
|
75
|
+
staticPath = uiDevPath;
|
|
76
|
+
}
|
|
77
|
+
if (!staticPath) {
|
|
78
|
+
console.warn('[HTTP] Warning: UI static files not found. Tried:', uiDistPath, uiDevPath);
|
|
79
|
+
}
|
|
80
|
+
if (staticPath) {
|
|
81
|
+
await app.register(static_1.default, {
|
|
82
|
+
root: staticPath,
|
|
83
|
+
prefix: '/',
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
// API Routes
|
|
87
|
+
/**
|
|
88
|
+
* GET /api/status
|
|
89
|
+
* Returns server status and configuration
|
|
90
|
+
*/
|
|
91
|
+
app.get('/api/status', async () => {
|
|
92
|
+
const config = broker.getConfig();
|
|
93
|
+
return {
|
|
94
|
+
status: 'running',
|
|
95
|
+
mode: config.mode,
|
|
96
|
+
sessions: broker.getSessions().length,
|
|
97
|
+
activeSessions: broker.getSessions().filter(s => s.status === 'active').length,
|
|
98
|
+
uptime: process.uptime(),
|
|
99
|
+
version: '1.0.0',
|
|
100
|
+
};
|
|
101
|
+
});
|
|
102
|
+
/**
|
|
103
|
+
* GET /api/sessions
|
|
104
|
+
* Returns all sessions
|
|
105
|
+
*/
|
|
106
|
+
app.get('/api/sessions', async () => {
|
|
107
|
+
return {
|
|
108
|
+
sessions: broker.getSessions(),
|
|
109
|
+
};
|
|
110
|
+
});
|
|
111
|
+
/**
|
|
112
|
+
* GET /api/sessions/:sessionId
|
|
113
|
+
* Returns a specific session
|
|
114
|
+
*/
|
|
115
|
+
app.get('/api/sessions/:sessionId', async (request, reply) => {
|
|
116
|
+
const session = broker.getSession(request.params.sessionId);
|
|
117
|
+
if (!session) {
|
|
118
|
+
reply.code(404);
|
|
119
|
+
return { error: 'Session not found' };
|
|
120
|
+
}
|
|
121
|
+
return { session };
|
|
122
|
+
});
|
|
123
|
+
/**
|
|
124
|
+
* GET /api/sessions/:sessionId/events
|
|
125
|
+
* Returns events for a session
|
|
126
|
+
*/
|
|
127
|
+
app.get('/api/sessions/:sessionId/events', async (request, reply) => {
|
|
128
|
+
if (!persistence) {
|
|
129
|
+
reply.code(503);
|
|
130
|
+
return { error: 'Persistence not configured' };
|
|
131
|
+
}
|
|
132
|
+
const { sessionId } = request.params;
|
|
133
|
+
const limit = request.query.limit ? parseInt(request.query.limit) : 100;
|
|
134
|
+
const before = request.query.before ? parseInt(request.query.before) : undefined;
|
|
135
|
+
const after = request.query.after ? parseInt(request.query.after) : undefined;
|
|
136
|
+
try {
|
|
137
|
+
const events = await persistence.getEvents(sessionId, { limit, before, after });
|
|
138
|
+
return { events };
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
reply.code(500);
|
|
142
|
+
return { error: 'Failed to fetch events' };
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
/**
|
|
146
|
+
* GET /api/config
|
|
147
|
+
* Returns current configuration (sanitized)
|
|
148
|
+
*/
|
|
149
|
+
app.get('/api/config', async () => {
|
|
150
|
+
const config = broker.getConfig();
|
|
151
|
+
return {
|
|
152
|
+
mode: config.mode,
|
|
153
|
+
server: {
|
|
154
|
+
host: config.server.host,
|
|
155
|
+
port: config.server.port,
|
|
156
|
+
wsPort: config.server.wsPort,
|
|
157
|
+
},
|
|
158
|
+
persistence: {
|
|
159
|
+
enabled: config.persistence.enabled,
|
|
160
|
+
type: config.persistence.type,
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
});
|
|
164
|
+
/**
|
|
165
|
+
* Health check endpoint
|
|
166
|
+
*/
|
|
167
|
+
app.get('/health', async () => {
|
|
168
|
+
return { status: 'ok' };
|
|
169
|
+
});
|
|
170
|
+
// SPA fallback - serve index.html for all non-API routes
|
|
171
|
+
if (staticPath) {
|
|
172
|
+
app.setNotFoundHandler(async (request, reply) => {
|
|
173
|
+
if (!request.url.startsWith('/api/')) {
|
|
174
|
+
return reply.sendFile('index.html');
|
|
175
|
+
}
|
|
176
|
+
reply.code(404);
|
|
177
|
+
return { error: 'Not found' };
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
// Start the server
|
|
181
|
+
await app.listen({ host, port });
|
|
182
|
+
console.log(`[HTTP] Server listening on http://${host}:${port}`);
|
|
183
|
+
return app;
|
|
184
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Monitor Server
|
|
3
|
+
*
|
|
4
|
+
* Main entry point for the monitor server.
|
|
5
|
+
* Orchestrates all components: broker, HTTP server, WebSocket server, persistence.
|
|
6
|
+
*/
|
|
7
|
+
import type { FastifyInstance } from 'fastify';
|
|
8
|
+
import type { MonitorConfig } from '../../types/monitor';
|
|
9
|
+
import { EventBroker } from './broker';
|
|
10
|
+
import { MonitorWebSocketServer } from './websocket';
|
|
11
|
+
import { FileStore } from '../persistence/file-store';
|
|
12
|
+
export interface MonitorServer {
|
|
13
|
+
broker: EventBroker;
|
|
14
|
+
http: FastifyInstance;
|
|
15
|
+
ws: MonitorWebSocketServer;
|
|
16
|
+
persistence: FileStore;
|
|
17
|
+
start: () => Promise<void>;
|
|
18
|
+
stop: () => Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export interface CreateServerOptions {
|
|
21
|
+
config: MonitorConfig;
|
|
22
|
+
dataDir?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Create and configure the monitor server
|
|
26
|
+
*/
|
|
27
|
+
export declare function createMonitorServer(options: CreateServerOptions): Promise<MonitorServer>;
|
|
28
|
+
/**
|
|
29
|
+
* Default configuration
|
|
30
|
+
*/
|
|
31
|
+
export declare function getDefaultConfig(): MonitorConfig;
|
|
32
|
+
export { EventBroker } from './broker';
|
|
33
|
+
export { UnixSocketAdapter } from './adapters/unix-socket';
|
|
34
|
+
export { RedisAdapter } from './adapters/redis';
|
|
35
|
+
export { createFastifyServer } from './fastify';
|
|
36
|
+
export { MonitorWebSocketServer } from './websocket';
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Monitor Server
|
|
4
|
+
*
|
|
5
|
+
* Main entry point for the monitor server.
|
|
6
|
+
* Orchestrates all components: broker, HTTP server, WebSocket server, persistence.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.MonitorWebSocketServer = exports.createFastifyServer = exports.RedisAdapter = exports.UnixSocketAdapter = exports.EventBroker = void 0;
|
|
43
|
+
exports.createMonitorServer = createMonitorServer;
|
|
44
|
+
exports.getDefaultConfig = getDefaultConfig;
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const os = __importStar(require("os"));
|
|
47
|
+
const broker_1 = require("./broker");
|
|
48
|
+
const fastify_1 = require("./fastify");
|
|
49
|
+
const websocket_1 = require("./websocket");
|
|
50
|
+
const file_store_1 = require("../persistence/file-store");
|
|
51
|
+
/**
|
|
52
|
+
* Create and configure the monitor server
|
|
53
|
+
*/
|
|
54
|
+
async function createMonitorServer(options) {
|
|
55
|
+
const { config } = options;
|
|
56
|
+
const dataDir = options.dataDir || path.join(os.homedir(), '.contextuate');
|
|
57
|
+
// Initialize persistence
|
|
58
|
+
const persistence = new file_store_1.FileStore({
|
|
59
|
+
baseDir: dataDir,
|
|
60
|
+
});
|
|
61
|
+
await persistence.init();
|
|
62
|
+
// Initialize broker
|
|
63
|
+
const broker = new broker_1.EventBroker(config);
|
|
64
|
+
broker.setPersistence(persistence);
|
|
65
|
+
// Initialize HTTP server
|
|
66
|
+
const http = await (0, fastify_1.createFastifyServer)({
|
|
67
|
+
host: config.server.host,
|
|
68
|
+
port: config.server.port,
|
|
69
|
+
broker,
|
|
70
|
+
persistence,
|
|
71
|
+
});
|
|
72
|
+
// Initialize WebSocket server
|
|
73
|
+
const ws = new websocket_1.MonitorWebSocketServer({
|
|
74
|
+
host: config.server.host,
|
|
75
|
+
port: config.server.wsPort,
|
|
76
|
+
broker,
|
|
77
|
+
persistence,
|
|
78
|
+
});
|
|
79
|
+
const server = {
|
|
80
|
+
broker,
|
|
81
|
+
http,
|
|
82
|
+
ws,
|
|
83
|
+
persistence,
|
|
84
|
+
async start() {
|
|
85
|
+
// Load existing sessions
|
|
86
|
+
await broker.loadSessions();
|
|
87
|
+
// Start the broker (IPC adapter)
|
|
88
|
+
await broker.start();
|
|
89
|
+
// Start WebSocket server
|
|
90
|
+
await ws.start();
|
|
91
|
+
console.log('');
|
|
92
|
+
console.log('='.repeat(50));
|
|
93
|
+
console.log(' Contextuate Monitor Server');
|
|
94
|
+
console.log('='.repeat(50));
|
|
95
|
+
console.log(` Mode: ${config.mode}`);
|
|
96
|
+
console.log(` HTTP: http://${config.server.host}:${config.server.port}`);
|
|
97
|
+
console.log(` WebSocket: ws://${config.server.host}:${config.server.wsPort}`);
|
|
98
|
+
console.log(` Data: ${dataDir}`);
|
|
99
|
+
if (config.mode === 'local') {
|
|
100
|
+
console.log(` Socket: ${config.socketPath}`);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
console.log(` Redis: ${config.redis.host}:${config.redis.port}`);
|
|
104
|
+
}
|
|
105
|
+
console.log('='.repeat(50));
|
|
106
|
+
console.log('');
|
|
107
|
+
},
|
|
108
|
+
async stop() {
|
|
109
|
+
console.log('[Server] Shutting down...');
|
|
110
|
+
await ws.stop();
|
|
111
|
+
await broker.stop();
|
|
112
|
+
await http.close();
|
|
113
|
+
await persistence.close();
|
|
114
|
+
console.log('[Server] Stopped');
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
return server;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Default configuration
|
|
121
|
+
*/
|
|
122
|
+
function getDefaultConfig() {
|
|
123
|
+
return {
|
|
124
|
+
mode: 'local',
|
|
125
|
+
server: {
|
|
126
|
+
host: '0.0.0.0',
|
|
127
|
+
port: 3847,
|
|
128
|
+
wsPort: 3848,
|
|
129
|
+
},
|
|
130
|
+
redis: {
|
|
131
|
+
host: 'localhost',
|
|
132
|
+
port: 6379,
|
|
133
|
+
password: null,
|
|
134
|
+
channel: 'contextuate:events',
|
|
135
|
+
},
|
|
136
|
+
persistence: {
|
|
137
|
+
enabled: true,
|
|
138
|
+
type: 'file',
|
|
139
|
+
},
|
|
140
|
+
socketPath: '/tmp/contextuate-monitor.sock',
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
// Export components
|
|
144
|
+
var broker_2 = require("./broker");
|
|
145
|
+
Object.defineProperty(exports, "EventBroker", { enumerable: true, get: function () { return broker_2.EventBroker; } });
|
|
146
|
+
var unix_socket_1 = require("./adapters/unix-socket");
|
|
147
|
+
Object.defineProperty(exports, "UnixSocketAdapter", { enumerable: true, get: function () { return unix_socket_1.UnixSocketAdapter; } });
|
|
148
|
+
var redis_1 = require("./adapters/redis");
|
|
149
|
+
Object.defineProperty(exports, "RedisAdapter", { enumerable: true, get: function () { return redis_1.RedisAdapter; } });
|
|
150
|
+
var fastify_2 = require("./fastify");
|
|
151
|
+
Object.defineProperty(exports, "createFastifyServer", { enumerable: true, get: function () { return fastify_2.createFastifyServer; } });
|
|
152
|
+
var websocket_2 = require("./websocket");
|
|
153
|
+
Object.defineProperty(exports, "MonitorWebSocketServer", { enumerable: true, get: function () { return websocket_2.MonitorWebSocketServer; } });
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket Server
|
|
3
|
+
*
|
|
4
|
+
* Provides real-time event streaming to connected UI clients.
|
|
5
|
+
* Uses the 'ws' library for WebSocket handling.
|
|
6
|
+
*/
|
|
7
|
+
import type { EventBroker } from './broker';
|
|
8
|
+
import type { PersistenceStore } from '../../types/monitor';
|
|
9
|
+
export interface WebSocketServerOptions {
|
|
10
|
+
port: number;
|
|
11
|
+
host?: string;
|
|
12
|
+
broker: EventBroker;
|
|
13
|
+
persistence?: PersistenceStore;
|
|
14
|
+
}
|
|
15
|
+
export declare class MonitorWebSocketServer {
|
|
16
|
+
private wss;
|
|
17
|
+
private clients;
|
|
18
|
+
private broker;
|
|
19
|
+
private persistence?;
|
|
20
|
+
private port;
|
|
21
|
+
private host;
|
|
22
|
+
private unsubscribeBroker?;
|
|
23
|
+
constructor(options: WebSocketServerOptions);
|
|
24
|
+
/**
|
|
25
|
+
* Start the WebSocket server
|
|
26
|
+
*/
|
|
27
|
+
start(): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Stop the WebSocket server
|
|
30
|
+
*/
|
|
31
|
+
stop(): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Handle new WebSocket connection
|
|
34
|
+
*/
|
|
35
|
+
private handleConnection;
|
|
36
|
+
/**
|
|
37
|
+
* Handle message from client
|
|
38
|
+
*/
|
|
39
|
+
private handleClientMessage;
|
|
40
|
+
/**
|
|
41
|
+
* Send historical events to a client
|
|
42
|
+
*/
|
|
43
|
+
private sendHistoricalEvents;
|
|
44
|
+
/**
|
|
45
|
+
* Send all recent events across all sessions to a client
|
|
46
|
+
*/
|
|
47
|
+
private sendAllRecentEvents;
|
|
48
|
+
/**
|
|
49
|
+
* Send event detail to a client
|
|
50
|
+
*/
|
|
51
|
+
private sendEventDetail;
|
|
52
|
+
/**
|
|
53
|
+
* Handle events from the broker
|
|
54
|
+
*/
|
|
55
|
+
private handleBrokerEvent;
|
|
56
|
+
/**
|
|
57
|
+
* Broadcast a message to all connected clients
|
|
58
|
+
*/
|
|
59
|
+
private broadcastToAll;
|
|
60
|
+
/**
|
|
61
|
+
* Broadcast an event to subscribed clients
|
|
62
|
+
*/
|
|
63
|
+
private broadcastEvent;
|
|
64
|
+
/**
|
|
65
|
+
* Broadcast a session update to all clients
|
|
66
|
+
*/
|
|
67
|
+
private broadcastSessionUpdate;
|
|
68
|
+
/**
|
|
69
|
+
* Broadcast updated session list to all clients (for bulk operations)
|
|
70
|
+
*/
|
|
71
|
+
private broadcastSessionsUpdate;
|
|
72
|
+
/**
|
|
73
|
+
* Check if a client is subscribed to events for a session
|
|
74
|
+
*/
|
|
75
|
+
private isClientSubscribed;
|
|
76
|
+
/**
|
|
77
|
+
* Get the number of connected clients
|
|
78
|
+
*/
|
|
79
|
+
getClientCount(): number;
|
|
80
|
+
}
|