snow-flow 3.6.24 → 3.6.25
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 +481 -364
- package/dist/dynamic-version.js +1 -1
- package/dist/mcp/servicenow-knowledge-catalog-mcp.js +46 -6
- package/package.json +2 -2
- package/website/css/style.css +645 -6
- package/website/index.html +250 -18
- package/website/tools.js +261 -475
package/dist/dynamic-version.js
CHANGED
|
@@ -36,7 +36,7 @@ function getDynamicVersion() {
|
|
|
36
36
|
console.warn('Warning: Could not read version from package.json:', error);
|
|
37
37
|
}
|
|
38
38
|
// Fallback to hardcoded version
|
|
39
|
-
return '3.6.
|
|
39
|
+
return '3.6.25';
|
|
40
40
|
}
|
|
41
41
|
// Export a constant that uses the dynamic version
|
|
42
42
|
exports.VERSION = getDynamicVersion();
|
|
@@ -370,11 +370,51 @@ class ServiceNowKnowledgeCatalogMCP {
|
|
|
370
370
|
this.logger.info('Creating knowledge article...');
|
|
371
371
|
// Find knowledge base if name provided
|
|
372
372
|
let kbId = args.kb_knowledge_base;
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
373
|
+
let kbFound = false;
|
|
374
|
+
if (kbId) {
|
|
375
|
+
// If it's already a sys_id, verify it exists
|
|
376
|
+
if (kbId.match(/^[a-f0-9]{32}$/)) {
|
|
377
|
+
const kbVerifyResponse = await this.client.searchRecords('kb_knowledge_base', `sys_id=${kbId}`, 1);
|
|
378
|
+
if (kbVerifyResponse.success && kbVerifyResponse.data.result.length > 0) {
|
|
379
|
+
kbFound = true;
|
|
380
|
+
this.logger.info(`✅ Knowledge base verified with sys_id: ${kbId}`);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
// It's a name/title, search for it
|
|
385
|
+
const kbResponse = await this.client.searchRecords('kb_knowledge_base', `title=${kbId}`, 1);
|
|
386
|
+
if (kbResponse.success && kbResponse.data.result.length > 0) {
|
|
387
|
+
kbId = kbResponse.data.result[0].sys_id;
|
|
388
|
+
kbFound = true;
|
|
389
|
+
this.logger.info(`✅ Found knowledge base '${args.kb_knowledge_base}' with sys_id: ${kbId}`);
|
|
390
|
+
}
|
|
377
391
|
}
|
|
392
|
+
// If knowledge base was specified but not found, this is an error
|
|
393
|
+
if (!kbFound) {
|
|
394
|
+
this.logger.error(`❌ Knowledge base '${args.kb_knowledge_base}' not found!`);
|
|
395
|
+
// List available knowledge bases to help the user
|
|
396
|
+
const availableKBs = await this.client.searchRecords('kb_knowledge_base', 'active=true', 10);
|
|
397
|
+
let kbList = '';
|
|
398
|
+
if (availableKBs.success && availableKBs.data.result.length > 0) {
|
|
399
|
+
kbList = '\n\n📚 **Available Knowledge Bases:**\n' +
|
|
400
|
+
availableKBs.data.result.map((kb) => ` - ${kb.title} (${kb.sys_id})`).join('\n');
|
|
401
|
+
}
|
|
402
|
+
throw new Error(`Knowledge base '${args.kb_knowledge_base}' does not exist! ` +
|
|
403
|
+
`Article cannot be created without a valid knowledge base.\n\n` +
|
|
404
|
+
`🔧 **Solution Options:**\n` +
|
|
405
|
+
`1. Use snow_create_knowledge_base to create a new knowledge base first\n` +
|
|
406
|
+
`2. Use snow_discover_knowledge_bases to list existing knowledge bases\n` +
|
|
407
|
+
`3. Specify a valid knowledge base sys_id or title${kbList}`);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
else {
|
|
411
|
+
// No knowledge base specified - this should also be an error for proper article management
|
|
412
|
+
this.logger.warn('⚠️ No knowledge base specified for article creation');
|
|
413
|
+
throw new Error('Knowledge base is required for article creation!\n\n' +
|
|
414
|
+
'🔧 **Solution:**\n' +
|
|
415
|
+
'1. Specify kb_knowledge_base with either a sys_id or title\n' +
|
|
416
|
+
'2. Use snow_discover_knowledge_bases to list available options\n' +
|
|
417
|
+
'3. Or create a new one with snow_create_knowledge_base');
|
|
378
418
|
}
|
|
379
419
|
// Find category if name provided
|
|
380
420
|
let categoryId = args.kb_category;
|
|
@@ -387,7 +427,7 @@ class ServiceNowKnowledgeCatalogMCP {
|
|
|
387
427
|
const articleData = {
|
|
388
428
|
short_description: args.short_description,
|
|
389
429
|
text: args.text,
|
|
390
|
-
kb_knowledge_base: kbId
|
|
430
|
+
kb_knowledge_base: kbId, // Now guaranteed to be valid or error thrown
|
|
391
431
|
kb_category: categoryId || '',
|
|
392
432
|
article_type: args.article_type || 'text',
|
|
393
433
|
workflow_state: args.workflow_state || 'draft',
|
|
@@ -409,7 +449,7 @@ class ServiceNowKnowledgeCatalogMCP {
|
|
|
409
449
|
|
|
410
450
|
📚 **${args.short_description}**
|
|
411
451
|
🆔 sys_id: ${response.data.sys_id}
|
|
412
|
-
📂 Knowledge Base: ${args.kb_knowledge_base
|
|
452
|
+
📂 Knowledge Base: ${args.kb_knowledge_base} (${kbId})
|
|
413
453
|
🏷️ Category: ${args.kb_category || 'Uncategorized'}
|
|
414
454
|
📝 Type: ${args.article_type || 'text'}
|
|
415
455
|
📊 State: ${args.workflow_state || 'draft'}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "snow-flow",
|
|
3
|
-
"version": "3.6.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "3.6.25",
|
|
4
|
+
"description": "KNOWLEDGE BASE VERIFICATION - v3.6.25 adds critical validation to snow_create_knowledge_article. Now throws error when non-existent knowledge base is specified, preventing orphaned articles. Includes helpful suggestions to create or discover valid knowledge bases.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "commonjs",
|
|
7
7
|
"bin": {
|