@bulkpublishing/mcp-server 1.0.5 → 1.1.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/dist/ai/engine.d.ts +14 -0
- package/dist/ai/engine.d.ts.map +1 -1
- package/dist/ai/engine.js +98 -10
- package/dist/ai/engine.js.map +1 -1
- package/dist/index.js +52 -2
- package/dist/index.js.map +1 -1
- package/dist/tools/generation.d.ts +2 -2
- package/dist/tools/generation.d.ts.map +1 -1
- package/dist/tools/generation.js +190 -14
- package/dist/tools/generation.js.map +1 -1
- package/dist/tools/linking.d.ts +38 -0
- package/dist/tools/linking.d.ts.map +1 -0
- package/dist/tools/linking.js +427 -0
- package/dist/tools/linking.js.map +1 -0
- package/package.json +1 -1
package/dist/ai/engine.d.ts
CHANGED
|
@@ -8,5 +8,19 @@
|
|
|
8
8
|
import type { AIProvider, ApiKeys, GenerationRequest, GenerationResponse, AIModel, ModelTokenLimits } from '../types.js';
|
|
9
9
|
export declare const MODEL_TOKEN_REGISTRY: Record<string, ModelTokenLimits>;
|
|
10
10
|
export declare function generateContent(request: GenerationRequest, keys: ApiKeys): Promise<GenerationResponse>;
|
|
11
|
+
/**
|
|
12
|
+
* Wraps generateContent with exponential backoff retry logic.
|
|
13
|
+
* Designed for batch operations where transient failures shouldn't kill the queue.
|
|
14
|
+
*
|
|
15
|
+
* Retries on:
|
|
16
|
+
* - Empty responses (silent provider failures)
|
|
17
|
+
* - Network errors
|
|
18
|
+
* - 429/5xx errors (rate limits and server errors)
|
|
19
|
+
*
|
|
20
|
+
* Does NOT retry on:
|
|
21
|
+
* - 401/403 (auth failures — these are permanent)
|
|
22
|
+
* - Missing API key errors
|
|
23
|
+
*/
|
|
24
|
+
export declare function generateContentWithRetry(request: GenerationRequest, keys: ApiKeys): Promise<GenerationResponse>;
|
|
11
25
|
export declare function listModels(provider?: AIProvider): AIModel[];
|
|
12
26
|
//# sourceMappingURL=engine.d.ts.map
|
package/dist/ai/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/ai/engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACR,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,kBAAkB,EAElB,OAAO,EACP,gBAAgB,EACnB,MAAM,aAAa,CAAC;AAMrB,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CA4CjE,CAAC;AAwUF,wBAAsB,eAAe,CACjC,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,OAAO,GACd,OAAO,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/ai/engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACR,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,kBAAkB,EAElB,OAAO,EACP,gBAAgB,EACnB,MAAM,aAAa,CAAC;AAMrB,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CA4CjE,CAAC;AAwUF,wBAAsB,eAAe,CACjC,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,OAAO,GACd,OAAO,CAAC,kBAAkB,CAAC,CAqC7B;AASD;;;;;;;;;;;;GAYG;AACH,wBAAsB,wBAAwB,CAC1C,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,OAAO,GACd,OAAO,CAAC,kBAAkB,CAAC,CAwC7B;AAMD,wBAAgB,UAAU,CAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,EAAE,CAiC3D"}
|
package/dist/ai/engine.js
CHANGED
|
@@ -338,20 +338,108 @@ async function generateKimi(request, keys) {
|
|
|
338
338
|
}
|
|
339
339
|
}
|
|
340
340
|
// ============================================
|
|
341
|
-
// MAIN ROUTER
|
|
341
|
+
// MAIN ROUTER (with structured logging + empty-response detection)
|
|
342
342
|
// ============================================
|
|
343
343
|
export async function generateContent(request, keys) {
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
case '
|
|
350
|
-
|
|
351
|
-
|
|
344
|
+
const startMs = Date.now();
|
|
345
|
+
const model = request.settings?.model || 'unknown';
|
|
346
|
+
const provider = request.provider;
|
|
347
|
+
let result;
|
|
348
|
+
switch (provider) {
|
|
349
|
+
case 'openai':
|
|
350
|
+
result = await generateOpenAI(request, keys);
|
|
351
|
+
break;
|
|
352
|
+
case 'claude':
|
|
353
|
+
result = await generateClaude(request, keys);
|
|
354
|
+
break;
|
|
355
|
+
case 'deepseek':
|
|
356
|
+
result = await generateDeepSeek(request, keys);
|
|
357
|
+
break;
|
|
358
|
+
case 'grok':
|
|
359
|
+
result = await generateGrok(request, keys);
|
|
360
|
+
break;
|
|
361
|
+
case 'gemini':
|
|
362
|
+
result = await generateGemini(request, keys);
|
|
363
|
+
break;
|
|
364
|
+
case 'perplexity':
|
|
365
|
+
result = await generatePerplexity(request, keys);
|
|
366
|
+
break;
|
|
367
|
+
case 'kimi':
|
|
368
|
+
result = await generateKimi(request, keys);
|
|
369
|
+
break;
|
|
352
370
|
default:
|
|
353
|
-
return { text: '', error: `Unknown provider: ${
|
|
371
|
+
return { text: '', error: `Unknown provider: ${provider}` };
|
|
354
372
|
}
|
|
373
|
+
const elapsedMs = Date.now() - startMs;
|
|
374
|
+
const responseChars = result.text?.length || 0;
|
|
375
|
+
// Structured logging to stderr (visible in MCP client logs)
|
|
376
|
+
if (result.error) {
|
|
377
|
+
console.error(`[Engine] ❌ ${provider}/${model} — FAILED in ${elapsedMs}ms — ${result.error.substring(0, 120)}`);
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
console.error(`[Engine] ✅ ${provider}/${model} — ${responseChars.toLocaleString()} chars in ${elapsedMs}ms`);
|
|
381
|
+
}
|
|
382
|
+
// Empty-response detection: if no error but also no content, treat as a retriable failure
|
|
383
|
+
// This catches the silent-fail pattern where providers return 200 OK with empty body
|
|
384
|
+
if (!result.error && (!result.text || result.text.trim().length < 50)) {
|
|
385
|
+
const msg = `Empty response from ${provider}/${model} after ${elapsedMs}ms (${responseChars} chars). The provider returned 200 OK but no usable content. This is typically caused by rate limiting, session expiry, or upstream capacity issues.`;
|
|
386
|
+
console.error(`[Engine] ⚠️ EMPTY RESPONSE DETECTED — ${msg}`);
|
|
387
|
+
return { text: '', error: msg };
|
|
388
|
+
}
|
|
389
|
+
return result;
|
|
390
|
+
}
|
|
391
|
+
// ============================================
|
|
392
|
+
// RETRY WRAPPER (for batch operations)
|
|
393
|
+
// ============================================
|
|
394
|
+
const RETRY_DELAYS_MS = [5000, 15000, 45000]; // 5s, 15s, 45s exponential backoff
|
|
395
|
+
const MAX_RETRIES = 3;
|
|
396
|
+
/**
|
|
397
|
+
* Wraps generateContent with exponential backoff retry logic.
|
|
398
|
+
* Designed for batch operations where transient failures shouldn't kill the queue.
|
|
399
|
+
*
|
|
400
|
+
* Retries on:
|
|
401
|
+
* - Empty responses (silent provider failures)
|
|
402
|
+
* - Network errors
|
|
403
|
+
* - 429/5xx errors (rate limits and server errors)
|
|
404
|
+
*
|
|
405
|
+
* Does NOT retry on:
|
|
406
|
+
* - 401/403 (auth failures — these are permanent)
|
|
407
|
+
* - Missing API key errors
|
|
408
|
+
*/
|
|
409
|
+
export async function generateContentWithRetry(request, keys) {
|
|
410
|
+
let lastResult = { text: '', error: 'No attempts made' };
|
|
411
|
+
for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
|
|
412
|
+
lastResult = await generateContent(request, keys);
|
|
413
|
+
// Success — return immediately
|
|
414
|
+
if (!lastResult.error && lastResult.text && lastResult.text.trim().length >= 50) {
|
|
415
|
+
if (attempt > 0) {
|
|
416
|
+
console.error(`[Retry] ✅ Succeeded on attempt ${attempt + 1}/${MAX_RETRIES + 1}`);
|
|
417
|
+
}
|
|
418
|
+
return lastResult;
|
|
419
|
+
}
|
|
420
|
+
// Check if this is a permanent error (don't retry auth failures)
|
|
421
|
+
const errorLower = (lastResult.error || '').toLowerCase();
|
|
422
|
+
const isPermanent = errorLower.includes('401') ||
|
|
423
|
+
errorLower.includes('403') ||
|
|
424
|
+
errorLower.includes('unauthorized') ||
|
|
425
|
+
errorLower.includes('api key is missing') ||
|
|
426
|
+
errorLower.includes('api key missing') ||
|
|
427
|
+
errorLower.includes('subscription');
|
|
428
|
+
if (isPermanent) {
|
|
429
|
+
console.error(`[Retry] 🛑 Permanent error detected, not retrying: ${lastResult.error?.substring(0, 100)}`);
|
|
430
|
+
return lastResult;
|
|
431
|
+
}
|
|
432
|
+
// If we have retries left, wait and try again
|
|
433
|
+
if (attempt < MAX_RETRIES) {
|
|
434
|
+
const delayMs = RETRY_DELAYS_MS[attempt] || 45000;
|
|
435
|
+
console.error(`[Retry] ⏳ Attempt ${attempt + 1}/${MAX_RETRIES + 1} failed. Waiting ${delayMs / 1000}s before retry...`);
|
|
436
|
+
console.error(`[Retry] Error: ${lastResult.error?.substring(0, 150)}`);
|
|
437
|
+
await new Promise(r => setTimeout(r, delayMs));
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
// All retries exhausted
|
|
441
|
+
console.error(`[Retry] ❌ All ${MAX_RETRIES + 1} attempts failed for ${request.provider}/${request.settings?.model}`);
|
|
442
|
+
return lastResult;
|
|
355
443
|
}
|
|
356
444
|
// ============================================
|
|
357
445
|
// MODEL LISTING
|
package/dist/ai/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/ai/engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/ai/engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,+CAA+C;AAC/C,yCAAyC;AACzC,+CAA+C;AAE/C,MAAM,CAAC,MAAM,oBAAoB,GAAqC;IAClE,gBAAgB;IAChB,cAAc,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE;IAC5F,gBAAgB,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE;IAChG,gBAAgB,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE;IAChG,kBAAkB,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE;IAClG,kBAAkB,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,kBAAkB,EAAE;IAEjG,SAAS;IACT,SAAS,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE;IAChF,SAAS,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE;IAChF,YAAY,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE;IACtF,SAAS,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE;IAChF,cAAc,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE;IAC1F,cAAc,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE;IAC1F,SAAS,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE;IAEhF,qBAAqB;IACrB,iBAAiB,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE;IAC/F,mBAAmB,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE;IACnG,mBAAmB,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE;IACpG,0BAA0B,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,mBAAmB,EAAE;IACzG,yBAAyB,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,kBAAkB,EAAE;IAEvG,aAAa;IACb,iBAAiB,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE;IAC/F,eAAe,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE;IAC5F,QAAQ,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE;IAC5E,aAAa,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE;IAEtF,WAAW;IACX,mBAAmB,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,0BAA0B,EAAE;IAC1G,eAAe,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE;IAE3F,kBAAkB;IAClB,oBAAoB,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE;IACrG,WAAW,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE;IACnF,SAAS,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE;IAE/E,aAAa;IACb,WAAW,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAClF,qBAAqB,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,qBAAqB,EAAE;IACtG,qBAAqB,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,qBAAqB,EAAE;IACtG,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE;CAC7E,CAAC;AAEF,+CAA+C;AAC/C,4BAA4B;AAC5B,+CAA+C;AAE/C,MAAM,qBAAqB,GAAG;IAC1B,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc;IAC3C,kBAAkB,EAAE,YAAY;IAChC,WAAW;IACX,mBAAmB;CACtB,CAAC;AAEF,SAAS,wBAAwB,CAAC,KAAa;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC/E,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,+CAA+C;AAC/C,4CAA4C;AAC5C,+CAA+C;AAE/C,MAAM,kBAAkB,GAA+B;IACnD,MAAM,EAAE,4CAA4C;IACpD,MAAM,EAAE,uCAAuC;IAC/C,QAAQ,EAAE,2CAA2C;IACrD,IAAI,EAAE,sCAAsC;IAC5C,MAAM,EAAE,kDAAkD;IAC1D,UAAU,EAAE,4CAA4C;IACxD,IAAI,EAAE,6CAA6C;CACtD,CAAC;AAEF,+CAA+C;AAC/C,sCAAsC;AACtC,+CAA+C;AAE/C,KAAK,UAAU,cAAc,CAAC,OAA0B,EAAE,IAAa;IACnE,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;IAE3E,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,SAAS,CAAC;IAClD,MAAM,YAAY,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAErD,MAAM,OAAO,GAAQ;QACjB,KAAK;QACL,QAAQ,EAAE;YACN,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE;YACjD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;SAChD;QACD,qBAAqB,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS;KACpD,CAAC;IAEF,IAAI,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IACvD,CAAC;IAED,IAAI,CAAC;QACD,IAAI,QAAQ,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,MAAM,EAAE;YAClD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aAC3C;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAChC,CAAC,CAAC;QAEH,sDAAsD;QACtD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBACpC,OAAO,OAAO,CAAC,WAAW,CAAC;gBAC3B,QAAQ,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,MAAM,EAAE;oBAC9C,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACL,cAAc,EAAE,kBAAkB;wBAClC,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;qBAC3C;oBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;iBAChC,CAAC,CAAC;YACP,CAAC;iBAAM,CAAC;gBACJ,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,uBAAuB,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;YACrF,CAAC;QACL,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,iBAAiB,QAAQ,CAAC,MAAM,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;QACpG,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;QAC1C,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,yBAAyB,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;IACzE,CAAC;AACL,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,OAA0B,EAAE,IAAa;IACnE,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;IAE3E,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,iBAAiB,CAAC;IAE1D,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,MAAM,EAAE;YACpD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,IAAI,CAAC,MAAM;gBACxB,mBAAmB,EAAE,YAAY;aACpC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACjB,KAAK;gBACL,MAAM,EAAE,OAAO,CAAC,YAAY;gBAC5B,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;gBACzD,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS;gBACtC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW;aAC5C,CAAC;SACL,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,iBAAiB,QAAQ,CAAC,MAAM,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;QACpG,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;QAC3C,OAAO,EAAE,IAAI,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,yBAAyB,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;IACzE,CAAC;AACL,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,OAA0B,EAAE,IAAa;IACnE,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC;IAExE,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,cAAc,CAAC;IAEvD,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,kBAAkB,CAAC,MAAM,WAAW,KAAK,wBAAwB,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9F,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC9B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACjB,QAAQ,EAAE,CAAC;wBACP,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,YAAY,OAAO,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;qBACxE,CAAC;gBACF,gBAAgB,EAAE;oBACd,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW;oBACzC,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS;iBAC9C;aACJ,CAAC;SACL,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,iBAAiB,QAAQ,CAAC,MAAM,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;QACpG,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;QACnE,OAAO,EAAE,IAAI,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,yBAAyB,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;IACzE,CAAC;AACL,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,OAA0B,EAAE,IAAa;IACrE,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC;IAE/E,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,eAAe,CAAC;IACxD,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE/C,MAAM,OAAO,GAAQ;QACjB,KAAK;QACL,QAAQ,EAAE;YACN,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE;YACjD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;SAChD;QACD,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;KAC/E,CAAC;IAEF,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IACvD,CAAC;IAED,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,QAAQ,EAAE;YACtD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,IAAI,CAAC,QAAQ,EAAE;aAC7C;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAChC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,mBAAmB,QAAQ,CAAC,MAAM,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;QACtG,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;QAC1C,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,2BAA2B,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;IAC3E,CAAC;AACL,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,OAA0B,EAAE,IAAa;IACjE,IAAI,CAAC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;IAEpE,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE;YAClD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,IAAI,CAAC,IAAI,EAAE;aACzC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACjB,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,eAAe;gBAChD,QAAQ,EAAE;oBACN,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE;oBACjD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;iBAChD;gBACD,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW,IAAI,GAAG;aACnD,CAAC;SACL,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,eAAe,QAAQ,CAAC,MAAM,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;QAClG,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;QAC1C,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,uBAAuB,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;IACvE,CAAC;AACL,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,OAA0B,EAAE,IAAa;IACvE,IAAI,CAAC,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC;IAEhF,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,UAAU,EAAE;YACxD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,IAAI,CAAC,UAAU,EAAE;aAC/C;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACjB,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,WAAW;gBAC5C,QAAQ,EAAE;oBACN,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE;oBACjD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;iBAChD;gBACD,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW,IAAI,GAAG;aACnD,CAAC;SACL,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,qBAAqB,QAAQ,CAAC,MAAM,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;QACxG,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;QAC1C,MAAM,YAAY,GAAa,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QAE7C,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE;YAC/C,SAAS;SACZ,CAAC;IACN,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,6BAA6B,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;IAC7E,CAAC;AACL,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,OAA0B,EAAE,IAAa;IACjE,IAAI,CAAC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;IAEpE,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,WAAW,CAAC;IACpD,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE9C,MAAM,OAAO,GAAQ;QACjB,KAAK;QACL,QAAQ,EAAE;YACN,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE;YACjD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;SAChD;QACD,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS;KACzC,CAAC;IAEF,mDAAmD;IACnD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IACvD,CAAC;IAED,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE;YAClD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,IAAI,CAAC,IAAI,EAAE;aACzC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAChC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,eAAe,QAAQ,CAAC,MAAM,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;QAClG,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;QAC1C,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,uBAAuB,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;IACvE,CAAC;AACL,CAAC;AAED,+CAA+C;AAC/C,mEAAmE;AACnE,+CAA+C;AAE/C,MAAM,CAAC,KAAK,UAAU,eAAe,CACjC,OAA0B,EAC1B,IAAa;IAEb,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,KAAK,IAAI,SAAS,CAAC;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAElC,IAAI,MAA0B,CAAC;IAC/B,QAAQ,QAAQ,EAAE,CAAC;QACf,KAAK,QAAQ;YAAE,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAAC,MAAM;QACnE,KAAK,QAAQ;YAAE,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAAC,MAAM;QACnE,KAAK,UAAU;YAAE,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAAC,MAAM;QACvE,KAAK,MAAM;YAAE,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAAC,MAAM;QAC/D,KAAK,QAAQ;YAAE,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAAC,MAAM;QACnE,KAAK,YAAY;YAAE,MAAM,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAAC,MAAM;QAC3E,KAAK,MAAM;YAAE,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAAC,MAAM;QAC/D;YACI,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,qBAAqB,QAAQ,EAAE,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;IACvC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC;IAE/C,4DAA4D;IAC5D,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,cAAc,QAAQ,IAAI,KAAK,gBAAgB,SAAS,QAAQ,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACpH,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,KAAK,CAAC,cAAc,QAAQ,IAAI,KAAK,MAAM,aAAa,CAAC,cAAc,EAAE,aAAa,SAAS,IAAI,CAAC,CAAC;IACjH,CAAC;IAED,0FAA0F;IAC1F,qFAAqF;IACrF,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC;QACpE,MAAM,GAAG,GAAG,uBAAuB,QAAQ,IAAI,KAAK,UAAU,SAAS,OAAO,aAAa,sJAAsJ,CAAC;QAClP,OAAO,CAAC,KAAK,CAAC,yCAAyC,GAAG,EAAE,CAAC,CAAC;QAC9D,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACpC,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,+CAA+C;AAC/C,uCAAuC;AACvC,+CAA+C;AAE/C,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,mCAAmC;AACjF,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC1C,OAA0B,EAC1B,IAAa;IAEb,IAAI,UAAU,GAAuB,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAE7E,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACtD,UAAU,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAElD,+BAA+B;QAC/B,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YAC9E,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,kCAAkC,OAAO,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC;YACtF,CAAC;YACD,OAAO,UAAU,CAAC;QACtB,CAAC;QAED,iEAAiE;QACjE,MAAM,UAAU,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1D,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC1C,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC1B,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC;YACnC,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YACzC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACtC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAExC,IAAI,WAAW,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,sDAAsD,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3G,OAAO,UAAU,CAAC;QACtB,CAAC;QAED,8CAA8C;QAC9C,IAAI,OAAO,GAAG,WAAW,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC;YAClD,OAAO,CAAC,KAAK,CAAC,qBAAqB,OAAO,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,oBAAoB,OAAO,GAAG,IAAI,mBAAmB,CAAC,CAAC;YACxH,OAAO,CAAC,KAAK,CAAC,qBAAqB,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1E,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACnD,CAAC;IACL,CAAC;IAED,wBAAwB;IACxB,OAAO,CAAC,KAAK,CAAC,iBAAiB,WAAW,GAAG,CAAC,wBAAwB,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACrH,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,+CAA+C;AAC/C,gBAAgB;AAChB,+CAA+C;AAE/C,MAAM,UAAU,UAAU,CAAC,QAAqB;IAC5C,MAAM,MAAM,GAAc,EAAE,CAAC;IAE7B,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC5D,iDAAiD;QACjD,IAAI,aAAyB,CAAC;QAC9B,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5F,aAAa,GAAG,QAAQ,CAAC;QAC7B,CAAC;aAAM,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,aAAa,GAAG,QAAQ,CAAC;QAC7B,CAAC;aAAM,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,aAAa,GAAG,QAAQ,CAAC;QAC7B,CAAC;aAAM,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,aAAa,GAAG,MAAM,CAAC;QAC3B,CAAC;aAAM,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACnC,aAAa,GAAG,UAAU,CAAC;QAC/B,CAAC;aAAM,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,aAAa,GAAG,MAAM,CAAC;QAC3B,CAAC;aAAM,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,aAAa,GAAG,YAAY,CAAC;QACjC,CAAC;aAAM,CAAC;YACJ,SAAS;QACb,CAAC;QAED,IAAI,QAAQ,IAAI,aAAa,KAAK,QAAQ;YAAE,SAAS;QAErD,MAAM,CAAC,IAAI,CAAC;YACR,EAAE;YACF,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;SAClI,CAAC,CAAC;IACP,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -20,6 +20,31 @@
|
|
|
20
20
|
*/
|
|
21
21
|
import { runInit } from './cli/init.js';
|
|
22
22
|
// ============================================
|
|
23
|
+
// CRASH-SAFE PROCESS HANDLERS
|
|
24
|
+
// Prevent silent subprocess death — log before exit
|
|
25
|
+
// ============================================
|
|
26
|
+
process.on('uncaughtException', (err) => {
|
|
27
|
+
console.error(`[BPAI MCP Server] 🛑 UNCAUGHT EXCEPTION — process will exit`);
|
|
28
|
+
console.error(`[BPAI MCP Server] Error: ${err.message}`);
|
|
29
|
+
console.error(`[BPAI MCP Server] Stack: ${err.stack}`);
|
|
30
|
+
process.exit(1);
|
|
31
|
+
});
|
|
32
|
+
process.on('unhandledRejection', (reason) => {
|
|
33
|
+
console.error(`[BPAI MCP Server] 🛑 UNHANDLED PROMISE REJECTION`);
|
|
34
|
+
console.error(`[BPAI MCP Server] Reason: ${reason?.message || reason}`);
|
|
35
|
+
if (reason?.stack)
|
|
36
|
+
console.error(`[BPAI MCP Server] Stack: ${reason.stack}`);
|
|
37
|
+
// Don't exit — log and continue. Some rejections are recoverable.
|
|
38
|
+
});
|
|
39
|
+
process.on('SIGTERM', () => {
|
|
40
|
+
console.error(`[BPAI MCP Server] Received SIGTERM — shutting down gracefully`);
|
|
41
|
+
process.exit(0);
|
|
42
|
+
});
|
|
43
|
+
process.on('SIGINT', () => {
|
|
44
|
+
console.error(`[BPAI MCP Server] Received SIGINT — shutting down`);
|
|
45
|
+
process.exit(0);
|
|
46
|
+
});
|
|
47
|
+
// ============================================
|
|
23
48
|
// CLI FLAG HANDLING — check before loading server
|
|
24
49
|
// ============================================
|
|
25
50
|
const args = process.argv.slice(2);
|
|
@@ -44,12 +69,13 @@ async function startServer() {
|
|
|
44
69
|
const { registerProjectTools } = await import('./tools/projects.js');
|
|
45
70
|
const { registerCSVTools } = await import('./tools/csv.js');
|
|
46
71
|
const { registerKnowledgeBaseTools } = await import('./tools/knowledgebase.js');
|
|
72
|
+
const { registerLinkingTools } = await import('./tools/linking.js');
|
|
47
73
|
// ============================================
|
|
48
74
|
// SERVER SETUP
|
|
49
75
|
// ============================================
|
|
50
76
|
const server = new McpServer({
|
|
51
77
|
name: 'Bulk Publishing AI',
|
|
52
|
-
version: '1.0
|
|
78
|
+
version: '1.1.0',
|
|
53
79
|
}, {
|
|
54
80
|
capabilities: {
|
|
55
81
|
tools: {},
|
|
@@ -66,6 +92,7 @@ async function startServer() {
|
|
|
66
92
|
registerProjectTools(server);
|
|
67
93
|
registerCSVTools(server);
|
|
68
94
|
registerKnowledgeBaseTools(server);
|
|
95
|
+
registerLinkingTools(server);
|
|
69
96
|
// ============================================
|
|
70
97
|
// START SERVER
|
|
71
98
|
// ============================================
|
|
@@ -79,7 +106,30 @@ async function startServer() {
|
|
|
79
106
|
const transport = new StdioServerTransport();
|
|
80
107
|
await server.connect(transport);
|
|
81
108
|
console.error('[BPAI MCP Server] Started successfully');
|
|
82
|
-
console.error('[BPAI MCP Server] Available tool groups: generation, research, wordpress, indexing, seo, projects, csv, knowledgebase');
|
|
109
|
+
console.error('[BPAI MCP Server] Available tool groups: generation, research, wordpress, indexing, seo, projects, csv, knowledgebase, linking');
|
|
83
110
|
console.error('[BPAI MCP Server] Transport: stdio');
|
|
111
|
+
// ============================================
|
|
112
|
+
// PERIODIC HEALTH MONITORING
|
|
113
|
+
// Log heap usage every 5 minutes to detect memory pressure
|
|
114
|
+
// ============================================
|
|
115
|
+
const HEALTH_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes
|
|
116
|
+
let generationCount = 0;
|
|
117
|
+
// Expose a counter that tools can increment
|
|
118
|
+
globalThis.__bpaiGenerationCount = {
|
|
119
|
+
get: () => generationCount,
|
|
120
|
+
increment: () => ++generationCount,
|
|
121
|
+
};
|
|
122
|
+
setInterval(() => {
|
|
123
|
+
const mem = process.memoryUsage();
|
|
124
|
+
const heapUsedMB = (mem.heapUsed / 1024 / 1024).toFixed(1);
|
|
125
|
+
const heapTotalMB = (mem.heapTotal / 1024 / 1024).toFixed(1);
|
|
126
|
+
const rssMB = (mem.rss / 1024 / 1024).toFixed(1);
|
|
127
|
+
const uptimeMin = (process.uptime() / 60).toFixed(1);
|
|
128
|
+
console.error(`[Health] ⏱ Uptime: ${uptimeMin}min | Heap: ${heapUsedMB}/${heapTotalMB}MB | RSS: ${rssMB}MB | Generations: ${generationCount}`);
|
|
129
|
+
// Warn if heap usage is getting dangerous (>512MB)
|
|
130
|
+
if (mem.heapUsed > 512 * 1024 * 1024) {
|
|
131
|
+
console.error(`[Health] ⚠️ HIGH MEMORY — Heap at ${heapUsedMB}MB. Consider restarting the MCP server.`);
|
|
132
|
+
}
|
|
133
|
+
}, HEALTH_INTERVAL_MS).unref(); // .unref() so the timer doesn't prevent process exit
|
|
84
134
|
}
|
|
85
135
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,+CAA+C;AAC/C,kDAAkD;AAClD,+CAA+C;AAE/C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;KAAM,CAAC;IACJ,yBAAyB;IACzB,WAAW,EAAE,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,WAAW;IACtB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,yCAAyC,CAAC,CAAC;IAC9E,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,2CAA2C,CAAC,CAAC;IAC3F,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC5D,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAC1E,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACtE,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACxE,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACtE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC5D,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACrE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC5D,MAAM,EAAE,0BAA0B,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,+CAA+C;AAC/C,8BAA8B;AAC9B,oDAAoD;AACpD,+CAA+C;AAE/C,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;IACpC,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;IAC7E,OAAO,CAAC,KAAK,CAAC,4BAA4B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACzD,OAAO,CAAC,KAAK,CAAC,4BAA4B,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAW,EAAE,EAAE;IAC7C,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAClE,OAAO,CAAC,KAAK,CAAC,6BAA6B,MAAM,EAAE,OAAO,IAAI,MAAM,EAAE,CAAC,CAAC;IACxE,IAAI,MAAM,EAAE,KAAK;QAAE,OAAO,CAAC,KAAK,CAAC,4BAA4B,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7E,kEAAkE;AACtE,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;IAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,+CAA+C;AAC/C,kDAAkD;AAClD,+CAA+C;AAE/C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;KAAM,CAAC;IACJ,yBAAyB;IACzB,WAAW,EAAE,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,WAAW;IACtB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,yCAAyC,CAAC,CAAC;IAC9E,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,2CAA2C,CAAC,CAAC;IAC3F,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC5D,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAC1E,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACtE,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACxE,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACtE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC5D,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACrE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC5D,MAAM,EAAE,0BAA0B,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAChF,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAEpE,+CAA+C;IAC/C,eAAe;IACf,+CAA+C;IAE/C,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QACzB,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,OAAO;KACnB,EAAE;QACC,YAAY,EAAE;YACV,KAAK,EAAE,EAAE;SACZ;KACJ,CAAC,CAAC;IAEH,+CAA+C;IAC/C,2BAA2B;IAC3B,+CAA+C;IAE/C,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAE7B,+CAA+C;IAC/C,eAAe;IACf,+CAA+C;IAE/C,IAAI,CAAC;QACD,MAAM,YAAY,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,4CAA4C,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACxD,OAAO,CAAC,KAAK,CAAC,gIAAgI,CAAC,CAAC;IAChJ,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAEpD,+CAA+C;IAC/C,6BAA6B;IAC7B,2DAA2D;IAC3D,+CAA+C;IAC/C,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;IACtD,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,4CAA4C;IAC3C,UAAkB,CAAC,qBAAqB,GAAG;QACxC,GAAG,EAAE,GAAG,EAAE,CAAC,eAAe;QAC1B,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,eAAe;KACrC,CAAC;IAEF,WAAW,CAAC,GAAG,EAAE;QACb,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAErD,OAAO,CAAC,KAAK,CAAC,sBAAsB,SAAS,eAAe,UAAU,IAAI,WAAW,aAAa,KAAK,qBAAqB,eAAe,EAAE,CAAC,CAAC;QAE/I,mDAAmD;QACnD,IAAI,GAAG,CAAC,QAAQ,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,qCAAqC,UAAU,yCAAyC,CAAC,CAAC;QAC5G,CAAC;IACL,CAAC,EAAE,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,qDAAqD;AACzF,CAAC"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* BPAI MCP Server — Content Generation Tools
|
|
3
3
|
*
|
|
4
4
|
* MCP tool handlers for:
|
|
5
|
-
* - generate_article: Single article generation
|
|
6
|
-
* - generate_batch: Bulk generation from keyword list
|
|
5
|
+
* - generate_article: Single article generation (with inline linking overrides)
|
|
6
|
+
* - generate_batch: Bulk generation from keyword list (with cross-linking)
|
|
7
7
|
* - list_models: List all available AI models
|
|
8
8
|
*
|
|
9
9
|
* API keys are loaded from the authenticated user's BPAI account.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generation.d.ts","sourceRoot":"","sources":["../../src/tools/generation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"generation.d.ts","sourceRoot":"","sources":["../../src/tools/generation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QA0dxD"}
|
package/dist/tools/generation.js
CHANGED
|
@@ -2,17 +2,18 @@
|
|
|
2
2
|
* BPAI MCP Server — Content Generation Tools
|
|
3
3
|
*
|
|
4
4
|
* MCP tool handlers for:
|
|
5
|
-
* - generate_article: Single article generation
|
|
6
|
-
* - generate_batch: Bulk generation from keyword list
|
|
5
|
+
* - generate_article: Single article generation (with inline linking overrides)
|
|
6
|
+
* - generate_batch: Bulk generation from keyword list (with cross-linking)
|
|
7
7
|
* - list_models: List all available AI models
|
|
8
8
|
*
|
|
9
9
|
* API keys are loaded from the authenticated user's BPAI account.
|
|
10
10
|
* No inline key parameters needed.
|
|
11
11
|
*/
|
|
12
12
|
import { z } from 'zod';
|
|
13
|
-
import { generateContent, listModels } from '../ai/engine.js';
|
|
13
|
+
import { generateContent, generateContentWithRetry, listModels } from '../ai/engine.js';
|
|
14
14
|
import { buildGenerationPrompt, HUMANIZE_PROMPT } from '../ai/prompts.js';
|
|
15
15
|
import { getUserContext, getApiKey, getKnowledgeBaseContext, getProjectSettings } from '../auth/context.js';
|
|
16
|
+
import { fetchAllSitemapUrls, detectPermalinkPattern } from './linking.js';
|
|
16
17
|
export function registerGenerationTools(server) {
|
|
17
18
|
// ============================================
|
|
18
19
|
// generate_article
|
|
@@ -29,6 +30,8 @@ export function registerGenerationTools(server) {
|
|
|
29
30
|
include_knowledge_base: z.boolean().optional().default(true).describe('Include project knowledge base context'),
|
|
30
31
|
internal_linking: z.boolean().optional().default(true).describe('Apply internal linking from project settings'),
|
|
31
32
|
max_internal_links: z.number().optional().default(5).describe('Max internal links to include (1-10)'),
|
|
33
|
+
sitemap_url: z.string().optional().describe('Inline override: fetch this sitemap URL for link candidates instead of using project settings. Useful when project settings are not pre-configured.'),
|
|
34
|
+
link_candidates: z.array(z.string()).optional().describe('Inline override: provide a direct list of URLs for internal linking. Takes priority over sitemap_url and project settings.'),
|
|
32
35
|
project_id: z.string().optional().describe('Project ID (defaults to active project)'),
|
|
33
36
|
}, async (args) => {
|
|
34
37
|
const ctx = getUserContext();
|
|
@@ -59,10 +62,28 @@ export function registerGenerationTools(server) {
|
|
|
59
62
|
// Load project-level context
|
|
60
63
|
const project = getProjectSettings(args.project_id);
|
|
61
64
|
const kbContext = args.include_knowledge_base ? getKnowledgeBaseContext(args.project_id) : undefined;
|
|
62
|
-
// Resolve internal linking URLs
|
|
65
|
+
// Resolve internal linking URLs with priority chain:
|
|
66
|
+
// 1. link_candidates (inline array) > 2. sitemap_url (inline fetch) > 3. project settings
|
|
63
67
|
let internalLinkUrls;
|
|
64
|
-
if (args.internal_linking
|
|
65
|
-
|
|
68
|
+
if (args.internal_linking) {
|
|
69
|
+
if (args.link_candidates && args.link_candidates.length > 0) {
|
|
70
|
+
// Priority 1: Direct URL list provided inline
|
|
71
|
+
internalLinkUrls = args.link_candidates;
|
|
72
|
+
}
|
|
73
|
+
else if (args.sitemap_url) {
|
|
74
|
+
// Priority 2: Fetch sitemap on-the-fly
|
|
75
|
+
try {
|
|
76
|
+
const rawUrls = await fetchAllSitemapUrls(args.sitemap_url);
|
|
77
|
+
internalLinkUrls = [...new Set(rawUrls)];
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
console.error(`[Generation] Sitemap fetch failed: ${err.message}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else if (project?.settings?.internal_linking?.enabled) {
|
|
84
|
+
// Priority 3: Use pre-saved project settings
|
|
85
|
+
internalLinkUrls = project.settings.internal_linking.sitemapUrls;
|
|
86
|
+
}
|
|
66
87
|
}
|
|
67
88
|
// Build prompts
|
|
68
89
|
const { systemPrompt, userPrompt } = buildGenerationPrompt({
|
|
@@ -145,9 +166,9 @@ export function registerGenerationTools(server) {
|
|
|
145
166
|
};
|
|
146
167
|
});
|
|
147
168
|
// ============================================
|
|
148
|
-
// generate_batch
|
|
169
|
+
// generate_batch (with cross-linking support)
|
|
149
170
|
// ============================================
|
|
150
|
-
server.tool('generate_batch', 'Generate multiple articles from a list of keywords. Processes sequentially with progress reporting.
|
|
171
|
+
server.tool('generate_batch', 'Generate multiple articles from a list of keywords. Processes sequentially with progress reporting. Supports internal linking (from project settings, inline sitemap, or inline URLs) and cross-linking (interlinking articles within this batch using predicted URLs).', {
|
|
151
172
|
keywords: z.array(z.string()).describe('Array of keywords to generate articles for'),
|
|
152
173
|
provider: z.enum(['openai', 'claude', 'deepseek', 'grok', 'gemini', 'perplexity', 'kimi']).default('openai'),
|
|
153
174
|
model: z.string().optional().describe('Model ID to use for all articles'),
|
|
@@ -158,6 +179,13 @@ export function registerGenerationTools(server) {
|
|
|
158
179
|
include_knowledge_base: z.boolean().optional().default(true),
|
|
159
180
|
internal_linking: z.boolean().optional().default(true),
|
|
160
181
|
max_internal_links: z.number().optional().default(5),
|
|
182
|
+
sitemap_url: z.string().optional().describe('Inline override: fetch this sitemap URL for internal link candidates'),
|
|
183
|
+
link_candidates: z.array(z.string()).optional().describe('Inline override: direct list of URLs for internal linking'),
|
|
184
|
+
cross_linking: z.boolean().optional().default(true).describe('Enable cross-linking between articles in this batch (builds predicted URLs from keywords)'),
|
|
185
|
+
cross_linking_base_url: z.string().optional().describe('Base URL for cross-link slug assembly (e.g., https://example.com/blog). Falls back to project cross_linking.baseUrl, then auto-detects from sitemap URL analysis.'),
|
|
186
|
+
max_cross_links: z.number().optional().default(3).describe('Max cross-links (sibling article links) per article (1-10)'),
|
|
187
|
+
keyword_slugs: z.record(z.string(), z.string()).optional().describe('Explicit keyword→slug mapping for cross-linking (e.g., {"best coffee makers": "best-coffee-makers-2026"}). Overrides auto-slugify for specific keywords.'),
|
|
188
|
+
delay_between_articles: z.number().optional().default(5).describe('Seconds to wait between article generations to prevent rate limit crashes (1-60, default: 5)'),
|
|
161
189
|
project_id: z.string().optional().describe('Project ID (defaults to active project)'),
|
|
162
190
|
}, async (args) => {
|
|
163
191
|
const ctx = getUserContext();
|
|
@@ -183,24 +211,132 @@ export function registerGenerationTools(server) {
|
|
|
183
211
|
}],
|
|
184
212
|
};
|
|
185
213
|
}
|
|
214
|
+
// ── Resolve internal linking URLs (same priority chain as generate_article) ──
|
|
215
|
+
const project = getProjectSettings(args.project_id);
|
|
216
|
+
let internalLinkUrls;
|
|
217
|
+
if (args.internal_linking) {
|
|
218
|
+
if (args.link_candidates && args.link_candidates.length > 0) {
|
|
219
|
+
internalLinkUrls = args.link_candidates;
|
|
220
|
+
}
|
|
221
|
+
else if (args.sitemap_url) {
|
|
222
|
+
try {
|
|
223
|
+
const rawUrls = await fetchAllSitemapUrls(args.sitemap_url);
|
|
224
|
+
internalLinkUrls = [...new Set(rawUrls)];
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
console.error(`[Batch] Sitemap fetch failed: ${err.message}`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
else if (project?.settings?.internal_linking?.enabled) {
|
|
231
|
+
internalLinkUrls = project.settings.internal_linking.sitemapUrls;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// ── Build cross-linking predicted URLs ──
|
|
235
|
+
let crossLinkBaseUrl = '';
|
|
236
|
+
const crossLinkingEnabled = args.cross_linking && args.keywords.length > 1;
|
|
237
|
+
let detectedPattern;
|
|
238
|
+
if (crossLinkingEnabled) {
|
|
239
|
+
// Priority: inline param > project settings > auto-detect from sitemap URL analysis
|
|
240
|
+
crossLinkBaseUrl = args.cross_linking_base_url
|
|
241
|
+
|| project?.settings?.cross_linking?.baseUrl
|
|
242
|
+
|| '';
|
|
243
|
+
// Smart auto-detection from sitemap URL pool
|
|
244
|
+
if (!crossLinkBaseUrl && internalLinkUrls && internalLinkUrls.length > 0) {
|
|
245
|
+
detectedPattern = detectPermalinkPattern(internalLinkUrls);
|
|
246
|
+
try {
|
|
247
|
+
const origin = new URL(internalLinkUrls[0]).origin;
|
|
248
|
+
const basePath = detectedPattern.basePath === '/' ? '' : detectedPattern.basePath;
|
|
249
|
+
crossLinkBaseUrl = `${origin}${basePath}`;
|
|
250
|
+
}
|
|
251
|
+
catch { /* ignore */ }
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// Build predicted sibling URLs for cross-linking
|
|
255
|
+
const siblingUrls = [];
|
|
256
|
+
if (crossLinkingEnabled && crossLinkBaseUrl) {
|
|
257
|
+
for (const kw of args.keywords) {
|
|
258
|
+
// Use explicit slug mapping if provided, otherwise auto-slugify
|
|
259
|
+
const slug = args.keyword_slugs?.[kw] || slugify(kw);
|
|
260
|
+
const predictedUrl = `${crossLinkBaseUrl.replace(/\/$/, '')}/${slug}`;
|
|
261
|
+
siblingUrls.push({ keyword: kw, predictedUrl });
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
const maxCrossLinks = Math.min(Math.max(args.max_cross_links || 3, 1), 10);
|
|
265
|
+
const delayBetweenMs = Math.min(Math.max((args.delay_between_articles || 5), 1), 60) * 1000;
|
|
186
266
|
const results = [];
|
|
187
267
|
let completed = 0;
|
|
188
268
|
let failed = 0;
|
|
269
|
+
let consecutiveFailures = 0;
|
|
270
|
+
const MAX_CONSECUTIVE_FAILURES = 5; // Circuit breaker: stop if 5 in a row fail
|
|
271
|
+
// Safety: cap batch size to prevent multi-hour sessions that exhaust memory
|
|
272
|
+
const MAX_BATCH_SIZE = 100;
|
|
273
|
+
if (args.keywords.length > MAX_BATCH_SIZE) {
|
|
274
|
+
return {
|
|
275
|
+
content: [{
|
|
276
|
+
type: 'text', text: JSON.stringify({
|
|
277
|
+
error: `Batch too large: ${args.keywords.length} keywords exceeds the maximum of ${MAX_BATCH_SIZE}. Split into smaller batches to prevent memory exhaustion and rate limiting. Each batch gets a fresh process lifecycle.`,
|
|
278
|
+
suggestion: `Split your ${args.keywords.length} keywords into ${Math.ceil(args.keywords.length / MAX_BATCH_SIZE)} batches of ~${MAX_BATCH_SIZE} each.`,
|
|
279
|
+
}, null, 2)
|
|
280
|
+
}],
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
console.error(`[Batch] Starting ${args.keywords.length} articles | Provider: ${provider} | Delay: ${delayBetweenMs / 1000}s | Cross-linking: ${crossLinkingEnabled}`);
|
|
284
|
+
const batchStartTime = Date.now();
|
|
189
285
|
for (let i = 0; i < args.keywords.length; i++) {
|
|
190
286
|
const keyword = args.keywords[i];
|
|
287
|
+
// Circuit breaker: stop if too many consecutive failures
|
|
288
|
+
if (consecutiveFailures >= MAX_CONSECUTIVE_FAILURES) {
|
|
289
|
+
console.error(`[Batch] 🛑 Circuit breaker tripped: ${MAX_CONSECUTIVE_FAILURES} consecutive failures. Stopping batch.`);
|
|
290
|
+
// Mark remaining keywords as skipped
|
|
291
|
+
for (let j = i; j < args.keywords.length; j++) {
|
|
292
|
+
results.push({
|
|
293
|
+
keyword: args.keywords[j],
|
|
294
|
+
status: 'skipped',
|
|
295
|
+
error: `Skipped due to circuit breaker: ${MAX_CONSECUTIVE_FAILURES} consecutive failures detected. The upstream provider may be rate limiting or down.`,
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
break;
|
|
299
|
+
}
|
|
191
300
|
try {
|
|
192
|
-
|
|
301
|
+
// Progress logging
|
|
302
|
+
const elapsed = Date.now() - batchStartTime;
|
|
303
|
+
const avgPerArticle = completed > 0 ? elapsed / completed : 0;
|
|
304
|
+
const remaining = args.keywords.length - i;
|
|
305
|
+
const etaMin = avgPerArticle > 0 ? ((remaining * avgPerArticle) / 60000).toFixed(1) : '?';
|
|
306
|
+
console.error(`[Batch] 📝 Article ${i + 1}/${args.keywords.length}: "${keyword.substring(0, 50)}" | Done: ${completed} | Failed: ${failed} | ETA: ${etaMin}min`);
|
|
307
|
+
// Memory check every 10 articles
|
|
308
|
+
if (i > 0 && i % 10 === 0) {
|
|
309
|
+
const mem = process.memoryUsage();
|
|
310
|
+
const heapMB = (mem.heapUsed / 1024 / 1024).toFixed(1);
|
|
311
|
+
console.error(`[Batch] 📊 Memory checkpoint: ${heapMB}MB heap used after ${i} articles`);
|
|
312
|
+
// Force garbage collection hint if available
|
|
313
|
+
if (global.gc) {
|
|
314
|
+
global.gc();
|
|
315
|
+
console.error(`[Batch] 🧹 Manual GC triggered`);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
193
318
|
const kbContext = args.include_knowledge_base ? getKnowledgeBaseContext(args.project_id) : undefined;
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
319
|
+
// Merge internal link URLs with shuffled cross-link siblings
|
|
320
|
+
let mergedLinkUrls = internalLinkUrls ? [...internalLinkUrls] : [];
|
|
321
|
+
if (crossLinkingEnabled && siblingUrls.length > 0) {
|
|
322
|
+
// Get siblings (excluding self)
|
|
323
|
+
const siblings = siblingUrls
|
|
324
|
+
.filter(s => s.keyword !== keyword)
|
|
325
|
+
.map(s => s.predictedUrl);
|
|
326
|
+
// Shuffle siblings for variety
|
|
327
|
+
for (let si = siblings.length - 1; si > 0; si--) {
|
|
328
|
+
const sj = Math.floor(Math.random() * (si + 1));
|
|
329
|
+
[siblings[si], siblings[sj]] = [siblings[sj], siblings[si]];
|
|
330
|
+
}
|
|
331
|
+
// Prepend cross-links to the URL pool (they get priority)
|
|
332
|
+
mergedLinkUrls = [...siblings.slice(0, maxCrossLinks), ...mergedLinkUrls];
|
|
197
333
|
}
|
|
198
334
|
const { systemPrompt, userPrompt } = buildGenerationPrompt({
|
|
199
335
|
keyword,
|
|
200
336
|
wordCount: args.word_count,
|
|
201
337
|
tone: args.tone,
|
|
202
338
|
knowledgeBaseContext: kbContext,
|
|
203
|
-
internalLinkUrls,
|
|
339
|
+
internalLinkUrls: mergedLinkUrls.length > 0 ? mergedLinkUrls : undefined,
|
|
204
340
|
maxInternalLinks: args.max_internal_links,
|
|
205
341
|
openerSeedIndex: i,
|
|
206
342
|
});
|
|
@@ -209,18 +345,26 @@ export function registerGenerationTools(server) {
|
|
|
209
345
|
temperature: args.temperature ?? 0.7,
|
|
210
346
|
maxTokens: Math.min((args.word_count || 2500) * 3, 65536),
|
|
211
347
|
};
|
|
212
|
-
|
|
348
|
+
// Use retry wrapper for resilience against transient failures
|
|
349
|
+
const result = await generateContentWithRetry({
|
|
213
350
|
provider,
|
|
214
351
|
systemPrompt,
|
|
215
352
|
userPrompt,
|
|
216
353
|
settings,
|
|
217
354
|
}, keys);
|
|
355
|
+
// Increment the global generation counter (for health monitoring)
|
|
356
|
+
try {
|
|
357
|
+
globalThis.__bpaiGenerationCount?.increment();
|
|
358
|
+
}
|
|
359
|
+
catch { /* ignore */ }
|
|
218
360
|
if (result.error) {
|
|
219
361
|
failed++;
|
|
362
|
+
consecutiveFailures++;
|
|
220
363
|
results.push({ keyword, status: 'failed', error: result.error });
|
|
221
364
|
}
|
|
222
365
|
else {
|
|
223
366
|
completed++;
|
|
367
|
+
consecutiveFailures = 0; // Reset on success
|
|
224
368
|
let text = result.text;
|
|
225
369
|
// Extract title
|
|
226
370
|
let title = keyword;
|
|
@@ -238,9 +382,17 @@ export function registerGenerationTools(server) {
|
|
|
238
382
|
}
|
|
239
383
|
catch (err) {
|
|
240
384
|
failed++;
|
|
385
|
+
consecutiveFailures++;
|
|
241
386
|
results.push({ keyword, status: 'failed', error: err.message });
|
|
242
387
|
}
|
|
388
|
+
// Inter-article delay to prevent rate limit cascading
|
|
389
|
+
if (i < args.keywords.length - 1) {
|
|
390
|
+
console.error(`[Batch] ⏳ Cooling down ${delayBetweenMs / 1000}s before next article...`);
|
|
391
|
+
await new Promise(r => setTimeout(r, delayBetweenMs));
|
|
392
|
+
}
|
|
243
393
|
}
|
|
394
|
+
const totalElapsed = ((Date.now() - batchStartTime) / 60000).toFixed(1);
|
|
395
|
+
console.error(`[Batch] ✅ Batch complete: ${completed} succeeded, ${failed} failed in ${totalElapsed} minutes`);
|
|
244
396
|
return {
|
|
245
397
|
content: [{
|
|
246
398
|
type: 'text', text: JSON.stringify({
|
|
@@ -248,8 +400,19 @@ export function registerGenerationTools(server) {
|
|
|
248
400
|
total: args.keywords.length,
|
|
249
401
|
completed,
|
|
250
402
|
failed,
|
|
403
|
+
skipped: results.filter(r => r.status === 'skipped').length,
|
|
404
|
+
elapsed_minutes: parseFloat(totalElapsed),
|
|
251
405
|
provider,
|
|
252
406
|
model: args.model || getDefaultModel(provider),
|
|
407
|
+
delay_between_articles_seconds: delayBetweenMs / 1000,
|
|
408
|
+
internal_linking_urls: internalLinkUrls?.length || 0,
|
|
409
|
+
cross_linking: crossLinkingEnabled ? {
|
|
410
|
+
enabled: true,
|
|
411
|
+
base_url: crossLinkBaseUrl,
|
|
412
|
+
sibling_count: siblingUrls.length,
|
|
413
|
+
max_per_article: maxCrossLinks,
|
|
414
|
+
detected_pattern: detectedPattern || undefined,
|
|
415
|
+
} : { enabled: false },
|
|
253
416
|
results,
|
|
254
417
|
}, null, 2)
|
|
255
418
|
}],
|
|
@@ -288,4 +451,17 @@ function getDefaultModel(provider) {
|
|
|
288
451
|
};
|
|
289
452
|
return defaults[provider] || 'gpt-5.2';
|
|
290
453
|
}
|
|
454
|
+
/**
|
|
455
|
+
* Convert a keyword/title into a URL-safe slug.
|
|
456
|
+
* Matches the typical WordPress/blog slug behavior.
|
|
457
|
+
*/
|
|
458
|
+
function slugify(text) {
|
|
459
|
+
return text
|
|
460
|
+
.toLowerCase()
|
|
461
|
+
.trim()
|
|
462
|
+
.replace(/[^\w\s-]/g, '') // Remove non-word chars (except spaces and hyphens)
|
|
463
|
+
.replace(/\s+/g, '-') // Spaces to hyphens
|
|
464
|
+
.replace(/-+/g, '-') // Collapse multiple hyphens
|
|
465
|
+
.replace(/^-+|-+$/g, ''); // Trim leading/trailing hyphens
|
|
466
|
+
}
|
|
291
467
|
//# sourceMappingURL=generation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generation.js","sourceRoot":"","sources":["../../src/tools/generation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generation.js","sourceRoot":"","sources":["../../src/tools/generation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BPAI MCP Server — Linking Tools
|
|
3
|
+
*
|
|
4
|
+
* MCP tool handlers for:
|
|
5
|
+
* - fetch_sitemap: Fetch and parse XML sitemaps to discover linkable URLs
|
|
6
|
+
* - update_linking_settings: Configure internal/cross-linking for a project
|
|
7
|
+
*
|
|
8
|
+
* These tools close the gap where MCP users previously could not populate
|
|
9
|
+
* sitemapUrls or configure linking settings without the web dashboard.
|
|
10
|
+
*
|
|
11
|
+
* Settings are persisted to the database via the mcp-update-settings edge
|
|
12
|
+
* function, so changes survive server restarts and are visible in the web UI.
|
|
13
|
+
*/
|
|
14
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
15
|
+
/**
|
|
16
|
+
* Recursively fetch all URLs from a sitemap, including nested sitemap indexes.
|
|
17
|
+
* Mirrors the logic in netlify/edge-functions/fetch-sitemap.ts but runs
|
|
18
|
+
* directly in the MCP server process (Node.js) so no edge function call needed.
|
|
19
|
+
*/
|
|
20
|
+
export declare function fetchAllSitemapUrls(sitemapUrl: string, visited?: Set<string>): Promise<string[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Analyze a pool of sitemap URLs to detect the most common permalink pattern.
|
|
23
|
+
* Returns the detected base path prefix used for content pages.
|
|
24
|
+
*
|
|
25
|
+
* Examples:
|
|
26
|
+
* URLs like /blog/my-post, /blog/another → detects "/blog"
|
|
27
|
+
* URLs like /2026/01/my-post → detects "/" (date-based, uses root)
|
|
28
|
+
* URLs like /resources/guides/my-post → detects "/resources/guides"
|
|
29
|
+
* URLs like /my-post, /another-post → detects "/" (flat/root structure)
|
|
30
|
+
*/
|
|
31
|
+
export declare function detectPermalinkPattern(urls: string[]): {
|
|
32
|
+
basePath: string;
|
|
33
|
+
pattern: 'flat' | 'subdirectory' | 'date-based' | 'nested';
|
|
34
|
+
confidence: number;
|
|
35
|
+
example: string;
|
|
36
|
+
};
|
|
37
|
+
export declare function registerLinkingTools(server: McpServer): void;
|
|
38
|
+
//# sourceMappingURL=linking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linking.d.ts","sourceRoot":"","sources":["../../src/tools/linking.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,cAAoB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA6C5G;AAkDD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,YAAY,GAAG,QAAQ,CAAC;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACnB,CAqGA;AAiDD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QAyMrD"}
|
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BPAI MCP Server — Linking Tools
|
|
3
|
+
*
|
|
4
|
+
* MCP tool handlers for:
|
|
5
|
+
* - fetch_sitemap: Fetch and parse XML sitemaps to discover linkable URLs
|
|
6
|
+
* - update_linking_settings: Configure internal/cross-linking for a project
|
|
7
|
+
*
|
|
8
|
+
* These tools close the gap where MCP users previously could not populate
|
|
9
|
+
* sitemapUrls or configure linking settings without the web dashboard.
|
|
10
|
+
*
|
|
11
|
+
* Settings are persisted to the database via the mcp-update-settings edge
|
|
12
|
+
* function, so changes survive server restarts and are visible in the web UI.
|
|
13
|
+
*/
|
|
14
|
+
import { z } from 'zod';
|
|
15
|
+
import { getUserContext, getProjectSettings } from '../auth/context.js';
|
|
16
|
+
// ============================================
|
|
17
|
+
// CONSTANTS
|
|
18
|
+
// ============================================
|
|
19
|
+
const SETTINGS_ENDPOINT = process.env.BPAI_SETTINGS_URL || 'https://bulkpublishing.ai/api/mcp-update-settings';
|
|
20
|
+
// ============================================
|
|
21
|
+
// SITEMAP FETCHER (server-side, no CORS needed)
|
|
22
|
+
// ============================================
|
|
23
|
+
/**
|
|
24
|
+
* Recursively fetch all URLs from a sitemap, including nested sitemap indexes.
|
|
25
|
+
* Mirrors the logic in netlify/edge-functions/fetch-sitemap.ts but runs
|
|
26
|
+
* directly in the MCP server process (Node.js) so no edge function call needed.
|
|
27
|
+
*/
|
|
28
|
+
export async function fetchAllSitemapUrls(sitemapUrl, visited = new Set()) {
|
|
29
|
+
if (visited.has(sitemapUrl))
|
|
30
|
+
return [];
|
|
31
|
+
visited.add(sitemapUrl);
|
|
32
|
+
// Cap recursion at 10 layers
|
|
33
|
+
if (visited.size > 10)
|
|
34
|
+
return [];
|
|
35
|
+
try {
|
|
36
|
+
const response = await fetch(sitemapUrl, {
|
|
37
|
+
headers: {
|
|
38
|
+
'User-Agent': 'BulkPublishing-MCP/1.0 (+https://bulkpublishing.ai)',
|
|
39
|
+
'Accept': 'application/xml, text/xml, */*',
|
|
40
|
+
},
|
|
41
|
+
signal: AbortSignal.timeout(15000), // 15s timeout per request
|
|
42
|
+
});
|
|
43
|
+
if (!response.ok) {
|
|
44
|
+
console.error(`[Sitemap] Failed to fetch ${sitemapUrl}: ${response.status}`);
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
const xml = await response.text();
|
|
48
|
+
// Check if this is a sitemap index (contains <sitemap> tags)
|
|
49
|
+
const isSitemapIndex = xml.includes('<sitemap>') || xml.includes('<sitemapindex');
|
|
50
|
+
if (isSitemapIndex) {
|
|
51
|
+
const nestedSitemapUrls = extractLocUrls(xml).filter(url => url.endsWith('.xml') || url.includes('sitemap'));
|
|
52
|
+
const allUrls = [];
|
|
53
|
+
for (const nestedUrl of nestedSitemapUrls.slice(0, 10)) {
|
|
54
|
+
const nestedUrls = await fetchAllSitemapUrls(nestedUrl, visited);
|
|
55
|
+
allUrls.push(...nestedUrls);
|
|
56
|
+
}
|
|
57
|
+
return allUrls;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// Regular sitemap: extract page URLs, exclude .xml files
|
|
61
|
+
return extractLocUrls(xml).filter(url => !url.endsWith('.xml'));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.error(`[Sitemap] Error fetching ${sitemapUrl}:`, error.message);
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Extract all <loc> URLs from XML content.
|
|
71
|
+
*/
|
|
72
|
+
function extractLocUrls(xml) {
|
|
73
|
+
const urls = [];
|
|
74
|
+
const locRegex = /<loc>\s*([^<]+)\s*<\/loc>/gi;
|
|
75
|
+
let match;
|
|
76
|
+
while ((match = locRegex.exec(xml)) !== null) {
|
|
77
|
+
const url = match[1].trim();
|
|
78
|
+
if (url.startsWith('http://') || url.startsWith('https://')) {
|
|
79
|
+
urls.push(url);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return urls;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Filter URLs to exclude common non-content pages.
|
|
86
|
+
*/
|
|
87
|
+
function filterContentUrls(urls) {
|
|
88
|
+
const excludePatterns = [
|
|
89
|
+
'/wp-admin/', '/wp-login', '/wp-content/',
|
|
90
|
+
'/login/', '/logout/', '/register/', '/signup/',
|
|
91
|
+
'/cart/', '/checkout/', '/account/', '/my-account/',
|
|
92
|
+
'/tag/', '/author/', '/category/', '/page/',
|
|
93
|
+
'/feed/', '/rss/', '/xmlrpc', '/wp-json/',
|
|
94
|
+
'/cdn-cgi/', '/.well-known/',
|
|
95
|
+
];
|
|
96
|
+
const excludeExtensions = [
|
|
97
|
+
'.jpg', '.jpeg', '.png', '.gif', '.webp', '.svg',
|
|
98
|
+
'.pdf', '.zip', '.css', '.js', '.woff', '.woff2',
|
|
99
|
+
];
|
|
100
|
+
return urls.filter(url => {
|
|
101
|
+
const lower = url.toLowerCase();
|
|
102
|
+
if (excludePatterns.some(p => lower.includes(p)))
|
|
103
|
+
return false;
|
|
104
|
+
if (excludeExtensions.some(ext => lower.endsWith(ext)))
|
|
105
|
+
return false;
|
|
106
|
+
return true;
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
// ============================================
|
|
110
|
+
// PERMALINK PATTERN DETECTION
|
|
111
|
+
// ============================================
|
|
112
|
+
/**
|
|
113
|
+
* Analyze a pool of sitemap URLs to detect the most common permalink pattern.
|
|
114
|
+
* Returns the detected base path prefix used for content pages.
|
|
115
|
+
*
|
|
116
|
+
* Examples:
|
|
117
|
+
* URLs like /blog/my-post, /blog/another → detects "/blog"
|
|
118
|
+
* URLs like /2026/01/my-post → detects "/" (date-based, uses root)
|
|
119
|
+
* URLs like /resources/guides/my-post → detects "/resources/guides"
|
|
120
|
+
* URLs like /my-post, /another-post → detects "/" (flat/root structure)
|
|
121
|
+
*/
|
|
122
|
+
export function detectPermalinkPattern(urls) {
|
|
123
|
+
if (!urls || urls.length === 0) {
|
|
124
|
+
return { basePath: '/', pattern: 'flat', confidence: 0, example: '' };
|
|
125
|
+
}
|
|
126
|
+
// Parse all URLs into their path components
|
|
127
|
+
const pathInfos = [];
|
|
128
|
+
for (const url of urls) {
|
|
129
|
+
try {
|
|
130
|
+
const parsed = new URL(url);
|
|
131
|
+
const parts = parsed.pathname.split('/').filter(Boolean);
|
|
132
|
+
pathInfos.push({ full: parsed.pathname, parts, depth: parts.length });
|
|
133
|
+
}
|
|
134
|
+
catch { /* skip invalid URLs */ }
|
|
135
|
+
}
|
|
136
|
+
if (pathInfos.length === 0) {
|
|
137
|
+
return { basePath: '/', pattern: 'flat', confidence: 0, example: '' };
|
|
138
|
+
}
|
|
139
|
+
// Check for date-based patterns (e.g., /2026/01/slug)
|
|
140
|
+
const datePattern = /^\d{4}$/;
|
|
141
|
+
const dateBasedCount = pathInfos.filter(p => p.parts.length >= 3 && datePattern.test(p.parts[0])).length;
|
|
142
|
+
if (dateBasedCount > pathInfos.length * 0.5) {
|
|
143
|
+
return {
|
|
144
|
+
basePath: '/',
|
|
145
|
+
pattern: 'date-based',
|
|
146
|
+
confidence: Math.round((dateBasedCount / pathInfos.length) * 100),
|
|
147
|
+
example: pathInfos.find(p => p.parts.length >= 3 && datePattern.test(p.parts[0]))?.full || '',
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
// Count first-level directory frequency
|
|
151
|
+
const dirCounts = new Map();
|
|
152
|
+
for (const p of pathInfos) {
|
|
153
|
+
if (p.parts.length >= 2) {
|
|
154
|
+
const dir = `/${p.parts[0]}`;
|
|
155
|
+
dirCounts.set(dir, (dirCounts.get(dir) || 0) + 1);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Find the most common subdirectory
|
|
159
|
+
let topDir = '';
|
|
160
|
+
let topCount = 0;
|
|
161
|
+
for (const [dir, count] of dirCounts) {
|
|
162
|
+
if (count > topCount) {
|
|
163
|
+
topDir = dir;
|
|
164
|
+
topCount = count;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Check for nested subdirectories (e.g., /resources/guides/slug)
|
|
168
|
+
if (topDir && topCount > pathInfos.length * 0.3) {
|
|
169
|
+
// Check if there's a consistent second level under this dir
|
|
170
|
+
const nestedCounts = new Map();
|
|
171
|
+
for (const p of pathInfos) {
|
|
172
|
+
if (p.parts.length >= 3 && `/${p.parts[0]}` === topDir) {
|
|
173
|
+
const nestedDir = `/${p.parts[0]}/${p.parts[1]}`;
|
|
174
|
+
nestedCounts.set(nestedDir, (nestedCounts.get(nestedDir) || 0) + 1);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
let topNested = '';
|
|
178
|
+
let topNestedCount = 0;
|
|
179
|
+
for (const [dir, count] of nestedCounts) {
|
|
180
|
+
if (count > topNestedCount) {
|
|
181
|
+
topNested = dir;
|
|
182
|
+
topNestedCount = count;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// If a nested path holds >50% of the top dir's content, use it
|
|
186
|
+
if (topNested && topNestedCount > topCount * 0.5) {
|
|
187
|
+
return {
|
|
188
|
+
basePath: topNested,
|
|
189
|
+
pattern: 'nested',
|
|
190
|
+
confidence: Math.round((topNestedCount / pathInfos.length) * 100),
|
|
191
|
+
example: pathInfos.find(p => p.full.startsWith(topNested + '/'))?.full || '',
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
// Otherwise use the single subdirectory
|
|
195
|
+
return {
|
|
196
|
+
basePath: topDir,
|
|
197
|
+
pattern: 'subdirectory',
|
|
198
|
+
confidence: Math.round((topCount / pathInfos.length) * 100),
|
|
199
|
+
example: pathInfos.find(p => p.parts.length >= 2 && `/${p.parts[0]}` === topDir)?.full || '',
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
// Flat structure (most URLs are root-level, like /my-post)
|
|
203
|
+
const rootCount = pathInfos.filter(p => p.parts.length === 1).length;
|
|
204
|
+
return {
|
|
205
|
+
basePath: '/',
|
|
206
|
+
pattern: 'flat',
|
|
207
|
+
confidence: Math.round((rootCount / pathInfos.length) * 100),
|
|
208
|
+
example: pathInfos.find(p => p.parts.length === 1)?.full || pathInfos[0]?.full || '',
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
// ============================================
|
|
212
|
+
// DATABASE PERSISTENCE
|
|
213
|
+
// ============================================
|
|
214
|
+
/**
|
|
215
|
+
* Persist project settings back to the database via the edge function.
|
|
216
|
+
* Uses the same BPAI_API_KEY that the MCP server authenticated with.
|
|
217
|
+
*/
|
|
218
|
+
async function persistProjectSettings(projectId, updates) {
|
|
219
|
+
const apiKey = process.env.BPAI_API_KEY;
|
|
220
|
+
if (!apiKey) {
|
|
221
|
+
return { success: false, error: 'No API key available for persistence' };
|
|
222
|
+
}
|
|
223
|
+
try {
|
|
224
|
+
const response = await fetch(SETTINGS_ENDPOINT, {
|
|
225
|
+
method: 'POST',
|
|
226
|
+
headers: {
|
|
227
|
+
'Content-Type': 'application/json',
|
|
228
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
229
|
+
},
|
|
230
|
+
body: JSON.stringify({
|
|
231
|
+
project_id: projectId,
|
|
232
|
+
...updates,
|
|
233
|
+
}),
|
|
234
|
+
signal: AbortSignal.timeout(10000),
|
|
235
|
+
});
|
|
236
|
+
if (!response.ok) {
|
|
237
|
+
const body = await response.json().catch(() => ({}));
|
|
238
|
+
return { success: false, error: body.error || `HTTP ${response.status}` };
|
|
239
|
+
}
|
|
240
|
+
return { success: true };
|
|
241
|
+
}
|
|
242
|
+
catch (err) {
|
|
243
|
+
console.error('[Linking] Persistence failed:', err.message);
|
|
244
|
+
return { success: false, error: err.message };
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// ============================================
|
|
248
|
+
// REGISTER TOOLS
|
|
249
|
+
// ============================================
|
|
250
|
+
export function registerLinkingTools(server) {
|
|
251
|
+
// ============================================
|
|
252
|
+
// fetch_sitemap
|
|
253
|
+
// ============================================
|
|
254
|
+
server.tool('fetch_sitemap', 'Fetch and parse an XML sitemap to discover all linkable URLs on a site. Supports sitemap indexes (recursively resolves nested sitemaps). Returns the URL list and optionally saves it to the project\'s internal linking settings for use in article generation. When save_to_project is true, settings are persisted to the database and visible in the web dashboard.', {
|
|
255
|
+
sitemap_url: z.string().describe('Full URL to the XML sitemap (e.g., https://example.com/sitemap.xml)'),
|
|
256
|
+
save_to_project: z.boolean().optional().default(false).describe('If true, saves the discovered URLs to the active project\'s internal linking settings (persisted to database)'),
|
|
257
|
+
project_id: z.string().optional().describe('Project ID to save URLs to (defaults to active project)'),
|
|
258
|
+
filter_content: z.boolean().optional().default(true).describe('Filter out non-content pages (admin, login, media files, etc.)'),
|
|
259
|
+
}, async (args) => {
|
|
260
|
+
const ctx = getUserContext();
|
|
261
|
+
if (!ctx.authenticated) {
|
|
262
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: 'Not authenticated. Check your BPAI_API_KEY.' }, null, 2) }] };
|
|
263
|
+
}
|
|
264
|
+
// Validate URL
|
|
265
|
+
try {
|
|
266
|
+
const parsed = new URL(args.sitemap_url);
|
|
267
|
+
if (!['http:', 'https:'].includes(parsed.protocol)) {
|
|
268
|
+
throw new Error('Invalid protocol');
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
return {
|
|
273
|
+
content: [{
|
|
274
|
+
type: 'text', text: JSON.stringify({
|
|
275
|
+
error: 'Invalid sitemap URL. Must be a full HTTP/HTTPS URL (e.g., https://example.com/sitemap.xml)',
|
|
276
|
+
}, null, 2)
|
|
277
|
+
}],
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
// Fetch sitemap
|
|
281
|
+
const rawUrls = await fetchAllSitemapUrls(args.sitemap_url);
|
|
282
|
+
const uniqueUrls = [...new Set(rawUrls)];
|
|
283
|
+
const finalUrls = args.filter_content ? filterContentUrls(uniqueUrls) : uniqueUrls;
|
|
284
|
+
// Detect permalink pattern for smart cross-linking
|
|
285
|
+
const permalinkPattern = detectPermalinkPattern(finalUrls);
|
|
286
|
+
// Save to project if requested
|
|
287
|
+
let savedToProject = false;
|
|
288
|
+
let persistedToDb = false;
|
|
289
|
+
if (args.save_to_project) {
|
|
290
|
+
const project = getProjectSettings(args.project_id);
|
|
291
|
+
if (project) {
|
|
292
|
+
// Update in-memory context
|
|
293
|
+
if (!project.settings) {
|
|
294
|
+
project.settings = {};
|
|
295
|
+
}
|
|
296
|
+
const newInternalLinking = {
|
|
297
|
+
...(project.settings.internal_linking || {}),
|
|
298
|
+
enabled: true,
|
|
299
|
+
sitemapUrls: finalUrls,
|
|
300
|
+
sourceUrl: args.sitemap_url,
|
|
301
|
+
maxLinksPerPost: project.settings.internal_linking?.maxLinksPerPost || 5,
|
|
302
|
+
};
|
|
303
|
+
project.settings.internal_linking = newInternalLinking;
|
|
304
|
+
savedToProject = true;
|
|
305
|
+
// Auto-detect and set cross-linking base URL if not already configured
|
|
306
|
+
if (!project.settings.cross_linking?.baseUrl && permalinkPattern.basePath) {
|
|
307
|
+
try {
|
|
308
|
+
const origin = new URL(finalUrls[0]).origin;
|
|
309
|
+
const basePath = permalinkPattern.basePath === '/'
|
|
310
|
+
? ''
|
|
311
|
+
: permalinkPattern.basePath;
|
|
312
|
+
const newCrossLinking = {
|
|
313
|
+
...(project.settings.cross_linking || {}),
|
|
314
|
+
enabled: project.settings.cross_linking?.enabled ?? false,
|
|
315
|
+
baseUrl: `${origin}${basePath}`,
|
|
316
|
+
maxLinksPerPost: project.settings.cross_linking?.maxLinksPerPost || 3,
|
|
317
|
+
};
|
|
318
|
+
project.settings.cross_linking = newCrossLinking;
|
|
319
|
+
}
|
|
320
|
+
catch { /* ignore URL parse errors */ }
|
|
321
|
+
}
|
|
322
|
+
// Persist to database
|
|
323
|
+
const result = await persistProjectSettings(project.id, {
|
|
324
|
+
internal_linking: project.settings.internal_linking,
|
|
325
|
+
cross_linking: project.settings.cross_linking,
|
|
326
|
+
});
|
|
327
|
+
persistedToDb = result.success;
|
|
328
|
+
if (!result.success) {
|
|
329
|
+
console.error(`[Linking] DB persistence failed: ${result.error}`);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
return {
|
|
334
|
+
content: [{
|
|
335
|
+
type: 'text', text: JSON.stringify({
|
|
336
|
+
status: 'success',
|
|
337
|
+
sitemap_url: args.sitemap_url,
|
|
338
|
+
total_discovered: rawUrls.length,
|
|
339
|
+
unique_urls: uniqueUrls.length,
|
|
340
|
+
after_filtering: finalUrls.length,
|
|
341
|
+
permalink_pattern: permalinkPattern,
|
|
342
|
+
saved_to_project: savedToProject,
|
|
343
|
+
persisted_to_database: persistedToDb,
|
|
344
|
+
sample_urls: finalUrls.slice(0, 20),
|
|
345
|
+
note: finalUrls.length > 20 ? `Showing first 20 of ${finalUrls.length} URLs. All ${finalUrls.length} URLs are stored for link injection.` : undefined,
|
|
346
|
+
}, null, 2)
|
|
347
|
+
}],
|
|
348
|
+
};
|
|
349
|
+
});
|
|
350
|
+
// ============================================
|
|
351
|
+
// update_linking_settings
|
|
352
|
+
// ============================================
|
|
353
|
+
server.tool('update_linking_settings', 'Configure internal linking and cross-linking settings for a project. Changes are persisted to the database and visible in the web dashboard. Enables MCP users to set up linking without needing the web dashboard.', {
|
|
354
|
+
project_id: z.string().optional().describe('Project ID (defaults to active project)'),
|
|
355
|
+
internal_linking_enabled: z.boolean().optional().describe('Enable/disable internal linking'),
|
|
356
|
+
max_internal_links: z.number().optional().describe('Max internal links per article (1-10)'),
|
|
357
|
+
included_paths: z.array(z.string()).optional().describe('Subdirectory paths to include (e.g., ["/blog/", "/resources/"]). Empty = include all.'),
|
|
358
|
+
cross_linking_enabled: z.boolean().optional().describe('Enable/disable cross-linking between batch articles'),
|
|
359
|
+
cross_linking_base_url: z.string().optional().describe('Base URL for cross-linking slug assembly (e.g., https://example.com/blog)'),
|
|
360
|
+
max_cross_links: z.number().optional().describe('Max cross-links per article (1-10)'),
|
|
361
|
+
}, async (args) => {
|
|
362
|
+
const ctx = getUserContext();
|
|
363
|
+
if (!ctx.authenticated) {
|
|
364
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: 'Not authenticated.' }, null, 2) }] };
|
|
365
|
+
}
|
|
366
|
+
const project = getProjectSettings(args.project_id);
|
|
367
|
+
if (!project) {
|
|
368
|
+
return {
|
|
369
|
+
content: [{
|
|
370
|
+
type: 'text', text: JSON.stringify({
|
|
371
|
+
error: 'Project not found.',
|
|
372
|
+
available: ctx.projects.map(p => ({ id: p.id, name: p.name })),
|
|
373
|
+
}, null, 2)
|
|
374
|
+
}],
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
if (!project.settings) {
|
|
378
|
+
project.settings = {};
|
|
379
|
+
}
|
|
380
|
+
// Update internal linking settings (in-memory)
|
|
381
|
+
if (args.internal_linking_enabled !== undefined || args.max_internal_links || args.included_paths) {
|
|
382
|
+
const existing = project.settings.internal_linking || {
|
|
383
|
+
enabled: false,
|
|
384
|
+
sitemapUrls: [],
|
|
385
|
+
maxLinksPerPost: 5,
|
|
386
|
+
};
|
|
387
|
+
project.settings.internal_linking = {
|
|
388
|
+
...existing,
|
|
389
|
+
enabled: args.internal_linking_enabled ?? existing.enabled,
|
|
390
|
+
maxLinksPerPost: args.max_internal_links ?? existing.maxLinksPerPost,
|
|
391
|
+
includedPaths: args.included_paths ?? existing.includedPaths,
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
// Update cross-linking settings (in-memory)
|
|
395
|
+
if (args.cross_linking_enabled !== undefined || args.cross_linking_base_url || args.max_cross_links) {
|
|
396
|
+
const existing = project.settings.cross_linking || {
|
|
397
|
+
enabled: false,
|
|
398
|
+
baseUrl: '',
|
|
399
|
+
maxLinksPerPost: 3,
|
|
400
|
+
};
|
|
401
|
+
project.settings.cross_linking = {
|
|
402
|
+
...existing,
|
|
403
|
+
enabled: args.cross_linking_enabled ?? existing.enabled,
|
|
404
|
+
baseUrl: args.cross_linking_base_url ?? existing.baseUrl,
|
|
405
|
+
maxLinksPerPost: args.max_cross_links ?? existing.maxLinksPerPost,
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
// Persist to database
|
|
409
|
+
const persistResult = await persistProjectSettings(project.id, {
|
|
410
|
+
internal_linking: project.settings.internal_linking,
|
|
411
|
+
cross_linking: project.settings.cross_linking,
|
|
412
|
+
});
|
|
413
|
+
return {
|
|
414
|
+
content: [{
|
|
415
|
+
type: 'text', text: JSON.stringify({
|
|
416
|
+
status: 'updated',
|
|
417
|
+
persisted_to_database: persistResult.success,
|
|
418
|
+
persistence_error: persistResult.error || undefined,
|
|
419
|
+
project: { id: project.id, name: project.name },
|
|
420
|
+
internal_linking: project.settings.internal_linking || { enabled: false },
|
|
421
|
+
cross_linking: project.settings.cross_linking || { enabled: false },
|
|
422
|
+
}, null, 2)
|
|
423
|
+
}],
|
|
424
|
+
};
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
//# sourceMappingURL=linking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linking.js","sourceRoot":"","sources":["../../src/tools/linking.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bulkpublishing/mcp-server",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Bulk Publishing AI MCP Server - Content generation, WordPress publishing, and SEO indexing tools for MCP-compatible clients",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|