@cmdctrl/claude-code 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.
Files changed (83) hide show
  1. package/dist/adapter/claude-cli.d.ts +41 -0
  2. package/dist/adapter/claude-cli.d.ts.map +1 -0
  3. package/dist/adapter/claude-cli.js +525 -0
  4. package/dist/adapter/claude-cli.js.map +1 -0
  5. package/dist/adapter/events.d.ts +52 -0
  6. package/dist/adapter/events.d.ts.map +1 -0
  7. package/dist/adapter/events.js +134 -0
  8. package/dist/adapter/events.js.map +1 -0
  9. package/dist/client/messages.d.ts +140 -0
  10. package/dist/client/messages.d.ts.map +1 -0
  11. package/dist/client/messages.js +6 -0
  12. package/dist/client/messages.js.map +1 -0
  13. package/dist/client/websocket.d.ts +115 -0
  14. package/dist/client/websocket.d.ts.map +1 -0
  15. package/dist/client/websocket.js +434 -0
  16. package/dist/client/websocket.js.map +1 -0
  17. package/dist/commands/register.d.ts +10 -0
  18. package/dist/commands/register.d.ts.map +1 -0
  19. package/dist/commands/register.js +175 -0
  20. package/dist/commands/register.js.map +1 -0
  21. package/dist/commands/start.d.ts +9 -0
  22. package/dist/commands/start.d.ts.map +1 -0
  23. package/dist/commands/start.js +54 -0
  24. package/dist/commands/start.js.map +1 -0
  25. package/dist/commands/status.d.ts +5 -0
  26. package/dist/commands/status.d.ts.map +1 -0
  27. package/dist/commands/status.js +38 -0
  28. package/dist/commands/status.js.map +1 -0
  29. package/dist/commands/stop.d.ts +5 -0
  30. package/dist/commands/stop.d.ts.map +1 -0
  31. package/dist/commands/stop.js +59 -0
  32. package/dist/commands/stop.js.map +1 -0
  33. package/dist/commands/unregister.d.ts +5 -0
  34. package/dist/commands/unregister.d.ts.map +1 -0
  35. package/dist/commands/unregister.js +28 -0
  36. package/dist/commands/unregister.js.map +1 -0
  37. package/dist/config/config.d.ts +68 -0
  38. package/dist/config/config.d.ts.map +1 -0
  39. package/dist/config/config.js +193 -0
  40. package/dist/config/config.js.map +1 -0
  41. package/dist/handlers/context-handler.d.ts +37 -0
  42. package/dist/handlers/context-handler.d.ts.map +1 -0
  43. package/dist/handlers/context-handler.js +303 -0
  44. package/dist/handlers/context-handler.js.map +1 -0
  45. package/dist/index.d.ts +3 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +39 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/message-reader.d.ts +25 -0
  50. package/dist/message-reader.d.ts.map +1 -0
  51. package/dist/message-reader.js +454 -0
  52. package/dist/message-reader.js.map +1 -0
  53. package/dist/session-discovery.d.ts +48 -0
  54. package/dist/session-discovery.d.ts.map +1 -0
  55. package/dist/session-discovery.js +496 -0
  56. package/dist/session-discovery.js.map +1 -0
  57. package/dist/session-watcher.d.ts +92 -0
  58. package/dist/session-watcher.d.ts.map +1 -0
  59. package/dist/session-watcher.js +494 -0
  60. package/dist/session-watcher.js.map +1 -0
  61. package/dist/session-watcher.test.d.ts +9 -0
  62. package/dist/session-watcher.test.d.ts.map +1 -0
  63. package/dist/session-watcher.test.js +149 -0
  64. package/dist/session-watcher.test.js.map +1 -0
  65. package/jest.config.js +8 -0
  66. package/package.json +42 -0
  67. package/src/adapter/claude-cli.ts +591 -0
  68. package/src/adapter/events.ts +186 -0
  69. package/src/client/messages.ts +193 -0
  70. package/src/client/websocket.ts +509 -0
  71. package/src/commands/register.ts +201 -0
  72. package/src/commands/start.ts +70 -0
  73. package/src/commands/status.ts +47 -0
  74. package/src/commands/stop.ts +58 -0
  75. package/src/commands/unregister.ts +30 -0
  76. package/src/config/config.ts +163 -0
  77. package/src/handlers/context-handler.ts +337 -0
  78. package/src/index.ts +45 -0
  79. package/src/message-reader.ts +485 -0
  80. package/src/session-discovery.ts +557 -0
  81. package/src/session-watcher.test.ts +141 -0
  82. package/src/session-watcher.ts +560 -0
  83. package/tsconfig.json +19 -0
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ /**
3
+ * Types for Claude CLI stream-json output
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.formatVerboseOutput = formatVerboseOutput;
7
+ exports.extractProgressFromToolUse = extractProgressFromToolUse;
8
+ /**
9
+ * Format raw stream output into human-readable string for verbose display
10
+ * Returns null if the event should be skipped
11
+ */
12
+ function formatVerboseOutput(line) {
13
+ try {
14
+ const data = JSON.parse(line);
15
+ if (data.type === 'system' && data.subtype === 'init') {
16
+ return '● Task started';
17
+ }
18
+ if (data.type === 'assistant' && data.message?.content) {
19
+ // Check for text content first
20
+ const texts = data.message.content
21
+ .filter(c => c.type === 'text' && c.text)
22
+ .map(c => c.text.substring(0, 100));
23
+ if (texts.length > 0) {
24
+ const joined = texts.join(' ');
25
+ const truncated = joined.length > 80 ? joined.substring(0, 80) + '...' : joined;
26
+ return `💬 ${truncated}`;
27
+ }
28
+ // Check for tool use
29
+ const tools = data.message.content.filter(c => c.type === 'tool_use');
30
+ if (tools.length > 0) {
31
+ const tool = tools[0];
32
+ const name = tool.name || 'unknown';
33
+ const input = tool.input;
34
+ switch (name) {
35
+ case 'Read': return `📖 Reading ${input?.file_path || 'file'}`;
36
+ case 'Write': return `✏️ Writing ${input?.file_path || 'file'}`;
37
+ case 'Edit': return `🔧 Editing ${input?.file_path || 'file'}`;
38
+ case 'Bash': {
39
+ const cmd = String(input?.command || '').substring(0, 60);
40
+ return `⚡ ${cmd}`;
41
+ }
42
+ case 'Glob': return `🔍 Searching: ${input?.pattern || ''}`;
43
+ case 'Grep': return `🔎 Grepping: ${input?.pattern || ''}`;
44
+ case 'Task': return `📋 Spawning agent`;
45
+ case 'TodoWrite': return `📝 Updating todos`;
46
+ case 'WebSearch': return `🌐 Searching: ${input?.query || ''}`;
47
+ case 'WebFetch': return `🌐 Fetching: ${input?.url || ''}`;
48
+ default: return `🔧 ${name}`;
49
+ }
50
+ }
51
+ }
52
+ if (data.type === 'result') {
53
+ // Check for permission denials
54
+ if (data.permission_denials?.length) {
55
+ const denial = data.permission_denials[0];
56
+ const toolName = denial.tool_name;
57
+ if (toolName === 'AskUserQuestion') {
58
+ return '❓ Waiting for your input';
59
+ }
60
+ else {
61
+ return `⚠️ Permission required: ${toolName}`;
62
+ }
63
+ }
64
+ return '✓ Completed';
65
+ }
66
+ // Skip uninteresting events
67
+ return null;
68
+ }
69
+ catch {
70
+ // Not JSON - show raw if short enough
71
+ const trimmed = line.trim();
72
+ if (trimmed && trimmed.length < 100) {
73
+ return trimmed;
74
+ }
75
+ return null;
76
+ }
77
+ }
78
+ /**
79
+ * Extract progress info from tool use
80
+ */
81
+ function extractProgressFromToolUse(toolName, input) {
82
+ const inputObj = input;
83
+ switch (toolName) {
84
+ case 'Read':
85
+ return {
86
+ action: 'Reading',
87
+ target: inputObj?.file_path || 'file'
88
+ };
89
+ case 'Write':
90
+ return {
91
+ action: 'Writing',
92
+ target: inputObj?.file_path || 'file'
93
+ };
94
+ case 'Edit':
95
+ return {
96
+ action: 'Editing',
97
+ target: inputObj?.file_path || 'file'
98
+ };
99
+ case 'Bash':
100
+ const cmd = inputObj?.command || '';
101
+ return {
102
+ action: 'Running',
103
+ target: cmd.length > 30 ? cmd.substring(0, 30) + '...' : cmd
104
+ };
105
+ case 'Glob':
106
+ return {
107
+ action: 'Searching',
108
+ target: inputObj?.pattern || 'files'
109
+ };
110
+ case 'Grep':
111
+ return {
112
+ action: 'Searching',
113
+ target: inputObj?.pattern || 'pattern'
114
+ };
115
+ case 'WebSearch':
116
+ return {
117
+ action: 'Searching web',
118
+ target: inputObj?.query || ''
119
+ };
120
+ case 'WebFetch':
121
+ return {
122
+ action: 'Fetching',
123
+ target: inputObj?.url || 'URL'
124
+ };
125
+ case 'Task':
126
+ return {
127
+ action: 'Running agent',
128
+ target: inputObj?.description || ''
129
+ };
130
+ default:
131
+ return null;
132
+ }
133
+ }
134
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/adapter/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Message types for daemon <-> server communication
3
+ */
4
+ export interface PingMessage {
5
+ type: 'ping';
6
+ }
7
+ export interface TaskStartMessage {
8
+ type: 'task_start';
9
+ task_id: string;
10
+ instruction: string;
11
+ project_path?: string;
12
+ }
13
+ export interface TaskResumeMessage {
14
+ type: 'task_resume';
15
+ task_id: string;
16
+ session_id: string;
17
+ message: string;
18
+ project_path?: string;
19
+ }
20
+ export interface TaskCancelMessage {
21
+ type: 'task_cancel';
22
+ task_id: string;
23
+ }
24
+ export interface GetMessagesMessage {
25
+ type: 'get_messages';
26
+ request_id: string;
27
+ session_id: string;
28
+ limit: number;
29
+ before_uuid?: string;
30
+ after_uuid?: string;
31
+ }
32
+ export interface WatchSessionMessage {
33
+ type: 'watch_session';
34
+ session_id: string;
35
+ file_path: string;
36
+ }
37
+ export interface UnwatchSessionMessage {
38
+ type: 'unwatch_session';
39
+ session_id: string;
40
+ }
41
+ export interface ContextRequestMessage {
42
+ type: 'context_request';
43
+ request_id: string;
44
+ session_id: string;
45
+ include: {
46
+ initial_prompt?: boolean;
47
+ recent_messages?: number;
48
+ last_tool_use?: boolean;
49
+ };
50
+ }
51
+ export type ServerMessage = PingMessage | TaskStartMessage | TaskResumeMessage | TaskCancelMessage | GetMessagesMessage | WatchSessionMessage | UnwatchSessionMessage | ContextRequestMessage;
52
+ export interface PongMessage {
53
+ type: 'pong';
54
+ }
55
+ export interface StatusMessage {
56
+ type: 'status';
57
+ running_tasks: string[];
58
+ }
59
+ export interface EventMessage {
60
+ type: 'event';
61
+ task_id: string;
62
+ event_type: string;
63
+ [key: string]: unknown;
64
+ }
65
+ export interface SessionInfo {
66
+ session_id: string;
67
+ slug: string;
68
+ title: string;
69
+ project: string;
70
+ project_name: string;
71
+ file_path: string;
72
+ last_message: string;
73
+ last_activity: string;
74
+ is_active: boolean;
75
+ message_count: number;
76
+ }
77
+ export interface ReportSessionsMessage {
78
+ type: 'report_sessions';
79
+ sessions: SessionInfo[];
80
+ }
81
+ export interface MessageEntry {
82
+ uuid: string;
83
+ role: 'USER' | 'AGENT' | 'SYSTEM';
84
+ content: string;
85
+ timestamp: string;
86
+ }
87
+ export interface MessagesResponseMessage {
88
+ type: 'messages';
89
+ request_id: string;
90
+ session_id: string;
91
+ messages: MessageEntry[];
92
+ has_more: boolean;
93
+ oldest_uuid?: string;
94
+ newest_uuid?: string;
95
+ error?: string;
96
+ }
97
+ export interface SessionActivityMessage {
98
+ type: 'session_activity';
99
+ session_id: string;
100
+ file_path: string;
101
+ last_message: string;
102
+ message_count: number;
103
+ is_completion: boolean;
104
+ user_message_uuid?: string;
105
+ last_activity: string;
106
+ }
107
+ export type SessionStatus = 'working' | 'waiting_for_input' | 'completed' | 'errored' | 'stale';
108
+ export interface SessionStatusMessage {
109
+ type: 'session_status';
110
+ session_id: string;
111
+ status: SessionStatus;
112
+ status_detail?: string;
113
+ last_tool_use?: string;
114
+ message_count: number;
115
+ elapsed_minutes: number;
116
+ }
117
+ export interface ContextResponseMessage {
118
+ type: 'context_response';
119
+ request_id: string;
120
+ session_id: string;
121
+ context: {
122
+ title: string;
123
+ project_path: string;
124
+ initial_prompt?: string;
125
+ recent_messages?: Array<{
126
+ role: 'USER' | 'AGENT';
127
+ content: string;
128
+ }>;
129
+ last_tool_use?: string;
130
+ message_count: number;
131
+ started_at?: string;
132
+ last_activity_at: string;
133
+ status: SessionStatus;
134
+ status_detail?: string;
135
+ };
136
+ error?: string;
137
+ }
138
+ export type DaemonMessage = PongMessage | StatusMessage | EventMessage | ReportSessionsMessage | MessagesResponseMessage | SessionActivityMessage | SessionStatusMessage | ContextResponseMessage;
139
+ export type EventType = 'SESSION_STARTED' | 'WAIT_FOR_USER' | 'TASK_COMPLETE' | 'OUTPUT' | 'PROGRESS' | 'ERROR' | 'AGENT_RESPONSE' | 'VERBOSE' | 'USER_MESSAGE';
140
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/client/messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Message types for daemon <-> server communication
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/client/messages.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,115 @@
1
+ import { CmdCtrlConfig, Credentials } from '../config/config';
2
+ export declare class DaemonClient {
3
+ private ws;
4
+ private config;
5
+ private credentials;
6
+ private reconnectDelay;
7
+ private reconnectTimer;
8
+ private pingTimer;
9
+ private sessionRefreshTimer;
10
+ private shouldReconnect;
11
+ private adapter;
12
+ private managedSessionIds;
13
+ private lastReportedSessionCount;
14
+ private sessionWatcher;
15
+ constructor(config: CmdCtrlConfig, credentials: Credentials);
16
+ /**
17
+ * Handle session events from the JSONL watcher and forward to server
18
+ * Converts SessionEvent to EventMessage format
19
+ */
20
+ private handleSessionEvent;
21
+ /**
22
+ * Handle session completion events from the JSONL watcher
23
+ * Sends session_activity message with is_completion=true to trigger push notifications
24
+ */
25
+ private handleSessionCompletion;
26
+ /**
27
+ * Connect to the CmdCtrl server via WebSocket
28
+ */
29
+ connect(): Promise<void>;
30
+ /**
31
+ * Disconnect from server
32
+ */
33
+ disconnect(): Promise<void>;
34
+ /**
35
+ * Send a message to the server
36
+ */
37
+ private send;
38
+ /**
39
+ * Send an event for a task
40
+ */
41
+ private sendEvent;
42
+ /**
43
+ * Send current status to server
44
+ */
45
+ private sendStatus;
46
+ /**
47
+ * Handle incoming message from server
48
+ */
49
+ private handleMessage;
50
+ /**
51
+ * Handle task_start message
52
+ */
53
+ private handleTaskStart;
54
+ /**
55
+ * Handle task_resume message
56
+ */
57
+ private handleTaskResume;
58
+ /**
59
+ * Handle task_cancel message
60
+ */
61
+ private handleTaskCancel;
62
+ /**
63
+ * Handle get_messages request
64
+ */
65
+ private handleGetMessages;
66
+ /**
67
+ * Handle watch_session request - start monitoring a session file for changes
68
+ */
69
+ private handleWatchSession;
70
+ /**
71
+ * Handle unwatch_session request - stop monitoring a session file
72
+ */
73
+ private handleUnwatchSession;
74
+ /**
75
+ * Handle context_request - extract session context for dashboard summaries
76
+ */
77
+ private handleContextRequest;
78
+ /**
79
+ * Schedule reconnection with exponential backoff
80
+ */
81
+ private scheduleReconnect;
82
+ /**
83
+ * Start ping interval to keep connection alive
84
+ */
85
+ private startPingInterval;
86
+ /**
87
+ * Stop ping interval
88
+ */
89
+ private stopPingInterval;
90
+ /**
91
+ * Report discovered external sessions to server
92
+ */
93
+ private reportSessions;
94
+ /**
95
+ * Start periodic session refresh
96
+ */
97
+ private startSessionRefreshInterval;
98
+ /**
99
+ * Stop session refresh interval
100
+ */
101
+ private stopSessionRefreshInterval;
102
+ /**
103
+ * Add a session ID to the managed set (sessions started via this daemon)
104
+ */
105
+ addManagedSession(sessionId: string): void;
106
+ /**
107
+ * Remove a session ID from the managed set
108
+ */
109
+ removeManagedSession(sessionId: string): void;
110
+ /**
111
+ * Refresh access token using refresh token
112
+ */
113
+ refreshToken(): Promise<boolean>;
114
+ }
115
+ //# sourceMappingURL=websocket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/client/websocket.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAoB,MAAM,kBAAkB,CAAC;AA0BhF,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,mBAAmB,CAA+B;IAC1D,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,wBAAwB,CAAM;IACtC,OAAO,CAAC,cAAc,CAAiB;gBAE3B,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW;IAU3D;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAoD9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBjC;;OAEG;IACH,OAAO,CAAC,IAAI;IAWZ;;OAEG;IACH,OAAO,CAAC,SAAS;IAwBjB;;OAEG;IACH,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACH,OAAO,CAAC,aAAa;IAoDrB;;OAEG;YACW,eAAe;IAa7B;;OAEG;YACW,gBAAgB;IAa9B;;OAEG;YACW,gBAAgB;IAK9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA+BzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAK1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAK5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;YACW,cAAc;IA8B5B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAMnC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAOlC;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI1C;;OAEG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI7C;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAOvC"}