claudia-orchestrator 0.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/LICENSE +201 -0
- package/README.md +109 -0
- package/dist/cli-parser.d.ts +11 -0
- package/dist/cli-parser.d.ts.map +1 -0
- package/dist/cli-parser.js +57 -0
- package/dist/cli-parser.js.map +1 -0
- package/dist/cui-server.d.ts +69 -0
- package/dist/cui-server.d.ts.map +1 -0
- package/dist/cui-server.js +705 -0
- package/dist/cui-server.js.map +1 -0
- package/dist/mcp-server/claudia-tools.d.ts +15 -0
- package/dist/mcp-server/claudia-tools.d.ts.map +1 -0
- package/dist/mcp-server/claudia-tools.js +366 -0
- package/dist/mcp-server/claudia-tools.js.map +1 -0
- package/dist/mcp-server/index.d.ts +3 -0
- package/dist/mcp-server/index.d.ts.map +1 -0
- package/dist/mcp-server/index.js +176 -0
- package/dist/mcp-server/index.js.map +1 -0
- package/dist/middleware/auth.d.ts +18 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +136 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/cors-setup.d.ts +7 -0
- package/dist/middleware/cors-setup.d.ts.map +1 -0
- package/dist/middleware/cors-setup.js +8 -0
- package/dist/middleware/cors-setup.js.map +1 -0
- package/dist/middleware/error-handler.d.ts +4 -0
- package/dist/middleware/error-handler.d.ts.map +1 -0
- package/dist/middleware/error-handler.js +27 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/middleware/query-parser.d.ts +11 -0
- package/dist/middleware/query-parser.d.ts.map +1 -0
- package/dist/middleware/query-parser.js +68 -0
- package/dist/middleware/query-parser.js.map +1 -0
- package/dist/middleware/request-logger.d.ts +4 -0
- package/dist/middleware/request-logger.d.ts.map +1 -0
- package/dist/middleware/request-logger.js +29 -0
- package/dist/middleware/request-logger.js.map +1 -0
- package/dist/process-daemon/index.d.ts +14 -0
- package/dist/process-daemon/index.d.ts.map +1 -0
- package/dist/process-daemon/index.js +51 -0
- package/dist/process-daemon/index.js.map +1 -0
- package/dist/process-daemon/process-daemon.d.ts +78 -0
- package/dist/process-daemon/process-daemon.d.ts.map +1 -0
- package/dist/process-daemon/process-daemon.js +568 -0
- package/dist/process-daemon/process-daemon.js.map +1 -0
- package/dist/process-daemon/process-manager-client.d.ts +108 -0
- package/dist/process-daemon/process-manager-client.d.ts.map +1 -0
- package/dist/process-daemon/process-manager-client.js +314 -0
- package/dist/process-daemon/process-manager-client.js.map +1 -0
- package/dist/process-daemon/process-manager-interface.d.ts +47 -0
- package/dist/process-daemon/process-manager-interface.d.ts.map +1 -0
- package/dist/process-daemon/process-manager-interface.js +8 -0
- package/dist/process-daemon/process-manager-interface.js.map +1 -0
- package/dist/process-daemon/test-daemon.d.ts +12 -0
- package/dist/process-daemon/test-daemon.d.ts.map +1 -0
- package/dist/process-daemon/test-daemon.js +81 -0
- package/dist/process-daemon/test-daemon.js.map +1 -0
- package/dist/process-daemon/types.d.ts +85 -0
- package/dist/process-daemon/types.d.ts.map +1 -0
- package/dist/process-daemon/types.js +8 -0
- package/dist/process-daemon/types.js.map +1 -0
- package/dist/routes/claudia.routes.d.ts +10 -0
- package/dist/routes/claudia.routes.d.ts.map +1 -0
- package/dist/routes/claudia.routes.js +123 -0
- package/dist/routes/claudia.routes.js.map +1 -0
- package/dist/routes/config.routes.d.ts +4 -0
- package/dist/routes/config.routes.d.ts.map +1 -0
- package/dist/routes/config.routes.js +27 -0
- package/dist/routes/config.routes.js.map +1 -0
- package/dist/routes/conversation.routes.d.ts +8 -0
- package/dist/routes/conversation.routes.d.ts.map +1 -0
- package/dist/routes/conversation.routes.js +870 -0
- package/dist/routes/conversation.routes.js.map +1 -0
- package/dist/routes/filesystem.routes.d.ts +4 -0
- package/dist/routes/filesystem.routes.d.ts.map +1 -0
- package/dist/routes/filesystem.routes.js +86 -0
- package/dist/routes/filesystem.routes.js.map +1 -0
- package/dist/routes/gemini.routes.d.ts +4 -0
- package/dist/routes/gemini.routes.d.ts.map +1 -0
- package/dist/routes/gemini.routes.js +93 -0
- package/dist/routes/gemini.routes.js.map +1 -0
- package/dist/routes/insights.routes.d.ts +17 -0
- package/dist/routes/insights.routes.d.ts.map +1 -0
- package/dist/routes/insights.routes.js +417 -0
- package/dist/routes/insights.routes.js.map +1 -0
- package/dist/routes/license.routes.d.ts +3 -0
- package/dist/routes/license.routes.d.ts.map +1 -0
- package/dist/routes/license.routes.js +111 -0
- package/dist/routes/license.routes.js.map +1 -0
- package/dist/routes/log.routes.d.ts +3 -0
- package/dist/routes/log.routes.d.ts.map +1 -0
- package/dist/routes/log.routes.js +65 -0
- package/dist/routes/log.routes.js.map +1 -0
- package/dist/routes/notifications.routes.d.ts +4 -0
- package/dist/routes/notifications.routes.d.ts.map +1 -0
- package/dist/routes/notifications.routes.js +71 -0
- package/dist/routes/notifications.routes.js.map +1 -0
- package/dist/routes/permission.routes.d.ts +4 -0
- package/dist/routes/permission.routes.d.ts.map +1 -0
- package/dist/routes/permission.routes.js +116 -0
- package/dist/routes/permission.routes.js.map +1 -0
- package/dist/routes/question.routes.d.ts +8 -0
- package/dist/routes/question.routes.d.ts.map +1 -0
- package/dist/routes/question.routes.js +82 -0
- package/dist/routes/question.routes.js.map +1 -0
- package/dist/routes/streaming.routes.d.ts +4 -0
- package/dist/routes/streaming.routes.d.ts.map +1 -0
- package/dist/routes/streaming.routes.js +28 -0
- package/dist/routes/streaming.routes.js.map +1 -0
- package/dist/routes/system.routes.d.ts +5 -0
- package/dist/routes/system.routes.d.ts.map +1 -0
- package/dist/routes/system.routes.js +103 -0
- package/dist/routes/system.routes.js.map +1 -0
- package/dist/routes/working-directories.routes.d.ts +4 -0
- package/dist/routes/working-directories.routes.d.ts.map +1 -0
- package/dist/routes/working-directories.routes.js +25 -0
- package/dist/routes/working-directories.routes.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +34 -0
- package/dist/server.js.map +1 -0
- package/dist/services/ToolMetricsService.d.ts +53 -0
- package/dist/services/ToolMetricsService.d.ts.map +1 -0
- package/dist/services/ToolMetricsService.js +230 -0
- package/dist/services/ToolMetricsService.js.map +1 -0
- package/dist/services/anthropic-service.d.ts +186 -0
- package/dist/services/anthropic-service.d.ts.map +1 -0
- package/dist/services/anthropic-service.js +1132 -0
- package/dist/services/anthropic-service.js.map +1 -0
- package/dist/services/claude-history-reader.d.ts +126 -0
- package/dist/services/claude-history-reader.d.ts.map +1 -0
- package/dist/services/claude-history-reader.js +717 -0
- package/dist/services/claude-history-reader.js.map +1 -0
- package/dist/services/claude-process-manager.d.ts +108 -0
- package/dist/services/claude-process-manager.d.ts.map +1 -0
- package/dist/services/claude-process-manager.js +909 -0
- package/dist/services/claude-process-manager.js.map +1 -0
- package/dist/services/claude-router-service.d.ts +19 -0
- package/dist/services/claude-router-service.d.ts.map +1 -0
- package/dist/services/claude-router-service.js +160 -0
- package/dist/services/claude-router-service.js.map +1 -0
- package/dist/services/claudia-service.d.ts +77 -0
- package/dist/services/claudia-service.d.ts.map +1 -0
- package/dist/services/claudia-service.js +194 -0
- package/dist/services/claudia-service.js.map +1 -0
- package/dist/services/commands-service.d.ts +18 -0
- package/dist/services/commands-service.d.ts.map +1 -0
- package/dist/services/commands-service.js +76 -0
- package/dist/services/commands-service.js.map +1 -0
- package/dist/services/config-service.d.ts +68 -0
- package/dist/services/config-service.d.ts.map +1 -0
- package/dist/services/config-service.js +429 -0
- package/dist/services/config-service.js.map +1 -0
- package/dist/services/conversation-cache.d.ts +86 -0
- package/dist/services/conversation-cache.d.ts.map +1 -0
- package/dist/services/conversation-cache.js +235 -0
- package/dist/services/conversation-cache.js.map +1 -0
- package/dist/services/conversation-status-manager.d.ts +98 -0
- package/dist/services/conversation-status-manager.d.ts.map +1 -0
- package/dist/services/conversation-status-manager.js +295 -0
- package/dist/services/conversation-status-manager.js.map +1 -0
- package/dist/services/cost-tracker.d.ts +87 -0
- package/dist/services/cost-tracker.d.ts.map +1 -0
- package/dist/services/cost-tracker.js +335 -0
- package/dist/services/cost-tracker.js.map +1 -0
- package/dist/services/file-system-service.d.ts +61 -0
- package/dist/services/file-system-service.d.ts.map +1 -0
- package/dist/services/file-system-service.js +348 -0
- package/dist/services/file-system-service.js.map +1 -0
- package/dist/services/gemini-service.d.ts +72 -0
- package/dist/services/gemini-service.d.ts.map +1 -0
- package/dist/services/gemini-service.js +431 -0
- package/dist/services/gemini-service.js.map +1 -0
- package/dist/services/insight-queue.d.ts +99 -0
- package/dist/services/insight-queue.d.ts.map +1 -0
- package/dist/services/insight-queue.js +277 -0
- package/dist/services/insight-queue.js.map +1 -0
- package/dist/services/insights-service.d.ts +102 -0
- package/dist/services/insights-service.d.ts.map +1 -0
- package/dist/services/insights-service.js +1152 -0
- package/dist/services/insights-service.js.map +1 -0
- package/dist/services/json-lines-parser.d.ts +19 -0
- package/dist/services/json-lines-parser.d.ts.map +1 -0
- package/dist/services/json-lines-parser.js +56 -0
- package/dist/services/json-lines-parser.js.map +1 -0
- package/dist/services/license-service.d.ts +69 -0
- package/dist/services/license-service.d.ts.map +1 -0
- package/dist/services/license-service.js +330 -0
- package/dist/services/license-service.js.map +1 -0
- package/dist/services/log-formatter.d.ts +5 -0
- package/dist/services/log-formatter.d.ts.map +1 -0
- package/dist/services/log-formatter.js +77 -0
- package/dist/services/log-formatter.js.map +1 -0
- package/dist/services/log-stream-buffer.d.ts +11 -0
- package/dist/services/log-stream-buffer.d.ts.map +1 -0
- package/dist/services/log-stream-buffer.js +36 -0
- package/dist/services/log-stream-buffer.js.map +1 -0
- package/dist/services/logger.d.ts +71 -0
- package/dist/services/logger.d.ts.map +1 -0
- package/dist/services/logger.js +215 -0
- package/dist/services/logger.js.map +1 -0
- package/dist/services/mcp-config-generator.d.ts +32 -0
- package/dist/services/mcp-config-generator.d.ts.map +1 -0
- package/dist/services/mcp-config-generator.js +126 -0
- package/dist/services/mcp-config-generator.js.map +1 -0
- package/dist/services/message-filter.d.ts +22 -0
- package/dist/services/message-filter.d.ts.map +1 -0
- package/dist/services/message-filter.js +57 -0
- package/dist/services/message-filter.js.map +1 -0
- package/dist/services/notification-service.d.ts +45 -0
- package/dist/services/notification-service.d.ts.map +1 -0
- package/dist/services/notification-service.js +184 -0
- package/dist/services/notification-service.js.map +1 -0
- package/dist/services/permission-tracker.d.ts +67 -0
- package/dist/services/permission-tracker.d.ts.map +1 -0
- package/dist/services/permission-tracker.js +161 -0
- package/dist/services/permission-tracker.js.map +1 -0
- package/dist/services/process-manager-factory.d.ts +81 -0
- package/dist/services/process-manager-factory.d.ts.map +1 -0
- package/dist/services/process-manager-factory.js +211 -0
- package/dist/services/process-manager-factory.js.map +1 -0
- package/dist/services/question-tracker.d.ts +47 -0
- package/dist/services/question-tracker.d.ts.map +1 -0
- package/dist/services/question-tracker.js +105 -0
- package/dist/services/question-tracker.js.map +1 -0
- package/dist/services/session-activity-watcher.d.ts +33 -0
- package/dist/services/session-activity-watcher.d.ts.map +1 -0
- package/dist/services/session-activity-watcher.js +194 -0
- package/dist/services/session-activity-watcher.js.map +1 -0
- package/dist/services/session-info-service.d.ts +228 -0
- package/dist/services/session-info-service.d.ts.map +1 -0
- package/dist/services/session-info-service.js +920 -0
- package/dist/services/session-info-service.js.map +1 -0
- package/dist/services/session-insights-service.d.ts +119 -0
- package/dist/services/session-insights-service.d.ts.map +1 -0
- package/dist/services/session-insights-service.js +889 -0
- package/dist/services/session-insights-service.js.map +1 -0
- package/dist/services/stream-manager.d.ts +62 -0
- package/dist/services/stream-manager.d.ts.map +1 -0
- package/dist/services/stream-manager.js +239 -0
- package/dist/services/stream-manager.js.map +1 -0
- package/dist/services/web-push-service.d.ts +48 -0
- package/dist/services/web-push-service.d.ts.map +1 -0
- package/dist/services/web-push-service.js +186 -0
- package/dist/services/web-push-service.js.map +1 -0
- package/dist/services/working-directories-service.d.ts +19 -0
- package/dist/services/working-directories-service.d.ts.map +1 -0
- package/dist/services/working-directories-service.js +103 -0
- package/dist/services/working-directories-service.js.map +1 -0
- package/dist/types/config.d.ts +111 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +14 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/express.d.ts +5 -0
- package/dist/types/express.d.ts.map +1 -0
- package/dist/types/express.js +2 -0
- package/dist/types/express.js.map +1 -0
- package/dist/types/index.d.ts +325 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +18 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/insights.d.ts +99 -0
- package/dist/types/insights.d.ts.map +1 -0
- package/dist/types/insights.js +7 -0
- package/dist/types/insights.js.map +1 -0
- package/dist/types/license.d.ts +70 -0
- package/dist/types/license.d.ts.map +1 -0
- package/dist/types/license.js +5 -0
- package/dist/types/license.js.map +1 -0
- package/dist/types/router-config.d.ts +13 -0
- package/dist/types/router-config.d.ts.map +1 -0
- package/dist/types/router-config.js +2 -0
- package/dist/types/router-config.js.map +1 -0
- package/dist/utils/constants.d.ts +26 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +28 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/machine-id.d.ts +7 -0
- package/dist/utils/machine-id.d.ts.map +1 -0
- package/dist/utils/machine-id.js +76 -0
- package/dist/utils/machine-id.js.map +1 -0
- package/dist/utils/server-startup.d.ts +13 -0
- package/dist/utils/server-startup.d.ts.map +1 -0
- package/dist/utils/server-startup.js +20 -0
- package/dist/utils/server-startup.js.map +1 -0
- package/dist/web/assets/main-DAc2rjJ2.css +1 -0
- package/dist/web/assets/main-DvlZ02mT.js +137 -0
- package/dist/web/favicon.png +0 -0
- package/dist/web/favicon.svg +22 -0
- package/dist/web/icon-192x192.png +0 -0
- package/dist/web/icon-512x512.png +0 -0
- package/dist/web/index.html +36 -0
- package/dist/web/manifest.json +61 -0
- package/package.json +174 -0
- package/scripts/postinstall.js +30 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp-server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Request, Response, NextFunction } from 'express';
|
|
2
|
+
/**
|
|
3
|
+
* Clear all rate limit entries (for testing)
|
|
4
|
+
*/
|
|
5
|
+
export declare function clearRateLimitStore(): void;
|
|
6
|
+
/**
|
|
7
|
+
* Creates authentication middleware for API endpoints
|
|
8
|
+
* @param tokenOverride - Optional token to use instead of config token
|
|
9
|
+
* @returns Express middleware function
|
|
10
|
+
*/
|
|
11
|
+
export declare function createAuthMiddleware(tokenOverride?: string): (req: Request, res: Response, next: NextFunction) => void;
|
|
12
|
+
/**
|
|
13
|
+
* Authentication middleware for API endpoints
|
|
14
|
+
* Validates Bearer token against config
|
|
15
|
+
* Disabled in test environment unless ENABLE_AUTH_IN_TESTS is set
|
|
16
|
+
*/
|
|
17
|
+
export declare function authMiddleware(req: Request, res: Response, next: NextFunction): void;
|
|
18
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAuB1D;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAmCD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAItH;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAEpF"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { ConfigService } from '../services/config-service.js';
|
|
2
|
+
import { createLogger } from '../services/logger.js';
|
|
3
|
+
const logger = createLogger('AuthMiddleware');
|
|
4
|
+
// Rate limiting storage (in-memory for simplicity)
|
|
5
|
+
const rateLimitStore = new Map();
|
|
6
|
+
const RATE_LIMIT_WINDOW = 1000; // 1 second
|
|
7
|
+
const MAX_ATTEMPTS = 10;
|
|
8
|
+
/**
|
|
9
|
+
* Clean up expired rate limit entries
|
|
10
|
+
*/
|
|
11
|
+
function cleanupRateLimit() {
|
|
12
|
+
const now = Date.now();
|
|
13
|
+
for (const [ip, data] of rateLimitStore.entries()) {
|
|
14
|
+
if (now >= data.resetTime) {
|
|
15
|
+
rateLimitStore.delete(ip);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Clear all rate limit entries (for testing)
|
|
21
|
+
*/
|
|
22
|
+
export function clearRateLimitStore() {
|
|
23
|
+
rateLimitStore.clear();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Check if IP has exceeded rate limit
|
|
27
|
+
*/
|
|
28
|
+
function isRateLimited(ip) {
|
|
29
|
+
cleanupRateLimit();
|
|
30
|
+
const data = rateLimitStore.get(ip);
|
|
31
|
+
if (!data) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
return data.attempts >= MAX_ATTEMPTS && Date.now() < data.resetTime;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Record failed auth attempt
|
|
38
|
+
*/
|
|
39
|
+
function recordFailedAttempt(ip) {
|
|
40
|
+
cleanupRateLimit();
|
|
41
|
+
const now = Date.now();
|
|
42
|
+
const data = rateLimitStore.get(ip);
|
|
43
|
+
if (!data || now >= data.resetTime) {
|
|
44
|
+
rateLimitStore.set(ip, {
|
|
45
|
+
attempts: 1,
|
|
46
|
+
resetTime: now + RATE_LIMIT_WINDOW
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
data.attempts++;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Creates authentication middleware for API endpoints
|
|
55
|
+
* @param tokenOverride - Optional token to use instead of config token
|
|
56
|
+
* @returns Express middleware function
|
|
57
|
+
*/
|
|
58
|
+
export function createAuthMiddleware(tokenOverride) {
|
|
59
|
+
return (req, res, next) => {
|
|
60
|
+
authMiddlewareImpl(req, res, next, tokenOverride);
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Authentication middleware for API endpoints
|
|
65
|
+
* Validates Bearer token against config
|
|
66
|
+
* Disabled in test environment unless ENABLE_AUTH_IN_TESTS is set
|
|
67
|
+
*/
|
|
68
|
+
export function authMiddleware(req, res, next) {
|
|
69
|
+
authMiddlewareImpl(req, res, next);
|
|
70
|
+
}
|
|
71
|
+
function authMiddlewareImpl(req, res, next, tokenOverride) {
|
|
72
|
+
// Skip auth in test environment unless explicitly enabled for auth tests
|
|
73
|
+
if (process.env.NODE_ENV === 'test' && !process.env.ENABLE_AUTH_IN_TESTS) {
|
|
74
|
+
next();
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const clientIp = req.ip || req.connection.remoteAddress || 'unknown';
|
|
78
|
+
// Check if request is from localhost
|
|
79
|
+
const isLocalhost = clientIp === '127.0.0.1' || clientIp === '::1' || clientIp === '::ffff:127.0.0.1';
|
|
80
|
+
// Tailscale Serve proxies requests locally and adds identity headers
|
|
81
|
+
// Only trust these headers when request comes from localhost (Tailscale's local proxy)
|
|
82
|
+
const tailscaleUser = req.headers['tailscale-user-login'];
|
|
83
|
+
if (isLocalhost && tailscaleUser) {
|
|
84
|
+
logger.debug('Tailscale Serve authenticated request', { user: tailscaleUser });
|
|
85
|
+
next();
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
// Skip auth for localhost requests without Tailscale (direct local access)
|
|
89
|
+
if (isLocalhost) {
|
|
90
|
+
logger.debug('Localhost request, skipping auth', { ip: clientIp });
|
|
91
|
+
next();
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
// Check rate limiting
|
|
95
|
+
if (isRateLimited(clientIp)) {
|
|
96
|
+
logger.warn('Rate limit exceeded', { ip: clientIp });
|
|
97
|
+
res.status(429).json({ error: 'Too many authentication attempts. Try again later.' });
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
// Extract Bearer token from Authorization header OR query parameter (for SSE which can't set headers)
|
|
102
|
+
const authHeader = req.headers.authorization;
|
|
103
|
+
const queryToken = req.query.token;
|
|
104
|
+
let token;
|
|
105
|
+
if (authHeader?.startsWith('Bearer ')) {
|
|
106
|
+
token = authHeader.substring(7); // Remove 'Bearer ' prefix
|
|
107
|
+
}
|
|
108
|
+
else if (queryToken) {
|
|
109
|
+
token = queryToken; // Fallback to query param for SSE connections
|
|
110
|
+
}
|
|
111
|
+
if (!token) {
|
|
112
|
+
recordFailedAttempt(clientIp);
|
|
113
|
+
logger.debug('Missing Authorization header and query token', { ip: clientIp });
|
|
114
|
+
res.status(401).json({ error: 'Unauthorized' });
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
// Get expected token from config or use override
|
|
118
|
+
const expectedToken = tokenOverride ?? ConfigService.getInstance().getConfig().authToken;
|
|
119
|
+
// Validate token
|
|
120
|
+
if (token !== expectedToken) {
|
|
121
|
+
recordFailedAttempt(clientIp);
|
|
122
|
+
logger.warn('Invalid auth token', { ip: clientIp });
|
|
123
|
+
res.status(401).json({ error: 'Unauthorized' });
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
// Token is valid, proceed
|
|
127
|
+
logger.debug('Authentication successful', { ip: clientIp });
|
|
128
|
+
next();
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
recordFailedAttempt(clientIp);
|
|
132
|
+
logger.error('Authentication error', { error, ip: clientIp });
|
|
133
|
+
res.status(401).json({ error: 'Unauthorized' });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import cors from 'cors';
|
|
2
|
+
export declare function createCorsMiddleware(): (req: cors.CorsRequest, res: {
|
|
3
|
+
statusCode?: number | undefined;
|
|
4
|
+
setHeader(key: string, value: string): any;
|
|
5
|
+
end(): any;
|
|
6
|
+
}, next: (err?: any) => any) => void;
|
|
7
|
+
//# sourceMappingURL=cors-setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cors-setup.d.ts","sourceRoot":"","sources":["../../src/middleware/cors-setup.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,wBAAgB,oBAAoB;cAKgsC,CAAC;;;aAAmH,CAAC,uBAAx1C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cors-setup.js","sourceRoot":"","sources":["../../src/middleware/cors-setup.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,CAAC;QACV,MAAM,EAAE,IAAI,EAAE,oBAAoB;QAClC,WAAW,EAAE,IAAI,CAAC,oBAAoB;KACvC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Response, NextFunction } from 'express';
|
|
2
|
+
import { RequestWithRequestId } from '../types/express.js';
|
|
3
|
+
export declare function errorHandler(err: Error, req: RequestWithRequestId, res: Response, _next: NextFunction): void;
|
|
4
|
+
//# sourceMappingURL=error-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/middleware/error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI1D,wBAAgB,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAsB5G"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { CUIError } from '../types/index.js';
|
|
2
|
+
import { createLogger } from '../services/logger.js';
|
|
3
|
+
const logger = createLogger('ErrorHandler');
|
|
4
|
+
export function errorHandler(err, req, res, _next) {
|
|
5
|
+
const requestId = req.requestId || 'unknown';
|
|
6
|
+
if (err instanceof CUIError) {
|
|
7
|
+
logger.warn('CUIError in request', {
|
|
8
|
+
requestId,
|
|
9
|
+
code: err.code,
|
|
10
|
+
message: err.message,
|
|
11
|
+
statusCode: err.statusCode,
|
|
12
|
+
url: req.url,
|
|
13
|
+
method: req.method
|
|
14
|
+
});
|
|
15
|
+
res.status(err.statusCode).json({ error: err.message, code: err.code });
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
logger.error('Unhandled error', err, {
|
|
19
|
+
requestId,
|
|
20
|
+
url: req.url,
|
|
21
|
+
method: req.method,
|
|
22
|
+
errorType: err.constructor.name
|
|
23
|
+
});
|
|
24
|
+
res.status(500).json({ error: 'Internal server error' });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/middleware/error-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;AAE5C,MAAM,UAAU,YAAY,CAAC,GAAU,EAAE,GAAyB,EAAE,GAAa,EAAE,KAAmB;IACpG,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC;IAE7C,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE;YACjC,SAAS;YACT,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC,CAAC;QACH,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,EAAE;YACnC,SAAS;YACT,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI;SAChC,CAAC,CAAC;QACH,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Request, Response, NextFunction } from 'express';
|
|
2
|
+
/**
|
|
3
|
+
* Middleware to parse and convert query parameters to their proper types
|
|
4
|
+
*
|
|
5
|
+
* This middleware automatically converts:
|
|
6
|
+
* - Numeric strings to numbers
|
|
7
|
+
* - Boolean strings ('true', 'false') to booleans
|
|
8
|
+
* - Preserves other types as-is
|
|
9
|
+
*/
|
|
10
|
+
export declare function queryParser(req: Request, res: Response, next: NextFunction): void;
|
|
11
|
+
//# sourceMappingURL=query-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-parser.d.ts","sourceRoot":"","sources":["../../src/middleware/query-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE1D;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAqBjF"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware to parse and convert query parameters to their proper types
|
|
3
|
+
*
|
|
4
|
+
* This middleware automatically converts:
|
|
5
|
+
* - Numeric strings to numbers
|
|
6
|
+
* - Boolean strings ('true', 'false') to booleans
|
|
7
|
+
* - Preserves other types as-is
|
|
8
|
+
*/
|
|
9
|
+
export function queryParser(req, res, next) {
|
|
10
|
+
if (!req.query || typeof req.query !== 'object') {
|
|
11
|
+
return next();
|
|
12
|
+
}
|
|
13
|
+
// Create a new object to store converted values
|
|
14
|
+
const convertedQuery = {};
|
|
15
|
+
for (const [key, value] of Object.entries(req.query)) {
|
|
16
|
+
// Handle array values (e.g., ?key=1&key=2)
|
|
17
|
+
if (Array.isArray(value)) {
|
|
18
|
+
convertedQuery[key] = value.map(v => convertValue(v));
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
convertedQuery[key] = convertValue(value);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// Replace the original query with converted values
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
26
|
+
req.query = convertedQuery; // Express query type expects string | string[], but we're converting to proper types
|
|
27
|
+
next();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Convert a single value to its appropriate type
|
|
31
|
+
*/
|
|
32
|
+
function convertValue(value) {
|
|
33
|
+
// Handle null and undefined
|
|
34
|
+
if (value === null || value === undefined) {
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
// If already a number or boolean, return as-is
|
|
38
|
+
if (typeof value === 'number' || typeof value === 'boolean') {
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
// If not a string, convert to string
|
|
42
|
+
if (typeof value !== 'string') {
|
|
43
|
+
return String(value);
|
|
44
|
+
}
|
|
45
|
+
// Empty string remains empty string
|
|
46
|
+
if (value === '') {
|
|
47
|
+
return value;
|
|
48
|
+
}
|
|
49
|
+
// Boolean conversion
|
|
50
|
+
if (value.toLowerCase() === 'true') {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
if (value.toLowerCase() === 'false') {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
// Number conversion
|
|
57
|
+
// Check if it's a valid number (including decimals)
|
|
58
|
+
if (/^-?\d+(\.\d+)?$/.test(value)) {
|
|
59
|
+
const num = Number(value);
|
|
60
|
+
// Ensure the conversion didn't produce NaN or Infinity
|
|
61
|
+
if (!isNaN(num) && isFinite(num)) {
|
|
62
|
+
return num;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Return original string if no conversion applied
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=query-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-parser.js","sourceRoot":"","sources":["../../src/middleware/query-parser.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IACzE,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,gDAAgD;IAChD,MAAM,cAAc,GAAoH,EAAE,CAAC;IAE3I,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD,2CAA2C;QAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,cAAc,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,mDAAmD;IACnD,8DAA8D;IAC9D,GAAG,CAAC,KAAK,GAAG,cAAqB,CAAC,CAAC,qFAAqF;IACxH,IAAI,EAAE,CAAC;AACT,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,KAAc;IAClC,4BAA4B;IAC5B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,+CAA+C;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qCAAqC;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,oCAAoC;IACpC,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qBAAqB;IACrB,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,oBAAoB;IACpB,oDAAoD;IACpD,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,uDAAuD;QACvD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-logger.d.ts","sourceRoot":"","sources":["../../src/middleware/request-logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,wBAAgB,aAAa,CAAC,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CA8BhG"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export function requestLogger(req, res, next) {
|
|
2
|
+
const requestId = Math.random().toString(36).substring(7);
|
|
3
|
+
req.requestId = requestId;
|
|
4
|
+
// Commented out for now - keeping structure for future use
|
|
5
|
+
// logger.debug('Incoming request', {
|
|
6
|
+
// method: req.method,
|
|
7
|
+
// url: req.url,
|
|
8
|
+
// requestId,
|
|
9
|
+
// headers: {
|
|
10
|
+
// 'content-type': req.headers['content-type'],
|
|
11
|
+
// 'user-agent': req.headers['user-agent']
|
|
12
|
+
// },
|
|
13
|
+
// query: req.query,
|
|
14
|
+
// ip: req.ip
|
|
15
|
+
// });
|
|
16
|
+
// Log response when finished
|
|
17
|
+
res.on('finish', () => {
|
|
18
|
+
// logger.debug('Request completed', {
|
|
19
|
+
// requestId,
|
|
20
|
+
// method: req.method,
|
|
21
|
+
// url: req.url,
|
|
22
|
+
// statusCode: res.statusCode,
|
|
23
|
+
// duration: Date.now() - startTime,
|
|
24
|
+
// contentLength: res.get('content-length')
|
|
25
|
+
// });
|
|
26
|
+
});
|
|
27
|
+
next();
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=request-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-logger.js","sourceRoot":"","sources":["../../src/middleware/request-logger.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,aAAa,CAAC,GAAyB,EAAE,GAAa,EAAE,IAAkB;IACxF,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1D,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;IAE1B,2DAA2D;IAC3D,sCAAsC;IACtC,yBAAyB;IACzB,kBAAkB;IAClB,eAAe;IACf,eAAe;IACf,mDAAmD;IACnD,8CAA8C;IAC9C,OAAO;IACP,sBAAsB;IACtB,eAAe;IACf,MAAM;IAEN,6BAA6B;IAC7B,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACpB,sCAAsC;QACtC,eAAe;QACf,wBAAwB;QACxB,kBAAkB;QAClB,gCAAgC;QAChC,sCAAsC;QACtC,6CAA6C;QAC7C,MAAM;IACR,CAAC,CAAC,CAAC;IAEH,IAAI,EAAE,CAAC;AACT,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Process Daemon Entry Point
|
|
4
|
+
*
|
|
5
|
+
* Run this separately from the main cui-server. It manages Claude CLI processes
|
|
6
|
+
* and survives nodemon restarts of the web server.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npx tsx src/process-daemon/index.ts
|
|
10
|
+
* # or after build:
|
|
11
|
+
* node dist/process-daemon/index.js
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/process-daemon/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Process Daemon Entry Point
|
|
4
|
+
*
|
|
5
|
+
* Run this separately from the main cui-server. It manages Claude CLI processes
|
|
6
|
+
* and survives nodemon restarts of the web server.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npx tsx src/process-daemon/index.ts
|
|
10
|
+
* # or after build:
|
|
11
|
+
* node dist/process-daemon/index.js
|
|
12
|
+
*/
|
|
13
|
+
import { ProcessDaemon } from './process-daemon.js';
|
|
14
|
+
import { DEFAULT_SOCKET_PATH } from './types.js';
|
|
15
|
+
const daemon = new ProcessDaemon({
|
|
16
|
+
socketPath: process.env.CUI_DAEMON_SOCKET || DEFAULT_SOCKET_PATH,
|
|
17
|
+
});
|
|
18
|
+
// Graceful shutdown handling
|
|
19
|
+
async function shutdown(signal) {
|
|
20
|
+
console.log(`\n[DAEMON] Received ${signal}, shutting down...`);
|
|
21
|
+
try {
|
|
22
|
+
await daemon.stop();
|
|
23
|
+
process.exit(0);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
console.error('[DAEMON] Error during shutdown:', error);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
31
|
+
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
32
|
+
// Handle uncaught errors
|
|
33
|
+
process.on('uncaughtException', (error) => {
|
|
34
|
+
console.error('[DAEMON] Uncaught exception:', error);
|
|
35
|
+
shutdown('uncaughtException');
|
|
36
|
+
});
|
|
37
|
+
process.on('unhandledRejection', (reason) => {
|
|
38
|
+
console.error('[DAEMON] Unhandled rejection:', reason);
|
|
39
|
+
shutdown('unhandledRejection');
|
|
40
|
+
});
|
|
41
|
+
// Start the daemon
|
|
42
|
+
daemon
|
|
43
|
+
.start()
|
|
44
|
+
.then(() => {
|
|
45
|
+
console.log('[DAEMON] Process daemon is running. Press Ctrl+C to stop.');
|
|
46
|
+
})
|
|
47
|
+
.catch((error) => {
|
|
48
|
+
console.error('[DAEMON] Failed to start:', error);
|
|
49
|
+
process.exit(1);
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/process-daemon/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC;IAC/B,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,mBAAmB;CACjE,CAAC,CAAC;AAEH,6BAA6B;AAC7B,KAAK,UAAU,QAAQ,CAAC,MAAc;IACpC,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,oBAAoB,CAAC,CAAC;IAC/D,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AAEjD,yBAAyB;AACzB,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;IACxC,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;IACrD,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AAChC,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,MAAM,CAAC,CAAC;IACvD,QAAQ,CAAC,oBAAoB,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEH,mBAAmB;AACnB,MAAM;KACH,KAAK,EAAE;KACP,IAAI,CAAC,GAAG,EAAE;IACT,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;AAC3E,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process Daemon - Long-running process that owns Claude CLI PTY processes
|
|
3
|
+
*
|
|
4
|
+
* This daemon runs independently of the web server and survives nodemon restarts.
|
|
5
|
+
* It communicates with cui-server via Unix socket IPC.
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'events';
|
|
8
|
+
import { DaemonConfig } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Process Daemon - owns and manages Claude CLI PTY processes
|
|
11
|
+
*/
|
|
12
|
+
export declare class ProcessDaemon extends EventEmitter {
|
|
13
|
+
private processes;
|
|
14
|
+
private outputBuffers;
|
|
15
|
+
private timeouts;
|
|
16
|
+
private conversationConfigs;
|
|
17
|
+
private sessionIds;
|
|
18
|
+
private killedProcesses;
|
|
19
|
+
private ipcServer;
|
|
20
|
+
private connectedClients;
|
|
21
|
+
private socketPath;
|
|
22
|
+
private claudeExecutablePath;
|
|
23
|
+
private envOverrides;
|
|
24
|
+
private pendingSystemInits;
|
|
25
|
+
constructor(config?: DaemonConfig);
|
|
26
|
+
/**
|
|
27
|
+
* Find the Claude executable
|
|
28
|
+
*/
|
|
29
|
+
private findClaudeExecutable;
|
|
30
|
+
/**
|
|
31
|
+
* Check if another daemon is already running by attempting to connect to the socket.
|
|
32
|
+
* Returns true if a daemon is actively listening, false if socket is stale or missing.
|
|
33
|
+
*/
|
|
34
|
+
private isExistingDaemonRunning;
|
|
35
|
+
/**
|
|
36
|
+
* Start the IPC server
|
|
37
|
+
*/
|
|
38
|
+
start(): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Stop the daemon gracefully
|
|
41
|
+
*/
|
|
42
|
+
stop(): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Handle a new client connection
|
|
45
|
+
*/
|
|
46
|
+
private handleClientConnection;
|
|
47
|
+
/**
|
|
48
|
+
* Handle an IPC request
|
|
49
|
+
*/
|
|
50
|
+
private handleRequest;
|
|
51
|
+
/**
|
|
52
|
+
* Send a response to a specific client
|
|
53
|
+
*/
|
|
54
|
+
private sendResponse;
|
|
55
|
+
/**
|
|
56
|
+
* Broadcast an event to all connected clients
|
|
57
|
+
*/
|
|
58
|
+
private broadcastEvent;
|
|
59
|
+
private handleSpawn;
|
|
60
|
+
private handleStop;
|
|
61
|
+
private handleForceKill;
|
|
62
|
+
private handleWrite;
|
|
63
|
+
private handleSendQuestionAnswer;
|
|
64
|
+
private stopConversation;
|
|
65
|
+
private forceKillConversation;
|
|
66
|
+
private getActiveSessions;
|
|
67
|
+
private isSessionActive;
|
|
68
|
+
private cleanup;
|
|
69
|
+
private setupProcessHandlers;
|
|
70
|
+
private handleClaudeMessage;
|
|
71
|
+
private handleProcessClose;
|
|
72
|
+
private handleProcessError;
|
|
73
|
+
private buildBaseArgs;
|
|
74
|
+
private buildResumeArgs;
|
|
75
|
+
private buildStartArgs;
|
|
76
|
+
private waitForSystemInit;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=process-daemon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-daemon.d.ts","sourceRoot":"","sources":["../../src/process-daemon/process-daemon.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAQtC,OAAO,EAUL,YAAY,EAEb,MAAM,YAAY,CAAC;AAgCpB;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,QAAQ,CAA4C;IAC5D,OAAO,CAAC,mBAAmB,CAA8C;IACzE,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,eAAe,CAA0B;IAEjD,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,gBAAgB,CAA8B;IACtD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,YAAY,CAAqC;IAGzD,OAAO,CAAC,kBAAkB,CAOZ;gBAEF,MAAM,GAAE,YAAkD;IAOtE;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA2B5B;;;OAGG;YACW,uBAAuB;IA4BrC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoC5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiC3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAoC9B;;OAEG;YACW,aAAa;IA6C3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACH,OAAO,CAAC,cAAc;YAeR,WAAW;YAiEX,UAAU;IAKxB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,wBAAwB;YAqBlB,gBAAgB;IAsC9B,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,OAAO;IAkBf,OAAO,CAAC,oBAAoB;IA8B5B,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,cAAc;IAiDtB,OAAO,CAAC,iBAAiB;CAU1B"}
|