@bitsbound/mcp-server 1.0.0

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.
@@ -0,0 +1,591 @@
1
+ ////////////////////////////////////////
2
+ // # GOLDEN RULE!!!! HONOR ABOVE ALL!!!!
3
+ ////////////////////////////////////////
4
+ // NO NEW FILES!!!!!!!!!
5
+ ////////////////////////////////////////
6
+ import { DEFAULT_API_URL } from '../../types/Bitsbound_Kings_McpServer_Backend_Types.js';
7
+ import { apiLogger } from '../../logger/Bitsbound_Kings_McpServer_Backend_Logger.js';
8
+ import { randomUUID } from 'node:crypto';
9
+ import { readFile } from 'node:fs/promises';
10
+ import { basename } from 'node:path';
11
+ // D: In-memory cache with 1-hour expiry
12
+ const fileCache = new Map();
13
+ // T: Cleanup expired files every 5 minutes
14
+ setInterval(() => {
15
+ const now = new Date();
16
+ for (const [fileId, file] of fileCache) {
17
+ if (file.expiresAt <= now) {
18
+ fileCache.delete(fileId);
19
+ apiLogger.info('Expired file removed from cache', { fileId });
20
+ }
21
+ }
22
+ }, 5 * 60 * 1000);
23
+ // D: In-memory chunked upload sessions with 1-hour expiry
24
+ const chunkedUploadCache = new Map();
25
+ // T: Cleanup expired chunked upload sessions every 5 minutes
26
+ setInterval(() => {
27
+ const now = new Date();
28
+ for (const [uploadId, session] of chunkedUploadCache) {
29
+ if (session.expiresAt <= now) {
30
+ chunkedUploadCache.delete(uploadId);
31
+ apiLogger.info('Expired chunked upload session removed', { uploadId });
32
+ }
33
+ }
34
+ }, 5 * 60 * 1000);
35
+ /*
36
+ ❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅
37
+ */
38
+ // ##### DEFINITIONS 'R_DVT_G_D' - Backautocrat Class
39
+ /*
40
+ ❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅❅
41
+ */
42
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
43
+ // Backautocrat 'R_DVT_G_D_Backautocrat' - Orchestrates API calls to BitsBound SaaS backend
44
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
45
+ export class BitsBoundBackautocrat {
46
+ apiUrl;
47
+ apiKey;
48
+ constructor(config) {
49
+ this.apiUrl = config.BITSBOUND_API_URL || DEFAULT_API_URL;
50
+ this.apiKey = config.BITSBOUND_API_KEY;
51
+ if (!this.apiKey) {
52
+ throw new Error('BITSBOUND_API_KEY is required');
53
+ }
54
+ }
55
+ // ────────────────────────────────────────────────────────────────────────────────────────────────────────────────
56
+ // Private: HTTP Request Helper 'R_DVT_G_T_Request'
57
+ // ────────────────────────────────────────────────────────────────────────────────────────────────────────────────
58
+ async request(method, endpoint, body) {
59
+ const url = `${this.apiUrl}${endpoint}`;
60
+ apiLogger.debug('Making API request', { method, endpoint });
61
+ try {
62
+ const response = await fetch(url, {
63
+ method,
64
+ headers: {
65
+ 'Content-Type': 'application/json',
66
+ 'Authorization': `Bearer ${this.apiKey}`,
67
+ 'X-MCP-Client': 'bitsbound-mcp-server/1.0.0'
68
+ },
69
+ body: body ? JSON.stringify(body) : undefined
70
+ });
71
+ if (!response.ok) {
72
+ const errorText = await response.text();
73
+ apiLogger.error('API request failed', {
74
+ status: response.status,
75
+ error: errorText
76
+ });
77
+ return {
78
+ success: false,
79
+ error: `API error ${response.status}: ${errorText}`
80
+ };
81
+ }
82
+ const data = await response.json();
83
+ apiLogger.debug('API request successful', { endpoint });
84
+ return { success: true, data };
85
+ }
86
+ catch (error) {
87
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
88
+ apiLogger.error('API request exception', { error: errorMessage });
89
+ return {
90
+ success: false,
91
+ error: `Request failed: ${errorMessage}`
92
+ };
93
+ }
94
+ }
95
+ /*
96
+ ######################################################################################################################################################################################################
97
+ */
98
+ // #### LOCAL 'R_DVT_L' - Tool Handler Methods
99
+ /*
100
+ ######################################################################################################################################################################################################
101
+ */
102
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
103
+ // CHUNKED UPLOAD TOOLS - Avoids claude.ai permission dialog timeout on large strings
104
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
105
+ // Tool: start_upload 'R_DVT_L_T_StartUpload' - Step 1: Initialize chunked upload session
106
+ async startUpload(input) {
107
+ apiLogger.info('startUpload called', {
108
+ fileName: input.fileName,
109
+ totalChunks: input.totalChunks
110
+ });
111
+ // V: Validate required fields
112
+ if (!input.fileName) {
113
+ throw new Error('fileName is required');
114
+ }
115
+ if (!input.totalChunks || input.totalChunks < 1) {
116
+ throw new Error('totalChunks must be at least 1');
117
+ }
118
+ // T: Generate uploadId and create session
119
+ const uploadId = `upload_${randomUUID().slice(0, 8)}`;
120
+ const now = new Date();
121
+ const expiresAt = new Date(now.getTime() + 60 * 60 * 1000); // 1 hour
122
+ chunkedUploadCache.set(uploadId, {
123
+ fileName: input.fileName,
124
+ totalChunks: input.totalChunks,
125
+ chunks: new Map(),
126
+ uploadedAt: now,
127
+ expiresAt
128
+ });
129
+ apiLogger.info('Chunked upload session started', {
130
+ uploadId,
131
+ fileName: input.fileName,
132
+ totalChunks: input.totalChunks
133
+ });
134
+ return {
135
+ uploadId,
136
+ fileName: input.fileName,
137
+ totalChunks: input.totalChunks,
138
+ expiresAt: expiresAt.toISOString()
139
+ };
140
+ }
141
+ // Tool: upload_chunk 'R_DVT_L_T_UploadChunk' - Step 2: Upload a single chunk
142
+ async uploadChunk(input) {
143
+ apiLogger.info('uploadChunk called', {
144
+ uploadId: input.uploadId,
145
+ chunkIndex: input.chunkIndex,
146
+ chunkDataLength: input.chunkData?.length || 0
147
+ });
148
+ // V: Validate required fields
149
+ if (!input.uploadId) {
150
+ throw new Error('uploadId is required');
151
+ }
152
+ if (input.chunkIndex === undefined || input.chunkIndex < 0) {
153
+ throw new Error('chunkIndex must be a non-negative integer');
154
+ }
155
+ if (!input.chunkData) {
156
+ throw new Error('chunkData is required');
157
+ }
158
+ // T: Get upload session
159
+ const session = chunkedUploadCache.get(input.uploadId);
160
+ if (!session) {
161
+ throw new Error(`Upload session not found or expired. uploadId: ${input.uploadId}. Please start a new upload with start_upload.`);
162
+ }
163
+ // V: Check chunk index is valid
164
+ if (input.chunkIndex >= session.totalChunks) {
165
+ throw new Error(`chunkIndex ${input.chunkIndex} is out of range. Expected 0-${session.totalChunks - 1}`);
166
+ }
167
+ // T: Store chunk
168
+ session.chunks.set(input.chunkIndex, input.chunkData);
169
+ const chunksReceived = session.chunks.size;
170
+ const chunksRemaining = session.totalChunks - chunksReceived;
171
+ apiLogger.info('Chunk received', {
172
+ uploadId: input.uploadId,
173
+ chunkIndex: input.chunkIndex,
174
+ chunksReceived,
175
+ chunksRemaining
176
+ });
177
+ return {
178
+ uploadId: input.uploadId,
179
+ chunkIndex: input.chunkIndex,
180
+ chunksReceived,
181
+ chunksRemaining
182
+ };
183
+ }
184
+ // Tool: complete_upload 'R_DVT_L_T_CompleteUpload' - Step 3: Assemble chunks and get fileId
185
+ async completeUpload(input) {
186
+ apiLogger.info('completeUpload called', { uploadId: input.uploadId });
187
+ // V: Validate required fields
188
+ if (!input.uploadId) {
189
+ throw new Error('uploadId is required');
190
+ }
191
+ // T: Get upload session
192
+ const session = chunkedUploadCache.get(input.uploadId);
193
+ if (!session) {
194
+ throw new Error(`Upload session not found or expired. uploadId: ${input.uploadId}. Please start a new upload with start_upload.`);
195
+ }
196
+ // V: Check all chunks received
197
+ if (session.chunks.size !== session.totalChunks) {
198
+ const missingChunks = [];
199
+ for (let i = 0; i < session.totalChunks; i++) {
200
+ if (!session.chunks.has(i)) {
201
+ missingChunks.push(i);
202
+ }
203
+ }
204
+ throw new Error(`Missing chunks: ${missingChunks.join(', ')}. Received ${session.chunks.size} of ${session.totalChunks} chunks.`);
205
+ }
206
+ // T: Reassemble base64 string from chunks in order
207
+ const chunks = [];
208
+ for (let i = 0; i < session.totalChunks; i++) {
209
+ chunks.push(session.chunks.get(i));
210
+ }
211
+ const docxBase64 = chunks.join('');
212
+ // T: Generate fileId and store in file cache
213
+ const fileId = `file_${randomUUID().slice(0, 8)}`;
214
+ const now = new Date();
215
+ const expiresAt = new Date(now.getTime() + 60 * 60 * 1000); // 1 hour
216
+ fileCache.set(fileId, {
217
+ docxBase64,
218
+ fileName: session.fileName,
219
+ uploadedAt: now,
220
+ expiresAt
221
+ });
222
+ // T: Clean up upload session
223
+ chunkedUploadCache.delete(input.uploadId);
224
+ // Calculate file size from base64
225
+ const fileSizeBytes = Math.floor((docxBase64.length * 3) / 4);
226
+ apiLogger.info('Chunked upload completed', {
227
+ uploadId: input.uploadId,
228
+ fileId,
229
+ fileName: session.fileName,
230
+ fileSizeBytes,
231
+ totalChunks: session.totalChunks
232
+ });
233
+ return {
234
+ fileId,
235
+ fileName: session.fileName,
236
+ fileSizeBytes,
237
+ expiresAt: expiresAt.toISOString()
238
+ };
239
+ }
240
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
241
+ // LEGACY SINGLE UPLOAD - May timeout in claude.ai for large files
242
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
243
+ // Tool: upload_contract 'R_DVT_L_T_UploadContract' - Legacy: Store file, return fileId
244
+ async uploadContract(input) {
245
+ apiLogger.info('uploadContract called', {
246
+ fileName: input.fileName,
247
+ base64Length: input.docxBase64?.length || 0
248
+ });
249
+ // V: Validate required fields
250
+ if (!input.docxBase64) {
251
+ throw new Error('docxBase64 is required');
252
+ }
253
+ if (!input.fileName) {
254
+ throw new Error('fileName is required');
255
+ }
256
+ // T: Generate a short fileId and store in cache
257
+ const fileId = `file_${randomUUID().slice(0, 8)}`;
258
+ const now = new Date();
259
+ const expiresAt = new Date(now.getTime() + 60 * 60 * 1000); // 1 hour
260
+ fileCache.set(fileId, {
261
+ docxBase64: input.docxBase64,
262
+ fileName: input.fileName,
263
+ uploadedAt: now,
264
+ expiresAt
265
+ });
266
+ // Calculate file size from base64
267
+ const fileSizeBytes = Math.floor((input.docxBase64.length * 3) / 4);
268
+ apiLogger.info('Contract uploaded to cache', {
269
+ fileId,
270
+ fileName: input.fileName,
271
+ fileSizeBytes,
272
+ expiresAt: expiresAt.toISOString()
273
+ });
274
+ return {
275
+ fileId,
276
+ fileName: input.fileName,
277
+ fileSizeBytes,
278
+ expiresAt: expiresAt.toISOString()
279
+ };
280
+ }
281
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
282
+ // Tool: process_contract 'R_DVT_L_T_ProcessContract' - Step 2: Process using fileId
283
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
284
+ async analyzeContract(input) {
285
+ apiLogger.info('analyzeContract called', {
286
+ fileId: input.fileId,
287
+ filePath: input.filePath,
288
+ inputKeys: Object.keys(input || {})
289
+ });
290
+ // V: Validate that either fileId OR filePath is provided (not both, not neither)
291
+ if (!input.fileId && !input.filePath) {
292
+ throw new Error('Either fileId or filePath is required. Use fileId with upload_contract/chunked upload (for claude.ai), or filePath for Claude Desktop (server reads local file directly).');
293
+ }
294
+ if (input.fileId && input.filePath) {
295
+ throw new Error('Provide either fileId OR filePath, not both.');
296
+ }
297
+ let docxBase64;
298
+ let fileName;
299
+ if (input.filePath) {
300
+ // T: Claude Desktop mode - read file directly from local filesystem
301
+ apiLogger.info('Reading contract from local file path', { filePath: input.filePath });
302
+ try {
303
+ const fileBuffer = await readFile(input.filePath);
304
+ docxBase64 = fileBuffer.toString('base64');
305
+ fileName = basename(input.filePath);
306
+ apiLogger.info('Successfully read local file', { fileName, base64Length: docxBase64.length });
307
+ }
308
+ catch (error) {
309
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
310
+ throw new Error(`Failed to read local file at ${input.filePath}: ${errorMessage}`);
311
+ }
312
+ }
313
+ else {
314
+ // T: claude.ai mode - retrieve file from cache using fileId
315
+ const cachedFile = fileCache.get(input.fileId);
316
+ if (!cachedFile) {
317
+ throw new Error(`File not found or expired. fileId: ${input.fileId}. Please upload the contract again using upload_contract.`);
318
+ }
319
+ // V: Check if expired
320
+ if (cachedFile.expiresAt <= new Date()) {
321
+ fileCache.delete(input.fileId);
322
+ throw new Error(`File expired. fileId: ${input.fileId}. Please upload the contract again using upload_contract.`);
323
+ }
324
+ docxBase64 = cachedFile.docxBase64;
325
+ fileName = cachedFile.fileName;
326
+ apiLogger.info('Starting contract analysis from cache', { fileId: input.fileId, fileName, base64Length: docxBase64.length });
327
+ }
328
+ const response = await this.request('POST', '/api/v1/mcp/analyze', {
329
+ contract_content: docxBase64,
330
+ filename: fileName,
331
+ analysis_type: input.analysisDepth || 'standard',
332
+ perspective: input.perspective || 'customer'
333
+ });
334
+ if (!response.success || !response.data) {
335
+ throw new Error(response.error || 'Failed to start analysis');
336
+ }
337
+ return {
338
+ analysisId: response.data.analysisId,
339
+ status: 'queued',
340
+ estimatedTimeMinutes: response.data.estimatedMinutes,
341
+ initialRiskSummary: 'Analysis queued. Use get_analysis_status to check progress.'
342
+ };
343
+ }
344
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
345
+ // Tool: get_analysis_status 'R_DVT_L_T_GetStatus'
346
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
347
+ async getAnalysisStatus(input) {
348
+ apiLogger.info('Checking analysis status', { analysisId: input.analysisId });
349
+ const response = await this.request('GET', `/api/v1/mcp/analysis/${input.analysisId}/status`);
350
+ if (!response.success || !response.data) {
351
+ throw new Error(response.error || 'Failed to get analysis status');
352
+ }
353
+ const data = response.data;
354
+ return {
355
+ analysisId: data.analysisId,
356
+ status: data.status,
357
+ progressPercent: data.progress,
358
+ currentPhase: data.phase,
359
+ phasesCompleted: data.phasesCompleted,
360
+ favorabilityScore: data.results?.favorabilityScore,
361
+ topRisks: data.results?.topRisks.map((r) => `[${r.severity.toUpperCase()}] ${r.section}: ${r.risk}`)
362
+ };
363
+ }
364
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
365
+ // Tool: ask_sac 'R_DVT_L_T_AskSac'
366
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
367
+ async askSac(input) {
368
+ apiLogger.info('Asking SAC', { analysisId: input.analysisId });
369
+ const response = await this.request('POST', '/api/v1/mcp/sac/chat', {
370
+ analysisId: input.analysisId,
371
+ question: input.question,
372
+ includeClauseCitations: input.includeClauseCitations ?? true
373
+ });
374
+ if (!response.success || !response.data) {
375
+ throw new Error(response.error || 'Failed to get SAC response');
376
+ }
377
+ return {
378
+ response: response.data.response,
379
+ clauseCitations: response.data.citations?.map((c) => ({
380
+ sectionName: c.section,
381
+ clauseText: c.text,
382
+ pageNumber: c.page
383
+ })),
384
+ followUpSuggestions: response.data.suggestions
385
+ };
386
+ }
387
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
388
+ // Tool: generate_redline 'R_DVT_L_T_GenerateRedline'
389
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
390
+ async generateRedline(input) {
391
+ apiLogger.info('Generating redline', { analysisId: input.analysisId });
392
+ const response = await this.request('POST', '/api/v1/mcp/redline/generate', {
393
+ analysisId: input.analysisId,
394
+ aggressiveness: input.aggressiveness ?? 3,
395
+ includeComments: input.includeComments ?? true
396
+ });
397
+ if (!response.success || !response.data) {
398
+ throw new Error(response.error || 'Failed to generate redline');
399
+ }
400
+ return {
401
+ redlinedDocxBase64: response.data.docxBase64,
402
+ downloadUrl: response.data.downloadUrl,
403
+ changesCount: response.data.changesCount,
404
+ changesSummary: response.data.summary
405
+ };
406
+ }
407
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
408
+ // Tool: generate_negotiation_email 'R_DVT_L_T_GenerateEmail'
409
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
410
+ async generateNegotiationEmail(input) {
411
+ apiLogger.info('Generating negotiation email', { analysisId: input.analysisId });
412
+ const response = await this.request('POST', '/api/v1/mcp/email/generate', {
413
+ analysisId: input.analysisId,
414
+ tone: input.tone ?? 'collaborative',
415
+ recipientRole: input.recipientRole
416
+ });
417
+ if (!response.success || !response.data) {
418
+ throw new Error(response.error || 'Failed to generate email');
419
+ }
420
+ return response.data;
421
+ }
422
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
423
+ // Tool: extract_clause 'R_DVT_L_T_ExtractClause'
424
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
425
+ async extractClause(input) {
426
+ apiLogger.info('Extracting clause', {
427
+ analysisId: input.analysisId,
428
+ clauseType: input.clauseType
429
+ });
430
+ const response = await this.request('GET', `/api/v1/mcp/analysis/${input.analysisId}/clause/${input.clauseType}`);
431
+ if (!response.success || !response.data) {
432
+ throw new Error(response.error || 'Failed to extract clause');
433
+ }
434
+ return response.data;
435
+ }
436
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
437
+ // Tool: compare_playbook 'R_DVT_L_T_ComparePlaybook'
438
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
439
+ async comparePlaybook(input) {
440
+ apiLogger.info('Comparing against playbook', {
441
+ analysisId: input.analysisId,
442
+ playbookId: input.playbookId
443
+ });
444
+ const response = await this.request('POST', '/api/v1/mcp/playbook/compare', {
445
+ analysisId: input.analysisId,
446
+ playbookId: input.playbookId
447
+ });
448
+ if (!response.success || !response.data) {
449
+ throw new Error(response.error || 'Failed to compare playbook');
450
+ }
451
+ return response.data;
452
+ }
453
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
454
+ // Resource: Get Analysis Results 'R_DVT_L_T_GetAnalysis'
455
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
456
+ async getAnalysisResults(analysisId) {
457
+ apiLogger.info('Fetching full analysis results', { analysisId });
458
+ const response = await this.request('GET', `/api/v1/mcp/analysis/${analysisId}/full`);
459
+ if (!response.success || !response.data) {
460
+ throw new Error(response.error || 'Failed to fetch analysis');
461
+ }
462
+ return response.data;
463
+ }
464
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
465
+ // Resource: Get Playbook 'R_DVT_L_T_GetPlaybook'
466
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
467
+ async getPlaybook(playbookId) {
468
+ apiLogger.info('Fetching playbook', { playbookId });
469
+ const response = await this.request('GET', `/api/v1/mcp/playbook/${playbookId}`);
470
+ if (!response.success || !response.data) {
471
+ throw new Error(response.error || 'Failed to fetch playbook');
472
+ }
473
+ return response.data;
474
+ }
475
+ /*
476
+ ######################################################################################################################################################################################################
477
+ */
478
+ // #### INSTANT SWARM 'R_DVT_L_InstantSwarm' - Parallel Section Redlining
479
+ /*
480
+ ######################################################################################################################################################################################################
481
+ */
482
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
483
+ // Tool: instant_swarm 'R_DVT_L_T_InstantSwarm' - Parallel redlining across ALL sections simultaneously
484
+ // Spawns N agents for N sections (dynamic - not fixed) for maximum parallelization
485
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
486
+ async instantSwarm(input) {
487
+ apiLogger.info('Starting Instant Swarm - parallel section redlining', {
488
+ analysisId: input.analysisId,
489
+ aggressivenessLevel: input.aggressivenessLevel,
490
+ partyPosition: input.partyPosition,
491
+ targetSections: input.targetSections || 'all'
492
+ });
493
+ // T: Call the existing /api/v1/sac/autopilot/swarm endpoint on the SaaS backend
494
+ // This endpoint spawns N parallel SAC sessions for N sections, each writing to isolated R2 branches
495
+ const response = await this.request('POST', '/api/v1/mcp/instant/swarm', // MCP-specific endpoint that wraps /sac/autopilot/swarm
496
+ {
497
+ analysisId: input.analysisId,
498
+ aggressivenessLevel: input.aggressivenessLevel,
499
+ partyPosition: input.partyPosition,
500
+ ourPartyName: input.ourPartyName,
501
+ counterpartyName: input.counterpartyName,
502
+ targetSections: input.targetSections
503
+ });
504
+ if (!response.success || !response.data) {
505
+ throw new Error(response.error || 'Failed to execute Instant Swarm');
506
+ }
507
+ const data = response.data;
508
+ return {
509
+ success: data.success,
510
+ totalSections: data.totalSections,
511
+ completedSections: data.completedSections,
512
+ failedSections: data.failedSections,
513
+ redlinedDocumentBase64: data.mergedDocumentBase64,
514
+ redlinedDocumentUrl: data.mergedDocumentPath,
515
+ sectionResults: data.sectionResults.map(sr => ({
516
+ sectionId: sr.sectionId,
517
+ sectionName: sr.sectionName,
518
+ success: sr.success,
519
+ redlinesApplied: sr.redlinesApplied,
520
+ commentsApplied: sr.commentsApplied,
521
+ keyChanges: sr.keyChanges,
522
+ error: sr.error,
523
+ executionTimeMs: sr.executionTimeMs
524
+ })),
525
+ totalRedlinesApplied: data.totalRedlinesApplied,
526
+ totalCommentsApplied: data.totalCommentsApplied,
527
+ executionTimeMs: data.executionTimeMs,
528
+ tokenUsage: data.tokenUsage
529
+ };
530
+ }
531
+ /*
532
+ ######################################################################################################################################################################################################
533
+ */
534
+ // #### QUICK TOOLS 'R_DVT_L_QuickTools' - Immediate Analysis
535
+ /*
536
+ ######################################################################################################################################################################################################
537
+ */
538
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
539
+ // Tool: quick_scan 'R_DVT_L_T_QuickScan' - Instant contract analysis (5-10 seconds)
540
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
541
+ async quickScan(input) {
542
+ apiLogger.info('Starting quick scan', {
543
+ fileName: input.fileName,
544
+ perspective: input.perspective || 'customer'
545
+ });
546
+ const response = await this.request('POST', '/api/v1/mcp/instant/quick-scan', {
547
+ contractText: input.contractText,
548
+ fileName: input.fileName,
549
+ perspective: input.perspective || 'customer'
550
+ });
551
+ if (!response.success || !response.data) {
552
+ throw new Error(response.error || 'Failed to perform quick scan');
553
+ }
554
+ return response.data;
555
+ }
556
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
557
+ // Tool: ask_clause 'R_DVT_L_T_AskClause' - Instant clause Q&A (2-5 seconds)
558
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
559
+ async askClause(input) {
560
+ apiLogger.info('Asking about clause', {
561
+ question: input.question.substring(0, 50) + '...',
562
+ clauseType: input.clauseType || 'any'
563
+ });
564
+ const response = await this.request('POST', '/api/v1/mcp/instant/ask-clause', {
565
+ contractText: input.contractText,
566
+ question: input.question,
567
+ clauseType: input.clauseType || 'any'
568
+ });
569
+ if (!response.success || !response.data) {
570
+ throw new Error(response.error || 'Failed to get clause answer');
571
+ }
572
+ return response.data;
573
+ }
574
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
575
+ // Tool: check_dealbreakers 'R_DVT_L_T_CheckDealbreakers' - Instant playbook compliance (3-5 seconds)
576
+ // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
577
+ async checkDealbreakers(input) {
578
+ apiLogger.info('Checking dealbreakers', {
579
+ playbookId: input.playbookId || 'default'
580
+ });
581
+ const response = await this.request('POST', '/api/v1/mcp/instant/check-dealbreakers', {
582
+ contractText: input.contractText,
583
+ playbookId: input.playbookId
584
+ });
585
+ if (!response.success || !response.data) {
586
+ throw new Error(response.error || 'Failed to check dealbreakers');
587
+ }
588
+ return response.data;
589
+ }
590
+ }
591
+ //# sourceMappingURL=Bitsbound_Kings_McpServer_Backend_Orchestration_Backautocrat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bitsbound_Kings_McpServer_Backend_Orchestration_Backautocrat.js","sourceRoot":"","sources":["../../../orchestration/backautocrat/Bitsbound_Kings_McpServer_Backend_Orchestration_Backautocrat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=Bitsbound_Kings_McpServer_Backend_Server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bitsbound_Kings_McpServer_Backend_Server.d.ts","sourceRoot":"","sources":["../../server/Bitsbound_Kings_McpServer_Backend_Server.ts"],"names":[],"mappings":""}