@veylqorix/cli 0.0.0-stage → 0.0.1

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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Veylqorix
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,34 @@
1
+ import type { Policy } from '@veylqorix/core';
2
+ export type HooksSubcommand = 'install' | 'uninstall';
3
+ export interface ParsedArgs {
4
+ command: string;
5
+ root: string;
6
+ offline: boolean;
7
+ json: boolean;
8
+ format?: 'json' | 'markdown' | 'sarif';
9
+ reportOut?: string;
10
+ sarifOut?: string;
11
+ noTests: boolean;
12
+ scanners?: string[];
13
+ staged: boolean;
14
+ strict: boolean;
15
+ policyFile?: string;
16
+ policy?: Partial<Policy>;
17
+ prePush: boolean;
18
+ force: boolean;
19
+ yes: boolean;
20
+ hooksSub: HooksSubcommand;
21
+ }
22
+ export declare const KNOWN_COMMANDS: Set<string>;
23
+ export declare function isKnownCommand(word: string): boolean;
24
+ /** Scanner names the audit engine knows how to dispatch (`--scanners` values). */
25
+ export declare const VALID_SCANNERS: string[];
26
+ /** Severity tokens accepted by `--block-on`. */
27
+ export declare const VALID_SEVERITIES: string[];
28
+ /** Normalize legacy aliases to modern verbs. */
29
+ export declare function normalizeCommand(command: string): string;
30
+ /** Parse CLI argv (post-executable) into a structured command description. */
31
+ export declare function parseArgs(argv: string[], cwd?: string): ParsedArgs;
32
+ /** True when `-h` / `--help` was requested. */
33
+ export declare function wantsHelp(argv: string[]): boolean;
34
+ //# sourceMappingURL=cli-args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-args.d.ts","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,WAAW,CAAC;AAEtD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED,eAAO,MAAM,cAAc,aAWzB,CAAC;AAEH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,kFAAkF;AAClF,eAAO,MAAM,cAAc,UAA0C,CAAC;AAEtE,gDAAgD;AAChD,eAAO,MAAM,gBAAgB,UAAgD,CAAC;AAE9E,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAYxD;AAID,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,MAAsB,GAAG,UAAU,CAwJjF;AAED,+CAA+C;AAC/C,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAMjD"}
@@ -0,0 +1,206 @@
1
+ /**
2
+ * Argument parsing for the Veylqorix CLI, isolated from the executable entry
3
+ * point so tests can exercise dispatch and flag handling without spawning a
4
+ * process. `index.ts` re-uses these definitions verbatim.
5
+ */
6
+ import path from 'node:path';
7
+ export const KNOWN_COMMANDS = new Set([
8
+ 'scan',
9
+ 'check',
10
+ 'report',
11
+ 'config',
12
+ 'hooks',
13
+ 'audit',
14
+ 'deps',
15
+ 'secrets',
16
+ 'checks',
17
+ 'gate',
18
+ ]);
19
+ export function isKnownCommand(word) {
20
+ return KNOWN_COMMANDS.has(word);
21
+ }
22
+ /** Scanner names the audit engine knows how to dispatch (`--scanners` values). */
23
+ export const VALID_SCANNERS = ['dependencies', 'secrets', 'licenses'];
24
+ /** Severity tokens accepted by `--block-on`. */
25
+ export const VALID_SEVERITIES = ['INFO', 'LOW', 'MEDIUM', 'HIGH', 'CRITICAL'];
26
+ /** Normalize legacy aliases to modern verbs. */
27
+ export function normalizeCommand(command) {
28
+ switch (command) {
29
+ case 'audit':
30
+ case 'deps':
31
+ case 'secrets':
32
+ case 'gate':
33
+ return 'scan';
34
+ case 'checks':
35
+ return 'check';
36
+ default:
37
+ return command;
38
+ }
39
+ }
40
+ const HOOK_SUBCOMMANDS = new Set(['install', 'uninstall', 'remove']);
41
+ /** Parse CLI argv (post-executable) into a structured command description. */
42
+ export function parseArgs(argv, cwd = process.cwd()) {
43
+ const first = argv[0];
44
+ const isConfig = first === 'config' && argv[1] === 'validate';
45
+ const isHooks = first === 'hooks' && (argv[1] === 'install' || argv[1] === 'uninstall' || argv[1] === 'remove');
46
+ const command = isConfig ? 'config' : isHooks ? 'hooks' : (first ?? 'scan');
47
+ // For `config validate`, the positional after `validate` is the policy file.
48
+ // For everything else, the positional after the command is the root.
49
+ // `config validate <file>`: positional is the policy file.
50
+ // `hooks install|uninstall`: no positional root.
51
+ // Everything else: the positional after the command is the root.
52
+ let flags;
53
+ if (isConfig)
54
+ flags = argv.slice(2);
55
+ else if (isHooks)
56
+ flags = argv.slice(2);
57
+ else
58
+ flags = argv.slice(1);
59
+ const parsed = {
60
+ command,
61
+ root: cwd,
62
+ offline: false,
63
+ json: false,
64
+ noTests: false,
65
+ staged: false,
66
+ strict: false,
67
+ prePush: false,
68
+ force: false,
69
+ yes: false,
70
+ hooksSub: 'install',
71
+ };
72
+ const valueFlag = new Set([
73
+ '--report-out',
74
+ '--sarif-out',
75
+ '--scanners',
76
+ '--block-on',
77
+ '--root',
78
+ '--path',
79
+ '--policy',
80
+ '--config',
81
+ ]);
82
+ for (let i = 0; i < flags.length; i++) {
83
+ const flag = flags[i];
84
+ if (!flag)
85
+ continue;
86
+ if (valueFlag.has(flag)) {
87
+ const value = flags[++i];
88
+ if (value === undefined)
89
+ throw new Error(`${flag} requires a value`);
90
+ switch (flag) {
91
+ case '--root':
92
+ case '--path':
93
+ parsed.root = path.resolve(value);
94
+ break;
95
+ case '--report-out':
96
+ parsed.reportOut = path.resolve(value);
97
+ break;
98
+ case '--sarif-out':
99
+ parsed.sarifOut = path.resolve(value);
100
+ break;
101
+ case '--policy':
102
+ case '--config':
103
+ parsed.policyFile = path.resolve(value);
104
+ break;
105
+ case '--scanners': {
106
+ const names = value
107
+ .split(',')
108
+ .map((s) => s.trim())
109
+ .filter(Boolean);
110
+ const unknown = names.filter((name) => !VALID_SCANNERS.includes(name));
111
+ if (unknown.length > 0) {
112
+ throw new Error(`--scanners: '${unknown.join(`, `)}' is not a known scanner (expected: ${VALID_SCANNERS.join(', ')})`);
113
+ }
114
+ parsed.scanners = names;
115
+ break;
116
+ }
117
+ case '--block-on': {
118
+ const severities = value.split(',').map((s) => s.trim().toUpperCase());
119
+ const unknown = severities.filter((s) => !VALID_SEVERITIES.includes(s));
120
+ if (unknown.length > 0) {
121
+ throw new Error(`--block-on: '${unknown.join(`, `)}' is not a valid severity (expected: ${VALID_SEVERITIES.join(', ')})`);
122
+ }
123
+ parsed.policy = {
124
+ ...parsed.policy,
125
+ blockOnSeverity: severities,
126
+ };
127
+ break;
128
+ }
129
+ }
130
+ continue;
131
+ }
132
+ switch (flag) {
133
+ case '--offline':
134
+ parsed.offline = true;
135
+ break;
136
+ case '--json':
137
+ parsed.json = true;
138
+ parsed.format = 'json';
139
+ break;
140
+ case '--format': {
141
+ const value = flags[++i];
142
+ if (value !== 'json' && value !== 'markdown' && value !== 'sarif')
143
+ throw new Error(`--format must be json, markdown, or sarif (got '${value}')`);
144
+ parsed.format = value;
145
+ if (value === 'json')
146
+ parsed.json = true;
147
+ break;
148
+ }
149
+ case '--no-tests':
150
+ parsed.noTests = true;
151
+ break;
152
+ case '--staged':
153
+ parsed.staged = true;
154
+ break;
155
+ case '--strict':
156
+ parsed.strict = true;
157
+ break;
158
+ case '--pre-push':
159
+ parsed.prePush = true;
160
+ break;
161
+ case '--force':
162
+ parsed.force = true;
163
+ break;
164
+ case '-y':
165
+ case '--yes':
166
+ parsed.yes = true;
167
+ break;
168
+ case '-h':
169
+ case '--help':
170
+ return parsed;
171
+ default:
172
+ if (flag.startsWith('--'))
173
+ throw new Error(`Unknown option: ${flag}`);
174
+ if (command === 'config') {
175
+ // `veylqorix config validate <policy-file>`: the positional is the file.
176
+ parsed.policyFile = path.resolve(flag);
177
+ }
178
+ else if (command === 'hooks') {
179
+ // Any bare positional after `hooks install|uninstall` is the root.
180
+ if (parsed.root === cwd)
181
+ parsed.root = path.resolve(flag);
182
+ }
183
+ else if (parsed.root === cwd && !isKnownCommand(flag)) {
184
+ // A bare positional is the root for scan/check/report.
185
+ parsed.root = path.resolve(flag);
186
+ }
187
+ else if (isKnownCommand(flag)) {
188
+ // Legacy single-word subcommands after the main one are ignored.
189
+ }
190
+ }
191
+ }
192
+ if (command === 'hooks') {
193
+ parsed.hooksSub = isHooks && argv[1] === 'remove' ? 'uninstall' : 'install';
194
+ }
195
+ parsed.root = path.resolve(parsed.root);
196
+ return parsed;
197
+ }
198
+ /** True when `-h` / `--help` was requested. */
199
+ export function wantsHelp(argv) {
200
+ const first = argv[0];
201
+ const isConfig = first === 'config' && argv[1] === 'validate';
202
+ const isHooks = first === 'hooks' && HOOK_SUBCOMMANDS.has(argv[1] ?? '');
203
+ const flags = isConfig || isHooks ? argv.slice(2) : argv.slice(1);
204
+ return flags.includes('-h') || flags.includes('--help');
205
+ }
206
+ //# sourceMappingURL=cli-args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,394 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Veylqorix CLI.
4
+ *
5
+ * Commands:
6
+ * veylqorix scan [root] Run the full security audit + quality gate.
7
+ * veylqorix check [root] Run only the quality checks (type, lint, tests).
8
+ * No scanners run: the gate reports INCOMPLETE
9
+ * (exit 2, secrets unverified). Use `scan` for
10
+ * secret coverage.
11
+ * veylqorix report [root] Emit a human-readable Markdown report.
12
+ * veylqorix config validate [policy-file] Validate a policy JSON file.
13
+ * Legacy aliases: audit, deps, secrets, checks, gate.
14
+ *
15
+ * Options (scan / check / report):
16
+ * --root PATH Audit this directory (default: current working dir).
17
+ * --offline Do not call external scanners (npm audit / pip-audit).
18
+ * --json Emit machine-readable JSON instead of a human summary.
19
+ * --format json|markdown|sarif Force a report format.
20
+ * --report-out PATH Also write a Markdown report to this file.
21
+ * --sarif-out PATH Also write a SARIF report to this file.
22
+ * --no-tests Skip test/build quality checks.
23
+ * --scanners a,b Run only the listed scanners.
24
+ * --staged Scope the secret scan to Git-staged files (git repos only).
25
+ * --block-on a,b Severities that block the gate.
26
+ * --policy FILE Load a policy JSON file for the audit.
27
+ *
28
+ * Exit codes:
29
+ * 0 PASS 1 FAIL (blocking findings) 2 INCOMPLETE (coverage degraded)
30
+ * 64 usage error 65 root not found 70 unexpected error
31
+ */
32
+ import fs from 'node:fs';
33
+ import path from 'node:path';
34
+ import { runAudit, toJson, toMarkdown, renderAllReports, listStagedFiles, validatePolicyFile, findPolicyFile, installHooks, uninstallHooks, } from '@veylqorix/core';
35
+ import { fileURLToPath } from 'node:url';
36
+ const USAGE = `Veylqorix CLI
37
+
38
+ Usage:
39
+ veylqorix <command> [root] [options]
40
+
41
+ Commands:
42
+ scan Run the full security audit + quality gate (default)
43
+ check Run only the quality checks (no scanners; gate is
44
+ INCOMPLETE / exit 2 - secrets unverified, run scan)
45
+ report Emit a Markdown report
46
+ config validate Validate a policy JSON file
47
+
48
+ Options:
49
+ --root PATH Audit this directory (default: current working dir)
50
+ --offline Do not call external scanners
51
+ --json / --format json Machine-readable output
52
+ --format sarif Emit SARIF
53
+ --report-out PATH Write a Markdown report to PATH
54
+ --sarif-out PATH Write a SARIF report to PATH
55
+ --no-tests Skip test/build quality checks
56
+ --scanners a,b Run only the listed scanners
57
+ --staged Scope the secret scan to Git-staged files
58
+ --block-on a,b Severities that block the gate
59
+ --policy FILE Load a policy JSON file
60
+
61
+ Exit codes: 0=PASS 1=FAIL 2=INCOMPLETE 64=usage 65=bad root 70=error`;
62
+ function parseArgs(argv) {
63
+ const first = argv[0];
64
+ if (first === '-h' || first === '--help') {
65
+ // Bare `veylqorix --help` (or `-h`): print usage, do not start a scan.
66
+ console.log(USAGE);
67
+ process.exit(0);
68
+ }
69
+ const isConfig = first === 'config' && argv[1] === 'validate';
70
+ const isHooks = first === 'hooks' && (argv[1] === 'install' || argv[1] === 'uninstall');
71
+ const command = isConfig ? 'config' : isHooks ? 'hooks' : (first ?? 'scan');
72
+ // For `config validate`, the positional after `validate` is the policy file.
73
+ // For everything else, the positional after the command is the root.
74
+ // `config validate <file>`: positional is the policy file.
75
+ // `hooks install|uninstall`: no positional root.
76
+ // Everything else: the positional after the command is the root.
77
+ let flags;
78
+ if (isConfig)
79
+ flags = argv.slice(2);
80
+ else if (isHooks)
81
+ flags = argv.slice(2);
82
+ else
83
+ flags = argv.slice(1);
84
+ const parsed = {
85
+ command,
86
+ root: process.cwd(),
87
+ offline: false,
88
+ json: false,
89
+ noTests: false,
90
+ staged: false,
91
+ prePush: false,
92
+ force: false,
93
+ yes: false,
94
+ };
95
+ const valueFlag = new Set(['--report-out', '--sarif-out', '--scanners', '--block-on', '--root', '--policy']);
96
+ for (let i = 0; i < flags.length; i++) {
97
+ const flag = flags[i];
98
+ if (!flag)
99
+ continue;
100
+ if (valueFlag.has(flag)) {
101
+ const value = flags[++i];
102
+ if (value === undefined)
103
+ throw new Error(`${flag} requires a value`);
104
+ switch (flag) {
105
+ case '--root':
106
+ parsed.root = value;
107
+ break;
108
+ case '--report-out':
109
+ parsed.reportOut = path.resolve(value);
110
+ break;
111
+ case '--sarif-out':
112
+ parsed.sarifOut = path.resolve(value);
113
+ break;
114
+ case '--policy':
115
+ parsed.policyFile = path.resolve(value);
116
+ break;
117
+ case '--scanners':
118
+ parsed.scanners = value.split(',').map((s) => s.trim()).filter(Boolean);
119
+ break;
120
+ case '--block-on':
121
+ parsed.policy = { ...parsed.policy, blockOnSeverity: value.split(',').map((s) => s.trim().toUpperCase()) };
122
+ break;
123
+ }
124
+ continue;
125
+ }
126
+ switch (flag) {
127
+ case '--offline':
128
+ parsed.offline = true;
129
+ break;
130
+ case '--json':
131
+ parsed.json = true;
132
+ parsed.format = 'json';
133
+ break;
134
+ case '--format': {
135
+ const value = flags[++i];
136
+ if (value !== 'json' && value !== 'markdown' && value !== 'sarif')
137
+ throw new Error(`--format must be json, markdown, or sarif (got '${value}')`);
138
+ parsed.format = value;
139
+ if (value === 'json')
140
+ parsed.json = true;
141
+ break;
142
+ }
143
+ case '--no-tests':
144
+ parsed.noTests = true;
145
+ break;
146
+ case '--staged':
147
+ parsed.staged = true;
148
+ break;
149
+ case '--pre-push':
150
+ parsed.prePush = true;
151
+ break;
152
+ case '--force':
153
+ parsed.force = true;
154
+ break;
155
+ case '-y':
156
+ case '--yes':
157
+ parsed.yes = true;
158
+ break;
159
+ case '-h':
160
+ case '--help':
161
+ console.log(USAGE);
162
+ process.exit(0);
163
+ break;
164
+ default:
165
+ if (flag.startsWith('--'))
166
+ throw new Error(`Unknown option: ${flag}`);
167
+ if (command.startsWith('config')) {
168
+ // `veylqorix config validate <policy-file>`: the positional is the file.
169
+ parsed.policyFile = path.resolve(flag);
170
+ }
171
+ else if (parsed.root === process.cwd() && !isKnownCommand(flag)) {
172
+ // A bare positional is the root for scan/check/report.
173
+ parsed.root = path.resolve(flag);
174
+ }
175
+ else if (isKnownCommand(flag)) {
176
+ // Legacy single-word subcommands after the main one are ignored.
177
+ }
178
+ }
179
+ }
180
+ parsed.root = path.resolve(parsed.root);
181
+ return parsed;
182
+ }
183
+ const KNOWN_COMMANDS = new Set(['scan', 'check', 'report', 'config', 'hooks', 'audit', 'deps', 'secrets', 'checks', 'gate']);
184
+ function isKnownCommand(word) {
185
+ return KNOWN_COMMANDS.has(word);
186
+ }
187
+ /** Normalize legacy aliases to modern verbs. */
188
+ function normalizeCommand(command) {
189
+ switch (command) {
190
+ case 'audit':
191
+ case 'deps':
192
+ case 'secrets':
193
+ case 'gate':
194
+ return 'scan';
195
+ case 'checks':
196
+ return 'check';
197
+ default:
198
+ return command;
199
+ }
200
+ }
201
+ function severityIcon(status) {
202
+ switch (status) {
203
+ case 'PASS': return '✅';
204
+ case 'FAIL': return '❌';
205
+ case 'SKIPPED': return '⏭️';
206
+ default: return '⚠️';
207
+ }
208
+ }
209
+ function summarize(result) {
210
+ const gate = result.gate;
211
+ const lines = [];
212
+ lines.push(`${severityIcon(gate.result)} Gate result: ${gate.result} (coverage ${result.coverage}, exit code ${result.exitCode})`);
213
+ lines.push('');
214
+ lines.push('Scanners:');
215
+ for (const s of result.scanners) {
216
+ lines.push(` ${severityIcon(s.status)} ${s.scanner.padEnd(16)} ${s.status.padEnd(8)} ${s.findings.length} finding(s)`);
217
+ }
218
+ if (result.checks.length > 0) {
219
+ lines.push('');
220
+ lines.push('Checks:');
221
+ for (const c of result.checks) {
222
+ lines.push(` ${severityIcon(c.status)} ${c.id.padEnd(16)} ${c.status}`);
223
+ }
224
+ }
225
+ if (gate.blockingReasons.length > 0) {
226
+ lines.push('');
227
+ lines.push('Blocking reasons:');
228
+ for (const r of gate.blockingReasons)
229
+ lines.push(` - ${r}`);
230
+ }
231
+ if (gate.incompleteReasons.length > 0) {
232
+ lines.push('');
233
+ lines.push('Incomplete coverage:');
234
+ for (const r of gate.incompleteReasons)
235
+ lines.push(` - ${r}`);
236
+ }
237
+ if (result.findings.length > 0) {
238
+ lines.push('');
239
+ lines.push(`Findings: ${result.findings.length} total (use --json / --format markdown for details)`);
240
+ }
241
+ else {
242
+ lines.push('');
243
+ lines.push('Findings: 0');
244
+ }
245
+ return lines.join('\n');
246
+ }
247
+ function loadPolicy(parsed) {
248
+ let file = parsed.policyFile;
249
+ if (!file && findPolicyFile(parsed.root))
250
+ file = findPolicyFile(parsed.root);
251
+ let policy = parsed.policy;
252
+ if (file) {
253
+ const result = validatePolicyFile(file);
254
+ if (!result.valid) {
255
+ console.error(`Policy file ${file} is invalid:`);
256
+ for (const issue of result.issues)
257
+ console.error(` [${issue.level}] ${issue.field}: ${issue.message}`);
258
+ process.exit(64);
259
+ }
260
+ const resolved = result.resolved?.policy;
261
+ policy = { ...policy, ...resolved };
262
+ }
263
+ return policy;
264
+ }
265
+ async function main() {
266
+ let parsed;
267
+ try {
268
+ parsed = parseArgs(process.argv.slice(2));
269
+ }
270
+ catch (error) {
271
+ console.error(error.message);
272
+ process.exit(64);
273
+ }
274
+ const command = normalizeCommand(parsed.command);
275
+ if (command === 'hooks') {
276
+ const sub = process.argv[3] === 'uninstall' ? 'uninstall' : 'install';
277
+ const cliPath = path.resolve(fileURLToPath(import.meta.url));
278
+ if (!parsed.yes) {
279
+ // Dry run: print the exact hook scripts; nothing is written without --yes.
280
+ const gitDir = path.join(parsed.root, '.git');
281
+ console.log('Dry run: Veylqorix will write the following hooks (git config is never touched).');
282
+ for (const kind of parsed.prePush ? ['pre-commit', 'pre-push'] : ['pre-commit']) {
283
+ console.log(`--- ${gitDir}/hooks/${kind} ---`);
284
+ const scanArgs = kind === 'pre-commit' ? 'scan --staged --no-tests --scanners secrets' : 'scan --no-tests';
285
+ console.log('#!/bin/sh\n# VeylqORIX-HOOK:v1\n' +
286
+ `# ${kind}: local convenience gate; GitHub-side enforcement is the authoritative boundary.\n` +
287
+ 'if [ "$VEYLQORIX_OVERRIDE" = "1" ]; then echo "veylqorix: VeyLQORIX_OVERRIDE=1; skipping ' + kind + '" >&2; exit 0; fi\n' +
288
+ 'DIR=$(git rev-parse --show-toplevel) || exit 0\n' +
289
+ `exec node ${JSON.stringify(cliPath)} ${scanArgs} --root "$DIR"\n` +
290
+ 'exit $?\n');
291
+ }
292
+ console.log('\nRe-run with --yes to install. Emergency override: VeyLQORIX_OVERRIDE=1 <git command>.');
293
+ process.exit(0);
294
+ }
295
+ const outcome = sub === 'install'
296
+ ? await installHooks({
297
+ repoRoot: parsed.root,
298
+ cliPath,
299
+ prePush: parsed.prePush,
300
+ force: parsed.force,
301
+ extraFlags: parsed.offline ? ['--offline'] : [],
302
+ })
303
+ : await uninstallHooks(parsed.root, parsed.prePush);
304
+ for (const msg of outcome.installed)
305
+ console.log(` installed: ${msg}`);
306
+ for (const msg of outcome.backedUp)
307
+ console.log(` backed up: ${msg}`);
308
+ for (const msg of outcome.skipped)
309
+ console.log(` skipped: ${msg}`);
310
+ for (const msg of outcome.errors)
311
+ console.error(` error: ${msg}`);
312
+ if (sub === 'install' && outcome.installed.length > 0 && outcome.errors.length === 0) {
313
+ console.log('\nManual alternative and testing steps:');
314
+ for (const line of outcome.manualInstructions)
315
+ console.log(` ${line}`);
316
+ }
317
+ process.exit(outcome.errors.length > 0 ? 64 : 0);
318
+ return;
319
+ }
320
+ if (command === 'config') {
321
+ const target = parsed.policyFile;
322
+ if (!target || !fs.existsSync(target)) {
323
+ console.error(`Policy file not found: ${target ?? '(none)'}`);
324
+ console.error('Usage: veylqorix config validate <policy.json>');
325
+ process.exit(65);
326
+ }
327
+ const result = validatePolicyFile(path.resolve(target));
328
+ if (result.valid) {
329
+ console.log(`✅ Policy valid: ${path.resolve(target)}`);
330
+ if (result.issues.length > 0) {
331
+ for (const issue of result.issues)
332
+ console.log(` [${issue.level}] ${issue.field}: ${issue.message}`);
333
+ }
334
+ process.exit(0);
335
+ }
336
+ console.error(`❌ Policy invalid: ${path.resolve(target)}`);
337
+ for (const issue of result.issues)
338
+ console.error(` [${issue.level}] ${issue.field}: ${issue.message}`);
339
+ process.exit(64);
340
+ return;
341
+ }
342
+ if (!fs.existsSync(parsed.root)) {
343
+ console.error(`Root directory does not exist: ${parsed.root}`);
344
+ process.exit(65);
345
+ }
346
+ let stagedFiles;
347
+ if (parsed.staged) {
348
+ stagedFiles = await listStagedFiles(parsed.root);
349
+ if (stagedFiles.length === 0) {
350
+ console.error('No staged files found; run `git add` first. --staged requires a Git repository with staged changes.');
351
+ process.exit(65);
352
+ }
353
+ }
354
+ const options = {
355
+ root: parsed.root,
356
+ online: !parsed.offline,
357
+ includeTests: !parsed.noTests,
358
+ onlyScanners: command === 'check' ? [] : parsed.scanners,
359
+ skipQualityChecks: command === 'check' ? false : undefined,
360
+ policy: loadPolicy(parsed),
361
+ stagedFiles,
362
+ };
363
+ const result = await runAudit(options);
364
+ // Write report files when requested — all derived from the same scan result
365
+ // via the shared rendering path, so a file-write failure here is a visible
366
+ // scan failure, never a silently swallowed gap.
367
+ if (parsed.reportOut || parsed.sarifOut) {
368
+ const written = renderAllReports(result, {
369
+ markdownPath: parsed.reportOut,
370
+ sarifPath: parsed.sarifOut,
371
+ });
372
+ if (written.markdownPath && parsed.format !== 'json' && parsed.format !== 'sarif')
373
+ console.log(`Markdown report written to ${written.markdownPath}`);
374
+ if (written.sarifPath && parsed.format !== 'json' && parsed.format !== 'markdown')
375
+ console.log(`SARIF report written to ${written.sarifPath}`);
376
+ }
377
+ // Decide the stdout shape: --json/--format json wins, then markdown
378
+ // (--format markdown or the `report` command), then a short summary.
379
+ if (parsed.format === 'json' || parsed.json) {
380
+ console.log(toJson(result));
381
+ }
382
+ else if (command === 'report' || parsed.format === 'markdown') {
383
+ console.log(toMarkdown(result));
384
+ }
385
+ else {
386
+ console.log(summarize(result));
387
+ }
388
+ process.exit(result.exitCode);
389
+ }
390
+ main().catch((error) => {
391
+ console.error('veylqorix: unexpected error:', error instanceof Error ? error.message : error);
392
+ process.exit(70);
393
+ });
394
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,32 @@
1
1
  {
2
2
  "name": "@veylqorix/cli",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.0.1",
4
+ "description": "Veylqorix command-line interface: run security audits and quality gates from the terminal or CI.",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/soumyachk101/Veylqorix.git"
9
+ },
10
+ "homepage": "https://github.com/soumyachk101/Veylqorix#readme",
11
+ "type": "module",
12
+ "engines": {
13
+ "node": ">=20.18"
14
+ },
15
+ "main": "dist/index.js",
16
+ "bin": {
17
+ "veylqorix": "dist/index.js"
18
+ },
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "publishConfig": {
23
+ "access": "public"
24
+ },
25
+ "dependencies": {
26
+ "@veylqorix/core": "0.0.1"
27
+ },
28
+ "scripts": {
29
+ "build": "tsc -p tsconfig.json",
30
+ "typecheck": "tsc -p tsconfig.json --noEmit"
31
+ }
6
32
  }
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.