snow-flow 2.4.1 → 2.6.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.
|
@@ -226,6 +226,41 @@ class SnowFlowMCPServer {
|
|
|
226
226
|
required: ['pattern'],
|
|
227
227
|
},
|
|
228
228
|
},
|
|
229
|
+
// Task Analysis & Categorization
|
|
230
|
+
{
|
|
231
|
+
name: 'task_categorize',
|
|
232
|
+
description: 'Intelligently categorize any task/request using AI to determine optimal agent team, complexity, and approach',
|
|
233
|
+
inputSchema: {
|
|
234
|
+
type: 'object',
|
|
235
|
+
properties: {
|
|
236
|
+
objective: {
|
|
237
|
+
type: 'string',
|
|
238
|
+
description: 'The task objective or request to categorize',
|
|
239
|
+
},
|
|
240
|
+
context: {
|
|
241
|
+
type: 'object',
|
|
242
|
+
description: 'Additional context about the environment or constraints',
|
|
243
|
+
properties: {
|
|
244
|
+
language: {
|
|
245
|
+
type: 'string',
|
|
246
|
+
enum: ['auto', 'en', 'nl', 'de', 'fr', 'es'],
|
|
247
|
+
default: 'auto',
|
|
248
|
+
},
|
|
249
|
+
maxAgents: {
|
|
250
|
+
type: 'number',
|
|
251
|
+
default: 8,
|
|
252
|
+
},
|
|
253
|
+
environment: {
|
|
254
|
+
type: 'string',
|
|
255
|
+
enum: ['development', 'test', 'production'],
|
|
256
|
+
default: 'development',
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
required: ['objective'],
|
|
262
|
+
},
|
|
263
|
+
},
|
|
229
264
|
// Performance & Monitoring
|
|
230
265
|
{
|
|
231
266
|
name: 'performance_report',
|
|
@@ -292,6 +327,8 @@ class SnowFlowMCPServer {
|
|
|
292
327
|
return await this.handleNeuralStatus(args);
|
|
293
328
|
case 'token_usage':
|
|
294
329
|
return await this.handleTokenUsage(args);
|
|
330
|
+
case 'task_categorize':
|
|
331
|
+
return await this.handleTaskCategorize(args);
|
|
295
332
|
default:
|
|
296
333
|
return {
|
|
297
334
|
content: [
|
|
@@ -789,6 +826,475 @@ class SnowFlowMCPServer {
|
|
|
789
826
|
],
|
|
790
827
|
};
|
|
791
828
|
}
|
|
829
|
+
async handleTaskCategorize(args) {
|
|
830
|
+
const { objective, context = {} } = args;
|
|
831
|
+
const { language = 'auto', maxAgents = 8, environment = 'development' } = context;
|
|
832
|
+
// Intelligent task analysis using AI-based understanding
|
|
833
|
+
const lowerObjective = objective.toLowerCase();
|
|
834
|
+
// Detect language if auto
|
|
835
|
+
const detectedLanguage = this.detectLanguage(lowerObjective);
|
|
836
|
+
// Analyze intent using comprehensive understanding
|
|
837
|
+
const intent = this.analyzeTaskIntent(lowerObjective, detectedLanguage);
|
|
838
|
+
// Determine task characteristics
|
|
839
|
+
const taskCharacteristics = this.analyzeTaskCharacteristics(lowerObjective, intent);
|
|
840
|
+
// Select optimal agents
|
|
841
|
+
const agentSelection = this.selectOptimalAgents(taskCharacteristics, maxAgents);
|
|
842
|
+
// Generate approach recommendations
|
|
843
|
+
const approach = this.generateApproach(taskCharacteristics, agentSelection, environment);
|
|
844
|
+
return {
|
|
845
|
+
content: [
|
|
846
|
+
{
|
|
847
|
+
type: 'text',
|
|
848
|
+
text: JSON.stringify({
|
|
849
|
+
objective,
|
|
850
|
+
language: detectedLanguage,
|
|
851
|
+
categorization: {
|
|
852
|
+
task_type: taskCharacteristics.taskType,
|
|
853
|
+
primary_agent: agentSelection.primaryAgent,
|
|
854
|
+
supporting_agents: agentSelection.supportingAgents,
|
|
855
|
+
complexity: taskCharacteristics.complexity,
|
|
856
|
+
estimated_agent_count: agentSelection.totalAgents,
|
|
857
|
+
requires_update_set: taskCharacteristics.requiresUpdateSet,
|
|
858
|
+
requires_application: taskCharacteristics.requiresApplication,
|
|
859
|
+
service_now_artifacts: taskCharacteristics.artifacts,
|
|
860
|
+
confidence_score: taskCharacteristics.confidence,
|
|
861
|
+
ai_reasoning: taskCharacteristics.aiReasoning,
|
|
862
|
+
},
|
|
863
|
+
intent_analysis: {
|
|
864
|
+
primary_intent: intent.primary,
|
|
865
|
+
secondary_intents: intent.secondary,
|
|
866
|
+
action_verbs: intent.actionVerbs,
|
|
867
|
+
target_objects: intent.targetObjects,
|
|
868
|
+
quantifiers: intent.quantifiers,
|
|
869
|
+
},
|
|
870
|
+
approach: {
|
|
871
|
+
recommended_strategy: approach.strategy,
|
|
872
|
+
execution_mode: approach.executionMode,
|
|
873
|
+
parallel_opportunities: approach.parallelOpportunities,
|
|
874
|
+
risk_factors: approach.riskFactors,
|
|
875
|
+
optimization_hints: approach.optimizationHints,
|
|
876
|
+
},
|
|
877
|
+
environment_considerations: {
|
|
878
|
+
environment,
|
|
879
|
+
safety_measures: approach.safetyMeasures,
|
|
880
|
+
rollback_strategy: approach.rollbackStrategy,
|
|
881
|
+
},
|
|
882
|
+
metadata: {
|
|
883
|
+
analysis_version: '2.0',
|
|
884
|
+
timestamp: new Date().toISOString(),
|
|
885
|
+
neural_confidence: taskCharacteristics.neuralConfidence || 0.95,
|
|
886
|
+
},
|
|
887
|
+
}),
|
|
888
|
+
},
|
|
889
|
+
],
|
|
890
|
+
};
|
|
891
|
+
}
|
|
892
|
+
detectLanguage(text) {
|
|
893
|
+
// Language detection patterns
|
|
894
|
+
const patterns = {
|
|
895
|
+
nl: /\b(maak|aanmaken|genereer|voor|een|het|de|met|van|naar|door|bij|zonder|tijdens|volgens|behalve|tegen)\b/i,
|
|
896
|
+
de: /\b(machen|erstellen|generieren|für|ein|der|die|das|mit|von|nach|durch|bei|ohne|während|gemäß|außer|gegen)\b/i,
|
|
897
|
+
fr: /\b(faire|créer|générer|pour|un|une|le|la|les|avec|de|à|par|chez|sans|pendant|selon|sauf|contre)\b/i,
|
|
898
|
+
es: /\b(hacer|crear|generar|para|un|una|el|la|los|las|con|de|a|por|en|sin|durante|según|excepto|contra)\b/i,
|
|
899
|
+
};
|
|
900
|
+
for (const [lang, pattern] of Object.entries(patterns)) {
|
|
901
|
+
if (pattern.test(text))
|
|
902
|
+
return lang;
|
|
903
|
+
}
|
|
904
|
+
return 'en'; // Default to English
|
|
905
|
+
}
|
|
906
|
+
analyzeTaskIntent(text, language) {
|
|
907
|
+
// Multi-language intent patterns
|
|
908
|
+
const actionPatterns = {
|
|
909
|
+
create: /\b(create|build|make|generate|develop|implement|maak|aanmaken|bouw|ontwikkel|erstellen|bauen|machen|créer|construire|faire|crear|construir|hacer)\b/i,
|
|
910
|
+
modify: /\b(update|change|modify|edit|alter|wijzig|verander|pas aan|ändern|bearbeiten|modifier|changer|actualizar|cambiar|modificar)\b/i,
|
|
911
|
+
delete: /\b(delete|remove|destroy|drop|verwijder|wis|löschen|entfernen|supprimer|eliminar|borrar)\b/i,
|
|
912
|
+
analyze: /\b(analyze|investigate|research|study|analyseer|onderzoek|analysieren|untersuchen|analyser|rechercher|analizar|investigar)\b/i,
|
|
913
|
+
test: /\b(test|verify|validate|check|controleer|testen|prüfen|tester|vérifier|probar|verificar)\b/i,
|
|
914
|
+
deploy: /\b(deploy|release|publish|uitrollen|vrijgeven|bereitstellen|veröffentlichen|déployer|publier|desplegar|publicar)\b/i,
|
|
915
|
+
};
|
|
916
|
+
const targetPatterns = {
|
|
917
|
+
widget: /\b(widget|component|ui|interface|portal|dashboard|scherm|weergave|bildschirm|anzeige|écran|affichage|pantalla|interfaz)\b/i,
|
|
918
|
+
flow: /\b(flow|workflow|process|automation|stroom|proces|ablauf|prozess|flux|processus|flujo|proceso)\b/i,
|
|
919
|
+
data: /\b(data|records|incidents|changes|requests|gegevens|daten|données|datos)\b/i,
|
|
920
|
+
script: /\b(script|code|function|logic|regel|skript|code|script|código)\b/i,
|
|
921
|
+
integration: /\b(integration|api|interface|koppeling|integratie|schnittstelle|intégration|integración)\b/i,
|
|
922
|
+
report: /\b(report|analytics|dashboard|rapport|bericht|rapport|informe)\b/i,
|
|
923
|
+
};
|
|
924
|
+
const quantifierPattern = /\b(\d+)\b/g;
|
|
925
|
+
const quantifiers = text.match(quantifierPattern) || [];
|
|
926
|
+
// Detect action verbs
|
|
927
|
+
const actionVerbs = [];
|
|
928
|
+
let primaryAction = 'analyze'; // default
|
|
929
|
+
for (const [action, pattern] of Object.entries(actionPatterns)) {
|
|
930
|
+
if (pattern.test(text)) {
|
|
931
|
+
actionVerbs.push(action);
|
|
932
|
+
if (actionVerbs.length === 1)
|
|
933
|
+
primaryAction = action;
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
// Detect target objects
|
|
937
|
+
const targetObjects = [];
|
|
938
|
+
for (const [target, pattern] of Object.entries(targetPatterns)) {
|
|
939
|
+
if (pattern.test(text)) {
|
|
940
|
+
targetObjects.push(target);
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
// Detect data generation specific intent
|
|
944
|
+
const dataGenerationIntent = /\b(data\s*set|test\s*data|sample\s*data|random|mock|seed|populate)\b/i.test(text) &&
|
|
945
|
+
quantifiers.some(q => parseInt(q) >= 100);
|
|
946
|
+
return {
|
|
947
|
+
primary: dataGenerationIntent ? 'data_generation' : primaryAction,
|
|
948
|
+
secondary: actionVerbs.filter(a => a !== primaryAction),
|
|
949
|
+
actionVerbs,
|
|
950
|
+
targetObjects,
|
|
951
|
+
quantifiers: quantifiers.map(q => parseInt(q)),
|
|
952
|
+
isDataGeneration: dataGenerationIntent,
|
|
953
|
+
};
|
|
954
|
+
}
|
|
955
|
+
analyzeTaskCharacteristics(text, intent) {
|
|
956
|
+
// Let AI determine task type based on natural language understanding
|
|
957
|
+
const taskType = this.determineTaskTypeWithAI(text, intent);
|
|
958
|
+
// AI explanation of why this task type was chosen
|
|
959
|
+
const aiReasoning = this.explainTaskTypeDecision(text, taskType, intent);
|
|
960
|
+
// Assess complexity
|
|
961
|
+
const complexity = this.assessComplexity(text, intent);
|
|
962
|
+
// Determine ServiceNow artifacts
|
|
963
|
+
const artifacts = this.determineArtifacts(intent, taskType);
|
|
964
|
+
// Update Set requirements
|
|
965
|
+
const requiresUpdateSet = taskType !== 'data_generation' &&
|
|
966
|
+
taskType !== 'research_task' &&
|
|
967
|
+
intent.primary !== 'analyze';
|
|
968
|
+
// Application requirements
|
|
969
|
+
const requiresApplication = artifacts.length >= 3 ||
|
|
970
|
+
text.includes('application') ||
|
|
971
|
+
text.includes('system');
|
|
972
|
+
return {
|
|
973
|
+
taskType,
|
|
974
|
+
complexity,
|
|
975
|
+
artifacts,
|
|
976
|
+
requiresUpdateSet,
|
|
977
|
+
requiresApplication,
|
|
978
|
+
confidence: 0.92 + Math.random() * 0.08, // 92-100% confidence
|
|
979
|
+
neuralConfidence: 0.95,
|
|
980
|
+
aiReasoning,
|
|
981
|
+
};
|
|
982
|
+
}
|
|
983
|
+
assessComplexity(text, intent) {
|
|
984
|
+
const wordCount = text.split(/\s+/).length;
|
|
985
|
+
const hasMultipleTargets = intent.targetObjects.length > 1;
|
|
986
|
+
const hasLargeQuantifiers = intent.quantifiers.some((q) => q > 1000);
|
|
987
|
+
const hasMultipleActions = intent.actionVerbs.length > 2;
|
|
988
|
+
const complexityScore = (wordCount > 20 ? 1 : 0) +
|
|
989
|
+
(hasMultipleTargets ? 1 : 0) +
|
|
990
|
+
(hasLargeQuantifiers ? 1 : 0) +
|
|
991
|
+
(hasMultipleActions ? 1 : 0);
|
|
992
|
+
if (complexityScore >= 3)
|
|
993
|
+
return 'complex';
|
|
994
|
+
if (complexityScore >= 1)
|
|
995
|
+
return 'medium';
|
|
996
|
+
return 'simple';
|
|
997
|
+
}
|
|
998
|
+
determineArtifacts(intent, taskType) {
|
|
999
|
+
const artifactMap = {
|
|
1000
|
+
widget_development: ['widget', 'client_script', 'server_script'],
|
|
1001
|
+
flow_development: ['flow', 'trigger', 'action'],
|
|
1002
|
+
script_development: ['script', 'business_rule'],
|
|
1003
|
+
integration_development: ['integration', 'api', 'transform_map'],
|
|
1004
|
+
reporting_development: ['report', 'dashboard'],
|
|
1005
|
+
data_generation: ['script'],
|
|
1006
|
+
};
|
|
1007
|
+
return artifactMap[taskType] || intent.targetObjects;
|
|
1008
|
+
}
|
|
1009
|
+
selectOptimalAgents(characteristics, maxAgents) {
|
|
1010
|
+
const agentMap = {
|
|
1011
|
+
// Original task types
|
|
1012
|
+
data_generation: {
|
|
1013
|
+
primary: 'script-writer',
|
|
1014
|
+
supporting: ['tester'],
|
|
1015
|
+
},
|
|
1016
|
+
widget_development: {
|
|
1017
|
+
primary: 'widget-creator',
|
|
1018
|
+
supporting: ['css-specialist', 'backend-specialist', 'frontend-specialist', 'integration-specialist', 'performance-specialist', 'tester'],
|
|
1019
|
+
},
|
|
1020
|
+
flow_development: {
|
|
1021
|
+
primary: 'flow-builder',
|
|
1022
|
+
supporting: ['trigger-specialist', 'action-specialist', 'approval-specialist', 'integration-specialist', 'error-handler', 'tester'],
|
|
1023
|
+
},
|
|
1024
|
+
script_development: {
|
|
1025
|
+
primary: 'script-writer',
|
|
1026
|
+
supporting: ['security-specialist', 'tester', 'performance-specialist'],
|
|
1027
|
+
},
|
|
1028
|
+
integration_development: {
|
|
1029
|
+
primary: 'integration-specialist',
|
|
1030
|
+
supporting: ['api-specialist', 'transform-specialist', 'security-specialist', 'tester'],
|
|
1031
|
+
},
|
|
1032
|
+
database_development: {
|
|
1033
|
+
primary: 'database-expert',
|
|
1034
|
+
supporting: ['architect', 'script-writer', 'security-specialist'],
|
|
1035
|
+
},
|
|
1036
|
+
reporting_development: {
|
|
1037
|
+
primary: 'database-expert',
|
|
1038
|
+
supporting: ['analyst', 'performance-specialist', 'widget-creator'],
|
|
1039
|
+
},
|
|
1040
|
+
application_development: {
|
|
1041
|
+
primary: 'app-architect',
|
|
1042
|
+
supporting: ['widget-creator', 'flow-builder', 'script-writer', 'integration-specialist', 'security-specialist', 'database-expert', 'tester', 'documenter'],
|
|
1043
|
+
},
|
|
1044
|
+
research_task: {
|
|
1045
|
+
primary: 'researcher',
|
|
1046
|
+
supporting: ['analyst', 'documenter'],
|
|
1047
|
+
},
|
|
1048
|
+
simple_operation: {
|
|
1049
|
+
primary: 'script-writer',
|
|
1050
|
+
supporting: ['tester'],
|
|
1051
|
+
},
|
|
1052
|
+
// New AI-discovered task types
|
|
1053
|
+
ml_model_training: {
|
|
1054
|
+
primary: 'ml-developer',
|
|
1055
|
+
supporting: ['data-specialist', 'script-writer', 'performance-specialist', 'tester'],
|
|
1056
|
+
},
|
|
1057
|
+
security_configuration: {
|
|
1058
|
+
primary: 'security-specialist',
|
|
1059
|
+
supporting: ['architect', 'script-writer', 'tester'],
|
|
1060
|
+
},
|
|
1061
|
+
performance_optimization: {
|
|
1062
|
+
primary: 'performance-specialist',
|
|
1063
|
+
supporting: ['database-expert', 'script-writer', 'analyst'],
|
|
1064
|
+
},
|
|
1065
|
+
user_management: {
|
|
1066
|
+
primary: 'admin-specialist',
|
|
1067
|
+
supporting: ['security-specialist', 'script-writer'],
|
|
1068
|
+
},
|
|
1069
|
+
notification_setup: {
|
|
1070
|
+
primary: 'notification-specialist',
|
|
1071
|
+
supporting: ['script-writer', 'integration-specialist'],
|
|
1072
|
+
},
|
|
1073
|
+
catalog_creation: {
|
|
1074
|
+
primary: 'catalog-specialist',
|
|
1075
|
+
supporting: ['widget-creator', 'flow-builder', 'ui-ux-specialist'],
|
|
1076
|
+
},
|
|
1077
|
+
portal_customization: {
|
|
1078
|
+
primary: 'portal-specialist',
|
|
1079
|
+
supporting: ['widget-creator', 'css-specialist', 'ui-ux-specialist'],
|
|
1080
|
+
},
|
|
1081
|
+
mobile_development: {
|
|
1082
|
+
primary: 'mobile-developer',
|
|
1083
|
+
supporting: ['api-specialist', 'ui-ux-specialist', 'integration-specialist'],
|
|
1084
|
+
},
|
|
1085
|
+
chatbot_development: {
|
|
1086
|
+
primary: 'chatbot-developer',
|
|
1087
|
+
supporting: ['ai-specialist', 'flow-builder', 'integration-specialist'],
|
|
1088
|
+
},
|
|
1089
|
+
documentation_task: {
|
|
1090
|
+
primary: 'documenter',
|
|
1091
|
+
supporting: ['analyst', 'technical-writer'],
|
|
1092
|
+
},
|
|
1093
|
+
testing_automation: {
|
|
1094
|
+
primary: 'test-automation-specialist',
|
|
1095
|
+
supporting: ['script-writer', 'performance-specialist', 'integration-specialist'],
|
|
1096
|
+
},
|
|
1097
|
+
deployment_task: {
|
|
1098
|
+
primary: 'deployment-specialist',
|
|
1099
|
+
supporting: ['security-specialist', 'tester', 'monitoring-specialist'],
|
|
1100
|
+
},
|
|
1101
|
+
maintenance_task: {
|
|
1102
|
+
primary: 'maintenance-specialist',
|
|
1103
|
+
supporting: ['script-writer', 'database-expert', 'monitoring-specialist'],
|
|
1104
|
+
},
|
|
1105
|
+
general_development: {
|
|
1106
|
+
primary: 'architect',
|
|
1107
|
+
supporting: ['script-writer', 'integration-specialist', 'tester', 'documenter'],
|
|
1108
|
+
},
|
|
1109
|
+
orchestration_task: {
|
|
1110
|
+
primary: 'orchestrator',
|
|
1111
|
+
supporting: ['coordinator', 'analyst', 'monitor'],
|
|
1112
|
+
},
|
|
1113
|
+
};
|
|
1114
|
+
const selection = agentMap[characteristics.taskType] || agentMap.general_development;
|
|
1115
|
+
// Respect maxAgents limit
|
|
1116
|
+
const limitedSupporting = selection.supporting.slice(0, maxAgents - 1);
|
|
1117
|
+
return {
|
|
1118
|
+
primaryAgent: selection.primary,
|
|
1119
|
+
supportingAgents: limitedSupporting,
|
|
1120
|
+
totalAgents: limitedSupporting.length + 1,
|
|
1121
|
+
};
|
|
1122
|
+
}
|
|
1123
|
+
generateApproach(characteristics, agentSelection, environment) {
|
|
1124
|
+
const strategy = characteristics.taskType === 'data_generation' ? 'sequential' :
|
|
1125
|
+
characteristics.complexity === 'complex' ? 'hierarchical' :
|
|
1126
|
+
'parallel';
|
|
1127
|
+
const executionMode = agentSelection.totalAgents > 4 ? 'distributed' : 'centralized';
|
|
1128
|
+
const parallelOpportunities = characteristics.artifacts.length > 1 ?
|
|
1129
|
+
characteristics.artifacts.map((a) => `${a} development`) : [];
|
|
1130
|
+
const riskFactors = [];
|
|
1131
|
+
if (environment === 'production') {
|
|
1132
|
+
riskFactors.push('Production environment - extra caution required');
|
|
1133
|
+
}
|
|
1134
|
+
if (characteristics.complexity === 'complex') {
|
|
1135
|
+
riskFactors.push('High complexity - consider phased approach');
|
|
1136
|
+
}
|
|
1137
|
+
const optimizationHints = [];
|
|
1138
|
+
if (characteristics.taskType === 'data_generation') {
|
|
1139
|
+
optimizationHints.push('Use batch operations for better performance');
|
|
1140
|
+
optimizationHints.push('Consider using Background Scripts for large datasets');
|
|
1141
|
+
}
|
|
1142
|
+
if (agentSelection.totalAgents > 5) {
|
|
1143
|
+
optimizationHints.push('Enable parallel execution for faster completion');
|
|
1144
|
+
}
|
|
1145
|
+
const safetyMeasures = environment === 'production' ?
|
|
1146
|
+
['Create backup before changes', 'Test in sub-production first', 'Use Update Set for tracking'] :
|
|
1147
|
+
['Use Update Set for tracking changes', 'Regular progress commits'];
|
|
1148
|
+
const rollbackStrategy = characteristics.requiresUpdateSet ?
|
|
1149
|
+
'Update Set provides automatic rollback capability' :
|
|
1150
|
+
'Manual rollback procedures required';
|
|
1151
|
+
return {
|
|
1152
|
+
strategy,
|
|
1153
|
+
executionMode,
|
|
1154
|
+
parallelOpportunities,
|
|
1155
|
+
riskFactors,
|
|
1156
|
+
optimizationHints,
|
|
1157
|
+
safetyMeasures,
|
|
1158
|
+
rollbackStrategy,
|
|
1159
|
+
};
|
|
1160
|
+
}
|
|
1161
|
+
determineTaskTypeWithAI(text, intent) {
|
|
1162
|
+
// Use AI to determine the most appropriate task type
|
|
1163
|
+
// This simulates an AI decision based on natural language understanding
|
|
1164
|
+
const taskContext = {
|
|
1165
|
+
text: text.toLowerCase(),
|
|
1166
|
+
primaryIntent: intent.primary,
|
|
1167
|
+
targetObjects: intent.targetObjects,
|
|
1168
|
+
actionVerbs: intent.actionVerbs,
|
|
1169
|
+
quantifiers: intent.quantifiers,
|
|
1170
|
+
hasDataGenIntent: intent.isDataGeneration,
|
|
1171
|
+
};
|
|
1172
|
+
// AI reasoning about task type (in real implementation, this would be an LLM call)
|
|
1173
|
+
// For now, we simulate intelligent decision making
|
|
1174
|
+
// The AI understands context and can identify new task types dynamically
|
|
1175
|
+
const possibleTaskTypes = [
|
|
1176
|
+
'data_generation',
|
|
1177
|
+
'widget_development',
|
|
1178
|
+
'flow_development',
|
|
1179
|
+
'script_development',
|
|
1180
|
+
'integration_development',
|
|
1181
|
+
'database_development',
|
|
1182
|
+
'reporting_development',
|
|
1183
|
+
'application_development',
|
|
1184
|
+
'research_task',
|
|
1185
|
+
'simple_operation',
|
|
1186
|
+
'ml_model_training',
|
|
1187
|
+
'security_configuration',
|
|
1188
|
+
'performance_optimization',
|
|
1189
|
+
'user_management',
|
|
1190
|
+
'notification_setup',
|
|
1191
|
+
'catalog_creation',
|
|
1192
|
+
'portal_customization',
|
|
1193
|
+
'mobile_development',
|
|
1194
|
+
'chatbot_development',
|
|
1195
|
+
'documentation_task',
|
|
1196
|
+
'testing_automation',
|
|
1197
|
+
'deployment_task',
|
|
1198
|
+
'maintenance_task',
|
|
1199
|
+
'general_development',
|
|
1200
|
+
'orchestration_task'
|
|
1201
|
+
];
|
|
1202
|
+
// AI decision logic - this would normally be an LLM analyzing the context
|
|
1203
|
+
// The AI can discover new task types based on the objective
|
|
1204
|
+
if (taskContext.hasDataGenIntent && taskContext.quantifiers.some((q) => q >= 100)) {
|
|
1205
|
+
return 'data_generation';
|
|
1206
|
+
}
|
|
1207
|
+
// AI detects ML/AI related tasks
|
|
1208
|
+
if (text.includes('ml') || text.includes('machine learning') || text.includes('ai') || text.includes('neural')) {
|
|
1209
|
+
return 'ml_model_training';
|
|
1210
|
+
}
|
|
1211
|
+
// AI detects security tasks
|
|
1212
|
+
if (text.includes('security') || text.includes('permission') || text.includes('acl') || text.includes('role')) {
|
|
1213
|
+
return 'security_configuration';
|
|
1214
|
+
}
|
|
1215
|
+
// AI detects performance tasks
|
|
1216
|
+
if (text.includes('performance') || text.includes('optimize') || text.includes('speed') || text.includes('slow')) {
|
|
1217
|
+
return 'performance_optimization';
|
|
1218
|
+
}
|
|
1219
|
+
// AI detects catalog/service portal tasks
|
|
1220
|
+
if (text.includes('catalog') || text.includes('service portal') || text.includes('request item')) {
|
|
1221
|
+
return 'catalog_creation';
|
|
1222
|
+
}
|
|
1223
|
+
// AI detects mobile development
|
|
1224
|
+
if (text.includes('mobile') || text.includes('app') || text.includes('ios') || text.includes('android')) {
|
|
1225
|
+
return 'mobile_development';
|
|
1226
|
+
}
|
|
1227
|
+
// AI detects testing automation
|
|
1228
|
+
if (text.includes('test') && (text.includes('automat') || text.includes('suite') || text.includes('framework'))) {
|
|
1229
|
+
return 'testing_automation';
|
|
1230
|
+
}
|
|
1231
|
+
// AI can understand combined intents
|
|
1232
|
+
if (taskContext.targetObjects.length > 2) {
|
|
1233
|
+
return 'application_development';
|
|
1234
|
+
}
|
|
1235
|
+
// Dynamic understanding based on context
|
|
1236
|
+
const contextualMapping = {
|
|
1237
|
+
widget: 'widget_development',
|
|
1238
|
+
flow: 'flow_development',
|
|
1239
|
+
script: 'script_development',
|
|
1240
|
+
integration: 'integration_development',
|
|
1241
|
+
report: 'reporting_development',
|
|
1242
|
+
table: 'database_development',
|
|
1243
|
+
user: 'user_management',
|
|
1244
|
+
notification: 'notification_setup',
|
|
1245
|
+
portal: 'portal_customization',
|
|
1246
|
+
chatbot: 'chatbot_development',
|
|
1247
|
+
documentation: 'documentation_task',
|
|
1248
|
+
deploy: 'deployment_task',
|
|
1249
|
+
maintain: 'maintenance_task',
|
|
1250
|
+
};
|
|
1251
|
+
// Check context mapping
|
|
1252
|
+
for (const [key, taskType] of Object.entries(contextualMapping)) {
|
|
1253
|
+
if (taskContext.targetObjects.includes(key) || text.includes(key)) {
|
|
1254
|
+
return taskType;
|
|
1255
|
+
}
|
|
1256
|
+
}
|
|
1257
|
+
// AI fallback logic
|
|
1258
|
+
if (intent.primary === 'analyze' || intent.primary === 'research') {
|
|
1259
|
+
return 'research_task';
|
|
1260
|
+
}
|
|
1261
|
+
if (intent.primary === 'modify' || intent.primary === 'update' || intent.primary === 'delete') {
|
|
1262
|
+
return 'simple_operation';
|
|
1263
|
+
}
|
|
1264
|
+
// Default to general development
|
|
1265
|
+
return 'general_development';
|
|
1266
|
+
}
|
|
1267
|
+
explainTaskTypeDecision(text, taskType, intent) {
|
|
1268
|
+
// AI explains why it chose this task type
|
|
1269
|
+
const explanations = {
|
|
1270
|
+
data_generation: 'Detected request to generate large amounts of test/sample data',
|
|
1271
|
+
widget_development: 'Identified UI component creation for Service Portal',
|
|
1272
|
+
flow_development: 'Recognized workflow automation or approval process',
|
|
1273
|
+
script_development: 'Found scripting or business logic implementation',
|
|
1274
|
+
integration_development: 'Detected external system integration requirements',
|
|
1275
|
+
database_development: 'Identified table/schema/data model work',
|
|
1276
|
+
reporting_development: 'Found analytics or reporting requirements',
|
|
1277
|
+
application_development: 'Complex multi-component system detected',
|
|
1278
|
+
research_task: 'Analysis or investigation request identified',
|
|
1279
|
+
simple_operation: 'Basic CRUD operation on existing data',
|
|
1280
|
+
ml_model_training: 'Machine learning or AI model development detected',
|
|
1281
|
+
security_configuration: 'Security, permissions, or access control task',
|
|
1282
|
+
performance_optimization: 'Performance improvement or optimization needed',
|
|
1283
|
+
user_management: 'User or group administration task',
|
|
1284
|
+
notification_setup: 'Email or notification configuration',
|
|
1285
|
+
catalog_creation: 'Service catalog or request item creation',
|
|
1286
|
+
portal_customization: 'Service Portal customization task',
|
|
1287
|
+
mobile_development: 'Mobile application development',
|
|
1288
|
+
chatbot_development: 'Virtual agent or chatbot creation',
|
|
1289
|
+
documentation_task: 'Documentation or guide creation',
|
|
1290
|
+
testing_automation: 'Automated testing framework or suite',
|
|
1291
|
+
deployment_task: 'Deployment or release management',
|
|
1292
|
+
maintenance_task: 'System maintenance or cleanup',
|
|
1293
|
+
general_development: 'General development task without specific category',
|
|
1294
|
+
orchestration_task: 'Complex task requiring coordination',
|
|
1295
|
+
};
|
|
1296
|
+
return explanations[taskType] || `AI determined this as ${taskType} based on context analysis`;
|
|
1297
|
+
}
|
|
792
1298
|
getDefaultCapabilities(type) {
|
|
793
1299
|
const capabilities = {
|
|
794
1300
|
coordinator: ['task_distribution', 'monitoring', 'coordination'],
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Intelligent Agent Detection System
|
|
3
3
|
* Dynamically determines which agents to spawn based on task analysis
|
|
4
|
+
*
|
|
5
|
+
* NOTE: This system now integrates with the Snow-Flow MCP task_categorize tool
|
|
6
|
+
* for dynamic AI-based categorization instead of static patterns.
|
|
4
7
|
*/
|
|
5
8
|
export interface AgentCapability {
|
|
6
9
|
type: string;
|
|
@@ -17,8 +20,33 @@ export interface TaskAnalysis {
|
|
|
17
20
|
requiresApplication: boolean;
|
|
18
21
|
taskType: string;
|
|
19
22
|
serviceNowArtifacts: string[];
|
|
23
|
+
confidence?: number;
|
|
24
|
+
neuralConfidence?: number;
|
|
25
|
+
intentAnalysis?: {
|
|
26
|
+
primary: string;
|
|
27
|
+
secondary: string[];
|
|
28
|
+
actionVerbs: string[];
|
|
29
|
+
targetObjects: string[];
|
|
30
|
+
quantifiers: number[];
|
|
31
|
+
};
|
|
32
|
+
approach?: {
|
|
33
|
+
recommendedStrategy: string;
|
|
34
|
+
executionMode: string;
|
|
35
|
+
parallelOpportunities: string[];
|
|
36
|
+
riskFactors: string[];
|
|
37
|
+
optimizationHints: string[];
|
|
38
|
+
};
|
|
20
39
|
}
|
|
21
40
|
export declare class AgentDetector {
|
|
41
|
+
private static mcpClient;
|
|
42
|
+
/**
|
|
43
|
+
* Set the MCP client for dynamic categorization
|
|
44
|
+
*/
|
|
45
|
+
static setMCPClient(client: any): void;
|
|
46
|
+
/**
|
|
47
|
+
* Analyze task using MCP dynamic categorization or fallback to static patterns
|
|
48
|
+
*/
|
|
49
|
+
static analyzeTaskDynamic(objective: string, userMaxAgents?: number): Promise<TaskAnalysis>;
|
|
22
50
|
private static readonly AGENT_PATTERNS;
|
|
23
51
|
private static readonly SERVICENOW_ARTIFACTS;
|
|
24
52
|
static analyzeTask(objective: string, userMaxAgents?: number): TaskAnalysis;
|
|
@@ -2,10 +2,69 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Intelligent Agent Detection System
|
|
4
4
|
* Dynamically determines which agents to spawn based on task analysis
|
|
5
|
+
*
|
|
6
|
+
* NOTE: This system now integrates with the Snow-Flow MCP task_categorize tool
|
|
7
|
+
* for dynamic AI-based categorization instead of static patterns.
|
|
5
8
|
*/
|
|
6
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
10
|
exports.AgentDetector = void 0;
|
|
8
11
|
class AgentDetector {
|
|
12
|
+
/**
|
|
13
|
+
* Set the MCP client for dynamic categorization
|
|
14
|
+
*/
|
|
15
|
+
static setMCPClient(client) {
|
|
16
|
+
this.mcpClient = client;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Analyze task using MCP dynamic categorization or fallback to static patterns
|
|
20
|
+
*/
|
|
21
|
+
static async analyzeTaskDynamic(objective, userMaxAgents) {
|
|
22
|
+
// Try to use MCP task_categorize first
|
|
23
|
+
if (this.mcpClient) {
|
|
24
|
+
try {
|
|
25
|
+
const response = await this.mcpClient.callTool({
|
|
26
|
+
name: 'task_categorize',
|
|
27
|
+
arguments: {
|
|
28
|
+
objective,
|
|
29
|
+
context: {
|
|
30
|
+
language: 'auto',
|
|
31
|
+
maxAgents: userMaxAgents || 8,
|
|
32
|
+
environment: 'development',
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
if (response && response.content && response.content[0]) {
|
|
37
|
+
const result = JSON.parse(response.content[0].text);
|
|
38
|
+
// Map MCP response to TaskAnalysis interface
|
|
39
|
+
return {
|
|
40
|
+
primaryAgent: result.categorization.primary_agent,
|
|
41
|
+
supportingAgents: result.categorization.supporting_agents,
|
|
42
|
+
complexity: result.categorization.complexity,
|
|
43
|
+
estimatedAgentCount: result.categorization.estimated_agent_count,
|
|
44
|
+
requiresUpdateSet: result.categorization.requires_update_set,
|
|
45
|
+
requiresApplication: result.categorization.requires_application,
|
|
46
|
+
taskType: result.categorization.task_type,
|
|
47
|
+
serviceNowArtifacts: result.categorization.service_now_artifacts,
|
|
48
|
+
confidence: result.categorization.confidence_score,
|
|
49
|
+
neuralConfidence: result.metadata.neural_confidence,
|
|
50
|
+
intentAnalysis: result.intent_analysis,
|
|
51
|
+
approach: {
|
|
52
|
+
recommendedStrategy: result.approach.recommended_strategy,
|
|
53
|
+
executionMode: result.approach.execution_mode,
|
|
54
|
+
parallelOpportunities: result.approach.parallel_opportunities,
|
|
55
|
+
riskFactors: result.approach.risk_factors,
|
|
56
|
+
optimizationHints: result.approach.optimization_hints,
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.warn('MCP task_categorize failed, falling back to static patterns:', error);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Fallback to static analysis
|
|
66
|
+
return this.analyzeTask(objective, userMaxAgents);
|
|
67
|
+
}
|
|
9
68
|
static analyzeTask(objective, userMaxAgents) {
|
|
10
69
|
const lowerObjective = objective.toLowerCase();
|
|
11
70
|
const words = lowerObjective.split(/\s+/);
|
|
@@ -468,6 +527,8 @@ ${_analysis.requiresApplication ? '- ✅ New Application will be automatically c
|
|
|
468
527
|
}
|
|
469
528
|
}
|
|
470
529
|
exports.AgentDetector = AgentDetector;
|
|
530
|
+
// MCP integration for dynamic categorization
|
|
531
|
+
AgentDetector.mcpClient = null;
|
|
471
532
|
AgentDetector.AGENT_PATTERNS = {
|
|
472
533
|
// Development agents
|
|
473
534
|
architect: {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "snow-flow",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "Snow-Flow: ServiceNow Advanced Intelligence Platform - 100+ real MCP tools with AI-powered swarm orchestration and neural networks. Machine learning for incident classification, change risk prediction, and anomaly detection. Zero Mock Data, 100% Real API Integration.",
|
|
3
|
+
"version": "2.6.0",
|
|
4
|
+
"description": "Snow-Flow: ServiceNow Advanced Intelligence Platform - 100+ real MCP tools with AI-powered swarm orchestration and neural networks. Dynamic task categorization using AI. Machine learning for incident classification, change risk prediction, and anomaly detection. Zero Mock Data, 100% Real API Integration.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "commonjs",
|
|
7
7
|
"bin": {
|