snow-flow 2.0.2 → 2.0.3
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/{.claude/mcp-config.json → .mcp.json} +13 -12
- package/.releaserc.json +47 -0
- package/README.md +6 -0
- package/package.json +1 -1
- package/.claude/claude-settings.json +0 -15
- package/.claude/commands/analysis/README.md +0 -9
- package/.claude/commands/automation/README.md +0 -9
- package/.claude/commands/github/README.md +0 -11
- package/.claude/commands/helpers/standard-checkpoint-hooks.sh +0 -179
- package/.claude/commands/hooks/README.md +0 -11
- package/.claude/commands/monitoring/README.md +0 -9
- package/.claude/commands/optimization/README.md +0 -9
- package/.claude/commands/training/README.md +0 -9
- package/.claude/commands/workflows/README.md +0 -9
- package/.claude/config.json +0 -36
- package/.claude/helpers/github-setup.sh +0 -28
- package/.claude/helpers/quick-start.sh +0 -19
- package/.claude/helpers/setup-mcp.sh +0 -18
- package/.claude/settings.json +0 -114
- package/.claude/settings.local.json +0 -33
- package/.claude-flow/metrics/agent-metrics.json +0 -1
- package/.claude-flow/metrics/performance.json +0 -9
- package/.claude-flow/metrics/system-metrics.json +0 -15986
- package/.claude-flow/metrics/task-metrics.json +0 -10
- package/.roo/README.md +0 -402
- package/.roo/mcp-list.txt +0 -257
- package/.roo/mcp.json +0 -32
- package/.roo/workflows/basic-tdd.json +0 -32
- package/.roomodes +0 -201
- package/CLAUDE.md +0 -393
- package/bin/snow-flow.js +0 -3
- package/dist/cli.js.bak +0 -2052
- package/dist/config/snow-flow-config.d.ts +0 -1492
- package/dist/config/snow-flow-config.js +0 -938
- package/scripts/create-env.js +0 -91
- package/scripts/postinstall.js +0 -30
- package/scripts/register-mcp-servers.js +0 -210
- package/scripts/reset-mcp-servers.js +0 -246
- package/scripts/setup-mcp.js +0 -106
- package/scripts/update-version.js +0 -31
- package/src/agents/README.md +0 -192
- package/src/agents/base-agent.ts +0 -251
- package/src/agents/coordinator.ts +0 -971
- package/src/agents/index.ts +0 -18
- package/src/agents/queen-403-handler.ts +0 -230
- package/src/agents/queen-agent.ts +0 -1399
- package/src/agents/script-writer-agent.ts +0 -769
- package/src/agents/security-agent.ts +0 -726
- package/src/agents/widget-creator-agent.ts +0 -568
- package/src/api/error-handling.ts +0 -1758
- package/src/api/natural-language-mapper.ts +0 -630
- package/src/api/performance-optimizer.ts +0 -891
- package/src/api/transaction-manager.ts +0 -754
- package/src/cli/deploy-artifact.ts +0 -304
- package/src/cli/snow-flow-cli-integration.ts +0 -434
- package/src/cli.ts +0 -4455
- package/src/cli.ts.bak +0 -5616
- package/src/compliance/advanced-compliance-system.ts +0 -1268
- package/src/compliance/index.ts +0 -19
- package/src/config/snow-flow-config.ts +0 -1019
- package/src/documentation/index.ts +0 -16
- package/src/documentation/self-documenting-system.ts +0 -1421
- package/src/dynamic-version.ts +0 -44
- package/src/healing/index.ts +0 -20
- package/src/healing/self-healing-system.ts +0 -1435
- package/src/health/README.md +0 -161
- package/src/health/system-health.ts +0 -995
- package/src/index.ts +0 -60
- package/src/intelligence/acl-analyzer.ts +0 -377
- package/src/intelligence/auto-resolution-engine.ts +0 -643
- package/src/intelligence/gap-analysis-engine.ts +0 -488
- package/src/intelligence/manual-instructions-generator.ts +0 -744
- package/src/intelligence/mcp-coverage-analyzer.ts +0 -708
- package/src/intelligence/multi-pass-requirements-analyzer.ts +0 -603
- package/src/intelligence/performance-recommendations-engine.ts +0 -1223
- package/src/intelligence/requirements-analyzer.ts +0 -1148
- package/src/intelligence/task-analyzer.ts +0 -628
- package/src/managers/scope-manager.ts +0 -555
- package/src/mcp/advanced/servicenow-advanced-features-mcp.ts +0 -16110
- package/src/mcp/base-mcp-server.ts +0 -660
- package/src/mcp/http-transport-wrapper.ts +0 -426
- package/src/mcp/service-discovery-client.ts +0 -312
- package/src/mcp/servicenow-automation-mcp-refactored.ts +0 -678
- package/src/mcp/servicenow-automation-mcp.ts +0 -838
- package/src/mcp/servicenow-deployment-mcp-refactored.ts +0 -1292
- package/src/mcp/servicenow-deployment-mcp.ts +0 -7244
- package/src/mcp/servicenow-graph-memory-mcp-refactored.ts +0 -721
- package/src/mcp/servicenow-graph-memory-mcp.ts +0 -832
- package/src/mcp/servicenow-integration-mcp-refactored.ts +0 -655
- package/src/mcp/servicenow-integration-mcp.ts +0 -819
- package/src/mcp/servicenow-intelligent-mcp-refactored.ts +0 -977
- package/src/mcp/servicenow-intelligent-mcp.ts +0 -4638
- package/src/mcp/servicenow-mcp-server.ts +0 -728
- package/src/mcp/servicenow-memory-mcp.ts +0 -474
- package/src/mcp/servicenow-operations-mcp-refactored.ts +0 -1995
- package/src/mcp/servicenow-operations-mcp.ts +0 -3384
- package/src/mcp/servicenow-platform-development-mcp-refactored.ts +0 -611
- package/src/mcp/servicenow-platform-development-mcp.ts +0 -970
- package/src/mcp/servicenow-progressive-indexer.ts +0 -370
- package/src/mcp/servicenow-reporting-analytics-mcp-refactored.ts +0 -695
- package/src/mcp/servicenow-reporting-analytics-mcp.ts +0 -1123
- package/src/mcp/servicenow-security-compliance-mcp-refactored.ts +0 -642
- package/src/mcp/servicenow-security-compliance-mcp.ts +0 -1157
- package/src/mcp/servicenow-update-set-mcp-refactored.ts +0 -751
- package/src/mcp/servicenow-update-set-mcp.ts +0 -811
- package/src/mcp/shared/agent-context-provider.ts +0 -365
- package/src/mcp/shared/base-mcp-server.ts +0 -2463
- package/src/mcp/shared/mcp-memory-manager.ts +0 -540
- package/src/mcp/shared/mcp-resource-manager.ts +0 -367
- package/src/mcp/snow-flow-mcp.ts +0 -911
- package/src/mcp/start-all-mcp-servers.ts +0 -102
- package/src/mcp/start-servicenow-mcp.ts +0 -67
- package/src/monitoring/enhanced-monitoring-system.ts +0 -1345
- package/src/monitoring/performance-tracker.ts +0 -777
- package/src/optimization/cost-optimization-engine.ts +0 -1125
- package/src/optimization/index.ts +0 -10
- package/src/queen/README.md +0 -403
- package/src/queen/agent-factory.ts +0 -574
- package/src/queen/index.ts +0 -94
- package/src/queen/mcp-execution-bridge.ts +0 -681
- package/src/queen/neural-learning.ts +0 -319
- package/src/queen/parallel-agent-engine.ts +0 -848
- package/src/queen/queen-memory-system.ts +0 -490
- package/src/queen/queen-memory.ts +0 -456
- package/src/queen/servicenow-queen.ts +0 -1029
- package/src/queen/types.ts +0 -87
- package/src/rollback/smart-rollback-system.ts +0 -866
- package/src/schemas/deployment.schema.json +0 -58
- package/src/schemas/flow.schema.json +0 -79
- package/src/schemas/widget.schema.json +0 -72
- package/src/snow-flow-system.ts +0 -541
- package/src/sparc/sparc-help.ts +0 -49
- package/src/sparc/team-sparc.ts +0 -88
- package/src/strategies/global-scope-strategy.ts +0 -736
- package/src/templates/base/application.template.json +0 -45
- package/src/templates/base/business_rule.template.json +0 -33
- package/src/templates/base/script_include.template.json +0 -18
- package/src/templates/base/table.template.json +0 -64
- package/src/templates/base/widget.template.json +0 -25
- package/src/templates/patterns/composite.incident-management.template.json +0 -140
- package/src/templates/patterns/widget.dashboard.template.json +0 -238
- package/src/templates/patterns/widget.datatable.template.json +0 -292
- package/src/testing/integration-test-suite.ts +0 -1276
- package/src/types/index.ts +0 -183
- package/src/types/neo4j-driver.d.ts +0 -23
- package/src/types/servicenow.types.ts +0 -307
- package/src/types/snow-flow.types.ts +0 -186
- package/src/types/todo.types.ts +0 -70
- package/src/utils/action-type-cache.ts +0 -286
- package/src/utils/agent-detector.ts +0 -573
- package/src/utils/artifact-tracker.ts +0 -379
- package/src/utils/dependency-detector.ts +0 -233
- package/src/utils/deployment-metadata-handler.ts +0 -518
- package/src/utils/error-recovery.ts +0 -680
- package/src/utils/logger.ts +0 -60
- package/src/utils/mcp-auth-middleware.ts +0 -262
- package/src/utils/mcp-config-manager.ts +0 -270
- package/src/utils/mcp-server-manager.ts +0 -446
- package/src/utils/mcp-tool-registry.ts +0 -298
- package/src/utils/migrate-snow-flow.ts +0 -98
- package/src/utils/oauth-html-templates.ts +0 -188
- package/src/utils/scope-utils.ts +0 -443
- package/src/utils/servicenow-client.ts +0 -3321
- package/src/utils/servicenow-id-generator.ts +0 -181
- package/src/utils/snow-memory-manager.ts +0 -605
- package/src/utils/snow-oauth.ts +0 -797
- package/src/utils/template-engine.ts +0 -463
- package/src/utils/theme-manager.ts +0 -295
- package/src/utils/unified-auth-store.ts +0 -222
- package/src/utils/update-set-importer.ts +0 -422
- package/src/utils/update-set-xml-packager.ts +0 -371
- package/src/utils/widget-template-generator.ts +0 -1744
- package/src/version.ts +0 -1950
|
@@ -1,628 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Task Analysis Engine - AI-powered _analysis of unknown requirements
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { Logger } from '../utils/logger.js';
|
|
6
|
-
import { TaskPriority } from '../types/snow-flow.types.js';
|
|
7
|
-
|
|
8
|
-
export interface TaskAnalysis {
|
|
9
|
-
taskType: TaskType;
|
|
10
|
-
complexity: 'low' | 'medium' | 'high';
|
|
11
|
-
requiredSkills: SkillSet[];
|
|
12
|
-
estimatedDuration: number;
|
|
13
|
-
hasServiceNowComponents: boolean;
|
|
14
|
-
requiresDataProcessing: boolean;
|
|
15
|
-
requiresIntegration: boolean;
|
|
16
|
-
requiresUserInterface: boolean;
|
|
17
|
-
requiresAutomation: boolean;
|
|
18
|
-
requiresReporting: boolean;
|
|
19
|
-
requiresSecurity: boolean;
|
|
20
|
-
canParallelize: boolean;
|
|
21
|
-
hasStrictDependencies: boolean;
|
|
22
|
-
riskLevel: 'low' | 'medium' | 'high';
|
|
23
|
-
recommendations: string[];
|
|
24
|
-
recommendedPattern?: string;
|
|
25
|
-
successRate: number;
|
|
26
|
-
priority: TaskPriority;
|
|
27
|
-
keyEntities: string[];
|
|
28
|
-
businessImpact: 'low' | 'medium' | 'high';
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export interface SkillSet {
|
|
32
|
-
type: string;
|
|
33
|
-
importance: 'primary' | 'secondary' | 'optional';
|
|
34
|
-
complexity: 'low' | 'medium' | 'high';
|
|
35
|
-
estimatedTime: number;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export interface TeamComposition {
|
|
39
|
-
coordinatorRole: string;
|
|
40
|
-
primarySpecialists: string[];
|
|
41
|
-
secondarySpecialists: string[];
|
|
42
|
-
estimatedTeamSize: number;
|
|
43
|
-
recommendedStructure: 'flat' | 'hierarchical' | 'matrix';
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export type TaskType =
|
|
47
|
-
| 'data_integration'
|
|
48
|
-
| 'workflow_automation'
|
|
49
|
-
| 'ui_development'
|
|
50
|
-
| 'reporting_analytics'
|
|
51
|
-
| 'security_compliance'
|
|
52
|
-
| 'system_integration'
|
|
53
|
-
| 'custom_development'
|
|
54
|
-
| 'process_optimization'
|
|
55
|
-
| 'incident_management'
|
|
56
|
-
| 'catalog_management'
|
|
57
|
-
| 'user_provisioning'
|
|
58
|
-
| 'notification_system'
|
|
59
|
-
| 'approval_workflow'
|
|
60
|
-
| 'dashboard_creation'
|
|
61
|
-
| 'api_development'
|
|
62
|
-
| 'migration_task'
|
|
63
|
-
| 'configuration_management'
|
|
64
|
-
| 'testing_validation'
|
|
65
|
-
| 'documentation'
|
|
66
|
-
| 'monitoring_alerting'
|
|
67
|
-
| 'unknown';
|
|
68
|
-
|
|
69
|
-
interface TaskAnalysisRequest {
|
|
70
|
-
description: string;
|
|
71
|
-
context?: any;
|
|
72
|
-
priority?: TaskPriority;
|
|
73
|
-
constraints?: string[];
|
|
74
|
-
expectedOutput?: string;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
export class TaskAnalyzer {
|
|
78
|
-
private logger: Logger;
|
|
79
|
-
private knowledgeBase: Map<string, any> = new Map();
|
|
80
|
-
private patternLibrary: TaskPattern[] = [];
|
|
81
|
-
|
|
82
|
-
constructor() {
|
|
83
|
-
this.logger = new Logger('TaskAnalyzer');
|
|
84
|
-
this.initializeKnowledgeBase();
|
|
85
|
-
this.initializePatternLibrary();
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Analyze task type and requirements from natural language
|
|
90
|
-
*/
|
|
91
|
-
async analyzeTaskType(request: TaskAnalysisRequest): Promise<TaskAnalysis> {
|
|
92
|
-
this.logger.info('Analyzing task type', { description: request.description });
|
|
93
|
-
|
|
94
|
-
try {
|
|
95
|
-
const description = request.description.toLowerCase();
|
|
96
|
-
const context = request.context || {};
|
|
97
|
-
|
|
98
|
-
// Step 1: Determine primary task type
|
|
99
|
-
const taskType = this.identifyTaskType(description);
|
|
100
|
-
|
|
101
|
-
// Step 2: Assess complexity
|
|
102
|
-
const complexity = this.assessComplexity(description, context);
|
|
103
|
-
|
|
104
|
-
// Step 3: Identify required components
|
|
105
|
-
const components = this.identifyRequiredComponents(description);
|
|
106
|
-
|
|
107
|
-
// Step 4: Extract key entities
|
|
108
|
-
const keyEntities = this.extractKeyEntities(description);
|
|
109
|
-
|
|
110
|
-
// Step 5: Determine parallelization potential
|
|
111
|
-
const canParallelize = this.canTaskParallelize(description, taskType);
|
|
112
|
-
|
|
113
|
-
// Step 6: Assess dependencies
|
|
114
|
-
const hasStrictDependencies = this.hasStrictDependencies(description, taskType);
|
|
115
|
-
|
|
116
|
-
// Step 7: Calculate risk level
|
|
117
|
-
const riskLevel = this.calculateRiskLevel(complexity, components, taskType);
|
|
118
|
-
|
|
119
|
-
// Step 8: Generate recommendations
|
|
120
|
-
const recommendations = this.generateRecommendations(taskType, complexity, components);
|
|
121
|
-
|
|
122
|
-
// Step 9: Estimate duration
|
|
123
|
-
const estimatedDuration = this.estimateTaskDuration(taskType, complexity, components);
|
|
124
|
-
|
|
125
|
-
// Step 10: Determine business impact
|
|
126
|
-
const businessImpact = this.assessBusinessImpact(description, taskType);
|
|
127
|
-
|
|
128
|
-
const _analysis: TaskAnalysis = {
|
|
129
|
-
taskType,
|
|
130
|
-
complexity,
|
|
131
|
-
requiredSkills: [], // Will be populated by identifyRequiredSkills
|
|
132
|
-
estimatedDuration,
|
|
133
|
-
hasServiceNowComponents: components.servicenow,
|
|
134
|
-
requiresDataProcessing: components.data,
|
|
135
|
-
requiresIntegration: components.integration,
|
|
136
|
-
requiresUserInterface: components.ui,
|
|
137
|
-
requiresAutomation: components.automation,
|
|
138
|
-
requiresReporting: components.reporting,
|
|
139
|
-
requiresSecurity: components.security,
|
|
140
|
-
canParallelize,
|
|
141
|
-
hasStrictDependencies,
|
|
142
|
-
riskLevel,
|
|
143
|
-
recommendations,
|
|
144
|
-
successRate: this.estimateSuccessRate(taskType, complexity),
|
|
145
|
-
priority: request.priority || 'medium',
|
|
146
|
-
keyEntities,
|
|
147
|
-
businessImpact
|
|
148
|
-
};
|
|
149
|
-
|
|
150
|
-
this.logger.info('Task _analysis completed', {
|
|
151
|
-
taskType: _analysis.taskType,
|
|
152
|
-
complexity: _analysis.complexity,
|
|
153
|
-
riskLevel: _analysis.riskLevel
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
return _analysis;
|
|
157
|
-
|
|
158
|
-
} catch (error) {
|
|
159
|
-
this.logger.error('Task _analysis failed', error);
|
|
160
|
-
throw new Error(`Task _analysis failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Identify required skills based on task analysis
|
|
166
|
-
*/
|
|
167
|
-
async identifyRequiredSkills(_analysis: TaskAnalysis): Promise<SkillSet[]> {
|
|
168
|
-
const skills: SkillSet[] = [];
|
|
169
|
-
|
|
170
|
-
// Core ServiceNow skills
|
|
171
|
-
if (_analysis.hasServiceNowComponents) {
|
|
172
|
-
skills.push({
|
|
173
|
-
type: 'servicenow-specialist',
|
|
174
|
-
importance: 'primary',
|
|
175
|
-
complexity: _analysis.complexity,
|
|
176
|
-
estimatedTime: _analysis.estimatedDuration * 0.3
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// Data processing skills
|
|
181
|
-
if (_analysis.requiresDataProcessing) {
|
|
182
|
-
skills.push({
|
|
183
|
-
type: 'data-specialist',
|
|
184
|
-
importance: 'primary',
|
|
185
|
-
complexity: _analysis.complexity,
|
|
186
|
-
estimatedTime: _analysis.estimatedDuration * 0.25
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
// Integration skills
|
|
191
|
-
if (_analysis.requiresIntegration) {
|
|
192
|
-
skills.push({
|
|
193
|
-
type: 'integration-specialist',
|
|
194
|
-
importance: 'primary',
|
|
195
|
-
complexity: _analysis.complexity,
|
|
196
|
-
estimatedTime: _analysis.estimatedDuration * 0.35
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// UI development skills
|
|
201
|
-
if (_analysis.requiresUserInterface) {
|
|
202
|
-
skills.push({
|
|
203
|
-
type: 'frontend-specialist',
|
|
204
|
-
importance: 'primary',
|
|
205
|
-
complexity: _analysis.complexity,
|
|
206
|
-
estimatedTime: _analysis.estimatedDuration * 0.4
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// Automation skills
|
|
211
|
-
if (_analysis.requiresAutomation) {
|
|
212
|
-
skills.push({
|
|
213
|
-
type: 'automation-specialist',
|
|
214
|
-
importance: 'primary',
|
|
215
|
-
complexity: _analysis.complexity,
|
|
216
|
-
estimatedTime: _analysis.estimatedDuration * 0.3
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
// Reporting skills
|
|
221
|
-
if (_analysis.requiresReporting) {
|
|
222
|
-
skills.push({
|
|
223
|
-
type: 'reporting-specialist',
|
|
224
|
-
importance: 'secondary',
|
|
225
|
-
complexity: _analysis.complexity,
|
|
226
|
-
estimatedTime: _analysis.estimatedDuration * 0.2
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
// Security skills
|
|
231
|
-
if (_analysis.requiresSecurity || _analysis.riskLevel === 'high') {
|
|
232
|
-
skills.push({
|
|
233
|
-
type: 'security-specialist',
|
|
234
|
-
importance: 'secondary',
|
|
235
|
-
complexity: _analysis.complexity,
|
|
236
|
-
estimatedTime: _analysis.estimatedDuration * 0.15
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
// Add specialized skills based on task type
|
|
241
|
-
switch (_analysis.taskType) {
|
|
242
|
-
case 'workflow_automation':
|
|
243
|
-
skills.push({
|
|
244
|
-
type: 'workflow-designer',
|
|
245
|
-
importance: 'primary',
|
|
246
|
-
complexity: _analysis.complexity,
|
|
247
|
-
estimatedTime: _analysis.estimatedDuration * 0.5
|
|
248
|
-
});
|
|
249
|
-
break;
|
|
250
|
-
|
|
251
|
-
case 'dashboard_creation':
|
|
252
|
-
skills.push({
|
|
253
|
-
type: 'ui-designer',
|
|
254
|
-
importance: 'primary',
|
|
255
|
-
complexity: _analysis.complexity,
|
|
256
|
-
estimatedTime: _analysis.estimatedDuration * 0.6
|
|
257
|
-
});
|
|
258
|
-
break;
|
|
259
|
-
|
|
260
|
-
case 'api_development':
|
|
261
|
-
skills.push({
|
|
262
|
-
type: 'api-developer',
|
|
263
|
-
importance: 'primary',
|
|
264
|
-
complexity: _analysis.complexity,
|
|
265
|
-
estimatedTime: _analysis.estimatedDuration * 0.7
|
|
266
|
-
});
|
|
267
|
-
break;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
return skills;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
/**
|
|
274
|
-
* Suggest optimal team composition
|
|
275
|
-
*/
|
|
276
|
-
async suggestTeamComposition(skills: SkillSet[]): Promise<TeamComposition> {
|
|
277
|
-
const primarySpecialists = skills
|
|
278
|
-
.filter(skill => skill.importance === 'primary')
|
|
279
|
-
.map(skill => skill.type);
|
|
280
|
-
|
|
281
|
-
const secondarySpecialists = skills
|
|
282
|
-
.filter(skill => skill.importance === 'secondary')
|
|
283
|
-
.map(skill => skill.type);
|
|
284
|
-
|
|
285
|
-
const estimatedTeamSize = Math.min(Math.max(primarySpecialists.length + Math.ceil(secondarySpecialists.length / 2), 2), 8);
|
|
286
|
-
|
|
287
|
-
let recommendedStructure: 'flat' | 'hierarchical' | 'matrix' = 'flat';
|
|
288
|
-
if (estimatedTeamSize > 5) {
|
|
289
|
-
recommendedStructure = 'hierarchical';
|
|
290
|
-
} else if (primarySpecialists.length > 3 && secondarySpecialists.length > 2) {
|
|
291
|
-
recommendedStructure = 'matrix';
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
return {
|
|
295
|
-
coordinatorRole: 'adaptive-coordinator',
|
|
296
|
-
primarySpecialists,
|
|
297
|
-
secondarySpecialists,
|
|
298
|
-
estimatedTeamSize,
|
|
299
|
-
recommendedStructure
|
|
300
|
-
};
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
/**
|
|
304
|
-
* Identify task type from description
|
|
305
|
-
*/
|
|
306
|
-
private identifyTaskType(description: string): TaskType {
|
|
307
|
-
const typePatterns: Record<TaskType, string[]> = {
|
|
308
|
-
'data_integration': ['data', 'integration', 'sync', 'etl', 'import', 'export'],
|
|
309
|
-
'workflow_automation': ['workflow', 'automation', 'process', 'flow', 'approval'],
|
|
310
|
-
'ui_development': ['widget', 'ui', 'interface', 'dashboard', 'portal', 'form'],
|
|
311
|
-
'reporting_analytics': ['report', 'analytics', 'chart', 'graph', 'metrics', 'kpi'],
|
|
312
|
-
'security_compliance': ['security', 'compliance', 'audit', 'access', 'permission'],
|
|
313
|
-
'system_integration': ['api', 'rest', 'soap', 'integration', 'external', 'third-party'],
|
|
314
|
-
'custom_development': ['custom', 'script', 'development', 'code', 'programming'],
|
|
315
|
-
'process_optimization': ['optimize', 'improve', 'enhance', 'streamline'],
|
|
316
|
-
'incident_management': ['incident', 'problem', 'issue', 'ticket', 'support'],
|
|
317
|
-
'catalog_management': ['catalog', 'service', 'item', 'offering', 'request'],
|
|
318
|
-
'user_provisioning': ['user', 'provisioning', 'account', 'access', 'identity'],
|
|
319
|
-
'notification_system': ['notification', 'alert', 'email', 'message', 'notify'],
|
|
320
|
-
'approval_workflow': ['approval', 'approve', 'review', 'authorize'],
|
|
321
|
-
'dashboard_creation': ['dashboard', 'visualization', 'chart', 'report', 'view'],
|
|
322
|
-
'api_development': ['api', 'endpoint', 'service', 'rest', 'web service'],
|
|
323
|
-
'migration_task': ['migrate', 'migration', 'move', 'transfer', 'upgrade'],
|
|
324
|
-
'configuration_management': ['config', 'configuration', 'setting', 'setup'],
|
|
325
|
-
'testing_validation': ['test', 'testing', 'validation', 'verify', 'check'],
|
|
326
|
-
'documentation': ['document', 'documentation', 'guide', 'manual'],
|
|
327
|
-
'monitoring_alerting': ['monitor', 'monitoring', 'alert', 'watch', 'track'],
|
|
328
|
-
'unknown': []
|
|
329
|
-
};
|
|
330
|
-
|
|
331
|
-
let bestMatch: TaskType = 'unknown';
|
|
332
|
-
let maxScore = 0;
|
|
333
|
-
|
|
334
|
-
for (const [taskType, patterns] of Object.entries(typePatterns)) {
|
|
335
|
-
const score = patterns.reduce((sum, pattern) => {
|
|
336
|
-
return sum + (description.includes(pattern) ? 1 : 0);
|
|
337
|
-
}, 0);
|
|
338
|
-
|
|
339
|
-
if (score > maxScore) {
|
|
340
|
-
maxScore = score;
|
|
341
|
-
bestMatch = taskType as TaskType;
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
return bestMatch;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
/**
|
|
349
|
-
* Assess task complexity
|
|
350
|
-
*/
|
|
351
|
-
private assessComplexity(description: string, context: any): 'low' | 'medium' | 'high' {
|
|
352
|
-
let complexityScore = 0;
|
|
353
|
-
|
|
354
|
-
// Keyword-based complexity indicators
|
|
355
|
-
const highComplexityKeywords = ['complex', 'advanced', 'enterprise', 'integration', 'multiple', 'custom'];
|
|
356
|
-
const mediumComplexityKeywords = ['workflow', 'automation', 'report', 'dashboard', 'api'];
|
|
357
|
-
|
|
358
|
-
highComplexityKeywords.forEach(keyword => {
|
|
359
|
-
if (description.includes(keyword)) complexityScore += 2;
|
|
360
|
-
});
|
|
361
|
-
|
|
362
|
-
mediumComplexityKeywords.forEach(keyword => {
|
|
363
|
-
if (description.includes(keyword)) complexityScore += 1;
|
|
364
|
-
});
|
|
365
|
-
|
|
366
|
-
// Length-based complexity
|
|
367
|
-
if (description.length > 200) complexityScore += 1;
|
|
368
|
-
if (description.length > 500) complexityScore += 2;
|
|
369
|
-
|
|
370
|
-
// Context-based complexity
|
|
371
|
-
if (context.multipleIntegrations) complexityScore += 2;
|
|
372
|
-
if (context.realTimeRequirements) complexityScore += 2;
|
|
373
|
-
if (context.highAvailability) complexityScore += 1;
|
|
374
|
-
|
|
375
|
-
if (complexityScore >= 4) return 'high';
|
|
376
|
-
if (complexityScore >= 2) return 'medium';
|
|
377
|
-
return 'low';
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
/**
|
|
381
|
-
* Identify required components
|
|
382
|
-
*/
|
|
383
|
-
private identifyRequiredComponents(description: string): any {
|
|
384
|
-
return {
|
|
385
|
-
servicenow: /servicenow|snow|platform|instance/i.test(description),
|
|
386
|
-
data: /data|database|record|table|field/i.test(description),
|
|
387
|
-
integration: /integration|api|rest|soap|external|third-party/i.test(description),
|
|
388
|
-
ui: /ui|interface|widget|portal|form|dashboard/i.test(description),
|
|
389
|
-
automation: /automation|workflow|process|flow|trigger/i.test(description),
|
|
390
|
-
reporting: /report|analytics|chart|graph|metrics/i.test(description),
|
|
391
|
-
security: /security|compliance|audit|access|permission/i.test(description)
|
|
392
|
-
};
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
/**
|
|
396
|
-
* Extract key entities from description
|
|
397
|
-
*/
|
|
398
|
-
private extractKeyEntities(description: string): string[] {
|
|
399
|
-
const entities: string[] = [];
|
|
400
|
-
|
|
401
|
-
// Common ServiceNow entities
|
|
402
|
-
const serviceNowEntities = ['incident', 'problem', 'change', 'user', 'group', 'role', 'catalog', 'workflow', 'script', 'table'];
|
|
403
|
-
serviceNowEntities.forEach(entity => {
|
|
404
|
-
if (description.includes(entity)) {
|
|
405
|
-
entities.push(entity);
|
|
406
|
-
}
|
|
407
|
-
});
|
|
408
|
-
|
|
409
|
-
// Extract quoted terms
|
|
410
|
-
const quotedTerms = description.match(/["']([^"']+)["']/g);
|
|
411
|
-
if (quotedTerms) {
|
|
412
|
-
quotedTerms.forEach(term => {
|
|
413
|
-
entities.push(term.replace(/["']/g, ''));
|
|
414
|
-
});
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
// Extract capitalized terms (likely proper nouns)
|
|
418
|
-
const capitalizedTerms = description.match(/\b[A-Z][a-z]+\b/g);
|
|
419
|
-
if (capitalizedTerms) {
|
|
420
|
-
entities.push(...capitalizedTerms);
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
return [...new Set(entities)]; // Remove duplicates
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
/**
|
|
427
|
-
* Determine if task can be parallelized
|
|
428
|
-
*/
|
|
429
|
-
private canTaskParallelize(description: string, taskType: TaskType): boolean {
|
|
430
|
-
// Tasks that typically can't be parallelized
|
|
431
|
-
const sequentialTasks = ['approval_workflow', 'migration_task', 'configuration_management'];
|
|
432
|
-
if (sequentialTasks.includes(taskType)) return false;
|
|
433
|
-
|
|
434
|
-
// Check for sequential indicators
|
|
435
|
-
const sequentialIndicators = ['sequential', 'step by step', 'order', 'dependency', 'after', 'then', 'once'];
|
|
436
|
-
if (sequentialIndicators.some(indicator => description.includes(indicator))) return false;
|
|
437
|
-
|
|
438
|
-
// Tasks that can often be parallelized
|
|
439
|
-
const parallelizableTasks = ['data_integration', 'ui_development', 'reporting_analytics', 'testing_validation'];
|
|
440
|
-
if (parallelizableTasks.includes(taskType)) return true;
|
|
441
|
-
|
|
442
|
-
// Check for parallel indicators
|
|
443
|
-
const parallelIndicators = ['parallel', 'concurrent', 'simultaneously', 'multiple', 'batch'];
|
|
444
|
-
return parallelIndicators.some(indicator => description.includes(indicator));
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
/**
|
|
448
|
-
* Determine if task has strict dependencies
|
|
449
|
-
*/
|
|
450
|
-
private hasStrictDependencies(description: string, taskType: TaskType): boolean {
|
|
451
|
-
const dependencyIndicators = ['depend', 'require', 'prerequisite', 'after', 'once', 'before', 'first'];
|
|
452
|
-
const hasDependencyLanguage = dependencyIndicators.some(indicator => description.includes(indicator));
|
|
453
|
-
|
|
454
|
-
// Certain task types inherently have dependencies
|
|
455
|
-
const dependentTasks = ['approval_workflow', 'migration_task', 'user_provisioning'];
|
|
456
|
-
|
|
457
|
-
return hasDependencyLanguage || dependentTasks.includes(taskType);
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
/**
|
|
461
|
-
* Calculate risk level
|
|
462
|
-
*/
|
|
463
|
-
private calculateRiskLevel(complexity: string, components: any, taskType: TaskType): 'low' | 'medium' | 'high' {
|
|
464
|
-
let riskScore = 0;
|
|
465
|
-
|
|
466
|
-
// Complexity risk
|
|
467
|
-
if (complexity === 'high') riskScore += 3;
|
|
468
|
-
else if (complexity === 'medium') riskScore += 1;
|
|
469
|
-
|
|
470
|
-
// Component risk
|
|
471
|
-
if (components.integration) riskScore += 2;
|
|
472
|
-
if (components.security) riskScore += 2;
|
|
473
|
-
if (components.data) riskScore += 1;
|
|
474
|
-
|
|
475
|
-
// Task type risk
|
|
476
|
-
const highRiskTasks = ['system_integration', 'migration_task', 'security_compliance'];
|
|
477
|
-
if (highRiskTasks.includes(taskType)) riskScore += 2;
|
|
478
|
-
|
|
479
|
-
if (riskScore >= 5) return 'high';
|
|
480
|
-
if (riskScore >= 3) return 'medium';
|
|
481
|
-
return 'low';
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
/**
|
|
485
|
-
* Generate recommendations
|
|
486
|
-
*/
|
|
487
|
-
private generateRecommendations(taskType: TaskType, complexity: string, components: any): string[] {
|
|
488
|
-
const recommendations: string[] = [];
|
|
489
|
-
|
|
490
|
-
if (complexity === 'high') {
|
|
491
|
-
recommendations.push('Consider breaking down this complex task into smaller components');
|
|
492
|
-
recommendations.push('Ensure thorough planning and risk assessment');
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
if (components.integration) {
|
|
496
|
-
recommendations.push('Plan for integration testing and error handling');
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
if (components.security) {
|
|
500
|
-
recommendations.push('Include security review in the development process');
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
if (taskType === 'unknown') {
|
|
504
|
-
recommendations.push('Provide more specific requirements for better _analysis');
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
return recommendations;
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
/**
|
|
511
|
-
* Estimate task duration in milliseconds
|
|
512
|
-
*/
|
|
513
|
-
private estimateTaskDuration(taskType: TaskType, complexity: string, components: any): number {
|
|
514
|
-
const baseDurations: Record<TaskType, number> = {
|
|
515
|
-
'data_integration': 3600000, // 1 hour
|
|
516
|
-
'workflow_automation': 7200000, // 2 hours
|
|
517
|
-
'ui_development': 14400000, // 4 hours
|
|
518
|
-
'reporting_analytics': 5400000, // 1.5 hours
|
|
519
|
-
'security_compliance': 10800000, // 3 hours
|
|
520
|
-
'system_integration': 18000000, // 5 hours
|
|
521
|
-
'custom_development': 21600000, // 6 hours
|
|
522
|
-
'process_optimization': 7200000, // 2 hours
|
|
523
|
-
'incident_management': 1800000, // 30 minutes
|
|
524
|
-
'catalog_management': 3600000, // 1 hour
|
|
525
|
-
'user_provisioning': 5400000, // 1.5 hours
|
|
526
|
-
'notification_system': 3600000, // 1 hour
|
|
527
|
-
'approval_workflow': 5400000, // 1.5 hours
|
|
528
|
-
'dashboard_creation': 10800000, // 3 hours
|
|
529
|
-
'api_development': 14400000, // 4 hours
|
|
530
|
-
'migration_task': 28800000, // 8 hours
|
|
531
|
-
'configuration_management': 3600000, // 1 hour
|
|
532
|
-
'testing_validation': 7200000, // 2 hours
|
|
533
|
-
'documentation': 5400000, // 1.5 hours
|
|
534
|
-
'monitoring_alerting': 5400000, // 1.5 hours
|
|
535
|
-
'unknown': 7200000 // 2 hours default
|
|
536
|
-
};
|
|
537
|
-
|
|
538
|
-
let duration = baseDurations[taskType] || baseDurations['unknown'];
|
|
539
|
-
|
|
540
|
-
// Complexity multiplier
|
|
541
|
-
if (complexity === 'high') duration *= 2;
|
|
542
|
-
else if (complexity === 'medium') duration *= 1.5;
|
|
543
|
-
|
|
544
|
-
// Component multipliers
|
|
545
|
-
if (components.integration) duration *= 1.3;
|
|
546
|
-
if (components.security) duration *= 1.2;
|
|
547
|
-
if (components.ui) duration *= 1.4;
|
|
548
|
-
|
|
549
|
-
return Math.round(duration);
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
/**
|
|
553
|
-
* Estimate success rate based on task characteristics
|
|
554
|
-
*/
|
|
555
|
-
private estimateSuccessRate(taskType: TaskType, complexity: string): number {
|
|
556
|
-
let baseRate = 0.85; // 85% base success rate
|
|
557
|
-
|
|
558
|
-
// Adjust based on complexity
|
|
559
|
-
if (complexity === 'high') baseRate -= 0.2;
|
|
560
|
-
else if (complexity === 'medium') baseRate -= 0.1;
|
|
561
|
-
|
|
562
|
-
// Adjust based on task type
|
|
563
|
-
const reliableTaskTypes = ['configuration_management', 'documentation', 'catalog_management'];
|
|
564
|
-
const challengingTaskTypes = ['system_integration', 'migration_task', 'custom_development'];
|
|
565
|
-
|
|
566
|
-
if (reliableTaskTypes.includes(taskType)) baseRate += 0.1;
|
|
567
|
-
if (challengingTaskTypes.includes(taskType)) baseRate -= 0.15;
|
|
568
|
-
|
|
569
|
-
return Math.max(0.3, Math.min(0.95, baseRate));
|
|
570
|
-
}
|
|
571
|
-
|
|
572
|
-
/**
|
|
573
|
-
* Assess business impact
|
|
574
|
-
*/
|
|
575
|
-
private assessBusinessImpact(description: string, taskType: TaskType): 'low' | 'medium' | 'high' {
|
|
576
|
-
const highImpactKeywords = ['critical', 'urgent', 'production', 'enterprise', 'business-critical'];
|
|
577
|
-
const highImpactTasks = ['system_integration', 'migration_task', 'security_compliance'];
|
|
578
|
-
|
|
579
|
-
if (highImpactKeywords.some(keyword => description.includes(keyword)) ||
|
|
580
|
-
highImpactTasks.includes(taskType)) {
|
|
581
|
-
return 'high';
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
const mediumImpactKeywords = ['important', 'workflow', 'automation', 'user'];
|
|
585
|
-
if (mediumImpactKeywords.some(keyword => description.includes(keyword))) {
|
|
586
|
-
return 'medium';
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
return 'low';
|
|
590
|
-
}
|
|
591
|
-
|
|
592
|
-
/**
|
|
593
|
-
* Initialize knowledge base with patterns and learnings
|
|
594
|
-
*/
|
|
595
|
-
private initializeKnowledgeBase(): void {
|
|
596
|
-
// This would typically be loaded from a database or configuration
|
|
597
|
-
this.knowledgeBase.set('task_patterns', {
|
|
598
|
-
// Common task patterns and their characteristics
|
|
599
|
-
});
|
|
600
|
-
|
|
601
|
-
this.knowledgeBase.set('skill_mappings', {
|
|
602
|
-
// Mapping of task types to required skills
|
|
603
|
-
});
|
|
604
|
-
|
|
605
|
-
this.knowledgeBase.set('historical_data', {
|
|
606
|
-
// Historical task performance data
|
|
607
|
-
});
|
|
608
|
-
}
|
|
609
|
-
|
|
610
|
-
/**
|
|
611
|
-
* Initialize pattern library
|
|
612
|
-
*/
|
|
613
|
-
private initializePatternLibrary(): void {
|
|
614
|
-
// This would typically be loaded from a configuration file
|
|
615
|
-
this.patternLibrary = [
|
|
616
|
-
// Common task execution patterns
|
|
617
|
-
];
|
|
618
|
-
}
|
|
619
|
-
}
|
|
620
|
-
|
|
621
|
-
interface TaskPattern {
|
|
622
|
-
name: string;
|
|
623
|
-
description: string;
|
|
624
|
-
applicableTaskTypes: TaskType[];
|
|
625
|
-
complexity: 'low' | 'medium' | 'high';
|
|
626
|
-
successRate: number;
|
|
627
|
-
steps: string[];
|
|
628
|
-
}
|