snow-flow 2.10.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.mcp.json +13 -141
- package/.mcp.json.template +11 -25
- package/README.md +18 -0
- package/claude-flow +81 -0
- package/claude-flow.bat +18 -0
- package/claude-flow.config.json +20 -0
- package/claude-flow.ps1 +24 -0
- package/dist/agents/index.d.ts +3 -10
- package/dist/agents/index.js +10 -50
- package/dist/agents/queen-agent.d.ts +0 -2
- package/dist/agents/queen-agent.js +25 -42
- package/dist/cli.js +1 -1
- package/dist/mcp/servicenow-automation-mcp.js +10 -10
- package/dist/mcp/servicenow-deployment-mcp.js +1050 -169
- package/dist/mcp/servicenow-development-assistant-mcp.js +13 -65
- package/dist/mcp/servicenow-integration-mcp.js +10 -10
- package/dist/mcp/servicenow-machine-learning-mcp.js +15 -15
- package/dist/mcp/servicenow-operations-mcp.js +23 -23
- package/dist/mcp/servicenow-platform-development-mcp.js +9 -9
- package/dist/mcp/servicenow-reporting-analytics-mcp.js +11 -11
- package/dist/mcp/servicenow-security-compliance-mcp.js +11 -11
- package/dist/mcp/servicenow-update-set-mcp.js +9 -9
- package/dist/mcp/shared/reliable-memory-manager.d.ts +78 -0
- package/dist/mcp/shared/reliable-memory-manager.js +268 -0
- package/dist/mcp/snow-flow-mcp.js +341 -87
- package/dist/queen/agent-factory.d.ts +4 -2
- package/dist/queen/agent-factory.js +72 -25
- package/dist/services/tensorflow-ml-service.d.ts +105 -0
- package/dist/services/tensorflow-ml-service.js +456 -0
- package/dist/services/widget-deployment-service.d.ts +107 -0
- package/dist/services/widget-deployment-service.js +332 -0
- package/dist/utils/file-storage-fallback.d.ts +62 -0
- package/dist/utils/file-storage-fallback.js +289 -0
- package/dist/utils/mcp-server-manager.js +4 -7
- package/dist/utils/mcp-singleton-enforcer.d.ts +7 -1
- package/dist/utils/mcp-singleton-enforcer.js +28 -4
- package/dist/utils/mcp-timeout-fix.d.ts +10 -1
- package/dist/utils/mcp-timeout-fix.js +80 -6
- package/memory/agents/README.md +31 -0
- package/memory/claude-flow-data.json +1 -1
- package/memory/sessions/README.md +1 -1
- package/package.json +4 -2
- package/src/agents/README.md +192 -0
- package/src/health/README.md +161 -0
- package/src/memory/README.md +240 -0
- package/src/queen/README.md +403 -0
- package/src/schemas/deployment.schema.json +58 -0
- package/src/schemas/flow.schema.json +79 -0
- package/src/schemas/widget.schema.json +72 -0
- package/src/templates/base/application.template.json +45 -0
- package/src/templates/base/business_rule.template.json +33 -0
- package/src/templates/base/script_include.template.json +18 -0
- package/src/templates/base/table.template.json +64 -0
- package/src/templates/base/widget.template.json +25 -0
- package/src/templates/patterns/composite.incident-management.template.json +140 -0
- package/src/templates/patterns/widget.dashboard.template.json +238 -0
- package/src/templates/patterns/widget.datatable.template.json +292 -0
- package/dist/mcp/servicenow-graph-memory-mcp.js +0 -728
- package/servicenow/widgets/openai_incident_classifier/client_controller.js +0 -284
- package/servicenow/widgets/openai_incident_classifier/server_script.js +0 -314
- package/servicenow/widgets/openai_incident_classifier/style.css +0 -354
- package/servicenow/widgets/openai_incident_classifier/template.html +0 -167
- package/servicenow/widgets/openai_incident_classifier/widget.json +0 -86
- package/test-ml-improvements.sh +0 -76
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Reliable Memory Manager
|
|
4
|
+
* Direct in-memory storage without database dependencies
|
|
5
|
+
* Solves hanging issues with better-sqlite3
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.reliableMemory = exports.ReliableMemoryManager = void 0;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const logger_js_1 = require("../../utils/logger.js");
|
|
45
|
+
class ReliableMemoryManager {
|
|
46
|
+
constructor() {
|
|
47
|
+
this.memory = new Map();
|
|
48
|
+
this.MAX_MEMORY_MB = 100; // 100MB max memory usage
|
|
49
|
+
this.persistTimer = null;
|
|
50
|
+
this.logger = new logger_js_1.Logger('ReliableMemoryManager');
|
|
51
|
+
// Persistence file for recovery
|
|
52
|
+
const memoryDir = path.join(process.cwd(), '.snow-flow', 'memory');
|
|
53
|
+
if (!fs.existsSync(memoryDir)) {
|
|
54
|
+
fs.mkdirSync(memoryDir, { recursive: true });
|
|
55
|
+
}
|
|
56
|
+
this.PERSIST_FILE = path.join(memoryDir, 'memory-snapshot.json');
|
|
57
|
+
// Load previous memory if exists
|
|
58
|
+
this.loadFromDisk();
|
|
59
|
+
// Auto-persist every 30 seconds
|
|
60
|
+
this.startAutoPersist();
|
|
61
|
+
}
|
|
62
|
+
static getInstance() {
|
|
63
|
+
if (!ReliableMemoryManager.instance) {
|
|
64
|
+
ReliableMemoryManager.instance = new ReliableMemoryManager();
|
|
65
|
+
}
|
|
66
|
+
return ReliableMemoryManager.instance;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Store value in memory with size checking
|
|
70
|
+
*/
|
|
71
|
+
async store(key, value, expiresInMs) {
|
|
72
|
+
const serialized = JSON.stringify(value);
|
|
73
|
+
const sizeBytes = Buffer.byteLength(serialized);
|
|
74
|
+
// Check total memory usage
|
|
75
|
+
const currentUsage = this.getMemoryUsageBytes();
|
|
76
|
+
const newUsage = currentUsage + sizeBytes;
|
|
77
|
+
const maxBytes = this.MAX_MEMORY_MB * 1024 * 1024;
|
|
78
|
+
if (newUsage > maxBytes) {
|
|
79
|
+
// Try to free expired entries first
|
|
80
|
+
this.cleanupExpired();
|
|
81
|
+
// Check again
|
|
82
|
+
const afterCleanup = this.getMemoryUsageBytes() + sizeBytes;
|
|
83
|
+
if (afterCleanup > maxBytes) {
|
|
84
|
+
throw new Error(`Memory limit exceeded. Current: ${(currentUsage / 1024 / 1024).toFixed(2)}MB, ` +
|
|
85
|
+
`Requested: ${(sizeBytes / 1024 / 1024).toFixed(2)}MB, ` +
|
|
86
|
+
`Max: ${this.MAX_MEMORY_MB}MB`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const entry = {
|
|
90
|
+
key,
|
|
91
|
+
value,
|
|
92
|
+
timestamp: new Date(),
|
|
93
|
+
sizeBytes,
|
|
94
|
+
expiresAt: expiresInMs ? new Date(Date.now() + expiresInMs) : undefined
|
|
95
|
+
};
|
|
96
|
+
this.memory.set(key, entry);
|
|
97
|
+
this.logger.debug(`Stored key '${key}' (${(sizeBytes / 1024).toFixed(2)}KB)`);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Retrieve value from memory
|
|
101
|
+
*/
|
|
102
|
+
async retrieve(key) {
|
|
103
|
+
const entry = this.memory.get(key);
|
|
104
|
+
if (!entry) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
// Check if expired
|
|
108
|
+
if (entry.expiresAt && entry.expiresAt < new Date()) {
|
|
109
|
+
this.memory.delete(key);
|
|
110
|
+
this.logger.debug(`Key '${key}' expired and removed`);
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
return entry.value;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Delete a key from memory
|
|
117
|
+
*/
|
|
118
|
+
async delete(key) {
|
|
119
|
+
const existed = this.memory.has(key);
|
|
120
|
+
this.memory.delete(key);
|
|
121
|
+
return existed;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* List all keys with optional pattern matching
|
|
125
|
+
*/
|
|
126
|
+
async list(pattern) {
|
|
127
|
+
this.cleanupExpired();
|
|
128
|
+
const keys = Array.from(this.memory.keys());
|
|
129
|
+
if (pattern) {
|
|
130
|
+
const regex = new RegExp(pattern);
|
|
131
|
+
return keys.filter(key => regex.test(key));
|
|
132
|
+
}
|
|
133
|
+
return keys;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Clear all memory
|
|
137
|
+
*/
|
|
138
|
+
async clear() {
|
|
139
|
+
const count = this.memory.size;
|
|
140
|
+
this.memory.clear();
|
|
141
|
+
this.logger.info(`Cleared ${count} entries from memory`);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get memory usage statistics
|
|
145
|
+
*/
|
|
146
|
+
getStats() {
|
|
147
|
+
const totalSizeBytes = this.getMemoryUsageBytes();
|
|
148
|
+
const totalSizeMB = totalSizeBytes / 1024 / 1024;
|
|
149
|
+
return {
|
|
150
|
+
entries: this.memory.size,
|
|
151
|
+
totalSizeBytes,
|
|
152
|
+
totalSizeMB,
|
|
153
|
+
maxSizeMB: this.MAX_MEMORY_MB,
|
|
154
|
+
utilizationPercent: (totalSizeMB / this.MAX_MEMORY_MB) * 100
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get total memory usage in bytes
|
|
159
|
+
*/
|
|
160
|
+
getMemoryUsageBytes() {
|
|
161
|
+
let total = 0;
|
|
162
|
+
for (const entry of this.memory.values()) {
|
|
163
|
+
total += entry.sizeBytes;
|
|
164
|
+
}
|
|
165
|
+
return total;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Clean up expired entries
|
|
169
|
+
*/
|
|
170
|
+
cleanupExpired() {
|
|
171
|
+
const now = new Date();
|
|
172
|
+
let removed = 0;
|
|
173
|
+
for (const [key, entry] of this.memory.entries()) {
|
|
174
|
+
if (entry.expiresAt && entry.expiresAt < now) {
|
|
175
|
+
this.memory.delete(key);
|
|
176
|
+
removed++;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (removed > 0) {
|
|
180
|
+
this.logger.debug(`Cleaned up ${removed} expired entries`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Persist memory to disk for recovery
|
|
185
|
+
*/
|
|
186
|
+
async persistToDisk() {
|
|
187
|
+
try {
|
|
188
|
+
const data = {
|
|
189
|
+
version: '1.0',
|
|
190
|
+
timestamp: new Date().toISOString(),
|
|
191
|
+
entries: Array.from(this.memory.entries()).map(([key, entry]) => ({
|
|
192
|
+
key,
|
|
193
|
+
value: entry.value,
|
|
194
|
+
timestamp: entry.timestamp,
|
|
195
|
+
expiresAt: entry.expiresAt,
|
|
196
|
+
sizeBytes: entry.sizeBytes
|
|
197
|
+
}))
|
|
198
|
+
};
|
|
199
|
+
await fs.promises.writeFile(this.PERSIST_FILE, JSON.stringify(data, null, 2), 'utf-8');
|
|
200
|
+
this.logger.debug(`Persisted ${this.memory.size} entries to disk`);
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
this.logger.error('Failed to persist memory to disk:', error);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Load memory from disk
|
|
208
|
+
*/
|
|
209
|
+
loadFromDisk() {
|
|
210
|
+
try {
|
|
211
|
+
if (!fs.existsSync(this.PERSIST_FILE)) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const data = JSON.parse(fs.readFileSync(this.PERSIST_FILE, 'utf-8'));
|
|
215
|
+
if (data.version !== '1.0') {
|
|
216
|
+
this.logger.warn('Incompatible memory snapshot version, skipping load');
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
for (const entry of data.entries) {
|
|
220
|
+
this.memory.set(entry.key, {
|
|
221
|
+
key: entry.key,
|
|
222
|
+
value: entry.value,
|
|
223
|
+
timestamp: new Date(entry.timestamp),
|
|
224
|
+
expiresAt: entry.expiresAt ? new Date(entry.expiresAt) : undefined,
|
|
225
|
+
sizeBytes: entry.sizeBytes
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
this.cleanupExpired();
|
|
229
|
+
this.logger.info(`Loaded ${this.memory.size} entries from disk`);
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
this.logger.error('Failed to load memory from disk:', error);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Start auto-persist timer
|
|
237
|
+
*/
|
|
238
|
+
startAutoPersist() {
|
|
239
|
+
// Persist every 30 seconds
|
|
240
|
+
this.persistTimer = setInterval(() => {
|
|
241
|
+
this.persistToDisk().catch(error => {
|
|
242
|
+
this.logger.error('Auto-persist failed:', error);
|
|
243
|
+
});
|
|
244
|
+
}, 30000);
|
|
245
|
+
// Don't block process exit
|
|
246
|
+
if (this.persistTimer.unref) {
|
|
247
|
+
this.persistTimer.unref();
|
|
248
|
+
}
|
|
249
|
+
// Persist on exit
|
|
250
|
+
process.on('beforeExit', () => {
|
|
251
|
+
this.persistToDisk();
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Stop auto-persist timer
|
|
256
|
+
*/
|
|
257
|
+
destroy() {
|
|
258
|
+
if (this.persistTimer) {
|
|
259
|
+
clearInterval(this.persistTimer);
|
|
260
|
+
this.persistTimer = null;
|
|
261
|
+
}
|
|
262
|
+
this.persistToDisk();
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
exports.ReliableMemoryManager = ReliableMemoryManager;
|
|
266
|
+
// Export singleton instance
|
|
267
|
+
exports.reliableMemory = ReliableMemoryManager.getInstance();
|
|
268
|
+
//# sourceMappingURL=reliable-memory-manager.js.map
|