cmp-standards 2.8.1 → 2.9.1

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.
Files changed (95) hide show
  1. package/dist/analytics/CrossProjectAnalytics.d.ts +128 -0
  2. package/dist/analytics/CrossProjectAnalytics.d.ts.map +1 -0
  3. package/dist/analytics/CrossProjectAnalytics.js +431 -0
  4. package/dist/analytics/CrossProjectAnalytics.js.map +1 -0
  5. package/dist/analytics/index.d.ts +1 -0
  6. package/dist/analytics/index.d.ts.map +1 -1
  7. package/dist/analytics/index.js +2 -0
  8. package/dist/analytics/index.js.map +1 -1
  9. package/dist/cache/EmbeddingCache.d.ts +6 -4
  10. package/dist/cache/EmbeddingCache.d.ts.map +1 -1
  11. package/dist/cache/EmbeddingCache.js +28 -17
  12. package/dist/cache/EmbeddingCache.js.map +1 -1
  13. package/dist/cli/index.js +247 -141
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/ui.d.ts +134 -0
  16. package/dist/cli/ui.d.ts.map +1 -0
  17. package/dist/cli/ui.js +311 -0
  18. package/dist/cli/ui.js.map +1 -0
  19. package/dist/dashboard/tokens.d.ts +228 -0
  20. package/dist/dashboard/tokens.d.ts.map +1 -0
  21. package/dist/dashboard/tokens.js +450 -0
  22. package/dist/dashboard/tokens.js.map +1 -0
  23. package/dist/dashboard/ui.d.ts +3 -0
  24. package/dist/dashboard/ui.d.ts.map +1 -1
  25. package/dist/dashboard/ui.js +95 -61
  26. package/dist/dashboard/ui.js.map +1 -1
  27. package/dist/db/cloud.d.ts +11 -0
  28. package/dist/db/cloud.d.ts.map +1 -1
  29. package/dist/db/cloud.js +49 -1
  30. package/dist/db/cloud.js.map +1 -1
  31. package/dist/db/migrations.d.ts +1 -0
  32. package/dist/db/migrations.d.ts.map +1 -1
  33. package/dist/db/migrations.js +109 -0
  34. package/dist/db/migrations.js.map +1 -1
  35. package/dist/hooks/index.d.ts +1 -0
  36. package/dist/hooks/index.d.ts.map +1 -1
  37. package/dist/hooks/index.js +2 -0
  38. package/dist/hooks/index.js.map +1 -1
  39. package/dist/hooks/startup-verify.d.ts +31 -0
  40. package/dist/hooks/startup-verify.d.ts.map +1 -0
  41. package/dist/hooks/startup-verify.js +360 -0
  42. package/dist/hooks/startup-verify.js.map +1 -0
  43. package/dist/plugins/PluginManager.d.ts +160 -0
  44. package/dist/plugins/PluginManager.d.ts.map +1 -0
  45. package/dist/plugins/PluginManager.js +417 -0
  46. package/dist/plugins/PluginManager.js.map +1 -0
  47. package/dist/plugins/index.d.ts +7 -0
  48. package/dist/plugins/index.d.ts.map +1 -0
  49. package/dist/plugins/index.js +7 -0
  50. package/dist/plugins/index.js.map +1 -0
  51. package/dist/services/AuditLog.d.ts +205 -0
  52. package/dist/services/AuditLog.d.ts.map +1 -0
  53. package/dist/services/AuditLog.js +352 -0
  54. package/dist/services/AuditLog.js.map +1 -0
  55. package/dist/services/FeedbackCollector.d.ts +8 -0
  56. package/dist/services/FeedbackCollector.d.ts.map +1 -1
  57. package/dist/services/FeedbackCollector.js +19 -2
  58. package/dist/services/FeedbackCollector.js.map +1 -1
  59. package/dist/services/GitIntegration.d.ts +140 -0
  60. package/dist/services/GitIntegration.d.ts.map +1 -0
  61. package/dist/services/GitIntegration.js +423 -0
  62. package/dist/services/GitIntegration.js.map +1 -0
  63. package/dist/services/HookVerifier.d.ts +95 -0
  64. package/dist/services/HookVerifier.d.ts.map +1 -0
  65. package/dist/services/HookVerifier.js +493 -0
  66. package/dist/services/HookVerifier.js.map +1 -0
  67. package/dist/services/MemoryVersioning.d.ts +108 -0
  68. package/dist/services/MemoryVersioning.d.ts.map +1 -0
  69. package/dist/services/MemoryVersioning.js +281 -0
  70. package/dist/services/MemoryVersioning.js.map +1 -0
  71. package/dist/services/context-injector.d.ts +8 -0
  72. package/dist/services/context-injector.d.ts.map +1 -1
  73. package/dist/services/context-injector.js +19 -2
  74. package/dist/services/context-injector.js.map +1 -1
  75. package/dist/services/index.d.ts +4 -0
  76. package/dist/services/index.d.ts.map +1 -1
  77. package/dist/services/index.js +5 -0
  78. package/dist/services/index.js.map +1 -1
  79. package/dist/services/memory-router.d.ts +8 -0
  80. package/dist/services/memory-router.d.ts.map +1 -1
  81. package/dist/services/memory-router.js +19 -2
  82. package/dist/services/memory-router.js.map +1 -1
  83. package/dist/services/pattern-tracker.d.ts +13 -0
  84. package/dist/services/pattern-tracker.d.ts.map +1 -1
  85. package/dist/services/pattern-tracker.js +33 -3
  86. package/dist/services/pattern-tracker.js.map +1 -1
  87. package/dist/services/semantic-search.d.ts +4 -0
  88. package/dist/services/semantic-search.d.ts.map +1 -1
  89. package/dist/services/semantic-search.js +53 -13
  90. package/dist/services/semantic-search.js.map +1 -1
  91. package/dist/types/index.d.ts +1 -0
  92. package/dist/types/index.d.ts.map +1 -1
  93. package/dist/types/index.js +1 -0
  94. package/dist/types/index.js.map +1 -1
  95. package/package.json +4 -1
