@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.
Files changed (197) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +5 -0
  3. package/README.md +43 -0
  4. package/build/cli/api-client.d.ts +170 -0
  5. package/build/cli/api-client.d.ts.map +1 -0
  6. package/build/cli/api-client.js +284 -0
  7. package/build/cli/api-client.js.map +1 -0
  8. package/build/cli/commands/agents.d.ts +7 -0
  9. package/build/cli/commands/agents.d.ts.map +1 -0
  10. package/build/cli/commands/agents.js +694 -0
  11. package/build/cli/commands/agents.js.map +1 -0
  12. package/build/cli/commands/completion.d.ts +9 -0
  13. package/build/cli/commands/completion.d.ts.map +1 -0
  14. package/build/cli/commands/completion.js +177 -0
  15. package/build/cli/commands/completion.js.map +1 -0
  16. package/build/cli/commands/config.d.ts +10 -0
  17. package/build/cli/commands/config.d.ts.map +1 -0
  18. package/build/cli/commands/config.js +284 -0
  19. package/build/cli/commands/config.js.map +1 -0
  20. package/build/cli/commands/health.d.ts +11 -0
  21. package/build/cli/commands/health.d.ts.map +1 -0
  22. package/build/cli/commands/health.js +38 -0
  23. package/build/cli/commands/health.js.map +1 -0
  24. package/build/cli/commands/help.d.ts +6 -0
  25. package/build/cli/commands/help.d.ts.map +1 -0
  26. package/build/cli/commands/help.js +20 -0
  27. package/build/cli/commands/help.js.map +1 -0
  28. package/build/cli/commands/history.d.ts +11 -0
  29. package/build/cli/commands/history.d.ts.map +1 -0
  30. package/build/cli/commands/history.js +50 -0
  31. package/build/cli/commands/history.js.map +1 -0
  32. package/build/cli/commands/jobs.d.ts +12 -0
  33. package/build/cli/commands/jobs.d.ts.map +1 -0
  34. package/build/cli/commands/jobs.js +84 -0
  35. package/build/cli/commands/jobs.js.map +1 -0
  36. package/build/cli/commands/lint.d.ts +15 -0
  37. package/build/cli/commands/lint.d.ts.map +1 -0
  38. package/build/cli/commands/lint.js +384 -0
  39. package/build/cli/commands/lint.js.map +1 -0
  40. package/build/cli/commands/ps.d.ts +8 -0
  41. package/build/cli/commands/ps.d.ts.map +1 -0
  42. package/build/cli/commands/ps.js +74 -0
  43. package/build/cli/commands/ps.js.map +1 -0
  44. package/build/cli/commands/reproduce.d.ts +9 -0
  45. package/build/cli/commands/reproduce.d.ts.map +1 -0
  46. package/build/cli/commands/reproduce.js +31 -0
  47. package/build/cli/commands/reproduce.js.map +1 -0
  48. package/build/cli/commands/reset.d.ts +5 -0
  49. package/build/cli/commands/reset.d.ts.map +1 -0
  50. package/build/cli/commands/reset.js +13 -0
  51. package/build/cli/commands/reset.js.map +1 -0
  52. package/build/cli/commands/results.d.ts +13 -0
  53. package/build/cli/commands/results.d.ts.map +1 -0
  54. package/build/cli/commands/results.js +129 -0
  55. package/build/cli/commands/results.js.map +1 -0
  56. package/build/cli/commands/rulesets/check.d.ts +12 -0
  57. package/build/cli/commands/rulesets/check.d.ts.map +1 -0
  58. package/build/cli/commands/rulesets/check.js +226 -0
  59. package/build/cli/commands/rulesets/check.js.map +1 -0
  60. package/build/cli/commands/rulesets/index.d.ts +5 -0
  61. package/build/cli/commands/rulesets/index.d.ts.map +1 -0
  62. package/build/cli/commands/rulesets/index.js +6 -0
  63. package/build/cli/commands/rulesets/index.js.map +1 -0
  64. package/build/cli/commands/rulesets/view.d.ts +16 -0
  65. package/build/cli/commands/rulesets/view.d.ts.map +1 -0
  66. package/build/cli/commands/rulesets/view.js +100 -0
  67. package/build/cli/commands/rulesets/view.js.map +1 -0
  68. package/build/cli/commands/start.d.ts +16 -0
  69. package/build/cli/commands/start.d.ts.map +1 -0
  70. package/build/cli/commands/start.js +167 -0
  71. package/build/cli/commands/start.js.map +1 -0
  72. package/build/cli/commands/status.d.ts +9 -0
  73. package/build/cli/commands/status.d.ts.map +1 -0
  74. package/build/cli/commands/status.js +46 -0
  75. package/build/cli/commands/status.js.map +1 -0
  76. package/build/cli/commands/stop.d.ts +11 -0
  77. package/build/cli/commands/stop.d.ts.map +1 -0
  78. package/build/cli/commands/stop.js +78 -0
  79. package/build/cli/commands/stop.js.map +1 -0
  80. package/build/cli/config-manager.d.ts +134 -0
  81. package/build/cli/config-manager.d.ts.map +1 -0
  82. package/build/cli/config-manager.js +288 -0
  83. package/build/cli/config-manager.js.map +1 -0
  84. package/build/cli/formatters.d.ts +62 -0
  85. package/build/cli/formatters.d.ts.map +1 -0
  86. package/build/cli/formatters.js +715 -0
  87. package/build/cli/formatters.js.map +1 -0
  88. package/build/cli/history-manager.d.ts +97 -0
  89. package/build/cli/history-manager.d.ts.map +1 -0
  90. package/build/cli/history-manager.js +201 -0
  91. package/build/cli/history-manager.js.map +1 -0
  92. package/build/cli/index.d.ts +16 -0
  93. package/build/cli/index.d.ts.map +1 -0
  94. package/build/cli/index.js +335 -0
  95. package/build/cli/index.js.map +1 -0
  96. package/build/cli/list-rulesets.d.ts +15 -0
  97. package/build/cli/list-rulesets.d.ts.map +1 -0
  98. package/build/cli/list-rulesets.js +193 -0
  99. package/build/cli/list-rulesets.js.map +1 -0
  100. package/build/cli/utils/connection-error.d.ts +9 -0
  101. package/build/cli/utils/connection-error.d.ts.map +1 -0
  102. package/build/cli/utils/connection-error.js +30 -0
  103. package/build/cli/utils/connection-error.js.map +1 -0
  104. package/build/cli/utils/embedded-server.d.ts +21 -0
  105. package/build/cli/utils/embedded-server.d.ts.map +1 -0
  106. package/build/cli/utils/embedded-server.js +61 -0
  107. package/build/cli/utils/embedded-server.js.map +1 -0
  108. package/build/cli/utils/mode-validator.d.ts +13 -0
  109. package/build/cli/utils/mode-validator.d.ts.map +1 -0
  110. package/build/cli/utils/mode-validator.js +31 -0
  111. package/build/cli/utils/mode-validator.js.map +1 -0
  112. package/build/cli/utils/port-checker.d.ts +20 -0
  113. package/build/cli/utils/port-checker.d.ts.map +1 -0
  114. package/build/cli/utils/port-checker.js +49 -0
  115. package/build/cli/utils/port-checker.js.map +1 -0
  116. package/build/config.d.ts +57 -0
  117. package/build/config.d.ts.map +1 -0
  118. package/build/config.js +527 -0
  119. package/build/config.js.map +1 -0
  120. package/build/document-accessor.d.ts +79 -0
  121. package/build/document-accessor.d.ts.map +1 -0
  122. package/build/document-accessor.js +148 -0
  123. package/build/document-accessor.js.map +1 -0
  124. package/build/formatters/reproduce-markdown.d.ts +14 -0
  125. package/build/formatters/reproduce-markdown.d.ts.map +1 -0
  126. package/build/formatters/reproduce-markdown.js +182 -0
  127. package/build/formatters/reproduce-markdown.js.map +1 -0
  128. package/build/formatters/sarif-builder.d.ts +86 -0
  129. package/build/formatters/sarif-builder.d.ts.map +1 -0
  130. package/build/formatters/sarif-builder.js +276 -0
  131. package/build/formatters/sarif-builder.js.map +1 -0
  132. package/build/index.d.ts +3 -0
  133. package/build/index.d.ts.map +1 -0
  134. package/build/index.js +174 -0
  135. package/build/index.js.map +1 -0
  136. package/build/logger.d.ts +38 -0
  137. package/build/logger.d.ts.map +1 -0
  138. package/build/logger.js +105 -0
  139. package/build/logger.js.map +1 -0
  140. package/build/mock-server.d.ts +2 -0
  141. package/build/mock-server.d.ts.map +1 -0
  142. package/build/mock-server.js +290 -0
  143. package/build/mock-server.js.map +1 -0
  144. package/build/orchestrator.d.ts +149 -0
  145. package/build/orchestrator.d.ts.map +1 -0
  146. package/build/orchestrator.js +874 -0
  147. package/build/orchestrator.js.map +1 -0
  148. package/build/ruleset-loader.d.ts +79 -0
  149. package/build/ruleset-loader.d.ts.map +1 -0
  150. package/build/ruleset-loader.js +514 -0
  151. package/build/ruleset-loader.js.map +1 -0
  152. package/build/schemas.d.ts +2568 -0
  153. package/build/schemas.d.ts.map +1 -0
  154. package/build/schemas.js +674 -0
  155. package/build/schemas.js.map +1 -0
  156. package/build/server.d.ts +39 -0
  157. package/build/server.d.ts.map +1 -0
  158. package/build/server.js +834 -0
  159. package/build/server.js.map +1 -0
  160. package/build/storage/memory-storage.d.ts +190 -0
  161. package/build/storage/memory-storage.d.ts.map +1 -0
  162. package/build/storage/memory-storage.js +629 -0
  163. package/build/storage/memory-storage.js.map +1 -0
  164. package/build/storage/redis-storage.d.ts +134 -0
  165. package/build/storage/redis-storage.d.ts.map +1 -0
  166. package/build/storage/redis-storage.js +236 -0
  167. package/build/storage/redis-storage.js.map +1 -0
  168. package/build/storage/storage-adapter.d.ts +189 -0
  169. package/build/storage/storage-adapter.d.ts.map +1 -0
  170. package/build/storage/storage-adapter.js +36 -0
  171. package/build/storage/storage-adapter.js.map +1 -0
  172. package/build/types.d.ts +981 -0
  173. package/build/types.d.ts.map +1 -0
  174. package/build/types.js +5 -0
  175. package/build/types.js.map +1 -0
  176. package/build/utils/version.d.ts +40 -0
  177. package/build/utils/version.d.ts.map +1 -0
  178. package/build/utils/version.js +94 -0
  179. package/build/utils/version.js.map +1 -0
  180. package/build/validation.d.ts +95 -0
  181. package/build/validation.d.ts.map +1 -0
  182. package/build/validation.js +150 -0
  183. package/build/validation.js.map +1 -0
  184. package/build/worker-pool.d.ts +137 -0
  185. package/build/worker-pool.d.ts.map +1 -0
  186. package/build/worker-pool.js +549 -0
  187. package/build/worker-pool.js.map +1 -0
  188. package/build/worker.d.ts +2 -0
  189. package/build/worker.d.ts.map +1 -0
  190. package/build/worker.js +427 -0
  191. package/build/worker.js.map +1 -0
  192. package/package.json +110 -0
  193. package/rulesets/CHANGELOG.md +25 -0
  194. package/rulesets/config/rulesets.yaml +96 -0
  195. package/rulesets/sources/README.md +47 -0
  196. package/rulesets/sources/example/oas-recommended/v1.0.0/ruleset.yaml +6 -0
  197. 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":";AACA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAS1C;;GAEG;AACH,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAe;QAC1B,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,OAAO;KAChB,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACxC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QACzB,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YAC/B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACzB,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC5C,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;YAC1B,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5C,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;CAkBb,CAAC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,QAAe;IACjC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;IAE3F,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;IAC7F,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,MAAM,eAAe,CAAC,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,OAAY,EAAE,OAAgB;IACzD,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,OAAO,CAAC,eAAe,UAAU,OAAO,CAAC,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9J,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACnD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAErD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,KAAK,CAAC,MAAM,MAAM,CAAC,CAAC;QACvD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YACtD,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,KAAK,CAAC,MAAM,yCAAyC,CAAC,CAAC;IAC5F,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;QAE5B,qBAAqB;QACrB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;QAElC,4BAA4B;QAC5B,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC;YAC/B,UAAU,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,uBAAuB;YAC/D,eAAe,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,UAAU;YACvD,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,YAAY;SAC1C,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAE1B,6BAA6B;QAC7B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC;YAC7C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEhE,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,oBAAoB;YACpB,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;YAEvC,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAErB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACpB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;oBACnC,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;oBACrC,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC/C,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC1D,OAAO,CAAC,GAAG,EAAE,CAAC;gBAChB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,UAAU;AACV,IAAI,EAAE,CAAC"}
@@ -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"}