@ebowwa/claude-code-mcp 1.0.0 → 1.0.1
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 +344 -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 +544 -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 @@
|
|
|
1
|
+
{"version":3,"file":"advanced.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/advanced.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for Advanced Features
|
|
3
|
+
* send_message, sync_context, stream_output, wait_for_completion
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, expect, beforeEach, afterEach } from "bun:test";
|
|
6
|
+
import { mkdir } from "node:fs/promises";
|
|
7
|
+
import { existsSync } from "node:fs";
|
|
8
|
+
import path from "node:path";
|
|
9
|
+
import { sendMessage, syncContext, streamOutput, waitForCompletion, getQueueStatus, } from "../advanced.js";
|
|
10
|
+
import { enqueue, dequeue, acknowledge, fail, getPendingMessages, clearQueue, } from "../queue.js";
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// TEST UTILITIES
|
|
13
|
+
// ============================================================================
|
|
14
|
+
const TEST_MEMORY_DIR = path.join(process.env.HOME || "", ".claude", "projects", "test", "memory");
|
|
15
|
+
const TEST_QUEUE_DIR = path.join(process.env.HOME || "", ".claude", "queues");
|
|
16
|
+
async function cleanupTestFiles() {
|
|
17
|
+
// Clean up memory files
|
|
18
|
+
if (existsSync(TEST_MEMORY_DIR)) {
|
|
19
|
+
const { readdir, rm } = await import("node:fs/promises");
|
|
20
|
+
const files = await readdir(TEST_MEMORY_DIR);
|
|
21
|
+
for (const file of files) {
|
|
22
|
+
await rm(path.join(TEST_MEMORY_DIR, file));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// Clean up queue files
|
|
26
|
+
if (existsSync(TEST_QUEUE_DIR)) {
|
|
27
|
+
const { readdir, rm } = await import("node:fs/promises");
|
|
28
|
+
const files = await readdir(TEST_QUEUE_DIR);
|
|
29
|
+
for (const file of files) {
|
|
30
|
+
if (file.startsWith("test-")) {
|
|
31
|
+
await rm(path.join(TEST_QUEUE_DIR, file));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// SEND MESSAGE TESTS
|
|
38
|
+
// ============================================================================
|
|
39
|
+
describe("sendMessage", () => {
|
|
40
|
+
beforeEach(async () => {
|
|
41
|
+
await cleanupTestFiles();
|
|
42
|
+
});
|
|
43
|
+
afterEach(async () => {
|
|
44
|
+
await cleanupTestFiles();
|
|
45
|
+
});
|
|
46
|
+
it("should queue message for offline session", async () => {
|
|
47
|
+
const result = await sendMessage({
|
|
48
|
+
sessionId: "test-offline-session",
|
|
49
|
+
prompt: "Hello, Claude!",
|
|
50
|
+
});
|
|
51
|
+
expect(result.success).toBe(true);
|
|
52
|
+
expect(result.queued).toBe(true);
|
|
53
|
+
expect(result.messageId).toBeDefined();
|
|
54
|
+
expect(result.sessionId).toBe("test-offline-session");
|
|
55
|
+
});
|
|
56
|
+
it("should queue message with priority", async () => {
|
|
57
|
+
const highPriority = await sendMessage({
|
|
58
|
+
sessionId: "test-priority-session",
|
|
59
|
+
prompt: "High priority task",
|
|
60
|
+
priority: 10,
|
|
61
|
+
});
|
|
62
|
+
const lowPriority = await sendMessage({
|
|
63
|
+
sessionId: "test-priority-session",
|
|
64
|
+
prompt: "Low priority task",
|
|
65
|
+
priority: 1,
|
|
66
|
+
});
|
|
67
|
+
expect(highPriority.success).toBe(true);
|
|
68
|
+
expect(lowPriority.success).toBe(true);
|
|
69
|
+
// Verify queue ordering
|
|
70
|
+
const pending = await getPendingMessages("test-priority-session");
|
|
71
|
+
expect(pending[0].prompt).toBe("High priority task");
|
|
72
|
+
expect(pending[1].prompt).toBe("Low priority task");
|
|
73
|
+
});
|
|
74
|
+
it("should return error for invalid session", async () => {
|
|
75
|
+
// Mock checkSessionActive to return true for invalid format
|
|
76
|
+
const result = await sendMessage({
|
|
77
|
+
sessionId: "invalid-format",
|
|
78
|
+
prompt: "Test",
|
|
79
|
+
});
|
|
80
|
+
// Should still succeed but queue the message
|
|
81
|
+
expect(result.success).toBe(true);
|
|
82
|
+
expect(result.queued).toBe(true);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
// ============================================================================
|
|
86
|
+
// SYNC CONTEXT TESTS
|
|
87
|
+
// ============================================================================
|
|
88
|
+
describe("syncContext", () => {
|
|
89
|
+
beforeEach(async () => {
|
|
90
|
+
await cleanupTestFiles();
|
|
91
|
+
await mkdir(TEST_MEMORY_DIR, { recursive: true });
|
|
92
|
+
});
|
|
93
|
+
afterEach(async () => {
|
|
94
|
+
await cleanupTestFiles();
|
|
95
|
+
});
|
|
96
|
+
it("should write and read text context", async () => {
|
|
97
|
+
const writeResult = await syncContext({
|
|
98
|
+
operation: "write",
|
|
99
|
+
key: "test-context",
|
|
100
|
+
value: "This is test context",
|
|
101
|
+
projectId: "test",
|
|
102
|
+
format: "text",
|
|
103
|
+
});
|
|
104
|
+
expect(writeResult.success).toBe(true);
|
|
105
|
+
expect(writeResult.key).toBe("test-context");
|
|
106
|
+
const readResult = await syncContext({
|
|
107
|
+
operation: "read",
|
|
108
|
+
key: "test-context",
|
|
109
|
+
projectId: "test",
|
|
110
|
+
});
|
|
111
|
+
expect(readResult.success).toBe(true);
|
|
112
|
+
expect(readResult.value).toBe("This is test context");
|
|
113
|
+
});
|
|
114
|
+
it("should write and read JSON context", async () => {
|
|
115
|
+
const jsonData = { foo: "bar", nested: { value: 42 } };
|
|
116
|
+
const writeResult = await syncContext({
|
|
117
|
+
operation: "write",
|
|
118
|
+
key: "test-json",
|
|
119
|
+
value: JSON.stringify(jsonData),
|
|
120
|
+
projectId: "test",
|
|
121
|
+
format: "json",
|
|
122
|
+
});
|
|
123
|
+
expect(writeResult.success).toBe(true);
|
|
124
|
+
const readResult = await syncContext({
|
|
125
|
+
operation: "read",
|
|
126
|
+
key: "test-json",
|
|
127
|
+
projectId: "test",
|
|
128
|
+
});
|
|
129
|
+
expect(readResult.success).toBe(true);
|
|
130
|
+
expect(JSON.parse(readResult.value)).toEqual(jsonData);
|
|
131
|
+
});
|
|
132
|
+
it("should merge JSON context when merge option is true", async () => {
|
|
133
|
+
// Write initial data
|
|
134
|
+
await syncContext({
|
|
135
|
+
operation: "write",
|
|
136
|
+
key: "test-merge",
|
|
137
|
+
value: JSON.stringify({ existing: "value" }),
|
|
138
|
+
projectId: "test",
|
|
139
|
+
format: "json",
|
|
140
|
+
});
|
|
141
|
+
// Merge new data
|
|
142
|
+
const mergeResult = await syncContext({
|
|
143
|
+
operation: "write",
|
|
144
|
+
key: "test-merge",
|
|
145
|
+
value: JSON.stringify({ new: "data" }),
|
|
146
|
+
projectId: "test",
|
|
147
|
+
format: "json",
|
|
148
|
+
merge: true,
|
|
149
|
+
});
|
|
150
|
+
expect(mergeResult.success).toBe(true);
|
|
151
|
+
// Verify merged content
|
|
152
|
+
const readResult = await syncContext({
|
|
153
|
+
operation: "read",
|
|
154
|
+
key: "test-merge",
|
|
155
|
+
projectId: "test",
|
|
156
|
+
});
|
|
157
|
+
const merged = JSON.parse(readResult.value);
|
|
158
|
+
expect(merged).toEqual({ existing: "value", new: "data" });
|
|
159
|
+
});
|
|
160
|
+
it("should list all context keys", async () => {
|
|
161
|
+
await syncContext({
|
|
162
|
+
operation: "write",
|
|
163
|
+
key: "key1",
|
|
164
|
+
value: "value1",
|
|
165
|
+
projectId: "test",
|
|
166
|
+
});
|
|
167
|
+
await syncContext({
|
|
168
|
+
operation: "write",
|
|
169
|
+
key: "key2",
|
|
170
|
+
value: "value2",
|
|
171
|
+
projectId: "test",
|
|
172
|
+
});
|
|
173
|
+
const listResult = await syncContext({
|
|
174
|
+
operation: "list",
|
|
175
|
+
projectId: "test",
|
|
176
|
+
});
|
|
177
|
+
expect(listResult.success).toBe(true);
|
|
178
|
+
expect(listResult.keys).toContain("key1");
|
|
179
|
+
expect(listResult.keys).toContain("key2");
|
|
180
|
+
});
|
|
181
|
+
it("should delete context", async () => {
|
|
182
|
+
await syncContext({
|
|
183
|
+
operation: "write",
|
|
184
|
+
key: "to-delete",
|
|
185
|
+
value: "delete me",
|
|
186
|
+
projectId: "test",
|
|
187
|
+
});
|
|
188
|
+
const deleteResult = await syncContext({
|
|
189
|
+
operation: "delete",
|
|
190
|
+
key: "to-delete",
|
|
191
|
+
projectId: "test",
|
|
192
|
+
});
|
|
193
|
+
expect(deleteResult.success).toBe(true);
|
|
194
|
+
const readResult = await syncContext({
|
|
195
|
+
operation: "read",
|
|
196
|
+
key: "to-delete",
|
|
197
|
+
projectId: "test",
|
|
198
|
+
});
|
|
199
|
+
expect(readResult.success).toBe(false);
|
|
200
|
+
});
|
|
201
|
+
it("should return error for missing key on read", async () => {
|
|
202
|
+
const result = await syncContext({
|
|
203
|
+
operation: "read",
|
|
204
|
+
key: "nonexistent",
|
|
205
|
+
projectId: "test",
|
|
206
|
+
});
|
|
207
|
+
expect(result.success).toBe(false);
|
|
208
|
+
expect(result.error).toContain("not found");
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
// ============================================================================
|
|
212
|
+
// STREAM OUTPUT TESTS
|
|
213
|
+
// ============================================================================
|
|
214
|
+
describe("streamOutput", () => {
|
|
215
|
+
it("should capture session output", async () => {
|
|
216
|
+
// This test would require mocking tmux commands
|
|
217
|
+
// For now, we test the API contract
|
|
218
|
+
const result = await streamOutput({
|
|
219
|
+
sessionId: "term-testhost-123456",
|
|
220
|
+
follow: false,
|
|
221
|
+
lines: 100,
|
|
222
|
+
});
|
|
223
|
+
// Will fail without actual tmux session, but tests the interface
|
|
224
|
+
expect(result).toBeDefined();
|
|
225
|
+
expect(result.sessionId).toBe("term-testhost-123456");
|
|
226
|
+
});
|
|
227
|
+
it("should handle follow mode", async () => {
|
|
228
|
+
const result = await streamOutput({
|
|
229
|
+
sessionId: "term-testhost-123456",
|
|
230
|
+
follow: true,
|
|
231
|
+
lines: 50,
|
|
232
|
+
});
|
|
233
|
+
expect(result).toBeDefined();
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
// ============================================================================
|
|
237
|
+
// WAIT FOR COMPLETION TESTS
|
|
238
|
+
// ============================================================================
|
|
239
|
+
describe("waitForCompletion", () => {
|
|
240
|
+
it("should timeout for non-existent session", async () => {
|
|
241
|
+
const result = await waitForCompletion({
|
|
242
|
+
sessionId: "term-nonexistent-123456",
|
|
243
|
+
timeout: 1000,
|
|
244
|
+
pollInterval: 100,
|
|
245
|
+
});
|
|
246
|
+
expect(result).toBeDefined();
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
// ============================================================================
|
|
250
|
+
// QUEUE TESTS
|
|
251
|
+
// ============================================================================
|
|
252
|
+
describe("Message Queue", () => {
|
|
253
|
+
beforeEach(async () => {
|
|
254
|
+
await cleanupTestFiles();
|
|
255
|
+
});
|
|
256
|
+
afterEach(async () => {
|
|
257
|
+
await cleanupTestFiles();
|
|
258
|
+
});
|
|
259
|
+
it("should enqueue and dequeue messages", async () => {
|
|
260
|
+
const message = await enqueue("test-queue-session", "Test prompt");
|
|
261
|
+
expect(message.id).toBeDefined();
|
|
262
|
+
expect(message.status).toBe("pending");
|
|
263
|
+
expect(message.attempts).toBe(0);
|
|
264
|
+
const dequeued = await dequeue("test-queue-session");
|
|
265
|
+
expect(dequeued.isEmpty).toBe(false);
|
|
266
|
+
expect(dequeued.message).toBeDefined();
|
|
267
|
+
expect(dequeued.message.id).toBe(message.id);
|
|
268
|
+
});
|
|
269
|
+
it("should acknowledge message", async () => {
|
|
270
|
+
const message = await enqueue("test-ack-session", "Ack test");
|
|
271
|
+
const acknowledged = await acknowledge("test-ack-session", message.id);
|
|
272
|
+
expect(acknowledged).toBe(true);
|
|
273
|
+
});
|
|
274
|
+
it("should mark message as failed", async () => {
|
|
275
|
+
const message = await enqueue("test-fail-session", "Fail test");
|
|
276
|
+
const failed = await fail("test-fail-session", message.id, "Test error");
|
|
277
|
+
expect(failed).toBe(true);
|
|
278
|
+
// Verify message status updated
|
|
279
|
+
const pending = await getPendingMessages("test-fail-session");
|
|
280
|
+
const failedMsg = pending.find(m => m.id === message.id);
|
|
281
|
+
expect(failedMsg?.attempts).toBe(1);
|
|
282
|
+
});
|
|
283
|
+
it("should respect max retry attempts", async () => {
|
|
284
|
+
const message = await enqueue("test-retry-session", "Retry test");
|
|
285
|
+
// Fail it 5 times (max attempts)
|
|
286
|
+
for (let i = 0; i < 5; i++) {
|
|
287
|
+
await fail("test-retry-session", message.id, `Error ${i}`);
|
|
288
|
+
}
|
|
289
|
+
const pending = await getPendingMessages("test-retry-session");
|
|
290
|
+
const retryMsg = pending.find(m => m.id === message.id);
|
|
291
|
+
expect(retryMsg?.attempts).toBe(5);
|
|
292
|
+
expect(retryMsg?.status).toBe("failed");
|
|
293
|
+
});
|
|
294
|
+
it("should get queue stats", async () => {
|
|
295
|
+
await enqueue("test-stats-session", "Message 1");
|
|
296
|
+
await enqueue("test-stats-session", "Message 2");
|
|
297
|
+
const stats = await getQueueStatus("test-stats-session");
|
|
298
|
+
expect(stats).toBeDefined();
|
|
299
|
+
expect(stats.pending).toBe(2);
|
|
300
|
+
expect(stats.total).toBe(2);
|
|
301
|
+
});
|
|
302
|
+
it("should clear queue", async () => {
|
|
303
|
+
await enqueue("test-clear-session", "Message 1");
|
|
304
|
+
await enqueue("test-clear-session", "Message 2");
|
|
305
|
+
const cleared = await clearQueue("test-clear-session");
|
|
306
|
+
expect(cleared).toBe(true);
|
|
307
|
+
const stats = await getQueueStatus("test-clear-session");
|
|
308
|
+
expect(stats).toBeNull();
|
|
309
|
+
});
|
|
310
|
+
});
|
|
311
|
+
// ============================================================================
|
|
312
|
+
// INTEGRATION TESTS
|
|
313
|
+
// ============================================================================
|
|
314
|
+
describe("Integration Tests", () => {
|
|
315
|
+
beforeEach(async () => {
|
|
316
|
+
await cleanupTestFiles();
|
|
317
|
+
});
|
|
318
|
+
afterEach(async () => {
|
|
319
|
+
await cleanupTestFiles();
|
|
320
|
+
});
|
|
321
|
+
it("should handle full message workflow", async () => {
|
|
322
|
+
const sessionId = "test-workflow-session";
|
|
323
|
+
// 1. Queue message for offline session
|
|
324
|
+
const sent = await sendMessage({
|
|
325
|
+
sessionId,
|
|
326
|
+
prompt: "Analyze the codebase",
|
|
327
|
+
});
|
|
328
|
+
expect(sent.success).toBe(true);
|
|
329
|
+
expect(sent.queued).toBe(true);
|
|
330
|
+
// 2. Share context
|
|
331
|
+
await syncContext({
|
|
332
|
+
operation: "write",
|
|
333
|
+
key: `${sessionId}-context`,
|
|
334
|
+
value: JSON.stringify({ project: "test", branch: "dev" }),
|
|
335
|
+
projectId: "test",
|
|
336
|
+
format: "json",
|
|
337
|
+
});
|
|
338
|
+
// 3. Verify context shared
|
|
339
|
+
const context = await syncContext({
|
|
340
|
+
operation: "read",
|
|
341
|
+
key: `${sessionId}-context`,
|
|
342
|
+
projectId: "test",
|
|
343
|
+
});
|
|
344
|
+
expect(context.success).toBe(true);
|
|
345
|
+
// 4. Check queue status
|
|
346
|
+
const stats = await getQueueStatus(sessionId);
|
|
347
|
+
expect(stats.pending).toBe(1);
|
|
348
|
+
});
|
|
349
|
+
});
|
|
350
|
+
// ============================================================================
|
|
351
|
+
// RUN ALL TESTS
|
|
352
|
+
// ============================================================================
|
|
353
|
+
console.log("Advanced Features Tests loaded");
|
|
354
|
+
//# sourceMappingURL=advanced.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advanced.test.js","sourceRoot":"","sources":["../../src/__tests__/advanced.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advanced Features for Claude Code MCP Server
|
|
3
|
+
* send_message, sync_context, stream_output, wait_for_completion
|
|
4
|
+
*/
|
|
5
|
+
import { enqueue, dequeue, acknowledge, fail, getPendingMessages, getQueueStats, canRetry, getRetryDelay } from "./queue.js";
|
|
6
|
+
/**
|
|
7
|
+
* SSH connection options (placeholder for future SSH support)
|
|
8
|
+
*/
|
|
9
|
+
export interface SSHOptions {
|
|
10
|
+
host: string;
|
|
11
|
+
port?: number;
|
|
12
|
+
username?: string;
|
|
13
|
+
keyPath?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface SendMessageOptions {
|
|
16
|
+
sessionId: string;
|
|
17
|
+
prompt: string;
|
|
18
|
+
timeout?: number;
|
|
19
|
+
waitForResponse?: boolean;
|
|
20
|
+
stream?: boolean;
|
|
21
|
+
priority?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface SendMessageResult {
|
|
24
|
+
success: boolean;
|
|
25
|
+
sessionId: string;
|
|
26
|
+
messageId?: string;
|
|
27
|
+
response?: string;
|
|
28
|
+
queued?: boolean;
|
|
29
|
+
error?: string;
|
|
30
|
+
timestamp: string;
|
|
31
|
+
}
|
|
32
|
+
export interface SyncContextOptions {
|
|
33
|
+
operation: "read" | "write" | "list" | "delete";
|
|
34
|
+
key?: string;
|
|
35
|
+
value?: string;
|
|
36
|
+
projectId?: string;
|
|
37
|
+
format?: "json" | "text" | "markdown";
|
|
38
|
+
merge?: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface SyncContextResult {
|
|
41
|
+
success: boolean;
|
|
42
|
+
operation: string;
|
|
43
|
+
key?: string;
|
|
44
|
+
value?: string;
|
|
45
|
+
keys?: string[];
|
|
46
|
+
error?: string;
|
|
47
|
+
}
|
|
48
|
+
export interface StreamOutputOptions {
|
|
49
|
+
sessionId: string;
|
|
50
|
+
follow?: boolean;
|
|
51
|
+
lines?: number;
|
|
52
|
+
since?: string;
|
|
53
|
+
sshOptions?: SSHOptions;
|
|
54
|
+
}
|
|
55
|
+
export interface StreamOutputResult {
|
|
56
|
+
sessionId: string;
|
|
57
|
+
output: string;
|
|
58
|
+
timestamp: string;
|
|
59
|
+
complete: boolean;
|
|
60
|
+
truncated?: boolean;
|
|
61
|
+
}
|
|
62
|
+
export interface WaitForCompletionOptions {
|
|
63
|
+
sessionId: string;
|
|
64
|
+
timeout?: number;
|
|
65
|
+
pollInterval?: number;
|
|
66
|
+
sshOptions?: SSHOptions;
|
|
67
|
+
}
|
|
68
|
+
export interface WaitForCompletionResult {
|
|
69
|
+
success: boolean;
|
|
70
|
+
sessionId: string;
|
|
71
|
+
completed: boolean;
|
|
72
|
+
timeout: boolean;
|
|
73
|
+
result?: string;
|
|
74
|
+
error?: string;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Send a prompt to a running Claude Code session
|
|
78
|
+
*/
|
|
79
|
+
export declare function sendMessage(options: SendMessageOptions): Promise<SendMessageResult>;
|
|
80
|
+
/**
|
|
81
|
+
* Sync context/memory between Claude Code sessions
|
|
82
|
+
*/
|
|
83
|
+
export declare function syncContext(options: SyncContextOptions): Promise<SyncContextResult>;
|
|
84
|
+
/**
|
|
85
|
+
* Stream output from a Claude Code session
|
|
86
|
+
*/
|
|
87
|
+
export declare function streamOutput(options: StreamOutputOptions): Promise<StreamOutputResult>;
|
|
88
|
+
/**
|
|
89
|
+
* Wait for a session to complete its current task
|
|
90
|
+
*/
|
|
91
|
+
export declare function waitForCompletion(options: WaitForCompletionOptions): Promise<WaitForCompletionResult>;
|
|
92
|
+
/**
|
|
93
|
+
* Process pending messages for a session when it comes online
|
|
94
|
+
*/
|
|
95
|
+
export declare function processPendingMessages(sessionId: string, sshOptions: SSHOptions): Promise<{
|
|
96
|
+
processed: number;
|
|
97
|
+
failed: number;
|
|
98
|
+
}>;
|
|
99
|
+
/**
|
|
100
|
+
* Get queue status for a session
|
|
101
|
+
*/
|
|
102
|
+
export declare function getQueueStatus(sessionId: string): Promise<{
|
|
103
|
+
pending: number;
|
|
104
|
+
delivered: number;
|
|
105
|
+
failed: number;
|
|
106
|
+
total: number;
|
|
107
|
+
} | null>;
|
|
108
|
+
export { enqueue, dequeue, acknowledge, fail, getPendingMessages, getQueueStats, canRetry, getRetryDelay, };
|
|
109
|
+
//# sourceMappingURL=advanced.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advanced.d.ts","sourceRoot":"","sources":["../src/advanced.ts"],"names":[],"mappings":"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"}
|