@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,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"}
|