@nxuss/lemma 0.2.1 → 0.3.1

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 (129) hide show
  1. package/README.md +50 -5
  2. package/dist/cjs/api/dashboardRoutes.d.ts +28 -0
  3. package/dist/cjs/api/dashboardRoutes.d.ts.map +1 -0
  4. package/dist/cjs/api/dashboardRoutes.js +239 -0
  5. package/dist/cjs/api/dashboardRoutes.js.map +1 -0
  6. package/dist/cjs/api/server.d.ts +51 -0
  7. package/dist/cjs/api/server.d.ts.map +1 -0
  8. package/dist/cjs/api/server.js +166 -0
  9. package/dist/cjs/api/server.js.map +1 -0
  10. package/dist/cjs/core/AgentRegistry.d.ts +4 -0
  11. package/dist/cjs/core/AgentRegistry.d.ts.map +1 -1
  12. package/dist/cjs/core/AgentRegistry.js +6 -0
  13. package/dist/cjs/core/AgentRegistry.js.map +1 -1
  14. package/dist/cjs/core/DashboardWebSocketServer.d.ts +70 -0
  15. package/dist/cjs/core/DashboardWebSocketServer.d.ts.map +1 -0
  16. package/dist/cjs/core/DashboardWebSocketServer.js +211 -0
  17. package/dist/cjs/core/DashboardWebSocketServer.js.map +1 -0
  18. package/dist/cjs/core/GhostAlchemist.d.ts +18 -0
  19. package/dist/cjs/core/GhostAlchemist.d.ts.map +1 -0
  20. package/dist/cjs/core/GhostAlchemist.js +55 -0
  21. package/dist/cjs/core/GhostAlchemist.js.map +1 -0
  22. package/dist/cjs/core/GhostListener.d.ts +20 -0
  23. package/dist/cjs/core/GhostListener.d.ts.map +1 -0
  24. package/dist/cjs/core/GhostListener.js +97 -0
  25. package/dist/cjs/core/GhostListener.js.map +1 -0
  26. package/dist/cjs/core/OrchestrationEngine.d.ts +22 -0
  27. package/dist/cjs/core/OrchestrationEngine.d.ts.map +1 -1
  28. package/dist/cjs/core/OrchestrationEngine.js +98 -0
  29. package/dist/cjs/core/OrchestrationEngine.js.map +1 -1
  30. package/dist/cjs/core/SubconsciousEngine.d.ts +24 -0
  31. package/dist/cjs/core/SubconsciousEngine.d.ts.map +1 -1
  32. package/dist/cjs/core/SubconsciousEngine.js +110 -0
  33. package/dist/cjs/core/SubconsciousEngine.js.map +1 -1
  34. package/dist/cjs/core/WebSocketServer.d.ts.map +1 -1
  35. package/dist/cjs/core/WebSocketServer.js +4 -0
  36. package/dist/cjs/core/WebSocketServer.js.map +1 -1
  37. package/dist/cjs/db/database.d.ts +60 -0
  38. package/dist/cjs/db/database.d.ts.map +1 -0
  39. package/dist/cjs/db/database.js +297 -0
  40. package/dist/cjs/db/database.js.map +1 -0
  41. package/dist/cjs/db/migrations/001-dashboard-schema.d.ts +18 -0
  42. package/dist/cjs/db/migrations/001-dashboard-schema.d.ts.map +1 -0
  43. package/dist/cjs/db/migrations/001-dashboard-schema.js +175 -0
  44. package/dist/cjs/db/migrations/001-dashboard-schema.js.map +1 -0
  45. package/dist/cjs/embed/index.d.ts +1 -1
  46. package/dist/cjs/embed/index.d.ts.map +1 -1
  47. package/dist/cjs/embed/index.js +17 -9
  48. package/dist/cjs/embed/index.js.map +1 -1
  49. package/dist/cjs/proxy/Gatekeeper.d.ts +43 -0
  50. package/dist/cjs/proxy/Gatekeeper.d.ts.map +1 -0
  51. package/dist/cjs/proxy/Gatekeeper.js +202 -0
  52. package/dist/cjs/proxy/Gatekeeper.js.map +1 -0
  53. package/dist/cjs/proxy/KeyManager.d.ts +56 -0
  54. package/dist/cjs/proxy/KeyManager.d.ts.map +1 -0
  55. package/dist/cjs/proxy/KeyManager.js +220 -0
  56. package/dist/cjs/proxy/KeyManager.js.map +1 -0
  57. package/dist/cjs/proxy/ProjectStore.d.ts +84 -0
  58. package/dist/cjs/proxy/ProjectStore.d.ts.map +1 -0
  59. package/dist/cjs/proxy/ProjectStore.js +214 -0
  60. package/dist/cjs/proxy/ProjectStore.js.map +1 -0
  61. package/dist/cjs/proxy/SseRelay.d.ts +41 -0
  62. package/dist/cjs/proxy/SseRelay.d.ts.map +1 -0
  63. package/dist/cjs/proxy/SseRelay.js +176 -0
  64. package/dist/cjs/proxy/SseRelay.js.map +1 -0
  65. package/dist/esm/api/dashboardRoutes.d.ts +28 -0
  66. package/dist/esm/api/dashboardRoutes.d.ts.map +1 -0
  67. package/dist/esm/api/dashboardRoutes.js +236 -0
  68. package/dist/esm/api/dashboardRoutes.js.map +1 -0
  69. package/dist/esm/api/server.d.ts +51 -0
  70. package/dist/esm/api/server.d.ts.map +1 -0
  71. package/dist/esm/api/server.js +159 -0
  72. package/dist/esm/api/server.js.map +1 -0
  73. package/dist/esm/core/AgentRegistry.d.ts +4 -0
  74. package/dist/esm/core/AgentRegistry.d.ts.map +1 -1
  75. package/dist/esm/core/AgentRegistry.js +6 -0
  76. package/dist/esm/core/AgentRegistry.js.map +1 -1
  77. package/dist/esm/core/DashboardWebSocketServer.d.ts +70 -0
  78. package/dist/esm/core/DashboardWebSocketServer.d.ts.map +1 -0
  79. package/dist/esm/core/DashboardWebSocketServer.js +207 -0
  80. package/dist/esm/core/DashboardWebSocketServer.js.map +1 -0
  81. package/dist/esm/core/GhostAlchemist.d.ts +18 -0
  82. package/dist/esm/core/GhostAlchemist.d.ts.map +1 -0
  83. package/dist/esm/core/GhostAlchemist.js +48 -0
  84. package/dist/esm/core/GhostAlchemist.js.map +1 -0
  85. package/dist/esm/core/GhostListener.d.ts +20 -0
  86. package/dist/esm/core/GhostListener.d.ts.map +1 -0
  87. package/dist/esm/core/GhostListener.js +93 -0
  88. package/dist/esm/core/GhostListener.js.map +1 -0
  89. package/dist/esm/core/OrchestrationEngine.d.ts +22 -0
  90. package/dist/esm/core/OrchestrationEngine.d.ts.map +1 -1
  91. package/dist/esm/core/OrchestrationEngine.js +98 -0
  92. package/dist/esm/core/OrchestrationEngine.js.map +1 -1
  93. package/dist/esm/core/SubconsciousEngine.d.ts +24 -0
  94. package/dist/esm/core/SubconsciousEngine.d.ts.map +1 -1
  95. package/dist/esm/core/SubconsciousEngine.js +110 -0
  96. package/dist/esm/core/SubconsciousEngine.js.map +1 -1
  97. package/dist/esm/core/WebSocketServer.d.ts.map +1 -1
  98. package/dist/esm/core/WebSocketServer.js +4 -0
  99. package/dist/esm/core/WebSocketServer.js.map +1 -1
  100. package/dist/esm/db/database.d.ts +60 -0
  101. package/dist/esm/db/database.d.ts.map +1 -0
  102. package/dist/esm/db/database.js +293 -0
  103. package/dist/esm/db/database.js.map +1 -0
  104. package/dist/esm/db/migrations/001-dashboard-schema.d.ts +18 -0
  105. package/dist/esm/db/migrations/001-dashboard-schema.d.ts.map +1 -0
  106. package/dist/esm/db/migrations/001-dashboard-schema.js +172 -0
  107. package/dist/esm/db/migrations/001-dashboard-schema.js.map +1 -0
  108. package/dist/esm/embed/index.d.ts +1 -1
  109. package/dist/esm/embed/index.d.ts.map +1 -1
  110. package/dist/esm/embed/index.js +17 -9
  111. package/dist/esm/embed/index.js.map +1 -1
  112. package/dist/esm/proxy/Gatekeeper.d.ts +43 -0
  113. package/dist/esm/proxy/Gatekeeper.d.ts.map +1 -0
  114. package/dist/esm/proxy/Gatekeeper.js +165 -0
  115. package/dist/esm/proxy/Gatekeeper.js.map +1 -0
  116. package/dist/esm/proxy/KeyManager.d.ts +56 -0
  117. package/dist/esm/proxy/KeyManager.d.ts.map +1 -0
  118. package/dist/esm/proxy/KeyManager.js +213 -0
  119. package/dist/esm/proxy/KeyManager.js.map +1 -0
  120. package/dist/esm/proxy/ProjectStore.d.ts +84 -0
  121. package/dist/esm/proxy/ProjectStore.d.ts.map +1 -0
  122. package/dist/esm/proxy/ProjectStore.js +207 -0
  123. package/dist/esm/proxy/ProjectStore.js.map +1 -0
  124. package/dist/esm/proxy/SseRelay.d.ts +41 -0
  125. package/dist/esm/proxy/SseRelay.d.ts.map +1 -0
  126. package/dist/esm/proxy/SseRelay.js +169 -0
  127. package/dist/esm/proxy/SseRelay.js.map +1 -0
  128. package/lemma-proxy.cjs +477 -0
  129. package/package.json +20 -4
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Dashboard WebSocket Server
3
+ * Real-time event streaming for dashboard using Socket.io
4
+ * Emits metrics, agent updates, and cache events
5
+ */
6
+ import { Server as SocketIOServer } from 'socket.io';
7
+ import http from 'http';
8
+ import { OrchestrationEngine } from './OrchestrationEngine';
9
+ export declare class DashboardWebSocketServer {
10
+ private io;
11
+ private orchestrationEngine;
12
+ private server;
13
+ private broadcastInterval;
14
+ private port;
15
+ private eventLog;
16
+ constructor(httpServer: http.Server, port?: number);
17
+ /**
18
+ * Setup Socket.io event handlers
19
+ */
20
+ private setupHandlers;
21
+ /**
22
+ * Set orchestration engine reference
23
+ */
24
+ setOrchestrationEngine(engine: OrchestrationEngine): void;
25
+ /**
26
+ * Start broadcasting metrics
27
+ */
28
+ startBroadcasting(intervalMs?: number): void;
29
+ /**
30
+ * Stop broadcasting
31
+ */
32
+ stopBroadcasting(): void;
33
+ /**
34
+ * Emit agent joined event
35
+ */
36
+ emitAgentJoined(agentId: string, agentName: string, capabilities: string[]): void;
37
+ /**
38
+ * Emit agent left event
39
+ */
40
+ emitAgentLeft(agentId: string): void;
41
+ /**
42
+ * Emit agent error event
43
+ */
44
+ emitAgentError(agentId: string, errorMessage: string): void;
45
+ /**
46
+ * Emit cache hit event
47
+ */
48
+ emitCacheHit(queryHash: string, latency: number, tokensSaved: number, costSaved: number): void;
49
+ /**
50
+ * Emit cache miss event
51
+ */
52
+ emitCacheMiss(queryHash: string, latency: number): void;
53
+ /**
54
+ * Get event log (keep last 1000 events)
55
+ */
56
+ getEventLog(): any[];
57
+ /**
58
+ * Log event internally
59
+ */
60
+ private logEvent;
61
+ /**
62
+ * Clear event log
63
+ */
64
+ clearEventLog(): void;
65
+ /**
66
+ * Get Socket.io instance
67
+ */
68
+ getIO(): SocketIOServer;
69
+ }
70
+ //# sourceMappingURL=DashboardWebSocketServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardWebSocketServer.d.ts","sourceRoot":"","sources":["../../../src/core/DashboardWebSocketServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,cAAc,EAAU,MAAM,WAAW,CAAC;AAC7D,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAK5D,qBAAa,wBAAwB;IACnC,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,mBAAmB,CAAoC;IAC/D,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,QAAQ,CAAa;gBAEjB,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,GAAE,MAAa;IAiBxD;;OAEG;IACH,OAAO,CAAC,aAAa;IA4CrB;;OAEG;IACI,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAIhE;;OAEG;IACI,iBAAiB,CAAC,UAAU,GAAE,MAAa,GAAG,IAAI;IAwBzD;;OAEG;IACI,gBAAgB,IAAI,IAAI;IAQ/B;;OAEG;IACI,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI;IAcxF;;OAEG;IACI,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAY3C;;OAEG;IACI,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAalE;;OAEG;IACI,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAerG;;OAEG;IACI,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAa9D;;OAEG;IACI,WAAW,IAAI,GAAG,EAAE;IAI3B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAOhB;;OAEG;IACI,aAAa,IAAI,IAAI;IAI5B;;OAEG;IACI,KAAK,IAAI,cAAc;CAG/B"}
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ /**
3
+ * Dashboard WebSocket Server
4
+ * Real-time event streaming for dashboard using Socket.io
5
+ * Emits metrics, agent updates, and cache events
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.DashboardWebSocketServer = void 0;
9
+ const socket_io_1 = require("socket.io");
10
+ const logger_1 = require("../utils/logger");
11
+ const logger = (0, logger_1.createLogger)('DashboardWebSocketServer');
12
+ class DashboardWebSocketServer {
13
+ constructor(httpServer, port = 3002) {
14
+ this.orchestrationEngine = null;
15
+ this.broadcastInterval = null;
16
+ this.eventLog = [];
17
+ this.server = httpServer;
18
+ this.port = port;
19
+ // Initialize Socket.io
20
+ this.io = new socket_io_1.Server(httpServer, {
21
+ cors: {
22
+ origin: ['http://localhost:3000', 'http://localhost:5173', 'http://127.0.0.1:3000'],
23
+ methods: ['GET', 'POST'],
24
+ credentials: true,
25
+ },
26
+ transports: ['websocket', 'polling'],
27
+ });
28
+ this.setupHandlers();
29
+ }
30
+ /**
31
+ * Setup Socket.io event handlers
32
+ */
33
+ setupHandlers() {
34
+ this.io.on('connection', (socket) => {
35
+ logger.info('Dashboard client connected', { socketId: socket.id });
36
+ // Respond to client with current metrics
37
+ socket.emit('metrics:init', {
38
+ timestamp: new Date().toISOString(),
39
+ });
40
+ // Handle subscription requests
41
+ socket.on('subscribe:metrics', () => {
42
+ logger.debug('Client subscribed to metrics', { socketId: socket.id });
43
+ socket.join('metrics');
44
+ });
45
+ socket.on('unsubscribe:metrics', () => {
46
+ logger.debug('Client unsubscribed from metrics', { socketId: socket.id });
47
+ socket.leave('metrics');
48
+ });
49
+ // Handle debugger pause/resume
50
+ socket.on('debugger:pause', () => {
51
+ logger.info('Dashboard requested pause', { socketId: socket.id });
52
+ this.orchestrationEngine?.pauseProcessing?.();
53
+ this.io.emit('debugger:paused', {
54
+ timestamp: new Date().toISOString(),
55
+ });
56
+ });
57
+ socket.on('debugger:resume', () => {
58
+ logger.info('Dashboard requested resume', { socketId: socket.id });
59
+ this.orchestrationEngine?.resumeProcessing?.();
60
+ this.io.emit('debugger:resumed', {
61
+ timestamp: new Date().toISOString(),
62
+ });
63
+ });
64
+ // Disconnect handler
65
+ socket.on('disconnect', () => {
66
+ logger.info('Dashboard client disconnected', { socketId: socket.id });
67
+ });
68
+ });
69
+ }
70
+ /**
71
+ * Set orchestration engine reference
72
+ */
73
+ setOrchestrationEngine(engine) {
74
+ this.orchestrationEngine = engine;
75
+ }
76
+ /**
77
+ * Start broadcasting metrics
78
+ */
79
+ startBroadcasting(intervalMs = 2000) {
80
+ logger.info('Starting dashboard WebSocket broadcasting', { intervalMs });
81
+ this.broadcastInterval = setInterval(() => {
82
+ if (!this.orchestrationEngine)
83
+ return;
84
+ const metrics = this.orchestrationEngine.getMetrics();
85
+ // Emit metrics to all connected clients
86
+ this.io.to('metrics').emit('metrics:update', {
87
+ timestamp: new Date().toISOString(),
88
+ totalRequests: metrics.totalRequests,
89
+ cacheHits: metrics.cacheHits,
90
+ cacheMisses: metrics.cacheMisses,
91
+ hitRate: metrics.totalRequests > 0
92
+ ? (metrics.cacheHits / metrics.totalRequests).toFixed(4)
93
+ : 0,
94
+ averageLatency: metrics.averageLatency,
95
+ tokensSaved: metrics.tokensSaved,
96
+ costSaved: metrics.costSaved,
97
+ });
98
+ }, intervalMs);
99
+ }
100
+ /**
101
+ * Stop broadcasting
102
+ */
103
+ stopBroadcasting() {
104
+ if (this.broadcastInterval) {
105
+ clearInterval(this.broadcastInterval);
106
+ this.broadcastInterval = null;
107
+ logger.info('Dashboard WebSocket broadcasting stopped');
108
+ }
109
+ }
110
+ /**
111
+ * Emit agent joined event
112
+ */
113
+ emitAgentJoined(agentId, agentName, capabilities) {
114
+ const event = {
115
+ id: `evt-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,
116
+ timestamp: new Date().toISOString(),
117
+ type: 'agent:joined',
118
+ agentId,
119
+ agentName,
120
+ capabilities,
121
+ };
122
+ this.logEvent(event);
123
+ this.io.emit('agent:joined', event);
124
+ }
125
+ /**
126
+ * Emit agent left event
127
+ */
128
+ emitAgentLeft(agentId) {
129
+ const event = {
130
+ id: `evt-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,
131
+ timestamp: new Date().toISOString(),
132
+ type: 'agent:left',
133
+ agentId,
134
+ };
135
+ this.logEvent(event);
136
+ this.io.emit('agent:left', event);
137
+ }
138
+ /**
139
+ * Emit agent error event
140
+ */
141
+ emitAgentError(agentId, errorMessage) {
142
+ const event = {
143
+ id: `evt-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,
144
+ timestamp: new Date().toISOString(),
145
+ type: 'agent:error',
146
+ agentId,
147
+ errorMessage,
148
+ };
149
+ this.logEvent(event);
150
+ this.io.emit('agent:error', event);
151
+ }
152
+ /**
153
+ * Emit cache hit event
154
+ */
155
+ emitCacheHit(queryHash, latency, tokensSaved, costSaved) {
156
+ const event = {
157
+ id: `evt-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,
158
+ timestamp: new Date().toISOString(),
159
+ type: 'cache:hit',
160
+ queryHash,
161
+ latency,
162
+ tokensSaved,
163
+ costSaved,
164
+ };
165
+ this.logEvent(event);
166
+ this.io.emit('cache:hit', event);
167
+ }
168
+ /**
169
+ * Emit cache miss event
170
+ */
171
+ emitCacheMiss(queryHash, latency) {
172
+ const event = {
173
+ id: `evt-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,
174
+ timestamp: new Date().toISOString(),
175
+ type: 'cache:miss',
176
+ queryHash,
177
+ latency,
178
+ };
179
+ this.logEvent(event);
180
+ this.io.emit('cache:miss', event);
181
+ }
182
+ /**
183
+ * Get event log (keep last 1000 events)
184
+ */
185
+ getEventLog() {
186
+ return [...this.eventLog];
187
+ }
188
+ /**
189
+ * Log event internally
190
+ */
191
+ logEvent(event) {
192
+ this.eventLog.push(event);
193
+ if (this.eventLog.length > 1000) {
194
+ this.eventLog.shift();
195
+ }
196
+ }
197
+ /**
198
+ * Clear event log
199
+ */
200
+ clearEventLog() {
201
+ this.eventLog = [];
202
+ }
203
+ /**
204
+ * Get Socket.io instance
205
+ */
206
+ getIO() {
207
+ return this.io;
208
+ }
209
+ }
210
+ exports.DashboardWebSocketServer = DashboardWebSocketServer;
211
+ //# sourceMappingURL=DashboardWebSocketServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardWebSocketServer.js","sourceRoot":"","sources":["../../../src/core/DashboardWebSocketServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface Diagnosis {
2
+ fix: string;
3
+ confidence: number;
4
+ }
5
+ export declare class GhostAlchemist {
6
+ private model;
7
+ private host;
8
+ constructor();
9
+ /**
10
+ * Synthesize context for token savings
11
+ */
12
+ synthesize(context: string, goal: string): Promise<string>;
13
+ /**
14
+ * Diagnose a failure and suggest a fix
15
+ */
16
+ diagnoseFailure(error: string, context: string): Promise<Diagnosis>;
17
+ }
18
+ //# sourceMappingURL=GhostAlchemist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GhostAlchemist.d.ts","sourceRoot":"","sources":["../../../src/core/GhostAlchemist.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,IAAI,CAAS;;IAOrB;;OAEG;IACU,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBvE;;OAEG;IACU,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;CAgBjF"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GhostAlchemist = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const logger_1 = require("../utils/logger");
9
+ class GhostAlchemist {
10
+ constructor() {
11
+ this.model = process.env.OLLAMA_GEN_MODEL || 'llama3';
12
+ this.host = process.env.OLLAMA_HOST || 'http://localhost:11434';
13
+ }
14
+ /**
15
+ * Synthesize context for token savings
16
+ */
17
+ async synthesize(context, goal) {
18
+ try {
19
+ const prompt = `TASK: Synthesize this technical context into a DENSE SEMANTIC SUMMARY for another LLM.\nGOAL: ${goal}\nCONTEXT:\n${context}`;
20
+ const resp = await axios_1.default.post(`${this.host}/api/generate`, {
21
+ model: this.model,
22
+ prompt,
23
+ stream: false,
24
+ options: { temperature: 0.1 }
25
+ });
26
+ return resp.data.response.trim();
27
+ }
28
+ catch (e) {
29
+ logger_1.logger.error('Ghost synthesis failed', e);
30
+ return context;
31
+ }
32
+ }
33
+ /**
34
+ * Diagnose a failure and suggest a fix
35
+ */
36
+ async diagnoseFailure(error, context) {
37
+ try {
38
+ const prompt = `DIAGNOSTIC: Analyze error and context. Return JSON { "fix": "...", "confidence": 0.0-1.0 }\nERROR: ${error}\nCONTEXT: ${context.slice(-2000)}`;
39
+ const resp = await axios_1.default.post(`${this.host}/api/generate`, {
40
+ model: this.model,
41
+ prompt,
42
+ stream: false,
43
+ format: 'json',
44
+ options: { temperature: 0 }
45
+ });
46
+ return JSON.parse(resp.data.response);
47
+ }
48
+ catch (e) {
49
+ logger_1.logger.error('Ghost diagnostic failed', e);
50
+ return { fix: 'Unable to diagnose', confidence: 0 };
51
+ }
52
+ }
53
+ }
54
+ exports.GhostAlchemist = GhostAlchemist;
55
+ //# sourceMappingURL=GhostAlchemist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GhostAlchemist.js","sourceRoot":"","sources":["../../../src/core/GhostAlchemist.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,4CAAyC;AAOzC,MAAa,cAAc;IAIzB;QACE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,QAAQ,CAAC;QACtD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,wBAAwB,CAAC;IAClE,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,IAAY;QACnD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,iGAAiG,IAAI,eAAe,OAAO,EAAE,CAAC;YAC7I,MAAM,IAAI,GAAG,MAAM,eAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,eAAe,EAAE;gBACzD,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM;gBACN,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE;aAC9B,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,eAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;YAC1C,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,eAAe,CAAC,KAAa,EAAE,OAAe;QACzD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,sGAAsG,KAAK,cAAc,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/J,MAAM,IAAI,GAAG,MAAM,eAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,eAAe,EAAE;gBACzD,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM;gBACN,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE;aAC5B,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,eAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;YAC3C,OAAO,EAAE,GAAG,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QACtD,CAAC;IACH,CAAC;CACF;AA/CD,wCA+CC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * GhostListener
3
+ * Watches terminal output for errors and provides instant diagnostics.
4
+ */
5
+ export declare class GhostListener {
6
+ private alchemist;
7
+ private currentProcess;
8
+ private outputBuffer;
9
+ private readonly MAX_BUFFER_LINES;
10
+ constructor();
11
+ /**
12
+ * Run a command and watch its output
13
+ */
14
+ run(command: string, args: string[]): void;
15
+ private addToBuffer;
16
+ private analyzeOutput;
17
+ private handleDetectedError;
18
+ private copyToClipboard;
19
+ }
20
+ //# sourceMappingURL=GhostListener.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GhostListener.d.ts","sourceRoot":"","sources":["../../../src/core/GhostListener.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAO;;IAMxC;;OAEG;IACI,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IA+BjD,OAAO,CAAC,WAAW;YAQL,aAAa;YAUb,mBAAmB;IA2BjC,OAAO,CAAC,eAAe;CAUxB"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GhostListener = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const GhostAlchemist_1 = require("./GhostAlchemist");
6
+ const logger_1 = require("../utils/logger");
7
+ /**
8
+ * GhostListener
9
+ * Watches terminal output for errors and provides instant diagnostics.
10
+ */
11
+ class GhostListener {
12
+ constructor() {
13
+ this.currentProcess = null;
14
+ this.outputBuffer = [];
15
+ this.MAX_BUFFER_LINES = 100;
16
+ this.alchemist = new GhostAlchemist_1.GhostAlchemist();
17
+ }
18
+ /**
19
+ * Run a command and watch its output
20
+ */
21
+ run(command, args) {
22
+ console.log(`šŸ•µļøā€ā™‚ļø [Ghost] Watching: ${command} ${args.join(' ')}\n`);
23
+ this.currentProcess = (0, child_process_1.spawn)(command, args, {
24
+ shell: true,
25
+ stdio: ['inherit', 'pipe', 'pipe'],
26
+ env: { ...process.env, FORCE_COLOR: 'true' } // Keep colors for better detection
27
+ });
28
+ // Handle stdout
29
+ this.currentProcess.stdout?.on('data', (data) => {
30
+ const text = data.toString();
31
+ process.stdout.write(data); // Pass through to user terminal
32
+ this.addToBuffer(text);
33
+ this.analyzeOutput(text);
34
+ });
35
+ // Handle stderr
36
+ this.currentProcess.stderr?.on('data', (data) => {
37
+ const text = data.toString();
38
+ process.stderr.write(data); // Pass through to user terminal
39
+ this.addToBuffer(text);
40
+ this.analyzeOutput(text, true);
41
+ });
42
+ this.currentProcess.on('exit', (code) => {
43
+ console.log(`\nšŸ›‘ [Ghost] Process exited with code ${code}`);
44
+ process.exit(code || 0);
45
+ });
46
+ }
47
+ addToBuffer(text) {
48
+ const lines = text.split('\n');
49
+ this.outputBuffer.push(...lines);
50
+ if (this.outputBuffer.length > this.MAX_BUFFER_LINES) {
51
+ this.outputBuffer = this.outputBuffer.slice(-this.MAX_BUFFER_LINES);
52
+ }
53
+ }
54
+ async analyzeOutput(text, isErrorStream = false) {
55
+ // Look for error patterns
56
+ const errorKeywords = ['Error:', 'Exception:', 'failed', '500 Internal', 'stack trace', 'FATAL'];
57
+ const hasError = errorKeywords.some(kw => text.includes(kw)) || isErrorStream;
58
+ if (hasError && text.length > 10) {
59
+ this.handleDetectedError(text);
60
+ }
61
+ }
62
+ async handleDetectedError(errorSnippet) {
63
+ console.log('\nšŸ‘» [Ghost] Bug detected! Analyzing...');
64
+ const context = this.outputBuffer.join('\n');
65
+ const diagnosis = await this.alchemist.diagnoseFailure(errorSnippet, context);
66
+ if (diagnosis.confidence > 0.5) {
67
+ const promptToPaste = `GHOST DIAGNOSTIC REPORT šŸ‘»
68
+ ---
69
+ ERROR DETECTED IN TERMINAL:
70
+ ${errorSnippet}
71
+
72
+ CONTEXT:
73
+ ${context.slice(-500)}
74
+
75
+ SUGGESTED FIX:
76
+ ${diagnosis.fix}
77
+ ---
78
+ Please apply this fix to the project.`;
79
+ this.copyToClipboard(promptToPaste);
80
+ console.log('✨ [Ghost] Solution generated and copied to CLIPBOARD.');
81
+ console.log(`šŸ’” Suggestion: ${diagnosis.fix.substring(0, 100)}...\n`);
82
+ }
83
+ }
84
+ copyToClipboard(text) {
85
+ try {
86
+ // Use Mac native pbcopy
87
+ const child = (0, child_process_1.spawn)('pbcopy');
88
+ child.stdin.write(text);
89
+ child.stdin.end();
90
+ }
91
+ catch (e) {
92
+ logger_1.logger.error('Failed to copy to clipboard', e);
93
+ }
94
+ }
95
+ }
96
+ exports.GhostListener = GhostListener;
97
+ //# sourceMappingURL=GhostListener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GhostListener.js","sourceRoot":"","sources":["../../../src/core/GhostListener.ts"],"names":[],"mappings":"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"}
@@ -9,16 +9,26 @@ import { OrchestrationMetrics } from '../types';
9
9
  export declare class OrchestrationEngine {
10
10
  private wsServer;
11
11
  private subconsciousEngine;
12
+ private dashboardWebSocket;
12
13
  private metrics;
13
14
  private requestLatencies;
14
15
  private taskRequestors;
15
16
  private taskDescriptions;
16
17
  private dashboardBroadcaster;
18
+ private connectedAgents;
17
19
  constructor(wsServer: WebSocketServer, subconsciousEngine: SubconsciousEngine);
18
20
  /**
19
21
  * Set dashboard broadcaster reference
20
22
  */
21
23
  setDashboardBroadcaster(broadcaster: any): void;
24
+ /**
25
+ * Link the Dashboard WebSocket server so we can emit dashboard-specific events
26
+ */
27
+ setDashboardWebSocket(server: any): void;
28
+ /**
29
+ * Get all connected agents
30
+ */
31
+ getConnectedAgents(): any[];
22
32
  /**
23
33
  * Setup event handlers for WebSocket server
24
34
  */
@@ -81,5 +91,17 @@ export declare class OrchestrationEngine {
81
91
  * Print metrics summary
82
92
  */
83
93
  printMetrics(): void;
94
+ /**
95
+ * Reset all metrics (for cache clear)
96
+ */
97
+ resetMetrics(): void;
98
+ /**
99
+ * Pause agent processing
100
+ */
101
+ pauseProcessing(): void;
102
+ /**
103
+ * Resume agent processing
104
+ */
105
+ resumeProcessing(): void;
84
106
  }
85
107
  //# sourceMappingURL=OrchestrationEngine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrchestrationEngine.d.ts","sourceRoot":"","sources":["../../../src/core/OrchestrationEngine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAML,oBAAoB,EAErB,MAAM,UAAU,CAAC;AAKlB;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,oBAAoB,CAAa;gBAE7B,QAAQ,EAAE,eAAe,EAAE,kBAAkB,EAAE,kBAAkB;IAe7E;;OAEG;IACI,uBAAuB,CAAC,WAAW,EAAE,GAAG,GAAG,IAAI;IAItD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA6B1B;;OAEG;YACW,aAAa;IAgE3B;;OAEG;YACW,eAAe;IA+B7B;;OAEG;YACW,iBAAiB;IAiI/B;;OAEG;YACW,kBAAkB;IA+EhC;;OAEG;YACW,cAAc;IAyB5B;;OAEG;IACH,OAAO,CAAC,UAAU;IAWlB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAK1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,SAAS;IAWjB;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACI,UAAU,IAAI,oBAAoB,GAAG;QAAE,UAAU,EAAE,GAAG,CAAA;KAAE;IAO/D;;OAEG;IACI,YAAY,IAAI,IAAI;CAY5B"}
1
+ {"version":3,"file":"OrchestrationEngine.d.ts","sourceRoot":"","sources":["../../../src/core/OrchestrationEngine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAML,oBAAoB,EAErB,MAAM,UAAU,CAAC;AAKlB;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,oBAAoB,CAAa;IACzC,OAAO,CAAC,eAAe,CAA+B;gBAE1C,QAAQ,EAAE,eAAe,EAAE,kBAAkB,EAAE,kBAAkB;IAe7E;;OAEG;IACI,uBAAuB,CAAC,WAAW,EAAE,GAAG,GAAG,IAAI;IAItD;;OAEG;IACI,qBAAqB,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI;IAI/C;;OAEG;IACI,kBAAkB,IAAI,GAAG,EAAE;IAIlC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkC1B;;OAEG;YACW,aAAa;IAgE3B;;OAEG;YACW,eAAe;IA6C7B;;OAEG;YACW,iBAAiB;IAiK/B;;OAEG;YACW,kBAAkB;IA6FhC;;OAEG;YACW,cAAc;IAyB5B;;OAEG;IACH,OAAO,CAAC,UAAU;IAWlB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAK1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,SAAS;IAWjB;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACI,UAAU,IAAI,oBAAoB,GAAG;QAAE,UAAU,EAAE,GAAG,CAAA;KAAE;IAO/D;;OAEG;IACI,YAAY,IAAI,IAAI;IAa3B;;OAEG;IACI,YAAY,IAAI,IAAI;IAa3B;;OAEG;IACI,eAAe,IAAI,IAAI;IAK9B;;OAEG;IACI,gBAAgB,IAAI,IAAI;CAIhC"}