cc-control-agent 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/auth/device-manager.d.ts +20 -0
  2. package/dist/auth/device-manager.d.ts.map +1 -0
  3. package/dist/auth/device-manager.js +101 -0
  4. package/dist/auth/device-manager.js.map +1 -0
  5. package/dist/auth/user-credentials.d.ts +35 -0
  6. package/dist/auth/user-credentials.d.ts.map +1 -0
  7. package/dist/auth/user-credentials.js +128 -0
  8. package/dist/auth/user-credentials.js.map +1 -0
  9. package/dist/claude/hook-handler.d.ts +27 -0
  10. package/dist/claude/hook-handler.d.ts.map +1 -0
  11. package/dist/claude/hook-handler.js +191 -0
  12. package/dist/claude/hook-handler.js.map +1 -0
  13. package/dist/cli.d.ts +3 -0
  14. package/dist/cli.d.ts.map +1 -0
  15. package/dist/cli.js +195 -0
  16. package/dist/cli.js.map +1 -0
  17. package/dist/command/handler.d.ts +34 -0
  18. package/dist/command/handler.d.ts.map +1 -0
  19. package/dist/command/handler.js +371 -0
  20. package/dist/command/handler.js.map +1 -0
  21. package/dist/command/validator.d.ts +23 -0
  22. package/dist/command/validator.d.ts.map +1 -0
  23. package/dist/command/validator.js +295 -0
  24. package/dist/command/validator.js.map +1 -0
  25. package/dist/communication/websocket-client.d.ts +28 -0
  26. package/dist/communication/websocket-client.d.ts.map +1 -0
  27. package/dist/communication/websocket-client.js +224 -0
  28. package/dist/communication/websocket-client.js.map +1 -0
  29. package/dist/config/default.d.ts +19 -0
  30. package/dist/config/default.d.ts.map +1 -0
  31. package/dist/config/default.js +40 -0
  32. package/dist/config/default.js.map +1 -0
  33. package/dist/index.d.ts +16 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +155 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/session/claude-monitor.d.ts +66 -0
  38. package/dist/session/claude-monitor.d.ts.map +1 -0
  39. package/dist/session/claude-monitor.js +770 -0
  40. package/dist/session/claude-monitor.js.map +1 -0
  41. package/dist/session/monitor.d.ts +22 -0
  42. package/dist/session/monitor.d.ts.map +1 -0
  43. package/dist/session/monitor.js +189 -0
  44. package/dist/session/monitor.js.map +1 -0
  45. package/dist/session/parser.d.ts +51 -0
  46. package/dist/session/parser.d.ts.map +1 -0
  47. package/dist/session/parser.js +139 -0
  48. package/dist/session/parser.js.map +1 -0
  49. package/dist/utils/logger-new.d.ts +1 -0
  50. package/dist/utils/logger-new.d.ts.map +1 -0
  51. package/dist/utils/logger-new.js +2 -0
  52. package/dist/utils/logger-new.js.map +1 -0
  53. package/dist/utils/logger.d.ts +11 -0
  54. package/dist/utils/logger.d.ts.map +1 -0
  55. package/dist/utils/logger.js +37 -0
  56. package/dist/utils/logger.js.map +1 -0
  57. package/package.json +42 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,qBAAa,YAAY;IACvB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,cAAc,CAAC,CAAuB;IAC9C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAS;;IAepB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0CtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B,SAAS,IAAI,OAAO;IAIpB,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,oBAAoB;CAoB7B;AAMD,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAyB1C"}
