@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.
Files changed (105) hide show
  1. package/README.md +169 -1
  2. package/dist/commands/claude.d.ts +21 -0
  3. package/dist/commands/claude.js +213 -0
  4. package/dist/commands/context.d.ts +1 -0
  5. package/dist/commands/create.d.ts +3 -0
  6. package/dist/commands/index.d.ts +4 -0
  7. package/dist/commands/init.d.ts +7 -0
  8. package/dist/commands/init.js +67 -6
  9. package/dist/commands/install.d.ts +28 -0
  10. package/dist/commands/install.js +116 -11
  11. package/dist/commands/monitor.d.ts +55 -0
  12. package/dist/commands/monitor.js +1007 -0
  13. package/dist/commands/remove.d.ts +3 -0
  14. package/dist/commands/run.d.ts +6 -0
  15. package/dist/index.d.ts +2 -0
  16. package/dist/index.js +113 -1
  17. package/dist/monitor/daemon/circuit-breaker.d.ts +121 -0
  18. package/dist/monitor/daemon/circuit-breaker.js +552 -0
  19. package/dist/monitor/daemon/cli.d.ts +8 -0
  20. package/dist/monitor/daemon/cli.js +82 -0
  21. package/dist/monitor/daemon/index.d.ts +137 -0
  22. package/dist/monitor/daemon/index.js +695 -0
  23. package/dist/monitor/daemon/notifier.d.ts +25 -0
  24. package/dist/monitor/daemon/notifier.js +98 -0
  25. package/dist/monitor/daemon/processor.d.ts +89 -0
  26. package/dist/monitor/daemon/processor.js +455 -0
  27. package/dist/monitor/daemon/state.d.ts +80 -0
  28. package/dist/monitor/daemon/state.js +162 -0
  29. package/dist/monitor/daemon/watcher.d.ts +47 -0
  30. package/dist/monitor/daemon/watcher.js +171 -0
  31. package/dist/monitor/daemon/wrapper-manager.d.ts +106 -0
  32. package/dist/monitor/daemon/wrapper-manager.js +374 -0
  33. package/dist/monitor/hooks/emit-event.js +652 -0
  34. package/dist/monitor/persistence/file-store.d.ts +88 -0
  35. package/dist/monitor/persistence/file-store.js +335 -0
  36. package/dist/monitor/persistence/index.d.ts +7 -0
  37. package/dist/monitor/persistence/index.js +10 -0
  38. package/dist/monitor/server/adapters/redis.d.ts +38 -0
  39. package/dist/monitor/server/adapters/redis.js +213 -0
  40. package/dist/monitor/server/adapters/unix-socket.d.ts +33 -0
  41. package/dist/monitor/server/adapters/unix-socket.js +182 -0
  42. package/dist/monitor/server/broker.d.ts +135 -0
  43. package/dist/monitor/server/broker.js +475 -0
  44. package/dist/monitor/server/cli.d.ts +8 -0
  45. package/dist/monitor/server/cli.js +98 -0
  46. package/dist/monitor/server/fastify.d.ts +16 -0
  47. package/dist/monitor/server/fastify.js +184 -0
  48. package/dist/monitor/server/index.d.ts +36 -0
  49. package/dist/monitor/server/index.js +153 -0
  50. package/dist/monitor/server/websocket.d.ts +80 -0
  51. package/dist/monitor/server/websocket.js +453 -0
  52. package/dist/monitor/ui/assets/index-4IssW9On.js +59 -0
  53. package/dist/monitor/ui/assets/index-vo9hLe5R.css +32 -0
  54. package/dist/monitor/ui/favicon.png +0 -0
  55. package/dist/monitor/ui/index.html +14 -0
  56. package/dist/monitor/ui/logo.png +0 -0
  57. package/dist/monitor/ui/logo.svg +1 -0
  58. package/dist/runtime/driver.d.ts +16 -0
  59. package/dist/runtime/tools.d.ts +10 -0
  60. package/dist/templates/README.md +33 -7
  61. package/dist/templates/agents/aegis.md +4 -0
  62. package/dist/templates/agents/archon.md +13 -22
  63. package/dist/templates/agents/atlas.md +4 -0
  64. package/dist/templates/agents/canvas.md +4 -0
  65. package/dist/templates/agents/chronicle.md +4 -0
  66. package/dist/templates/agents/chronos.md +4 -0
  67. package/dist/templates/agents/cipher.md +4 -0
  68. package/dist/templates/agents/crucible.md +4 -0
  69. package/dist/templates/agents/echo.md +4 -0
  70. package/dist/templates/agents/forge.md +4 -0
  71. package/dist/templates/agents/ledger.md +4 -0
  72. package/dist/templates/agents/meridian.md +4 -0
  73. package/dist/templates/agents/nexus.md +4 -0
  74. package/dist/templates/agents/pythia.md +217 -0
  75. package/dist/templates/agents/scribe.md +4 -0
  76. package/dist/templates/agents/sentinel.md +4 -0
  77. package/dist/templates/agents/{oracle.md → thoth.md} +11 -7
  78. package/dist/templates/agents/unity.md +4 -0
  79. package/dist/templates/agents/vox.md +4 -0
  80. package/dist/templates/agents/weaver.md +4 -0
  81. package/dist/templates/framework-agents/documentation-expert.md +3 -3
  82. package/dist/templates/framework-agents/tools-expert.md +8 -8
  83. package/dist/templates/skills/consult.md +138 -0
  84. package/dist/templates/skills/orchestrate.md +173 -0
  85. package/dist/templates/skills/pythia.md +37 -0
  86. package/dist/templates/standards/agent-roles.md +68 -21
  87. package/dist/templates/standards/coding-standards.md +9 -26
  88. package/dist/templates/templates/context.md +17 -2
  89. package/dist/templates/templates/contextuate.md +21 -28
  90. package/dist/templates/templates/standards/go.md +167 -0
  91. package/dist/templates/templates/standards/java.md +167 -0
  92. package/dist/templates/templates/standards/javascript.md +292 -0
  93. package/dist/templates/templates/standards/php.md +181 -0
  94. package/dist/templates/templates/standards/python.md +175 -0
  95. package/dist/templates/tools/agent-creator.md +252 -0
  96. package/dist/templates/tools/agent-creator.tool.md +2 -2
  97. package/dist/templates/tools/quickref.md +216 -0
  98. package/dist/templates/tools/spawn.md +31 -0
  99. package/dist/templates/tools/standards-detector.md +301 -0
  100. package/dist/templates/version.json +1 -1
  101. package/dist/types/monitor.d.ts +660 -0
  102. package/dist/types/monitor.js +75 -0
  103. package/dist/utils/git.d.ts +9 -0
  104. package/dist/utils/tokens.d.ts +10 -0
  105. 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
+ }