@cisco_open/linting-orchestrator 1.0.0-rc.4
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 +201 -0
- package/NOTICE +5 -0
- package/README.md +43 -0
- package/build/cli/api-client.d.ts +170 -0
- package/build/cli/api-client.d.ts.map +1 -0
- package/build/cli/api-client.js +284 -0
- package/build/cli/api-client.js.map +1 -0
- package/build/cli/commands/agents.d.ts +7 -0
- package/build/cli/commands/agents.d.ts.map +1 -0
- package/build/cli/commands/agents.js +694 -0
- package/build/cli/commands/agents.js.map +1 -0
- package/build/cli/commands/completion.d.ts +9 -0
- package/build/cli/commands/completion.d.ts.map +1 -0
- package/build/cli/commands/completion.js +177 -0
- package/build/cli/commands/completion.js.map +1 -0
- package/build/cli/commands/config.d.ts +10 -0
- package/build/cli/commands/config.d.ts.map +1 -0
- package/build/cli/commands/config.js +284 -0
- package/build/cli/commands/config.js.map +1 -0
- package/build/cli/commands/health.d.ts +11 -0
- package/build/cli/commands/health.d.ts.map +1 -0
- package/build/cli/commands/health.js +38 -0
- package/build/cli/commands/health.js.map +1 -0
- package/build/cli/commands/help.d.ts +6 -0
- package/build/cli/commands/help.d.ts.map +1 -0
- package/build/cli/commands/help.js +20 -0
- package/build/cli/commands/help.js.map +1 -0
- package/build/cli/commands/history.d.ts +11 -0
- package/build/cli/commands/history.d.ts.map +1 -0
- package/build/cli/commands/history.js +50 -0
- package/build/cli/commands/history.js.map +1 -0
- package/build/cli/commands/jobs.d.ts +12 -0
- package/build/cli/commands/jobs.d.ts.map +1 -0
- package/build/cli/commands/jobs.js +84 -0
- package/build/cli/commands/jobs.js.map +1 -0
- package/build/cli/commands/lint.d.ts +15 -0
- package/build/cli/commands/lint.d.ts.map +1 -0
- package/build/cli/commands/lint.js +384 -0
- package/build/cli/commands/lint.js.map +1 -0
- package/build/cli/commands/ps.d.ts +8 -0
- package/build/cli/commands/ps.d.ts.map +1 -0
- package/build/cli/commands/ps.js +74 -0
- package/build/cli/commands/ps.js.map +1 -0
- package/build/cli/commands/reproduce.d.ts +9 -0
- package/build/cli/commands/reproduce.d.ts.map +1 -0
- package/build/cli/commands/reproduce.js +31 -0
- package/build/cli/commands/reproduce.js.map +1 -0
- package/build/cli/commands/reset.d.ts +5 -0
- package/build/cli/commands/reset.d.ts.map +1 -0
- package/build/cli/commands/reset.js +13 -0
- package/build/cli/commands/reset.js.map +1 -0
- package/build/cli/commands/results.d.ts +13 -0
- package/build/cli/commands/results.d.ts.map +1 -0
- package/build/cli/commands/results.js +129 -0
- package/build/cli/commands/results.js.map +1 -0
- package/build/cli/commands/rulesets/check.d.ts +12 -0
- package/build/cli/commands/rulesets/check.d.ts.map +1 -0
- package/build/cli/commands/rulesets/check.js +226 -0
- package/build/cli/commands/rulesets/check.js.map +1 -0
- package/build/cli/commands/rulesets/index.d.ts +5 -0
- package/build/cli/commands/rulesets/index.d.ts.map +1 -0
- package/build/cli/commands/rulesets/index.js +6 -0
- package/build/cli/commands/rulesets/index.js.map +1 -0
- package/build/cli/commands/rulesets/view.d.ts +16 -0
- package/build/cli/commands/rulesets/view.d.ts.map +1 -0
- package/build/cli/commands/rulesets/view.js +100 -0
- package/build/cli/commands/rulesets/view.js.map +1 -0
- package/build/cli/commands/start.d.ts +16 -0
- package/build/cli/commands/start.d.ts.map +1 -0
- package/build/cli/commands/start.js +167 -0
- package/build/cli/commands/start.js.map +1 -0
- package/build/cli/commands/status.d.ts +9 -0
- package/build/cli/commands/status.d.ts.map +1 -0
- package/build/cli/commands/status.js +46 -0
- package/build/cli/commands/status.js.map +1 -0
- package/build/cli/commands/stop.d.ts +11 -0
- package/build/cli/commands/stop.d.ts.map +1 -0
- package/build/cli/commands/stop.js +78 -0
- package/build/cli/commands/stop.js.map +1 -0
- package/build/cli/config-manager.d.ts +134 -0
- package/build/cli/config-manager.d.ts.map +1 -0
- package/build/cli/config-manager.js +288 -0
- package/build/cli/config-manager.js.map +1 -0
- package/build/cli/formatters.d.ts +62 -0
- package/build/cli/formatters.d.ts.map +1 -0
- package/build/cli/formatters.js +715 -0
- package/build/cli/formatters.js.map +1 -0
- package/build/cli/history-manager.d.ts +97 -0
- package/build/cli/history-manager.d.ts.map +1 -0
- package/build/cli/history-manager.js +201 -0
- package/build/cli/history-manager.js.map +1 -0
- package/build/cli/index.d.ts +16 -0
- package/build/cli/index.d.ts.map +1 -0
- package/build/cli/index.js +335 -0
- package/build/cli/index.js.map +1 -0
- package/build/cli/list-rulesets.d.ts +15 -0
- package/build/cli/list-rulesets.d.ts.map +1 -0
- package/build/cli/list-rulesets.js +193 -0
- package/build/cli/list-rulesets.js.map +1 -0
- package/build/cli/utils/connection-error.d.ts +9 -0
- package/build/cli/utils/connection-error.d.ts.map +1 -0
- package/build/cli/utils/connection-error.js +30 -0
- package/build/cli/utils/connection-error.js.map +1 -0
- package/build/cli/utils/embedded-server.d.ts +21 -0
- package/build/cli/utils/embedded-server.d.ts.map +1 -0
- package/build/cli/utils/embedded-server.js +61 -0
- package/build/cli/utils/embedded-server.js.map +1 -0
- package/build/cli/utils/mode-validator.d.ts +13 -0
- package/build/cli/utils/mode-validator.d.ts.map +1 -0
- package/build/cli/utils/mode-validator.js +31 -0
- package/build/cli/utils/mode-validator.js.map +1 -0
- package/build/cli/utils/port-checker.d.ts +20 -0
- package/build/cli/utils/port-checker.d.ts.map +1 -0
- package/build/cli/utils/port-checker.js +49 -0
- package/build/cli/utils/port-checker.js.map +1 -0
- package/build/config.d.ts +57 -0
- package/build/config.d.ts.map +1 -0
- package/build/config.js +527 -0
- package/build/config.js.map +1 -0
- package/build/document-accessor.d.ts +79 -0
- package/build/document-accessor.d.ts.map +1 -0
- package/build/document-accessor.js +148 -0
- package/build/document-accessor.js.map +1 -0
- package/build/formatters/reproduce-markdown.d.ts +14 -0
- package/build/formatters/reproduce-markdown.d.ts.map +1 -0
- package/build/formatters/reproduce-markdown.js +182 -0
- package/build/formatters/reproduce-markdown.js.map +1 -0
- package/build/formatters/sarif-builder.d.ts +86 -0
- package/build/formatters/sarif-builder.d.ts.map +1 -0
- package/build/formatters/sarif-builder.js +276 -0
- package/build/formatters/sarif-builder.js.map +1 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +174 -0
- package/build/index.js.map +1 -0
- package/build/logger.d.ts +38 -0
- package/build/logger.d.ts.map +1 -0
- package/build/logger.js +105 -0
- package/build/logger.js.map +1 -0
- package/build/mock-server.d.ts +2 -0
- package/build/mock-server.d.ts.map +1 -0
- package/build/mock-server.js +290 -0
- package/build/mock-server.js.map +1 -0
- package/build/orchestrator.d.ts +149 -0
- package/build/orchestrator.d.ts.map +1 -0
- package/build/orchestrator.js +874 -0
- package/build/orchestrator.js.map +1 -0
- package/build/ruleset-loader.d.ts +79 -0
- package/build/ruleset-loader.d.ts.map +1 -0
- package/build/ruleset-loader.js +514 -0
- package/build/ruleset-loader.js.map +1 -0
- package/build/schemas.d.ts +2568 -0
- package/build/schemas.d.ts.map +1 -0
- package/build/schemas.js +674 -0
- package/build/schemas.js.map +1 -0
- package/build/server.d.ts +39 -0
- package/build/server.d.ts.map +1 -0
- package/build/server.js +834 -0
- package/build/server.js.map +1 -0
- package/build/storage/memory-storage.d.ts +190 -0
- package/build/storage/memory-storage.d.ts.map +1 -0
- package/build/storage/memory-storage.js +629 -0
- package/build/storage/memory-storage.js.map +1 -0
- package/build/storage/redis-storage.d.ts +134 -0
- package/build/storage/redis-storage.d.ts.map +1 -0
- package/build/storage/redis-storage.js +236 -0
- package/build/storage/redis-storage.js.map +1 -0
- package/build/storage/storage-adapter.d.ts +189 -0
- package/build/storage/storage-adapter.d.ts.map +1 -0
- package/build/storage/storage-adapter.js +36 -0
- package/build/storage/storage-adapter.js.map +1 -0
- package/build/types.d.ts +981 -0
- package/build/types.d.ts.map +1 -0
- package/build/types.js +5 -0
- package/build/types.js.map +1 -0
- package/build/utils/version.d.ts +40 -0
- package/build/utils/version.d.ts.map +1 -0
- package/build/utils/version.js +94 -0
- package/build/utils/version.js.map +1 -0
- package/build/validation.d.ts +95 -0
- package/build/validation.d.ts.map +1 -0
- package/build/validation.js +150 -0
- package/build/validation.js.map +1 -0
- package/build/worker-pool.d.ts +137 -0
- package/build/worker-pool.d.ts.map +1 -0
- package/build/worker-pool.js +549 -0
- package/build/worker-pool.js.map +1 -0
- package/build/worker.d.ts +2 -0
- package/build/worker.d.ts.map +1 -0
- package/build/worker.js +427 -0
- package/build/worker.js.map +1 -0
- package/package.json +110 -0
- package/rulesets/CHANGELOG.md +25 -0
- package/rulesets/config/rulesets.yaml +96 -0
- package/rulesets/sources/README.md +47 -0
- package/rulesets/sources/example/oas-recommended/v1.0.0/ruleset.yaml +6 -0
- package/rulesets/sources/example/oas-recommended/v2.0.0/ruleset.yaml +14 -0
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Orchestrator CLI - Command-line interface for linting documents, managing rulesets, and controlling the orchestrator server
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* spectify start [--mode standalone|mcp] [options]
|
|
7
|
+
* spectify lint <file> [options]
|
|
8
|
+
* spectify status <jobId> [options]
|
|
9
|
+
* spectify results <jobId> [options]
|
|
10
|
+
* spectify history [options]
|
|
11
|
+
* spectify rulesets [options]
|
|
12
|
+
* spectify health [options]
|
|
13
|
+
* spectify config [show|set|reset]
|
|
14
|
+
*/
|
|
15
|
+
import { Command } from 'commander';
|
|
16
|
+
import chalk from 'chalk';
|
|
17
|
+
import { CLI_VERSION } from '../utils/version.js';
|
|
18
|
+
import { getConfigManager } from './config-manager.js';
|
|
19
|
+
import { lintCommand } from './commands/lint.js';
|
|
20
|
+
import { statusCommand } from './commands/status.js';
|
|
21
|
+
import { resultsCommand } from './commands/results.js';
|
|
22
|
+
import { reproduceCommand } from './commands/reproduce.js';
|
|
23
|
+
import { historyCommand } from './commands/history.js';
|
|
24
|
+
import { jobsCommand } from './commands/jobs.js';
|
|
25
|
+
import { viewRulesetsCommand, checkRulesetsCommand } from './commands/rulesets/index.js';
|
|
26
|
+
import { healthCommand } from './commands/health.js';
|
|
27
|
+
import { configCommand } from './commands/config.js';
|
|
28
|
+
import { completionCommand } from './commands/completion.js';
|
|
29
|
+
import { agentsCommand } from './commands/agents.js';
|
|
30
|
+
import { resetCommand } from './commands/reset.js';
|
|
31
|
+
import { helpCommand } from './commands/help.js';
|
|
32
|
+
import { handleCommandError } from './utils/connection-error.js';
|
|
33
|
+
// Configure chalk to disable colors when piping to prevent terminal corruption
|
|
34
|
+
// This fixes issues when piping to 'more', 'less', etc. and interrupting
|
|
35
|
+
if (!process.stdout.isTTY) {
|
|
36
|
+
chalk.level = 0;
|
|
37
|
+
}
|
|
38
|
+
const program = new Command();
|
|
39
|
+
program
|
|
40
|
+
.name('spectify')
|
|
41
|
+
.description('Linting Orchestrator — Quality Assurance for API specifications')
|
|
42
|
+
.helpOption('-h, --help', 'display help for command')
|
|
43
|
+
.option('-a, --agents', 'Show LLM-friendly documentation (for AI agents)')
|
|
44
|
+
.option('-V, --version', 'output the version number')
|
|
45
|
+
.usage('[options] [command]')
|
|
46
|
+
.enablePositionalOptions();
|
|
47
|
+
// Custom version display showing CLI version only
|
|
48
|
+
// Use 'spectify health' to see the running server version
|
|
49
|
+
program.on('option:version', () => {
|
|
50
|
+
console.log(`spectify CLI v${CLI_VERSION}`);
|
|
51
|
+
console.log(chalk.dim('Use "spectify health" to see server version'));
|
|
52
|
+
process.exit(0);
|
|
53
|
+
});
|
|
54
|
+
// Configure help
|
|
55
|
+
program.configureHelp({
|
|
56
|
+
sortSubcommands: false,
|
|
57
|
+
showGlobalOptions: false,
|
|
58
|
+
});
|
|
59
|
+
// Check if showing root help before parsing
|
|
60
|
+
const showingRootHelp = (process.argv.length === 2) ||
|
|
61
|
+
(process.argv.length === 3 && (process.argv[2] === '--help' || process.argv[2] === '-h'));
|
|
62
|
+
if (showingRootHelp) {
|
|
63
|
+
// Show custom grouped help for root command
|
|
64
|
+
console.log(`Usage: spectify [options] [command]`);
|
|
65
|
+
console.log('');
|
|
66
|
+
console.log('Linting Orchestrator — Quality Assurance for API specifications');
|
|
67
|
+
console.log('');
|
|
68
|
+
console.log('Options:');
|
|
69
|
+
console.log(' -V, --version output the version number');
|
|
70
|
+
console.log(' -a, --agents Show LLM-friendly documentation (for AI agents)');
|
|
71
|
+
console.log(' -h, --help display help for command');
|
|
72
|
+
console.log('');
|
|
73
|
+
console.log(chalk.cyan('Linting Commands:'));
|
|
74
|
+
console.log(' lint Lint a document');
|
|
75
|
+
console.log(' status Check the status of a lint job');
|
|
76
|
+
console.log(' results View detailed lint results');
|
|
77
|
+
console.log(' reproduce Generate Spectral CLI reproduction instructions');
|
|
78
|
+
console.log(' jobs List recent lint jobs');
|
|
79
|
+
console.log(' history View lint history');
|
|
80
|
+
console.log(' rulesets List, view, or check rulesets (view | check)');
|
|
81
|
+
console.log('');
|
|
82
|
+
console.log(chalk.cyan('Configuration Commands:'));
|
|
83
|
+
console.log(' config Manage CLI configuration (show, set, reset)');
|
|
84
|
+
console.log(' completion Generate shell completion script');
|
|
85
|
+
console.log(' health Check orchestrator service health');
|
|
86
|
+
console.log('');
|
|
87
|
+
console.log(chalk.dim('Default mode: embedded (server auto-starts with lint commands)'));
|
|
88
|
+
console.log(chalk.dim('For production server: spectifyd --help'));
|
|
89
|
+
console.log('');
|
|
90
|
+
process.exit(0);
|
|
91
|
+
}
|
|
92
|
+
// ============================================================================
|
|
93
|
+
// LINTING COMMANDS
|
|
94
|
+
// ============================================================================
|
|
95
|
+
// Lint command
|
|
96
|
+
program
|
|
97
|
+
.command('lint <file>')
|
|
98
|
+
.description('Lint a document using one or multiple rulesets')
|
|
99
|
+
.option('-r, --ruleset <name>', 'Ruleset(s) to use (comma-separated). Defaults to all available rulesets.')
|
|
100
|
+
.option('-v, --version <version>', 'Ruleset version (applies to all rulesets if multiple specified)')
|
|
101
|
+
.option('--override <override>', 'Override rule severities. Repeatable. E.g. --override rule1=off --override rule2=warn or --override rule1=off,rule2=warn', (val, prev) => prev.concat(val), [])
|
|
102
|
+
.option('--no-cache', 'Disable cache lookup')
|
|
103
|
+
.option('--show-all', 'Show all issues (no limit)')
|
|
104
|
+
.option('--poll-interval <seconds>', 'Progress display interval in seconds for multi-ruleset runs (default: 5)', parseFloat)
|
|
105
|
+
.action(async (file, options) => {
|
|
106
|
+
try {
|
|
107
|
+
// Don't pre-fill apiUrl - let lintCommand handle embedded mode detection
|
|
108
|
+
await lintCommand(file, options);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
await handleCommandError(error);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
// Status command
|
|
115
|
+
program
|
|
116
|
+
.command('status <jobId>')
|
|
117
|
+
.description('Check the status of a lint job')
|
|
118
|
+
.option('-w, --watch', 'Watch job status until completion')
|
|
119
|
+
.action(async (jobId, options) => {
|
|
120
|
+
try {
|
|
121
|
+
const { requireServerMode } = await import('./utils/mode-validator.js');
|
|
122
|
+
await requireServerMode('status');
|
|
123
|
+
const configManager = getConfigManager();
|
|
124
|
+
const apiUrl = await configManager.getApiUrl();
|
|
125
|
+
await statusCommand(jobId, {
|
|
126
|
+
...options,
|
|
127
|
+
apiUrl,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
await handleCommandError(error);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
// Results command
|
|
135
|
+
program
|
|
136
|
+
.command('results <jobId>')
|
|
137
|
+
.description('View detailed lint results')
|
|
138
|
+
.option('--rule <ruleId>', 'Filter by rule ID')
|
|
139
|
+
.option('--severity <level>', 'Filter by severity (error, warning, info, hint)')
|
|
140
|
+
.option('--format <format>', 'Output format (table, json, sarif)', 'table')
|
|
141
|
+
.option('--output <path>', 'Save report to file (SARIF format)')
|
|
142
|
+
.option('--json', 'Output raw JSON response')
|
|
143
|
+
.action(async (jobId, options) => {
|
|
144
|
+
try {
|
|
145
|
+
const { requireServerMode } = await import('./utils/mode-validator.js');
|
|
146
|
+
await requireServerMode('results');
|
|
147
|
+
const configManager = getConfigManager();
|
|
148
|
+
const apiUrl = await configManager.getApiUrl();
|
|
149
|
+
await resultsCommand(jobId, {
|
|
150
|
+
...options,
|
|
151
|
+
apiUrl,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
await handleCommandError(error);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
// Reproduce command
|
|
159
|
+
program
|
|
160
|
+
.command('reproduce <jobId>')
|
|
161
|
+
.description('Generate Spectral CLI reproduction instructions for a lint job')
|
|
162
|
+
.option('-o, --output <path>', 'Save instructions to file')
|
|
163
|
+
.action(async (jobId, options) => {
|
|
164
|
+
try {
|
|
165
|
+
const { requireServerMode } = await import('./utils/mode-validator.js');
|
|
166
|
+
await requireServerMode('reproduce');
|
|
167
|
+
const configManager = getConfigManager();
|
|
168
|
+
const apiUrl = await configManager.getApiUrl();
|
|
169
|
+
await reproduceCommand(jobId, {
|
|
170
|
+
...options,
|
|
171
|
+
apiUrl,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
await handleCommandError(error);
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
// History command
|
|
179
|
+
program
|
|
180
|
+
.command('history')
|
|
181
|
+
.description('View lint history')
|
|
182
|
+
.option('-l, --limit <number>', 'Number of entries to show', '10')
|
|
183
|
+
.option('-f, --file <path>', 'Filter by file path')
|
|
184
|
+
.option('--ruleset <name>', 'Filter by ruleset name')
|
|
185
|
+
.option('--clear', 'Clear history')
|
|
186
|
+
.action(async (options) => {
|
|
187
|
+
try {
|
|
188
|
+
await historyCommand({
|
|
189
|
+
...options,
|
|
190
|
+
limit: parseInt(options.limit),
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
await handleCommandError(error);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
// Jobs command
|
|
198
|
+
program
|
|
199
|
+
.command('jobs')
|
|
200
|
+
.description('List recent lint jobs (requires standalone or companion mode)')
|
|
201
|
+
.option('--status <status>', 'Filter by job status (completed, failed, running, timeout)')
|
|
202
|
+
.option('--ruleset <name>', 'Filter by ruleset name')
|
|
203
|
+
.option('-l, --limit <number>', 'Number of jobs to show (default: 20)')
|
|
204
|
+
.option('--detailed', 'Show with document metadata (slower)')
|
|
205
|
+
.option('--json', 'Output raw JSON response')
|
|
206
|
+
.action(async (options) => {
|
|
207
|
+
try {
|
|
208
|
+
await jobsCommand({
|
|
209
|
+
...options,
|
|
210
|
+
limit: options.limit ? parseInt(options.limit) : undefined,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
await handleCommandError(error);
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
// Rulesets command — parent with two subcommands:
|
|
218
|
+
// spectify rulesets view [--name N] [--version V] [--format table|json]
|
|
219
|
+
// spectify rulesets check [--name N] [--version V] [--format text|json]
|
|
220
|
+
// [--rulesets-directory PATH]
|
|
221
|
+
// Bare `spectify rulesets` is an alias for `view` for backward compatibility.
|
|
222
|
+
const rulesetsCmd = program
|
|
223
|
+
.command('rulesets')
|
|
224
|
+
.description('List, view, or check rulesets');
|
|
225
|
+
rulesetsCmd
|
|
226
|
+
.command('view', { isDefault: true })
|
|
227
|
+
.description('List rulesets or show details of one (default subcommand)')
|
|
228
|
+
.option('--name <name>', 'Ruleset name to view')
|
|
229
|
+
.option('--version <version>', 'Ruleset version to view (requires --name)')
|
|
230
|
+
.option('--format <format>', 'Output format (table, json)', 'table')
|
|
231
|
+
.action(async (options) => {
|
|
232
|
+
try {
|
|
233
|
+
// Don't pre-fill apiUrl - let viewRulesetsCommand handle embedded mode detection
|
|
234
|
+
await viewRulesetsCommand(options);
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
await handleCommandError(error);
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
rulesetsCmd
|
|
241
|
+
.command('check')
|
|
242
|
+
.description('Verify every configured ruleset version actually loads (in-process, no server)')
|
|
243
|
+
.option('--name <name>', 'Restrict the check to a single ruleset')
|
|
244
|
+
.option('--version <version>', 'Restrict the check to a single version (requires --name)')
|
|
245
|
+
.option('-r, --rulesets-directory <path>', 'Catalogue directory (overrides SPECTIFYD_RULESETS_DIR)')
|
|
246
|
+
.option('--format <format>', 'Output format (text, json)', 'text')
|
|
247
|
+
.action(async (options) => {
|
|
248
|
+
try {
|
|
249
|
+
await checkRulesetsCommand(options);
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
await handleCommandError(error);
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
// Health command
|
|
256
|
+
program
|
|
257
|
+
.command('health')
|
|
258
|
+
.description('Check orchestrator service health')
|
|
259
|
+
.option('--format <format>', 'Output format (text, json)', 'text')
|
|
260
|
+
.action(async (options) => {
|
|
261
|
+
try {
|
|
262
|
+
const configManager = getConfigManager();
|
|
263
|
+
const config = await configManager.get();
|
|
264
|
+
// Don't pre-fill apiUrl - let healthCommand handle embedded mode detection
|
|
265
|
+
await healthCommand({
|
|
266
|
+
...options,
|
|
267
|
+
mode: config.defaultMode,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
await handleCommandError(error);
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
// ============================================================================
|
|
275
|
+
// CONFIGURATION COMMANDS
|
|
276
|
+
// ============================================================================
|
|
277
|
+
// Config command
|
|
278
|
+
program
|
|
279
|
+
.command('config [action] [key] [value]')
|
|
280
|
+
.description('Manage CLI configuration (show, set, reset)')
|
|
281
|
+
.action(async (action, key, value) => {
|
|
282
|
+
try {
|
|
283
|
+
await configCommand({ action, key, value });
|
|
284
|
+
}
|
|
285
|
+
catch (error) {
|
|
286
|
+
await handleCommandError(error);
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
// Completion command
|
|
290
|
+
program
|
|
291
|
+
.command('completion')
|
|
292
|
+
.description('Generate bash completion script')
|
|
293
|
+
.allowUnknownOption() // Accept --shell for backward compatibility without documenting it
|
|
294
|
+
.action(async (options) => {
|
|
295
|
+
try {
|
|
296
|
+
await completionCommand(options);
|
|
297
|
+
}
|
|
298
|
+
catch (error) {
|
|
299
|
+
await handleCommandError(error);
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
// ============================================================================
|
|
303
|
+
// UTILITY COMMANDS
|
|
304
|
+
// ============================================================================
|
|
305
|
+
// Help command (alternative: spectify help <command>)
|
|
306
|
+
program
|
|
307
|
+
.command('help [command]')
|
|
308
|
+
.description('Display help for a command')
|
|
309
|
+
.action((commandName) => {
|
|
310
|
+
helpCommand(program, commandName);
|
|
311
|
+
});
|
|
312
|
+
// Reset command (hidden from help)
|
|
313
|
+
program
|
|
314
|
+
.command('reset', { hidden: true })
|
|
315
|
+
.description('Reset terminal colors and formatting')
|
|
316
|
+
.action(async () => {
|
|
317
|
+
try {
|
|
318
|
+
await resetCommand();
|
|
319
|
+
}
|
|
320
|
+
catch (error) {
|
|
321
|
+
await handleCommandError(error);
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
// Check for --agents or -a flag BEFORE parsing (direct argv check)
|
|
325
|
+
if (process.argv.includes('--agents') || process.argv.includes('-a')) {
|
|
326
|
+
agentsCommand();
|
|
327
|
+
process.exit(0);
|
|
328
|
+
}
|
|
329
|
+
// Parse arguments
|
|
330
|
+
program.parse(process.argv);
|
|
331
|
+
// Show help if no command specified
|
|
332
|
+
if (!process.argv.slice(2).length) {
|
|
333
|
+
program.outputHelp();
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI Tool: list-rulesets
|
|
4
|
+
*
|
|
5
|
+
* Lists all available rulesets with details including versions,
|
|
6
|
+
* rules count, and metadata.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npm run list-rulesets
|
|
10
|
+
* npm run list-rulesets -- --verbose
|
|
11
|
+
* npm run list-rulesets -- --name pubhub
|
|
12
|
+
* npm run list-rulesets -- --format json
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=list-rulesets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-rulesets.d.ts","sourceRoot":"","sources":["../../src/cli/list-rulesets.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI Tool: list-rulesets
|
|
4
|
+
*
|
|
5
|
+
* Lists all available rulesets with details including versions,
|
|
6
|
+
* rules count, and metadata.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npm run list-rulesets
|
|
10
|
+
* npm run list-rulesets -- --verbose
|
|
11
|
+
* npm run list-rulesets -- --name pubhub
|
|
12
|
+
* npm run list-rulesets -- --format json
|
|
13
|
+
*/
|
|
14
|
+
import { RulesetLoader } from '../ruleset-loader.js';
|
|
15
|
+
import { loadConfig } from '../config.js';
|
|
16
|
+
/**
|
|
17
|
+
* Parse command-line arguments
|
|
18
|
+
*/
|
|
19
|
+
function parseArgs() {
|
|
20
|
+
const args = process.argv.slice(2);
|
|
21
|
+
const options = {
|
|
22
|
+
verbose: false,
|
|
23
|
+
format: 'table',
|
|
24
|
+
};
|
|
25
|
+
for (let i = 0; i < args.length; i++) {
|
|
26
|
+
const arg = args[i];
|
|
27
|
+
if (arg === '--verbose' || arg === '-v') {
|
|
28
|
+
options.verbose = true;
|
|
29
|
+
}
|
|
30
|
+
else if (arg === '--name' || arg === '-n') {
|
|
31
|
+
options.name = args[++i];
|
|
32
|
+
}
|
|
33
|
+
else if (arg === '--version') {
|
|
34
|
+
options.version = args[++i];
|
|
35
|
+
}
|
|
36
|
+
else if (arg === '--format' || arg === '-f') {
|
|
37
|
+
const format = args[++i];
|
|
38
|
+
if (format === 'json' || format === 'table') {
|
|
39
|
+
options.format = format;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else if (arg === '--help' || arg === '-h') {
|
|
43
|
+
printHelp();
|
|
44
|
+
process.exit(0);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return options;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Print help message
|
|
51
|
+
*/
|
|
52
|
+
function printHelp() {
|
|
53
|
+
console.log(`
|
|
54
|
+
Usage: list-rulesets [options]
|
|
55
|
+
|
|
56
|
+
List all available rulesets with details.
|
|
57
|
+
|
|
58
|
+
Options:
|
|
59
|
+
-n, --name <name> Show details for specific ruleset
|
|
60
|
+
--version <version> Show specific version (requires --name)
|
|
61
|
+
-f, --format <format> Output format: table (default) or json
|
|
62
|
+
-v, --verbose Show detailed information
|
|
63
|
+
-h, --help Show this help message
|
|
64
|
+
|
|
65
|
+
Examples:
|
|
66
|
+
list-rulesets
|
|
67
|
+
list-rulesets --verbose
|
|
68
|
+
list-rulesets --name pubhub
|
|
69
|
+
list-rulesets --name pubhub --version 1.1.0
|
|
70
|
+
list-rulesets --format json
|
|
71
|
+
`);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Format table output
|
|
75
|
+
*/
|
|
76
|
+
function printTable(rulesets) {
|
|
77
|
+
console.log('\n📋 Available Rulesets:\n');
|
|
78
|
+
console.log('┌─────────────────────────────────────────────────────────────────────────┐');
|
|
79
|
+
for (const ruleset of rulesets) {
|
|
80
|
+
console.log(`│ ${ruleset.displayName.padEnd(40)} │`);
|
|
81
|
+
console.log(`│ Name: ${ruleset.name.padEnd(60)} │`);
|
|
82
|
+
console.log(`│ Category: ${ruleset.category.padEnd(60)} │`);
|
|
83
|
+
console.log(`│ Origin: ${ruleset.origin.padEnd(60)} │`);
|
|
84
|
+
console.log(`│ Versions: ${ruleset.versions.join(', ').padEnd(60)} │`);
|
|
85
|
+
console.log(`│ Default: ${ruleset.defaultVersion.padEnd(60)} │`);
|
|
86
|
+
console.log(`│ Rules: ${String(ruleset.ruleCount).padEnd(60)} │`);
|
|
87
|
+
console.log(`│ Tags: ${ruleset.tags.join(', ').padEnd(60)} │`);
|
|
88
|
+
console.log('├─────────────────────────────────────────────────────────────────────────┤');
|
|
89
|
+
}
|
|
90
|
+
console.log(`\nTotal: ${rulesets.length} ruleset(s)\n`);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Print detailed ruleset version information
|
|
94
|
+
*/
|
|
95
|
+
function printRulesetDetails(ruleset, verbose) {
|
|
96
|
+
console.log(`\n📦 Ruleset: ${ruleset.metadata.displayName}\n`);
|
|
97
|
+
console.log(`Name: ${ruleset.metadata.name}`);
|
|
98
|
+
console.log(`Version: ${ruleset.version}${ruleset.resolvedVersion ? ` (effective: ${ruleset.resolvedVersion}, from ${ruleset.package || 'npm'})` : ''}`);
|
|
99
|
+
console.log(`Category: ${ruleset.metadata.category}`);
|
|
100
|
+
console.log(`Origin: ${ruleset.metadata.origin}`);
|
|
101
|
+
console.log(`Description: ${ruleset.metadata.description}`);
|
|
102
|
+
console.log(`Source Repo: ${ruleset.sourceRepo}`);
|
|
103
|
+
console.log(`Entry Point: ${ruleset.entrypoint}`);
|
|
104
|
+
if (ruleset.releaseDate) {
|
|
105
|
+
console.log(`Release Date: ${ruleset.releaseDate}`);
|
|
106
|
+
}
|
|
107
|
+
console.log(`Deprecated: ${ruleset.deprecated ? 'Yes' : 'No'}`);
|
|
108
|
+
console.log(`Rules Count: ${ruleset.rules.length}`);
|
|
109
|
+
if (ruleset.changelog) {
|
|
110
|
+
console.log(`\nChangelog:\n ${ruleset.changelog}`);
|
|
111
|
+
}
|
|
112
|
+
console.log(`\nMetadata:`);
|
|
113
|
+
console.log(` Team: ${ruleset.metadata.metadata.team}`);
|
|
114
|
+
console.log(` Repository: ${ruleset.metadata.metadata.repository}`);
|
|
115
|
+
console.log(` License: ${ruleset.metadata.metadata.license}`);
|
|
116
|
+
if (ruleset.metadata.metadata.documentation) {
|
|
117
|
+
console.log(` Docs: ${ruleset.metadata.metadata.documentation}`);
|
|
118
|
+
}
|
|
119
|
+
if (ruleset.metadata.metadata.maintainer) {
|
|
120
|
+
console.log(` Maintainer: ${ruleset.metadata.metadata.maintainer}`);
|
|
121
|
+
}
|
|
122
|
+
if (ruleset.metadata.metadata.contact) {
|
|
123
|
+
console.log(` Contact: ${ruleset.metadata.metadata.contact}`);
|
|
124
|
+
}
|
|
125
|
+
if (verbose) {
|
|
126
|
+
console.log(`\n📜 Rules (${ruleset.rules.length}):\n`);
|
|
127
|
+
for (const rule of ruleset.rules) {
|
|
128
|
+
console.log(` • ${rule.name}`);
|
|
129
|
+
console.log(` Severity: ${rule.severity}`);
|
|
130
|
+
console.log(` Message: ${rule.message}`);
|
|
131
|
+
if (rule.description) {
|
|
132
|
+
console.log(` Description: ${rule.description}`);
|
|
133
|
+
}
|
|
134
|
+
console.log(` Recommended: ${rule.recommended !== false ? 'Yes' : 'No'}`);
|
|
135
|
+
console.log();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
console.log(`\n📜 Rules: ${ruleset.rules.length} total (use --verbose to see details)\n`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Main CLI function
|
|
144
|
+
*/
|
|
145
|
+
async function main() {
|
|
146
|
+
try {
|
|
147
|
+
const options = parseArgs();
|
|
148
|
+
// Load configuration
|
|
149
|
+
const config = await loadConfig();
|
|
150
|
+
// Initialize ruleset loader
|
|
151
|
+
const loader = new RulesetLoader({
|
|
152
|
+
configPath: `${config.rulesets.directory}/config/rulesets.yaml`,
|
|
153
|
+
sourcesBasePath: `${config.rulesets.directory}/sources`,
|
|
154
|
+
enableCache: config.rulesets.cacheEnabled,
|
|
155
|
+
});
|
|
156
|
+
await loader.initialize();
|
|
157
|
+
// Specific ruleset requested
|
|
158
|
+
if (options.name) {
|
|
159
|
+
const version = options.version || undefined;
|
|
160
|
+
const ruleset = await loader.loadVersion(options.name, version);
|
|
161
|
+
if (options.format === 'json') {
|
|
162
|
+
console.log(JSON.stringify(ruleset, null, 2));
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
printRulesetDetails(ruleset, options.verbose);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
// List all rulesets
|
|
170
|
+
const rulesets = loader.listRulesets();
|
|
171
|
+
if (options.format === 'json') {
|
|
172
|
+
console.log(JSON.stringify(rulesets, null, 2));
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
printTable(rulesets);
|
|
176
|
+
if (options.verbose) {
|
|
177
|
+
console.log('\nCache Statistics:');
|
|
178
|
+
const stats = loader.getCacheStats();
|
|
179
|
+
console.log(` Cached entries: ${stats.size}`);
|
|
180
|
+
console.log(` Cache keys: ${stats.keys.join(', ')}`);
|
|
181
|
+
console.log();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
console.error('❌ Error:', error instanceof Error ? error.message : String(error));
|
|
188
|
+
process.exit(1);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// Run CLI
|
|
192
|
+
main();
|
|
193
|
+
//# sourceMappingURL=list-rulesets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-rulesets.js","sourceRoot":"","sources":["../../src/cli/list-rulesets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared connection error handling for CLI commands
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Handle any CLI command error: prints the health-style message for connection
|
|
6
|
+
* errors, a plain error message for everything else, then exits with code 1.
|
|
7
|
+
*/
|
|
8
|
+
export declare function handleCommandError(error: unknown): Promise<never>;
|
|
9
|
+
//# sourceMappingURL=connection-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-error.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/connection-error.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAkBvE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared connection error handling for CLI commands
|
|
3
|
+
*/
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { ConnectionError } from '../api-client.js';
|
|
6
|
+
import { getConfigManager } from '../config-manager.js';
|
|
7
|
+
/**
|
|
8
|
+
* Handle any CLI command error: prints the health-style message for connection
|
|
9
|
+
* errors, a plain error message for everything else, then exits with code 1.
|
|
10
|
+
*/
|
|
11
|
+
export async function handleCommandError(error) {
|
|
12
|
+
if (error instanceof ConnectionError) {
|
|
13
|
+
const configManager = getConfigManager();
|
|
14
|
+
const config = await configManager.get();
|
|
15
|
+
const mode = config.defaultMode;
|
|
16
|
+
const port = config.ports[mode];
|
|
17
|
+
console.log(chalk.red('⚠️ Orchestrator service is not running\n'));
|
|
18
|
+
console.log(chalk.dim(` Mode: ${mode}`));
|
|
19
|
+
console.log(chalk.dim(` Port: ${port}`));
|
|
20
|
+
console.log(chalk.dim(` URL: http://localhost:${port}\n`));
|
|
21
|
+
console.log(chalk.yellow('To start the orchestrator service:\n'));
|
|
22
|
+
console.log(chalk.bold(` spectifyd\n`));
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
26
|
+
console.error(chalk.red('Error:'), msg);
|
|
27
|
+
}
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=connection-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-error.js","sourceRoot":"","sources":["../../../src/cli/utils/connection-error.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAAc;IACnD,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;QACnC,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,IAAI,IAAI,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACJ,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedded Server Lifecycle Management
|
|
3
|
+
*
|
|
4
|
+
* Handles auto-start/stop of embedded server for CLI commands
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Start embedded server if needed based on CLI config
|
|
8
|
+
* Returns shutdown function to be called in finally block
|
|
9
|
+
*
|
|
10
|
+
* @param apiUrl Optional API URL override (if provided, don't start embedded server)
|
|
11
|
+
* @returns Shutdown function or null if server not started
|
|
12
|
+
*/
|
|
13
|
+
export declare function maybeStartEmbeddedServer(apiUrl?: string): Promise<(() => Promise<void>) | null>;
|
|
14
|
+
/**
|
|
15
|
+
* Get API URL based on current CLI configuration
|
|
16
|
+
*
|
|
17
|
+
* @param explicitUrl Optional explicit URL override
|
|
18
|
+
* @returns API URL to use
|
|
19
|
+
*/
|
|
20
|
+
export declare function getApiUrl(explicitUrl?: string): Promise<string>;
|
|
21
|
+
//# sourceMappingURL=embedded-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedded-server.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/embedded-server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAiCvC;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUrE"}
|