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,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process Manager Client - Drop-in replacement for ClaudeProcessManager
|
|
3
|
+
*
|
|
4
|
+
* This client connects to the process daemon via Unix socket and provides
|
|
5
|
+
* the same interface as ClaudeProcessManager, so cui-server can swap them
|
|
6
|
+
* with minimal code changes.
|
|
7
|
+
*/
|
|
8
|
+
import { EventEmitter } from 'events';
|
|
9
|
+
import { ConversationConfig, SystemInitMessage } from '../types/index.js';
|
|
10
|
+
/**
|
|
11
|
+
* Client that talks to the process daemon via Unix socket.
|
|
12
|
+
* Implements the same interface as ClaudeProcessManager.
|
|
13
|
+
*/
|
|
14
|
+
export declare class ProcessManagerClient extends EventEmitter {
|
|
15
|
+
private socket;
|
|
16
|
+
private socketPath;
|
|
17
|
+
private logger;
|
|
18
|
+
private connected;
|
|
19
|
+
private reconnecting;
|
|
20
|
+
private shuttingDown;
|
|
21
|
+
private reconnectTimer;
|
|
22
|
+
private requestId;
|
|
23
|
+
private pendingRequests;
|
|
24
|
+
private buffer;
|
|
25
|
+
constructor(socketPath?: string);
|
|
26
|
+
/**
|
|
27
|
+
* Connect to the process daemon
|
|
28
|
+
*/
|
|
29
|
+
connect(): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Schedule a reconnection attempt
|
|
32
|
+
*/
|
|
33
|
+
private scheduleReconnect;
|
|
34
|
+
/**
|
|
35
|
+
* Handle incoming data from the daemon
|
|
36
|
+
*/
|
|
37
|
+
private handleData;
|
|
38
|
+
/**
|
|
39
|
+
* Handle a response to a request we made
|
|
40
|
+
*/
|
|
41
|
+
private handleResponse;
|
|
42
|
+
/**
|
|
43
|
+
* Handle an event broadcast from the daemon
|
|
44
|
+
*/
|
|
45
|
+
private handleEvent;
|
|
46
|
+
/**
|
|
47
|
+
* Send a request to the daemon and wait for response
|
|
48
|
+
*/
|
|
49
|
+
private sendRequest;
|
|
50
|
+
/**
|
|
51
|
+
* Disconnect from the daemon
|
|
52
|
+
*/
|
|
53
|
+
disconnect(): void;
|
|
54
|
+
/**
|
|
55
|
+
* Check if connected to daemon
|
|
56
|
+
*/
|
|
57
|
+
isConnected(): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Start a new conversation (or resume if resumedSessionId is provided)
|
|
60
|
+
*/
|
|
61
|
+
startConversation(config: ConversationConfig & {
|
|
62
|
+
resumedSessionId?: string;
|
|
63
|
+
}): Promise<{
|
|
64
|
+
streamingId: string;
|
|
65
|
+
systemInit: SystemInitMessage;
|
|
66
|
+
}>;
|
|
67
|
+
/**
|
|
68
|
+
* Stop a conversation
|
|
69
|
+
*/
|
|
70
|
+
stopConversation(streamingId: string): Promise<boolean>;
|
|
71
|
+
/**
|
|
72
|
+
* Force kill a conversation immediately
|
|
73
|
+
*/
|
|
74
|
+
forceKillConversation(streamingId: string): Promise<boolean>;
|
|
75
|
+
/**
|
|
76
|
+
* Get active sessions
|
|
77
|
+
*/
|
|
78
|
+
getActiveSessions(): Promise<string[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Check if a session is active
|
|
81
|
+
*/
|
|
82
|
+
isSessionActive(streamingId: string): Promise<boolean>;
|
|
83
|
+
/**
|
|
84
|
+
* Send an answer to an AskUserQuestion tool
|
|
85
|
+
*/
|
|
86
|
+
sendQuestionAnswer(streamingId: string, answer: string): Promise<boolean>;
|
|
87
|
+
/**
|
|
88
|
+
* Send a raw stdin message to a Claude process
|
|
89
|
+
*/
|
|
90
|
+
sendStdinMessage(streamingId: string, message: string): Promise<boolean>;
|
|
91
|
+
/**
|
|
92
|
+
* No-op: MCP config is handled by the daemon
|
|
93
|
+
*/
|
|
94
|
+
setMCPConfigPath(_path: string): void;
|
|
95
|
+
/**
|
|
96
|
+
* No-op: Status manager integration is handled by cui-server
|
|
97
|
+
*/
|
|
98
|
+
setConversationStatusManager(_service: unknown): void;
|
|
99
|
+
/**
|
|
100
|
+
* No-op: Notification service integration is handled by cui-server
|
|
101
|
+
*/
|
|
102
|
+
setNotificationService(_service: unknown): void;
|
|
103
|
+
/**
|
|
104
|
+
* No-op: Router service is not used in daemon mode yet
|
|
105
|
+
*/
|
|
106
|
+
setRouterService(_service: unknown): void;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=process-manager-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-manager-client.d.ts","sourceRoot":"","sources":["../../src/process-daemon/process-manager-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAY,MAAM,mBAAmB,CAAC;AAapF;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,YAAY;IACpD,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,eAAe,CAAkG;IACzH,OAAO,CAAC,MAAM,CAAM;gBAER,UAAU,GAAE,MAA4B;IAMpD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA0C9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6BzB;;OAEG;IACH,OAAO,CAAC,UAAU;IAwBlB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,WAAW;IAsBnB;;OAEG;YACW,WAAW;IA+BzB;;OAEG;IACH,UAAU,IAAI,IAAI;IAmBlB;;OAEG;IACH,WAAW,IAAI,OAAO;IAQtB;;OAEG;IACG,iBAAiB,CACrB,MAAM,EAAE,kBAAkB,GAAG;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,GACzD,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAWlE;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO7D;;OAEG;IACG,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOlE;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAK5C;;OAEG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK5D;;OAEG;IACG,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU/E;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAc9E;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrC;;OAEG;IACH,4BAA4B,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAIrD;;OAEG;IACH,sBAAsB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAI/C;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;CAG1C"}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process Manager Client - Drop-in replacement for ClaudeProcessManager
|
|
3
|
+
*
|
|
4
|
+
* This client connects to the process daemon via Unix socket and provides
|
|
5
|
+
* the same interface as ClaudeProcessManager, so cui-server can swap them
|
|
6
|
+
* with minimal code changes.
|
|
7
|
+
*/
|
|
8
|
+
import * as net from 'net';
|
|
9
|
+
import { EventEmitter } from 'events';
|
|
10
|
+
import { CUIError } from '../types/index.js';
|
|
11
|
+
import { DEFAULT_SOCKET_PATH, } from './types.js';
|
|
12
|
+
import { createLogger } from '../services/logger.js';
|
|
13
|
+
/**
|
|
14
|
+
* Client that talks to the process daemon via Unix socket.
|
|
15
|
+
* Implements the same interface as ClaudeProcessManager.
|
|
16
|
+
*/
|
|
17
|
+
export class ProcessManagerClient extends EventEmitter {
|
|
18
|
+
socket = null;
|
|
19
|
+
socketPath;
|
|
20
|
+
logger;
|
|
21
|
+
connected = false;
|
|
22
|
+
reconnecting = false;
|
|
23
|
+
shuttingDown = false; // Prevents reconnection during shutdown
|
|
24
|
+
reconnectTimer = null;
|
|
25
|
+
requestId = 0;
|
|
26
|
+
pendingRequests = new Map();
|
|
27
|
+
buffer = '';
|
|
28
|
+
constructor(socketPath = DEFAULT_SOCKET_PATH) {
|
|
29
|
+
super();
|
|
30
|
+
this.socketPath = socketPath;
|
|
31
|
+
this.logger = createLogger('ProcessManagerClient');
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Connect to the process daemon
|
|
35
|
+
*/
|
|
36
|
+
async connect() {
|
|
37
|
+
if (this.connected) {
|
|
38
|
+
this.logger.debug('Already connected to daemon');
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
return new Promise((resolve, reject) => {
|
|
42
|
+
this.socket = net.createConnection(this.socketPath, () => {
|
|
43
|
+
this.connected = true;
|
|
44
|
+
this.logger.info('Connected to process daemon', { socketPath: this.socketPath });
|
|
45
|
+
resolve();
|
|
46
|
+
});
|
|
47
|
+
this.socket.on('data', (data) => {
|
|
48
|
+
this.handleData(data);
|
|
49
|
+
});
|
|
50
|
+
this.socket.on('close', () => {
|
|
51
|
+
this.connected = false;
|
|
52
|
+
this.logger.warn('Disconnected from process daemon');
|
|
53
|
+
// Reject all pending requests
|
|
54
|
+
for (const [id, { reject }] of this.pendingRequests) {
|
|
55
|
+
reject(new CUIError('DAEMON_DISCONNECTED', 'Disconnected from process daemon', 503));
|
|
56
|
+
this.pendingRequests.delete(id);
|
|
57
|
+
}
|
|
58
|
+
// Attempt reconnection if not intentionally closed
|
|
59
|
+
if (!this.reconnecting) {
|
|
60
|
+
this.scheduleReconnect();
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
this.socket.on('error', (err) => {
|
|
64
|
+
this.logger.error('Socket error', err);
|
|
65
|
+
if (!this.connected) {
|
|
66
|
+
reject(new CUIError('DAEMON_CONNECTION_FAILED', `Failed to connect to process daemon: ${err.message}`, 503));
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Schedule a reconnection attempt
|
|
73
|
+
*/
|
|
74
|
+
scheduleReconnect() {
|
|
75
|
+
if (this.reconnecting || this.shuttingDown)
|
|
76
|
+
return;
|
|
77
|
+
this.reconnecting = true;
|
|
78
|
+
this.logger.info('Scheduling reconnection in 2 seconds...');
|
|
79
|
+
this.reconnectTimer = setTimeout(async () => {
|
|
80
|
+
this.reconnectTimer = null;
|
|
81
|
+
// Check shutdown flag before attempting reconnect
|
|
82
|
+
if (this.shuttingDown) {
|
|
83
|
+
this.reconnecting = false;
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
await this.connect();
|
|
88
|
+
this.reconnecting = false;
|
|
89
|
+
this.logger.info('Reconnected to process daemon');
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
this.reconnecting = false;
|
|
93
|
+
if (!this.shuttingDown) {
|
|
94
|
+
this.logger.error('Reconnection failed', error);
|
|
95
|
+
this.scheduleReconnect();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}, 2000);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Handle incoming data from the daemon
|
|
102
|
+
*/
|
|
103
|
+
handleData(data) {
|
|
104
|
+
this.buffer += data.toString();
|
|
105
|
+
const lines = this.buffer.split('\n');
|
|
106
|
+
this.buffer = lines.pop() || '';
|
|
107
|
+
for (const line of lines) {
|
|
108
|
+
if (!line.trim())
|
|
109
|
+
continue;
|
|
110
|
+
try {
|
|
111
|
+
const message = JSON.parse(line);
|
|
112
|
+
// Check if it's a response (has id) or an event
|
|
113
|
+
if ('id' in message) {
|
|
114
|
+
this.handleResponse(message);
|
|
115
|
+
}
|
|
116
|
+
else if ('event' in message) {
|
|
117
|
+
this.handleEvent(message);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
this.logger.error('Failed to parse daemon message', err, { line });
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Handle a response to a request we made
|
|
127
|
+
*/
|
|
128
|
+
handleResponse(response) {
|
|
129
|
+
const pending = this.pendingRequests.get(response.id);
|
|
130
|
+
if (!pending) {
|
|
131
|
+
this.logger.warn('Received response for unknown request', { id: response.id });
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
this.pendingRequests.delete(response.id);
|
|
135
|
+
if (response.error) {
|
|
136
|
+
pending.reject(new CUIError(response.error.code, response.error.message, 500));
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
pending.resolve(response.result);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Handle an event broadcast from the daemon
|
|
144
|
+
*/
|
|
145
|
+
handleEvent(event) {
|
|
146
|
+
switch (event.event) {
|
|
147
|
+
case 'claude-message': {
|
|
148
|
+
const data = event.data;
|
|
149
|
+
this.emit('claude-message', data);
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
case 'process-closed': {
|
|
153
|
+
const data = event.data;
|
|
154
|
+
this.emit('process-closed', data);
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
case 'process-error': {
|
|
158
|
+
const data = event.data;
|
|
159
|
+
this.emit('process-error', data);
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
default:
|
|
163
|
+
this.logger.warn('Unknown event type', { event: event.event });
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Send a request to the daemon and wait for response
|
|
168
|
+
*/
|
|
169
|
+
async sendRequest(method, params = {}) {
|
|
170
|
+
if (!this.connected || !this.socket) {
|
|
171
|
+
throw new CUIError('DAEMON_NOT_CONNECTED', 'Not connected to process daemon', 503);
|
|
172
|
+
}
|
|
173
|
+
const id = ++this.requestId;
|
|
174
|
+
const request = { id, method, params };
|
|
175
|
+
return new Promise((resolve, reject) => {
|
|
176
|
+
this.pendingRequests.set(id, {
|
|
177
|
+
resolve: resolve,
|
|
178
|
+
reject,
|
|
179
|
+
});
|
|
180
|
+
this.socket.write(JSON.stringify(request) + '\n', (err) => {
|
|
181
|
+
if (err) {
|
|
182
|
+
this.pendingRequests.delete(id);
|
|
183
|
+
reject(new CUIError('DAEMON_WRITE_FAILED', `Failed to send request: ${err.message}`, 500));
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
// Timeout after 120 seconds (spawn can take a while)
|
|
187
|
+
setTimeout(() => {
|
|
188
|
+
if (this.pendingRequests.has(id)) {
|
|
189
|
+
this.pendingRequests.delete(id);
|
|
190
|
+
reject(new CUIError('DAEMON_REQUEST_TIMEOUT', 'Request to process daemon timed out', 504));
|
|
191
|
+
}
|
|
192
|
+
}, 120000);
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Disconnect from the daemon
|
|
197
|
+
*/
|
|
198
|
+
disconnect() {
|
|
199
|
+
this.shuttingDown = true; // Permanently stop reconnection attempts
|
|
200
|
+
this.reconnecting = true; // Also set this for backwards compatibility
|
|
201
|
+
// Clear any pending reconnect timer
|
|
202
|
+
if (this.reconnectTimer) {
|
|
203
|
+
clearTimeout(this.reconnectTimer);
|
|
204
|
+
this.reconnectTimer = null;
|
|
205
|
+
}
|
|
206
|
+
if (this.socket) {
|
|
207
|
+
this.socket.destroy();
|
|
208
|
+
this.socket = null;
|
|
209
|
+
this.connected = false;
|
|
210
|
+
}
|
|
211
|
+
this.logger.info('Client disconnected and shutdown');
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Check if connected to daemon
|
|
215
|
+
*/
|
|
216
|
+
isConnected() {
|
|
217
|
+
return this.connected;
|
|
218
|
+
}
|
|
219
|
+
// ============================================================================
|
|
220
|
+
// ClaudeProcessManager-compatible Interface
|
|
221
|
+
// ============================================================================
|
|
222
|
+
/**
|
|
223
|
+
* Start a new conversation (or resume if resumedSessionId is provided)
|
|
224
|
+
*/
|
|
225
|
+
async startConversation(config) {
|
|
226
|
+
this.logger.debug('Starting conversation via daemon', {
|
|
227
|
+
hasInitialPrompt: !!config.initialPrompt,
|
|
228
|
+
workingDirectory: config.workingDirectory,
|
|
229
|
+
isResume: !!config.resumedSessionId,
|
|
230
|
+
});
|
|
231
|
+
const result = await this.sendRequest('spawn', { config });
|
|
232
|
+
return result;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Stop a conversation
|
|
236
|
+
*/
|
|
237
|
+
async stopConversation(streamingId) {
|
|
238
|
+
this.logger.debug('Stopping conversation via daemon', { streamingId });
|
|
239
|
+
const result = await this.sendRequest('stop', { streamingId });
|
|
240
|
+
return result.success;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Force kill a conversation immediately
|
|
244
|
+
*/
|
|
245
|
+
async forceKillConversation(streamingId) {
|
|
246
|
+
this.logger.debug('Force killing conversation via daemon', { streamingId });
|
|
247
|
+
const result = await this.sendRequest('forceKill', { streamingId });
|
|
248
|
+
return result.success;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Get active sessions
|
|
252
|
+
*/
|
|
253
|
+
async getActiveSessions() {
|
|
254
|
+
const result = await this.sendRequest('list');
|
|
255
|
+
return result.sessions;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Check if a session is active
|
|
259
|
+
*/
|
|
260
|
+
async isSessionActive(streamingId) {
|
|
261
|
+
const result = await this.sendRequest('isActive', { streamingId });
|
|
262
|
+
return result.active;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Send an answer to an AskUserQuestion tool
|
|
266
|
+
*/
|
|
267
|
+
async sendQuestionAnswer(streamingId, answer) {
|
|
268
|
+
this.logger.debug('Sending question answer via daemon', { streamingId });
|
|
269
|
+
const result = await this.sendRequest('sendQuestionAnswer', {
|
|
270
|
+
streamingId,
|
|
271
|
+
answer,
|
|
272
|
+
});
|
|
273
|
+
return result.success;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Send a raw stdin message to a Claude process
|
|
277
|
+
*/
|
|
278
|
+
async sendStdinMessage(streamingId, message) {
|
|
279
|
+
this.logger.debug('Sending stdin message via daemon', { streamingId });
|
|
280
|
+
const result = await this.sendRequest('write', {
|
|
281
|
+
streamingId,
|
|
282
|
+
message,
|
|
283
|
+
});
|
|
284
|
+
return result.success;
|
|
285
|
+
}
|
|
286
|
+
// ============================================================================
|
|
287
|
+
// Stubs for methods that are no longer needed (they're in the daemon now)
|
|
288
|
+
// ============================================================================
|
|
289
|
+
/**
|
|
290
|
+
* No-op: MCP config is handled by the daemon
|
|
291
|
+
*/
|
|
292
|
+
setMCPConfigPath(_path) {
|
|
293
|
+
this.logger.debug('setMCPConfigPath called (no-op in client mode)');
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* No-op: Status manager integration is handled by cui-server
|
|
297
|
+
*/
|
|
298
|
+
setConversationStatusManager(_service) {
|
|
299
|
+
this.logger.debug('setConversationStatusManager called (no-op in client mode)');
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* No-op: Notification service integration is handled by cui-server
|
|
303
|
+
*/
|
|
304
|
+
setNotificationService(_service) {
|
|
305
|
+
this.logger.debug('setNotificationService called (no-op in client mode)');
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* No-op: Router service is not used in daemon mode yet
|
|
309
|
+
*/
|
|
310
|
+
setRouterService(_service) {
|
|
311
|
+
this.logger.debug('setRouterService called (no-op in client mode)');
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=process-manager-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-manager-client.js","sourceRoot":"","sources":["../../src/process-daemon/process-manager-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process Manager Interface
|
|
3
|
+
*
|
|
4
|
+
* Common interface for both ClaudeProcessManager (direct) and ProcessManagerClient (daemon).
|
|
5
|
+
* This allows cui-server to work with either implementation.
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'events';
|
|
8
|
+
import { ConversationConfig, SystemInitMessage } from '../types/index.js';
|
|
9
|
+
/**
|
|
10
|
+
* Interface for process management - implemented by both direct and client modes
|
|
11
|
+
*/
|
|
12
|
+
export interface IProcessManager extends EventEmitter {
|
|
13
|
+
startConversation(config: ConversationConfig & {
|
|
14
|
+
resumedSessionId?: string;
|
|
15
|
+
}): Promise<{
|
|
16
|
+
streamingId: string;
|
|
17
|
+
systemInit: SystemInitMessage;
|
|
18
|
+
}>;
|
|
19
|
+
stopConversation(streamingId: string): Promise<boolean>;
|
|
20
|
+
forceKillConversation(streamingId: string): boolean | Promise<boolean>;
|
|
21
|
+
getActiveSessions(): string[] | Promise<string[]>;
|
|
22
|
+
isSessionActive(streamingId: string): boolean | Promise<boolean>;
|
|
23
|
+
sendQuestionAnswer(streamingId: string, answer: string): boolean | Promise<boolean>;
|
|
24
|
+
sendStdinMessage(streamingId: string, message: string): boolean | Promise<boolean>;
|
|
25
|
+
setMCPConfigPath(path: string): void;
|
|
26
|
+
setConversationStatusManager(service: unknown): void;
|
|
27
|
+
setNotificationService(service: unknown): void;
|
|
28
|
+
setRouterService(service: unknown): void;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Events emitted by process managers
|
|
32
|
+
*/
|
|
33
|
+
export interface ProcessManagerEvents {
|
|
34
|
+
'claude-message': {
|
|
35
|
+
streamingId: string;
|
|
36
|
+
message: unknown;
|
|
37
|
+
};
|
|
38
|
+
'process-closed': {
|
|
39
|
+
streamingId: string;
|
|
40
|
+
code: number | null;
|
|
41
|
+
};
|
|
42
|
+
'process-error': {
|
|
43
|
+
streamingId: string;
|
|
44
|
+
error: string;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=process-manager-interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-manager-interface.d.ts","sourceRoot":"","sources":["../../src/process-daemon/process-manager-interface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,YAAY;IAEnD,iBAAiB,CACf,MAAM,EAAE,kBAAkB,GAAG;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,GACzD,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,iBAAiB,CAAA;KAAE,CAAC,CAAC;IAEnE,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAGvE,iBAAiB,IAAI,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAGjE,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpF,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAGnF,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACrD,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/C,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5D,gBAAgB,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC/D,eAAe,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACzD"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process Manager Interface
|
|
3
|
+
*
|
|
4
|
+
* Common interface for both ClaudeProcessManager (direct) and ProcessManagerClient (daemon).
|
|
5
|
+
* This allows cui-server to work with either implementation.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=process-manager-interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-manager-interface.js","sourceRoot":"","sources":["../../src/process-daemon/process-manager-interface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
/**
|
|
3
|
+
* Test script for process daemon
|
|
4
|
+
*
|
|
5
|
+
* Run the daemon first in another terminal:
|
|
6
|
+
* npm run daemon
|
|
7
|
+
*
|
|
8
|
+
* Then run this test:
|
|
9
|
+
* npx tsx src/process-daemon/test-daemon.ts
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=test-daemon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-daemon.d.ts","sourceRoot":"","sources":["../../src/process-daemon/test-daemon.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
/**
|
|
3
|
+
* Test script for process daemon
|
|
4
|
+
*
|
|
5
|
+
* Run the daemon first in another terminal:
|
|
6
|
+
* npm run daemon
|
|
7
|
+
*
|
|
8
|
+
* Then run this test:
|
|
9
|
+
* npx tsx src/process-daemon/test-daemon.ts
|
|
10
|
+
*/
|
|
11
|
+
import { ProcessManagerClient } from './process-manager-client.js';
|
|
12
|
+
async function test() {
|
|
13
|
+
console.log('=== Process Daemon Test ===\n');
|
|
14
|
+
const client = new ProcessManagerClient();
|
|
15
|
+
// Test 1: Connect
|
|
16
|
+
console.log('1. Connecting to daemon...');
|
|
17
|
+
try {
|
|
18
|
+
await client.connect();
|
|
19
|
+
console.log(' ✓ Connected successfully\n');
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
console.error(' ✗ Connection failed:', error);
|
|
23
|
+
console.log('\n Make sure the daemon is running: npm run daemon\n');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
// Test 2: List sessions (should be empty)
|
|
27
|
+
console.log('2. Listing active sessions...');
|
|
28
|
+
try {
|
|
29
|
+
const sessions = await client.getActiveSessions();
|
|
30
|
+
console.log(` ✓ Got ${sessions.length} active sessions\n`);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
console.error(' ✗ List failed:', error);
|
|
34
|
+
}
|
|
35
|
+
// Test 3: Spawn a conversation
|
|
36
|
+
console.log('3. Spawning test conversation...');
|
|
37
|
+
console.log(' (This will run "claude -p" with a simple prompt)\n');
|
|
38
|
+
// Set up event listeners before spawning
|
|
39
|
+
client.on('claude-message', ({ streamingId, message }) => {
|
|
40
|
+
const msgType = message?.type || 'unknown';
|
|
41
|
+
const msgSubtype = message?.subtype;
|
|
42
|
+
console.log(` [EVENT] claude-message: type=${msgType}${msgSubtype ? `, subtype=${msgSubtype}` : ''}`);
|
|
43
|
+
});
|
|
44
|
+
client.on('process-closed', ({ streamingId, code }) => {
|
|
45
|
+
console.log(` [EVENT] process-closed: streamingId=${streamingId.slice(0, 8)}..., code=${code}`);
|
|
46
|
+
});
|
|
47
|
+
client.on('process-error', ({ streamingId, error }) => {
|
|
48
|
+
console.log(` [EVENT] process-error: ${error}`);
|
|
49
|
+
});
|
|
50
|
+
try {
|
|
51
|
+
const { streamingId, systemInit } = await client.startConversation({
|
|
52
|
+
workingDirectory: process.cwd(),
|
|
53
|
+
initialPrompt: 'Say "Hello from daemon test!" and nothing else.',
|
|
54
|
+
model: 'sonnet',
|
|
55
|
+
});
|
|
56
|
+
console.log(` ✓ Conversation started!`);
|
|
57
|
+
console.log(` streamingId: ${streamingId.slice(0, 8)}...`);
|
|
58
|
+
console.log(` sessionId: ${systemInit.session_id}`);
|
|
59
|
+
console.log(` model: ${systemInit.model}`);
|
|
60
|
+
console.log(` cwd: ${systemInit.cwd}\n`);
|
|
61
|
+
// Test 4: Verify session is active
|
|
62
|
+
console.log('4. Checking if session is active...');
|
|
63
|
+
const isActive = await client.isSessionActive(streamingId);
|
|
64
|
+
console.log(` ✓ Session active: ${isActive}\n`);
|
|
65
|
+
// Wait for the conversation to complete
|
|
66
|
+
console.log('5. Waiting for conversation to complete...');
|
|
67
|
+
console.log(' (Watch for claude-message and process-closed events above)\n');
|
|
68
|
+
// Give it time to run
|
|
69
|
+
await new Promise(resolve => setTimeout(resolve, 30000));
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
console.error(' ✗ Spawn failed:', error);
|
|
73
|
+
}
|
|
74
|
+
// Clean up
|
|
75
|
+
console.log('\n6. Disconnecting...');
|
|
76
|
+
client.disconnect();
|
|
77
|
+
console.log(' ✓ Done\n');
|
|
78
|
+
process.exit(0);
|
|
79
|
+
}
|
|
80
|
+
test().catch(console.error);
|
|
81
|
+
//# sourceMappingURL=test-daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-daemon.js","sourceRoot":"","sources":["../../src/process-daemon/test-daemon.ts"],"names":[],"mappings":"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"}
|