@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,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Start Command - Launch orchestrator server
|
|
3
|
+
*/
|
|
4
|
+
import { SpectifyMode } from '../config-manager.js';
|
|
5
|
+
export interface StartOptions {
|
|
6
|
+
mode?: SpectifyMode;
|
|
7
|
+
config?: string;
|
|
8
|
+
port?: number;
|
|
9
|
+
host?: string;
|
|
10
|
+
documentStore?: string;
|
|
11
|
+
dev?: boolean;
|
|
12
|
+
interactive?: boolean;
|
|
13
|
+
daemon?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function startCommand(options?: StartOptions): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAoB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAMtE,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqL5E"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Start Command - Launch orchestrator server
|
|
3
|
+
*/
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
import inquirer from 'inquirer';
|
|
7
|
+
import { getConfigManager } from '../config-manager.js';
|
|
8
|
+
import { isPortAvailable, findAvailablePort } from '../utils/port-checker.js';
|
|
9
|
+
import { startServer } from '../../server.js';
|
|
10
|
+
import { createEmbeddedModeConfig, createStandaloneModeConfig, createCompanionModeConfig } from '../../config.js';
|
|
11
|
+
export async function startCommand(options = {}) {
|
|
12
|
+
const configManager = getConfigManager();
|
|
13
|
+
const config = await configManager.get();
|
|
14
|
+
console.log(chalk.bold.blue('\n🚀 Linting Orchestrator — Quality Assurance for API specifications\n'));
|
|
15
|
+
// Determine mode (embedded, standalone, or companion)
|
|
16
|
+
const mode = options.mode || config.defaultMode || 'embedded';
|
|
17
|
+
let targetPort = options.port || config.ports[mode] || 3003;
|
|
18
|
+
console.log(chalk.cyan('Mode:'), mode);
|
|
19
|
+
console.log(chalk.cyan('Configured Port:'), targetPort);
|
|
20
|
+
// Check if port is available
|
|
21
|
+
const portAvailable = await isPortAvailable(targetPort);
|
|
22
|
+
if (!portAvailable) {
|
|
23
|
+
console.log(chalk.yellow(`\n⚠️ Port ${targetPort} is already in use\n`));
|
|
24
|
+
// Find next available port
|
|
25
|
+
const suggestedPort = await findAvailablePort(targetPort + 1);
|
|
26
|
+
if (options.interactive !== false) {
|
|
27
|
+
// Interactive mode
|
|
28
|
+
const { action } = await inquirer.prompt([
|
|
29
|
+
{
|
|
30
|
+
type: 'list',
|
|
31
|
+
name: 'action',
|
|
32
|
+
message: 'What would you like to do?',
|
|
33
|
+
choices: [
|
|
34
|
+
{
|
|
35
|
+
name: `Use different port (suggested: ${suggestedPort || 'scan...'})`,
|
|
36
|
+
value: 'different',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Cancel',
|
|
40
|
+
value: 'cancel',
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
]);
|
|
45
|
+
if (action === 'cancel') {
|
|
46
|
+
console.log(chalk.dim('Cancelled'));
|
|
47
|
+
process.exit(0);
|
|
48
|
+
}
|
|
49
|
+
// Ask for port
|
|
50
|
+
const { newPort } = await inquirer.prompt([
|
|
51
|
+
{
|
|
52
|
+
type: 'number',
|
|
53
|
+
name: 'newPort',
|
|
54
|
+
message: 'Enter port number:',
|
|
55
|
+
default: suggestedPort || targetPort + 1,
|
|
56
|
+
validate: async (input) => {
|
|
57
|
+
const num = parseInt(String(input), 10);
|
|
58
|
+
if (isNaN(num) || num < 1 || num > 65535) {
|
|
59
|
+
return 'Port must be between 1 and 65535';
|
|
60
|
+
}
|
|
61
|
+
const available = await isPortAvailable(num);
|
|
62
|
+
if (!available) {
|
|
63
|
+
return `Port ${num} is also in use`;
|
|
64
|
+
}
|
|
65
|
+
return true;
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
]);
|
|
69
|
+
targetPort = newPort;
|
|
70
|
+
// Ask if config should be updated
|
|
71
|
+
const { updateConfig } = await inquirer.prompt([
|
|
72
|
+
{
|
|
73
|
+
type: 'confirm',
|
|
74
|
+
name: 'updateConfig',
|
|
75
|
+
message: `Update default ${mode} port to ${targetPort}?`,
|
|
76
|
+
default: false,
|
|
77
|
+
},
|
|
78
|
+
]);
|
|
79
|
+
if (updateConfig) {
|
|
80
|
+
await configManager.setPort(mode, targetPort);
|
|
81
|
+
console.log(chalk.green(`✅ Configuration updated\n`));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
// Non-interactive: fail with suggestion
|
|
86
|
+
console.error(chalk.red(`Error: Port ${targetPort} is already in use`));
|
|
87
|
+
console.log(chalk.yellow(`\nSuggestion: Use a different port:`));
|
|
88
|
+
console.log(chalk.dim(` spectify start --mode ${mode} --port ${suggestedPort || targetPort + 1}\n`));
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Update last used
|
|
93
|
+
await configManager.setLastUsed(mode, targetPort);
|
|
94
|
+
// Build configuration based on mode
|
|
95
|
+
let serverConfig;
|
|
96
|
+
if (mode === 'embedded') {
|
|
97
|
+
serverConfig = createEmbeddedModeConfig();
|
|
98
|
+
}
|
|
99
|
+
else if (mode === 'companion') {
|
|
100
|
+
serverConfig = createCompanionModeConfig();
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
serverConfig = createStandaloneModeConfig();
|
|
104
|
+
}
|
|
105
|
+
// Apply CLI option overrides
|
|
106
|
+
serverConfig.server = {
|
|
107
|
+
port: targetPort,
|
|
108
|
+
host: options.host || '0.0.0.0',
|
|
109
|
+
maxDocumentSizeMB: serverConfig.server.maxDocumentSizeMB // Preserve config value
|
|
110
|
+
};
|
|
111
|
+
if (options.documentStore && serverConfig.documentStore) {
|
|
112
|
+
serverConfig.documentStore = {
|
|
113
|
+
...serverConfig.documentStore,
|
|
114
|
+
baseDir: options.documentStore,
|
|
115
|
+
type: serverConfig.documentStore.type // Preserve type
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
// Display configuration
|
|
119
|
+
console.log(chalk.dim(`\n Port: ${targetPort}`));
|
|
120
|
+
console.log(chalk.dim(` Host: ${serverConfig.server.host}`));
|
|
121
|
+
console.log(chalk.dim(` Document Store: ${serverConfig.documentStore?.baseDir}`));
|
|
122
|
+
if (options.config) {
|
|
123
|
+
console.log(chalk.dim(` Config: ${options.config}`));
|
|
124
|
+
}
|
|
125
|
+
console.log();
|
|
126
|
+
// Start the server (embedded in-process)
|
|
127
|
+
const spinner = ora('Starting the Orchestrator service...').start();
|
|
128
|
+
try {
|
|
129
|
+
// Import and start server directly (no spawning!)
|
|
130
|
+
const instance = await startServer(serverConfig);
|
|
131
|
+
spinner.succeed('Server started successfully!');
|
|
132
|
+
// Register the process for tracking
|
|
133
|
+
await configManager.registerProcess(mode, process.pid, targetPort);
|
|
134
|
+
// Display quick start info
|
|
135
|
+
console.log(chalk.bold('\n✨ Quick Start:\n'));
|
|
136
|
+
console.log(chalk.yellow(' Check health:'));
|
|
137
|
+
console.log(chalk.gray(` curl http://localhost:${targetPort}/health | jq\n`));
|
|
138
|
+
console.log(chalk.yellow(' List available rulesets:'));
|
|
139
|
+
console.log(chalk.gray(` curl http://localhost:${targetPort}/rulesets | jq\n`));
|
|
140
|
+
console.log(chalk.yellow(' Lint a document:'));
|
|
141
|
+
console.log(chalk.gray(` spectify lint openapi.yaml\n`));
|
|
142
|
+
console.log(chalk.gray(' Press Ctrl+C to stop the server\n'));
|
|
143
|
+
// Setup graceful shutdown
|
|
144
|
+
const shutdown = async (signal) => {
|
|
145
|
+
console.log(chalk.yellow(`\n\nReceived ${signal}, shutting down...`));
|
|
146
|
+
try {
|
|
147
|
+
// Unregister process before shutdown
|
|
148
|
+
await configManager.unregisterProcess(mode);
|
|
149
|
+
await instance.shutdown();
|
|
150
|
+
console.log(chalk.green('✅ Server stopped'));
|
|
151
|
+
process.exit(0);
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
console.error(chalk.red('Error during shutdown:'), error);
|
|
155
|
+
process.exit(1);
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
159
|
+
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
spinner.fail('Failed to start server');
|
|
163
|
+
console.error(chalk.red('\nError:'), error instanceof Error ? error.message : String(error));
|
|
164
|
+
process.exit(1);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCxF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status command - Check job status
|
|
3
|
+
*/
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
import { SpectifyAPIClient } from '../api-client.js';
|
|
7
|
+
import { formatJobStatus } from '../formatters.js';
|
|
8
|
+
export async function statusCommand(jobId, options) {
|
|
9
|
+
try {
|
|
10
|
+
const client = new SpectifyAPIClient(options.apiUrl);
|
|
11
|
+
if (options.watch) {
|
|
12
|
+
// Watch mode: poll until completion
|
|
13
|
+
const spinner = ora('Checking status...').start();
|
|
14
|
+
await client.pollJobUntilComplete(jobId, {
|
|
15
|
+
interval: 2000,
|
|
16
|
+
onProgress: (status) => {
|
|
17
|
+
spinner.stop();
|
|
18
|
+
console.clear();
|
|
19
|
+
console.log(formatJobStatus(status));
|
|
20
|
+
if (status.status === 'running' || status.status === 'queued') {
|
|
21
|
+
spinner.start('Waiting for completion...');
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
spinner.succeed('Job completed');
|
|
26
|
+
console.log(chalk.green('\n✓ Job completed. Use `spectify results <jobId>` to view results.\n'));
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
// Single check
|
|
30
|
+
const spinner = ora('Checking status...').start();
|
|
31
|
+
const status = await client.getJobStatus(jobId);
|
|
32
|
+
spinner.stop();
|
|
33
|
+
console.log(formatJobStatus(status));
|
|
34
|
+
if (status.status === 'completed') {
|
|
35
|
+
console.log(chalk.dim('Use `spectify results <jobId>` to view results.\n'));
|
|
36
|
+
}
|
|
37
|
+
else if (status.status === 'running' || status.status === 'queued') {
|
|
38
|
+
console.log(chalk.dim('Use `spectify status <jobId> --watch` to wait for completion.\n'));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAOnD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAa,EAAE,OAAsB;IACvE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAErD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,oCAAoC;YACpC,MAAM,OAAO,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;YAElD,MAAM,MAAM,CAAC,oBAAoB,CAAC,KAAK,EAAE;gBACvC,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE;oBACrB,OAAO,CAAC,IAAI,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,EAAE,CAAC;oBAChB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;oBAErC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;wBAC9D,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;oBAC7C,CAAC;gBACH,CAAC;aACF,CAAC,CAAC;YAEH,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC,CAAC;QACnG,CAAC;aAAM,CAAC;YACN,eAAe;YACf,MAAM,OAAO,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;YAErC,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;YAC9E,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stop Command - Stop running orchestrator processes
|
|
3
|
+
*/
|
|
4
|
+
import { SpectifyMode } from '../config-manager.js';
|
|
5
|
+
export interface StopOptions {
|
|
6
|
+
mode?: SpectifyMode;
|
|
7
|
+
port?: number;
|
|
8
|
+
all?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function stopCommand(options?: StopOptions): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=stop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/stop.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAoB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEtE,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkF1E"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stop Command - Stop running orchestrator processes
|
|
3
|
+
*/
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { getConfigManager } from '../config-manager.js';
|
|
6
|
+
export async function stopCommand(options = {}) {
|
|
7
|
+
const configManager = getConfigManager();
|
|
8
|
+
try {
|
|
9
|
+
if (options.all) {
|
|
10
|
+
// Stop all running processes
|
|
11
|
+
const processes = await configManager.getAllProcesses();
|
|
12
|
+
if (processes.length === 0) {
|
|
13
|
+
console.log(chalk.yellow('No orchestrator processes running'));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
console.log(chalk.bold(`\n🛑 Stopping ${processes.length} orchestrator process(es)...\n`));
|
|
17
|
+
for (const proc of processes) {
|
|
18
|
+
try {
|
|
19
|
+
process.kill(proc.pid, 'SIGTERM');
|
|
20
|
+
await configManager.unregisterProcess(proc.mode);
|
|
21
|
+
console.log(chalk.green(`✅ Stopped ${proc.mode} (PID ${proc.pid}, port ${proc.port})`));
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
console.log(chalk.red(`❌ Failed to stop ${proc.mode} (PID ${proc.pid}): ${error instanceof Error ? error.message : String(error)}`));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
console.log();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (options.port) {
|
|
31
|
+
// Stop by port
|
|
32
|
+
const proc = await configManager.getProcessByPort(options.port);
|
|
33
|
+
if (!proc) {
|
|
34
|
+
console.log(chalk.yellow(`No orchestrator process found running on port ${options.port}`));
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
console.log(chalk.bold(`\n🛑 Stopping orchestrator on port ${options.port}...\n`));
|
|
38
|
+
try {
|
|
39
|
+
process.kill(proc.pid, 'SIGTERM');
|
|
40
|
+
await configManager.unregisterProcess(proc.mode);
|
|
41
|
+
console.log(chalk.green(`✅ Stopped ${proc.mode} (PID ${proc.pid})`));
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
console.log(chalk.red(`❌ Failed to stop process: ${error instanceof Error ? error.message : String(error)}`));
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
console.log();
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// Stop by mode (default)
|
|
51
|
+
const config = await configManager.get();
|
|
52
|
+
const targetMode = options.mode || config.defaultMode;
|
|
53
|
+
const proc = await configManager.getProcess(targetMode);
|
|
54
|
+
if (!proc) {
|
|
55
|
+
console.log(chalk.yellow(`No orchestrator process running in ${targetMode} mode`));
|
|
56
|
+
console.log(chalk.dim(`\n Configured port: ${config.ports[targetMode]}`));
|
|
57
|
+
console.log(chalk.dim(' Check running processes: spectify ps\n'));
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
console.log(chalk.bold(`\n🛑 Stopping orchestrator (${targetMode} mode)...\n`));
|
|
61
|
+
try {
|
|
62
|
+
process.kill(proc.pid, 'SIGTERM');
|
|
63
|
+
await configManager.unregisterProcess(targetMode);
|
|
64
|
+
console.log(chalk.green(`✅ Stopped successfully`));
|
|
65
|
+
console.log(chalk.dim(` PID: ${proc.pid}`));
|
|
66
|
+
console.log(chalk.dim(` Port: ${proc.port}\n`));
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
console.log(chalk.red(`❌ Failed to stop process: ${error instanceof Error ? error.message : String(error)}`));
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/cli/commands/stop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Manager - Manages CLI configuration in ~/.spectify/config.json
|
|
3
|
+
*/
|
|
4
|
+
export type SpectifyMode = 'standalone' | 'embedded' | 'companion';
|
|
5
|
+
export interface SpectifyConfig {
|
|
6
|
+
defaultMode: SpectifyMode;
|
|
7
|
+
ports: {
|
|
8
|
+
standalone: number;
|
|
9
|
+
embedded: number;
|
|
10
|
+
companion: number;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Optional URL override for standalone and companion modes.
|
|
14
|
+
* When set, this URL is used instead of http://localhost:<port>.
|
|
15
|
+
* Useful for connecting to a remote spectifyd (e.g. a Docker container).
|
|
16
|
+
* Takes lower precedence than the SPECTIFYD_URL environment variable.
|
|
17
|
+
*/
|
|
18
|
+
url?: string;
|
|
19
|
+
lastUsed?: {
|
|
20
|
+
mode: SpectifyMode;
|
|
21
|
+
port: number;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export interface RunningProcess {
|
|
25
|
+
pid: number;
|
|
26
|
+
port: number;
|
|
27
|
+
mode: SpectifyMode;
|
|
28
|
+
startedAt: string;
|
|
29
|
+
}
|
|
30
|
+
export interface ProcessRegistry {
|
|
31
|
+
[mode: string]: RunningProcess | null;
|
|
32
|
+
}
|
|
33
|
+
export declare class ConfigManager {
|
|
34
|
+
private configDir;
|
|
35
|
+
private configPath;
|
|
36
|
+
private processesPath;
|
|
37
|
+
private config;
|
|
38
|
+
constructor();
|
|
39
|
+
/**
|
|
40
|
+
* Ensure config directory exists
|
|
41
|
+
*/
|
|
42
|
+
private ensureConfigDir;
|
|
43
|
+
/**
|
|
44
|
+
* Load config from disk, create if doesn't exist
|
|
45
|
+
*/
|
|
46
|
+
load(): Promise<SpectifyConfig>;
|
|
47
|
+
/**
|
|
48
|
+
* Save config to disk
|
|
49
|
+
*/
|
|
50
|
+
save(): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Get current config (loads if not cached)
|
|
53
|
+
*/
|
|
54
|
+
get(): Promise<SpectifyConfig>;
|
|
55
|
+
/**
|
|
56
|
+
* Update default mode
|
|
57
|
+
*/
|
|
58
|
+
setDefaultMode(mode: SpectifyMode): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Update port for a mode
|
|
61
|
+
*/
|
|
62
|
+
setPort(mode: SpectifyMode, port: number): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Update last used settings
|
|
65
|
+
*/
|
|
66
|
+
setLastUsed(mode: SpectifyMode, port: number): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Get port for a specific mode
|
|
69
|
+
*/
|
|
70
|
+
getPort(mode: SpectifyMode): Promise<number>;
|
|
71
|
+
/**
|
|
72
|
+
* Get API URL for the given (or default) mode.
|
|
73
|
+
*
|
|
74
|
+
* Resolution order:
|
|
75
|
+
* 1. SPECTIFYD_URL env var (session override, highest priority)
|
|
76
|
+
* 2. config.url (persistent override via `spectify config set url <url>`)
|
|
77
|
+
* 3. http://localhost:<port> (default)
|
|
78
|
+
*
|
|
79
|
+
* The URL override is intentionally ignored for `embedded` mode because
|
|
80
|
+
* embedded mode manages a local process — it must always bind to localhost.
|
|
81
|
+
*/
|
|
82
|
+
getApiUrl(mode?: SpectifyMode): Promise<string>;
|
|
83
|
+
/**
|
|
84
|
+
* Set (or clear) the persistent URL override.
|
|
85
|
+
* Pass undefined to remove the override and revert to localhost:<port>.
|
|
86
|
+
*/
|
|
87
|
+
setUrl(url: string | undefined): Promise<void>;
|
|
88
|
+
/**
|
|
89
|
+
* Reset config to defaults
|
|
90
|
+
*/
|
|
91
|
+
reset(): Promise<void>;
|
|
92
|
+
/**
|
|
93
|
+
* Get config file path
|
|
94
|
+
*/
|
|
95
|
+
getConfigPath(): string;
|
|
96
|
+
/**
|
|
97
|
+
* Check if config file exists
|
|
98
|
+
*/
|
|
99
|
+
exists(): Promise<boolean>;
|
|
100
|
+
/**
|
|
101
|
+
* Load process registry
|
|
102
|
+
*/
|
|
103
|
+
private loadProcesses;
|
|
104
|
+
/**
|
|
105
|
+
* Save process registry
|
|
106
|
+
*/
|
|
107
|
+
private saveProcesses;
|
|
108
|
+
/**
|
|
109
|
+
* Register a running process
|
|
110
|
+
*/
|
|
111
|
+
registerProcess(mode: SpectifyMode, pid: number, port: number): Promise<void>;
|
|
112
|
+
/**
|
|
113
|
+
* Unregister a process
|
|
114
|
+
*/
|
|
115
|
+
unregisterProcess(mode: SpectifyMode): Promise<void>;
|
|
116
|
+
/**
|
|
117
|
+
* Get running process for a mode
|
|
118
|
+
*/
|
|
119
|
+
getProcess(mode: SpectifyMode): Promise<RunningProcess | null>;
|
|
120
|
+
/**
|
|
121
|
+
* Get all running processes
|
|
122
|
+
*/
|
|
123
|
+
getAllProcesses(): Promise<RunningProcess[]>;
|
|
124
|
+
/**
|
|
125
|
+
* Check if a process is running
|
|
126
|
+
*/
|
|
127
|
+
private isProcessRunning;
|
|
128
|
+
/**
|
|
129
|
+
* Find process by port
|
|
130
|
+
*/
|
|
131
|
+
getProcessByPort(port: number): Promise<RunningProcess | null>;
|
|
132
|
+
}
|
|
133
|
+
export declare function getConfigManager(): ConfigManager;
|
|
134
|
+
//# sourceMappingURL=config-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/cli/config-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,CAAC;AAEnE,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,YAAY,CAAC;IAC1B,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,YAAY,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;CACvC;AAWD,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,MAAM,CAA+B;;IAQ7C;;OAEG;YACW,eAAe;IAQ7B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC;IA6BrC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B;;OAEG;IACG,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC;IAIpC;;OAEG;IACG,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvD;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9D;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlE;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAKlD;;;;;;;;;;OAUG;IACG,SAAS,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBrD;;;OAGG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAahC;;OAEG;YACW,aAAa;IAS3B;;OAEG;YACW,aAAa;IAS3B;;OAEG;IACG,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWnF;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1D;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAkBpE;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAgBlD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACG,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAWrE;AAKD,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD"}
|