snow-flow 3.0.9 → 3.0.13
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-flow.bat +0 -0
- package/claude-flow.ps1 +0 -0
- package/dist/mcp/intelligent-reporting-mcp.d.ts +7 -0
- package/dist/mcp/intelligent-reporting-mcp.js +379 -0
- package/dist/mcp/servicenow-automation-mcp.js +0 -0
- package/dist/mcp/servicenow-deployment-mcp.js +0 -0
- package/dist/mcp/servicenow-integration-mcp.js +0 -0
- package/dist/mcp/servicenow-mcp-server.js +0 -0
- package/dist/mcp/servicenow-operations-mcp.js +0 -0
- package/dist/mcp/servicenow-platform-development-mcp.js +0 -0
- package/dist/mcp/servicenow-progressive-indexer.js +0 -0
- package/dist/mcp/servicenow-reporting-analytics-mcp.js +280 -29
- package/dist/mcp/servicenow-security-compliance-mcp.js +0 -0
- package/dist/mcp/servicenow-update-set-mcp.js +0 -0
- package/dist/mcp/start-all-mcp-servers.js +0 -0
- package/dist/mcp/start-servicenow-mcp.js +0 -0
- package/dist/services/widget-deployment-service.d.ts +2 -1
- package/dist/services/widget-deployment-service.js +17 -16
- package/dist/utils/anti-mock-data-validator.d.ts +66 -0
- package/dist/utils/anti-mock-data-validator.js +316 -0
- package/dist/utils/servicenow-eventual-consistency.d.ts +120 -0
- package/dist/utils/servicenow-eventual-consistency.js +220 -0
- package/memory/agents/README.md +1 -1
- package/memory/claude-flow-data.json +1 -1
- package/memory/sessions/README.md +1 -1
- package/package.json +4 -3
- package/.mcp.json +0 -22
- package/claude-flow.config.json +0 -20
- package/dist/agents/app-creator.agent.d.ts +0 -55
- package/dist/agents/app-creator.agent.js +0 -1292
- package/dist/agents/base/base-snow-agent.d.ts +0 -75
- package/dist/agents/base/base-snow-agent.js +0 -169
- package/dist/agents/base-snow-agent.d.ts +0 -63
- package/dist/agents/base-snow-agent.js +0 -296
- package/dist/agents/coordinator.d.ts +0 -200
- package/dist/agents/coordinator.js +0 -777
- package/dist/agents/flow-builder-agent.d.ts +0 -18
- package/dist/agents/flow-builder-agent.js +0 -197
- package/dist/agents/queen-403-handler.d.ts +0 -47
- package/dist/agents/queen-403-handler.js +0 -175
- package/dist/agents/queen-agent-example.d.ts +0 -23
- package/dist/agents/queen-agent-example.js +0 -240
- package/dist/agents/queen-agent.test.d.ts +0 -6
- package/dist/agents/script-generator.agent.d.ts +0 -32
- package/dist/agents/script-generator.agent.js +0 -772
- package/dist/agents/script-writer-agent.d.ts +0 -22
- package/dist/agents/script-writer-agent.js +0 -695
- package/dist/agents/security-agent.d.ts +0 -23
- package/dist/agents/security-agent.js +0 -619
- package/dist/agents/specialists/automation-specialist.agent.d.ts +0 -44
- package/dist/agents/specialists/automation-specialist.agent.js +0 -204
- package/dist/agents/specialists/data-specialist.agent.d.ts +0 -165
- package/dist/agents/specialists/data-specialist.agent.js +0 -484
- package/dist/agents/specialists/integration-specialist.agent.d.ts +0 -227
- package/dist/agents/specialists/integration-specialist.agent.js +0 -725
- package/dist/agents/specialists/reporting-specialist.agent.d.ts +0 -54
- package/dist/agents/specialists/reporting-specialist.agent.js +0 -193
- package/dist/agents/specialists/security-specialist.agent.d.ts +0 -85
- package/dist/agents/specialists/security-specialist.agent.js +0 -309
- package/dist/agents/teams/adaptive/adaptive-coordinator.agent.d.ts +0 -111
- package/dist/agents/teams/adaptive/adaptive-coordinator.agent.js +0 -383
- package/dist/agents/teams/base-team.d.ts +0 -72
- package/dist/agents/teams/base-team.js +0 -253
- package/dist/agents/teams/team-types.d.ts +0 -265
- package/dist/agents/teams/team-types.js +0 -3
- package/dist/agents/teams/widget/widget-architect.agent.d.ts +0 -61
- package/dist/agents/teams/widget/widget-architect.agent.js +0 -436
- package/dist/agents/teams/widget/widget-backend.agent.d.ts +0 -74
- package/dist/agents/teams/widget/widget-backend.agent.js +0 -1531
- package/dist/agents/teams/widget/widget-frontend.agent.d.ts +0 -67
- package/dist/agents/teams/widget/widget-frontend.agent.js +0 -1014
- package/dist/agents/teams/widget/widget-platform.agent.d.ts +0 -90
- package/dist/agents/teams/widget/widget-platform.agent.js +0 -1190
- package/dist/agents/teams/widget/widget-uiux.agent.d.ts +0 -107
- package/dist/agents/teams/widget/widget-uiux.agent.js +0 -1033
- package/dist/agents/test-agent.d.ts +0 -26
- package/dist/agents/test-agent.js +0 -734
- package/dist/agents/test-agents.d.ts +0 -7
- package/dist/agents/test-agents.js +0 -64
- package/dist/agents/ui-builder.agent.d.ts +0 -50
- package/dist/agents/ui-builder.agent.js +0 -1539
- package/dist/agents/widget-builder.agent.d.ts +0 -32
- package/dist/agents/widget-builder.agent.js +0 -439
- package/dist/agents/widget-creator-agent.d.ts +0 -18
- package/dist/agents/widget-creator-agent.js +0 -498
- package/dist/agents/workflow-designer.agent.d.ts +0 -31
- package/dist/agents/workflow-designer.agent.js +0 -583
- package/dist/api/error-handling.d.ts +0 -325
- package/dist/api/error-handling.js +0 -1488
- package/dist/api/flow-designer-api.d.ts +0 -167
- package/dist/api/flow-designer-api.js +0 -554
- package/dist/api/natural-language-mapper.d.ts +0 -124
- package/dist/api/natural-language-mapper.js +0 -501
- package/dist/api/performance-optimizer.d.ts +0 -240
- package/dist/api/performance-optimizer.js +0 -706
- package/dist/api/transaction-manager.d.ts +0 -189
- package/dist/api/transaction-manager.js +0 -576
- package/dist/assembly/team-assembler.d.ts +0 -140
- package/dist/assembly/team-assembler.js +0 -502
- package/dist/benchmark-performance.d.ts +0 -41
- package/dist/benchmark-performance.js +0 -230
- package/dist/cli/snow-flow-cli-integration.d.ts +0 -30
- package/dist/cli/snow-flow-cli-integration.js +0 -396
- package/dist/coordination/coordination-engine.d.ts +0 -41
- package/dist/coordination/coordination-engine.js +0 -324
- package/dist/coordination/coordination.test.d.ts +0 -6
- package/dist/coordination/example.d.ts +0 -31
- package/dist/coordination/example.js +0 -394
- package/dist/coordination/execution-patterns.d.ts +0 -43
- package/dist/coordination/execution-patterns.js +0 -507
- package/dist/coordination/factory.d.ts +0 -94
- package/dist/coordination/factory.js +0 -433
- package/dist/coordination/index.d.ts +0 -71
- package/dist/coordination/index.js +0 -135
- package/dist/coordination/progress-monitor.d.ts +0 -71
- package/dist/coordination/progress-monitor.js +0 -505
- package/dist/coordination/quality-gates.d.ts +0 -124
- package/dist/coordination/quality-gates.js +0 -577
- package/dist/coordination/shared-memory.d.ts +0 -39
- package/dist/coordination/shared-memory.js +0 -289
- package/dist/coordination/task-dependencies.d.ts +0 -50
- package/dist/coordination/task-dependencies.js +0 -407
- package/dist/coordination/team-coordinator.d.ts +0 -59
- package/dist/coordination/team-coordinator.js +0 -550
- package/dist/coordination/types.d.ts +0 -152
- package/dist/coordination/types.js +0 -3
- package/dist/mcp/mcp-wrapper.d.ts +0 -8
- package/dist/mcp/mcp-wrapper.js +0 -77
- package/dist/mcp/servicenow-flow-composer-enhanced.js +0 -396
- package/dist/mcp/servicenow-flow-composer-mcp.d.ts +0 -7
- package/dist/mcp/servicenow-flow-composer-mcp.js +0 -3103
- package/dist/mcp/servicenow-graph-memory-mcp.d.ts +0 -7
- package/dist/mcp/servicenow-intelligent-mcp.d.ts +0 -143
- package/dist/mcp/servicenow-intelligent-mcp.js +0 -4156
- package/dist/mcp/servicenow-xml-flow-mcp.d.ts +0 -53
- package/dist/mcp/servicenow-xml-flow-mcp.js +0 -1704
- package/dist/mcp/singleton-check.js +0 -31
- package/dist/mcp/test-simple-mcp.d.ts +0 -6
- package/dist/mcp/test-simple-mcp.js +0 -63
- package/dist/memory/hierarchical-memory-system.d.ts +0 -90
- package/dist/memory/hierarchical-memory-system.js +0 -400
- package/dist/memory/index.d.ts +0 -9
- package/dist/memory/index.js +0 -20
- package/dist/memory/mcp-integration-example.d.ts +0 -6
- package/dist/memory/mcp-integration-example.js +0 -281
- package/dist/memory/memory-client.d.ts +0 -199
- package/dist/memory/memory-client.js +0 -364
- package/dist/memory/memory-manager.d.ts +0 -29
- package/dist/memory/memory-manager.js +0 -280
- package/dist/memory/memory-operations.d.ts +0 -179
- package/dist/memory/memory-operations.js +0 -691
- package/dist/memory/memory-system.d.ts +0 -153
- package/dist/memory/memory-system.js +0 -651
- package/dist/memory/memory-test.d.ts +0 -6
- package/dist/memory/memory-test.js +0 -161
- package/dist/memory/snow-flow-memory-patterns.d.ts +0 -213
- package/dist/memory/snow-flow-memory-patterns.js +0 -200
- package/dist/memory/snow-memory.d.ts +0 -54
- package/dist/memory/snow-memory.js +0 -301
- package/dist/memory/swarm-memory.d.ts +0 -135
- package/dist/memory/swarm-memory.js +0 -378
- package/dist/optimization/flow-performance-optimizer.js +0 -723
- package/dist/orchestration/discovery/service-discovery.d.ts +0 -81
- package/dist/orchestration/discovery/service-discovery.js +0 -808
- package/dist/orchestration/distributed-orchestrator.d.ts +0 -131
- package/dist/orchestration/distributed-orchestrator.js +0 -712
- package/dist/orchestration/distribution/task-distribution-engine.d.ts +0 -53
- package/dist/orchestration/distribution/task-distribution-engine.js +0 -586
- package/dist/orchestration/flow-update-orchestrator.js +0 -648
- package/dist/orchestration/interfaces/distributed-orchestration.interface.d.ts +0 -606
- package/dist/orchestration/interfaces/distributed-orchestration.interface.js +0 -65
- package/dist/orchestration/protocols/mcpx-protocol.d.ts +0 -71
- package/dist/orchestration/protocols/mcpx-protocol.js +0 -668
- package/dist/orchestration/state/distributed-state-manager.d.ts +0 -89
- package/dist/orchestration/state/distributed-state-manager.js +0 -716
- package/dist/orchestrator/flow-composer.d.ts +0 -105
- package/dist/orchestrator/flow-composer.js +0 -404
- package/dist/orchestrator/flow-pattern-templates.d.ts +0 -260
- package/dist/orchestrator/flow-pattern-templates.js +0 -908
- package/dist/orchestrator/flow-subflow-decision-engine.d.ts +0 -202
- package/dist/orchestrator/flow-subflow-decision-engine.js +0 -769
- package/dist/orchestrator/flow-validation-engine.d.ts +0 -169
- package/dist/orchestrator/flow-validation-engine.js +0 -913
- package/dist/orchestrator/snow-orchestrator.d.ts +0 -49
- package/dist/orchestrator/snow-orchestrator.js +0 -235
- package/dist/orchestrator/subflow-creation-handler.d.ts +0 -230
- package/dist/orchestrator/subflow-creation-handler.js +0 -791
- package/dist/patterns/adaptive-patterns.d.ts +0 -140
- package/dist/patterns/adaptive-patterns.js +0 -549
- package/dist/queen/advanced-integration-test.d.ts +0 -48
- package/dist/queen/advanced-integration-test.js +0 -473
- package/dist/queen/integration-example.d.ts +0 -82
- package/dist/queen/integration-example.js +0 -219
- package/dist/queen/integration-test.d.ts +0 -72
- package/dist/queen/integration-test.js +0 -563
- package/dist/queen/mock-mcp-client.d.ts +0 -71
- package/dist/queen/mock-mcp-client.js +0 -317
- package/dist/queen/run-integration-tests.d.ts +0 -9
- package/dist/queen/run-integration-tests.js +0 -27
- package/dist/sparc/coordinators/adaptive-coordinator.d.ts +0 -54
- package/dist/sparc/coordinators/adaptive-coordinator.js +0 -367
- package/dist/sparc/coordinators/team-coordinator.d.ts +0 -66
- package/dist/sparc/coordinators/team-coordinator.js +0 -402
- package/dist/sparc/modes/team-modes.d.ts +0 -33
- package/dist/sparc/modes/team-modes.js +0 -399
- package/dist/sparc/teams/application-team.d.ts +0 -73
- package/dist/sparc/teams/application-team.js +0 -463
- package/dist/sparc/teams/flow-team.d.ts +0 -67
- package/dist/sparc/teams/flow-team.js +0 -373
- package/dist/sparc/teams/widget-team.d.ts +0 -61
- package/dist/sparc/teams/widget-team.js +0 -280
- package/dist/specialists/app-specialists.d.ts +0 -93
- package/dist/specialists/app-specialists.js +0 -1639
- package/dist/specialists/base-specialist.d.ts +0 -19
- package/dist/specialists/base-specialist.js +0 -54
- package/dist/specialists/flow-specialists.d.ts +0 -113
- package/dist/specialists/flow-specialists.js +0 -1787
- package/dist/specialists/individual-specialists.d.ts +0 -67
- package/dist/specialists/individual-specialists.js +0 -632
- package/dist/specialists/widget-specialists.d.ts +0 -70
- package/dist/specialists/widget-specialists.js +0 -1264
- package/dist/src/utils/agent-detector.js +0 -655
- package/dist/teams/adaptive-team.d.ts +0 -81
- package/dist/teams/adaptive-team.js +0 -1153
- package/dist/teams/application-team.d.ts +0 -30
- package/dist/teams/application-team.js +0 -547
- package/dist/teams/base-team.d.ts +0 -55
- package/dist/teams/base-team.js +0 -243
- package/dist/teams/flow-team.d.ts +0 -28
- package/dist/teams/flow-team.js +0 -525
- package/dist/teams/widget-team.d.ts +0 -26
- package/dist/teams/widget-team.js +0 -459
- package/dist/templates/flow-template-system.js +0 -625
- package/dist/test-fetch-incidents.d.ts +0 -2
- package/dist/test-fetch-incidents.js +0 -84
- package/dist/test-incident-access.d.ts +0 -2
- package/dist/test-incident-access.js +0 -72
- package/dist/test-iphone-flow.js +0 -189
- package/dist/test-limit-problem.d.ts +0 -2
- package/dist/test-limit-problem.js +0 -60
- package/dist/test-ml-batch-fix.d.ts +0 -2
- package/dist/test-ml-batch-fix.js +0 -104
- package/dist/test-ml-batch.d.ts +0 -2
- package/dist/test-ml-batch.js +0 -87
- package/dist/test-ml-query.d.ts +0 -2
- package/dist/test-ml-query.js +0 -100
- package/dist/test-ml-training-fix.d.ts +0 -12
- package/dist/test-ml-training-fix.js +0 -113
- package/dist/test-ml-training.d.ts +0 -2
- package/dist/test-ml-training.js +0 -32
- package/dist/test-operations-query.d.ts +0 -2
- package/dist/test-operations-query.js +0 -84
- package/dist/test-performance-query.d.ts +0 -2
- package/dist/test-performance-query.js +0 -52
- package/dist/test-singleton-protection.d.ts +0 -8
- package/dist/test-singleton-protection.js +0 -110
- package/dist/test-smart-limits.d.ts +0 -13
- package/dist/test-smart-limits.js +0 -100
- package/dist/test-snow-query-incidents.d.ts +0 -2
- package/dist/test-snow-query-incidents.js +0 -66
- package/dist/test-universal-query.d.ts +0 -2
- package/dist/test-universal-query.js +0 -106
- package/dist/testing/flow-testing-automation.js +0 -641
- package/dist/utils/complete-flow-xml-generator.js +0 -1285
- package/dist/utils/file-storage-fallback.d.ts +0 -62
- package/dist/utils/file-storage-fallback.js +0 -289
- package/dist/utils/flow-api-discovery.d.ts +0 -151
- package/dist/utils/flow-api-discovery.js +0 -439
- package/dist/utils/flow-examples.js +0 -720
- package/dist/utils/flow-structure-builder.js +0 -677
- package/dist/utils/flow-xml-generator.d.ts +0 -41
- package/dist/utils/flow-xml-generator.js +0 -258
- package/dist/utils/improved-flow-xml-generator.js +0 -820
- package/dist/utils/mcp-process-manager.backup.d.ts +0 -58
- package/dist/utils/mcp-process-manager.backup.js +0 -220
- package/dist/utils/mcp-singleton-enforcer.d.ts +0 -36
- package/dist/utils/mcp-singleton-enforcer.js +0 -201
- package/dist/utils/mcp-timeout-fix.d.ts +0 -53
- package/dist/utils/mcp-timeout-fix.js +0 -221
- package/dist/utils/migrate-claude-flow.d.ts +0 -22
- package/dist/utils/migrate-claude-flow.js +0 -120
- package/dist/utils/scope-utils.d.ts +0 -72
- package/dist/utils/scope-utils.js +0 -386
- package/dist/utils/snow-oauth-old.d.ts +0 -65
- package/dist/utils/snow-oauth-old.js +0 -345
- package/dist/utils/xml-first-flow-generator.js +0 -513
- package/memory/servicenow_artifacts/000d9224c895221055906c7518aa2d3d.json +0 -30
- package/memory/servicenow_artifacts/0196b66173303010e46b4a2214f6a7a2.json +0 -36
- package/memory/servicenow_artifacts/125e5d1d837e2a102a7ea130ceaad397.json +0 -30
- package/memory/servicenow_artifacts/7637c1f2b7112210a5e5911cde11a972.json +0 -30
- package/memory/servicenow_artifacts/default_documentation_tables_1754056582292.json +0 -55
- package/memory/servicenow_artifacts/default_documentation_tables_1754057477189.json +0 -55
- package/memory/update-set-sessions/01f82af583faea102a7ea130ceaad3d4.json +0 -9
- package/memory/update-set-sessions/27718fb983faea102a7ea130ceaad34b.json +0 -9
- package/memory/update-set-sessions/412e9bf6833e22502a7ea130ceaad30a.json +0 -8
- package/memory/update-set-sessions/66fc5a79837aea102a7ea130ceaad3ab.json +0 -9
- package/memory/update-set-sessions/71a30ff5837eea102a7ea130ceaad37f.json +0 -9
- package/memory/update-set-sessions/74fba27983faea102a7ea130ceaad3bd.json +0 -9
- package/memory/update-set-sessions/a0b147b5837eea102a7ea130ceaad344.json +0 -58
- package/memory/update-set-sessions/b13f5eb983baea102a7ea130ceaad33e.json +0 -9
- package/reports/swarm-auto-centralized-1752649029776.json +0 -13
- package/src/memory/README.md +0 -240
|
@@ -1,463 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Application Development Team
|
|
4
|
-
* Specialized team for complete ServiceNow application development
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.ApplicationTeam = void 0;
|
|
8
|
-
const team_modes_js_1 = require("../modes/team-modes.js");
|
|
9
|
-
class ApplicationTeam {
|
|
10
|
-
constructor() {
|
|
11
|
-
this.members = [];
|
|
12
|
-
this.teamMode = (0, team_modes_js_1.getTeamMode)('application');
|
|
13
|
-
this.initializeTeam();
|
|
14
|
-
}
|
|
15
|
-
initializeTeam() {
|
|
16
|
-
this.members = [
|
|
17
|
-
{
|
|
18
|
-
role: 'database',
|
|
19
|
-
name: 'DatabaseSpecialistAgent',
|
|
20
|
-
capabilities: [
|
|
21
|
-
'Database schema design',
|
|
22
|
-
'Table relationship modeling',
|
|
23
|
-
'Query optimization',
|
|
24
|
-
'Index strategy',
|
|
25
|
-
'Data migration planning',
|
|
26
|
-
'Performance tuning',
|
|
27
|
-
'Data integrity rules'
|
|
28
|
-
],
|
|
29
|
-
workload: 0,
|
|
30
|
-
status: 'available'
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
role: 'logic',
|
|
34
|
-
name: 'LogicSpecialistAgent',
|
|
35
|
-
capabilities: [
|
|
36
|
-
'Business rule implementation',
|
|
37
|
-
'Complex calculations',
|
|
38
|
-
'Automation scripts',
|
|
39
|
-
'Validation logic',
|
|
40
|
-
'Workflow automation',
|
|
41
|
-
'Integration logic',
|
|
42
|
-
'Performance optimization'
|
|
43
|
-
],
|
|
44
|
-
workload: 0,
|
|
45
|
-
status: 'available'
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
role: 'interface',
|
|
49
|
-
name: 'InterfaceSpecialistAgent',
|
|
50
|
-
capabilities: [
|
|
51
|
-
'Form design and layout',
|
|
52
|
-
'List configuration',
|
|
53
|
-
'UI actions and buttons',
|
|
54
|
-
'User interaction flows',
|
|
55
|
-
'Mobile interface design',
|
|
56
|
-
'Accessibility compliance',
|
|
57
|
-
'Performance optimization'
|
|
58
|
-
],
|
|
59
|
-
workload: 0,
|
|
60
|
-
status: 'available'
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
role: 'security',
|
|
64
|
-
name: 'SecuritySpecialistAgent',
|
|
65
|
-
capabilities: [
|
|
66
|
-
'Security architecture design',
|
|
67
|
-
'Access control implementation',
|
|
68
|
-
'Role-based permissions',
|
|
69
|
-
'Compliance requirements',
|
|
70
|
-
'Security audit and review',
|
|
71
|
-
'Threat assessment',
|
|
72
|
-
'Security best practices'
|
|
73
|
-
],
|
|
74
|
-
workload: 0,
|
|
75
|
-
status: 'available'
|
|
76
|
-
}
|
|
77
|
-
];
|
|
78
|
-
}
|
|
79
|
-
createProjectPlan(task, analysis) {
|
|
80
|
-
console.log('🏗️ Creating Application Development Project Plan...');
|
|
81
|
-
const applicationType = this.determineApplicationType(task);
|
|
82
|
-
const complexity = this.assessApplicationComplexity(task, analysis);
|
|
83
|
-
const dataModel = this.designDataModel(task, applicationType);
|
|
84
|
-
const modules = this.identifyModules(task, applicationType);
|
|
85
|
-
const phases = this.generateProjectPhases(task, applicationType, complexity);
|
|
86
|
-
const deliverables = this.generateDeliverables(task, applicationType, complexity);
|
|
87
|
-
this.currentProject = {
|
|
88
|
-
projectName: `Application Development: ${this.extractApplicationName(task)}`,
|
|
89
|
-
description: task,
|
|
90
|
-
applicationType,
|
|
91
|
-
phases,
|
|
92
|
-
estimatedDuration: this.calculateDuration(complexity, phases),
|
|
93
|
-
complexity,
|
|
94
|
-
dependencies: this.identifyDependencies(task, applicationType),
|
|
95
|
-
deliverables,
|
|
96
|
-
modules,
|
|
97
|
-
dataModel
|
|
98
|
-
};
|
|
99
|
-
console.log(`📋 Project Plan Created:`);
|
|
100
|
-
console.log(` Application Name: ${this.extractApplicationName(task)}`);
|
|
101
|
-
console.log(` Application Type: ${applicationType}`);
|
|
102
|
-
console.log(` Complexity: ${complexity}`);
|
|
103
|
-
console.log(` Estimated Duration: ${this.currentProject.estimatedDuration}`);
|
|
104
|
-
console.log(` Modules: ${modules.length}`);
|
|
105
|
-
console.log(` Tables: ${dataModel.tables.length}`);
|
|
106
|
-
console.log(` Phases: ${phases.length}`);
|
|
107
|
-
console.log(` Deliverables: ${deliverables.length}\n`);
|
|
108
|
-
return this.currentProject;
|
|
109
|
-
}
|
|
110
|
-
determineApplicationType(task) {
|
|
111
|
-
const taskLower = task.toLowerCase();
|
|
112
|
-
if (taskLower.includes('itsm') || taskLower.includes('incident') || taskLower.includes('service desk')) {
|
|
113
|
-
return 'itsm';
|
|
114
|
-
}
|
|
115
|
-
if (taskLower.includes('hr') || taskLower.includes('human resource') || taskLower.includes('employee')) {
|
|
116
|
-
return 'hrsd';
|
|
117
|
-
}
|
|
118
|
-
if (taskLower.includes('asset') || taskLower.includes('inventory') || taskLower.includes('equipment')) {
|
|
119
|
-
return 'asset_management';
|
|
120
|
-
}
|
|
121
|
-
if (taskLower.includes('project') || taskLower.includes('task management') || taskLower.includes('portfolio')) {
|
|
122
|
-
return 'project_management';
|
|
123
|
-
}
|
|
124
|
-
if (taskLower.includes('vendor') || taskLower.includes('supplier') || taskLower.includes('procurement')) {
|
|
125
|
-
return 'vendor_management';
|
|
126
|
-
}
|
|
127
|
-
return 'custom'; // Default
|
|
128
|
-
}
|
|
129
|
-
assessApplicationComplexity(task, analysis) {
|
|
130
|
-
const complexityIndicators = {
|
|
131
|
-
simple: ['basic', 'simple', 'single module', 'small', 'prototype'],
|
|
132
|
-
medium: ['multiple modules', 'moderate', 'department', 'team'],
|
|
133
|
-
complex: ['integration', 'multiple systems', 'advanced', 'organization', 'company'],
|
|
134
|
-
enterprise: ['enterprise', 'global', 'multi-tenant', 'large scale', 'corporation']
|
|
135
|
-
};
|
|
136
|
-
const taskLower = task.toLowerCase();
|
|
137
|
-
const wordCount = task.split(/\s+/).length;
|
|
138
|
-
const artifactCount = analysis.serviceNowArtifacts.length;
|
|
139
|
-
if (complexityIndicators.enterprise.some(indicator => taskLower.includes(indicator)) ||
|
|
140
|
-
wordCount > 30 || artifactCount > 5) {
|
|
141
|
-
return 'enterprise';
|
|
142
|
-
}
|
|
143
|
-
if (complexityIndicators.complex.some(indicator => taskLower.includes(indicator)) ||
|
|
144
|
-
wordCount > 20 || artifactCount > 3) {
|
|
145
|
-
return 'complex';
|
|
146
|
-
}
|
|
147
|
-
if (complexityIndicators.medium.some(indicator => taskLower.includes(indicator)) ||
|
|
148
|
-
wordCount > 15 || artifactCount > 2) {
|
|
149
|
-
return 'medium';
|
|
150
|
-
}
|
|
151
|
-
return 'simple';
|
|
152
|
-
}
|
|
153
|
-
designDataModel(task, applicationType) {
|
|
154
|
-
const taskLower = task.toLowerCase();
|
|
155
|
-
let tables = [];
|
|
156
|
-
let relationships = [];
|
|
157
|
-
let customFields = 0;
|
|
158
|
-
let estimatedRecords = '1K-10K';
|
|
159
|
-
switch (applicationType) {
|
|
160
|
-
case 'itsm':
|
|
161
|
-
tables = ['incident', 'problem', 'change_request', 'knowledge_base'];
|
|
162
|
-
relationships = ['incident_to_problem', 'problem_to_change', 'incident_to_kb'];
|
|
163
|
-
customFields = 10;
|
|
164
|
-
estimatedRecords = '10K-100K';
|
|
165
|
-
break;
|
|
166
|
-
case 'asset_management':
|
|
167
|
-
tables = ['asset', 'asset_category', 'location', 'asset_assignment'];
|
|
168
|
-
relationships = ['asset_to_category', 'asset_to_location', 'asset_to_user'];
|
|
169
|
-
customFields = 15;
|
|
170
|
-
estimatedRecords = '5K-50K';
|
|
171
|
-
break;
|
|
172
|
-
case 'project_management':
|
|
173
|
-
tables = ['project', 'task', 'milestone', 'resource'];
|
|
174
|
-
relationships = ['project_to_task', 'task_to_milestone', 'project_to_resource'];
|
|
175
|
-
customFields = 12;
|
|
176
|
-
estimatedRecords = '1K-20K';
|
|
177
|
-
break;
|
|
178
|
-
case 'vendor_management':
|
|
179
|
-
tables = ['vendor', 'contract', 'purchase_order', 'invoice'];
|
|
180
|
-
relationships = ['vendor_to_contract', 'contract_to_po', 'po_to_invoice'];
|
|
181
|
-
customFields = 20;
|
|
182
|
-
estimatedRecords = '2K-25K';
|
|
183
|
-
break;
|
|
184
|
-
default:
|
|
185
|
-
// Extract tables from task description
|
|
186
|
-
if (taskLower.includes('user') || taskLower.includes('employee'))
|
|
187
|
-
tables.push('user');
|
|
188
|
-
if (taskLower.includes('request') || taskLower.includes('order'))
|
|
189
|
-
tables.push('request');
|
|
190
|
-
if (taskLower.includes('approval'))
|
|
191
|
-
tables.push('approval');
|
|
192
|
-
if (taskLower.includes('task'))
|
|
193
|
-
tables.push('task');
|
|
194
|
-
if (tables.length === 0)
|
|
195
|
-
tables = ['main_entity'];
|
|
196
|
-
customFields = Math.max(5, tables.length * 3);
|
|
197
|
-
estimatedRecords = '1K-10K';
|
|
198
|
-
}
|
|
199
|
-
return {
|
|
200
|
-
tables,
|
|
201
|
-
relationships,
|
|
202
|
-
customFields,
|
|
203
|
-
estimatedRecords
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
identifyModules(task, applicationType) {
|
|
207
|
-
const modules = [];
|
|
208
|
-
const taskLower = task.toLowerCase();
|
|
209
|
-
switch (applicationType) {
|
|
210
|
-
case 'itsm':
|
|
211
|
-
modules.push('Incident Management', 'Problem Management', 'Change Management', 'Knowledge Management');
|
|
212
|
-
break;
|
|
213
|
-
case 'asset_management':
|
|
214
|
-
modules.push('Asset Tracking', 'Inventory Management', 'Asset Lifecycle', 'Reporting');
|
|
215
|
-
break;
|
|
216
|
-
case 'project_management':
|
|
217
|
-
modules.push('Project Planning', 'Task Management', 'Resource Allocation', 'Progress Tracking');
|
|
218
|
-
break;
|
|
219
|
-
case 'vendor_management':
|
|
220
|
-
modules.push('Vendor Registry', 'Contract Management', 'Purchase Orders', 'Invoice Processing');
|
|
221
|
-
break;
|
|
222
|
-
default:
|
|
223
|
-
if (taskLower.includes('management'))
|
|
224
|
-
modules.push('Core Management');
|
|
225
|
-
if (taskLower.includes('report'))
|
|
226
|
-
modules.push('Reporting');
|
|
227
|
-
if (taskLower.includes('approval'))
|
|
228
|
-
modules.push('Approval Workflow');
|
|
229
|
-
if (taskLower.includes('notification'))
|
|
230
|
-
modules.push('Notifications');
|
|
231
|
-
if (modules.length === 0)
|
|
232
|
-
modules.push('Core Functionality');
|
|
233
|
-
}
|
|
234
|
-
return modules;
|
|
235
|
-
}
|
|
236
|
-
generateProjectPhases(task, applicationType, complexity) {
|
|
237
|
-
const durationMultiplier = {
|
|
238
|
-
simple: 1,
|
|
239
|
-
medium: 1.5,
|
|
240
|
-
complex: 2.5,
|
|
241
|
-
enterprise: 4
|
|
242
|
-
}[complexity];
|
|
243
|
-
const basePhases = [
|
|
244
|
-
{
|
|
245
|
-
name: 'Requirements & Architecture',
|
|
246
|
-
description: 'Gather requirements and design application architecture',
|
|
247
|
-
duration: `${Math.round(4 * durationMultiplier)}hours`,
|
|
248
|
-
dependencies: [],
|
|
249
|
-
assignedTo: ['DatabaseSpecialistAgent', 'LogicSpecialistAgent', 'SecuritySpecialistAgent'],
|
|
250
|
-
deliverables: ['requirements_doc', 'architecture_design', 'data_model'],
|
|
251
|
-
milestones: ['Requirements approved', 'Architecture approved']
|
|
252
|
-
},
|
|
253
|
-
{
|
|
254
|
-
name: 'Database Design',
|
|
255
|
-
description: 'Design and create database schema and relationships',
|
|
256
|
-
duration: `${Math.round(6 * durationMultiplier)}hours`,
|
|
257
|
-
dependencies: ['Requirements & Architecture'],
|
|
258
|
-
assignedTo: ['DatabaseSpecialistAgent'],
|
|
259
|
-
deliverables: ['database_schema', 'table_definitions', 'relationships'],
|
|
260
|
-
milestones: ['Schema design complete', 'Tables created']
|
|
261
|
-
},
|
|
262
|
-
{
|
|
263
|
-
name: 'Business Logic Implementation',
|
|
264
|
-
description: 'Implement business rules, calculations, and automation',
|
|
265
|
-
duration: `${Math.round(8 * durationMultiplier)}hours`,
|
|
266
|
-
dependencies: ['Database Design'],
|
|
267
|
-
assignedTo: ['LogicSpecialistAgent'],
|
|
268
|
-
deliverables: ['business_rules', 'calculations', 'automation_scripts'],
|
|
269
|
-
milestones: ['Core logic implemented', 'Validation rules complete']
|
|
270
|
-
},
|
|
271
|
-
{
|
|
272
|
-
name: 'User Interface Development',
|
|
273
|
-
description: 'Design and implement user interfaces and interactions',
|
|
274
|
-
duration: `${Math.round(6 * durationMultiplier)}hours`,
|
|
275
|
-
dependencies: ['Database Design'],
|
|
276
|
-
assignedTo: ['InterfaceSpecialistAgent'],
|
|
277
|
-
deliverables: ['forms', 'lists', 'ui_actions', 'navigation'],
|
|
278
|
-
milestones: ['Forms complete', 'Navigation implemented']
|
|
279
|
-
},
|
|
280
|
-
{
|
|
281
|
-
name: 'Security Implementation',
|
|
282
|
-
description: 'Implement security controls and access management',
|
|
283
|
-
duration: `${Math.round(4 * durationMultiplier)}hours`,
|
|
284
|
-
dependencies: ['Database Design', 'Business Logic Implementation'],
|
|
285
|
-
assignedTo: ['SecuritySpecialistAgent'],
|
|
286
|
-
deliverables: ['security_model', 'access_controls', 'roles_permissions'],
|
|
287
|
-
milestones: ['Security configured', 'Access controls tested']
|
|
288
|
-
},
|
|
289
|
-
{
|
|
290
|
-
name: 'Integration & Testing',
|
|
291
|
-
description: 'Integrate components and perform comprehensive testing',
|
|
292
|
-
duration: `${Math.round(6 * durationMultiplier)}hours`,
|
|
293
|
-
dependencies: ['Business Logic Implementation', 'User Interface Development', 'Security Implementation'],
|
|
294
|
-
assignedTo: ['DatabaseSpecialistAgent', 'LogicSpecialistAgent', 'InterfaceSpecialistAgent'],
|
|
295
|
-
deliverables: ['integration_tests', 'user_acceptance_tests', 'performance_tests'],
|
|
296
|
-
milestones: ['Integration complete', 'All tests passed']
|
|
297
|
-
}
|
|
298
|
-
];
|
|
299
|
-
// Add additional phases for complex applications
|
|
300
|
-
if (complexity === 'complex' || complexity === 'enterprise') {
|
|
301
|
-
basePhases.push({
|
|
302
|
-
name: 'Workflow Integration',
|
|
303
|
-
description: 'Integrate with workflows and external systems',
|
|
304
|
-
duration: `${Math.round(4 * durationMultiplier)}hours`,
|
|
305
|
-
dependencies: ['Integration & Testing'],
|
|
306
|
-
assignedTo: ['LogicSpecialistAgent', 'SecuritySpecialistAgent'],
|
|
307
|
-
deliverables: ['workflow_integration', 'external_apis', 'data_sync'],
|
|
308
|
-
milestones: ['Workflows integrated', 'External integration complete']
|
|
309
|
-
});
|
|
310
|
-
}
|
|
311
|
-
if (complexity === 'enterprise') {
|
|
312
|
-
basePhases.push({
|
|
313
|
-
name: 'Performance Optimization',
|
|
314
|
-
description: 'Optimize performance and scalability for enterprise use',
|
|
315
|
-
duration: `${Math.round(6 * durationMultiplier)}hours`,
|
|
316
|
-
dependencies: ['Workflow Integration'],
|
|
317
|
-
assignedTo: ['DatabaseSpecialistAgent', 'LogicSpecialistAgent'],
|
|
318
|
-
deliverables: ['performance_optimization', 'caching_strategy', 'monitoring_setup'],
|
|
319
|
-
milestones: ['Performance targets met', 'Monitoring active']
|
|
320
|
-
});
|
|
321
|
-
}
|
|
322
|
-
return basePhases;
|
|
323
|
-
}
|
|
324
|
-
generateDeliverables(task, applicationType, complexity) {
|
|
325
|
-
const deliverables = [
|
|
326
|
-
{
|
|
327
|
-
type: 'database_schema',
|
|
328
|
-
content: '',
|
|
329
|
-
owner: 'DatabaseSpecialistAgent',
|
|
330
|
-
dependencies: [],
|
|
331
|
-
status: 'pending'
|
|
332
|
-
},
|
|
333
|
-
{
|
|
334
|
-
type: 'business_logic',
|
|
335
|
-
content: '',
|
|
336
|
-
owner: 'LogicSpecialistAgent',
|
|
337
|
-
dependencies: ['database_schema'],
|
|
338
|
-
status: 'pending'
|
|
339
|
-
},
|
|
340
|
-
{
|
|
341
|
-
type: 'user_interface',
|
|
342
|
-
content: '',
|
|
343
|
-
owner: 'InterfaceSpecialistAgent',
|
|
344
|
-
dependencies: ['database_schema'],
|
|
345
|
-
status: 'pending'
|
|
346
|
-
},
|
|
347
|
-
{
|
|
348
|
-
type: 'security_model',
|
|
349
|
-
content: '',
|
|
350
|
-
owner: 'SecuritySpecialistAgent',
|
|
351
|
-
dependencies: ['database_schema', 'business_logic'],
|
|
352
|
-
status: 'pending'
|
|
353
|
-
}
|
|
354
|
-
];
|
|
355
|
-
// Add workflows for medium and above
|
|
356
|
-
if (complexity !== 'simple') {
|
|
357
|
-
deliverables.push({
|
|
358
|
-
type: 'workflows',
|
|
359
|
-
content: '',
|
|
360
|
-
owner: 'LogicSpecialistAgent',
|
|
361
|
-
dependencies: ['business_logic', 'security_model'],
|
|
362
|
-
status: 'pending'
|
|
363
|
-
});
|
|
364
|
-
}
|
|
365
|
-
// Add reports for complex and above
|
|
366
|
-
if (complexity === 'complex' || complexity === 'enterprise') {
|
|
367
|
-
deliverables.push({
|
|
368
|
-
type: 'reports',
|
|
369
|
-
content: '',
|
|
370
|
-
owner: 'DatabaseSpecialistAgent',
|
|
371
|
-
dependencies: ['database_schema', 'business_logic'],
|
|
372
|
-
status: 'pending'
|
|
373
|
-
});
|
|
374
|
-
}
|
|
375
|
-
// Add comprehensive documentation for all
|
|
376
|
-
deliverables.push({
|
|
377
|
-
type: 'documentation',
|
|
378
|
-
content: '',
|
|
379
|
-
owner: 'InterfaceSpecialistAgent',
|
|
380
|
-
dependencies: ['database_schema', 'business_logic', 'user_interface', 'security_model'],
|
|
381
|
-
status: 'pending'
|
|
382
|
-
});
|
|
383
|
-
// Add deployment guide for complex applications
|
|
384
|
-
if (complexity === 'complex' || complexity === 'enterprise') {
|
|
385
|
-
deliverables.push({
|
|
386
|
-
type: 'deployment_guide',
|
|
387
|
-
content: '',
|
|
388
|
-
owner: 'SecuritySpecialistAgent',
|
|
389
|
-
dependencies: ['documentation'],
|
|
390
|
-
status: 'pending'
|
|
391
|
-
});
|
|
392
|
-
}
|
|
393
|
-
return deliverables;
|
|
394
|
-
}
|
|
395
|
-
extractApplicationName(task) {
|
|
396
|
-
const patterns = [
|
|
397
|
-
/create\s+(.+?)\s+application/i,
|
|
398
|
-
/build\s+(.+?)\s+(system|app|application)/i,
|
|
399
|
-
/develop\s+(.+?)\s+(system|solution)/i,
|
|
400
|
-
/(.+?)\s+(management|system|application)/i
|
|
401
|
-
];
|
|
402
|
-
for (const pattern of patterns) {
|
|
403
|
-
const match = task.match(pattern);
|
|
404
|
-
if (match && match[1]) {
|
|
405
|
-
return match[1].trim().replace(/\s+/g, '_').toLowerCase();
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
return 'custom_application';
|
|
409
|
-
}
|
|
410
|
-
calculateDuration(complexity, phases) {
|
|
411
|
-
const durationMap = {
|
|
412
|
-
simple: '1-2 days',
|
|
413
|
-
medium: '3-5 days',
|
|
414
|
-
complex: '1-2 weeks',
|
|
415
|
-
enterprise: '2-4 weeks'
|
|
416
|
-
};
|
|
417
|
-
return durationMap[complexity];
|
|
418
|
-
}
|
|
419
|
-
identifyDependencies(task, applicationType) {
|
|
420
|
-
const dependencies = ['ServiceNow Platform', 'Application Studio'];
|
|
421
|
-
const taskLower = task.toLowerCase();
|
|
422
|
-
if (applicationType === 'itsm') {
|
|
423
|
-
dependencies.push('ITIL Process Templates', 'Service Management');
|
|
424
|
-
}
|
|
425
|
-
if (applicationType === 'hrsd') {
|
|
426
|
-
dependencies.push('HR Service Delivery', 'Employee Center');
|
|
427
|
-
}
|
|
428
|
-
if (taskLower.includes('integration') || taskLower.includes('api')) {
|
|
429
|
-
dependencies.push('IntegrationHub', 'REST API framework');
|
|
430
|
-
}
|
|
431
|
-
if (taskLower.includes('mobile')) {
|
|
432
|
-
dependencies.push('ServiceNow Mobile Platform');
|
|
433
|
-
}
|
|
434
|
-
if (taskLower.includes('analytics') || taskLower.includes('dashboard')) {
|
|
435
|
-
dependencies.push('Performance Analytics', 'Reporting Framework');
|
|
436
|
-
}
|
|
437
|
-
return dependencies;
|
|
438
|
-
}
|
|
439
|
-
getTeamStatus() {
|
|
440
|
-
const available = this.members.filter(m => m.status === 'available').length;
|
|
441
|
-
const busy = this.members.filter(m => m.status === 'busy').length;
|
|
442
|
-
const total = this.members.length;
|
|
443
|
-
return { available, busy, total };
|
|
444
|
-
}
|
|
445
|
-
assignTask(memberRole, deliverable) {
|
|
446
|
-
const member = this.members.find(m => m.role === memberRole && m.status === 'available');
|
|
447
|
-
if (member) {
|
|
448
|
-
member.status = 'busy';
|
|
449
|
-
member.workload++;
|
|
450
|
-
console.log(`📌 Assigned ${deliverable} to ${member.name}`);
|
|
451
|
-
return true;
|
|
452
|
-
}
|
|
453
|
-
return false;
|
|
454
|
-
}
|
|
455
|
-
getProjectStatus() {
|
|
456
|
-
return this.currentProject;
|
|
457
|
-
}
|
|
458
|
-
getTeamCapabilities() {
|
|
459
|
-
return this.teamMode?.capabilities || [];
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
exports.ApplicationTeam = ApplicationTeam;
|
|
463
|
-
//# sourceMappingURL=application-team.js.map
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Flow Development Team
|
|
3
|
-
* Specialized team for ServiceNow Flow Designer workflows
|
|
4
|
-
*/
|
|
5
|
-
import { TaskAnalysis } from '../../utils/agent-detector.js';
|
|
6
|
-
export interface FlowTeamMember {
|
|
7
|
-
role: 'process' | 'trigger' | 'data' | 'security';
|
|
8
|
-
name: string;
|
|
9
|
-
capabilities: string[];
|
|
10
|
-
workload: number;
|
|
11
|
-
status: 'available' | 'busy' | 'offline';
|
|
12
|
-
}
|
|
13
|
-
export interface FlowDeliverable {
|
|
14
|
-
type: 'flow_design' | 'trigger_config' | 'approval_chain' | 'data_mapping' | 'security_rules' | 'testing_plan' | 'documentation';
|
|
15
|
-
content: string;
|
|
16
|
-
owner: string;
|
|
17
|
-
dependencies: string[];
|
|
18
|
-
status: 'pending' | 'in_progress' | 'completed' | 'review';
|
|
19
|
-
quality_score?: number;
|
|
20
|
-
}
|
|
21
|
-
export interface FlowProjectPlan {
|
|
22
|
-
projectName: string;
|
|
23
|
-
description: string;
|
|
24
|
-
flowType: 'approval' | 'automation' | 'integration' | 'notification' | 'fulfillment';
|
|
25
|
-
phases: FlowPhase[];
|
|
26
|
-
estimatedDuration: string;
|
|
27
|
-
complexity: 'simple' | 'medium' | 'complex';
|
|
28
|
-
dependencies: string[];
|
|
29
|
-
deliverables: FlowDeliverable[];
|
|
30
|
-
triggerEvents: string[];
|
|
31
|
-
approvalLevels: number;
|
|
32
|
-
}
|
|
33
|
-
export interface FlowPhase {
|
|
34
|
-
name: string;
|
|
35
|
-
description: string;
|
|
36
|
-
duration: string;
|
|
37
|
-
dependencies: string[];
|
|
38
|
-
assignedTo: string[];
|
|
39
|
-
deliverables: string[];
|
|
40
|
-
milestones: string[];
|
|
41
|
-
}
|
|
42
|
-
export declare class FlowTeam {
|
|
43
|
-
private members;
|
|
44
|
-
private currentProject?;
|
|
45
|
-
private teamMode;
|
|
46
|
-
constructor();
|
|
47
|
-
private initializeTeam;
|
|
48
|
-
createProjectPlan(task: string, analysis: TaskAnalysis): FlowProjectPlan;
|
|
49
|
-
private determineFlowType;
|
|
50
|
-
private assessFlowComplexity;
|
|
51
|
-
private generateProjectPhases;
|
|
52
|
-
private generateDeliverables;
|
|
53
|
-
private extractFlowName;
|
|
54
|
-
private identifyTriggerEvents;
|
|
55
|
-
private calculateApprovalLevels;
|
|
56
|
-
private calculateDuration;
|
|
57
|
-
private identifyDependencies;
|
|
58
|
-
getTeamStatus(): {
|
|
59
|
-
available: number;
|
|
60
|
-
busy: number;
|
|
61
|
-
total: number;
|
|
62
|
-
};
|
|
63
|
-
assignTask(memberRole: FlowTeamMember['role'], deliverable: string): boolean;
|
|
64
|
-
getProjectStatus(): FlowProjectPlan | undefined;
|
|
65
|
-
getTeamCapabilities(): string[];
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=flow-team.d.ts.map
|