@ebowwa/claude-code-mcp 1.0.0 → 1.0.2
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/__tests__/advanced.test.d.ts +6 -0
- package/dist/__tests__/advanced.test.d.ts.map +1 -0
- package/dist/__tests__/advanced.test.js +354 -0
- package/dist/__tests__/advanced.test.js.map +1 -0
- package/dist/advanced.d.ts +109 -0
- package/dist/advanced.d.ts.map +1 -0
- package/dist/advanced.js +427 -0
- package/dist/advanced.js.map +1 -0
- package/dist/cli-wrapper.d.ts +202 -0
- package/dist/cli-wrapper.d.ts.map +1 -0
- package/dist/cli-wrapper.js +347 -0
- package/dist/cli-wrapper.js.map +1 -0
- package/dist/cli-wrapper.test.d.ts +12 -0
- package/dist/cli-wrapper.test.d.ts.map +1 -0
- package/dist/cli-wrapper.test.js +354 -0
- package/dist/cli-wrapper.test.js.map +1 -0
- package/dist/cli.d.ts +16 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +354 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +561 -0
- package/dist/index.js.map +1 -0
- package/dist/integration.test.d.ts +12 -0
- package/dist/integration.test.d.ts.map +1 -0
- package/dist/integration.test.js +716 -0
- package/dist/integration.test.js.map +1 -0
- package/dist/queue.d.ts +87 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +273 -0
- package/dist/queue.js.map +1 -0
- package/dist/teammates-integration.d.ts +128 -0
- package/dist/teammates-integration.d.ts.map +1 -0
- package/dist/teammates-integration.js +353 -0
- package/dist/teammates-integration.js.map +1 -0
- package/dist/test-config.d.ts +104 -0
- package/dist/test-config.d.ts.map +1 -0
- package/dist/test-config.js +439 -0
- package/dist/test-config.js.map +1 -0
- package/dist/tools.d.ts +97 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +627 -0
- package/dist/tools.js.map +1 -0
- package/package.json +7 -1
- package/ARCHITECTURE.md +0 -1802
- package/DOCUMENTATION.md +0 -747
- package/TESTING.md +0 -318
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code CLI Wrapper with Doppler Support
|
|
3
|
+
*
|
|
4
|
+
* This module provides a clean abstraction for executing Claude Code CLI commands
|
|
5
|
+
* with proper Doppler integration. It handles the --resume flag workaround by
|
|
6
|
+
* wrapping commands in doppler run --command when needed.
|
|
7
|
+
*
|
|
8
|
+
* DESIGN NOTES:
|
|
9
|
+
* =============
|
|
10
|
+
*
|
|
11
|
+
* 1. Doppler --resume Issue:
|
|
12
|
+
* `doppler run --project seed --config prd claude --resume UUID` fails because
|
|
13
|
+
* doppler intercepts the --resume flag. The solution is to use:
|
|
14
|
+
* `doppler run --project seed --config prd --command "claude --resume UUID"`
|
|
15
|
+
*
|
|
16
|
+
* 2. Session UUID Tracking:
|
|
17
|
+
* Each Claude Code session has a unique UUID that must be tracked for resume
|
|
18
|
+
* operations. The wrapper validates UUID format before passing to CLI.
|
|
19
|
+
*
|
|
20
|
+
* 3. Process Management:
|
|
21
|
+
* Child processes are spawned with proper stdio piping for message pass-through.
|
|
22
|
+
* The wrapper manages process lifecycle and provides cleanup hooks.
|
|
23
|
+
*
|
|
24
|
+
* 4. Error Handling:
|
|
25
|
+
* Doppler failures and Claude Code failures are handled separately with
|
|
26
|
+
* specific error types for proper error propagation.
|
|
27
|
+
*/
|
|
28
|
+
import { spawn } from "child_process";
|
|
29
|
+
/**
|
|
30
|
+
* Error types for specific failure scenarios
|
|
31
|
+
*/
|
|
32
|
+
export class DopplerError extends Error {
|
|
33
|
+
cause;
|
|
34
|
+
constructor(message, cause) {
|
|
35
|
+
super(message);
|
|
36
|
+
this.cause = cause;
|
|
37
|
+
this.name = "DopplerError";
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export class ClaudeCodeError extends Error {
|
|
41
|
+
exitCode;
|
|
42
|
+
cause;
|
|
43
|
+
constructor(message, exitCode, cause) {
|
|
44
|
+
super(message);
|
|
45
|
+
this.exitCode = exitCode;
|
|
46
|
+
this.cause = cause;
|
|
47
|
+
this.name = "ClaudeCodeError";
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export class SessionValidationError extends Error {
|
|
51
|
+
constructor(message) {
|
|
52
|
+
super(message);
|
|
53
|
+
this.name = "SessionValidationError";
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
// UUID Validation
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
59
|
+
/**
|
|
60
|
+
* Validate UUID format (v4 UUID pattern)
|
|
61
|
+
*/
|
|
62
|
+
export function isValidUuid(uuid) {
|
|
63
|
+
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
64
|
+
return uuidRegex.test(uuid);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Assert that a UUID is valid, throw if not
|
|
68
|
+
*/
|
|
69
|
+
export function assertValidUuid(uuid) {
|
|
70
|
+
if (!isValidUuid(uuid)) {
|
|
71
|
+
throw new SessionValidationError(`Invalid UUID format: ${uuid}. Expected v4 UUID format.`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
// CLI Execution
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
/**
|
|
78
|
+
* Build the command array for Claude Code execution
|
|
79
|
+
*
|
|
80
|
+
* Handles the doppler --resume workaround by using --command when --resume is present.
|
|
81
|
+
*/
|
|
82
|
+
function buildCommandArgs(dopplerOptions, claudeOptions) {
|
|
83
|
+
const { project, config } = dopplerOptions;
|
|
84
|
+
const { resumeUuid, args = [] } = claudeOptions;
|
|
85
|
+
// Base doppler command
|
|
86
|
+
const dopplerArgs = ["run", "--project", project, "--config", config];
|
|
87
|
+
// If --resume is needed, use --command workaround
|
|
88
|
+
if (resumeUuid) {
|
|
89
|
+
assertValidUuid(resumeUuid);
|
|
90
|
+
const claudeCmd = ["claude", "--resume", resumeUuid, ...args].join(" ");
|
|
91
|
+
dopplerArgs.push("--command", claudeCmd);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// No --resume, use direct args
|
|
95
|
+
dopplerArgs.push("--", "claude", ...args);
|
|
96
|
+
}
|
|
97
|
+
return dopplerArgs;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Execute Claude Code CLI command with Doppler
|
|
101
|
+
*
|
|
102
|
+
* Runs the command to completion and returns the result.
|
|
103
|
+
* Use spawnSession() for long-running sessions.
|
|
104
|
+
*
|
|
105
|
+
* @param dopplerOptions - Doppler configuration
|
|
106
|
+
* @param claudeOptions - Claude Code execution options
|
|
107
|
+
* @returns Promise resolving to execution result
|
|
108
|
+
*/
|
|
109
|
+
export async function executeClaudeCode(dopplerOptions, claudeOptions = {}) {
|
|
110
|
+
const args = buildCommandArgs(dopplerOptions, claudeOptions);
|
|
111
|
+
const cwd = claudeOptions.cwd || process.cwd();
|
|
112
|
+
const env = { ...process.env, ...claudeOptions.env };
|
|
113
|
+
return new Promise((resolve, reject) => {
|
|
114
|
+
const child = spawn("doppler", args, {
|
|
115
|
+
cwd,
|
|
116
|
+
env,
|
|
117
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
118
|
+
});
|
|
119
|
+
let stdout = "";
|
|
120
|
+
let stderr = "";
|
|
121
|
+
child.stdout?.on("data", (data) => {
|
|
122
|
+
stdout += data.toString();
|
|
123
|
+
});
|
|
124
|
+
child.stderr?.on("data", (data) => {
|
|
125
|
+
stderr += data.toString();
|
|
126
|
+
});
|
|
127
|
+
child.on("close", (code) => {
|
|
128
|
+
resolve({
|
|
129
|
+
stdout,
|
|
130
|
+
stderr,
|
|
131
|
+
exitCode: code,
|
|
132
|
+
success: code === 0,
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
child.on("error", (error) => {
|
|
136
|
+
// Check if it's a doppler-specific error
|
|
137
|
+
if (error.message.includes("doppler")) {
|
|
138
|
+
reject(new DopplerError(`Doppler command failed: ${error.message}`, error));
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
reject(new ClaudeCodeError(`Claude Code execution failed: ${error.message}`, null, error));
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
// Handle timeout if specified
|
|
145
|
+
if (claudeOptions.timeout) {
|
|
146
|
+
setTimeout(() => {
|
|
147
|
+
child.kill();
|
|
148
|
+
reject(new ClaudeCodeError(`Command timed out after ${claudeOptions.timeout}ms`, null, new Error("Timeout")));
|
|
149
|
+
}, claudeOptions.timeout);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
// ---------------------------------------------------------------------------
|
|
154
|
+
// Session Management
|
|
155
|
+
// ---------------------------------------------------------------------------
|
|
156
|
+
/**
|
|
157
|
+
* Map of active sessions by UUID
|
|
158
|
+
*/
|
|
159
|
+
const activeSessions = new Map();
|
|
160
|
+
/**
|
|
161
|
+
* Spawn a new Claude Code session with Doppler
|
|
162
|
+
*
|
|
163
|
+
* Creates a long-running child process with stdio pipes for message pass-through.
|
|
164
|
+
* The session is tracked in the active sessions map and can be killed later.
|
|
165
|
+
*
|
|
166
|
+
* @param dopplerOptions - Doppler configuration
|
|
167
|
+
* @param claudeOptions - Claude Code execution options
|
|
168
|
+
* @returns Promise resolving to session handle
|
|
169
|
+
*/
|
|
170
|
+
export async function spawnSession(dopplerOptions, claudeOptions = {}) {
|
|
171
|
+
const args = buildCommandArgs(dopplerOptions, claudeOptions);
|
|
172
|
+
const cwd = claudeOptions.cwd || process.cwd();
|
|
173
|
+
const env = { ...process.env, ...claudeOptions.env };
|
|
174
|
+
const child = spawn("doppler", args, {
|
|
175
|
+
cwd,
|
|
176
|
+
env,
|
|
177
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
178
|
+
});
|
|
179
|
+
// Generate a session UUID (in production, this would come from Claude Code)
|
|
180
|
+
const sessionUuid = claudeOptions.resumeUuid || crypto.randomUUID();
|
|
181
|
+
const session = {
|
|
182
|
+
uuid: sessionUuid,
|
|
183
|
+
process: child,
|
|
184
|
+
cwd,
|
|
185
|
+
startedAt: new Date(),
|
|
186
|
+
};
|
|
187
|
+
// Track the session
|
|
188
|
+
activeSessions.set(sessionUuid, session);
|
|
189
|
+
// Handle process exit
|
|
190
|
+
child.on("close", (code) => {
|
|
191
|
+
activeSessions.delete(sessionUuid);
|
|
192
|
+
});
|
|
193
|
+
child.on("error", (error) => {
|
|
194
|
+
activeSessions.delete(sessionUuid);
|
|
195
|
+
throw new DopplerError(`Failed to spawn session: ${error.message}`, error);
|
|
196
|
+
});
|
|
197
|
+
return session;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Kill an active Claude Code session
|
|
201
|
+
*
|
|
202
|
+
* @param uuid - Session UUID to kill
|
|
203
|
+
* @returns true if session was found and killed
|
|
204
|
+
*/
|
|
205
|
+
export function killSession(uuid) {
|
|
206
|
+
const session = activeSessions.get(uuid);
|
|
207
|
+
if (!session) {
|
|
208
|
+
return false;
|
|
209
|
+
}
|
|
210
|
+
session.process.kill("SIGTERM");
|
|
211
|
+
activeSessions.delete(uuid);
|
|
212
|
+
return true;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Get all active sessions
|
|
216
|
+
*/
|
|
217
|
+
export function getActiveSessions() {
|
|
218
|
+
return Array.from(activeSessions.values());
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get a specific active session by UUID
|
|
222
|
+
*/
|
|
223
|
+
export function getSession(uuid) {
|
|
224
|
+
return activeSessions.get(uuid);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Check if a session is active
|
|
228
|
+
*/
|
|
229
|
+
export function isSessionActive(uuid) {
|
|
230
|
+
return activeSessions.has(uuid);
|
|
231
|
+
}
|
|
232
|
+
// ---------------------------------------------------------------------------
|
|
233
|
+
// Message Pass-Through
|
|
234
|
+
// ---------------------------------------------------------------------------
|
|
235
|
+
/**
|
|
236
|
+
* Send a message to a Claude Code session's stdin
|
|
237
|
+
*
|
|
238
|
+
* @param uuid - Session UUID
|
|
239
|
+
* @param message - Message to send
|
|
240
|
+
* @returns true if message was sent successfully
|
|
241
|
+
*/
|
|
242
|
+
export function sendMessageToSession(uuid, message) {
|
|
243
|
+
const session = activeSessions.get(uuid);
|
|
244
|
+
if (!session || !session.process.stdin) {
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
session.process.stdin.write(message);
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Stream output from a Claude Code session
|
|
252
|
+
*
|
|
253
|
+
* @param uuid - Session UUID
|
|
254
|
+
* @param onStdout - Callback for stdout data
|
|
255
|
+
* @param onStderr - Callback for stderr data
|
|
256
|
+
* @returns Unsubscribe function
|
|
257
|
+
*/
|
|
258
|
+
export function streamSessionOutput(uuid, onStdout, onStderr) {
|
|
259
|
+
const session = activeSessions.get(uuid);
|
|
260
|
+
if (!session) {
|
|
261
|
+
throw new Error(`Session not found: ${uuid}`);
|
|
262
|
+
}
|
|
263
|
+
const stdoutHandler = (data) => onStdout(data.toString());
|
|
264
|
+
const stderrHandler = (data) => onStderr(data.toString());
|
|
265
|
+
session.process.stdout?.on("data", stdoutHandler);
|
|
266
|
+
session.process.stderr?.on("data", stderrHandler);
|
|
267
|
+
// Return unsubscribe function
|
|
268
|
+
return () => {
|
|
269
|
+
session.process.stdout?.off("data", stdoutHandler);
|
|
270
|
+
session.process.stderr?.off("data", stderrHandler);
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
// ---------------------------------------------------------------------------
|
|
274
|
+
// CLI Wrapper Class
|
|
275
|
+
// ---------------------------------------------------------------------------
|
|
276
|
+
/**
|
|
277
|
+
* Claude Code CLI wrapper class
|
|
278
|
+
*
|
|
279
|
+
* Provides a clean interface for executing Claude Code commands with Doppler.
|
|
280
|
+
*/
|
|
281
|
+
export class ClaudeCodeCLI {
|
|
282
|
+
dopplerOptions;
|
|
283
|
+
defaultOptions;
|
|
284
|
+
constructor(dopplerOptions, defaultOptions = {}) {
|
|
285
|
+
this.dopplerOptions = dopplerOptions;
|
|
286
|
+
this.defaultOptions = defaultOptions;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Execute a one-shot Claude Code command
|
|
290
|
+
*/
|
|
291
|
+
async execute(options = {}) {
|
|
292
|
+
return executeClaudeCode(this.dopplerOptions, {
|
|
293
|
+
...this.defaultOptions,
|
|
294
|
+
...options,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Start a new Claude Code session
|
|
299
|
+
*/
|
|
300
|
+
async startSession(options = {}) {
|
|
301
|
+
return spawnSession(this.dopplerOptions, {
|
|
302
|
+
...this.defaultOptions,
|
|
303
|
+
...options,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Resume an existing Claude Code session
|
|
308
|
+
*/
|
|
309
|
+
async resumeSession(uuid, options = {}) {
|
|
310
|
+
return spawnSession(this.dopplerOptions, {
|
|
311
|
+
...this.defaultOptions,
|
|
312
|
+
...options,
|
|
313
|
+
resumeUuid: uuid,
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Kill a session
|
|
318
|
+
*/
|
|
319
|
+
killSession(uuid) {
|
|
320
|
+
return killSession(uuid);
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Get all active sessions
|
|
324
|
+
*/
|
|
325
|
+
getSessions() {
|
|
326
|
+
return getActiveSessions();
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Check if a session is active
|
|
330
|
+
*/
|
|
331
|
+
hasSession(uuid) {
|
|
332
|
+
return isSessionActive(uuid);
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Send a message to a session
|
|
336
|
+
*/
|
|
337
|
+
send(uuid, message) {
|
|
338
|
+
return sendMessageToSession(uuid, message);
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Stream output from a session
|
|
342
|
+
*/
|
|
343
|
+
stream(uuid, onStdout, onStderr) {
|
|
344
|
+
return streamSessionOutput(uuid, onStdout, onStderr);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
//# sourceMappingURL=cli-wrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-wrapper.js","sourceRoot":"","sources":["../src/cli-wrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
/**
|
|
3
|
+
* CLI Wrapper Unit Tests
|
|
4
|
+
*
|
|
5
|
+
* Tests the ClaudeCodeWrapper class which handles:
|
|
6
|
+
* - Spawning Claude Code CLI processes
|
|
7
|
+
* - Doppler flag handling
|
|
8
|
+
* - Process lifecycle management
|
|
9
|
+
* - Output streaming
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=cli-wrapper.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-wrapper.test.d.ts","sourceRoot":"","sources":["../src/cli-wrapper.test.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}
|