@powerhousedao/reactor-mcp 5.0.0-staging.8 → 5.0.1-staging.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/src/express.d.ts +3 -3
- package/dist/src/express.d.ts.map +1 -1
- package/dist/src/feature-flags.d.ts +4 -0
- package/dist/src/feature-flags.d.ts.map +1 -0
- package/dist/src/feature-flags.js +17 -0
- package/dist/src/feature-flags.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/logger.d.ts +1 -1
- package/dist/src/logger.d.ts.map +1 -1
- package/dist/src/logger.js.map +1 -1
- package/dist/src/server.d.ts +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +1 -2
- package/dist/src/server.js.map +1 -1
- package/dist/src/stdio/index.d.ts.map +1 -1
- package/dist/src/stdio/index.js +17 -7
- package/dist/src/stdio/index.js.map +1 -1
- package/dist/src/stdio/loader.d.ts +1 -1
- package/dist/src/stdio/loader.d.ts.map +1 -1
- package/dist/src/stdio/loader.js +5 -2
- package/dist/src/stdio/loader.js.map +1 -1
- package/dist/src/tools/index.d.ts +3 -0
- package/dist/src/tools/index.d.ts.map +1 -0
- package/dist/src/tools/index.js +3 -0
- package/dist/src/tools/index.js.map +1 -0
- package/dist/src/tools/reactor.d.ts +10 -10
- package/dist/src/tools/reactor.d.ts.map +1 -1
- package/dist/src/tools/reactor.js +12 -13
- package/dist/src/tools/reactor.js.map +1 -1
- package/dist/src/tools/utils.d.ts +3 -3
- package/dist/src/tools/utils.d.ts.map +1 -1
- package/dist/src/tools/utils.js +6 -7
- package/dist/src/tools/utils.js.map +1 -1
- package/dist/test/reactor.test.d.ts +2 -0
- package/dist/test/reactor.test.d.ts.map +1 -0
- package/dist/test/reactor.test.js +501 -0
- package/dist/test/reactor.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +9 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +16 -22
- package/dist/tsconfig.lib.tsbuildinfo +0 -1
|
@@ -0,0 +1,501 @@
|
|
|
1
|
+
import { createReactorMcpProvider } from "@powerhousedao/reactor-mcp";
|
|
2
|
+
import { DocumentNotFoundError, driveDocumentModelModule, ReactorBuilder, } from "document-drive";
|
|
3
|
+
import { documentModelCreateDocument, documentModelDocumentModelModule, documentModelReducer, } from "document-model";
|
|
4
|
+
import { generateId } from "document-model/core";
|
|
5
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
6
|
+
// Mock reactor
|
|
7
|
+
const createMockReactor = () => {
|
|
8
|
+
const mockReactor = {
|
|
9
|
+
initialize: vi.fn().mockResolvedValue(undefined),
|
|
10
|
+
getDocument: vi.fn(),
|
|
11
|
+
};
|
|
12
|
+
return mockReactor;
|
|
13
|
+
};
|
|
14
|
+
async function createReactor() {
|
|
15
|
+
const builder = new ReactorBuilder([
|
|
16
|
+
documentModelDocumentModelModule,
|
|
17
|
+
driveDocumentModelModule,
|
|
18
|
+
]);
|
|
19
|
+
const reactor = builder.build();
|
|
20
|
+
await reactor.initialize();
|
|
21
|
+
return reactor;
|
|
22
|
+
}
|
|
23
|
+
describe.skip("ReactorMcpProvider", () => {
|
|
24
|
+
let mockReactor;
|
|
25
|
+
let reactor;
|
|
26
|
+
beforeEach(async () => {
|
|
27
|
+
reactor = await createReactor();
|
|
28
|
+
mockReactor = createMockReactor();
|
|
29
|
+
vi.clearAllMocks();
|
|
30
|
+
});
|
|
31
|
+
it("should initialize reactor on creation", async () => {
|
|
32
|
+
await createReactorMcpProvider(mockReactor);
|
|
33
|
+
expect(mockReactor.initialize).toHaveBeenCalledOnce();
|
|
34
|
+
});
|
|
35
|
+
describe("createDocument tool", () => {
|
|
36
|
+
it("should retrieve a document successfully", async () => {
|
|
37
|
+
const document = documentModelCreateDocument();
|
|
38
|
+
const resultDocument = await reactor.addDocument(document);
|
|
39
|
+
const provider = await createReactorMcpProvider(reactor);
|
|
40
|
+
const result = await provider.tools.getDocument.callback({
|
|
41
|
+
id: document.header.id,
|
|
42
|
+
});
|
|
43
|
+
expect(JSON.parse(result.content[0].text)).toMatchObject({
|
|
44
|
+
document: {
|
|
45
|
+
header: resultDocument.header,
|
|
46
|
+
state: resultDocument.state,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
expect(result.structuredContent).toMatchObject({
|
|
50
|
+
document: {
|
|
51
|
+
header: resultDocument.header,
|
|
52
|
+
state: resultDocument.state,
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
expect(result.isError).toBeUndefined();
|
|
56
|
+
});
|
|
57
|
+
it("should handle errors gracefully", async () => {
|
|
58
|
+
const provider = await createReactorMcpProvider(reactor);
|
|
59
|
+
const result = await provider.tools.getDocument.callback({
|
|
60
|
+
id: "non-existent-id",
|
|
61
|
+
});
|
|
62
|
+
expect(result.isError).toBe(true);
|
|
63
|
+
expect(result.content).toEqual([
|
|
64
|
+
{
|
|
65
|
+
type: "text",
|
|
66
|
+
text: "Error: Document with id non-existent-id not found",
|
|
67
|
+
},
|
|
68
|
+
]);
|
|
69
|
+
});
|
|
70
|
+
it("should handle non-Error exceptions", async () => {
|
|
71
|
+
const errorMessage = "String error message";
|
|
72
|
+
mockReactor.getDocument = vi.fn().mockRejectedValue(errorMessage);
|
|
73
|
+
const provider = await createReactorMcpProvider(mockReactor);
|
|
74
|
+
const result = await provider.tools.getDocument.callback({
|
|
75
|
+
id: "test-id",
|
|
76
|
+
});
|
|
77
|
+
expect(result.isError).toBe(true);
|
|
78
|
+
expect(result.content).toEqual([
|
|
79
|
+
{
|
|
80
|
+
type: "text",
|
|
81
|
+
text: "Error: String error message",
|
|
82
|
+
},
|
|
83
|
+
]);
|
|
84
|
+
});
|
|
85
|
+
it("should handle empty string ID", async () => {
|
|
86
|
+
mockReactor.getDocument = vi
|
|
87
|
+
.fn()
|
|
88
|
+
.mockRejectedValue(new DocumentNotFoundError(""));
|
|
89
|
+
const provider = await createReactorMcpProvider(reactor);
|
|
90
|
+
const result = await provider.tools.getDocument.callback({ id: "" });
|
|
91
|
+
expect(result.isError).toBe(true);
|
|
92
|
+
expect(result.content).toEqual([
|
|
93
|
+
{
|
|
94
|
+
type: "text",
|
|
95
|
+
text: "Error: Document with id not found",
|
|
96
|
+
},
|
|
97
|
+
]);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
describe("createDocument tool", () => {
|
|
101
|
+
it("should create a document successfully", async () => {
|
|
102
|
+
const provider = await createReactorMcpProvider(reactor);
|
|
103
|
+
const result = await provider.tools.createDocument.callback({
|
|
104
|
+
documentType: "powerhouse/document-model",
|
|
105
|
+
documentId: "test-doc-id",
|
|
106
|
+
});
|
|
107
|
+
expect(result.isError).toBeUndefined();
|
|
108
|
+
expect(result.structuredContent).toStrictEqual({
|
|
109
|
+
documentId: "test-doc-id",
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
describe("getDocuments tool", () => {
|
|
114
|
+
it("should get documents from a drive", async () => {
|
|
115
|
+
const drive = await reactor.addDrive({
|
|
116
|
+
global: { name: "Test Drive" },
|
|
117
|
+
});
|
|
118
|
+
const provider = await createReactorMcpProvider(reactor);
|
|
119
|
+
const result = await provider.tools.getDocuments.callback({
|
|
120
|
+
parentId: drive.header.id,
|
|
121
|
+
});
|
|
122
|
+
expect(result.isError).toBeUndefined();
|
|
123
|
+
expect(result.structuredContent).toMatchObject({
|
|
124
|
+
documentIds: [],
|
|
125
|
+
});
|
|
126
|
+
const { document } = await reactor.queueDocument({
|
|
127
|
+
documentType: "powerhouse/document-model",
|
|
128
|
+
id: generateId(),
|
|
129
|
+
});
|
|
130
|
+
const addResult = await reactor.addAction(drive.header.id, driveDocumentModelModule.actions.addFile({
|
|
131
|
+
id: document?.header.id,
|
|
132
|
+
documentType: "powerhouse/document-model",
|
|
133
|
+
name: "test-doc",
|
|
134
|
+
}));
|
|
135
|
+
expect(addResult.error).toBeUndefined();
|
|
136
|
+
const result2 = await provider.tools.getDocuments.callback({
|
|
137
|
+
parentId: drive.header.id,
|
|
138
|
+
});
|
|
139
|
+
expect(result2.structuredContent).toMatchObject({
|
|
140
|
+
documentIds: [document?.header.id],
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
describe("deleteDocument tool", () => {
|
|
145
|
+
it("should delete a document successfully", async () => {
|
|
146
|
+
const document = documentModelCreateDocument();
|
|
147
|
+
await reactor.addDocument(document);
|
|
148
|
+
const provider = await createReactorMcpProvider(reactor);
|
|
149
|
+
const result = await provider.tools.deleteDocument.callback({
|
|
150
|
+
documentId: document?.header.id,
|
|
151
|
+
});
|
|
152
|
+
expect(result.isError).toBeUndefined();
|
|
153
|
+
expect(result.structuredContent).toMatchObject({
|
|
154
|
+
success: true,
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
it("should handle deletion of non-existent document", async () => {
|
|
158
|
+
const provider = await createReactorMcpProvider(reactor);
|
|
159
|
+
const result = await provider.tools.deleteDocument.callback({
|
|
160
|
+
documentId: "non-existent-id",
|
|
161
|
+
});
|
|
162
|
+
expect(result.isError).toBeUndefined();
|
|
163
|
+
// The reactor implementation returns true even for non-existent documents
|
|
164
|
+
expect(result.structuredContent).toMatchObject({
|
|
165
|
+
success: true,
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
describe("addActions tool", () => {
|
|
170
|
+
it("should add an action to a document", async () => {
|
|
171
|
+
const document = documentModelCreateDocument();
|
|
172
|
+
await reactor.addDocument(document);
|
|
173
|
+
const provider = await createReactorMcpProvider(reactor);
|
|
174
|
+
const action = documentModelDocumentModelModule.actions.setModelName({
|
|
175
|
+
name: "test-doc",
|
|
176
|
+
});
|
|
177
|
+
const result = await provider.tools.addActions.callback({
|
|
178
|
+
documentId: document.header.id,
|
|
179
|
+
actions: [action],
|
|
180
|
+
});
|
|
181
|
+
const expectedResult = documentModelReducer(document, action);
|
|
182
|
+
expect(result.isError).toBeUndefined();
|
|
183
|
+
expect(result.structuredContent).toStrictEqual({
|
|
184
|
+
success: true,
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
it("should add multiple actions to a document", async () => {
|
|
188
|
+
const document = documentModelCreateDocument();
|
|
189
|
+
await reactor.addDocument(document);
|
|
190
|
+
const provider = await createReactorMcpProvider(reactor);
|
|
191
|
+
const actions = [
|
|
192
|
+
documentModelDocumentModelModule.actions.setModelName({
|
|
193
|
+
name: "Test Name 1 ",
|
|
194
|
+
}),
|
|
195
|
+
documentModelDocumentModelModule.actions.setModelName({
|
|
196
|
+
name: "Test Name 2",
|
|
197
|
+
}),
|
|
198
|
+
];
|
|
199
|
+
const result = await provider.tools.addActions.callback({
|
|
200
|
+
documentId: document.header.id,
|
|
201
|
+
actions,
|
|
202
|
+
});
|
|
203
|
+
const intermediateResult = documentModelReducer(document, actions[0]);
|
|
204
|
+
const expectedResult = documentModelReducer(intermediateResult, actions[1]);
|
|
205
|
+
expect(result.isError).toBeUndefined();
|
|
206
|
+
expect(result.structuredContent).toStrictEqual({
|
|
207
|
+
success: true,
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
it("should throw error on invalid action type", async () => {
|
|
211
|
+
const document = documentModelCreateDocument();
|
|
212
|
+
await reactor.addDocument(document);
|
|
213
|
+
const provider = await createReactorMcpProvider(reactor);
|
|
214
|
+
const result = await provider.tools.addActions.callback({
|
|
215
|
+
documentId: document.header.id,
|
|
216
|
+
actions: [
|
|
217
|
+
{
|
|
218
|
+
type: "INVALID_ACTION",
|
|
219
|
+
input: {},
|
|
220
|
+
scope: "global",
|
|
221
|
+
},
|
|
222
|
+
],
|
|
223
|
+
});
|
|
224
|
+
expect(result.isError).toBe(true);
|
|
225
|
+
expect(result.content[0].text).toContain(`Operation "INVALID_ACTION" is not defined in any module of the document model`);
|
|
226
|
+
});
|
|
227
|
+
it("should throw error on invalid action input", async () => {
|
|
228
|
+
const document = documentModelCreateDocument();
|
|
229
|
+
await reactor.addDocument(document);
|
|
230
|
+
const provider = await createReactorMcpProvider(reactor);
|
|
231
|
+
const result = await provider.tools.addActions.callback({
|
|
232
|
+
documentId: document?.header.id,
|
|
233
|
+
actions: [
|
|
234
|
+
{
|
|
235
|
+
type: "SET_MODEL_NAME",
|
|
236
|
+
input: {
|
|
237
|
+
invalidField: "test",
|
|
238
|
+
},
|
|
239
|
+
scope: "global",
|
|
240
|
+
},
|
|
241
|
+
],
|
|
242
|
+
});
|
|
243
|
+
expect(result.isError).toBe(true);
|
|
244
|
+
expect(result.content[0].text)
|
|
245
|
+
.toContain(`Input validation error: Invalid action input: [
|
|
246
|
+
{
|
|
247
|
+
"code": "invalid_type",
|
|
248
|
+
"expected": "string",
|
|
249
|
+
"received": "undefined",
|
|
250
|
+
"path": [
|
|
251
|
+
"name"
|
|
252
|
+
],
|
|
253
|
+
"message": "Required"
|
|
254
|
+
}
|
|
255
|
+
]`);
|
|
256
|
+
});
|
|
257
|
+
it("should throw error on action on non-existent document", async () => {
|
|
258
|
+
const provider = await createReactorMcpProvider(reactor);
|
|
259
|
+
const result = await provider.tools.addActions.callback({
|
|
260
|
+
documentId: "non-existent-id",
|
|
261
|
+
actions: [
|
|
262
|
+
{
|
|
263
|
+
type: "SET_NAME",
|
|
264
|
+
input: "Test Name",
|
|
265
|
+
scope: "global",
|
|
266
|
+
},
|
|
267
|
+
],
|
|
268
|
+
});
|
|
269
|
+
// Action on non-existent document returns an error
|
|
270
|
+
expect(result.isError).toBe(true);
|
|
271
|
+
expect(result.content).toStrictEqual([
|
|
272
|
+
{
|
|
273
|
+
text: "Error: Document with id non-existent-id not found",
|
|
274
|
+
type: "text",
|
|
275
|
+
},
|
|
276
|
+
]);
|
|
277
|
+
expect(result.structuredContent).toBeUndefined();
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
// describe("addOperation tool", () => {
|
|
281
|
+
// it("should add an operation to a document", async () => {
|
|
282
|
+
// const document = documentModelCreateDocument();
|
|
283
|
+
// await reactor.addDocument(document);
|
|
284
|
+
// const provider = await createReactorMcpProvider(reactor);
|
|
285
|
+
// const result = await provider.tools.addOperation.callback({
|
|
286
|
+
// documentId: document.header.id,
|
|
287
|
+
// operation: {
|
|
288
|
+
// type: "SET_NAME",
|
|
289
|
+
// input: "Operation Name",
|
|
290
|
+
// scope: "global",
|
|
291
|
+
// index: 1,
|
|
292
|
+
// timestampUtcMs: new Date().toISOString(),
|
|
293
|
+
// hash: "test-hash",
|
|
294
|
+
// skip: 0,
|
|
295
|
+
// },
|
|
296
|
+
// });
|
|
297
|
+
// expect(result.isError).toBeUndefined();
|
|
298
|
+
// expect(result.structuredContent).toMatchObject({
|
|
299
|
+
// result: {
|
|
300
|
+
// status: "ERROR",
|
|
301
|
+
//
|
|
302
|
+
// error: expect.any(String),
|
|
303
|
+
// operations: [],
|
|
304
|
+
// signals: [],
|
|
305
|
+
// },
|
|
306
|
+
// });
|
|
307
|
+
// });
|
|
308
|
+
// });
|
|
309
|
+
describe("getDrives tool", () => {
|
|
310
|
+
it("should list all drives", async () => {
|
|
311
|
+
await reactor.addDrive({ global: { name: "Test Drive 1" } });
|
|
312
|
+
await reactor.addDrive({ global: { name: "Test Drive 2" } });
|
|
313
|
+
const provider = await createReactorMcpProvider(reactor);
|
|
314
|
+
const result = await provider.tools.getDrives.callback({});
|
|
315
|
+
expect(result.isError).toBeUndefined();
|
|
316
|
+
expect(result.structuredContent).toMatchObject({
|
|
317
|
+
driveIds: expect.arrayContaining([]),
|
|
318
|
+
});
|
|
319
|
+
});
|
|
320
|
+
});
|
|
321
|
+
describe("addDrive tool", () => {
|
|
322
|
+
it("should add a new drive", async () => {
|
|
323
|
+
const provider = await createReactorMcpProvider(reactor);
|
|
324
|
+
const result = await provider.tools.addDrive.callback({
|
|
325
|
+
driveInput: {
|
|
326
|
+
global: {
|
|
327
|
+
name: "New Test Drive",
|
|
328
|
+
icon: "test-icon",
|
|
329
|
+
},
|
|
330
|
+
id: "test-drive-id",
|
|
331
|
+
slug: "test-drive-slug",
|
|
332
|
+
preferredEditor: "test-editor",
|
|
333
|
+
local: {
|
|
334
|
+
availableOffline: true,
|
|
335
|
+
sharingType: "private",
|
|
336
|
+
},
|
|
337
|
+
},
|
|
338
|
+
});
|
|
339
|
+
expect(result.isError).toBeUndefined();
|
|
340
|
+
expect(result.structuredContent).toStrictEqual({
|
|
341
|
+
driveId: "test-drive-id",
|
|
342
|
+
});
|
|
343
|
+
const drive = await reactor.getDrive("test-drive-id");
|
|
344
|
+
expect(drive).toMatchObject({
|
|
345
|
+
header: expect.objectContaining({
|
|
346
|
+
documentType: "powerhouse/document-drive",
|
|
347
|
+
}),
|
|
348
|
+
state: expect.objectContaining({
|
|
349
|
+
global: expect.objectContaining({
|
|
350
|
+
name: expect.any(String),
|
|
351
|
+
}),
|
|
352
|
+
}),
|
|
353
|
+
});
|
|
354
|
+
});
|
|
355
|
+
it("should add a drive with minimal input", async () => {
|
|
356
|
+
const provider = await createReactorMcpProvider(reactor);
|
|
357
|
+
const result = await provider.tools.addDrive.callback({
|
|
358
|
+
driveInput: {
|
|
359
|
+
global: {
|
|
360
|
+
name: "Minimal Drive",
|
|
361
|
+
},
|
|
362
|
+
},
|
|
363
|
+
});
|
|
364
|
+
expect(result.isError).toBeUndefined();
|
|
365
|
+
expect(result.structuredContent).toStrictEqual({
|
|
366
|
+
driveId: expect.any(String),
|
|
367
|
+
});
|
|
368
|
+
const drive = await reactor.getDrive(result.structuredContent.driveId);
|
|
369
|
+
expect(drive).toMatchObject({
|
|
370
|
+
header: expect.objectContaining({
|
|
371
|
+
documentType: "powerhouse/document-drive",
|
|
372
|
+
}),
|
|
373
|
+
state: expect.objectContaining({
|
|
374
|
+
global: expect.objectContaining({
|
|
375
|
+
name: expect.any(String),
|
|
376
|
+
}),
|
|
377
|
+
}),
|
|
378
|
+
});
|
|
379
|
+
});
|
|
380
|
+
});
|
|
381
|
+
describe("getDrive tool", () => {
|
|
382
|
+
it("should get a specific drive", async () => {
|
|
383
|
+
const drive = await reactor.addDrive({ global: { name: "Test Drive" } });
|
|
384
|
+
const provider = await createReactorMcpProvider(reactor);
|
|
385
|
+
const result = await provider.tools.getDrive.callback({
|
|
386
|
+
driveId: drive?.header.id,
|
|
387
|
+
});
|
|
388
|
+
expect(result.isError).toBeUndefined();
|
|
389
|
+
expect(result.structuredContent).toMatchObject({
|
|
390
|
+
drive: expect.objectContaining({
|
|
391
|
+
header: expect.objectContaining({
|
|
392
|
+
documentType: "powerhouse/document-drive",
|
|
393
|
+
}),
|
|
394
|
+
state: expect.objectContaining({
|
|
395
|
+
global: expect.objectContaining({
|
|
396
|
+
name: expect.any(String),
|
|
397
|
+
}),
|
|
398
|
+
}),
|
|
399
|
+
}),
|
|
400
|
+
});
|
|
401
|
+
});
|
|
402
|
+
it("should get a drive with options", async () => {
|
|
403
|
+
const drive = await reactor.addDrive({ global: { name: "Test Drive" } });
|
|
404
|
+
const provider = await createReactorMcpProvider(reactor);
|
|
405
|
+
const result = await provider.tools.getDrive.callback({
|
|
406
|
+
driveId: drive?.header.id,
|
|
407
|
+
options: {
|
|
408
|
+
checkHashes: true,
|
|
409
|
+
},
|
|
410
|
+
});
|
|
411
|
+
expect(result.isError).toBeUndefined();
|
|
412
|
+
expect(result.structuredContent).toMatchObject({
|
|
413
|
+
drive: expect.objectContaining({
|
|
414
|
+
header: expect.objectContaining({
|
|
415
|
+
documentType: "powerhouse/document-drive",
|
|
416
|
+
}),
|
|
417
|
+
state: expect.objectContaining({
|
|
418
|
+
global: expect.objectContaining({
|
|
419
|
+
name: expect.any(String),
|
|
420
|
+
}),
|
|
421
|
+
}),
|
|
422
|
+
}),
|
|
423
|
+
});
|
|
424
|
+
});
|
|
425
|
+
});
|
|
426
|
+
describe("deleteDrive tool", () => {
|
|
427
|
+
it("should delete a drive successfully", async () => {
|
|
428
|
+
const drive = await reactor.addDrive({ global: { name: "Test Drive" } });
|
|
429
|
+
const provider = await createReactorMcpProvider(reactor);
|
|
430
|
+
const result = await provider.tools.deleteDrive.callback({
|
|
431
|
+
driveId: drive.header.id,
|
|
432
|
+
});
|
|
433
|
+
expect(result.isError).toBeUndefined();
|
|
434
|
+
expect(result.structuredContent).toMatchObject({
|
|
435
|
+
success: true,
|
|
436
|
+
});
|
|
437
|
+
});
|
|
438
|
+
it("should handle deletion of non-existent drive", async () => {
|
|
439
|
+
const provider = await createReactorMcpProvider(reactor);
|
|
440
|
+
const result = await provider.tools.deleteDrive.callback({
|
|
441
|
+
driveId: "non-existent-drive-id",
|
|
442
|
+
});
|
|
443
|
+
expect(result.isError).toBeUndefined();
|
|
444
|
+
// The reactor implementation returns true even for non-existent drives
|
|
445
|
+
expect(result.structuredContent).toMatchObject({
|
|
446
|
+
success: true,
|
|
447
|
+
});
|
|
448
|
+
});
|
|
449
|
+
});
|
|
450
|
+
describe("addRemoteDrive tool", () => {
|
|
451
|
+
it("should handle remote drive connection with mock", async () => {
|
|
452
|
+
// Mock the addRemoteDrive method since we can't test actual remote connections
|
|
453
|
+
mockReactor.addRemoteDrive = vi.fn().mockResolvedValue({
|
|
454
|
+
header: { id: "remote-drive-id" },
|
|
455
|
+
state: { global: { name: "Remote Drive" } },
|
|
456
|
+
});
|
|
457
|
+
mockReactor.getDrive = vi.fn().mockResolvedValue({
|
|
458
|
+
header: { id: "remote-drive-id" },
|
|
459
|
+
state: { global: { name: "Remote Drive" } },
|
|
460
|
+
});
|
|
461
|
+
const provider = await createReactorMcpProvider(mockReactor);
|
|
462
|
+
const result = await provider.tools.addRemoteDrive.callback({
|
|
463
|
+
url: "https://example.com/remote-drive",
|
|
464
|
+
options: {
|
|
465
|
+
availableOffline: true,
|
|
466
|
+
sharingType: "public",
|
|
467
|
+
pullFilter: {
|
|
468
|
+
branch: ["main"],
|
|
469
|
+
documentId: ["doc1", "doc2"],
|
|
470
|
+
documentType: ["powerhouse/document-model"],
|
|
471
|
+
scope: ["global"],
|
|
472
|
+
},
|
|
473
|
+
pullInterval: 30000,
|
|
474
|
+
},
|
|
475
|
+
});
|
|
476
|
+
expect(result.isError).toBeUndefined();
|
|
477
|
+
expect(result.structuredContent).toStrictEqual({
|
|
478
|
+
driveId: "remote-drive-id",
|
|
479
|
+
});
|
|
480
|
+
const drive = await mockReactor.getDrive("remote-drive-id");
|
|
481
|
+
expect(drive).toMatchObject({
|
|
482
|
+
header: { id: "remote-drive-id" },
|
|
483
|
+
state: { global: { name: "Remote Drive" } },
|
|
484
|
+
});
|
|
485
|
+
expect(mockReactor.addRemoteDrive).toHaveBeenCalledWith("https://example.com/remote-drive", expect.objectContaining({
|
|
486
|
+
availableOffline: true,
|
|
487
|
+
listeners: [],
|
|
488
|
+
triggers: [],
|
|
489
|
+
sharingType: "public",
|
|
490
|
+
pullFilter: {
|
|
491
|
+
branch: ["main"],
|
|
492
|
+
documentId: ["doc1", "doc2"],
|
|
493
|
+
documentType: ["powerhouse/document-model"],
|
|
494
|
+
scope: ["global"],
|
|
495
|
+
},
|
|
496
|
+
pullInterval: 30000,
|
|
497
|
+
}));
|
|
498
|
+
});
|
|
499
|
+
});
|
|
500
|
+
});
|
|
501
|
+
//# sourceMappingURL=reactor.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactor.test.js","sourceRoot":"","sources":["../../test/reactor.test.ts"],"names":[],"mappings":"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"}
|