@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,149 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dual-Mode Output System
|
|
3
|
-
*
|
|
4
|
-
* Provides unified output handling for CLI scripts that supports both
|
|
5
|
-
* human-readable (colored, formatted) and machine-readable (JSON) modes.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* const output = new OutputHandler(args.flags.json ? 'json' : 'human')
|
|
10
|
-
*
|
|
11
|
-
* // Progress messages (suppressed in JSON mode)
|
|
12
|
-
* output.progress('Processing files...')
|
|
13
|
-
*
|
|
14
|
-
* // Final result (formatted for humans, JSON for agents)
|
|
15
|
-
* output.result({
|
|
16
|
-
* success: true,
|
|
17
|
-
* data: { workflows: [...] },
|
|
18
|
-
* metadata: { duration: 123 }
|
|
19
|
-
* })
|
|
20
|
-
* ```
|
|
21
|
-
*
|
|
22
|
-
* @dependencies
|
|
23
|
-
* - scripts/lib/logger.ts - Colored console logging utilities
|
|
24
|
-
*/
|
|
25
|
-
import { type Logger } from './logger.js';
|
|
26
|
-
export type OutputMode = 'human' | 'json';
|
|
27
|
-
export interface ScriptOutput<T = unknown> {
|
|
28
|
-
/** Whether the operation succeeded */
|
|
29
|
-
success: boolean;
|
|
30
|
-
/** Result data (if successful) */
|
|
31
|
-
data?: T;
|
|
32
|
-
/** Error information (if failed) */
|
|
33
|
-
error?: OutputErrorInfo;
|
|
34
|
-
/** Optional metadata about the operation */
|
|
35
|
-
metadata?: OutputMetadata;
|
|
36
|
-
}
|
|
37
|
-
export interface OutputErrorInfo {
|
|
38
|
-
/** Error code (maps to exit code) */
|
|
39
|
-
code: string;
|
|
40
|
-
/** Human-readable error message */
|
|
41
|
-
message: string;
|
|
42
|
-
/** Additional error details */
|
|
43
|
-
details?: Record<string, unknown>;
|
|
44
|
-
}
|
|
45
|
-
export interface OutputMetadata {
|
|
46
|
-
/** Operation duration in milliseconds */
|
|
47
|
-
duration?: number;
|
|
48
|
-
/** ISO timestamp of operation */
|
|
49
|
-
timestamp?: string;
|
|
50
|
-
/** Number of items processed */
|
|
51
|
-
count?: number;
|
|
52
|
-
/** Additional metadata */
|
|
53
|
-
[key: string]: unknown;
|
|
54
|
-
}
|
|
55
|
-
export interface OutputHandlerOptions {
|
|
56
|
-
/** Output mode: 'human' for colored output, 'json' for machine-readable */
|
|
57
|
-
mode: OutputMode;
|
|
58
|
-
/** Logger options for human mode */
|
|
59
|
-
loggerPrefix?: string;
|
|
60
|
-
/** Whether to include timestamps in human output */
|
|
61
|
-
timestamps?: boolean;
|
|
62
|
-
/** Stream to write JSON output to (default: stdout) */
|
|
63
|
-
jsonStream?: NodeJS.WritableStream;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Dual-mode output handler for CLI scripts
|
|
67
|
-
*/
|
|
68
|
-
export declare class OutputHandler {
|
|
69
|
-
private mode;
|
|
70
|
-
private logger;
|
|
71
|
-
private jsonStream;
|
|
72
|
-
private startTime;
|
|
73
|
-
constructor(options: OutputHandlerOptions | OutputMode);
|
|
74
|
-
/**
|
|
75
|
-
* Get the current output mode
|
|
76
|
-
*/
|
|
77
|
-
getMode(): OutputMode;
|
|
78
|
-
/**
|
|
79
|
-
* Check if in JSON mode
|
|
80
|
-
*/
|
|
81
|
-
isJsonMode(): boolean;
|
|
82
|
-
/**
|
|
83
|
-
* Log a progress message (suppressed in JSON mode)
|
|
84
|
-
*/
|
|
85
|
-
progress(message: string): void;
|
|
86
|
-
/**
|
|
87
|
-
* Log a debug message (suppressed in JSON mode)
|
|
88
|
-
*/
|
|
89
|
-
debug(message: string): void;
|
|
90
|
-
/**
|
|
91
|
-
* Log a warning (suppressed in JSON mode)
|
|
92
|
-
*/
|
|
93
|
-
warn(message: string): void;
|
|
94
|
-
/**
|
|
95
|
-
* Show a progress bar (suppressed in JSON mode)
|
|
96
|
-
*/
|
|
97
|
-
progressBar(current: number, total: number, label?: string): void;
|
|
98
|
-
/**
|
|
99
|
-
* Print a header (suppressed in JSON mode)
|
|
100
|
-
*/
|
|
101
|
-
header(title: string): void;
|
|
102
|
-
/**
|
|
103
|
-
* Print a divider line (suppressed in JSON mode)
|
|
104
|
-
*/
|
|
105
|
-
divider(): void;
|
|
106
|
-
/**
|
|
107
|
-
* Output the final result
|
|
108
|
-
*
|
|
109
|
-
* In human mode: Formats and prints using logger
|
|
110
|
-
* In JSON mode: Outputs structured JSON to stdout
|
|
111
|
-
*/
|
|
112
|
-
result<T>(output: ScriptOutput<T>): void;
|
|
113
|
-
/**
|
|
114
|
-
* Output a successful result
|
|
115
|
-
*/
|
|
116
|
-
success<T>(data: T, metadata?: OutputMetadata): void;
|
|
117
|
-
/**
|
|
118
|
-
* Output an error result
|
|
119
|
-
*/
|
|
120
|
-
error(error: OutputErrorInfo, metadata?: OutputMetadata): void;
|
|
121
|
-
/**
|
|
122
|
-
* Output raw data (for list/table commands)
|
|
123
|
-
*/
|
|
124
|
-
data<T>(items: T[], options?: {
|
|
125
|
-
format?: 'table' | 'list';
|
|
126
|
-
}): void;
|
|
127
|
-
/**
|
|
128
|
-
* Get the underlying logger (for advanced human-mode output)
|
|
129
|
-
*/
|
|
130
|
-
getLogger(): Logger;
|
|
131
|
-
private outputJson;
|
|
132
|
-
private outputHuman;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Create an output handler based on CLI flags
|
|
136
|
-
*/
|
|
137
|
-
export declare function createOutput(flags: {
|
|
138
|
-
json?: boolean;
|
|
139
|
-
[key: string]: unknown;
|
|
140
|
-
}, options?: Partial<Omit<OutputHandlerOptions, 'mode'>>): OutputHandler;
|
|
141
|
-
/**
|
|
142
|
-
* Create a result object for success
|
|
143
|
-
*/
|
|
144
|
-
export declare function ok<T>(data: T, metadata?: OutputMetadata): ScriptOutput<T>;
|
|
145
|
-
/**
|
|
146
|
-
* Create a result object for failure
|
|
147
|
-
*/
|
|
148
|
-
export declare function fail(code: string, message: string, details?: Record<string, unknown>): ScriptOutput<never>;
|
|
149
|
-
//# sourceMappingURL=output.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../../../scripts/lib/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,263 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dual-Mode Output System
|
|
3
|
-
*
|
|
4
|
-
* Provides unified output handling for CLI scripts that supports both
|
|
5
|
-
* human-readable (colored, formatted) and machine-readable (JSON) modes.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* const output = new OutputHandler(args.flags.json ? 'json' : 'human')
|
|
10
|
-
*
|
|
11
|
-
* // Progress messages (suppressed in JSON mode)
|
|
12
|
-
* output.progress('Processing files...')
|
|
13
|
-
*
|
|
14
|
-
* // Final result (formatted for humans, JSON for agents)
|
|
15
|
-
* output.result({
|
|
16
|
-
* success: true,
|
|
17
|
-
* data: { workflows: [...] },
|
|
18
|
-
* metadata: { duration: 123 }
|
|
19
|
-
* })
|
|
20
|
-
* ```
|
|
21
|
-
*
|
|
22
|
-
* @dependencies
|
|
23
|
-
* - scripts/lib/logger.ts - Colored console logging utilities
|
|
24
|
-
*/
|
|
25
|
-
import { createLogger } from './logger.js';
|
|
26
|
-
// =============================================================================
|
|
27
|
-
// Output Handler
|
|
28
|
-
// =============================================================================
|
|
29
|
-
/**
|
|
30
|
-
* Dual-mode output handler for CLI scripts
|
|
31
|
-
*/
|
|
32
|
-
export class OutputHandler {
|
|
33
|
-
mode;
|
|
34
|
-
logger;
|
|
35
|
-
jsonStream;
|
|
36
|
-
startTime;
|
|
37
|
-
constructor(options) {
|
|
38
|
-
const opts = typeof options === 'string' ? { mode: options } : options;
|
|
39
|
-
this.mode = opts.mode;
|
|
40
|
-
this.jsonStream = opts.jsonStream ?? process.stdout;
|
|
41
|
-
this.startTime = Date.now();
|
|
42
|
-
// In JSON mode, suppress all logger output
|
|
43
|
-
this.logger = createLogger({
|
|
44
|
-
level: opts.mode === 'json' ? 'silent' : 'info',
|
|
45
|
-
prefix: opts.loggerPrefix,
|
|
46
|
-
timestamps: opts.timestamps,
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Get the current output mode
|
|
51
|
-
*/
|
|
52
|
-
getMode() {
|
|
53
|
-
return this.mode;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Check if in JSON mode
|
|
57
|
-
*/
|
|
58
|
-
isJsonMode() {
|
|
59
|
-
return this.mode === 'json';
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Log a progress message (suppressed in JSON mode)
|
|
63
|
-
*/
|
|
64
|
-
progress(message) {
|
|
65
|
-
if (this.mode === 'human') {
|
|
66
|
-
this.logger.info(message);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Log a debug message (suppressed in JSON mode)
|
|
71
|
-
*/
|
|
72
|
-
debug(message) {
|
|
73
|
-
if (this.mode === 'human') {
|
|
74
|
-
this.logger.debug(message);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Log a warning (suppressed in JSON mode)
|
|
79
|
-
*/
|
|
80
|
-
warn(message) {
|
|
81
|
-
if (this.mode === 'human') {
|
|
82
|
-
this.logger.warn(message);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Show a progress bar (suppressed in JSON mode)
|
|
87
|
-
*/
|
|
88
|
-
progressBar(current, total, label) {
|
|
89
|
-
if (this.mode === 'human') {
|
|
90
|
-
this.logger.progress(current, total, label);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Print a header (suppressed in JSON mode)
|
|
95
|
-
*/
|
|
96
|
-
header(title) {
|
|
97
|
-
if (this.mode === 'human') {
|
|
98
|
-
this.logger.header(title);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Print a divider line (suppressed in JSON mode)
|
|
103
|
-
*/
|
|
104
|
-
divider() {
|
|
105
|
-
if (this.mode === 'human') {
|
|
106
|
-
this.logger.divider();
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Output the final result
|
|
111
|
-
*
|
|
112
|
-
* In human mode: Formats and prints using logger
|
|
113
|
-
* In JSON mode: Outputs structured JSON to stdout
|
|
114
|
-
*/
|
|
115
|
-
result(output) {
|
|
116
|
-
// Add metadata if not present
|
|
117
|
-
const enriched = {
|
|
118
|
-
...output,
|
|
119
|
-
metadata: {
|
|
120
|
-
duration: Date.now() - this.startTime,
|
|
121
|
-
timestamp: new Date().toISOString(),
|
|
122
|
-
...output.metadata,
|
|
123
|
-
},
|
|
124
|
-
};
|
|
125
|
-
if (this.mode === 'json') {
|
|
126
|
-
this.outputJson(enriched);
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
this.outputHuman(enriched);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Output a successful result
|
|
134
|
-
*/
|
|
135
|
-
success(data, metadata) {
|
|
136
|
-
this.result({ success: true, data, metadata });
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Output an error result
|
|
140
|
-
*/
|
|
141
|
-
error(error, metadata) {
|
|
142
|
-
this.result({ success: false, error, metadata });
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Output raw data (for list/table commands)
|
|
146
|
-
*/
|
|
147
|
-
data(items, options) {
|
|
148
|
-
if (this.mode === 'json') {
|
|
149
|
-
this.outputJson({ success: true, data: items });
|
|
150
|
-
}
|
|
151
|
-
else if (options?.format === 'table' && Array.isArray(items) && items.length > 0) {
|
|
152
|
-
this.logger.table(items);
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
for (const item of items) {
|
|
156
|
-
if (typeof item === 'object' && item !== null) {
|
|
157
|
-
console.log(formatObject(item));
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
console.log(String(item));
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Get the underlying logger (for advanced human-mode output)
|
|
167
|
-
*/
|
|
168
|
-
getLogger() {
|
|
169
|
-
return this.logger;
|
|
170
|
-
}
|
|
171
|
-
// ===========================================================================
|
|
172
|
-
// Private Methods
|
|
173
|
-
// ===========================================================================
|
|
174
|
-
outputJson(output) {
|
|
175
|
-
this.jsonStream.write(`${JSON.stringify(output, null, 2)}\n`);
|
|
176
|
-
}
|
|
177
|
-
outputHuman(output) {
|
|
178
|
-
if (output.success) {
|
|
179
|
-
if (output.data !== undefined) {
|
|
180
|
-
if (typeof output.data === 'object' && output.data !== null) {
|
|
181
|
-
if (Array.isArray(output.data)) {
|
|
182
|
-
for (const item of output.data) {
|
|
183
|
-
console.log(formatObject(item));
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
else {
|
|
187
|
-
console.log(formatObject(output.data));
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
else {
|
|
191
|
-
console.log(output.data);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
if (output.metadata?.duration) {
|
|
195
|
-
this.logger.success(`Completed in ${output.metadata.duration}ms`);
|
|
196
|
-
}
|
|
197
|
-
else {
|
|
198
|
-
this.logger.success('Completed');
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
else if (output.error) {
|
|
202
|
-
this.logger.error(`${output.error.message}`);
|
|
203
|
-
if (output.error.details) {
|
|
204
|
-
for (const [key, value] of Object.entries(output.error.details)) {
|
|
205
|
-
this.logger.error(` ${key}: ${value}`);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
// =============================================================================
|
|
212
|
-
// Formatting Helpers
|
|
213
|
-
// =============================================================================
|
|
214
|
-
/**
|
|
215
|
-
* Format an object for human-readable output
|
|
216
|
-
*/
|
|
217
|
-
function formatObject(obj, indent = 0) {
|
|
218
|
-
const pad = ' '.repeat(indent);
|
|
219
|
-
const lines = [];
|
|
220
|
-
for (const [key, value] of Object.entries(obj)) {
|
|
221
|
-
if (value === undefined)
|
|
222
|
-
continue;
|
|
223
|
-
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
|
|
224
|
-
lines.push(`${pad}${key}:`);
|
|
225
|
-
lines.push(formatObject(value, indent + 1));
|
|
226
|
-
}
|
|
227
|
-
else if (Array.isArray(value)) {
|
|
228
|
-
lines.push(`${pad}${key}: [${value.length} items]`);
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
lines.push(`${pad}${key}: ${value}`);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
return lines.join('\n');
|
|
235
|
-
}
|
|
236
|
-
// =============================================================================
|
|
237
|
-
// Factory Functions
|
|
238
|
-
// =============================================================================
|
|
239
|
-
/**
|
|
240
|
-
* Create an output handler based on CLI flags
|
|
241
|
-
*/
|
|
242
|
-
export function createOutput(flags, options) {
|
|
243
|
-
return new OutputHandler({
|
|
244
|
-
mode: flags.json ? 'json' : 'human',
|
|
245
|
-
...options,
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* Create a result object for success
|
|
250
|
-
*/
|
|
251
|
-
export function ok(data, metadata) {
|
|
252
|
-
return { success: true, data, metadata };
|
|
253
|
-
}
|
|
254
|
-
/**
|
|
255
|
-
* Create a result object for failure
|
|
256
|
-
*/
|
|
257
|
-
export function fail(code, message, details) {
|
|
258
|
-
return {
|
|
259
|
-
success: false,
|
|
260
|
-
error: { code, message, details },
|
|
261
|
-
};
|
|
262
|
-
}
|
|
263
|
-
//# sourceMappingURL=output.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../../../../scripts/lib/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parallel task execution utilities.
|
|
3
|
-
*
|
|
4
|
-
* Provides controlled parallel execution with:
|
|
5
|
-
* - Configurable concurrency limits
|
|
6
|
-
* - Progress tracking
|
|
7
|
-
* - Error handling and aggregation
|
|
8
|
-
* - Timeout support
|
|
9
|
-
* - Resource pooling
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```typescript
|
|
13
|
-
* import { parallel, ParallelExecutor } from './parallel.js'
|
|
14
|
-
*
|
|
15
|
-
* // Simple parallel execution
|
|
16
|
-
* const results = await parallel(
|
|
17
|
-
* [task1, task2, task3],
|
|
18
|
-
* { concurrency: 2 }
|
|
19
|
-
* )
|
|
20
|
-
*
|
|
21
|
-
* // With progress tracking
|
|
22
|
-
* const executor = new ParallelExecutor({ concurrency: 3 })
|
|
23
|
-
* executor.on('progress', ({ completed, total }) => {
|
|
24
|
-
* console.log(`${completed}/${total} tasks completed`)
|
|
25
|
-
* })
|
|
26
|
-
* await executor.run([task1, task2, task3])
|
|
27
|
-
* ```
|
|
28
|
-
*
|
|
29
|
-
* @dependencies
|
|
30
|
-
* - scripts/lib/logger.ts - Logging utilities
|
|
31
|
-
* - scripts/lib/telemetry.ts - Performance metrics tracking
|
|
32
|
-
* - node:events - Event emitter for progress tracking
|
|
33
|
-
*/
|
|
34
|
-
import { EventEmitter } from 'node:events';
|
|
35
|
-
export interface ParallelOptions {
|
|
36
|
-
/** Maximum number of concurrent tasks (default: 5) */
|
|
37
|
-
concurrency?: number;
|
|
38
|
-
/** Timeout for each task in ms (0 = no timeout) */
|
|
39
|
-
timeout?: number;
|
|
40
|
-
/** Stop on first error (default: false) */
|
|
41
|
-
stopOnError?: boolean;
|
|
42
|
-
/** Enable verbose logging */
|
|
43
|
-
verbose?: boolean;
|
|
44
|
-
/** Task execution mode */
|
|
45
|
-
mode?: 'parallel' | 'sequential';
|
|
46
|
-
}
|
|
47
|
-
export interface TaskResult<T> {
|
|
48
|
-
/** Task index */
|
|
49
|
-
index: number;
|
|
50
|
-
/** Task result (if successful) */
|
|
51
|
-
result?: T;
|
|
52
|
-
/** Error (if failed) */
|
|
53
|
-
error?: Error;
|
|
54
|
-
/** Execution duration in ms */
|
|
55
|
-
duration: number;
|
|
56
|
-
/** Task status */
|
|
57
|
-
status: 'success' | 'error' | 'timeout';
|
|
58
|
-
}
|
|
59
|
-
export interface ProgressEvent {
|
|
60
|
-
/** Number of completed tasks */
|
|
61
|
-
completed: number;
|
|
62
|
-
/** Total number of tasks */
|
|
63
|
-
total: number;
|
|
64
|
-
/** Progress percentage (0-100) */
|
|
65
|
-
percentage: number;
|
|
66
|
-
/** Recently completed task result */
|
|
67
|
-
lastResult?: TaskResult<unknown>;
|
|
68
|
-
}
|
|
69
|
-
export type Task<T> = () => Promise<T> | T;
|
|
70
|
-
export declare class ParallelExecutor<T = unknown> extends EventEmitter {
|
|
71
|
-
private concurrency;
|
|
72
|
-
private timeout;
|
|
73
|
-
private stopOnError;
|
|
74
|
-
private verbose;
|
|
75
|
-
private mode;
|
|
76
|
-
constructor(options?: ParallelOptions);
|
|
77
|
-
/**
|
|
78
|
-
* Execute tasks in parallel with concurrency control.
|
|
79
|
-
*/
|
|
80
|
-
run(tasks: Array<Task<T>>): Promise<Array<TaskResult<T>>>;
|
|
81
|
-
/**
|
|
82
|
-
* Execute tasks sequentially.
|
|
83
|
-
*/
|
|
84
|
-
private runSequential;
|
|
85
|
-
/**
|
|
86
|
-
* Execute task with timeout.
|
|
87
|
-
*/
|
|
88
|
-
private executeWithTimeout;
|
|
89
|
-
/**
|
|
90
|
-
* Get success rate from results.
|
|
91
|
-
*/
|
|
92
|
-
static getSuccessRate(results: Array<TaskResult<unknown>>): number;
|
|
93
|
-
/**
|
|
94
|
-
* Get all errors from results.
|
|
95
|
-
*/
|
|
96
|
-
static getErrors(results: Array<TaskResult<unknown>>): Error[];
|
|
97
|
-
/**
|
|
98
|
-
* Check if all tasks succeeded.
|
|
99
|
-
*/
|
|
100
|
-
static allSucceeded(results: Array<TaskResult<unknown>>): boolean;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Execute tasks in parallel with concurrency control.
|
|
104
|
-
*
|
|
105
|
-
* @example
|
|
106
|
-
* ```typescript
|
|
107
|
-
* const results = await parallel(
|
|
108
|
-
* [async () => fetch('/api/1'), async () => fetch('/api/2')],
|
|
109
|
-
* { concurrency: 2 }
|
|
110
|
-
* )
|
|
111
|
-
* ```
|
|
112
|
-
*/
|
|
113
|
-
export declare function parallel<T>(tasks: Array<Task<T>>, options?: ParallelOptions): Promise<Array<TaskResult<T>>>;
|
|
114
|
-
/**
|
|
115
|
-
* Execute tasks sequentially.
|
|
116
|
-
*
|
|
117
|
-
* @example
|
|
118
|
-
* ```typescript
|
|
119
|
-
* const results = await sequential([task1, task2, task3])
|
|
120
|
-
* ```
|
|
121
|
-
*/
|
|
122
|
-
export declare function sequential<T>(tasks: Array<Task<T>>, options?: Omit<ParallelOptions, 'concurrency' | 'mode'>): Promise<Array<TaskResult<T>>>;
|
|
123
|
-
/**
|
|
124
|
-
* Map over array items in parallel.
|
|
125
|
-
*
|
|
126
|
-
* @example
|
|
127
|
-
* ```typescript
|
|
128
|
-
* const results = await parallelMap(
|
|
129
|
-
* [1, 2, 3, 4, 5],
|
|
130
|
-
* async (n) => n * 2,
|
|
131
|
-
* { concurrency: 2 }
|
|
132
|
-
* )
|
|
133
|
-
* ```
|
|
134
|
-
*/
|
|
135
|
-
export declare function parallelMap<T, R>(items: T[], mapper: (item: T, index: number) => Promise<R> | R, options?: ParallelOptions): Promise<R[]>;
|
|
136
|
-
/**
|
|
137
|
-
* Filter array items in parallel.
|
|
138
|
-
*
|
|
139
|
-
* @example
|
|
140
|
-
* ```typescript
|
|
141
|
-
* const evens = await parallelFilter(
|
|
142
|
-
* [1, 2, 3, 4, 5],
|
|
143
|
-
* async (n) => n % 2 === 0,
|
|
144
|
-
* { concurrency: 2 }
|
|
145
|
-
* )
|
|
146
|
-
* ```
|
|
147
|
-
*/
|
|
148
|
-
export declare function parallelFilter<T>(items: T[], predicate: (item: T, index: number) => Promise<boolean> | boolean, options?: ParallelOptions): Promise<T[]>;
|
|
149
|
-
/**
|
|
150
|
-
* Batch process items in parallel.
|
|
151
|
-
*
|
|
152
|
-
* @example
|
|
153
|
-
* ```typescript
|
|
154
|
-
* await batch(
|
|
155
|
-
* largeArray,
|
|
156
|
-
* async (batch) => processItems(batch),
|
|
157
|
-
* { batchSize: 10, concurrency: 2 }
|
|
158
|
-
* )
|
|
159
|
-
* ```
|
|
160
|
-
*/
|
|
161
|
-
export declare function batch<T, R>(items: T[], processor: (batch: T[]) => Promise<R> | R, options: ParallelOptions & {
|
|
162
|
-
batchSize: number;
|
|
163
|
-
}): Promise<R[]>;
|
|
164
|
-
//# sourceMappingURL=parallel.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parallel.d.ts","sourceRoot":"","sources":["../../../../../scripts/lib/parallel.ts"],"names":[],"mappings":"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"}
|