@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.
- package/README.md +18 -0
- package/dist/logger/Bitsbound_Kings_McpServer_Backend_Logger.d.ts +28 -0
- package/dist/logger/Bitsbound_Kings_McpServer_Backend_Logger.d.ts.map +1 -0
- package/dist/logger/Bitsbound_Kings_McpServer_Backend_Logger.js +75 -0
- package/dist/logger/Bitsbound_Kings_McpServer_Backend_Logger.js.map +1 -0
- package/dist/orchestration/backautocrat/Bitsbound_Kings_McpServer_Backend_Orchestration_Backautocrat.d.ts +25 -0
- package/dist/orchestration/backautocrat/Bitsbound_Kings_McpServer_Backend_Orchestration_Backautocrat.d.ts.map +1 -0
- package/dist/orchestration/backautocrat/Bitsbound_Kings_McpServer_Backend_Orchestration_Backautocrat.js +591 -0
- package/dist/orchestration/backautocrat/Bitsbound_Kings_McpServer_Backend_Orchestration_Backautocrat.js.map +1 -0
- package/dist/server/Bitsbound_Kings_McpServer_Backend_Server.d.ts +3 -0
- package/dist/server/Bitsbound_Kings_McpServer_Backend_Server.d.ts.map +1 -0
- package/dist/server/Bitsbound_Kings_McpServer_Backend_Server.js +1191 -0
- package/dist/server/Bitsbound_Kings_McpServer_Backend_Server.js.map +1 -0
- package/dist/types/Bitsbound_Kings_McpServer_Backend_Types.d.ts +1542 -0
- package/dist/types/Bitsbound_Kings_McpServer_Backend_Types.d.ts.map +1 -0
- package/dist/types/Bitsbound_Kings_McpServer_Backend_Types.js +1266 -0
- package/dist/types/Bitsbound_Kings_McpServer_Backend_Types.js.map +1 -0
- package/package.json +61 -0
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"Bitsbound_Kings_McpServer_Backend_Server.d.ts","sourceRoot":"","sources":["../../server/Bitsbound_Kings_McpServer_Backend_Server.ts"],"names":[],"mappings":""}
|