@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.
Files changed (48) hide show
  1. package/dist/__tests__/advanced.test.d.ts +6 -0
  2. package/dist/__tests__/advanced.test.d.ts.map +1 -0
  3. package/dist/__tests__/advanced.test.js +354 -0
  4. package/dist/__tests__/advanced.test.js.map +1 -0
  5. package/dist/advanced.d.ts +109 -0
  6. package/dist/advanced.d.ts.map +1 -0
  7. package/dist/advanced.js +427 -0
  8. package/dist/advanced.js.map +1 -0
  9. package/dist/cli-wrapper.d.ts +202 -0
  10. package/dist/cli-wrapper.d.ts.map +1 -0
  11. package/dist/cli-wrapper.js +347 -0
  12. package/dist/cli-wrapper.js.map +1 -0
  13. package/dist/cli-wrapper.test.d.ts +12 -0
  14. package/dist/cli-wrapper.test.d.ts.map +1 -0
  15. package/dist/cli-wrapper.test.js +354 -0
  16. package/dist/cli-wrapper.test.js.map +1 -0
  17. package/dist/cli.d.ts +16 -0
  18. package/dist/cli.d.ts.map +1 -0
  19. package/dist/cli.js +354 -0
  20. package/dist/cli.js.map +1 -0
  21. package/dist/index.d.ts +10 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +561 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/integration.test.d.ts +12 -0
  26. package/dist/integration.test.d.ts.map +1 -0
  27. package/dist/integration.test.js +716 -0
  28. package/dist/integration.test.js.map +1 -0
  29. package/dist/queue.d.ts +87 -0
  30. package/dist/queue.d.ts.map +1 -0
  31. package/dist/queue.js +273 -0
  32. package/dist/queue.js.map +1 -0
  33. package/dist/teammates-integration.d.ts +128 -0
  34. package/dist/teammates-integration.d.ts.map +1 -0
  35. package/dist/teammates-integration.js +353 -0
  36. package/dist/teammates-integration.js.map +1 -0
  37. package/dist/test-config.d.ts +104 -0
  38. package/dist/test-config.d.ts.map +1 -0
  39. package/dist/test-config.js +439 -0
  40. package/dist/test-config.js.map +1 -0
  41. package/dist/tools.d.ts +97 -0
  42. package/dist/tools.d.ts.map +1 -0
  43. package/dist/tools.js +627 -0
  44. package/dist/tools.js.map +1 -0
  45. package/package.json +7 -1
  46. package/ARCHITECTURE.md +0 -1802
  47. package/DOCUMENTATION.md +0 -747
  48. 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"}