package/dist/index.js ADDED
@@ -0,0 +1,155 @@
1
+ // ============================================================================
2
+ // CC-Control Desktop Agent - Main Entry Point
3
+ // ============================================================================
4
+ import { logger } from "./utils/logger.js";
5
+ import { DeviceManager } from "./auth/device-manager.js";
6
+ import { WebSocketClient } from "./communication/websocket-client.js";
7
+ import { ClaudeSessionMonitor } from "./session/claude-monitor.js";
8
+ import { CommandHandler } from "./command/handler.js";
9
+ import { HookHandler } from "./claude/hook-handler.js";
10
+ export class DesktopAgent {
11
+ deviceManager;
12
+ wsClient;
13
+ sessionMonitor; // Optional, created in start()
14
+ commandHandler;
15
+ hookHandler;
16
+ isRunning = false;
17
+ constructor() {
18
+ this.deviceManager = new DeviceManager();
19
+ this.wsClient = new WebSocketClient(this.deviceManager, {
20
+ onMessage: this.handleMessage.bind(this),
21
+ onConnected: async () => {
22
+ logger.info("WebSocket connected");
23
+ },
24
+ onDisconnected: () => logger.warn("WebSocket disconnected"),
25
+ onError: (error) => logger.error("WebSocket error", error),
26
+ });
27
+ this.commandHandler = new CommandHandler(this.wsClient);
28
+ this.hookHandler = new HookHandler(this.wsClient);
29
+ }
30
+ async start() {
31
+ if (this.isRunning) {
32
+ logger.warn("Desktop agent is already running");
33
+ return;
34
+ }
35
+ try {
36
+ logger.info("Starting CC-Control Desktop Agent...");
37
+ // Initialize device manager
38
+ await this.deviceManager.initialize();
39
+ logger.info(`Device ID: ${this.deviceManager.getDeviceId()}`);
40
+ // Create session monitor with initialized deviceId
41
+ this.sessionMonitor = new ClaudeSessionMonitor(this.wsClient, this.deviceManager.getDeviceId());
42
+ // Initialize hook handler
43
+ await this.hookHandler.initialize();
44
+ // Connect to relay server
45
+ await this.wsClient.connect();
46
+ logger.info("Connected to relay server");
47
+ // Start monitoring Claude Code sessions (populates cache)
48
+ await this.sessionMonitor.start();
49
+ logger.info("Session monitor started");
50
+ // Initial sync - send all cached sessions to relay
51
+ await this.sessionMonitor.sendAllSessionsToRelay();
52
+ // Setup command handler
53
+ this.commandHandler.setup();
54
+ logger.info("Command handler ready");
55
+ this.isRunning = true;
56
+ logger.info("Desktop agent started successfully");
57
+ }
58
+ catch (error) {
59
+ logger.error("Failed to start desktop agent", error);
60
+ throw error;
61
+ }
62
+ }
63
+ async stop() {
64
+ if (!this.isRunning) {
65
+ logger.warn("Desktop agent is not running");
66
+ return;
67
+ }
68
+ logger.info("Stopping desktop agent...");
69
+ try {
70
+ await this.commandHandler.shutdown();
71
+ await this.hookHandler.shutdown();
72
+ await this.sessionMonitor?.stop();
73
+ await this.wsClient.disconnect();
74
+ await this.deviceManager.shutdown();
75
+ this.isRunning = false;
76
+ logger.info("Desktop agent stopped");
77
+ }
78
+ catch (error) {
79
+ logger.error("Error stopping desktop agent", error);
80
+ throw error;
81
+ }
82
+ }
83
+ isStarted() {
84
+ return this.isRunning;
85
+ }
86
+ handleMessage(message) {
87
+ logger.debug("Received message", { type: message.type });
88
+ switch (message.type) {
89
+ case "command:send_prompt":
90
+ case "command:switch_session":
91
+ case "command:manage_task":
92
+ case "command:file_operation":
93
+ // Handle commands
94
+ this.handleCommandMessage(message);
95
+ break;
96
+ case "auth:success":
97
+ logger.info("Authentication successful");
98
+ break;
99
+ case "auth:error":
100
+ logger.error("Authentication failed", message.payload);
101
+ break;
102
+ default:
103
+ logger.debug(`Unhandled message type: ${message.type}`);
104
+ }
105
+ }
106
+ handleCommandMessage(message) {
107
+ // Extract command-specific data from message
108
+ const payload = message.payload;
109
+ const commandPayload = {
110
+ sessionId: payload.sessionId,
111
+ commandId: payload.commandId,
112
+ ...payload,
113
+ };
114
+ // Convert message to command format
115
+ const command = {
116
+ id: message.id,
117
+ type: message.type.replace("command:", ""),
118
+ sessionId: payload.sessionId || "",
119
+ payload: commandPayload,
120
+ timestamp: new Date(message.timestamp),
121
+ };
122
+ this.commandHandler.handleCommand(command);
123
+ }
124
+ }
125
+ // ============================================================================
126
+ // CLI Entry Point
127
+ // ============================================================================
128
+ export async function main() {
129
+ const agent = new DesktopAgent();
130
+ // Handle graceful shutdown
131
+ process.on("SIGINT", async () => {
132
+ logger.info("Received SIGINT, shutting down...");
133
+ await agent.stop();
134
+ process.exit(0);
135
+ });
136
+ process.on("SIGTERM", async () => {
137
+ logger.info("Received SIGTERM, shutting down...");
138
+ await agent.stop();
139
+ process.exit(0);
140
+ });
141
+ try {
142
+ await agent.start();
143
+ // Keep process alive
144
+ process.stdin.resume();
145
+ }
146
+ catch (error) {
147
+ logger.error("Fatal error", error);
148
+ process.exit(1);
149
+ }
150
+ }
151
+ // Run if called directly
152
+ if (import.meta.url === `file://${process.argv[1]}`) {
153
+ main();
154
+ }
155
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import type { WebSocketClient } from "../communication/websocket-client.js";
2
+ import type { Session } from "cc-control-shared";
3
+ export declare class ClaudeSessionMonitor {
4
+ private wsClient;
5
+ private watcher;
6
+ private sessionCache;
7
+ private debounceTimer;
8
+ private periodicSyncTimer;
9
+ private claudePath;
10
+ private projectsPath;
11
+ private deviceId;
12
+ constructor(wsClient: WebSocketClient, deviceId: string, claudePath?: string);
13
+ start(): Promise<void>;
14
+ private initializeSessionCache;
15
+ /**
16
+ * Scan a project directory for .jsonl session files not in cache
17
+ */
18
+ private scanForJsonlFiles;
19
+ /**
20
+ * Look up customTitle from JSONL lines and sessions-index.json.
21
+ * JSONL has {"type":"custom-title","customTitle":"..."} entries written by /rename.
22
+ */
23
+ private lookupCustomTitleFromLines;
24
+ private lookupCustomTitleFromIndex;
25
+ /**
26
+ * Parse a session directly from a JSONL file (no index entry needed)
27
+ */
28
+ private parseSessionFromFile;
29
+ sendAllSessionsToRelay(): Promise<void>;
30
+ sendInitialSessions(limit?: number): Promise<void>;
31
+ private handleFileChange;
32
+ private debounce;
33
+ private processSessionIndex;
34
+ private processSessionFile;
35
+ private parseSession;
36
+ /**
37
+ * Calculate session status based on last modification time and message history.
38
+ * - If file not modified in >5 minutes -> "idle"
39
+ * - If last message role is "assistant" -> "waiting_input" (Claude finished, waiting for user)
40
+ * - If last message role is "user" -> "processing" (Claude is working)
41
+ * - Default -> "processing"
42
+ */
43
+ private calculateStatusFromMessages;
44
+ /**
45
+ * Backward-compatible status calculation when messages are not available.
46
+ */
47
+ private calculateStatus;
48
+ private parseMessages;
49
+ private extractSessionId;
50
+ /**
51
+ * Send a lightweight session update (no messages array - just metadata)
52
+ */
53
+ private sendSessionUpdate;
54
+ /**
55
+ * Periodic sync: scan for recently modified JSONL files and push updates.
56
+ * Safety net in case the file watcher misses changes.
57
+ */
58
+ private periodicSync;
59
+ stop(): Promise<void>;
60
+ getSessionCache(): Map<string, Session>;
61
+ getSession(sessionId: string): Session | undefined;
62
+ getAllSessions(): Session[];
63
+ getSessionsByProject(projectPath: string): Session[];
64
+ getActiveSessions(minutes?: number): Session[];
65
+ }
66
+ //# sourceMappingURL=claude-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-monitor.d.ts","sourceRoot":"","sources":["../../src/session/claude-monitor.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,mBAAmB,CAAC;AAyChE,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,aAAa,CAA0C;IAC/D,OAAO,CAAC,iBAAiB,CAA+C;IACxE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAE,MAAsC;IAOrG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAgDd,sBAAsB;IAmCpC;;OAEG;YACW,iBAAiB;IA4C/B;;;OAGG;IACH,OAAO,CAAC,0BAA0B;YAcpB,0BAA0B;IAaxC;;OAEG;YACW,oBAAoB;IAwD5B,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwFvC,mBAAmB,CAAC,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB5D,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,QAAQ;YAqBF,mBAAmB;YA4CnB,kBAAkB;YAkElB,YAAY;IAyC1B;;;;;;OAMG;IACH,OAAO,CAAC,2BAA2B;IAenC;;OAEG;IACH,OAAO,CAAC,eAAe;YAIT,aAAa;IAqG3B,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkEzB;;;OAGG;YACW,YAAY;IAoCpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3B,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAIvC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAIlD,cAAc,IAAI,OAAO,EAAE;IAI3B,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,EAAE;IAMpD,iBAAiB,CAAC,OAAO,GAAE,MAAU,GAAG,OAAO,EAAE;CAMlD"}