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,312 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Service Discovery Client for Consul Integration
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import axios, { AxiosInstance } from 'axios';
|
|
6
|
-
import { Logger } from '../utils/logger.js';
|
|
7
|
-
|
|
8
|
-
export interface ServiceRegistration {
|
|
9
|
-
id: string;
|
|
10
|
-
name: string;
|
|
11
|
-
address: string;
|
|
12
|
-
port: number;
|
|
13
|
-
health?: {
|
|
14
|
-
http?: string;
|
|
15
|
-
tcp?: string;
|
|
16
|
-
interval?: string;
|
|
17
|
-
timeout?: string;
|
|
18
|
-
deregisterAfter?: string;
|
|
19
|
-
};
|
|
20
|
-
tags?: string[];
|
|
21
|
-
meta?: Record<string, string>;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export interface ServiceDiscoveryConfig {
|
|
25
|
-
consulUrl: string;
|
|
26
|
-
timeout: number;
|
|
27
|
-
retryAttempts: number;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export class ServiceDiscoveryClient {
|
|
31
|
-
private client: AxiosInstance;
|
|
32
|
-
private logger: Logger;
|
|
33
|
-
private config: ServiceDiscoveryConfig;
|
|
34
|
-
|
|
35
|
-
constructor(config?: Partial<ServiceDiscoveryConfig>) {
|
|
36
|
-
this.config = {
|
|
37
|
-
consulUrl: process.env.CONSUL_URL || 'http://consul:8500',
|
|
38
|
-
timeout: 5000,
|
|
39
|
-
retryAttempts: 3,
|
|
40
|
-
...config
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
this.logger = new Logger('ServiceDiscovery');
|
|
44
|
-
|
|
45
|
-
this.client = axios.create({
|
|
46
|
-
baseURL: this.config.consulUrl,
|
|
47
|
-
timeout: this.config.timeout,
|
|
48
|
-
headers: {
|
|
49
|
-
'Content-Type': 'application/json'
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
// Request interceptor for logging
|
|
54
|
-
this.client.interceptors.request.use(
|
|
55
|
-
(config) => {
|
|
56
|
-
this.logger.debug(`Making request to Consul: ${config.method?.toUpperCase()} ${config.url}`);
|
|
57
|
-
return config;
|
|
58
|
-
},
|
|
59
|
-
(error) => {
|
|
60
|
-
this.logger.error('Request interceptor error:', error);
|
|
61
|
-
return Promise.reject(error);
|
|
62
|
-
}
|
|
63
|
-
);
|
|
64
|
-
|
|
65
|
-
// Response interceptor for error handling
|
|
66
|
-
this.client.interceptors.response.use(
|
|
67
|
-
(response) => response,
|
|
68
|
-
(error) => {
|
|
69
|
-
if (error.code === 'ECONNREFUSED' || error.code === 'ENOTFOUND') {
|
|
70
|
-
this.logger.warn('Consul is not available, running without service discovery');
|
|
71
|
-
} else {
|
|
72
|
-
this.logger.error('Consul request failed:', error.message);
|
|
73
|
-
}
|
|
74
|
-
return Promise.reject(error);
|
|
75
|
-
}
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Register a service with Consul
|
|
81
|
-
*/
|
|
82
|
-
async register(service: ServiceRegistration): Promise<void> {
|
|
83
|
-
const registration = {
|
|
84
|
-
ID: service.id,
|
|
85
|
-
Name: service.name,
|
|
86
|
-
Address: service.address,
|
|
87
|
-
Port: service.port,
|
|
88
|
-
Tags: service.tags || [],
|
|
89
|
-
Meta: {
|
|
90
|
-
version: '1.0.0',
|
|
91
|
-
...(service.meta || {})
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
// Add health check if specified
|
|
96
|
-
if (service.health) {
|
|
97
|
-
const check: any = {
|
|
98
|
-
Interval: service.health.interval || '30s',
|
|
99
|
-
Timeout: service.health.timeout || '10s',
|
|
100
|
-
DeregisterCriticalServiceAfter: service.health.deregisterAfter || '1m'
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
if (service.health.http) {
|
|
104
|
-
check.HTTP = service.health.http;
|
|
105
|
-
} else if (service.health.tcp) {
|
|
106
|
-
check.TCP = service.health.tcp;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
registration['Check'] = check;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
let lastError: any;
|
|
113
|
-
for (let attempt = 1; attempt <= this.config.retryAttempts; attempt++) {
|
|
114
|
-
try {
|
|
115
|
-
await this.client.put(`/v1/agent/service/register`, registration);
|
|
116
|
-
this.logger.info(`Service registered: ${service.name} (${service.id})`);
|
|
117
|
-
return;
|
|
118
|
-
} catch (error: any) {
|
|
119
|
-
lastError = error;
|
|
120
|
-
if (attempt < this.config.retryAttempts) {
|
|
121
|
-
const delay = Math.pow(2, attempt) * 1000; // Exponential backoff
|
|
122
|
-
this.logger.warn(`Registration attempt ${attempt} failed, retrying in ${delay}ms...`);
|
|
123
|
-
await new Promise(resolve => setTimeout(resolve, delay));
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
throw new Error(`Failed to register service after ${this.config.retryAttempts} attempts: ${lastError?.message}`);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Deregister a service from Consul
|
|
133
|
-
*/
|
|
134
|
-
async deregister(serviceId: string): Promise<void> {
|
|
135
|
-
try {
|
|
136
|
-
await this.client.put(`/v1/agent/service/deregister/${serviceId}`);
|
|
137
|
-
this.logger.info(`Service deregistered: ${serviceId}`);
|
|
138
|
-
} catch (error: any) {
|
|
139
|
-
this.logger.error(`Failed to deregister service ${serviceId}:`, error.message);
|
|
140
|
-
throw error;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Discover services by name
|
|
146
|
-
*/
|
|
147
|
-
async discover(serviceName: string, healthy = true): Promise<ServiceInstance[]> {
|
|
148
|
-
try {
|
|
149
|
-
const endpoint = healthy
|
|
150
|
-
? `/v1/health/service/${serviceName}?passing=true`
|
|
151
|
-
: `/v1/health/service/${serviceName}`;
|
|
152
|
-
|
|
153
|
-
const response = await this.client.get(endpoint);
|
|
154
|
-
|
|
155
|
-
return response.data.map((entry: any) => ({
|
|
156
|
-
id: entry.Service.ID,
|
|
157
|
-
name: entry.Service.Service,
|
|
158
|
-
address: entry.Service.Address,
|
|
159
|
-
port: entry.Service.Port,
|
|
160
|
-
tags: entry.Service.Tags,
|
|
161
|
-
meta: entry.Service.Meta,
|
|
162
|
-
health: entry.Checks?.map((check: any) => ({
|
|
163
|
-
status: check.Status,
|
|
164
|
-
output: check.Output,
|
|
165
|
-
name: check.Name
|
|
166
|
-
}))
|
|
167
|
-
}));
|
|
168
|
-
} catch (error: any) {
|
|
169
|
-
this.logger.error(`Failed to discover service ${serviceName}:`, error.message);
|
|
170
|
-
throw error;
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* List all services
|
|
176
|
-
*/
|
|
177
|
-
async listServices(): Promise<string[]> {
|
|
178
|
-
try {
|
|
179
|
-
const response = await this.client.get('/v1/agent/services');
|
|
180
|
-
return Object.keys(response.data);
|
|
181
|
-
} catch (error: any) {
|
|
182
|
-
this.logger.error('Failed to list services:', error.message);
|
|
183
|
-
throw error;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* Get service health status
|
|
189
|
-
*/
|
|
190
|
-
async getServiceHealth(serviceName: string): Promise<ServiceHealth[]> {
|
|
191
|
-
try {
|
|
192
|
-
const response = await this.client.get(`/v1/health/service/${serviceName}`);
|
|
193
|
-
|
|
194
|
-
return response.data.map((entry: any) => ({
|
|
195
|
-
serviceId: entry.Service.ID,
|
|
196
|
-
serviceName: entry.Service.Service,
|
|
197
|
-
address: entry.Service.Address,
|
|
198
|
-
port: entry.Service.Port,
|
|
199
|
-
checks: entry.Checks.map((check: any) => ({
|
|
200
|
-
checkId: check.CheckID,
|
|
201
|
-
name: check.Name,
|
|
202
|
-
status: check.Status,
|
|
203
|
-
output: check.Output
|
|
204
|
-
}))
|
|
205
|
-
}));
|
|
206
|
-
} catch (error: any) {
|
|
207
|
-
this.logger.error(`Failed to get health for service ${serviceName}:`, error.message);
|
|
208
|
-
throw error;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* Check if Consul is available
|
|
214
|
-
*/
|
|
215
|
-
async isAvailable(): Promise<boolean> {
|
|
216
|
-
try {
|
|
217
|
-
await this.client.get('/v1/status/leader');
|
|
218
|
-
return true;
|
|
219
|
-
} catch (error) {
|
|
220
|
-
return false;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
* Watch for service changes (simplified polling approach)
|
|
226
|
-
*/
|
|
227
|
-
watchService(serviceName: string, callback: (services: ServiceInstance[]) => void, interval = 10000): () => void {
|
|
228
|
-
let isWatching = true;
|
|
229
|
-
|
|
230
|
-
const poll = async () => {
|
|
231
|
-
if (!isWatching) return;
|
|
232
|
-
|
|
233
|
-
try {
|
|
234
|
-
const services = await this.discover(serviceName);
|
|
235
|
-
callback(services);
|
|
236
|
-
} catch (error) {
|
|
237
|
-
this.logger.warn(`Failed to poll service ${serviceName}:`, error);
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
if (isWatching) {
|
|
241
|
-
setTimeout(poll, interval);
|
|
242
|
-
}
|
|
243
|
-
};
|
|
244
|
-
|
|
245
|
-
poll();
|
|
246
|
-
|
|
247
|
-
return () => {
|
|
248
|
-
isWatching = false;
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
/**
|
|
253
|
-
* COMPATIBILITY FIX: makeRequest method for phantom calls
|
|
254
|
-
*/
|
|
255
|
-
async makeRequest(config: any): Promise<any> {
|
|
256
|
-
console.log('🔧 ServiceDiscoveryClient.makeRequest called with config:', config);
|
|
257
|
-
|
|
258
|
-
try {
|
|
259
|
-
// Route the request to the appropriate HTTP method
|
|
260
|
-
const method = (config.method || 'GET').toLowerCase();
|
|
261
|
-
const url = config.url || config.endpoint;
|
|
262
|
-
const data = config.data || config.body;
|
|
263
|
-
|
|
264
|
-
console.log(`🔧 ServiceDiscovery routing ${method.toUpperCase()} request to: ${url}`);
|
|
265
|
-
|
|
266
|
-
switch (method) {
|
|
267
|
-
case 'get':
|
|
268
|
-
return await this.client.get(url, { params: config.params });
|
|
269
|
-
case 'post':
|
|
270
|
-
return await this.client.post(url, data);
|
|
271
|
-
case 'put':
|
|
272
|
-
return await this.client.put(url, data);
|
|
273
|
-
case 'patch':
|
|
274
|
-
return await this.client.patch(url, data);
|
|
275
|
-
case 'delete':
|
|
276
|
-
return await this.client.delete(url);
|
|
277
|
-
default:
|
|
278
|
-
throw new Error(`Unsupported HTTP method: ${method}`);
|
|
279
|
-
}
|
|
280
|
-
} catch (error) {
|
|
281
|
-
console.error('🔧 ServiceDiscoveryClient makeRequest error:', error);
|
|
282
|
-
throw error;
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
export interface ServiceInstance {
|
|
288
|
-
id: string;
|
|
289
|
-
name: string;
|
|
290
|
-
address: string;
|
|
291
|
-
port: number;
|
|
292
|
-
tags: string[];
|
|
293
|
-
meta: Record<string, string>;
|
|
294
|
-
health?: Array<{
|
|
295
|
-
status: string;
|
|
296
|
-
output: string;
|
|
297
|
-
name: string;
|
|
298
|
-
}>;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
export interface ServiceHealth {
|
|
302
|
-
serviceId: string;
|
|
303
|
-
serviceName: string;
|
|
304
|
-
address: string;
|
|
305
|
-
port: number;
|
|
306
|
-
checks: Array<{
|
|
307
|
-
checkId: string;
|
|
308
|
-
name: string;
|
|
309
|
-
status: string;
|
|
310
|
-
output: string;
|
|
311
|
-
}>;
|
|
312
|
-
}
|