cmp-standards 2.8.1 → 3.1.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/dist/analytics/CrossProjectAnalytics.d.ts +128 -0
- package/dist/analytics/CrossProjectAnalytics.d.ts.map +1 -0
- package/dist/analytics/CrossProjectAnalytics.js +434 -0
- package/dist/analytics/CrossProjectAnalytics.js.map +1 -0
- package/dist/analytics/index.d.ts +1 -0
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +2 -0
- package/dist/analytics/index.js.map +1 -1
- package/dist/cache/EmbeddingCache.d.ts +6 -4
- package/dist/cache/EmbeddingCache.d.ts.map +1 -1
- package/dist/cache/EmbeddingCache.js +28 -17
- package/dist/cache/EmbeddingCache.js.map +1 -1
- package/dist/cli/index.js +658 -141
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/ui.d.ts +134 -0
- package/dist/cli/ui.d.ts.map +1 -0
- package/dist/cli/ui.js +311 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/dashboard/tokens.d.ts +228 -0
- package/dist/dashboard/tokens.d.ts.map +1 -0
- package/dist/dashboard/tokens.js +450 -0
- package/dist/dashboard/tokens.js.map +1 -0
- package/dist/dashboard/ui.d.ts +3 -0
- package/dist/dashboard/ui.d.ts.map +1 -1
- package/dist/dashboard/ui.js +95 -61
- package/dist/dashboard/ui.js.map +1 -1
- package/dist/db/cloud.d.ts +11 -0
- package/dist/db/cloud.d.ts.map +1 -1
- package/dist/db/cloud.js +49 -1
- package/dist/db/cloud.js.map +1 -1
- package/dist/db/migrations.d.ts +1 -0
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +109 -0
- package/dist/db/migrations.js.map +1 -1
- package/dist/db/turso-client.d.ts.map +1 -1
- package/dist/db/turso-client.js +3 -0
- package/dist/db/turso-client.js.map +1 -1
- package/dist/events/EventBus.d.ts +21 -0
- package/dist/events/EventBus.d.ts.map +1 -1
- package/dist/events/EventBus.js +81 -30
- package/dist/events/EventBus.js.map +1 -1
- package/dist/events/index.d.ts +1 -1
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +1 -1
- package/dist/events/index.js.map +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/startup-verify.d.ts +31 -0
- package/dist/hooks/startup-verify.d.ts.map +1 -0
- package/dist/hooks/startup-verify.js +360 -0
- package/dist/hooks/startup-verify.js.map +1 -0
- package/dist/plugins/PluginManager.d.ts +160 -0
- package/dist/plugins/PluginManager.d.ts.map +1 -0
- package/dist/plugins/PluginManager.js +417 -0
- package/dist/plugins/PluginManager.js.map +1 -0
- package/dist/plugins/index.d.ts +7 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +7 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/schema/expert-types.d.ts +2 -2
- package/dist/services/AuditLog.d.ts +205 -0
- package/dist/services/AuditLog.d.ts.map +1 -0
- package/dist/services/AuditLog.js +352 -0
- package/dist/services/AuditLog.js.map +1 -0
- package/dist/services/FeedbackCollector.d.ts +8 -0
- package/dist/services/FeedbackCollector.d.ts.map +1 -1
- package/dist/services/FeedbackCollector.js +19 -2
- package/dist/services/FeedbackCollector.js.map +1 -1
- package/dist/services/GitIntegration.d.ts +140 -0
- package/dist/services/GitIntegration.d.ts.map +1 -0
- package/dist/services/GitIntegration.js +423 -0
- package/dist/services/GitIntegration.js.map +1 -0
- package/dist/services/HookVerifier.d.ts +95 -0
- package/dist/services/HookVerifier.d.ts.map +1 -0
- package/dist/services/HookVerifier.js +493 -0
- package/dist/services/HookVerifier.js.map +1 -0
- package/dist/services/MemoryRelationshipService.d.ts +187 -0
- package/dist/services/MemoryRelationshipService.d.ts.map +1 -0
- package/dist/services/MemoryRelationshipService.js +375 -0
- package/dist/services/MemoryRelationshipService.js.map +1 -0
- package/dist/services/MemoryVersioning.d.ts +108 -0
- package/dist/services/MemoryVersioning.d.ts.map +1 -0
- package/dist/services/MemoryVersioning.js +281 -0
- package/dist/services/MemoryVersioning.js.map +1 -0
- package/dist/services/context-injector.d.ts +8 -0
- package/dist/services/context-injector.d.ts.map +1 -1
- package/dist/services/context-injector.js +19 -2
- package/dist/services/context-injector.js.map +1 -1
- package/dist/services/index.d.ts +5 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +7 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/memory-router.d.ts +8 -0
- package/dist/services/memory-router.d.ts.map +1 -1
- package/dist/services/memory-router.js +19 -2
- package/dist/services/memory-router.js.map +1 -1
- package/dist/services/pattern-tracker.d.ts +13 -0
- package/dist/services/pattern-tracker.d.ts.map +1 -1
- package/dist/services/pattern-tracker.js +33 -3
- package/dist/services/pattern-tracker.js.map +1 -1
- package/dist/services/semantic-search.d.ts +12 -0
- package/dist/services/semantic-search.d.ts.map +1 -1
- package/dist/services/semantic-search.js +93 -17
- package/dist/services/semantic-search.js.map +1 -1
- package/dist/testing/index.d.ts +148 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +370 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/utils/resilience.d.ts +256 -0
- package/dist/utils/resilience.d.ts.map +1 -0
- package/dist/utils/resilience.js +499 -0
- package/dist/utils/resilience.js.map +1 -0
- package/package.json +12 -1
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Startup Verification Hook
|
|
3
|
+
* @description Validates all services and infrastructure on session start
|
|
4
|
+
*
|
|
5
|
+
* This hook should run FIRST to verify:
|
|
6
|
+
* - Environment variables are loaded correctly
|
|
7
|
+
* - Cloud services are reachable
|
|
8
|
+
* - Database connections work
|
|
9
|
+
* - Required configurations exist
|
|
10
|
+
*
|
|
11
|
+
* Outputs a clear status report so issues are visible immediately.
|
|
12
|
+
*
|
|
13
|
+
* @version 2.9.0
|
|
14
|
+
*/
|
|
15
|
+
import { config as dotenvConfig } from 'dotenv';
|
|
16
|
+
import { resolve } from 'path';
|
|
17
|
+
import { existsSync, readFileSync } from 'fs';
|
|
18
|
+
import { fileURLToPath } from 'url';
|
|
19
|
+
// =============================================================================
|
|
20
|
+
// Environment Loading
|
|
21
|
+
// =============================================================================
|
|
22
|
+
/**
|
|
23
|
+
* Load .env from multiple possible locations (monorepo support)
|
|
24
|
+
*/
|
|
25
|
+
function loadEnvironment(cwd) {
|
|
26
|
+
const possiblePaths = [
|
|
27
|
+
resolve(cwd, '.env'),
|
|
28
|
+
resolve(cwd, '../.env'),
|
|
29
|
+
resolve(cwd, '../../.env'),
|
|
30
|
+
resolve(cwd, '../../../.env'),
|
|
31
|
+
];
|
|
32
|
+
for (const envPath of possiblePaths) {
|
|
33
|
+
if (existsSync(envPath)) {
|
|
34
|
+
dotenvConfig({ path: envPath, override: true });
|
|
35
|
+
return { loaded: true, path: envPath };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Try default dotenv behavior
|
|
39
|
+
dotenvConfig();
|
|
40
|
+
return { loaded: false };
|
|
41
|
+
}
|
|
42
|
+
// =============================================================================
|
|
43
|
+
// Individual Verifications
|
|
44
|
+
// =============================================================================
|
|
45
|
+
function verifyEnvVariable(name, required = true) {
|
|
46
|
+
const value = process.env[name];
|
|
47
|
+
if (!value) {
|
|
48
|
+
return {
|
|
49
|
+
service: `ENV:${name}`,
|
|
50
|
+
status: required ? 'error' : 'warn',
|
|
51
|
+
message: required ? `Missing required variable` : `Optional variable not set`,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
// Mask the value for display
|
|
55
|
+
const masked = value.length > 8 ? value.slice(0, 4) + '***' + value.slice(-4) : '***';
|
|
56
|
+
return {
|
|
57
|
+
service: `ENV:${name}`,
|
|
58
|
+
status: 'ok',
|
|
59
|
+
message: `Set (${masked})`,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
async function verifyTurso() {
|
|
63
|
+
const url = process.env.TURSO_DATABASE_URL;
|
|
64
|
+
const token = process.env.TURSO_AUTH_TOKEN;
|
|
65
|
+
if (!url || !token) {
|
|
66
|
+
return {
|
|
67
|
+
service: 'Turso',
|
|
68
|
+
status: 'error',
|
|
69
|
+
message: 'Missing credentials',
|
|
70
|
+
details: `URL: ${url ? 'set' : 'missing'}, Token: ${token ? 'set' : 'missing'}`,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const { createClient } = await import('@libsql/client');
|
|
75
|
+
const client = createClient({ url, authToken: token });
|
|
76
|
+
const result = await client.execute('SELECT 1 as test');
|
|
77
|
+
if (result.rows.length > 0) {
|
|
78
|
+
return {
|
|
79
|
+
service: 'Turso',
|
|
80
|
+
status: 'ok',
|
|
81
|
+
message: 'Connected and responding',
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
service: 'Turso',
|
|
86
|
+
status: 'warn',
|
|
87
|
+
message: 'Connected but query returned no results',
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
return {
|
|
92
|
+
service: 'Turso',
|
|
93
|
+
status: 'error',
|
|
94
|
+
message: 'Connection failed',
|
|
95
|
+
details: error instanceof Error ? error.message : String(error),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async function verifyRedis() {
|
|
100
|
+
const url = process.env.UPSTASH_REDIS_REST_URL;
|
|
101
|
+
const token = process.env.UPSTASH_REDIS_REST_TOKEN;
|
|
102
|
+
if (!url || !token) {
|
|
103
|
+
return {
|
|
104
|
+
service: 'Redis',
|
|
105
|
+
status: 'error',
|
|
106
|
+
message: 'Missing credentials',
|
|
107
|
+
details: `URL: ${url ? 'set' : 'missing'}, Token: ${token ? 'set' : 'missing'}`,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
try {
|
|
111
|
+
const { Redis } = await import('@upstash/redis');
|
|
112
|
+
const redis = new Redis({ url, token });
|
|
113
|
+
const pong = await redis.ping();
|
|
114
|
+
if (pong === 'PONG') {
|
|
115
|
+
return {
|
|
116
|
+
service: 'Redis',
|
|
117
|
+
status: 'ok',
|
|
118
|
+
message: 'Connected (PONG)',
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
service: 'Redis',
|
|
123
|
+
status: 'warn',
|
|
124
|
+
message: `Unexpected response: ${pong}`,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
return {
|
|
129
|
+
service: 'Redis',
|
|
130
|
+
status: 'error',
|
|
131
|
+
message: 'Connection failed',
|
|
132
|
+
details: error instanceof Error ? error.message : String(error),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
async function verifyVector() {
|
|
137
|
+
const url = process.env.UPSTASH_VECTOR_REST_URL;
|
|
138
|
+
const token = process.env.UPSTASH_VECTOR_REST_TOKEN;
|
|
139
|
+
if (!url || !token) {
|
|
140
|
+
return {
|
|
141
|
+
service: 'Vector',
|
|
142
|
+
status: 'warn',
|
|
143
|
+
message: 'Not configured (optional)',
|
|
144
|
+
details: `URL: ${url ? 'set' : 'missing'}, Token: ${token ? 'set' : 'missing'}`,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
const { Index } = await import('@upstash/vector');
|
|
149
|
+
const index = new Index({ url, token });
|
|
150
|
+
const info = await index.info();
|
|
151
|
+
return {
|
|
152
|
+
service: 'Vector',
|
|
153
|
+
status: 'ok',
|
|
154
|
+
message: `Connected (${info.vectorCount ?? 0} vectors)`,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
return {
|
|
159
|
+
service: 'Vector',
|
|
160
|
+
status: 'warn',
|
|
161
|
+
message: 'Connection failed (optional service)',
|
|
162
|
+
details: error instanceof Error ? error.message : String(error),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
function verifyProjectConfig(cwd) {
|
|
167
|
+
const configPath = resolve(cwd, '.claude/project.config.json');
|
|
168
|
+
if (!existsSync(configPath)) {
|
|
169
|
+
return {
|
|
170
|
+
service: 'Project Config',
|
|
171
|
+
status: 'warn',
|
|
172
|
+
message: 'Not found (.claude/project.config.json)',
|
|
173
|
+
details: 'Run: npx cmp-standards init --system YOUR_SYSTEM',
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
try {
|
|
177
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
178
|
+
const config = JSON.parse(content);
|
|
179
|
+
if (!config.system) {
|
|
180
|
+
return {
|
|
181
|
+
service: 'Project Config',
|
|
182
|
+
status: 'warn',
|
|
183
|
+
message: 'Missing system identifier',
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
service: 'Project Config',
|
|
188
|
+
status: 'ok',
|
|
189
|
+
message: `System: ${config.system}`,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
return {
|
|
194
|
+
service: 'Project Config',
|
|
195
|
+
status: 'error',
|
|
196
|
+
message: 'Invalid JSON',
|
|
197
|
+
details: error instanceof Error ? error.message : String(error),
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function verifyHooksDirectory(cwd) {
|
|
202
|
+
const hooksPath = resolve(cwd, '.claude/hooks');
|
|
203
|
+
if (!existsSync(hooksPath)) {
|
|
204
|
+
return {
|
|
205
|
+
service: 'Hooks Directory',
|
|
206
|
+
status: 'warn',
|
|
207
|
+
message: 'Not found (.claude/hooks)',
|
|
208
|
+
details: 'Run: npx cmp-standards sync --hooks',
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
return {
|
|
212
|
+
service: 'Hooks Directory',
|
|
213
|
+
status: 'ok',
|
|
214
|
+
message: 'Exists',
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
// =============================================================================
|
|
218
|
+
// Main Verification Function
|
|
219
|
+
// =============================================================================
|
|
220
|
+
export async function verifyStartup(cwd) {
|
|
221
|
+
const timestamp = new Date().toISOString();
|
|
222
|
+
const results = [];
|
|
223
|
+
const issues = [];
|
|
224
|
+
const recommendations = [];
|
|
225
|
+
// 1. Load environment
|
|
226
|
+
const envResult = loadEnvironment(cwd);
|
|
227
|
+
results.push({
|
|
228
|
+
service: 'Environment',
|
|
229
|
+
status: envResult.loaded ? 'ok' : 'warn',
|
|
230
|
+
message: envResult.loaded ? `Loaded from ${envResult.path}` : 'Using process.env only',
|
|
231
|
+
});
|
|
232
|
+
// 2. Check required env vars
|
|
233
|
+
const requiredVars = ['TURSO_DATABASE_URL', 'TURSO_AUTH_TOKEN'];
|
|
234
|
+
const optionalVars = ['UPSTASH_REDIS_REST_URL', 'UPSTASH_REDIS_REST_TOKEN', 'UPSTASH_VECTOR_REST_URL', 'UPSTASH_VECTOR_REST_TOKEN'];
|
|
235
|
+
for (const varName of requiredVars) {
|
|
236
|
+
results.push(verifyEnvVariable(varName, true));
|
|
237
|
+
}
|
|
238
|
+
for (const varName of optionalVars) {
|
|
239
|
+
results.push(verifyEnvVariable(varName, false));
|
|
240
|
+
}
|
|
241
|
+
// 3. Check cloud services
|
|
242
|
+
const [tursoResult, redisResult, vectorResult] = await Promise.all([
|
|
243
|
+
verifyTurso(),
|
|
244
|
+
verifyRedis(),
|
|
245
|
+
verifyVector(),
|
|
246
|
+
]);
|
|
247
|
+
results.push(tursoResult, redisResult, vectorResult);
|
|
248
|
+
// 4. Check project configuration
|
|
249
|
+
results.push(verifyProjectConfig(cwd));
|
|
250
|
+
results.push(verifyHooksDirectory(cwd));
|
|
251
|
+
// Analyze results
|
|
252
|
+
const errors = results.filter(r => r.status === 'error');
|
|
253
|
+
const warnings = results.filter(r => r.status === 'warn');
|
|
254
|
+
for (const err of errors) {
|
|
255
|
+
issues.push(`${err.service}: ${err.message}${err.details ? ` (${err.details})` : ''}`);
|
|
256
|
+
}
|
|
257
|
+
// Generate recommendations
|
|
258
|
+
if (errors.some(e => e.service.includes('TURSO'))) {
|
|
259
|
+
recommendations.push('Set TURSO_DATABASE_URL and TURSO_AUTH_TOKEN in your .env file');
|
|
260
|
+
}
|
|
261
|
+
if (errors.some(e => e.service === 'Turso')) {
|
|
262
|
+
recommendations.push('Check Turso credentials at https://turso.tech/app');
|
|
263
|
+
}
|
|
264
|
+
if (errors.some(e => e.service === 'Redis')) {
|
|
265
|
+
recommendations.push('Check Upstash Redis credentials at https://console.upstash.com');
|
|
266
|
+
}
|
|
267
|
+
if (warnings.some(w => w.service === 'Project Config')) {
|
|
268
|
+
recommendations.push('Run: npx cmp-standards init --system YOUR_SYSTEM');
|
|
269
|
+
}
|
|
270
|
+
// Determine overall status
|
|
271
|
+
let overallStatus = 'healthy';
|
|
272
|
+
if (warnings.length > 0)
|
|
273
|
+
overallStatus = 'degraded';
|
|
274
|
+
if (errors.length > 0)
|
|
275
|
+
overallStatus = 'critical';
|
|
276
|
+
return {
|
|
277
|
+
timestamp,
|
|
278
|
+
cwd,
|
|
279
|
+
results,
|
|
280
|
+
overallStatus,
|
|
281
|
+
issues,
|
|
282
|
+
recommendations,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
// =============================================================================
|
|
286
|
+
// Output Formatting
|
|
287
|
+
// =============================================================================
|
|
288
|
+
function formatReport(report) {
|
|
289
|
+
const lines = [];
|
|
290
|
+
// Header
|
|
291
|
+
const statusIcon = {
|
|
292
|
+
healthy: '\u2705', // green check
|
|
293
|
+
degraded: '\u26A0\uFE0F', // warning
|
|
294
|
+
critical: '\u274C', // red X
|
|
295
|
+
}[report.overallStatus];
|
|
296
|
+
lines.push('');
|
|
297
|
+
lines.push(`${statusIcon} CMP Standards Startup Verification`);
|
|
298
|
+
lines.push(`${'='.repeat(50)}`);
|
|
299
|
+
lines.push(`Status: ${report.overallStatus.toUpperCase()}`);
|
|
300
|
+
lines.push(`Time: ${report.timestamp}`);
|
|
301
|
+
lines.push(`Directory: ${report.cwd}`);
|
|
302
|
+
lines.push('');
|
|
303
|
+
// Service Status
|
|
304
|
+
lines.push('Service Status:');
|
|
305
|
+
lines.push('-'.repeat(30));
|
|
306
|
+
for (const result of report.results) {
|
|
307
|
+
const icon = result.status === 'ok' ? '\u2705' : result.status === 'warn' ? '\u26A0\uFE0F' : '\u274C';
|
|
308
|
+
lines.push(`${icon} ${result.service}: ${result.message}`);
|
|
309
|
+
if (result.details && result.status !== 'ok') {
|
|
310
|
+
lines.push(` \u2514\u2500 ${result.details}`);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
// Issues
|
|
314
|
+
if (report.issues.length > 0) {
|
|
315
|
+
lines.push('');
|
|
316
|
+
lines.push('Issues Found:');
|
|
317
|
+
lines.push('-'.repeat(30));
|
|
318
|
+
for (const issue of report.issues) {
|
|
319
|
+
lines.push(`\u2022 ${issue}`);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
// Recommendations
|
|
323
|
+
if (report.recommendations.length > 0) {
|
|
324
|
+
lines.push('');
|
|
325
|
+
lines.push('Recommendations:');
|
|
326
|
+
lines.push('-'.repeat(30));
|
|
327
|
+
for (const rec of report.recommendations) {
|
|
328
|
+
lines.push(`\u27A4 ${rec}`);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
lines.push('');
|
|
332
|
+
lines.push(`${'='.repeat(50)}`);
|
|
333
|
+
lines.push('');
|
|
334
|
+
return lines.join('\n');
|
|
335
|
+
}
|
|
336
|
+
// =============================================================================
|
|
337
|
+
// CLI Entry Point
|
|
338
|
+
// =============================================================================
|
|
339
|
+
async function main() {
|
|
340
|
+
const cwd = process.cwd();
|
|
341
|
+
try {
|
|
342
|
+
const report = await verifyStartup(cwd);
|
|
343
|
+
console.log(formatReport(report));
|
|
344
|
+
// Exit with error code if critical
|
|
345
|
+
if (report.overallStatus === 'critical') {
|
|
346
|
+
process.exit(1);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
catch (error) {
|
|
350
|
+
console.error('Startup verification failed:', error);
|
|
351
|
+
process.exit(1);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
// Run if executed directly
|
|
355
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
356
|
+
if (process.argv[1] === __filename || process.argv[1]?.includes('startup-verify')) {
|
|
357
|
+
main();
|
|
358
|
+
}
|
|
359
|
+
export default verifyStartup;
|
|
360
|
+
//# sourceMappingURL=startup-verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup-verify.js","sourceRoot":"","sources":["../../src/hooks/startup-verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Manager
|
|
3
|
+
*
|
|
4
|
+
* Extensible plugin system for CMP Standards:
|
|
5
|
+
* - Register custom plugins
|
|
6
|
+
* - Lifecycle hooks (init, dispose)
|
|
7
|
+
* - Plugin dependencies
|
|
8
|
+
* - Configuration per plugin
|
|
9
|
+
* - Event-based communication
|
|
10
|
+
*
|
|
11
|
+
* @version 2.9.0
|
|
12
|
+
*/
|
|
13
|
+
import type { DevSystem } from '../types/index.js';
|
|
14
|
+
type PluginEventType = 'plugin:registered' | 'plugin:unregistered' | 'plugin:loaded' | 'plugin:unloaded' | 'plugin:error';
|
|
15
|
+
interface PluginEventData {
|
|
16
|
+
name: string;
|
|
17
|
+
version?: string;
|
|
18
|
+
error?: string;
|
|
19
|
+
}
|
|
20
|
+
type PluginEventHandler = (data: PluginEventData) => void;
|
|
21
|
+
declare class PluginEventEmitter {
|
|
22
|
+
private handlers;
|
|
23
|
+
on(event: PluginEventType, handler: PluginEventHandler): void;
|
|
24
|
+
off(event: PluginEventType, handler: PluginEventHandler): void;
|
|
25
|
+
emit(event: PluginEventType, data: PluginEventData): void;
|
|
26
|
+
}
|
|
27
|
+
export interface PluginContext {
|
|
28
|
+
system: DevSystem;
|
|
29
|
+
events: PluginEventEmitter;
|
|
30
|
+
config: Record<string, unknown>;
|
|
31
|
+
getPlugin: <T extends Plugin>(name: string) => T | undefined;
|
|
32
|
+
log: (message: string, level?: 'info' | 'warn' | 'error') => void;
|
|
33
|
+
}
|
|
34
|
+
export interface PluginMetadata {
|
|
35
|
+
name: string;
|
|
36
|
+
version: string;
|
|
37
|
+
description?: string;
|
|
38
|
+
author?: string;
|
|
39
|
+
dependencies?: string[];
|
|
40
|
+
optionalDependencies?: string[];
|
|
41
|
+
}
|
|
42
|
+
export interface Plugin {
|
|
43
|
+
metadata: PluginMetadata;
|
|
44
|
+
init(context: PluginContext): Promise<void> | void;
|
|
45
|
+
dispose?(): Promise<void> | void;
|
|
46
|
+
}
|
|
47
|
+
export type PluginFactory = (config?: Record<string, unknown>) => Plugin;
|
|
48
|
+
export interface PluginConfig {
|
|
49
|
+
enabled: boolean;
|
|
50
|
+
config?: Record<string, unknown>;
|
|
51
|
+
}
|
|
52
|
+
export interface PluginStatus {
|
|
53
|
+
name: string;
|
|
54
|
+
version: string;
|
|
55
|
+
enabled: boolean;
|
|
56
|
+
loaded: boolean;
|
|
57
|
+
error?: string;
|
|
58
|
+
dependencies: string[];
|
|
59
|
+
loadedAt?: string;
|
|
60
|
+
}
|
|
61
|
+
export declare class PluginManager {
|
|
62
|
+
private plugins;
|
|
63
|
+
private loadedPlugins;
|
|
64
|
+
private pluginConfigs;
|
|
65
|
+
private pluginErrors;
|
|
66
|
+
private system;
|
|
67
|
+
private events;
|
|
68
|
+
constructor(options: {
|
|
69
|
+
system: DevSystem;
|
|
70
|
+
});
|
|
71
|
+
/**
|
|
72
|
+
* Subscribe to plugin events
|
|
73
|
+
*/
|
|
74
|
+
on(event: PluginEventType, handler: PluginEventHandler): void;
|
|
75
|
+
/**
|
|
76
|
+
* Unsubscribe from plugin events
|
|
77
|
+
*/
|
|
78
|
+
off(event: PluginEventType, handler: PluginEventHandler): void;
|
|
79
|
+
/**
|
|
80
|
+
* Register a plugin
|
|
81
|
+
*/
|
|
82
|
+
register(plugin: Plugin, config?: PluginConfig): void;
|
|
83
|
+
/**
|
|
84
|
+
* Register a plugin from a factory function
|
|
85
|
+
*/
|
|
86
|
+
registerFactory(factory: PluginFactory, config?: Record<string, unknown>): void;
|
|
87
|
+
/**
|
|
88
|
+
* Unregister a plugin
|
|
89
|
+
*/
|
|
90
|
+
unregister(name: string): Promise<boolean>;
|
|
91
|
+
/**
|
|
92
|
+
* Load and initialize a plugin
|
|
93
|
+
*/
|
|
94
|
+
load(name: string): Promise<boolean>;
|
|
95
|
+
/**
|
|
96
|
+
* Unload a plugin
|
|
97
|
+
*/
|
|
98
|
+
unload(name: string): Promise<boolean>;
|
|
99
|
+
/**
|
|
100
|
+
* Load all enabled plugins
|
|
101
|
+
*/
|
|
102
|
+
loadAll(): Promise<{
|
|
103
|
+
loaded: string[];
|
|
104
|
+
failed: string[];
|
|
105
|
+
}>;
|
|
106
|
+
/**
|
|
107
|
+
* Unload all plugins
|
|
108
|
+
*/
|
|
109
|
+
unloadAll(): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* Get a loaded plugin by name
|
|
112
|
+
*/
|
|
113
|
+
getPlugin<T extends Plugin>(name: string): T | undefined;
|
|
114
|
+
/**
|
|
115
|
+
* Check if a plugin is registered
|
|
116
|
+
*/
|
|
117
|
+
isRegistered(name: string): boolean;
|
|
118
|
+
/**
|
|
119
|
+
* Check if a plugin is loaded
|
|
120
|
+
*/
|
|
121
|
+
isLoaded(name: string): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Get plugin status
|
|
124
|
+
*/
|
|
125
|
+
getStatus(name: string): PluginStatus | null;
|
|
126
|
+
/**
|
|
127
|
+
* Get all plugin statuses
|
|
128
|
+
*/
|
|
129
|
+
getAllStatuses(): PluginStatus[];
|
|
130
|
+
/**
|
|
131
|
+
* Enable a plugin
|
|
132
|
+
*/
|
|
133
|
+
enable(name: string): boolean;
|
|
134
|
+
/**
|
|
135
|
+
* Disable a plugin
|
|
136
|
+
*/
|
|
137
|
+
disable(name: string): Promise<boolean>;
|
|
138
|
+
/**
|
|
139
|
+
* Update plugin config
|
|
140
|
+
*/
|
|
141
|
+
updateConfig(name: string, newConfig: Record<string, unknown>): boolean;
|
|
142
|
+
private createContext;
|
|
143
|
+
private checkDependencies;
|
|
144
|
+
private getDependents;
|
|
145
|
+
private topologicalSort;
|
|
146
|
+
}
|
|
147
|
+
export declare function getPluginManager(system?: DevSystem): PluginManager;
|
|
148
|
+
export declare function resetPluginManager(): void;
|
|
149
|
+
/**
|
|
150
|
+
* Create a simple plugin with minimal boilerplate
|
|
151
|
+
*/
|
|
152
|
+
export declare function createPlugin(metadata: PluginMetadata, init: (context: PluginContext) => Promise<void> | void, dispose?: () => Promise<void> | void): Plugin;
|
|
153
|
+
/**
|
|
154
|
+
* Create a plugin factory for configurable plugins
|
|
155
|
+
*/
|
|
156
|
+
export declare function createPluginFactory<TConfig extends Record<string, unknown>>(metadata: Omit<PluginMetadata, 'name'> & {
|
|
157
|
+
name: string;
|
|
158
|
+
}, factory: (config: TConfig, context: PluginContext) => Promise<void> | void, dispose?: () => Promise<void> | void): PluginFactory;
|
|
159
|
+
export {};
|
|
160
|
+
//# sourceMappingURL=PluginManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginManager.d.ts","sourceRoot":"","sources":["../../src/plugins/PluginManager.ts"],"names":[],"mappings":"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"}
|