claude-flow 2.5.0-alpha.138 → 2.5.0-alpha.139
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/bin/claude-flow +1 -1
- package/dist/src/cli/commands/checkpoint.js +156 -0
- package/dist/src/cli/commands/checkpoint.js.map +1 -0
- package/dist/src/cli/commands/hive-mind/pause.js +9 -2
- package/dist/src/cli/commands/hive-mind/pause.js.map +1 -1
- package/dist/src/cli/commands/index.js +114 -1
- package/dist/src/cli/commands/index.js.map +1 -1
- package/dist/src/cli/commands/swarm-spawn.js +33 -5
- package/dist/src/cli/commands/swarm-spawn.js.map +1 -1
- package/dist/src/cli/help-formatter.js +3 -0
- package/dist/src/cli/help-formatter.js.map +1 -1
- package/dist/src/cli/help-text.js +2 -16
- package/dist/src/cli/help-text.js.map +1 -1
- package/dist/src/cli/validation-helper.js.map +1 -1
- package/dist/src/hooks/index.js +3 -0
- package/dist/src/hooks/index.js.map +1 -1
- package/dist/src/mcp/claude-flow-tools.js +150 -205
- package/dist/src/mcp/claude-flow-tools.js.map +1 -1
- package/dist/src/mcp/mcp-server.js +0 -125
- package/dist/src/mcp/mcp-server.js.map +1 -1
- package/dist/src/sdk/checkpoint-manager.js +237 -0
- package/dist/src/sdk/checkpoint-manager.js.map +1 -0
- package/dist/src/sdk/claude-flow-mcp-integration.js +221 -0
- package/dist/src/sdk/claude-flow-mcp-integration.js.map +1 -0
- package/dist/src/sdk/in-process-mcp.js +374 -0
- package/dist/src/sdk/in-process-mcp.js.map +1 -0
- package/dist/src/sdk/query-control.js +139 -293
- package/dist/src/sdk/query-control.js.map +1 -1
- package/dist/src/sdk/session-forking.js +129 -206
- package/dist/src/sdk/session-forking.js.map +1 -1
- package/dist/src/sdk/validation-demo.js +369 -0
- package/dist/src/sdk/validation-demo.js.map +1 -0
- package/package.json +1 -1
- package/scripts/validate-sdk-integration.ts +188 -0
- package/src/cli/commands/checkpoint.ts +220 -0
- package/src/cli/commands/hive-mind/pause.ts +15 -2
- package/src/cli/commands/index.ts +84 -1
- package/src/cli/commands/swarm-spawn.ts +47 -3
- package/src/cli/help-text.js +2 -16
- package/src/cli/simple-cli.ts +1 -0
- package/src/hooks/index.ts +5 -0
- package/src/mcp/claude-flow-tools.ts +120 -203
- package/src/mcp/mcp-server.js +0 -86
- package/src/sdk/checkpoint-manager.ts +403 -0
- package/src/sdk/claude-flow-mcp-integration.ts +387 -0
- package/src/sdk/in-process-mcp.ts +489 -0
- package/src/sdk/query-control.ts +223 -377
- package/src/sdk/session-forking.ts +207 -312
- package/src/sdk/validation-demo.ts +544 -0
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
import { createSdkMcpServer, tool } from '@anthropic-ai/claude-code';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export function createMathMcpServer() {
|
|
4
|
+
return createSdkMcpServer({
|
|
5
|
+
name: 'math-operations',
|
|
6
|
+
version: '1.0.0',
|
|
7
|
+
tools: [
|
|
8
|
+
tool({
|
|
9
|
+
name: 'add',
|
|
10
|
+
description: 'Add two numbers together',
|
|
11
|
+
parameters: z.object({
|
|
12
|
+
a: z.number().describe('First number'),
|
|
13
|
+
b: z.number().describe('Second number')
|
|
14
|
+
}),
|
|
15
|
+
execute: async ({ a, b })=>{
|
|
16
|
+
return {
|
|
17
|
+
result: a + b
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}),
|
|
21
|
+
tool({
|
|
22
|
+
name: 'multiply',
|
|
23
|
+
description: 'Multiply two numbers',
|
|
24
|
+
parameters: z.object({
|
|
25
|
+
a: z.number().describe('First number'),
|
|
26
|
+
b: z.number().describe('Second number')
|
|
27
|
+
}),
|
|
28
|
+
execute: async ({ a, b })=>{
|
|
29
|
+
return {
|
|
30
|
+
result: a * b
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}),
|
|
34
|
+
tool({
|
|
35
|
+
name: 'factorial',
|
|
36
|
+
description: 'Calculate factorial of a number',
|
|
37
|
+
parameters: z.object({
|
|
38
|
+
n: z.number().int().min(0).describe('Number to calculate factorial of')
|
|
39
|
+
}),
|
|
40
|
+
execute: async ({ n })=>{
|
|
41
|
+
let result = 1;
|
|
42
|
+
for(let i = 2; i <= n; i++){
|
|
43
|
+
result *= i;
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
result
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
})
|
|
50
|
+
]
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
export function createSessionMcpServer() {
|
|
54
|
+
const sessions = new Map();
|
|
55
|
+
return createSdkMcpServer({
|
|
56
|
+
name: 'session-manager',
|
|
57
|
+
version: '1.0.0',
|
|
58
|
+
tools: [
|
|
59
|
+
tool({
|
|
60
|
+
name: 'session_create',
|
|
61
|
+
description: 'Create a new session with initial data',
|
|
62
|
+
parameters: z.object({
|
|
63
|
+
sessionId: z.string().describe('Session identifier'),
|
|
64
|
+
data: z.record(z.any()).optional().describe('Initial session data')
|
|
65
|
+
}),
|
|
66
|
+
execute: async ({ sessionId, data = {} })=>{
|
|
67
|
+
if (sessions.has(sessionId)) {
|
|
68
|
+
return {
|
|
69
|
+
error: 'Session already exists'
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
sessions.set(sessionId, {
|
|
73
|
+
data,
|
|
74
|
+
created: Date.now()
|
|
75
|
+
});
|
|
76
|
+
return {
|
|
77
|
+
success: true,
|
|
78
|
+
sessionId,
|
|
79
|
+
created: sessions.get(sessionId).created
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}),
|
|
83
|
+
tool({
|
|
84
|
+
name: 'session_get',
|
|
85
|
+
description: 'Get session data by ID',
|
|
86
|
+
parameters: z.object({
|
|
87
|
+
sessionId: z.string().describe('Session identifier')
|
|
88
|
+
}),
|
|
89
|
+
execute: async ({ sessionId })=>{
|
|
90
|
+
const session = sessions.get(sessionId);
|
|
91
|
+
if (!session) {
|
|
92
|
+
return {
|
|
93
|
+
error: 'Session not found'
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
sessionId,
|
|
98
|
+
data: session.data,
|
|
99
|
+
created: session.created
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}),
|
|
103
|
+
tool({
|
|
104
|
+
name: 'session_update',
|
|
105
|
+
description: 'Update session data (merges with existing)',
|
|
106
|
+
parameters: z.object({
|
|
107
|
+
sessionId: z.string().describe('Session identifier'),
|
|
108
|
+
data: z.record(z.any()).describe('Data to merge')
|
|
109
|
+
}),
|
|
110
|
+
execute: async ({ sessionId, data })=>{
|
|
111
|
+
const session = sessions.get(sessionId);
|
|
112
|
+
if (!session) {
|
|
113
|
+
return {
|
|
114
|
+
error: 'Session not found'
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
session.data = {
|
|
118
|
+
...session.data,
|
|
119
|
+
...data
|
|
120
|
+
};
|
|
121
|
+
return {
|
|
122
|
+
success: true,
|
|
123
|
+
sessionId,
|
|
124
|
+
data: session.data
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
}),
|
|
128
|
+
tool({
|
|
129
|
+
name: 'session_delete',
|
|
130
|
+
description: 'Delete a session',
|
|
131
|
+
parameters: z.object({
|
|
132
|
+
sessionId: z.string().describe('Session identifier')
|
|
133
|
+
}),
|
|
134
|
+
execute: async ({ sessionId })=>{
|
|
135
|
+
const existed = sessions.delete(sessionId);
|
|
136
|
+
return {
|
|
137
|
+
success: existed,
|
|
138
|
+
sessionId
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
}),
|
|
142
|
+
tool({
|
|
143
|
+
name: 'session_list',
|
|
144
|
+
description: 'List all active sessions',
|
|
145
|
+
parameters: z.object({}),
|
|
146
|
+
execute: async ()=>{
|
|
147
|
+
const sessionList = Array.from(sessions.entries()).map(([id, session])=>({
|
|
148
|
+
sessionId: id,
|
|
149
|
+
created: session.created,
|
|
150
|
+
dataKeys: Object.keys(session.data)
|
|
151
|
+
}));
|
|
152
|
+
return {
|
|
153
|
+
sessions: sessionList,
|
|
154
|
+
count: sessionList.length
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
})
|
|
158
|
+
]
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
export function createCheckpointMcpServer() {
|
|
162
|
+
const { checkpointManager } = require('./checkpoint-manager');
|
|
163
|
+
return createSdkMcpServer({
|
|
164
|
+
name: 'checkpoint-manager',
|
|
165
|
+
version: '1.0.0',
|
|
166
|
+
tools: [
|
|
167
|
+
tool({
|
|
168
|
+
name: 'checkpoint_create',
|
|
169
|
+
description: 'Create a checkpoint for a session',
|
|
170
|
+
parameters: z.object({
|
|
171
|
+
sessionId: z.string().describe('Session identifier'),
|
|
172
|
+
description: z.string().describe("Checkpoint description")
|
|
173
|
+
}),
|
|
174
|
+
execute: async ({ sessionId, description })=>{
|
|
175
|
+
try {
|
|
176
|
+
const checkpointId = await checkpointManager.createCheckpoint(sessionId, description);
|
|
177
|
+
return {
|
|
178
|
+
success: true,
|
|
179
|
+
checkpointId,
|
|
180
|
+
description
|
|
181
|
+
};
|
|
182
|
+
} catch (error) {
|
|
183
|
+
return {
|
|
184
|
+
success: false,
|
|
185
|
+
error: error instanceof Error ? error.message : String(error)
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}),
|
|
190
|
+
tool({
|
|
191
|
+
name: 'checkpoint_list',
|
|
192
|
+
description: 'List all checkpoints for a session',
|
|
193
|
+
parameters: z.object({
|
|
194
|
+
sessionId: z.string().describe('Session identifier')
|
|
195
|
+
}),
|
|
196
|
+
execute: async ({ sessionId })=>{
|
|
197
|
+
const checkpoints = checkpointManager.listCheckpoints(sessionId);
|
|
198
|
+
return {
|
|
199
|
+
sessionId,
|
|
200
|
+
checkpoints: checkpoints.map((c)=>({
|
|
201
|
+
id: c.id,
|
|
202
|
+
description: c.description,
|
|
203
|
+
timestamp: c.timestamp,
|
|
204
|
+
messageCount: c.messageCount,
|
|
205
|
+
totalTokens: c.totalTokens,
|
|
206
|
+
filesModified: c.filesModified
|
|
207
|
+
})),
|
|
208
|
+
count: checkpoints.length
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}),
|
|
212
|
+
tool({
|
|
213
|
+
name: 'checkpoint_get',
|
|
214
|
+
description: 'Get checkpoint details',
|
|
215
|
+
parameters: z.object({
|
|
216
|
+
checkpointId: z.string().describe('Checkpoint identifier')
|
|
217
|
+
}),
|
|
218
|
+
execute: async ({ checkpointId })=>{
|
|
219
|
+
const checkpoint = checkpointManager.getCheckpoint(checkpointId);
|
|
220
|
+
if (!checkpoint) {
|
|
221
|
+
return {
|
|
222
|
+
error: 'Checkpoint not found'
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
return {
|
|
226
|
+
checkpoint: {
|
|
227
|
+
id: checkpoint.id,
|
|
228
|
+
sessionId: checkpoint.sessionId,
|
|
229
|
+
description: checkpoint.description,
|
|
230
|
+
timestamp: checkpoint.timestamp,
|
|
231
|
+
messageCount: checkpoint.messageCount,
|
|
232
|
+
totalTokens: checkpoint.totalTokens,
|
|
233
|
+
filesModified: checkpoint.filesModified
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}),
|
|
238
|
+
tool({
|
|
239
|
+
name: 'checkpoint_delete',
|
|
240
|
+
description: 'Delete a checkpoint',
|
|
241
|
+
parameters: z.object({
|
|
242
|
+
checkpointId: z.string().describe('Checkpoint identifier')
|
|
243
|
+
}),
|
|
244
|
+
execute: async ({ checkpointId })=>{
|
|
245
|
+
try {
|
|
246
|
+
await checkpointManager.deleteCheckpoint(checkpointId);
|
|
247
|
+
return {
|
|
248
|
+
success: true,
|
|
249
|
+
checkpointId
|
|
250
|
+
};
|
|
251
|
+
} catch (error) {
|
|
252
|
+
return {
|
|
253
|
+
success: false,
|
|
254
|
+
error: error instanceof Error ? error.message : String(error)
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}),
|
|
259
|
+
tool({
|
|
260
|
+
name: 'checkpoint_diff',
|
|
261
|
+
description: 'Compare two checkpoints',
|
|
262
|
+
parameters: z.object({
|
|
263
|
+
fromId: z.string().describe('From checkpoint ID'),
|
|
264
|
+
toId: z.string().describe('To checkpoint ID')
|
|
265
|
+
}),
|
|
266
|
+
execute: async ({ fromId, toId })=>{
|
|
267
|
+
try {
|
|
268
|
+
const diff = checkpointManager.getCheckpointDiff(fromId, toId);
|
|
269
|
+
return {
|
|
270
|
+
success: true,
|
|
271
|
+
diff
|
|
272
|
+
};
|
|
273
|
+
} catch (error) {
|
|
274
|
+
return {
|
|
275
|
+
success: false,
|
|
276
|
+
error: error instanceof Error ? error.message : String(error)
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
})
|
|
281
|
+
]
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
export function createQueryControlMcpServer() {
|
|
285
|
+
const { queryController } = require('./query-control');
|
|
286
|
+
return createSdkMcpServer({
|
|
287
|
+
name: 'query-control',
|
|
288
|
+
version: '1.0.0',
|
|
289
|
+
tools: [
|
|
290
|
+
tool({
|
|
291
|
+
name: 'query_pause_request',
|
|
292
|
+
description: 'Request a query to pause at next safe point',
|
|
293
|
+
parameters: z.object({
|
|
294
|
+
sessionId: z.string().describe('Session identifier')
|
|
295
|
+
}),
|
|
296
|
+
execute: async ({ sessionId })=>{
|
|
297
|
+
queryController.requestPause(sessionId);
|
|
298
|
+
return {
|
|
299
|
+
success: true,
|
|
300
|
+
sessionId,
|
|
301
|
+
status: 'pause_requested'
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
}),
|
|
305
|
+
tool({
|
|
306
|
+
name: 'query_pause_cancel',
|
|
307
|
+
description: 'Cancel a pause request',
|
|
308
|
+
parameters: z.object({
|
|
309
|
+
sessionId: z.string().describe('Session identifier')
|
|
310
|
+
}),
|
|
311
|
+
execute: async ({ sessionId })=>{
|
|
312
|
+
queryController.cancelPauseRequest(sessionId);
|
|
313
|
+
return {
|
|
314
|
+
success: true,
|
|
315
|
+
sessionId,
|
|
316
|
+
status: 'pause_cancelled'
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
}),
|
|
320
|
+
tool({
|
|
321
|
+
name: 'query_paused_list',
|
|
322
|
+
description: 'List all paused queries',
|
|
323
|
+
parameters: z.object({}),
|
|
324
|
+
execute: async ()=>{
|
|
325
|
+
const paused = queryController.listPausedQueries();
|
|
326
|
+
return {
|
|
327
|
+
paused,
|
|
328
|
+
count: paused.length
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
}),
|
|
332
|
+
tool({
|
|
333
|
+
name: 'query_paused_get',
|
|
334
|
+
description: 'Get paused query state',
|
|
335
|
+
parameters: z.object({
|
|
336
|
+
sessionId: z.string().describe('Session identifier')
|
|
337
|
+
}),
|
|
338
|
+
execute: async ({ sessionId })=>{
|
|
339
|
+
const state = queryController.getPausedState(sessionId);
|
|
340
|
+
if (!state) {
|
|
341
|
+
return {
|
|
342
|
+
error: 'Paused query not found'
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
return {
|
|
346
|
+
sessionId,
|
|
347
|
+
pausePointMessageId: state.pausePointMessageId,
|
|
348
|
+
pausedAt: state.pausedAt,
|
|
349
|
+
messageCount: state.messages.length
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
}),
|
|
353
|
+
tool({
|
|
354
|
+
name: 'query_metrics',
|
|
355
|
+
description: 'Get query control metrics',
|
|
356
|
+
parameters: z.object({}),
|
|
357
|
+
execute: async ()=>{
|
|
358
|
+
const metrics = queryController.getMetrics();
|
|
359
|
+
return {
|
|
360
|
+
metrics: {
|
|
361
|
+
totalPauses: metrics.totalPauses,
|
|
362
|
+
totalResumes: metrics.totalResumes,
|
|
363
|
+
averagePauseDuration: metrics.averagePauseDuration,
|
|
364
|
+
longestPause: metrics.longestPause
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
})
|
|
369
|
+
]
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
export { createMathMcpServer, createSessionMcpServer, createCheckpointMcpServer, createQueryControlMcpServer };
|
|
373
|
+
|
|
374
|
+
//# sourceMappingURL=in-process-mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/sdk/in-process-mcp.ts"],"sourcesContent":["/**\n * Real In-Process MCP - 100% SDK-Powered\n * Claude-Flow v2.5-alpha.130+\n *\n * Uses ONLY Claude Code SDK primitives - TRUE in-process MCP:\n * - createSdkMcpServer() (SDK creates in-process server)\n * - tool() (SDK defines tools with Zod schemas)\n * - No subprocess, stdio, or HTTP transport overhead\n *\n * VERIFIED: Real in-process MCP servers using actual SDK capabilities\n */\n\nimport {\n createSdkMcpServer,\n tool,\n type McpSdkServerConfigWithInstance,\n} from '@anthropic-ai/claude-code';\nimport { z } from 'zod';\n\n/**\n * Example 1: Math Operations MCP Server\n *\n * Simple in-process server with basic math operations\n */\nexport function createMathMcpServer(): McpSdkServerConfigWithInstance {\n return createSdkMcpServer({\n name: 'math-operations',\n version: '1.0.0',\n tools: [\n // Add two numbers\n tool({\n name: 'add',\n description: 'Add two numbers together',\n parameters: z.object({\n a: z.number().describe('First number'),\n b: z.number().describe('Second number'),\n }),\n execute: async ({ a, b }) => {\n return { result: a + b };\n },\n }),\n\n // Multiply two numbers\n tool({\n name: 'multiply',\n description: 'Multiply two numbers',\n parameters: z.object({\n a: z.number().describe('First number'),\n b: z.number().describe('Second number'),\n }),\n execute: async ({ a, b }) => {\n return { result: a * b };\n },\n }),\n\n // Calculate factorial\n tool({\n name: 'factorial',\n description: 'Calculate factorial of a number',\n parameters: z.object({\n n: z.number().int().min(0).describe('Number to calculate factorial of'),\n }),\n execute: async ({ n }) => {\n let result = 1;\n for (let i = 2; i <= n; i++) {\n result *= i;\n }\n return { result };\n },\n }),\n ],\n });\n}\n\n/**\n * Example 2: Session Management MCP Server\n *\n * In-process server for managing session state\n */\nexport function createSessionMcpServer(): McpSdkServerConfigWithInstance {\n // In-process state (no IPC overhead!)\n const sessions = new Map<string, { data: Record<string, any>; created: number }>();\n\n return createSdkMcpServer({\n name: 'session-manager',\n version: '1.0.0',\n tools: [\n // Create session\n tool({\n name: 'session_create',\n description: 'Create a new session with initial data',\n parameters: z.object({\n sessionId: z.string().describe('Session identifier'),\n data: z.record(z.any()).optional().describe('Initial session data'),\n }),\n execute: async ({ sessionId, data = {} }) => {\n if (sessions.has(sessionId)) {\n return { error: 'Session already exists' };\n }\n\n sessions.set(sessionId, {\n data,\n created: Date.now(),\n });\n\n return {\n success: true,\n sessionId,\n created: sessions.get(sessionId)!.created,\n };\n },\n }),\n\n // Get session data\n tool({\n name: 'session_get',\n description: 'Get session data by ID',\n parameters: z.object({\n sessionId: z.string().describe('Session identifier'),\n }),\n execute: async ({ sessionId }) => {\n const session = sessions.get(sessionId);\n\n if (!session) {\n return { error: 'Session not found' };\n }\n\n return {\n sessionId,\n data: session.data,\n created: session.created,\n };\n },\n }),\n\n // Update session data\n tool({\n name: 'session_update',\n description: 'Update session data (merges with existing)',\n parameters: z.object({\n sessionId: z.string().describe('Session identifier'),\n data: z.record(z.any()).describe('Data to merge'),\n }),\n execute: async ({ sessionId, data }) => {\n const session = sessions.get(sessionId);\n\n if (!session) {\n return { error: 'Session not found' };\n }\n\n // Merge data\n session.data = { ...session.data, ...data };\n\n return {\n success: true,\n sessionId,\n data: session.data,\n };\n },\n }),\n\n // Delete session\n tool({\n name: 'session_delete',\n description: 'Delete a session',\n parameters: z.object({\n sessionId: z.string().describe('Session identifier'),\n }),\n execute: async ({ sessionId }) => {\n const existed = sessions.delete(sessionId);\n\n return {\n success: existed,\n sessionId,\n };\n },\n }),\n\n // List all sessions\n tool({\n name: 'session_list',\n description: 'List all active sessions',\n parameters: z.object({}),\n execute: async () => {\n const sessionList = Array.from(sessions.entries()).map(([id, session]) => ({\n sessionId: id,\n created: session.created,\n dataKeys: Object.keys(session.data),\n }));\n\n return {\n sessions: sessionList,\n count: sessionList.length,\n };\n },\n }),\n ],\n });\n}\n\n/**\n * Example 3: Checkpoint Management MCP Server\n *\n * In-process server integrated with checkpoint manager\n */\nexport function createCheckpointMcpServer(): McpSdkServerConfigWithInstance {\n // Import checkpoint manager\n const { checkpointManager } = require('./checkpoint-manager');\n\n return createSdkMcpServer({\n name: 'checkpoint-manager',\n version: '1.0.0',\n tools: [\n // Create checkpoint\n tool({\n name: 'checkpoint_create',\n description: 'Create a checkpoint for a session',\n parameters: z.object({\n sessionId: z.string().describe('Session identifier'),\n description: z.string().describe('Checkpoint description'),\n }),\n execute: async ({ sessionId, description }) => {\n try {\n const checkpointId = await checkpointManager.createCheckpoint(\n sessionId,\n description\n );\n\n return {\n success: true,\n checkpointId,\n description,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n }),\n\n // List checkpoints\n tool({\n name: 'checkpoint_list',\n description: 'List all checkpoints for a session',\n parameters: z.object({\n sessionId: z.string().describe('Session identifier'),\n }),\n execute: async ({ sessionId }) => {\n const checkpoints = checkpointManager.listCheckpoints(sessionId);\n\n return {\n sessionId,\n checkpoints: checkpoints.map(c => ({\n id: c.id,\n description: c.description,\n timestamp: c.timestamp,\n messageCount: c.messageCount,\n totalTokens: c.totalTokens,\n filesModified: c.filesModified,\n })),\n count: checkpoints.length,\n };\n },\n }),\n\n // Get checkpoint info\n tool({\n name: 'checkpoint_get',\n description: 'Get checkpoint details',\n parameters: z.object({\n checkpointId: z.string().describe('Checkpoint identifier'),\n }),\n execute: async ({ checkpointId }) => {\n const checkpoint = checkpointManager.getCheckpoint(checkpointId);\n\n if (!checkpoint) {\n return { error: 'Checkpoint not found' };\n }\n\n return {\n checkpoint: {\n id: checkpoint.id,\n sessionId: checkpoint.sessionId,\n description: checkpoint.description,\n timestamp: checkpoint.timestamp,\n messageCount: checkpoint.messageCount,\n totalTokens: checkpoint.totalTokens,\n filesModified: checkpoint.filesModified,\n },\n };\n },\n }),\n\n // Delete checkpoint\n tool({\n name: 'checkpoint_delete',\n description: 'Delete a checkpoint',\n parameters: z.object({\n checkpointId: z.string().describe('Checkpoint identifier'),\n }),\n execute: async ({ checkpointId }) => {\n try {\n await checkpointManager.deleteCheckpoint(checkpointId);\n\n return {\n success: true,\n checkpointId,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n }),\n\n // Compare checkpoints\n tool({\n name: 'checkpoint_diff',\n description: 'Compare two checkpoints',\n parameters: z.object({\n fromId: z.string().describe('From checkpoint ID'),\n toId: z.string().describe('To checkpoint ID'),\n }),\n execute: async ({ fromId, toId }) => {\n try {\n const diff = checkpointManager.getCheckpointDiff(fromId, toId);\n\n return {\n success: true,\n diff,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n }),\n ],\n });\n}\n\n/**\n * Example 4: Query Control MCP Server\n *\n * In-process server for pause/resume operations\n */\nexport function createQueryControlMcpServer(): McpSdkServerConfigWithInstance {\n const { queryController } = require('./query-control');\n\n return createSdkMcpServer({\n name: 'query-control',\n version: '1.0.0',\n tools: [\n // Request pause\n tool({\n name: 'query_pause_request',\n description: 'Request a query to pause at next safe point',\n parameters: z.object({\n sessionId: z.string().describe('Session identifier'),\n }),\n execute: async ({ sessionId }) => {\n queryController.requestPause(sessionId);\n\n return {\n success: true,\n sessionId,\n status: 'pause_requested',\n };\n },\n }),\n\n // Cancel pause request\n tool({\n name: 'query_pause_cancel',\n description: 'Cancel a pause request',\n parameters: z.object({\n sessionId: z.string().describe('Session identifier'),\n }),\n execute: async ({ sessionId }) => {\n queryController.cancelPauseRequest(sessionId);\n\n return {\n success: true,\n sessionId,\n status: 'pause_cancelled',\n };\n },\n }),\n\n // List paused queries\n tool({\n name: 'query_paused_list',\n description: 'List all paused queries',\n parameters: z.object({}),\n execute: async () => {\n const paused = queryController.listPausedQueries();\n\n return {\n paused,\n count: paused.length,\n };\n },\n }),\n\n // Get paused query state\n tool({\n name: 'query_paused_get',\n description: 'Get paused query state',\n parameters: z.object({\n sessionId: z.string().describe('Session identifier'),\n }),\n execute: async ({ sessionId }) => {\n const state = queryController.getPausedState(sessionId);\n\n if (!state) {\n return { error: 'Paused query not found' };\n }\n\n return {\n sessionId,\n pausePointMessageId: state.pausePointMessageId,\n pausedAt: state.pausedAt,\n messageCount: state.messages.length,\n };\n },\n }),\n\n // Get metrics\n tool({\n name: 'query_metrics',\n description: 'Get query control metrics',\n parameters: z.object({}),\n execute: async () => {\n const metrics = queryController.getMetrics();\n\n return {\n metrics: {\n totalPauses: metrics.totalPauses,\n totalResumes: metrics.totalResumes,\n averagePauseDuration: metrics.averagePauseDuration,\n longestPause: metrics.longestPause,\n },\n };\n },\n }),\n ],\n });\n}\n\n/**\n * Example Usage:\n *\n * ```typescript\n * import { query } from '@anthropic-ai/claude-code';\n * import {\n * createMathMcpServer,\n * createSessionMcpServer,\n * createCheckpointMcpServer,\n * createQueryControlMcpServer,\n * } from './in-process-mcp';\n *\n * // Use in-process MCP servers (no IPC overhead!)\n * const result = await query({\n * prompt: 'Calculate 5! and store result in session',\n * options: {\n * mcpServers: {\n * math: createMathMcpServer(),\n * session: createSessionMcpServer(),\n * checkpoint: createCheckpointMcpServer(),\n * queryControl: createQueryControlMcpServer(),\n * },\n * },\n * });\n * ```\n */\n\n// Export all server factories\nexport {\n createMathMcpServer,\n createSessionMcpServer,\n createCheckpointMcpServer,\n createQueryControlMcpServer,\n};\n"],"names":["createSdkMcpServer","tool","z","createMathMcpServer","name","version","tools","description","parameters","object","a","number","describe","b","execute","result","n","int","min","i","createSessionMcpServer","sessions","Map","sessionId","string","data","record","any","optional","has","error","set","created","Date","now","success","get","session","existed","delete","sessionList","Array","from","entries","map","id","dataKeys","Object","keys","count","length","createCheckpointMcpServer","checkpointManager","require","checkpointId","createCheckpoint","Error","message","String","checkpoints","listCheckpoints","c","timestamp","messageCount","totalTokens","filesModified","checkpoint","getCheckpoint","deleteCheckpoint","fromId","toId","diff","getCheckpointDiff","createQueryControlMcpServer","queryController","requestPause","status","cancelPauseRequest","paused","listPausedQueries","state","getPausedState","pausePointMessageId","pausedAt","messages","metrics","getMetrics","totalPauses","totalResumes","averagePauseDuration","longestPause"],"mappings":"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"}
|