@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,353 @@
1
+ /**
2
+ * Integration with @ebowwa/teammates for Agent Coordination
3
+ * Enables distributed Claude workflows with multi-agent coordination
4
+ *
5
+ * NOTE: This module provides optional integration with @ebowwa/teammates.
6
+ * When the package is not available, functions gracefully degrade to no-op
7
+ * or return appropriate error messages.
8
+ *
9
+ * To enable full teammates integration:
10
+ * 1. Install @ebowwa/teammates: bun add @ebowwa/teammates
11
+ * 2. The dynamic imports below will automatically resolve
12
+ * 3. All team coordination features will become available
13
+ */
14
+ import { sendMessage, syncContext } from "./advanced.js";
15
+ // Flag to track if @ebowwa/teammates is available
16
+ let TEAMMATES_AVAILABLE = false;
17
+ // Try to load the package at module initialization
18
+ async function checkTeammatesAvailable() {
19
+ try {
20
+ await import("@ebowwa/teammates");
21
+ return true;
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ }
27
+ // Initialize the flag (non-blocking)
28
+ void checkTeammatesAvailable().then((available) => {
29
+ TEAMMATES_AVAILABLE = available;
30
+ if (!available) {
31
+ console.debug("[teammates-integration] @ebowwa/teammates not available - running in degraded mode");
32
+ }
33
+ });
34
+ // ============================================================================
35
+ // TEAMMATES INTEGRATION
36
+ // ============================================================================
37
+ /**
38
+ * Send task to a teammate agent via Claude Code session
39
+ */
40
+ export async function sendToTeammate(agentName, prompt, sessionId) {
41
+ // If sessionId provided, send directly to that session
42
+ if (sessionId) {
43
+ return await sendMessage({
44
+ sessionId,
45
+ prompt: `[Task from ${agentName}]\n${prompt}`,
46
+ });
47
+ }
48
+ // Otherwise, try to find session for this agent
49
+ // This would integrate with teammates package to get agent's session
50
+ const agentSessionId = await findAgentSession(agentName);
51
+ if (!agentSessionId) {
52
+ return {
53
+ success: false,
54
+ sessionId: "",
55
+ error: `No active session found for agent ${agentName}`,
56
+ timestamp: new Date().toISOString(),
57
+ };
58
+ }
59
+ return await sendMessage({
60
+ sessionId: agentSessionId,
61
+ prompt: `[Task from ${agentName}]\n${prompt}`,
62
+ });
63
+ }
64
+ /**
65
+ * Find Claude Code session for a teammate agent
66
+ *
67
+ * NOTE: Requires @ebowwa/teammates to be installed.
68
+ * Returns null if package is not available or agent not found.
69
+ */
70
+ async function findAgentSession(agentName) {
71
+ if (!TEAMMATES_AVAILABLE) {
72
+ return null;
73
+ }
74
+ try {
75
+ // Import from teammates package
76
+ const { Team } = await import("@ebowwa/teammates");
77
+ // List all teams to find the agent
78
+ const teamNames = await Team.listAll();
79
+ for (const teamName of teamNames) {
80
+ const team = await Team.load(teamName);
81
+ const member = team.members.find((m) => m.name === agentName);
82
+ if (member) {
83
+ // Extract session ID from agent metadata
84
+ // This assumes sessions are tracked in teammate metadata
85
+ return member.agentId; // Using agentId as sessionId placeholder
86
+ }
87
+ }
88
+ return null;
89
+ }
90
+ catch {
91
+ return null;
92
+ }
93
+ }
94
+ /**
95
+ * Coordinate multi-agent workflow
96
+ */
97
+ export async function coordinateTeamWorkflow(options) {
98
+ const startTime = Date.now();
99
+ const { teamName, tasks, timeout = 300000, parallel = true } = options;
100
+ const agentTasks = new Map();
101
+ const errors = [];
102
+ const results = [];
103
+ // Initialize tasks
104
+ for (const task of tasks) {
105
+ const agentTask = {
106
+ id: `${teamName}-${task.agentName}-${Date.now()}`,
107
+ agentName: task.agentName,
108
+ prompt: task.prompt,
109
+ status: "pending",
110
+ createdAt: Date.now(),
111
+ updatedAt: Date.now(),
112
+ };
113
+ agentTasks.set(task.agentName, agentTask);
114
+ results.push(agentTask);
115
+ }
116
+ // Execute tasks
117
+ if (parallel) {
118
+ // Execute all tasks in parallel
119
+ const executions = tasks.map(async (task) => {
120
+ const agentTask = agentTasks.get(task.agentName);
121
+ try {
122
+ agentTask.status = "in_progress";
123
+ agentTask.updatedAt = Date.now();
124
+ const result = await sendToTeammate(task.agentName, task.prompt);
125
+ if (result.success) {
126
+ agentTask.status = "completed";
127
+ agentTask.result = result.response;
128
+ }
129
+ else {
130
+ agentTask.status = "failed";
131
+ agentTask.error = result.error;
132
+ errors.push(`${task.agentName}: ${result.error}`);
133
+ }
134
+ }
135
+ catch (error) {
136
+ agentTask.status = "failed";
137
+ agentTask.error = String(error);
138
+ errors.push(`${task.agentName}: ${error}`);
139
+ }
140
+ agentTask.updatedAt = Date.now();
141
+ });
142
+ await Promise.all(executions);
143
+ }
144
+ else {
145
+ // Execute tasks sequentially with dependency tracking
146
+ for (const task of tasks) {
147
+ const agentTask = agentTasks.get(task.agentName);
148
+ // Wait for dependencies
149
+ if (task.dependsOn && task.dependsOn.length > 0) {
150
+ for (const dep of task.dependsOn) {
151
+ const depTask = agentTasks.get(dep);
152
+ if (!depTask || depTask.status !== "completed") {
153
+ agentTask.status = "failed";
154
+ agentTask.error = `Dependency ${dep} not completed`;
155
+ errors.push(`${task.agentName}: Dependency ${dep} failed`);
156
+ continue;
157
+ }
158
+ }
159
+ }
160
+ if (agentTask.status === "failed")
161
+ continue;
162
+ try {
163
+ agentTask.status = "in_progress";
164
+ agentTask.updatedAt = Date.now();
165
+ const result = await sendToTeammate(task.agentName, task.prompt);
166
+ if (result.success) {
167
+ agentTask.status = "completed";
168
+ agentTask.result = result.response;
169
+ }
170
+ else {
171
+ agentTask.status = "failed";
172
+ agentTask.error = result.error;
173
+ errors.push(`${task.agentName}: ${result.error}`);
174
+ }
175
+ }
176
+ catch (error) {
177
+ agentTask.status = "failed";
178
+ agentTask.error = String(error);
179
+ errors.push(`${task.agentName}: ${error}`);
180
+ }
181
+ agentTask.updatedAt = Date.now();
182
+ }
183
+ }
184
+ const duration = Date.now() - startTime;
185
+ const success = errors.length === 0;
186
+ return {
187
+ success,
188
+ teamName,
189
+ tasks: results,
190
+ errors,
191
+ duration,
192
+ };
193
+ }
194
+ /**
195
+ * Share context between teammates
196
+ */
197
+ export async function shareContextWithTeam(teamName, key, value, format = "json") {
198
+ return await syncContext({
199
+ operation: "write",
200
+ key: `${teamName}-${key}`,
201
+ value,
202
+ format,
203
+ });
204
+ }
205
+ /**
206
+ * Get shared context for a team
207
+ */
208
+ export async function getTeamContext(teamName, key) {
209
+ return await syncContext({
210
+ operation: "read",
211
+ key: `${teamName}-${key}`,
212
+ });
213
+ }
214
+ /**
215
+ * Broadcast message to all teammates in a team
216
+ *
217
+ * NOTE: Requires @ebowwa/teammates to be installed.
218
+ * Throws error if package is not available.
219
+ */
220
+ export async function broadcastToTeam(teamName, prompt) {
221
+ const results = [];
222
+ if (!TEAMMATES_AVAILABLE) {
223
+ throw new Error(`Cannot broadcast to team ${teamName}: @ebowwa/teammates is not installed. ` +
224
+ `Install it with: bun add @ebowwa/teammates`);
225
+ }
226
+ try {
227
+ // Import from teammates package
228
+ const { Team } = await import("@ebowwa/teammates");
229
+ const team = await Team.load(teamName);
230
+ for (const member of team.members) {
231
+ const result = await sendToTeammate(member.name, prompt);
232
+ results.push({ agentName: member.name, result });
233
+ }
234
+ }
235
+ catch (error) {
236
+ throw new Error(`Failed to broadcast to team ${teamName}: ${error}`);
237
+ }
238
+ return results;
239
+ }
240
+ /**
241
+ * Aggregate results from multiple teammates
242
+ */
243
+ export async function aggregateTeamResults(teamName, taskPrompt) {
244
+ const broadcastResults = await broadcastToTeam(teamName, taskPrompt);
245
+ const results = [];
246
+ const errors = [];
247
+ for (const { agentName, result } of broadcastResults) {
248
+ if (result.success && result.response) {
249
+ results.push({ agentName, result: result.response });
250
+ }
251
+ else {
252
+ errors.push(`${agentName}: ${result.error}`);
253
+ }
254
+ }
255
+ return {
256
+ success: errors.length === 0,
257
+ results,
258
+ errors,
259
+ };
260
+ }
261
+ /**
262
+ * Create a distributed task queue across teammates
263
+ */
264
+ export class DistributedTaskQueue {
265
+ teamName;
266
+ pendingTasks = [];
267
+ agentSessions = new Map();
268
+ constructor(teamName) {
269
+ this.teamName = teamName;
270
+ }
271
+ /**
272
+ * Add task to queue
273
+ */
274
+ async addTask(prompt) {
275
+ const taskId = `${this.teamName}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
276
+ this.pendingTasks.push({ id: taskId, prompt });
277
+ return taskId;
278
+ }
279
+ /**
280
+ * Distribute tasks to available teammates
281
+ *
282
+ * NOTE: Requires @ebowwa/teammates to be installed.
283
+ * Throws error if package is not available.
284
+ */
285
+ async distribute() {
286
+ const results = [];
287
+ if (!TEAMMATES_AVAILABLE) {
288
+ throw new Error(`Cannot distribute tasks: @ebowwa/teammates is not installed. ` +
289
+ `Install it with: bun add @ebowwa/teammates`);
290
+ }
291
+ try {
292
+ const { Team } = await import("@ebowwa/teammates");
293
+ const team = await Team.load(this.teamName);
294
+ const agents = team.members;
295
+ for (let i = 0; i < this.pendingTasks.length; i++) {
296
+ const task = this.pendingTasks[i];
297
+ const agent = agents[i % agents.length]; // Round-robin distribution
298
+ const result = await sendToTeammate(agent.name, task.prompt);
299
+ results.push({ taskId: task.id, agentName: agent.name, result });
300
+ }
301
+ // Clear pending tasks
302
+ this.pendingTasks = [];
303
+ }
304
+ catch (error) {
305
+ throw new Error(`Failed to distribute tasks: ${error}`);
306
+ }
307
+ return results;
308
+ }
309
+ /**
310
+ * Register agent session
311
+ */
312
+ registerAgentSession(agentName, sessionId) {
313
+ this.agentSessions.set(agentName, sessionId);
314
+ }
315
+ /**
316
+ * Get agent session
317
+ */
318
+ getAgentSession(agentName) {
319
+ return this.agentSessions.get(agentName);
320
+ }
321
+ }
322
+ /**
323
+ * Record workflow telemetry for analytics
324
+ */
325
+ export async function recordWorkflowTelemetry(telemetry) {
326
+ try {
327
+ const telemetryPath = `${process.env.HOME}/.claude/telemetry/workflows.json`;
328
+ const { mkdir, readFile, writeFile } = await import("node:fs/promises");
329
+ await mkdir(`${process.env.HOME}/.claude/telemetry`, { recursive: true });
330
+ let telemetryData = [];
331
+ try {
332
+ const existing = await readFile(telemetryPath, "utf-8");
333
+ telemetryData = JSON.parse(existing);
334
+ }
335
+ catch {
336
+ // File doesn't exist yet
337
+ }
338
+ telemetryData.push(telemetry);
339
+ // Keep only last 1000 entries
340
+ if (telemetryData.length > 1000) {
341
+ telemetryData = telemetryData.slice(-1000);
342
+ }
343
+ await writeFile(telemetryPath, JSON.stringify(telemetryData, null, 2));
344
+ }
345
+ catch (error) {
346
+ console.error("[Telemetry] Failed to record:", error);
347
+ }
348
+ }
349
+ // ============================================================================
350
+ // EXPORTS
351
+ // ============================================================================
352
+ export { sendMessage, syncContext, };
353
+ //# sourceMappingURL=teammates-integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teammates-integration.js","sourceRoot":"","sources":["../src/teammates-integration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Test Configuration and Utilities
4
+ *
5
+ * Shared test utilities and mock helpers for the Claude Code MCP server tests.
6
+ */
7
+ /**
8
+ * Test environment configuration
9
+ */
10
+ export declare const TEST_CONFIG: {
11
+ testDir: string;
12
+ mockClaudePath: string;
13
+ testProjectPath: string;
14
+ defaultTimeout: number;
15
+ sessionCleanupAge: number;
16
+ };
17
+ /**
18
+ * Mock session data
19
+ */
20
+ export declare const MOCK_SESSIONS: {
21
+ active: {
22
+ id: string;
23
+ projectPath: string;
24
+ status: string;
25
+ startTime: number;
26
+ pid: number;
27
+ messages: never[];
28
+ output: string[];
29
+ };
30
+ completed: {
31
+ id: string;
32
+ projectPath: string;
33
+ status: string;
34
+ startTime: number;
35
+ endTime: number;
36
+ pid: number;
37
+ messages: {
38
+ role: string;
39
+ content: string;
40
+ timestamp: number;
41
+ }[];
42
+ output: string[];
43
+ };
44
+ error: {
45
+ id: string;
46
+ projectPath: string;
47
+ status: string;
48
+ startTime: number;
49
+ endTime: number;
50
+ error: string;
51
+ output: string[];
52
+ };
53
+ };
54
+ /**
55
+ * Doppler test configurations
56
+ */
57
+ export declare const DOPPLER_TEST_CONFIGS: {
58
+ valid: {
59
+ project: string;
60
+ config: string;
61
+ token: string;
62
+ };
63
+ missingProject: {
64
+ project: undefined;
65
+ config: string;
66
+ token: string;
67
+ };
68
+ missingConfig: {
69
+ project: string;
70
+ config: undefined;
71
+ token: string;
72
+ };
73
+ missingToken: {
74
+ project: string;
75
+ config: string;
76
+ token: undefined;
77
+ };
78
+ };
79
+ /**
80
+ * Mock API keys for testing rolling keys feature
81
+ */
82
+ export declare const MOCK_API_KEYS: {
83
+ single: string;
84
+ multiple: string;
85
+ empty: string;
86
+ malformed: string;
87
+ };
88
+ /**
89
+ * Setup test environment
90
+ */
91
+ export declare function setupTestEnvironment(): Promise<void>;
92
+ /**
93
+ * Cleanup test environment
94
+ */
95
+ export declare function cleanupTestEnvironment(): Promise<void>;
96
+ /**
97
+ * Create a mock Claude binary for testing
98
+ */
99
+ export declare function createMockClaudeBinary(customScript?: string): Promise<string>;
100
+ /**
101
+ * Create a mock doppler command for testing
102
+ */
103
+ export declare function createMockDoppler(): Promise<string>;
104
+ //# sourceMappingURL=test-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-config.d.ts","sourceRoot":"","sources":["../src/test-config.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAKH;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;CAevB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;CAwBhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;CAKzB,CAAC;AAEF;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAU1D;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAO5D;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyCnF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAWE"}