@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.
- package/dist/adapter/claude-cli.d.ts +41 -0
- package/dist/adapter/claude-cli.d.ts.map +1 -0
- package/dist/adapter/claude-cli.js +525 -0
- package/dist/adapter/claude-cli.js.map +1 -0
- package/dist/adapter/events.d.ts +52 -0
- package/dist/adapter/events.d.ts.map +1 -0
- package/dist/adapter/events.js +134 -0
- package/dist/adapter/events.js.map +1 -0
- package/dist/client/messages.d.ts +140 -0
- package/dist/client/messages.d.ts.map +1 -0
- package/dist/client/messages.js +6 -0
- package/dist/client/messages.js.map +1 -0
- package/dist/client/websocket.d.ts +115 -0
- package/dist/client/websocket.d.ts.map +1 -0
- package/dist/client/websocket.js +434 -0
- package/dist/client/websocket.js.map +1 -0
- package/dist/commands/register.d.ts +10 -0
- package/dist/commands/register.d.ts.map +1 -0
- package/dist/commands/register.js +175 -0
- package/dist/commands/register.js.map +1 -0
- package/dist/commands/start.d.ts +9 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +54 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +38 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +5 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +59 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/unregister.d.ts +5 -0
- package/dist/commands/unregister.d.ts.map +1 -0
- package/dist/commands/unregister.js +28 -0
- package/dist/commands/unregister.js.map +1 -0
- package/dist/config/config.d.ts +68 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +193 -0
- package/dist/config/config.js.map +1 -0
- package/dist/handlers/context-handler.d.ts +37 -0
- package/dist/handlers/context-handler.d.ts.map +1 -0
- package/dist/handlers/context-handler.js +303 -0
- package/dist/handlers/context-handler.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/message-reader.d.ts +25 -0
- package/dist/message-reader.d.ts.map +1 -0
- package/dist/message-reader.js +454 -0
- package/dist/message-reader.js.map +1 -0
- package/dist/session-discovery.d.ts +48 -0
- package/dist/session-discovery.d.ts.map +1 -0
- package/dist/session-discovery.js +496 -0
- package/dist/session-discovery.js.map +1 -0
- package/dist/session-watcher.d.ts +92 -0
- package/dist/session-watcher.d.ts.map +1 -0
- package/dist/session-watcher.js +494 -0
- package/dist/session-watcher.js.map +1 -0
- package/dist/session-watcher.test.d.ts +9 -0
- package/dist/session-watcher.test.d.ts.map +1 -0
- package/dist/session-watcher.test.js +149 -0
- package/dist/session-watcher.test.js.map +1 -0
- package/jest.config.js +8 -0
- package/package.json +42 -0
- package/src/adapter/claude-cli.ts +591 -0
- package/src/adapter/events.ts +186 -0
- package/src/client/messages.ts +193 -0
- package/src/client/websocket.ts +509 -0
- package/src/commands/register.ts +201 -0
- package/src/commands/start.ts +70 -0
- package/src/commands/status.ts +47 -0
- package/src/commands/stop.ts +58 -0
- package/src/commands/unregister.ts +30 -0
- package/src/config/config.ts +163 -0
- package/src/handlers/context-handler.ts +337 -0
- package/src/index.ts +45 -0
- package/src/message-reader.ts +485 -0
- package/src/session-discovery.ts +557 -0
- package/src/session-watcher.test.ts +141 -0
- package/src/session-watcher.ts +560 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
type EventCallback = (taskId: string, eventType: string, data: Record<string, unknown>) => void;
|
|
2
|
+
export declare class ClaudeAdapter {
|
|
3
|
+
private running;
|
|
4
|
+
private onEvent;
|
|
5
|
+
constructor(onEvent: EventCallback);
|
|
6
|
+
/**
|
|
7
|
+
* Start a new task
|
|
8
|
+
*/
|
|
9
|
+
startTask(taskId: string, instruction: string, projectPath?: string): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Resume a task with user's reply
|
|
12
|
+
* Falls back to startTask if session doesn't exist
|
|
13
|
+
*/
|
|
14
|
+
resumeTask(taskId: string, sessionId: string, message: string, projectPath?: string): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Cancel a running task
|
|
17
|
+
*/
|
|
18
|
+
cancelTask(taskId: string): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Stop all running tasks
|
|
21
|
+
*/
|
|
22
|
+
stopAll(): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Get list of running task IDs
|
|
25
|
+
*/
|
|
26
|
+
getRunningTasks(): string[];
|
|
27
|
+
/**
|
|
28
|
+
* Handle process stdout/stderr and emit events
|
|
29
|
+
*/
|
|
30
|
+
private handleProcessOutput;
|
|
31
|
+
/**
|
|
32
|
+
* Handle process stdout and emit events (without close handler - for resumeTask fallback)
|
|
33
|
+
*/
|
|
34
|
+
private handleProcessOutputWithoutClose;
|
|
35
|
+
/**
|
|
36
|
+
* Handle a parsed stream event from Claude CLI
|
|
37
|
+
*/
|
|
38
|
+
private handleStreamEvent;
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=claude-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-cli.d.ts","sourceRoot":"","sources":["../../src/adapter/claude-cli.ts"],"names":[],"mappings":"AA8HA,KAAK,aAAa,GAAG,CACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,IAAI,CAAC;AAEV,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,OAAO,CAAgB;gBAEnB,OAAO,EAAE,aAAa;IAIlC;;OAEG;IACG,SAAS,CACb,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IA0DhB;;;OAGG;IACG,UAAU,CACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IA+FhB;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB/C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAa9B;;OAEG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiD3B;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAqCvC;;OAEG;IACH,OAAO,CAAC,iBAAiB;CA8I1B"}
|
|
@@ -0,0 +1,525 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ClaudeAdapter = void 0;
|
|
37
|
+
const child_process_1 = require("child_process");
|
|
38
|
+
const readline = __importStar(require("readline"));
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const os = __importStar(require("os"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const events_1 = require("./events");
|
|
43
|
+
const message_reader_1 = require("../message-reader");
|
|
44
|
+
const DEFAULT_TIMEOUT = 10 * 60 * 1000; // 10 minutes
|
|
45
|
+
// Find claude CLI in common locations
|
|
46
|
+
function findClaudeCli() {
|
|
47
|
+
if (process.env.CLAUDE_CODE_CLI_PATH) {
|
|
48
|
+
return process.env.CLAUDE_CODE_CLI_PATH;
|
|
49
|
+
}
|
|
50
|
+
const home = os.homedir();
|
|
51
|
+
const commonPaths = [
|
|
52
|
+
path.join(home, '.npm-global', 'bin', 'claude'),
|
|
53
|
+
path.join(home, '.nvm', 'versions', 'node', 'v20.18.0', 'bin', 'claude'),
|
|
54
|
+
'/usr/local/bin/claude',
|
|
55
|
+
'/opt/homebrew/bin/claude',
|
|
56
|
+
'claude' // Fall back to PATH
|
|
57
|
+
];
|
|
58
|
+
for (const p of commonPaths) {
|
|
59
|
+
if (p === 'claude')
|
|
60
|
+
return p; // PATH fallback
|
|
61
|
+
try {
|
|
62
|
+
if (fs.existsSync(p)) {
|
|
63
|
+
return p;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return 'claude'; // Fall back to PATH
|
|
71
|
+
}
|
|
72
|
+
const CLI_PATH = findClaudeCli();
|
|
73
|
+
console.log(`[ClaudeAdapter] Using CLI path: ${CLI_PATH}`);
|
|
74
|
+
/**
|
|
75
|
+
* Read the last user message UUID from a session JSONL file
|
|
76
|
+
* Used for associating verbose output with the triggering user message
|
|
77
|
+
*/
|
|
78
|
+
function getLastUserMessageUuid(sessionId) {
|
|
79
|
+
const filePath = (0, message_reader_1.findSessionFile)(sessionId);
|
|
80
|
+
if (!filePath) {
|
|
81
|
+
console.log(`[getLastUserMessageUuid] File not found for session ${sessionId}`);
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
86
|
+
const lines = content.split('\n').filter(l => l.trim());
|
|
87
|
+
// Count user messages for debugging
|
|
88
|
+
let userMessageCount = 0;
|
|
89
|
+
let lastUserUuid;
|
|
90
|
+
let lastUserContent;
|
|
91
|
+
// Find the last user message UUID (iterate backwards)
|
|
92
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
93
|
+
try {
|
|
94
|
+
const entry = JSON.parse(lines[i]);
|
|
95
|
+
if (entry.type === 'user' && entry.uuid) {
|
|
96
|
+
userMessageCount++;
|
|
97
|
+
if (!lastUserUuid) {
|
|
98
|
+
lastUserUuid = entry.uuid;
|
|
99
|
+
// Get first 50 chars of message content for debugging
|
|
100
|
+
if (entry.message?.content) {
|
|
101
|
+
const msgContent = typeof entry.message.content === 'string'
|
|
102
|
+
? entry.message.content
|
|
103
|
+
: JSON.stringify(entry.message.content);
|
|
104
|
+
lastUserContent = msgContent.substring(0, 50);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
console.log(`[getLastUserMessageUuid] Found ${userMessageCount} user messages, last UUID: ${lastUserUuid}, content: "${lastUserContent}"`);
|
|
114
|
+
return lastUserUuid;
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
console.log(`[getLastUserMessageUuid] File read error:`, err);
|
|
118
|
+
}
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
// Allowed tools for Claude CLI
|
|
122
|
+
const ALLOWED_TOOLS = [
|
|
123
|
+
'Read',
|
|
124
|
+
'Glob',
|
|
125
|
+
'Grep',
|
|
126
|
+
'WebSearch',
|
|
127
|
+
'WebFetch',
|
|
128
|
+
'LSP',
|
|
129
|
+
'Task',
|
|
130
|
+
'TodoWrite',
|
|
131
|
+
'Bash',
|
|
132
|
+
'Edit',
|
|
133
|
+
'Write',
|
|
134
|
+
'NotebookEdit',
|
|
135
|
+
'AskUserQuestion' // Required for pause/resume workflow
|
|
136
|
+
].join(',');
|
|
137
|
+
class ClaudeAdapter {
|
|
138
|
+
running = new Map();
|
|
139
|
+
onEvent;
|
|
140
|
+
constructor(onEvent) {
|
|
141
|
+
this.onEvent = onEvent;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Start a new task
|
|
145
|
+
*/
|
|
146
|
+
async startTask(taskId, instruction, projectPath) {
|
|
147
|
+
console.log(`[${taskId}] Starting task: ${instruction.substring(0, 50)}...`);
|
|
148
|
+
const rt = {
|
|
149
|
+
taskId,
|
|
150
|
+
sessionId: '',
|
|
151
|
+
question: '',
|
|
152
|
+
options: [],
|
|
153
|
+
context: '',
|
|
154
|
+
process: null,
|
|
155
|
+
timeoutHandle: null
|
|
156
|
+
};
|
|
157
|
+
this.running.set(taskId, rt);
|
|
158
|
+
// Validate cwd exists
|
|
159
|
+
let cwd = undefined;
|
|
160
|
+
if (projectPath && fs.existsSync(projectPath)) {
|
|
161
|
+
cwd = projectPath;
|
|
162
|
+
}
|
|
163
|
+
else if (projectPath) {
|
|
164
|
+
console.log(`[${taskId}] Warning: project path does not exist: ${projectPath}, using home dir`);
|
|
165
|
+
cwd = os.homedir();
|
|
166
|
+
// Notify user that the path doesn't exist
|
|
167
|
+
this.onEvent(taskId, 'WARNING', {
|
|
168
|
+
warning: `Project path "${projectPath}" does not exist. Running in home directory instead.`
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
// Build command arguments
|
|
172
|
+
const args = [
|
|
173
|
+
'-p', instruction,
|
|
174
|
+
'--output-format', 'stream-json',
|
|
175
|
+
'--verbose',
|
|
176
|
+
'--permission-mode', 'acceptEdits',
|
|
177
|
+
'--allowedTools', ALLOWED_TOOLS
|
|
178
|
+
];
|
|
179
|
+
console.log(`[${taskId}] Spawning: ${CLI_PATH} with cwd: ${cwd || 'default'}`);
|
|
180
|
+
// Spawn Claude CLI (no shell - direct execution preserves arguments correctly)
|
|
181
|
+
const proc = (0, child_process_1.spawn)(CLI_PATH, args, {
|
|
182
|
+
cwd,
|
|
183
|
+
stdio: ['ignore', 'pipe', 'pipe']
|
|
184
|
+
});
|
|
185
|
+
rt.process = proc;
|
|
186
|
+
// Set timeout
|
|
187
|
+
rt.timeoutHandle = setTimeout(() => {
|
|
188
|
+
console.log(`[${taskId}] Task timed out`);
|
|
189
|
+
proc.kill('SIGKILL');
|
|
190
|
+
this.onEvent(taskId, 'ERROR', { error: 'execution timeout' });
|
|
191
|
+
}, DEFAULT_TIMEOUT);
|
|
192
|
+
// Handle process events
|
|
193
|
+
this.handleProcessOutput(taskId, proc, rt);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Resume a task with user's reply
|
|
197
|
+
* Falls back to startTask if session doesn't exist
|
|
198
|
+
*/
|
|
199
|
+
async resumeTask(taskId, sessionId, message, projectPath) {
|
|
200
|
+
console.log(`[${taskId}] ===== RESUME TASK START =====`);
|
|
201
|
+
console.log(`[${taskId}] Session: ${sessionId.slice(-8)}, Message: "${message.slice(0, 50)}..."`);
|
|
202
|
+
const rt = {
|
|
203
|
+
taskId,
|
|
204
|
+
sessionId,
|
|
205
|
+
question: '',
|
|
206
|
+
options: [],
|
|
207
|
+
context: '',
|
|
208
|
+
process: null,
|
|
209
|
+
timeoutHandle: null,
|
|
210
|
+
userMessageUuid: undefined
|
|
211
|
+
};
|
|
212
|
+
// Note: userMessageUuid starts as undefined - will be read from JSONL on first assistant event
|
|
213
|
+
console.log(`[${taskId}] Initial state: sessionId=${sessionId.slice(-8)}, userMessageUuid=none`);
|
|
214
|
+
this.running.set(taskId, rt);
|
|
215
|
+
// Validate cwd exists (same logic as startTask)
|
|
216
|
+
let cwd = undefined;
|
|
217
|
+
if (projectPath && fs.existsSync(projectPath)) {
|
|
218
|
+
cwd = projectPath;
|
|
219
|
+
}
|
|
220
|
+
else if (projectPath) {
|
|
221
|
+
console.log(`[${taskId}] Warning: project path does not exist: ${projectPath}, using home dir`);
|
|
222
|
+
cwd = os.homedir();
|
|
223
|
+
}
|
|
224
|
+
// Build command arguments with --resume
|
|
225
|
+
const args = [
|
|
226
|
+
'-p', message,
|
|
227
|
+
'--resume', sessionId,
|
|
228
|
+
'--output-format', 'stream-json',
|
|
229
|
+
'--verbose',
|
|
230
|
+
'--permission-mode', 'acceptEdits',
|
|
231
|
+
'--allowedTools', ALLOWED_TOOLS
|
|
232
|
+
];
|
|
233
|
+
console.log(`[${taskId}] Spawning resume: ${CLI_PATH} --resume ${sessionId} with cwd: ${cwd || 'default'}`);
|
|
234
|
+
// Spawn Claude CLI with same cwd as original task (no shell - direct execution)
|
|
235
|
+
const proc = (0, child_process_1.spawn)(CLI_PATH, args, {
|
|
236
|
+
cwd,
|
|
237
|
+
stdio: ['ignore', 'pipe', 'pipe']
|
|
238
|
+
});
|
|
239
|
+
rt.process = proc;
|
|
240
|
+
// Track if we've seen the "no conversation found" error
|
|
241
|
+
let sessionNotFound = false;
|
|
242
|
+
let stderrBuffer = '';
|
|
243
|
+
// Check stderr for session not found error
|
|
244
|
+
proc.stderr?.on('data', (data) => {
|
|
245
|
+
const text = data.toString();
|
|
246
|
+
stderrBuffer += text;
|
|
247
|
+
console.log(`[${taskId}] stderr: ${text}`);
|
|
248
|
+
if (text.includes('No conversation found')) {
|
|
249
|
+
sessionNotFound = true;
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
// Handle quick exit with session not found - fall back to new session
|
|
253
|
+
proc.on('close', (code) => {
|
|
254
|
+
if (code !== 0 && sessionNotFound) {
|
|
255
|
+
console.log(`[${taskId}] Session ${sessionId} not found, falling back to new session`);
|
|
256
|
+
// Clean up this attempt
|
|
257
|
+
if (rt.timeoutHandle) {
|
|
258
|
+
clearTimeout(rt.timeoutHandle);
|
|
259
|
+
}
|
|
260
|
+
this.running.delete(taskId);
|
|
261
|
+
// Start fresh instead
|
|
262
|
+
this.startTask(taskId, message, projectPath);
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
// Normal exit handling
|
|
266
|
+
console.log(`[${taskId}] Process exited with code ${code}`);
|
|
267
|
+
if (rt.timeoutHandle) {
|
|
268
|
+
clearTimeout(rt.timeoutHandle);
|
|
269
|
+
}
|
|
270
|
+
this.running.delete(taskId);
|
|
271
|
+
});
|
|
272
|
+
// Set timeout
|
|
273
|
+
rt.timeoutHandle = setTimeout(() => {
|
|
274
|
+
console.log(`[${taskId}] Task timed out`);
|
|
275
|
+
proc.kill('SIGKILL');
|
|
276
|
+
this.onEvent(taskId, 'ERROR', { error: 'execution timeout' });
|
|
277
|
+
}, DEFAULT_TIMEOUT);
|
|
278
|
+
// Handle process events (but skip the close handler since we handle it above)
|
|
279
|
+
this.handleProcessOutputWithoutClose(taskId, proc, rt);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Cancel a running task
|
|
283
|
+
*/
|
|
284
|
+
async cancelTask(taskId) {
|
|
285
|
+
const rt = this.running.get(taskId);
|
|
286
|
+
if (!rt) {
|
|
287
|
+
console.log(`[${taskId}] Task not found for cancellation`);
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
if (rt.process) {
|
|
291
|
+
rt.process.kill('SIGTERM');
|
|
292
|
+
}
|
|
293
|
+
if (rt.timeoutHandle) {
|
|
294
|
+
clearTimeout(rt.timeoutHandle);
|
|
295
|
+
}
|
|
296
|
+
this.running.delete(taskId);
|
|
297
|
+
console.log(`[${taskId}] Task cancelled`);
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Stop all running tasks
|
|
301
|
+
*/
|
|
302
|
+
async stopAll() {
|
|
303
|
+
for (const [taskId, rt] of this.running) {
|
|
304
|
+
console.log(`[${taskId}] Stopping task`);
|
|
305
|
+
if (rt.process) {
|
|
306
|
+
rt.process.kill('SIGTERM');
|
|
307
|
+
}
|
|
308
|
+
if (rt.timeoutHandle) {
|
|
309
|
+
clearTimeout(rt.timeoutHandle);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
this.running.clear();
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Get list of running task IDs
|
|
316
|
+
*/
|
|
317
|
+
getRunningTasks() {
|
|
318
|
+
return Array.from(this.running.keys());
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Handle process stdout/stderr and emit events
|
|
322
|
+
*/
|
|
323
|
+
handleProcessOutput(taskId, proc, rt) {
|
|
324
|
+
// Create readline interface for NDJSON parsing
|
|
325
|
+
const rl = readline.createInterface({
|
|
326
|
+
input: proc.stdout,
|
|
327
|
+
crlfDelay: Infinity
|
|
328
|
+
});
|
|
329
|
+
// Parse each line as JSON to track state (userMessageUuid)
|
|
330
|
+
// NOTE: Verbose output is now handled by SessionWatcher via JSONL-based VERBOSE events
|
|
331
|
+
// We still parse stream events here to track userMessageUuid for TASK_COMPLETE
|
|
332
|
+
rl.on('line', (line) => {
|
|
333
|
+
try {
|
|
334
|
+
const event = JSON.parse(line);
|
|
335
|
+
this.handleStreamEvent(taskId, event, rt);
|
|
336
|
+
}
|
|
337
|
+
catch {
|
|
338
|
+
// Not valid JSON, skip
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
// Log stderr
|
|
342
|
+
proc.stderr?.on('data', (data) => {
|
|
343
|
+
console.log(`[${taskId}] stderr: ${data.toString()}`);
|
|
344
|
+
});
|
|
345
|
+
// Handle process exit
|
|
346
|
+
proc.on('close', (code) => {
|
|
347
|
+
console.log(`[${taskId}] Process exited with code ${code}`);
|
|
348
|
+
if (rt.timeoutHandle) {
|
|
349
|
+
clearTimeout(rt.timeoutHandle);
|
|
350
|
+
}
|
|
351
|
+
this.running.delete(taskId);
|
|
352
|
+
});
|
|
353
|
+
proc.on('error', (err) => {
|
|
354
|
+
console.error(`[${taskId}] Process error:`, err);
|
|
355
|
+
this.onEvent(taskId, 'ERROR', { error: err.message });
|
|
356
|
+
if (rt.timeoutHandle) {
|
|
357
|
+
clearTimeout(rt.timeoutHandle);
|
|
358
|
+
}
|
|
359
|
+
this.running.delete(taskId);
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Handle process stdout and emit events (without close handler - for resumeTask fallback)
|
|
364
|
+
*/
|
|
365
|
+
handleProcessOutputWithoutClose(taskId, proc, rt) {
|
|
366
|
+
// Create readline interface for NDJSON parsing
|
|
367
|
+
const rl = readline.createInterface({
|
|
368
|
+
input: proc.stdout,
|
|
369
|
+
crlfDelay: Infinity
|
|
370
|
+
});
|
|
371
|
+
// Parse each line as JSON to track state (userMessageUuid)
|
|
372
|
+
// NOTE: Verbose output is now handled by SessionWatcher via JSONL-based VERBOSE events
|
|
373
|
+
// We still parse stream events here to track userMessageUuid for TASK_COMPLETE
|
|
374
|
+
rl.on('line', (line) => {
|
|
375
|
+
try {
|
|
376
|
+
const event = JSON.parse(line);
|
|
377
|
+
this.handleStreamEvent(taskId, event, rt);
|
|
378
|
+
}
|
|
379
|
+
catch {
|
|
380
|
+
// Not valid JSON, skip
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
// Note: stderr is handled by resumeTask caller
|
|
384
|
+
// Note: close is handled by resumeTask caller
|
|
385
|
+
proc.on('error', (err) => {
|
|
386
|
+
console.error(`[${taskId}] Process error:`, err);
|
|
387
|
+
this.onEvent(taskId, 'ERROR', { error: err.message });
|
|
388
|
+
if (rt.timeoutHandle) {
|
|
389
|
+
clearTimeout(rt.timeoutHandle);
|
|
390
|
+
}
|
|
391
|
+
this.running.delete(taskId);
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Handle a parsed stream event from Claude CLI
|
|
396
|
+
*/
|
|
397
|
+
handleStreamEvent(taskId, event, rt) {
|
|
398
|
+
// Debug logging for all events
|
|
399
|
+
console.log(`[${taskId}] Event: type=${event.type}, subtype=${event.subtype || 'none'}`);
|
|
400
|
+
if (event.permission_denials?.length) {
|
|
401
|
+
console.log(`[${taskId}] Permission denials:`, JSON.stringify(event.permission_denials));
|
|
402
|
+
}
|
|
403
|
+
switch (event.type) {
|
|
404
|
+
case 'system':
|
|
405
|
+
if (event.subtype === 'init' && event.session_id) {
|
|
406
|
+
rt.sessionId = event.session_id;
|
|
407
|
+
console.log(`[${taskId}] Session initialized: ${event.session_id}`);
|
|
408
|
+
// DON'T read UUID here - Claude CLI hasn't written the new user message yet
|
|
409
|
+
// The frontend has the correct UUID from when the user sent the message
|
|
410
|
+
// By not setting UUID here, frontend will use its verboseOutputUserUuid fallback
|
|
411
|
+
// Emit SESSION_STARTED to trigger file watching for unified notifications
|
|
412
|
+
this.onEvent(taskId, 'SESSION_STARTED', {
|
|
413
|
+
session_id: event.session_id
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
break;
|
|
417
|
+
case 'assistant':
|
|
418
|
+
// DON'T read UUID here - Claude may not have written the new user message to JSONL yet
|
|
419
|
+
// Reading now would get the PREVIOUS message's UUID, causing wrong positioning
|
|
420
|
+
// The frontend has the correct UUID from when the user sent the message
|
|
421
|
+
// We only read UUID at TASK_COMPLETE where we need it for the final message
|
|
422
|
+
console.log(`[${taskId}] assistant event: currentUuid=${rt.userMessageUuid?.slice(-8) || 'none'}, sessionId=${rt.sessionId?.slice(-8) || 'none'}`);
|
|
423
|
+
if (event.message?.content) {
|
|
424
|
+
for (const block of event.message.content) {
|
|
425
|
+
// Skip thinking blocks if they come as separate type
|
|
426
|
+
if (block.type === 'thinking') {
|
|
427
|
+
continue;
|
|
428
|
+
}
|
|
429
|
+
// Accumulate text for context
|
|
430
|
+
if (block.type === 'text' && block.text) {
|
|
431
|
+
// Strip <thinking>...</thinking> tags (may be embedded in text)
|
|
432
|
+
const text = block.text.replace(/<thinking>[\s\S]*?<\/thinking>\s*/g, '').trim();
|
|
433
|
+
if (text) {
|
|
434
|
+
if (rt.context) {
|
|
435
|
+
rt.context += '\n\n';
|
|
436
|
+
}
|
|
437
|
+
rt.context += text;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
// Track tool use for progress
|
|
441
|
+
if (block.type === 'tool_use' && block.name) {
|
|
442
|
+
const progress = (0, events_1.extractProgressFromToolUse)(block.name, block.input);
|
|
443
|
+
if (progress) {
|
|
444
|
+
this.onEvent(taskId, 'PROGRESS', {
|
|
445
|
+
action: progress.action,
|
|
446
|
+
target: progress.target
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
// Check for AskUserQuestion
|
|
450
|
+
if (block.name === 'AskUserQuestion' && block.input) {
|
|
451
|
+
const input = block.input;
|
|
452
|
+
if (input.questions?.length > 0) {
|
|
453
|
+
const q = input.questions[0];
|
|
454
|
+
rt.question = q.question;
|
|
455
|
+
rt.options = q.options || [];
|
|
456
|
+
console.log(`[${taskId}] Question detected: ${q.question}`);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
break;
|
|
463
|
+
case 'result':
|
|
464
|
+
// Check for permission denials (user input needed)
|
|
465
|
+
if (event.permission_denials?.length) {
|
|
466
|
+
// Any permission denial means the task is waiting for user input
|
|
467
|
+
const denials = event.permission_denials;
|
|
468
|
+
const firstDenial = denials[0];
|
|
469
|
+
// Build a descriptive prompt based on the denied tool
|
|
470
|
+
let prompt = rt.question; // Use AskUserQuestion prompt if available
|
|
471
|
+
let options = rt.options;
|
|
472
|
+
if (!prompt) {
|
|
473
|
+
// Construct prompt from permission denial info
|
|
474
|
+
const toolName = firstDenial.tool_name;
|
|
475
|
+
if (toolName === 'AskUserQuestion') {
|
|
476
|
+
prompt = 'Agent is asking a question';
|
|
477
|
+
}
|
|
478
|
+
else {
|
|
479
|
+
// Permission request for file/bash operations
|
|
480
|
+
prompt = `Permission required for: ${toolName}`;
|
|
481
|
+
if (denials.length > 1) {
|
|
482
|
+
prompt += ` (and ${denials.length - 1} more)`;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
console.log(`[${taskId}] Task waiting for user input - tool: ${firstDenial.tool_name}, prompt: ${prompt}`);
|
|
487
|
+
this.onEvent(taskId, 'WAIT_FOR_USER', {
|
|
488
|
+
session_id: rt.sessionId,
|
|
489
|
+
prompt: prompt,
|
|
490
|
+
options: options,
|
|
491
|
+
context: rt.context,
|
|
492
|
+
user_message_uuid: rt.userMessageUuid,
|
|
493
|
+
permission_tool: firstDenial.tool_name
|
|
494
|
+
});
|
|
495
|
+
return;
|
|
496
|
+
}
|
|
497
|
+
// Task completed - re-read the UUID to ensure we have the correct one
|
|
498
|
+
// (the first assistant event may arrive before the JSONL is fully written)
|
|
499
|
+
console.log(`[${taskId}] TASK_COMPLETE: checking UUID. Current=${rt.userMessageUuid?.slice(-8) || 'none'}`);
|
|
500
|
+
if (rt.sessionId) {
|
|
501
|
+
console.log(`[${taskId}] Re-reading UUID from JSONL at completion...`);
|
|
502
|
+
const freshUuid = getLastUserMessageUuid(rt.sessionId);
|
|
503
|
+
console.log(`[${taskId}] Fresh UUID from JSONL: ${freshUuid?.slice(-8) || 'none'}`);
|
|
504
|
+
if (freshUuid && freshUuid !== rt.userMessageUuid) {
|
|
505
|
+
console.log(`[${taskId}] UUID UPDATED at completion: ${rt.userMessageUuid?.slice(-8) || 'none'} -> ${freshUuid.slice(-8)}`);
|
|
506
|
+
rt.userMessageUuid = freshUuid;
|
|
507
|
+
}
|
|
508
|
+
else if (freshUuid === rt.userMessageUuid) {
|
|
509
|
+
console.log(`[${taskId}] UUID unchanged at completion: ${freshUuid?.slice(-8) || 'none'}`);
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
console.log(`[${taskId}] EMITTING TASK_COMPLETE with uuid=${rt.userMessageUuid?.slice(-8) || 'none'}`);
|
|
513
|
+
// Use accumulated context as result, fall back to event.result
|
|
514
|
+
const finalResult = rt.context || event.result || '';
|
|
515
|
+
this.onEvent(taskId, 'TASK_COMPLETE', {
|
|
516
|
+
session_id: rt.sessionId,
|
|
517
|
+
result: finalResult,
|
|
518
|
+
user_message_uuid: rt.userMessageUuid
|
|
519
|
+
});
|
|
520
|
+
break;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
exports.ClaudeAdapter = ClaudeAdapter;
|
|
525
|
+
//# sourceMappingURL=claude-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-cli.js","sourceRoot":"","sources":["../../src/adapter/claude-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for Claude CLI stream-json output
|
|
3
|
+
*/
|
|
4
|
+
export interface StreamEvent {
|
|
5
|
+
type: 'system' | 'assistant' | 'result' | 'user';
|
|
6
|
+
subtype?: string;
|
|
7
|
+
session_id?: string;
|
|
8
|
+
message?: MessageContent;
|
|
9
|
+
result?: string;
|
|
10
|
+
permission_denials?: PermissionDenial[];
|
|
11
|
+
}
|
|
12
|
+
export interface MessageContent {
|
|
13
|
+
content: ContentBlock[];
|
|
14
|
+
}
|
|
15
|
+
export interface ContentBlock {
|
|
16
|
+
type: 'text' | 'tool_use' | 'tool_result' | 'thinking';
|
|
17
|
+
text?: string;
|
|
18
|
+
name?: string;
|
|
19
|
+
input?: unknown;
|
|
20
|
+
id?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface PermissionDenial {
|
|
23
|
+
tool_name: string;
|
|
24
|
+
id: string;
|
|
25
|
+
}
|
|
26
|
+
export interface AskUserInput {
|
|
27
|
+
questions: Question[];
|
|
28
|
+
}
|
|
29
|
+
export interface Question {
|
|
30
|
+
question: string;
|
|
31
|
+
header?: string;
|
|
32
|
+
options: QuestionOption[];
|
|
33
|
+
multiSelect?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface QuestionOption {
|
|
36
|
+
label: string;
|
|
37
|
+
description?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface ProgressInfo {
|
|
40
|
+
action: string;
|
|
41
|
+
target: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Format raw stream output into human-readable string for verbose display
|
|
45
|
+
* Returns null if the event should be skipped
|
|
46
|
+
*/
|
|
47
|
+
export declare function formatVerboseOutput(line: string): string | null;
|
|
48
|
+
/**
|
|
49
|
+
* Extract progress info from tool use
|
|
50
|
+
*/
|
|
51
|
+
export declare function extractProgressFromToolUse(toolName: string, input: unknown): ProgressInfo | null;
|
|
52
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/adapter/events.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqE/D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,GACb,YAAY,GAAG,IAAI,CAqDrB"}
|