@revealui/mcp 0.1.0 → 0.1.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/LICENSE +22 -0
- package/LICENSE.commercial +111 -0
- package/README.md +3 -0
- package/dist/{packages/mcp/src/adapters → adapters}/db.d.ts +1 -1
- package/dist/adapters/db.d.ts.map +1 -0
- package/dist/adapters/db.js.map +1 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js.map +1 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js.map +1 -0
- package/dist/{packages/mcp/src/hypervisor.d.ts → hypervisor.d.ts} +56 -0
- package/dist/hypervisor.d.ts.map +1 -0
- package/dist/{packages/mcp/src/hypervisor.js → hypervisor.js} +209 -1
- package/dist/hypervisor.js.map +1 -0
- package/dist/{packages/mcp/src/index.d.ts → index.d.ts} +9 -5
- package/dist/index.d.ts.map +1 -0
- package/dist/{packages/mcp/src/index.js → index.js} +8 -4
- package/dist/index.js.map +1 -0
- package/dist/{packages/mcp/src/servers → servers}/adapter.d.ts +11 -1
- package/dist/servers/adapter.d.ts.map +1 -0
- package/dist/{packages/mcp/src/servers → servers}/adapter.js +20 -4
- package/dist/servers/adapter.js.map +1 -0
- package/dist/servers/revealui-content.d.ts +21 -0
- package/dist/servers/revealui-content.d.ts.map +1 -0
- package/dist/servers/revealui-content.js +211 -0
- package/dist/servers/revealui-content.js.map +1 -0
- package/dist/servers/revealui-email.d.ts +18 -0
- package/dist/servers/revealui-email.d.ts.map +1 -0
- package/dist/servers/revealui-email.js +190 -0
- package/dist/servers/revealui-email.js.map +1 -0
- package/dist/servers/revealui-stripe.d.ts +19 -0
- package/dist/servers/revealui-stripe.d.ts.map +1 -0
- package/dist/servers/revealui-stripe.js +228 -0
- package/dist/servers/revealui-stripe.js.map +1 -0
- package/package.json +50 -11
- package/.env.example +0 -9
- package/MCP_MAINTENANCE.md +0 -265
- package/__tests__/crdt.integration.test.ts +0 -156
- package/configs/README.md +0 -77
- package/configs/claude-template.json +0 -54
- package/dist/packages/core/src/database/ssl-config.d.ts +0 -9
- package/dist/packages/core/src/database/ssl-config.d.ts.map +0 -1
- package/dist/packages/core/src/database/ssl-config.js +0 -8
- package/dist/packages/core/src/database/ssl-config.js.map +0 -1
- package/dist/packages/core/src/features.d.ts +0 -86
- package/dist/packages/core/src/features.d.ts.map +0 -1
- package/dist/packages/core/src/features.js +0 -93
- package/dist/packages/core/src/features.js.map +0 -1
- package/dist/packages/core/src/license.d.ts +0 -75
- package/dist/packages/core/src/license.d.ts.map +0 -1
- package/dist/packages/core/src/license.js +0 -174
- package/dist/packages/core/src/license.js.map +0 -1
- package/dist/packages/core/src/monitoring/alerts.d.ts +0 -118
- package/dist/packages/core/src/monitoring/alerts.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/alerts.js +0 -325
- package/dist/packages/core/src/monitoring/alerts.js.map +0 -1
- package/dist/packages/core/src/monitoring/cleanup-manager.d.ts +0 -71
- package/dist/packages/core/src/monitoring/cleanup-manager.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/cleanup-manager.js +0 -227
- package/dist/packages/core/src/monitoring/cleanup-manager.js.map +0 -1
- package/dist/packages/core/src/monitoring/health-monitor.d.ts +0 -22
- package/dist/packages/core/src/monitoring/health-monitor.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/health-monitor.js +0 -143
- package/dist/packages/core/src/monitoring/health-monitor.js.map +0 -1
- package/dist/packages/core/src/monitoring/index.d.ts +0 -14
- package/dist/packages/core/src/monitoring/index.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/index.js +0 -18
- package/dist/packages/core/src/monitoring/index.js.map +0 -1
- package/dist/packages/core/src/monitoring/process-registry.d.ts +0 -97
- package/dist/packages/core/src/monitoring/process-registry.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/process-registry.js +0 -223
- package/dist/packages/core/src/monitoring/process-registry.js.map +0 -1
- package/dist/packages/core/src/monitoring/types.d.ts +0 -231
- package/dist/packages/core/src/monitoring/types.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/types.js +0 -43
- package/dist/packages/core/src/monitoring/types.js.map +0 -1
- package/dist/packages/core/src/monitoring/zombie-detector.d.ts +0 -81
- package/dist/packages/core/src/monitoring/zombie-detector.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/zombie-detector.js +0 -232
- package/dist/packages/core/src/monitoring/zombie-detector.js.map +0 -1
- package/dist/packages/core/src/observability/logger.d.ts +0 -47
- package/dist/packages/core/src/observability/logger.d.ts.map +0 -1
- package/dist/packages/core/src/observability/logger.js +0 -141
- package/dist/packages/core/src/observability/logger.js.map +0 -1
- package/dist/packages/core/src/utils/logger-server.d.ts +0 -32
- package/dist/packages/core/src/utils/logger-server.d.ts.map +0 -1
- package/dist/packages/core/src/utils/logger-server.js +0 -69
- package/dist/packages/core/src/utils/logger-server.js.map +0 -1
- package/dist/packages/core/src/utils/request-context.d.ts +0 -143
- package/dist/packages/core/src/utils/request-context.d.ts.map +0 -1
- package/dist/packages/core/src/utils/request-context.js +0 -169
- package/dist/packages/core/src/utils/request-context.js.map +0 -1
- package/dist/packages/dev/src/code-validator/index.d.ts +0 -20
- package/dist/packages/dev/src/code-validator/index.d.ts.map +0 -1
- package/dist/packages/dev/src/code-validator/index.js +0 -20
- package/dist/packages/dev/src/code-validator/index.js.map +0 -1
- package/dist/packages/dev/src/code-validator/types.d.ts +0 -67
- package/dist/packages/dev/src/code-validator/types.d.ts.map +0 -1
- package/dist/packages/dev/src/code-validator/types.js +0 -7
- package/dist/packages/dev/src/code-validator/types.js.map +0 -1
- package/dist/packages/dev/src/code-validator/validator.d.ts +0 -48
- package/dist/packages/dev/src/code-validator/validator.d.ts.map +0 -1
- package/dist/packages/dev/src/code-validator/validator.js +0 -176
- package/dist/packages/dev/src/code-validator/validator.js.map +0 -1
- package/dist/packages/mcp/src/adapters/db.d.ts.map +0 -1
- package/dist/packages/mcp/src/adapters/db.js.map +0 -1
- package/dist/packages/mcp/src/config/index.d.ts.map +0 -1
- package/dist/packages/mcp/src/config/index.js.map +0 -1
- package/dist/packages/mcp/src/contracts.d.ts.map +0 -1
- package/dist/packages/mcp/src/contracts.js.map +0 -1
- package/dist/packages/mcp/src/hypervisor.d.ts.map +0 -1
- package/dist/packages/mcp/src/hypervisor.js.map +0 -1
- package/dist/packages/mcp/src/index.d.ts.map +0 -1
- package/dist/packages/mcp/src/index.js.map +0 -1
- package/dist/packages/mcp/src/servers/adapter.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/adapter.js.map +0 -1
- package/dist/packages/mcp/src/servers/code-validator.d.ts +0 -24
- package/dist/packages/mcp/src/servers/code-validator.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/code-validator.js +0 -156
- package/dist/packages/mcp/src/servers/code-validator.js.map +0 -1
- package/dist/packages/mcp/src/servers/neon.d.ts +0 -11
- package/dist/packages/mcp/src/servers/neon.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/neon.js +0 -90
- package/dist/packages/mcp/src/servers/neon.js.map +0 -1
- package/dist/packages/mcp/src/servers/next-devtools.d.ts +0 -11
- package/dist/packages/mcp/src/servers/next-devtools.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/next-devtools.js +0 -215
- package/dist/packages/mcp/src/servers/next-devtools.js.map +0 -1
- package/dist/packages/mcp/src/servers/playwright.d.ts +0 -11
- package/dist/packages/mcp/src/servers/playwright.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/playwright.js +0 -68
- package/dist/packages/mcp/src/servers/playwright.js.map +0 -1
- package/dist/packages/mcp/src/servers/stripe.d.ts +0 -11
- package/dist/packages/mcp/src/servers/stripe.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/stripe.js +0 -86
- package/dist/packages/mcp/src/servers/stripe.js.map +0 -1
- package/dist/packages/mcp/src/servers/supabase.d.ts +0 -11
- package/dist/packages/mcp/src/servers/supabase.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/supabase.js +0 -144
- package/dist/packages/mcp/src/servers/supabase.js.map +0 -1
- package/dist/packages/mcp/src/servers/vercel.d.ts +0 -11
- package/dist/packages/mcp/src/servers/vercel.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/vercel.js +0 -87
- package/dist/packages/mcp/src/servers/vercel.js.map +0 -1
- package/dist/packages/mcp/src/servers/vultr-test.d.ts +0 -3
- package/dist/packages/mcp/src/servers/vultr-test.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/vultr-test.js +0 -82
- package/dist/packages/mcp/src/servers/vultr-test.js.map +0 -1
- package/dist/scripts/lib/analyzers/console-analyzer.d.ts +0 -188
- package/dist/scripts/lib/analyzers/console-analyzer.d.ts.map +0 -1
- package/dist/scripts/lib/analyzers/console-analyzer.js +0 -432
- package/dist/scripts/lib/analyzers/console-analyzer.js.map +0 -1
- package/dist/scripts/lib/analyzers/index.d.ts +0 -11
- package/dist/scripts/lib/analyzers/index.d.ts.map +0 -1
- package/dist/scripts/lib/analyzers/index.js +0 -11
- package/dist/scripts/lib/analyzers/index.js.map +0 -1
- package/dist/scripts/lib/args.d.ts +0 -104
- package/dist/scripts/lib/args.d.ts.map +0 -1
- package/dist/scripts/lib/args.js +0 -304
- package/dist/scripts/lib/args.js.map +0 -1
- package/dist/scripts/lib/cache.d.ts +0 -185
- package/dist/scripts/lib/cache.d.ts.map +0 -1
- package/dist/scripts/lib/cache.js +0 -390
- package/dist/scripts/lib/cache.js.map +0 -1
- package/dist/scripts/lib/cli/dispatch.d.ts +0 -116
- package/dist/scripts/lib/cli/dispatch.d.ts.map +0 -1
- package/dist/scripts/lib/cli/dispatch.js +0 -206
- package/dist/scripts/lib/cli/dispatch.js.map +0 -1
- package/dist/scripts/lib/cli/index.d.ts +0 -10
- package/dist/scripts/lib/cli/index.d.ts.map +0 -1
- package/dist/scripts/lib/cli/index.js +0 -10
- package/dist/scripts/lib/cli/index.js.map +0 -1
- package/dist/scripts/lib/database/ssl-config.d.ts +0 -26
- package/dist/scripts/lib/database/ssl-config.d.ts.map +0 -1
- package/dist/scripts/lib/database/ssl-config.js +0 -47
- package/dist/scripts/lib/database/ssl-config.js.map +0 -1
- package/dist/scripts/lib/errors.d.ts +0 -218
- package/dist/scripts/lib/errors.d.ts.map +0 -1
- package/dist/scripts/lib/errors.js +0 -543
- package/dist/scripts/lib/errors.js.map +0 -1
- package/dist/scripts/lib/exec.d.ts +0 -107
- package/dist/scripts/lib/exec.d.ts.map +0 -1
- package/dist/scripts/lib/exec.js +0 -232
- package/dist/scripts/lib/exec.js.map +0 -1
- package/dist/scripts/lib/index.d.ts +0 -50
- package/dist/scripts/lib/index.d.ts.map +0 -1
- package/dist/scripts/lib/index.js +0 -65
- package/dist/scripts/lib/index.js.map +0 -1
- package/dist/scripts/lib/logger.d.ts +0 -50
- package/dist/scripts/lib/logger.d.ts.map +0 -1
- package/dist/scripts/lib/logger.js +0 -159
- package/dist/scripts/lib/logger.js.map +0 -1
- package/dist/scripts/lib/output.d.ts +0 -149
- package/dist/scripts/lib/output.d.ts.map +0 -1
- package/dist/scripts/lib/output.js +0 -263
- package/dist/scripts/lib/output.js.map +0 -1
- package/dist/scripts/lib/parallel.d.ts +0 -164
- package/dist/scripts/lib/parallel.d.ts.map +0 -1
- package/dist/scripts/lib/parallel.js +0 -355
- package/dist/scripts/lib/parallel.js.map +0 -1
- package/dist/scripts/lib/paths.d.ts +0 -92
- package/dist/scripts/lib/paths.d.ts.map +0 -1
- package/dist/scripts/lib/paths.js +0 -171
- package/dist/scripts/lib/paths.js.map +0 -1
- package/dist/scripts/lib/state/adapters/memory.d.ts +0 -42
- package/dist/scripts/lib/state/adapters/memory.d.ts.map +0 -1
- package/dist/scripts/lib/state/adapters/memory.js +0 -110
- package/dist/scripts/lib/state/adapters/memory.js.map +0 -1
- package/dist/scripts/lib/state/adapters/pglite.d.ts +0 -46
- package/dist/scripts/lib/state/adapters/pglite.d.ts.map +0 -1
- package/dist/scripts/lib/state/adapters/pglite.js +0 -256
- package/dist/scripts/lib/state/adapters/pglite.js.map +0 -1
- package/dist/scripts/lib/state/index.d.ts +0 -16
- package/dist/scripts/lib/state/index.d.ts.map +0 -1
- package/dist/scripts/lib/state/index.js +0 -16
- package/dist/scripts/lib/state/index.js.map +0 -1
- package/dist/scripts/lib/state/types.d.ts +0 -111
- package/dist/scripts/lib/state/types.d.ts.map +0 -1
- package/dist/scripts/lib/state/types.js +0 -8
- package/dist/scripts/lib/state/types.js.map +0 -1
- package/dist/scripts/lib/state/workflow-state.d.ts +0 -110
- package/dist/scripts/lib/state/workflow-state.d.ts.map +0 -1
- package/dist/scripts/lib/state/workflow-state.js +0 -331
- package/dist/scripts/lib/state/workflow-state.js.map +0 -1
- package/dist/scripts/lib/telemetry.d.ts +0 -194
- package/dist/scripts/lib/telemetry.d.ts.map +0 -1
- package/dist/scripts/lib/telemetry.js +0 -394
- package/dist/scripts/lib/telemetry.js.map +0 -1
- package/dist/scripts/lib/utils.d.ts +0 -270
- package/dist/scripts/lib/utils.d.ts.map +0 -1
- package/dist/scripts/lib/utils.js +0 -473
- package/dist/scripts/lib/utils.js.map +0 -1
- package/dist/scripts/lib/validation/database.d.ts +0 -83
- package/dist/scripts/lib/validation/database.d.ts.map +0 -1
- package/dist/scripts/lib/validation/database.js +0 -199
- package/dist/scripts/lib/validation/database.js.map +0 -1
- package/dist/scripts/lib/validation/env.d.ts +0 -80
- package/dist/scripts/lib/validation/env.d.ts.map +0 -1
- package/dist/scripts/lib/validation/env.js +0 -246
- package/dist/scripts/lib/validation/env.js.map +0 -1
- package/dist/scripts/lib/validation/index.d.ts +0 -16
- package/dist/scripts/lib/validation/index.d.ts.map +0 -1
- package/dist/scripts/lib/validation/index.js +0 -16
- package/dist/scripts/lib/validation/index.js.map +0 -1
- package/dist/scripts/lib/validation/post-execution.d.ts +0 -74
- package/dist/scripts/lib/validation/post-execution.d.ts.map +0 -1
- package/dist/scripts/lib/validation/post-execution.js +0 -110
- package/dist/scripts/lib/validation/post-execution.js.map +0 -1
- package/dist/scripts/lib/validation/pre-execution.d.ts +0 -165
- package/dist/scripts/lib/validation/pre-execution.d.ts.map +0 -1
- package/dist/scripts/lib/validation/pre-execution.js +0 -466
- package/dist/scripts/lib/validation/pre-execution.js.map +0 -1
- package/dist/scripts/lib/validators/documentation-validator.d.ts +0 -242
- package/dist/scripts/lib/validators/documentation-validator.d.ts.map +0 -1
- package/dist/scripts/lib/validators/documentation-validator.js +0 -584
- package/dist/scripts/lib/validators/documentation-validator.js.map +0 -1
- package/dist/scripts/lib/validators/index.d.ts +0 -11
- package/dist/scripts/lib/validators/index.d.ts.map +0 -1
- package/dist/scripts/lib/validators/index.js +0 -11
- package/dist/scripts/lib/validators/index.js.map +0 -1
- package/docker-compose.yml +0 -46
- package/docs/INDEX.md +0 -88
- package/docs/README.md +0 -774
- package/docs/SETUP.md +0 -264
- package/docs/servers/code-validator.md +0 -586
- package/eslint.config.js +0 -7
- package/migrations/0001_add_crdt_columns.sql +0 -8
- package/migrations/0001_rollback.sql +0 -6
- package/migrations/005_performance_indexes.sql +0 -190
- package/migrations/backfill_crdt_meta.js +0 -45
- package/src/__tests__/hypervisor.test.ts +0 -212
- package/src/adapters/db.ts +0 -180
- package/src/config/config.json +0 -49
- package/src/config/index.ts +0 -30
- package/src/contracts.ts +0 -221
- package/src/hypervisor.ts +0 -464
- package/src/index.ts +0 -87
- package/src/servers/adapter.ts +0 -643
- package/src/servers/code-validator.ts +0 -188
- package/src/servers/neon.ts +0 -103
- package/src/servers/next-devtools.ts +0 -230
- package/src/servers/playwright.ts +0 -77
- package/src/servers/stripe.ts +0 -99
- package/src/servers/supabase.ts +0 -161
- package/src/servers/vercel.ts +0 -100
- package/src/servers/vultr-test.ts +0 -97
- package/tsconfig.json +0 -12
- package/vitest.config.ts +0 -22
- /package/dist/{packages/mcp/src/adapters → adapters}/db.js +0 -0
- /package/dist/{packages/mcp/src/config → config}/index.d.ts +0 -0
- /package/dist/{packages/mcp/src/config → config}/index.js +0 -0
- /package/dist/{packages/mcp/src/contracts.d.ts → contracts.d.ts} +0 -0
- /package/dist/{packages/mcp/src/contracts.js → contracts.js} +0 -0
|
@@ -1,390 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Build caching utilities for improved performance.
|
|
3
|
-
*
|
|
4
|
-
* Provides file-based caching with:
|
|
5
|
-
* - Content-based cache keys (hashing)
|
|
6
|
-
* - TTL (time-to-live) support
|
|
7
|
-
* - Cache statistics and metrics
|
|
8
|
-
* - Automatic cleanup of stale entries
|
|
9
|
-
*
|
|
10
|
-
* @dependencies
|
|
11
|
-
* - node:crypto - Hash generation for cache keys
|
|
12
|
-
* - node:fs/promises - File system operations for cache storage
|
|
13
|
-
* - node:path - Path manipulation utilities
|
|
14
|
-
* - fast-glob - File pattern matching for cache key generation
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* ```typescript
|
|
18
|
-
* import { BuildCache } from './cache.js'
|
|
19
|
-
*
|
|
20
|
-
* const cache = new BuildCache({ ttl: 3600000 }) // 1 hour
|
|
21
|
-
*
|
|
22
|
-
* const key = await cache.getCacheKey(['src/**\/*.ts'])
|
|
23
|
-
* if (await cache.isCached(key)) {
|
|
24
|
-
* await cache.restore(key, 'dist/')
|
|
25
|
-
* } else {
|
|
26
|
-
* // Build...
|
|
27
|
-
* await cache.save(key, 'dist/')
|
|
28
|
-
* }
|
|
29
|
-
*
|
|
30
|
-
* const stats = cache.getStats()
|
|
31
|
-
* console.log(`Cache hit rate: ${stats.hitRate}%`)
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
import { createHash } from 'node:crypto';
|
|
35
|
-
import { cp, mkdir, readdir, readFile, rm, stat, writeFile } from 'node:fs/promises';
|
|
36
|
-
import { join, relative } from 'node:path';
|
|
37
|
-
import fg from 'fast-glob';
|
|
38
|
-
import { ErrorCode, ScriptError } from './errors.js';
|
|
39
|
-
import { createLogger } from './logger.js';
|
|
40
|
-
import { getProjectRoot } from './paths.js';
|
|
41
|
-
import { fileExists, formatBytes, formatDuration } from './utils.js';
|
|
42
|
-
const logger = createLogger({ prefix: 'Cache' });
|
|
43
|
-
/**
|
|
44
|
-
* Build cache for improved performance.
|
|
45
|
-
*/
|
|
46
|
-
export class BuildCache {
|
|
47
|
-
cacheDir;
|
|
48
|
-
ttl;
|
|
49
|
-
verbose;
|
|
50
|
-
maxSize;
|
|
51
|
-
stats;
|
|
52
|
-
projectRoot = null;
|
|
53
|
-
constructor(options = {}) {
|
|
54
|
-
this.cacheDir = options.cacheDir ?? '.cache/build';
|
|
55
|
-
this.ttl = options.ttl ?? 86_400_000; // 24 hours
|
|
56
|
-
this.verbose = options.verbose ?? false;
|
|
57
|
-
this.maxSize = options.maxSize ?? 1_073_741_824; // 1 GB
|
|
58
|
-
this.stats = { hits: 0, misses: 0 };
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Get project root directory.
|
|
62
|
-
*/
|
|
63
|
-
async getRoot() {
|
|
64
|
-
if (!this.projectRoot) {
|
|
65
|
-
this.projectRoot = await getProjectRoot(import.meta.url);
|
|
66
|
-
}
|
|
67
|
-
return this.projectRoot;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Get absolute cache directory path.
|
|
71
|
-
*/
|
|
72
|
-
async getCacheDir() {
|
|
73
|
-
const root = await this.getRoot();
|
|
74
|
-
return join(root, this.cacheDir);
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Generate cache key from file patterns.
|
|
78
|
-
*
|
|
79
|
-
* Creates a hash of file contents for content-based caching.
|
|
80
|
-
*
|
|
81
|
-
* @param patterns - Glob patterns to include
|
|
82
|
-
* @returns Cache key (SHA256 hash)
|
|
83
|
-
*/
|
|
84
|
-
async getCacheKey(patterns) {
|
|
85
|
-
const root = await this.getRoot();
|
|
86
|
-
const hash = createHash('sha256');
|
|
87
|
-
// Resolve all patterns to file paths
|
|
88
|
-
const allFiles = await fg(patterns, {
|
|
89
|
-
cwd: root,
|
|
90
|
-
absolute: true,
|
|
91
|
-
onlyFiles: true,
|
|
92
|
-
ignore: ['**/node_modules/**', '**/.git/**', '**/dist/**', '**/.next/**'],
|
|
93
|
-
});
|
|
94
|
-
// Sort for consistent hashing
|
|
95
|
-
allFiles.sort();
|
|
96
|
-
if (this.verbose) {
|
|
97
|
-
logger.info(`Hashing ${allFiles.length} files for cache key`);
|
|
98
|
-
}
|
|
99
|
-
// Hash file contents
|
|
100
|
-
for (const file of allFiles) {
|
|
101
|
-
const content = await readFile(file);
|
|
102
|
-
const relativePath = relative(root, file);
|
|
103
|
-
hash.update(relativePath); // Include path in hash
|
|
104
|
-
hash.update(content);
|
|
105
|
-
}
|
|
106
|
-
const key = hash.digest('hex');
|
|
107
|
-
if (this.verbose) {
|
|
108
|
-
logger.info(`Generated cache key: ${key}`);
|
|
109
|
-
}
|
|
110
|
-
return key;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Check if cache entry exists and is valid.
|
|
114
|
-
*
|
|
115
|
-
* @param key - Cache key
|
|
116
|
-
* @returns True if cached and not expired
|
|
117
|
-
*/
|
|
118
|
-
async isCached(key) {
|
|
119
|
-
const cacheDir = await this.getCacheDir();
|
|
120
|
-
const metadataPath = join(cacheDir, key, 'metadata.json');
|
|
121
|
-
if (!(await fileExists(metadataPath))) {
|
|
122
|
-
this.stats.misses++;
|
|
123
|
-
if (this.verbose) {
|
|
124
|
-
logger.info(`Cache miss: ${key}`);
|
|
125
|
-
}
|
|
126
|
-
return false;
|
|
127
|
-
}
|
|
128
|
-
try {
|
|
129
|
-
const content = await readFile(metadataPath, 'utf-8');
|
|
130
|
-
const entry = JSON.parse(content);
|
|
131
|
-
// Check TTL
|
|
132
|
-
const age = Date.now() - entry.timestamp;
|
|
133
|
-
if (age > this.ttl) {
|
|
134
|
-
if (this.verbose) {
|
|
135
|
-
logger.info(`Cache expired: ${key} (age: ${formatDuration(age)})`);
|
|
136
|
-
}
|
|
137
|
-
// Clean up expired entry
|
|
138
|
-
await this.delete(key);
|
|
139
|
-
this.stats.misses++;
|
|
140
|
-
return false;
|
|
141
|
-
}
|
|
142
|
-
this.stats.hits++;
|
|
143
|
-
if (this.verbose) {
|
|
144
|
-
logger.success(`Cache hit: ${key} (age: ${formatDuration(age)})`);
|
|
145
|
-
}
|
|
146
|
-
return true;
|
|
147
|
-
}
|
|
148
|
-
catch (error) {
|
|
149
|
-
logger.warn(`Invalid cache metadata for ${key}: ${error}`);
|
|
150
|
-
this.stats.misses++;
|
|
151
|
-
return false;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Restore cached files to destination.
|
|
156
|
-
*
|
|
157
|
-
* @param key - Cache key
|
|
158
|
-
* @param dest - Destination directory
|
|
159
|
-
*/
|
|
160
|
-
async restore(key, dest) {
|
|
161
|
-
const root = await this.getRoot();
|
|
162
|
-
const cacheDir = await this.getCacheDir();
|
|
163
|
-
const entryDir = join(cacheDir, key);
|
|
164
|
-
const metadataPath = join(entryDir, 'metadata.json');
|
|
165
|
-
if (!(await fileExists(metadataPath))) {
|
|
166
|
-
throw new ScriptError(`Cache entry not found: ${key}`, ErrorCode.NOT_FOUND);
|
|
167
|
-
}
|
|
168
|
-
const content = await readFile(metadataPath, 'utf-8');
|
|
169
|
-
const entry = JSON.parse(content);
|
|
170
|
-
const destPath = join(root, dest);
|
|
171
|
-
const cachedPath = join(entryDir, 'data');
|
|
172
|
-
if (this.verbose) {
|
|
173
|
-
logger.info(`Restoring cache ${key} to ${dest}`);
|
|
174
|
-
}
|
|
175
|
-
// Copy cached files to destination
|
|
176
|
-
await mkdir(destPath, { recursive: true });
|
|
177
|
-
await cp(cachedPath, destPath, { recursive: true });
|
|
178
|
-
if (this.verbose) {
|
|
179
|
-
logger.success(`Restored ${formatBytes(entry.size)} from cache`);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Save files to cache.
|
|
184
|
-
*
|
|
185
|
-
* @param key - Cache key
|
|
186
|
-
* @param source - Source directory to cache
|
|
187
|
-
* @param sourcePaths - Original source paths (for metadata)
|
|
188
|
-
*/
|
|
189
|
-
async save(key, source, sourcePaths = []) {
|
|
190
|
-
const root = await this.getRoot();
|
|
191
|
-
const cacheDir = await this.getCacheDir();
|
|
192
|
-
const entryDir = join(cacheDir, key);
|
|
193
|
-
const metadataPath = join(entryDir, 'metadata.json');
|
|
194
|
-
const cachedPath = join(entryDir, 'data');
|
|
195
|
-
const sourcePath = join(root, source);
|
|
196
|
-
if (!(await fileExists(sourcePath))) {
|
|
197
|
-
throw new ScriptError(`Source directory not found: ${source}`, ErrorCode.NOT_FOUND);
|
|
198
|
-
}
|
|
199
|
-
if (this.verbose) {
|
|
200
|
-
logger.info(`Saving cache ${key} from ${source}`);
|
|
201
|
-
}
|
|
202
|
-
// Check cache size limit before saving
|
|
203
|
-
const currentSize = await this.getTotalSize();
|
|
204
|
-
const sourceSize = await this.getDirectorySize(sourcePath);
|
|
205
|
-
if (this.maxSize > 0 && currentSize + sourceSize > this.maxSize) {
|
|
206
|
-
logger.warn('Cache size limit reached, cleaning up oldest entries');
|
|
207
|
-
await this.cleanup({ maxSize: this.maxSize - sourceSize });
|
|
208
|
-
}
|
|
209
|
-
// Create cache entry directory
|
|
210
|
-
await mkdir(entryDir, { recursive: true });
|
|
211
|
-
// Copy files to cache
|
|
212
|
-
await cp(sourcePath, cachedPath, { recursive: true });
|
|
213
|
-
// Save metadata
|
|
214
|
-
const entry = {
|
|
215
|
-
key,
|
|
216
|
-
timestamp: Date.now(),
|
|
217
|
-
size: sourceSize,
|
|
218
|
-
sources: sourcePaths,
|
|
219
|
-
destination: source,
|
|
220
|
-
};
|
|
221
|
-
await writeFile(metadataPath, JSON.stringify(entry, null, 2));
|
|
222
|
-
if (this.verbose) {
|
|
223
|
-
logger.success(`Saved ${formatBytes(sourceSize)} to cache`);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Delete cache entry.
|
|
228
|
-
*
|
|
229
|
-
* @param key - Cache key
|
|
230
|
-
*/
|
|
231
|
-
async delete(key) {
|
|
232
|
-
const cacheDir = await this.getCacheDir();
|
|
233
|
-
const entryDir = join(cacheDir, key);
|
|
234
|
-
if (await fileExists(entryDir)) {
|
|
235
|
-
await rm(entryDir, { recursive: true, force: true });
|
|
236
|
-
if (this.verbose) {
|
|
237
|
-
logger.info(`Deleted cache entry: ${key}`);
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Clear all cache entries.
|
|
243
|
-
*/
|
|
244
|
-
async clear() {
|
|
245
|
-
const cacheDir = await this.getCacheDir();
|
|
246
|
-
if (await fileExists(cacheDir)) {
|
|
247
|
-
await rm(cacheDir, { recursive: true, force: true });
|
|
248
|
-
logger.info('Cache cleared');
|
|
249
|
-
}
|
|
250
|
-
// Reset stats
|
|
251
|
-
this.stats.hits = 0;
|
|
252
|
-
this.stats.misses = 0;
|
|
253
|
-
}
|
|
254
|
-
/**
|
|
255
|
-
* Clean up cache entries based on criteria.
|
|
256
|
-
*
|
|
257
|
-
* @param options - Cleanup options
|
|
258
|
-
*/
|
|
259
|
-
async cleanup(options = {}) {
|
|
260
|
-
const cacheDir = await this.getCacheDir();
|
|
261
|
-
if (!(await fileExists(cacheDir))) {
|
|
262
|
-
return;
|
|
263
|
-
}
|
|
264
|
-
const entries = await this.listEntries();
|
|
265
|
-
let deletedCount = 0;
|
|
266
|
-
let freedSize = 0;
|
|
267
|
-
// Sort by timestamp (oldest first)
|
|
268
|
-
entries.sort((a, b) => a.timestamp - b.timestamp);
|
|
269
|
-
// Delete by age
|
|
270
|
-
if (options.olderThan) {
|
|
271
|
-
const cutoff = Date.now() - options.olderThan;
|
|
272
|
-
for (const entry of entries) {
|
|
273
|
-
if (entry.timestamp < cutoff) {
|
|
274
|
-
await this.delete(entry.key);
|
|
275
|
-
deletedCount++;
|
|
276
|
-
freedSize += entry.size;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
// Delete by size limit
|
|
281
|
-
if (options.maxSize) {
|
|
282
|
-
let currentSize = await this.getTotalSize();
|
|
283
|
-
for (const entry of entries) {
|
|
284
|
-
if (currentSize <= options.maxSize) {
|
|
285
|
-
break;
|
|
286
|
-
}
|
|
287
|
-
await this.delete(entry.key);
|
|
288
|
-
currentSize -= entry.size;
|
|
289
|
-
deletedCount++;
|
|
290
|
-
freedSize += entry.size;
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
if (deletedCount > 0) {
|
|
294
|
-
logger.info(`Cleaned up ${deletedCount} cache entries, freed ${formatBytes(freedSize)}`);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* List all cache entries.
|
|
299
|
-
*
|
|
300
|
-
* @returns Array of cache entries
|
|
301
|
-
*/
|
|
302
|
-
async listEntries() {
|
|
303
|
-
const cacheDir = await this.getCacheDir();
|
|
304
|
-
if (!(await fileExists(cacheDir))) {
|
|
305
|
-
return [];
|
|
306
|
-
}
|
|
307
|
-
const entries = [];
|
|
308
|
-
const dirs = await readdir(cacheDir);
|
|
309
|
-
for (const dir of dirs) {
|
|
310
|
-
const metadataPath = join(cacheDir, dir, 'metadata.json');
|
|
311
|
-
if (await fileExists(metadataPath)) {
|
|
312
|
-
try {
|
|
313
|
-
const content = await readFile(metadataPath, 'utf-8');
|
|
314
|
-
const entry = JSON.parse(content);
|
|
315
|
-
entries.push(entry);
|
|
316
|
-
}
|
|
317
|
-
catch (error) {
|
|
318
|
-
logger.warn(`Invalid metadata in ${dir}: ${error}`);
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
return entries;
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* Get cache statistics.
|
|
326
|
-
*
|
|
327
|
-
* @returns Cache stats
|
|
328
|
-
*/
|
|
329
|
-
async getStats() {
|
|
330
|
-
const entries = await this.listEntries();
|
|
331
|
-
const totalSize = entries.reduce((sum, entry) => sum + entry.size, 0);
|
|
332
|
-
const total = this.stats.hits + this.stats.misses;
|
|
333
|
-
const hitRate = total > 0 ? (this.stats.hits / total) * 100 : 0;
|
|
334
|
-
return {
|
|
335
|
-
hits: this.stats.hits,
|
|
336
|
-
misses: this.stats.misses,
|
|
337
|
-
hitRate: Math.round(hitRate * 100) / 100,
|
|
338
|
-
entries: entries.length,
|
|
339
|
-
totalSize,
|
|
340
|
-
formattedSize: formatBytes(totalSize),
|
|
341
|
-
};
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Get total cache size in bytes.
|
|
345
|
-
*/
|
|
346
|
-
async getTotalSize() {
|
|
347
|
-
const entries = await this.listEntries();
|
|
348
|
-
return entries.reduce((sum, entry) => sum + entry.size, 0);
|
|
349
|
-
}
|
|
350
|
-
/**
|
|
351
|
-
* Get directory size in bytes.
|
|
352
|
-
*/
|
|
353
|
-
async getDirectorySize(dir) {
|
|
354
|
-
let size = 0;
|
|
355
|
-
try {
|
|
356
|
-
const entries = await readdir(dir, { withFileTypes: true });
|
|
357
|
-
for (const entry of entries) {
|
|
358
|
-
const fullPath = join(dir, entry.name);
|
|
359
|
-
if (entry.isDirectory()) {
|
|
360
|
-
size += await this.getDirectorySize(fullPath);
|
|
361
|
-
}
|
|
362
|
-
else if (entry.isFile()) {
|
|
363
|
-
const stats = await stat(fullPath);
|
|
364
|
-
size += stats.size;
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
catch (error) {
|
|
369
|
-
logger.warn(`Error calculating directory size for ${dir}: ${error}`);
|
|
370
|
-
}
|
|
371
|
-
return size;
|
|
372
|
-
}
|
|
373
|
-
/**
|
|
374
|
-
* Reset statistics.
|
|
375
|
-
*/
|
|
376
|
-
resetStats() {
|
|
377
|
-
this.stats.hits = 0;
|
|
378
|
-
this.stats.misses = 0;
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
/**
|
|
382
|
-
* Create a new build cache instance.
|
|
383
|
-
*
|
|
384
|
-
* @param options - Cache options
|
|
385
|
-
* @returns BuildCache instance
|
|
386
|
-
*/
|
|
387
|
-
export function createCache(options) {
|
|
388
|
-
return new BuildCache(options);
|
|
389
|
-
}
|
|
390
|
-
//# sourceMappingURL=cache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../../scripts/lib/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unified CLI Command Dispatcher
|
|
3
|
-
*
|
|
4
|
-
* Consolidates the two different dispatch patterns used across CLIs:
|
|
5
|
-
* 1. Import pattern: import(scriptPath) - Used by setup.ts
|
|
6
|
-
* 2. Subprocess pattern: execCommand('pnpm tsx', scriptPath) - Used by analyze.ts, maintain.ts
|
|
7
|
-
*
|
|
8
|
-
* Provides a single, consistent API for dispatching to script files.
|
|
9
|
-
*
|
|
10
|
-
* @dependencies
|
|
11
|
-
* - scripts/lib/args.ts - ParsedArgs type definition
|
|
12
|
-
* - scripts/lib/errors.ts - Error handling with ErrorCode
|
|
13
|
-
* - scripts/lib/exec.ts - Command execution for subprocess mode
|
|
14
|
-
*/
|
|
15
|
-
import type { ParsedArgs } from '../args.js';
|
|
16
|
-
/**
|
|
17
|
-
* Dispatch mode
|
|
18
|
-
* - 'import': Loads and executes script in same process (faster, shares context)
|
|
19
|
-
* - 'subprocess': Spawns new process with pnpm tsx (isolated, better for long-running tasks)
|
|
20
|
-
* - 'auto': Chooses best mode based on script characteristics (default)
|
|
21
|
-
*/
|
|
22
|
-
export type DispatchMode = 'import' | 'subprocess' | 'auto';
|
|
23
|
-
/**
|
|
24
|
-
* Options for command dispatch
|
|
25
|
-
*/
|
|
26
|
-
export interface DispatchOptions {
|
|
27
|
-
/** Dispatch mode (default: 'auto') */
|
|
28
|
-
mode?: DispatchMode;
|
|
29
|
-
/** Working directory for subprocess mode */
|
|
30
|
-
cwd?: string;
|
|
31
|
-
/** Additional arguments to pass to the script */
|
|
32
|
-
args?: ParsedArgs;
|
|
33
|
-
/** Environment variables for subprocess mode */
|
|
34
|
-
env?: Record<string, string>;
|
|
35
|
-
/** Timeout for subprocess in milliseconds */
|
|
36
|
-
timeout?: number;
|
|
37
|
-
/** Whether to capture output (subprocess mode only) */
|
|
38
|
-
captureOutput?: boolean;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Result from dispatching a command
|
|
42
|
-
*/
|
|
43
|
-
export interface DispatchResult {
|
|
44
|
-
/** Whether the command succeeded */
|
|
45
|
-
success: boolean;
|
|
46
|
-
/** Output from the command (if captureOutput was true) */
|
|
47
|
-
output?: string;
|
|
48
|
-
/** Error message if command failed */
|
|
49
|
-
error?: string;
|
|
50
|
-
/** Exit code (subprocess mode only) */
|
|
51
|
-
exitCode?: number;
|
|
52
|
-
/** Dispatch mode that was used */
|
|
53
|
-
mode: DispatchMode;
|
|
54
|
-
/** Script path that was executed */
|
|
55
|
-
scriptPath: string;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Dispatch a CLI command to its implementation script
|
|
59
|
-
*
|
|
60
|
-
* This is the main entry point for command dispatch. It automatically
|
|
61
|
-
* chooses the best dispatch mode based on the script characteristics.
|
|
62
|
-
*
|
|
63
|
-
* @param scriptPath - Absolute or relative path to the script file
|
|
64
|
-
* @param options - Dispatch options
|
|
65
|
-
* @returns Result of the dispatch operation
|
|
66
|
-
*
|
|
67
|
-
* @example
|
|
68
|
-
* ```typescript
|
|
69
|
-
* // Auto mode (recommended)
|
|
70
|
-
* const result = await dispatchCommand('scripts/analyze/console-usage.ts')
|
|
71
|
-
*
|
|
72
|
-
* // Force subprocess mode
|
|
73
|
-
* const result = await dispatchCommand('scripts/build/production.ts', {
|
|
74
|
-
* mode: 'subprocess',
|
|
75
|
-
* args: { flags: { verbose: true } }
|
|
76
|
-
* })
|
|
77
|
-
*
|
|
78
|
-
* // Force import mode (faster for quick scripts)
|
|
79
|
-
* const result = await dispatchCommand('scripts/validate/types.ts', {
|
|
80
|
-
* mode: 'import'
|
|
81
|
-
* })
|
|
82
|
-
* ```
|
|
83
|
-
*/
|
|
84
|
-
export declare function dispatchCommand(scriptPath: string, options?: DispatchOptions): Promise<DispatchResult>;
|
|
85
|
-
/**
|
|
86
|
-
* Helper to dispatch and throw on failure.
|
|
87
|
-
* Useful when you want to fail fast on command errors instead of checking results.
|
|
88
|
-
*
|
|
89
|
-
* @param scriptPath - Absolute or relative path to the script file
|
|
90
|
-
* @param options - Dispatch options
|
|
91
|
-
* @throws {ScriptError} If the command fails
|
|
92
|
-
*
|
|
93
|
-
* @example
|
|
94
|
-
* ```typescript
|
|
95
|
-
* import { ErrorCode } from '../errors.js'
|
|
96
|
-
*
|
|
97
|
-
* // Will throw if validation fails
|
|
98
|
-
* await dispatchOrThrow('scripts/validate/typescript.ts')
|
|
99
|
-
*
|
|
100
|
-
* // Catch and handle errors
|
|
101
|
-
* try {
|
|
102
|
-
* await dispatchOrThrow('scripts/build/production.ts', {
|
|
103
|
-
* mode: 'subprocess',
|
|
104
|
-
* timeout: 60000
|
|
105
|
-
* })
|
|
106
|
-
* console.log('Build succeeded!')
|
|
107
|
-
* } catch (error) {
|
|
108
|
-
* console.error('Build failed:', error.message)
|
|
109
|
-
* process.exit(ErrorCode.EXECUTION_ERROR)
|
|
110
|
-
* }
|
|
111
|
-
* ```
|
|
112
|
-
*
|
|
113
|
-
* @see {@link dispatchCommand} for non-throwing version
|
|
114
|
-
*/
|
|
115
|
-
export declare function dispatchOrThrow(scriptPath: string, options?: DispatchOptions): Promise<void>;
|
|
116
|
-
//# sourceMappingURL=dispatch.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../../../../scripts/lib/cli/dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAI5C;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,YAAY,GAAG,MAAM,CAAA;AAE3D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,iDAAiD;IACjD,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,uDAAuD;IACvD,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAA;IAChB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kCAAkC;IAClC,IAAI,EAAE,YAAY,CAAA;IAClB,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAA;CACnB;AA+GD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,CAiBzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|