@@ -10,4 +10,5 @@ export { onPreToolUse as cloudPreToolUse } from './cloud-pre-tool-use.js';
10
10
  export { onPostToolUse as cloudPostToolUse } from './cloud-post-tool-use.js';
11
11
  export { onSessionEnd, getSessionSummaries, getSessionStats, SessionEndEvent, SessionSummary, SessionEndResult, } from './session-end.js';
12
12
  export { ExpertReviewHook, ExpertReviewConfig, ReviewRequest, ReviewResult, getExpertReviewHook, resetExpertReviewHook, onExpertReview, } from './expert-review.js';
13
+ export { verifyStartup, type StartupReport, type VerificationResult, } from './startup-verify.js';
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAGtF,OAAO,EAAE,cAAc,IAAI,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC9E,OAAO,EAAE,YAAY,IAAI,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,aAAa,IAAI,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAG5E,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,GACf,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAGtF,OAAO,EAAE,cAAc,IAAI,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC9E,OAAO,EAAE,YAAY,IAAI,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,aAAa,IAAI,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAG5E,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,GACf,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EACL,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAA"}
@@ -14,4 +14,6 @@ export { onPostToolUse as cloudPostToolUse } from './cloud-post-tool-use.js';
14
14
  export { onSessionEnd, getSessionSummaries, getSessionStats, } from './session-end.js';
15
15
  // Expert Review hook (v2.8)
16
16
  export { ExpertReviewHook, getExpertReviewHook, resetExpertReviewHook, onExpertReview, } from './expert-review.js';
17
+ // Startup Verification hook (v2.9)
18
+ export { verifyStartup, } from './startup-verify.js';
17
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,6BAA6B;AAC7B,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAEtF,gCAAgC;AAChC,OAAO,EAAE,cAAc,IAAI,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC9E,OAAO,EAAE,YAAY,IAAI,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,aAAa,IAAI,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE5E,sCAAsC;AACtC,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,eAAe,GAIhB,MAAM,kBAAkB,CAAA;AAEzB,4BAA4B;AAC5B,OAAO,EACL,gBAAgB,EAIhB,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,GACf,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,6BAA6B;AAC7B,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAEtF,gCAAgC;AAChC,OAAO,EAAE,cAAc,IAAI,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC9E,OAAO,EAAE,YAAY,IAAI,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,aAAa,IAAI,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE5E,sCAAsC;AACtC,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,eAAe,GAIhB,MAAM,kBAAkB,CAAA;AAEzB,4BAA4B;AAC5B,OAAO,EACL,gBAAgB,EAIhB,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,GACf,MAAM,oBAAoB,CAAA;AAE3B,mCAAmC;AACnC,OAAO,EACL,aAAa,GAGd,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,31 @@
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
+ export interface VerificationResult {
16
+ service: string;
17
+ status: 'ok' | 'warn' | 'error';
18
+ message: string;
19
+ details?: string;
20
+ }
21
+ export interface StartupReport {
22
+ timestamp: string;
23
+ cwd: string;
24
+ results: VerificationResult[];
25
+ overallStatus: 'healthy' | 'degraded' | 'critical';
26
+ issues: string[];
27
+ recommendations: string[];
28
+ }
29
+ export declare function verifyStartup(cwd: string): Promise<StartupReport>;
30
+ export default verifyStartup;
31
+ //# sourceMappingURL=startup-verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-verify.d.ts","sourceRoot":"","sources":["../../src/hooks/startup-verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAWH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAAA;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,kBAAkB,EAAE,CAAA;IAC7B,aAAa,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAA;IAClD,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,eAAe,EAAE,MAAM,EAAE,CAAA;CAC1B;AAuOD,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA6EvE;AA0FD,eAAe,aAAa,CAAA"}
@@ -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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"}