lance-context 0.1.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +232 -23
- package/dist/__tests__/ast-chunker.test.d.ts +2 -0
- package/dist/__tests__/ast-chunker.test.d.ts.map +1 -0
- package/dist/__tests__/ast-chunker.test.js +307 -0
- package/dist/__tests__/ast-chunker.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +2 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +242 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/dashboard/beads.test.d.ts +2 -0
- package/dist/__tests__/dashboard/beads.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/beads.test.js +151 -0
- package/dist/__tests__/dashboard/beads.test.js.map +1 -0
- package/dist/__tests__/dashboard/index.test.d.ts +2 -0
- package/dist/__tests__/dashboard/index.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/index.test.js +116 -0
- package/dist/__tests__/dashboard/index.test.js.map +1 -0
- package/dist/__tests__/dashboard/routes.test.d.ts +2 -0
- package/dist/__tests__/dashboard/routes.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/routes.test.js +125 -0
- package/dist/__tests__/dashboard/routes.test.js.map +1 -0
- package/dist/__tests__/dashboard/server.test.d.ts +2 -0
- package/dist/__tests__/dashboard/server.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/server.test.js +75 -0
- package/dist/__tests__/dashboard/server.test.js.map +1 -0
- package/dist/__tests__/dashboard/state.test.d.ts +2 -0
- package/dist/__tests__/dashboard/state.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/state.test.js +124 -0
- package/dist/__tests__/dashboard/state.test.js.map +1 -0
- package/dist/__tests__/embeddings/factory.test.d.ts +2 -0
- package/dist/__tests__/embeddings/factory.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/factory.test.js +100 -0
- package/dist/__tests__/embeddings/factory.test.js.map +1 -0
- package/dist/__tests__/embeddings/jina.test.d.ts +2 -0
- package/dist/__tests__/embeddings/jina.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/jina.test.js +156 -0
- package/dist/__tests__/embeddings/jina.test.js.map +1 -0
- package/dist/__tests__/embeddings/ollama.test.d.ts +2 -0
- package/dist/__tests__/embeddings/ollama.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/ollama.test.js +172 -0
- package/dist/__tests__/embeddings/ollama.test.js.map +1 -0
- package/dist/__tests__/embeddings/rate-limiter.test.d.ts +2 -0
- package/dist/__tests__/embeddings/rate-limiter.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/rate-limiter.test.js +163 -0
- package/dist/__tests__/embeddings/rate-limiter.test.js.map +1 -0
- package/dist/__tests__/embeddings/retry.test.d.ts +2 -0
- package/dist/__tests__/embeddings/retry.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/retry.test.js +260 -0
- package/dist/__tests__/embeddings/retry.test.js.map +1 -0
- package/dist/__tests__/embeddings/types.test.d.ts +2 -0
- package/dist/__tests__/embeddings/types.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/types.test.js +31 -0
- package/dist/__tests__/embeddings/types.test.js.map +1 -0
- package/dist/__tests__/mocks/embedding-backend.mock.d.ts +10 -0
- package/dist/__tests__/mocks/embedding-backend.mock.d.ts.map +1 -0
- package/dist/__tests__/mocks/embedding-backend.mock.js +39 -0
- package/dist/__tests__/mocks/embedding-backend.mock.js.map +1 -0
- package/dist/__tests__/mocks/fetch.mock.d.ts +38 -0
- package/dist/__tests__/mocks/fetch.mock.d.ts.map +1 -0
- package/dist/__tests__/mocks/fetch.mock.js +74 -0
- package/dist/__tests__/mocks/fetch.mock.js.map +1 -0
- package/dist/__tests__/mocks/lancedb.mock.d.ts +38 -0
- package/dist/__tests__/mocks/lancedb.mock.d.ts.map +1 -0
- package/dist/__tests__/mocks/lancedb.mock.js +63 -0
- package/dist/__tests__/mocks/lancedb.mock.js.map +1 -0
- package/dist/__tests__/search/clustering.test.d.ts +2 -0
- package/dist/__tests__/search/clustering.test.d.ts.map +1 -0
- package/dist/__tests__/search/clustering.test.js +230 -0
- package/dist/__tests__/search/clustering.test.js.map +1 -0
- package/dist/__tests__/search/hybrid-search.test.d.ts +2 -0
- package/dist/__tests__/search/hybrid-search.test.d.ts.map +1 -0
- package/dist/__tests__/search/hybrid-search.test.js +186 -0
- package/dist/__tests__/search/hybrid-search.test.js.map +1 -0
- package/dist/__tests__/search/indexer.test.d.ts +2 -0
- package/dist/__tests__/search/indexer.test.d.ts.map +1 -0
- package/dist/__tests__/search/indexer.test.js +878 -0
- package/dist/__tests__/search/indexer.test.js.map +1 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.d.ts +2 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.d.ts.map +1 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.js +228 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.js.map +1 -0
- package/dist/__tests__/setup.d.ts +2 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +11 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/__tests__/utils/concurrency.test.d.ts +2 -0
- package/dist/__tests__/utils/concurrency.test.d.ts.map +1 -0
- package/dist/__tests__/utils/concurrency.test.js +83 -0
- package/dist/__tests__/utils/concurrency.test.js.map +1 -0
- package/dist/__tests__/utils/errors.test.d.ts +2 -0
- package/dist/__tests__/utils/errors.test.d.ts.map +1 -0
- package/dist/__tests__/utils/errors.test.js +136 -0
- package/dist/__tests__/utils/errors.test.js.map +1 -0
- package/dist/__tests__/utils/type-guards.test.d.ts +2 -0
- package/dist/__tests__/utils/type-guards.test.d.ts.map +1 -0
- package/dist/__tests__/utils/type-guards.test.js +80 -0
- package/dist/__tests__/utils/type-guards.test.js.map +1 -0
- package/dist/__tests__/worktree/worktree-manager.test.d.ts +2 -0
- package/dist/__tests__/worktree/worktree-manager.test.d.ts.map +1 -0
- package/dist/__tests__/worktree/worktree-manager.test.js +403 -0
- package/dist/__tests__/worktree/worktree-manager.test.js.map +1 -0
- package/dist/config.d.ts +122 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +508 -0
- package/dist/config.js.map +1 -0
- package/dist/dashboard/beads.d.ts +35 -0
- package/dist/dashboard/beads.d.ts.map +1 -0
- package/dist/dashboard/beads.js +102 -0
- package/dist/dashboard/beads.js.map +1 -0
- package/dist/dashboard/events.d.ts +46 -0
- package/dist/dashboard/events.d.ts.map +1 -0
- package/dist/dashboard/events.js +141 -0
- package/dist/dashboard/events.js.map +1 -0
- package/dist/dashboard/index.d.ts +69 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +93 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard/routes.d.ts +6 -0
- package/dist/dashboard/routes.d.ts.map +1 -0
- package/dist/dashboard/routes.js +245 -0
- package/dist/dashboard/routes.js.map +1 -0
- package/dist/dashboard/server.d.ts +27 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +72 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/dashboard/state.d.ts +125 -0
- package/dist/dashboard/state.d.ts.map +1 -0
- package/dist/dashboard/state.js +264 -0
- package/dist/dashboard/state.js.map +1 -0
- package/dist/dashboard/ui.d.ts +6 -0
- package/dist/dashboard/ui.d.ts.map +1 -0
- package/dist/dashboard/ui.js +1421 -0
- package/dist/dashboard/ui.js.map +1 -0
- package/dist/embeddings/index.d.ts +20 -2
- package/dist/embeddings/index.d.ts.map +1 -1
- package/dist/embeddings/index.js +49 -6
- package/dist/embeddings/index.js.map +1 -1
- package/dist/embeddings/jina.d.ts +9 -0
- package/dist/embeddings/jina.d.ts.map +1 -1
- package/dist/embeddings/jina.js +42 -2
- package/dist/embeddings/jina.js.map +1 -1
- package/dist/embeddings/ollama.d.ts +2 -0
- package/dist/embeddings/ollama.d.ts.map +1 -1
- package/dist/embeddings/ollama.js +21 -5
- package/dist/embeddings/ollama.js.map +1 -1
- package/dist/embeddings/rate-limiter.d.ts +75 -0
- package/dist/embeddings/rate-limiter.d.ts.map +1 -0
- package/dist/embeddings/rate-limiter.js +145 -0
- package/dist/embeddings/rate-limiter.js.map +1 -0
- package/dist/embeddings/retry.d.ts +14 -0
- package/dist/embeddings/retry.d.ts.map +1 -0
- package/dist/embeddings/retry.js +89 -0
- package/dist/embeddings/retry.js.map +1 -0
- package/dist/embeddings/types.d.ts +56 -2
- package/dist/embeddings/types.d.ts.map +1 -1
- package/dist/embeddings/types.js +16 -0
- package/dist/embeddings/types.js.map +1 -1
- package/dist/index.js +1871 -44
- package/dist/index.js.map +1 -1
- package/dist/memory/index.d.ts +63 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +168 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/search/ast-chunker.d.ts +34 -0
- package/dist/search/ast-chunker.d.ts.map +1 -0
- package/dist/search/ast-chunker.js +261 -0
- package/dist/search/ast-chunker.js.map +1 -0
- package/dist/search/clustering.d.ts +77 -0
- package/dist/search/clustering.d.ts.map +1 -0
- package/dist/search/clustering.js +455 -0
- package/dist/search/clustering.js.map +1 -0
- package/dist/search/indexer.d.ts +239 -3
- package/dist/search/indexer.d.ts.map +1 -1
- package/dist/search/indexer.js +941 -45
- package/dist/search/indexer.js.map +1 -1
- package/dist/search/tree-sitter-chunker.d.ts +69 -0
- package/dist/search/tree-sitter-chunker.d.ts.map +1 -0
- package/dist/search/tree-sitter-chunker.js +436 -0
- package/dist/search/tree-sitter-chunker.js.map +1 -0
- package/dist/symbols/index.d.ts +14 -0
- package/dist/symbols/index.d.ts.map +1 -0
- package/dist/symbols/index.js +19 -0
- package/dist/symbols/index.js.map +1 -0
- package/dist/symbols/name-path.d.ts +113 -0
- package/dist/symbols/name-path.d.ts.map +1 -0
- package/dist/symbols/name-path.js +194 -0
- package/dist/symbols/name-path.js.map +1 -0
- package/dist/symbols/pattern-search.d.ts +14 -0
- package/dist/symbols/pattern-search.d.ts.map +1 -0
- package/dist/symbols/pattern-search.js +224 -0
- package/dist/symbols/pattern-search.js.map +1 -0
- package/dist/symbols/reference-finder.d.ts +38 -0
- package/dist/symbols/reference-finder.d.ts.map +1 -0
- package/dist/symbols/reference-finder.js +376 -0
- package/dist/symbols/reference-finder.js.map +1 -0
- package/dist/symbols/symbol-editor.d.ts +81 -0
- package/dist/symbols/symbol-editor.d.ts.map +1 -0
- package/dist/symbols/symbol-editor.js +257 -0
- package/dist/symbols/symbol-editor.js.map +1 -0
- package/dist/symbols/symbol-extractor.d.ts +49 -0
- package/dist/symbols/symbol-extractor.d.ts.map +1 -0
- package/dist/symbols/symbol-extractor.js +593 -0
- package/dist/symbols/symbol-extractor.js.map +1 -0
- package/dist/symbols/symbol-renamer.d.ts +81 -0
- package/dist/symbols/symbol-renamer.d.ts.map +1 -0
- package/dist/symbols/symbol-renamer.js +204 -0
- package/dist/symbols/symbol-renamer.js.map +1 -0
- package/dist/symbols/types.d.ts +234 -0
- package/dist/symbols/types.d.ts.map +1 -0
- package/dist/symbols/types.js +106 -0
- package/dist/symbols/types.js.map +1 -0
- package/dist/utils/concurrency.d.ts +32 -0
- package/dist/utils/concurrency.d.ts.map +1 -0
- package/dist/utils/concurrency.js +57 -0
- package/dist/utils/concurrency.js.map +1 -0
- package/dist/utils/errors.d.ts +36 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +91 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/type-guards.d.ts +17 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +25 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/dist/worktree/index.d.ts +6 -0
- package/dist/worktree/index.d.ts.map +1 -0
- package/dist/worktree/index.js +6 -0
- package/dist/worktree/index.js.map +1 -0
- package/dist/worktree/types.d.ts +101 -0
- package/dist/worktree/types.d.ts.map +1 -0
- package/dist/worktree/types.js +6 -0
- package/dist/worktree/types.js.map +1 -0
- package/dist/worktree/worktree-manager.d.ts +80 -0
- package/dist/worktree/worktree-manager.d.ts.map +1 -0
- package/dist/worktree/worktree-manager.js +407 -0
- package/dist/worktree/worktree-manager.js.map +1 -0
- package/package.json +39 -5
- package/scripts/postinstall.js +48 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { ServerResponse } from 'http';
|
|
2
|
+
/**
|
|
3
|
+
* Manages Server-Sent Events (SSE) connections for real-time updates.
|
|
4
|
+
*/
|
|
5
|
+
export declare class SSEManager {
|
|
6
|
+
private clients;
|
|
7
|
+
private heartbeatInterval;
|
|
8
|
+
constructor();
|
|
9
|
+
/**
|
|
10
|
+
* Set up listeners for dashboard state events
|
|
11
|
+
*/
|
|
12
|
+
private setupEventListeners;
|
|
13
|
+
/**
|
|
14
|
+
* Start sending heartbeat messages to keep connections alive
|
|
15
|
+
*/
|
|
16
|
+
startHeartbeat(): void;
|
|
17
|
+
/**
|
|
18
|
+
* Stop the heartbeat interval
|
|
19
|
+
*/
|
|
20
|
+
stopHeartbeat(): void;
|
|
21
|
+
/**
|
|
22
|
+
* Add a new SSE client connection
|
|
23
|
+
*/
|
|
24
|
+
addClient(res: ServerResponse): void;
|
|
25
|
+
/**
|
|
26
|
+
* Send a message to a specific client
|
|
27
|
+
*/
|
|
28
|
+
private sendToClient;
|
|
29
|
+
/**
|
|
30
|
+
* Broadcast an event to all connected clients
|
|
31
|
+
*/
|
|
32
|
+
broadcast(event: string, data: unknown): void;
|
|
33
|
+
/**
|
|
34
|
+
* Get the number of connected clients
|
|
35
|
+
*/
|
|
36
|
+
getClientCount(): number;
|
|
37
|
+
/**
|
|
38
|
+
* Close all client connections
|
|
39
|
+
*/
|
|
40
|
+
closeAll(): void;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Singleton instance of the SSE manager
|
|
44
|
+
*/
|
|
45
|
+
export declare const sseManager: SSEManager;
|
|
46
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/dashboard/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAG3C;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,iBAAiB,CAA+C;;IAOxE;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsB3B;;OAEG;IACH,cAAc,IAAI,IAAI;IAQtB;;OAEG;IACH,aAAa,IAAI,IAAI;IAOrB;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IAgCpC;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAkB7C;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,QAAQ,IAAI,IAAI;CAWjB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,YAAmB,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { dashboardState } from './state.js';
|
|
2
|
+
/**
|
|
3
|
+
* Manages Server-Sent Events (SSE) connections for real-time updates.
|
|
4
|
+
*/
|
|
5
|
+
export class SSEManager {
|
|
6
|
+
clients = new Set();
|
|
7
|
+
heartbeatInterval = null;
|
|
8
|
+
constructor() {
|
|
9
|
+
// Set up event listeners on dashboard state
|
|
10
|
+
this.setupEventListeners();
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Set up listeners for dashboard state events
|
|
14
|
+
*/
|
|
15
|
+
setupEventListeners() {
|
|
16
|
+
dashboardState.on('progress', (progress) => {
|
|
17
|
+
this.broadcast('indexing:progress', progress);
|
|
18
|
+
});
|
|
19
|
+
dashboardState.on('indexing:start', () => {
|
|
20
|
+
this.broadcast('indexing:start', { timestamp: new Date().toISOString() });
|
|
21
|
+
});
|
|
22
|
+
dashboardState.on('indexing:complete', (result) => {
|
|
23
|
+
this.broadcast('indexing:complete', result);
|
|
24
|
+
});
|
|
25
|
+
dashboardState.on('status:change', (status) => {
|
|
26
|
+
this.broadcast('status:change', status);
|
|
27
|
+
});
|
|
28
|
+
dashboardState.on('usage:update', (usage) => {
|
|
29
|
+
this.broadcast('usage:update', usage);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Start sending heartbeat messages to keep connections alive
|
|
34
|
+
*/
|
|
35
|
+
startHeartbeat() {
|
|
36
|
+
if (this.heartbeatInterval)
|
|
37
|
+
return;
|
|
38
|
+
this.heartbeatInterval = setInterval(() => {
|
|
39
|
+
this.broadcast('heartbeat', { timestamp: new Date().toISOString() });
|
|
40
|
+
}, 30000); // Every 30 seconds
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Stop the heartbeat interval
|
|
44
|
+
*/
|
|
45
|
+
stopHeartbeat() {
|
|
46
|
+
if (this.heartbeatInterval) {
|
|
47
|
+
clearInterval(this.heartbeatInterval);
|
|
48
|
+
this.heartbeatInterval = null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Add a new SSE client connection
|
|
53
|
+
*/
|
|
54
|
+
addClient(res) {
|
|
55
|
+
// Set SSE headers
|
|
56
|
+
res.writeHead(200, {
|
|
57
|
+
'Content-Type': 'text/event-stream',
|
|
58
|
+
'Cache-Control': 'no-cache',
|
|
59
|
+
Connection: 'keep-alive',
|
|
60
|
+
'Access-Control-Allow-Origin': '*',
|
|
61
|
+
});
|
|
62
|
+
// Add to clients set
|
|
63
|
+
this.clients.add(res);
|
|
64
|
+
// Send initial connected event
|
|
65
|
+
this.sendToClient(res, 'connected', {
|
|
66
|
+
timestamp: new Date().toISOString(),
|
|
67
|
+
clientCount: this.clients.size,
|
|
68
|
+
});
|
|
69
|
+
// Send current indexing progress if in progress
|
|
70
|
+
if (dashboardState.isIndexingInProgress()) {
|
|
71
|
+
const lastProgress = dashboardState.getLastProgress();
|
|
72
|
+
if (lastProgress) {
|
|
73
|
+
this.sendToClient(res, 'indexing:progress', lastProgress);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Handle client disconnect
|
|
77
|
+
res.on('close', () => {
|
|
78
|
+
this.clients.delete(res);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Send a message to a specific client
|
|
83
|
+
*/
|
|
84
|
+
sendToClient(res, event, data) {
|
|
85
|
+
if (res.writableEnded)
|
|
86
|
+
return;
|
|
87
|
+
try {
|
|
88
|
+
res.write(`event: ${event}\n`);
|
|
89
|
+
res.write(`data: ${JSON.stringify(data)}\n\n`);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// Client likely disconnected
|
|
93
|
+
this.clients.delete(res);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Broadcast an event to all connected clients
|
|
98
|
+
*/
|
|
99
|
+
broadcast(event, data) {
|
|
100
|
+
const message = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`;
|
|
101
|
+
for (const client of this.clients) {
|
|
102
|
+
if (client.writableEnded) {
|
|
103
|
+
this.clients.delete(client);
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
client.write(message);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// Client likely disconnected
|
|
111
|
+
this.clients.delete(client);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get the number of connected clients
|
|
117
|
+
*/
|
|
118
|
+
getClientCount() {
|
|
119
|
+
return this.clients.size;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Close all client connections
|
|
123
|
+
*/
|
|
124
|
+
closeAll() {
|
|
125
|
+
this.stopHeartbeat();
|
|
126
|
+
for (const client of this.clients) {
|
|
127
|
+
try {
|
|
128
|
+
client.end();
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// Ignore errors during cleanup
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
this.clients.clear();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Singleton instance of the SSE manager
|
|
139
|
+
*/
|
|
140
|
+
export const sseManager = new SSEManager();
|
|
141
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/dashboard/events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C;;GAEG;AACH,MAAM,OAAO,UAAU;IACb,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,iBAAiB,GAA0C,IAAI,CAAC;IAExE;QACE,4CAA4C;QAC5C,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,mBAAmB;QACzB,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE;YACzC,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;YACvC,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,MAAM,EAAE,EAAE;YAChD,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,EAAE;YAC5C,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1C,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,IAAI,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAEnC,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;YACxC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACvE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,mBAAmB;IAChC,CAAC;IAED;;OAEG;IACH,aAAa;QACX,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACtC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAChC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,GAAmB;QAC3B,kBAAkB;QAClB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;YACjB,cAAc,EAAE,mBAAmB;YACnC,eAAe,EAAE,UAAU;YAC3B,UAAU,EAAE,YAAY;YACxB,6BAA6B,EAAE,GAAG;SACnC,CAAC,CAAC;QAEH,qBAAqB;QACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEtB,+BAA+B;QAC/B,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE;YAClC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;SAC/B,CAAC,CAAC;QAEH,gDAAgD;QAChD,IAAI,cAAc,CAAC,oBAAoB,EAAE,EAAE,CAAC;YAC1C,MAAM,YAAY,GAAG,cAAc,CAAC,eAAe,EAAE,CAAC;YACtD,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACnB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,GAAmB,EAAE,KAAa,EAAE,IAAa;QACpE,IAAI,GAAG,CAAC,aAAa;YAAE,OAAO;QAE9B,IAAI,CAAC;YACH,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;YAC/B,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;YAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAa,EAAE,IAAa;QACpC,MAAM,OAAO,GAAG,UAAU,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;QAErE,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC5B,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,6BAA6B;gBAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,EAAE,CAAC;YACf,CAAC;YAAC,MAAM,CAAC;gBACP,+BAA+B;YACjC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
export { dashboardState, DashboardStateManager } from './state.js';
|
|
2
|
+
export type { CommandName, CommandUsage } from './state.js';
|
|
3
|
+
export { sseManager, SSEManager } from './events.js';
|
|
4
|
+
export { startServer, findAvailablePort, isPortAvailable, type DashboardServer } from './server.js';
|
|
5
|
+
export type { IndexProgress } from '../search/indexer.js';
|
|
6
|
+
import { type DashboardServer } from './server.js';
|
|
7
|
+
import type { CodeIndexer } from '../search/indexer.js';
|
|
8
|
+
import type { LanceContextConfig } from '../config.js';
|
|
9
|
+
export interface DashboardOptions {
|
|
10
|
+
/** Port to use (default: auto-discover from 24300) */
|
|
11
|
+
port?: number;
|
|
12
|
+
/** The indexer instance to share with the dashboard */
|
|
13
|
+
indexer?: CodeIndexer;
|
|
14
|
+
/** The configuration to display */
|
|
15
|
+
config?: LanceContextConfig;
|
|
16
|
+
/** The project path */
|
|
17
|
+
projectPath?: string;
|
|
18
|
+
/** Package version to display */
|
|
19
|
+
version?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* DashboardManager - Encapsulates dashboard server state for testability.
|
|
23
|
+
*
|
|
24
|
+
* This class allows creating isolated instances for testing while maintaining
|
|
25
|
+
* backward compatibility through the default instance and module-level functions.
|
|
26
|
+
*/
|
|
27
|
+
export declare class DashboardManager {
|
|
28
|
+
private serverInstance;
|
|
29
|
+
/**
|
|
30
|
+
* Start the dashboard server.
|
|
31
|
+
* Returns the server instance with URL and stop function.
|
|
32
|
+
*/
|
|
33
|
+
start(options?: DashboardOptions): Promise<DashboardServer>;
|
|
34
|
+
/**
|
|
35
|
+
* Stop the dashboard server.
|
|
36
|
+
*/
|
|
37
|
+
stop(): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Check if the dashboard is running.
|
|
40
|
+
*/
|
|
41
|
+
isRunning(): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Get the dashboard URL if running.
|
|
44
|
+
*/
|
|
45
|
+
getUrl(): string | null;
|
|
46
|
+
/**
|
|
47
|
+
* Get the current server instance (for testing).
|
|
48
|
+
*/
|
|
49
|
+
getServerInstance(): DashboardServer | null;
|
|
50
|
+
}
|
|
51
|
+
export declare const defaultDashboardManager: DashboardManager;
|
|
52
|
+
/**
|
|
53
|
+
* Start the dashboard server.
|
|
54
|
+
* Returns the server instance with URL and stop function.
|
|
55
|
+
*/
|
|
56
|
+
export declare function startDashboard(options?: DashboardOptions): Promise<DashboardServer>;
|
|
57
|
+
/**
|
|
58
|
+
* Stop the dashboard server.
|
|
59
|
+
*/
|
|
60
|
+
export declare function stopDashboard(): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Check if the dashboard is running.
|
|
63
|
+
*/
|
|
64
|
+
export declare function isDashboardRunning(): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Get the dashboard URL if running.
|
|
67
|
+
*/
|
|
68
|
+
export declare function getDashboardUrl(): string | null;
|
|
69
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dashboard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AACpG,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,mCAAmC;IACnC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,cAAc,CAAgC;IAEtD;;;OAGG;IACG,KAAK,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC;IAuBrE;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,MAAM,IAAI,MAAM,GAAG,IAAI;IAIvB;;OAEG;IACH,iBAAiB,IAAI,eAAe,GAAG,IAAI;CAG5C;AAGD,eAAO,MAAM,uBAAuB,kBAAyB,CAAC;AAE9D;;;GAGG;AACH,wBAAsB,cAAc,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAE7F;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAEnD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
export { dashboardState, DashboardStateManager } from './state.js';
|
|
2
|
+
export { sseManager, SSEManager } from './events.js';
|
|
3
|
+
export { startServer, findAvailablePort, isPortAvailable } from './server.js';
|
|
4
|
+
import { startServer } from './server.js';
|
|
5
|
+
import { dashboardState } from './state.js';
|
|
6
|
+
/**
|
|
7
|
+
* DashboardManager - Encapsulates dashboard server state for testability.
|
|
8
|
+
*
|
|
9
|
+
* This class allows creating isolated instances for testing while maintaining
|
|
10
|
+
* backward compatibility through the default instance and module-level functions.
|
|
11
|
+
*/
|
|
12
|
+
export class DashboardManager {
|
|
13
|
+
serverInstance = null;
|
|
14
|
+
/**
|
|
15
|
+
* Start the dashboard server.
|
|
16
|
+
* Returns the server instance with URL and stop function.
|
|
17
|
+
*/
|
|
18
|
+
async start(options = {}) {
|
|
19
|
+
if (this.serverInstance) {
|
|
20
|
+
return this.serverInstance;
|
|
21
|
+
}
|
|
22
|
+
// Set up dashboard state if provided
|
|
23
|
+
if (options.indexer) {
|
|
24
|
+
dashboardState.setIndexer(options.indexer);
|
|
25
|
+
}
|
|
26
|
+
if (options.config) {
|
|
27
|
+
dashboardState.setConfig(options.config);
|
|
28
|
+
}
|
|
29
|
+
if (options.projectPath) {
|
|
30
|
+
dashboardState.setProjectPath(options.projectPath);
|
|
31
|
+
}
|
|
32
|
+
if (options.version) {
|
|
33
|
+
dashboardState.setVersion(options.version);
|
|
34
|
+
}
|
|
35
|
+
this.serverInstance = await startServer(options.port);
|
|
36
|
+
return this.serverInstance;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Stop the dashboard server.
|
|
40
|
+
*/
|
|
41
|
+
async stop() {
|
|
42
|
+
if (this.serverInstance) {
|
|
43
|
+
await this.serverInstance.stop();
|
|
44
|
+
this.serverInstance = null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Check if the dashboard is running.
|
|
49
|
+
*/
|
|
50
|
+
isRunning() {
|
|
51
|
+
return this.serverInstance !== null;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get the dashboard URL if running.
|
|
55
|
+
*/
|
|
56
|
+
getUrl() {
|
|
57
|
+
return this.serverInstance?.url ?? null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get the current server instance (for testing).
|
|
61
|
+
*/
|
|
62
|
+
getServerInstance() {
|
|
63
|
+
return this.serverInstance;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Default instance for backward compatibility
|
|
67
|
+
export const defaultDashboardManager = new DashboardManager();
|
|
68
|
+
/**
|
|
69
|
+
* Start the dashboard server.
|
|
70
|
+
* Returns the server instance with URL and stop function.
|
|
71
|
+
*/
|
|
72
|
+
export async function startDashboard(options = {}) {
|
|
73
|
+
return defaultDashboardManager.start(options);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Stop the dashboard server.
|
|
77
|
+
*/
|
|
78
|
+
export async function stopDashboard() {
|
|
79
|
+
return defaultDashboardManager.stop();
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Check if the dashboard is running.
|
|
83
|
+
*/
|
|
84
|
+
export function isDashboardRunning() {
|
|
85
|
+
return defaultDashboardManager.isRunning();
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get the dashboard URL if running.
|
|
89
|
+
*/
|
|
90
|
+
export function getDashboardUrl() {
|
|
91
|
+
return defaultDashboardManager.getUrl();
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dashboard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAwB,MAAM,aAAa,CAAC;AAGpG,OAAO,EAAE,WAAW,EAAwB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAiB5C;;;;;GAKG;AACH,MAAM,OAAO,gBAAgB;IACnB,cAAc,GAA2B,IAAI,CAAC;IAEtD;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,UAA4B,EAAE;QACxC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,cAAc,CAAC;QAC7B,CAAC;QAED,qCAAqC;QACrC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,IAAI,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,8CAA8C;AAC9C,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAE9D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAA4B,EAAE;IACjE,OAAO,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,uBAAuB,CAAC,IAAI,EAAE,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,uBAAuB,CAAC,SAAS,EAAE,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,uBAAuB,CAAC,MAAM,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/dashboard/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAuM5D;;GAEG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAmE5F"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { dashboardState } from './state.js';
|
|
2
|
+
import { sseManager } from './events.js';
|
|
3
|
+
import { getDashboardHTML } from './ui.js';
|
|
4
|
+
import { getBeadsStatus } from './beads.js';
|
|
5
|
+
import { saveEmbeddingSettings, getEmbeddingSettings } from '../config.js';
|
|
6
|
+
/**
|
|
7
|
+
* Send a JSON response
|
|
8
|
+
*/
|
|
9
|
+
function sendJSON(res, data, status = 200) {
|
|
10
|
+
res.writeHead(status, {
|
|
11
|
+
'Content-Type': 'application/json',
|
|
12
|
+
'Access-Control-Allow-Origin': '*',
|
|
13
|
+
});
|
|
14
|
+
res.end(JSON.stringify(data));
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Send an HTML response
|
|
18
|
+
*/
|
|
19
|
+
function sendHTML(res, html, status = 200) {
|
|
20
|
+
res.writeHead(status, {
|
|
21
|
+
'Content-Type': 'text/html',
|
|
22
|
+
'Access-Control-Allow-Origin': '*',
|
|
23
|
+
});
|
|
24
|
+
res.end(html);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Send a 404 Not Found response
|
|
28
|
+
*/
|
|
29
|
+
function send404(res) {
|
|
30
|
+
sendJSON(res, { error: 'Not found' }, 404);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Handle GET / - Dashboard HTML page
|
|
34
|
+
*/
|
|
35
|
+
async function handleDashboard(_req, res) {
|
|
36
|
+
const html = getDashboardHTML();
|
|
37
|
+
sendHTML(res, html);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Handle GET /api/status - Index status
|
|
41
|
+
*/
|
|
42
|
+
async function handleStatus(_req, res) {
|
|
43
|
+
try {
|
|
44
|
+
const status = await dashboardState.getStatus();
|
|
45
|
+
if (!status) {
|
|
46
|
+
sendJSON(res, { error: 'Indexer not initialized' }, 503);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
sendJSON(res, {
|
|
50
|
+
...status,
|
|
51
|
+
isIndexing: dashboardState.isIndexingInProgress(),
|
|
52
|
+
version: dashboardState.getVersion(),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
sendJSON(res, { error: String(error) }, 500);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Handle GET /api/config - Effective configuration
|
|
61
|
+
*/
|
|
62
|
+
async function handleConfig(_req, res) {
|
|
63
|
+
const config = dashboardState.getConfig();
|
|
64
|
+
const projectPath = dashboardState.getProjectPath();
|
|
65
|
+
if (!config) {
|
|
66
|
+
sendJSON(res, { error: 'Configuration not loaded' }, 503);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
sendJSON(res, {
|
|
70
|
+
projectPath,
|
|
71
|
+
...config,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Handle GET /api/events - SSE stream
|
|
76
|
+
*/
|
|
77
|
+
function handleEvents(_req, res) {
|
|
78
|
+
sseManager.addClient(res);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Handle GET /api/heartbeat - Health check
|
|
82
|
+
*/
|
|
83
|
+
function handleHeartbeat(_req, res) {
|
|
84
|
+
sendJSON(res, {
|
|
85
|
+
ok: true,
|
|
86
|
+
timestamp: new Date().toISOString(),
|
|
87
|
+
clients: sseManager.getClientCount(),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Handle GET /api/usage - Command usage statistics
|
|
92
|
+
*/
|
|
93
|
+
function handleUsage(_req, res) {
|
|
94
|
+
const usage = dashboardState.getCommandUsage();
|
|
95
|
+
const total = dashboardState.getTotalCommandCount();
|
|
96
|
+
sendJSON(res, { usage, total });
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Handle GET /api/beads - Beads issue tracker status
|
|
100
|
+
*/
|
|
101
|
+
async function handleBeads(_req, res) {
|
|
102
|
+
const projectPath = dashboardState.getProjectPath();
|
|
103
|
+
if (!projectPath) {
|
|
104
|
+
sendJSON(res, { available: false, issueCount: 0, openCount: 0, readyCount: 0, issues: [] });
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
try {
|
|
108
|
+
const status = await getBeadsStatus(projectPath);
|
|
109
|
+
sendJSON(res, status);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
sendJSON(res, { available: false, error: String(error) }, 500);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Handle GET /api/settings/embedding - Get current embedding settings
|
|
117
|
+
*/
|
|
118
|
+
async function handleGetEmbeddingSettings(_req, res) {
|
|
119
|
+
const projectPath = dashboardState.getProjectPath();
|
|
120
|
+
if (!projectPath) {
|
|
121
|
+
sendJSON(res, { error: 'Project path not set' }, 503);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
const settings = await getEmbeddingSettings(projectPath);
|
|
126
|
+
sendJSON(res, settings);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
sendJSON(res, { error: String(error) }, 500);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Parse JSON body from request
|
|
134
|
+
*/
|
|
135
|
+
async function parseJsonBody(req) {
|
|
136
|
+
return new Promise((resolve, reject) => {
|
|
137
|
+
let body = '';
|
|
138
|
+
req.on('data', (chunk) => {
|
|
139
|
+
body += chunk.toString();
|
|
140
|
+
});
|
|
141
|
+
req.on('end', () => {
|
|
142
|
+
try {
|
|
143
|
+
resolve(JSON.parse(body));
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
reject(new Error('Invalid JSON'));
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
req.on('error', reject);
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Handle POST /api/settings/embedding - Save embedding settings
|
|
154
|
+
*/
|
|
155
|
+
async function handleSaveEmbeddingSettings(req, res) {
|
|
156
|
+
const projectPath = dashboardState.getProjectPath();
|
|
157
|
+
if (!projectPath) {
|
|
158
|
+
sendJSON(res, { error: 'Project path not set' }, 503);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
const body = (await parseJsonBody(req));
|
|
163
|
+
if (!body.backend || !['jina', 'ollama'].includes(body.backend)) {
|
|
164
|
+
sendJSON(res, { error: 'Invalid backend. Must be "jina" or "ollama".' }, 400);
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
await saveEmbeddingSettings(projectPath, body);
|
|
168
|
+
sendJSON(res, {
|
|
169
|
+
success: true,
|
|
170
|
+
message: `Embedding backend set to ${body.backend}. Restart the MCP server for changes to take effect.`,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
sendJSON(res, { error: String(error) }, 500);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Route dispatcher
|
|
179
|
+
*/
|
|
180
|
+
export async function handleRequest(req, res) {
|
|
181
|
+
const url = new URL(req.url ?? '/', `http://${req.headers.host}`);
|
|
182
|
+
const routePath = url.pathname;
|
|
183
|
+
const method = req.method ?? 'GET';
|
|
184
|
+
// Handle CORS preflight
|
|
185
|
+
if (method === 'OPTIONS') {
|
|
186
|
+
res.writeHead(204, {
|
|
187
|
+
'Access-Control-Allow-Origin': '*',
|
|
188
|
+
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
|
|
189
|
+
'Access-Control-Allow-Headers': 'Content-Type',
|
|
190
|
+
});
|
|
191
|
+
res.end();
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
try {
|
|
195
|
+
// POST routes
|
|
196
|
+
if (method === 'POST') {
|
|
197
|
+
switch (routePath) {
|
|
198
|
+
case '/api/settings/embedding':
|
|
199
|
+
await handleSaveEmbeddingSettings(req, res);
|
|
200
|
+
return;
|
|
201
|
+
default:
|
|
202
|
+
sendJSON(res, { error: 'Method not allowed' }, 405);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// GET routes
|
|
207
|
+
if (method !== 'GET') {
|
|
208
|
+
sendJSON(res, { error: 'Method not allowed' }, 405);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
switch (routePath) {
|
|
212
|
+
case '/':
|
|
213
|
+
await handleDashboard(req, res);
|
|
214
|
+
break;
|
|
215
|
+
case '/api/status':
|
|
216
|
+
await handleStatus(req, res);
|
|
217
|
+
break;
|
|
218
|
+
case '/api/config':
|
|
219
|
+
await handleConfig(req, res);
|
|
220
|
+
break;
|
|
221
|
+
case '/api/events':
|
|
222
|
+
handleEvents(req, res);
|
|
223
|
+
break;
|
|
224
|
+
case '/api/heartbeat':
|
|
225
|
+
handleHeartbeat(req, res);
|
|
226
|
+
break;
|
|
227
|
+
case '/api/usage':
|
|
228
|
+
handleUsage(req, res);
|
|
229
|
+
break;
|
|
230
|
+
case '/api/beads':
|
|
231
|
+
await handleBeads(req, res);
|
|
232
|
+
break;
|
|
233
|
+
case '/api/settings/embedding':
|
|
234
|
+
await handleGetEmbeddingSettings(req, res);
|
|
235
|
+
break;
|
|
236
|
+
default:
|
|
237
|
+
send404(res);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
console.error('[lance-context] Dashboard error:', error);
|
|
242
|
+
sendJSON(res, { error: 'Internal server error' }, 500);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/dashboard/routes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAA0B,MAAM,cAAc,CAAC;AAEnG;;GAEG;AACH,SAAS,QAAQ,CAAC,GAAmB,EAAE,IAAa,EAAE,MAAM,GAAG,GAAG;IAChE,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE;QACpB,cAAc,EAAE,kBAAkB;QAClC,6BAA6B,EAAE,GAAG;KACnC,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,GAAmB,EAAE,IAAY,EAAE,MAAM,GAAG,GAAG;IAC/D,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE;QACpB,cAAc,EAAE,WAAW;QAC3B,6BAA6B,EAAE,GAAG;KACnC,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,OAAO,CAAC,GAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAAC,IAAqB,EAAE,GAAmB;IACvE,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;IAChC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,IAAqB,EAAE,GAAmB;IACpE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,CAAC;QAChD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,GAAG,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,GAAG,EAAE;YACZ,GAAG,MAAM;YACT,UAAU,EAAE,cAAc,CAAC,oBAAoB,EAAE;YACjD,OAAO,EAAE,cAAc,CAAC,UAAU,EAAE;SACrC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,IAAqB,EAAE,GAAmB;IACpE,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC;IAC1C,MAAM,WAAW,GAAG,cAAc,CAAC,cAAc,EAAE,CAAC;IAEpD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,GAAG,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,QAAQ,CAAC,GAAG,EAAE;QACZ,WAAW;QACX,GAAG,MAAM;KACV,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,IAAqB,EAAE,GAAmB;IAC9D,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAAqB,EAAE,GAAmB;IACjE,QAAQ,CAAC,GAAG,EAAE;QACZ,EAAE,EAAE,IAAI;QACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,OAAO,EAAE,UAAU,CAAC,cAAc,EAAE;KACrC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,IAAqB,EAAE,GAAmB;IAC7D,MAAM,KAAK,GAAG,cAAc,CAAC,eAAe,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAG,cAAc,CAAC,oBAAoB,EAAE,CAAC;IACpD,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW,CAAC,IAAqB,EAAE,GAAmB;IACnE,MAAM,WAAW,GAAG,cAAc,CAAC,cAAc,EAAE,CAAC;IACpD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,QAAQ,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5F,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;QACjD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,0BAA0B,CACvC,IAAqB,EACrB,GAAmB;IAEnB,MAAM,WAAW,GAAG,cAAc,CAAC,cAAc,EAAE,CAAC;IACpD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,GAAG,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACzD,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,GAAoB;IAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YACvB,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACjB,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,2BAA2B,CACxC,GAAoB,EACpB,GAAmB;IAEnB,MAAM,WAAW,GAAG,cAAc,CAAC,cAAc,EAAE,CAAC;IACpD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,GAAG,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,aAAa,CAAC,GAAG,CAAC,CAAsB,CAAC;QAE7D,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAChE,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,8CAA8C,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9E,OAAO;QACT,CAAC;QAED,MAAM,qBAAqB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC/C,QAAQ,CAAC,GAAG,EAAE;YACZ,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,4BAA4B,IAAI,CAAC,OAAO,sDAAsD;SACxG,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAoB,EAAE,GAAmB;IAC3E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;IAEnC,wBAAwB;IACxB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;YACjB,6BAA6B,EAAE,GAAG;YAClC,8BAA8B,EAAE,oBAAoB;YACpD,8BAA8B,EAAE,cAAc;SAC/C,CAAC,CAAC;QACH,GAAG,CAAC,GAAG,EAAE,CAAC;QACV,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,cAAc;QACd,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,QAAQ,SAAS,EAAE,CAAC;gBAClB,KAAK,yBAAyB;oBAC5B,MAAM,2BAA2B,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC5C,OAAO;gBACT;oBACE,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,GAAG,CAAC,CAAC;oBACpD,OAAO;YACX,CAAC;QACH,CAAC;QAED,aAAa;QACb,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,GAAG,CAAC,CAAC;YACpD,OAAO;QACT,CAAC;QAED,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,GAAG;gBACN,MAAM,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,aAAa;gBAChB,MAAM,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,aAAa;gBAChB,MAAM,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,aAAa;gBAChB,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACvB,MAAM;YACR,KAAK,gBAAgB;gBACnB,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC1B,MAAM;YACR,KAAK,YAAY;gBACf,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACtB,MAAM;YACR,KAAK,YAAY;gBACf,MAAM,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC5B,MAAM;YACR,KAAK,yBAAyB;gBAC5B,MAAM,0BAA0B,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC3C,MAAM;YACR;gBACE,OAAO,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;QACzD,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as http from 'http';
|
|
2
|
+
/**
|
|
3
|
+
* Check if a port is available
|
|
4
|
+
*/
|
|
5
|
+
export declare function isPortAvailable(port: number): Promise<boolean>;
|
|
6
|
+
/**
|
|
7
|
+
* Find an available port starting from the given port
|
|
8
|
+
*/
|
|
9
|
+
export declare function findAvailablePort(startPort?: number): Promise<number>;
|
|
10
|
+
/**
|
|
11
|
+
* Dashboard server instance
|
|
12
|
+
*/
|
|
13
|
+
export interface DashboardServer {
|
|
14
|
+
/** The HTTP server instance */
|
|
15
|
+
server: http.Server;
|
|
16
|
+
/** The port the server is listening on */
|
|
17
|
+
port: number;
|
|
18
|
+
/** The URL to access the dashboard */
|
|
19
|
+
url: string;
|
|
20
|
+
/** Stop the server */
|
|
21
|
+
stop: () => Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Start the dashboard HTTP server
|
|
25
|
+
*/
|
|
26
|
+
export declare function startServer(port?: number): Promise<DashboardServer>;
|
|
27
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAQ7B;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAepE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,GAAE,MAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAOzF;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IACpB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,sBAAsB;IACtB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAoCzE"}
|