secureflow-cli 2.1.0 → 2.1.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/dist/exporters.js +88 -88
- package/dist/index.js +14 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/local-mode.d.ts +11 -0
- package/dist/lib/local-mode.d.ts.map +1 -0
- package/dist/lib/local-mode.js +17 -0
- package/dist/lib/local-mode.js.map +1 -0
- package/package.json +1 -1
package/dist/exporters.js
CHANGED
|
@@ -91,97 +91,97 @@ export function formatHtml(results) {
|
|
|
91
91
|
}
|
|
92
92
|
const tableRows = violations.length > 0
|
|
93
93
|
? violations
|
|
94
|
-
.map((v) => ` <tr>
|
|
95
|
-
<td>${escapeHtml(v.path)}</td>
|
|
96
|
-
<td>${v.line}</td>
|
|
97
|
-
<td><code>${escapeHtml(v.text)}</code></td>
|
|
98
|
-
<td>${escapeHtml(v.reason)}</td>
|
|
94
|
+
.map((v) => ` <tr>
|
|
95
|
+
<td>${escapeHtml(v.path)}</td>
|
|
96
|
+
<td>${v.line}</td>
|
|
97
|
+
<td><code>${escapeHtml(v.text)}</code></td>
|
|
98
|
+
<td>${escapeHtml(v.reason)}</td>
|
|
99
99
|
</tr>`)
|
|
100
100
|
.join("\n")
|
|
101
101
|
: ` <tr><td colspan="4" class="empty">No violations detected.</td></tr>`;
|
|
102
|
-
return `<!DOCTYPE html>
|
|
103
|
-
<html lang="en">
|
|
104
|
-
<head>
|
|
105
|
-
<meta charset="UTF-8">
|
|
106
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
107
|
-
<title>SecureFlow Scan Report</title>
|
|
108
|
-
<style>
|
|
109
|
-
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
|
110
|
-
body {
|
|
111
|
-
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
|
112
|
-
background: #f6f8fa;
|
|
113
|
-
color: #24292f;
|
|
114
|
-
padding: 2rem;
|
|
115
|
-
line-height: 1.5;
|
|
116
|
-
}
|
|
117
|
-
h1 {
|
|
118
|
-
font-size: 1.5rem;
|
|
119
|
-
margin-bottom: 0.25rem;
|
|
120
|
-
}
|
|
121
|
-
.meta {
|
|
122
|
-
color: #57606a;
|
|
123
|
-
font-size: 0.875rem;
|
|
124
|
-
margin-bottom: 1.5rem;
|
|
125
|
-
}
|
|
126
|
-
table {
|
|
127
|
-
width: 100%;
|
|
128
|
-
border-collapse: collapse;
|
|
129
|
-
background: #ffffff;
|
|
130
|
-
border: 1px solid #d0d7de;
|
|
131
|
-
border-radius: 6px;
|
|
132
|
-
overflow: hidden;
|
|
133
|
-
}
|
|
134
|
-
th, td {
|
|
135
|
-
text-align: left;
|
|
136
|
-
padding: 0.5rem 0.75rem;
|
|
137
|
-
border-bottom: 1px solid #d0d7de;
|
|
138
|
-
}
|
|
139
|
-
th {
|
|
140
|
-
background: #f6f8fa;
|
|
141
|
-
font-weight: 600;
|
|
142
|
-
font-size: 0.875rem;
|
|
143
|
-
}
|
|
144
|
-
td code {
|
|
145
|
-
background: #f0f3f6;
|
|
146
|
-
padding: 0.125rem 0.375rem;
|
|
147
|
-
border-radius: 3px;
|
|
148
|
-
font-size: 0.8125rem;
|
|
149
|
-
}
|
|
150
|
-
tr:last-child td { border-bottom: none; }
|
|
151
|
-
.empty {
|
|
152
|
-
text-align: center;
|
|
153
|
-
color: #57606a;
|
|
154
|
-
padding: 1.5rem;
|
|
155
|
-
}
|
|
156
|
-
.summary {
|
|
157
|
-
margin-top: 1rem;
|
|
158
|
-
font-size: 0.875rem;
|
|
159
|
-
color: #57606a;
|
|
160
|
-
}
|
|
161
|
-
@media print {
|
|
162
|
-
body { background: #fff; padding: 0; }
|
|
163
|
-
}
|
|
164
|
-
</style>
|
|
165
|
-
</head>
|
|
166
|
-
<body>
|
|
167
|
-
<h1>SecureFlow Scan Report</h1>
|
|
168
|
-
<p class="meta">Generated by SecureFlow CLI</p>
|
|
169
|
-
<table>
|
|
170
|
-
<thead>
|
|
171
|
-
<tr>
|
|
172
|
-
<th>File</th>
|
|
173
|
-
<th>Line</th>
|
|
174
|
-
<th>Violation</th>
|
|
175
|
-
<th>Reason</th>
|
|
176
|
-
</tr>
|
|
177
|
-
</thead>
|
|
178
|
-
<tbody>
|
|
179
|
-
${tableRows}
|
|
180
|
-
</tbody>
|
|
181
|
-
</table>
|
|
182
|
-
<p class="summary">${violations.length} violation${violations.length === 1 ? "" : "s"} found.</p>
|
|
183
|
-
</body>
|
|
184
|
-
</html>
|
|
102
|
+
return `<!DOCTYPE html>
|
|
103
|
+
<html lang="en">
|
|
104
|
+
<head>
|
|
105
|
+
<meta charset="UTF-8">
|
|
106
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
107
|
+
<title>SecureFlow Scan Report</title>
|
|
108
|
+
<style>
|
|
109
|
+
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
|
110
|
+
body {
|
|
111
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
|
112
|
+
background: #f6f8fa;
|
|
113
|
+
color: #24292f;
|
|
114
|
+
padding: 2rem;
|
|
115
|
+
line-height: 1.5;
|
|
116
|
+
}
|
|
117
|
+
h1 {
|
|
118
|
+
font-size: 1.5rem;
|
|
119
|
+
margin-bottom: 0.25rem;
|
|
120
|
+
}
|
|
121
|
+
.meta {
|
|
122
|
+
color: #57606a;
|
|
123
|
+
font-size: 0.875rem;
|
|
124
|
+
margin-bottom: 1.5rem;
|
|
125
|
+
}
|
|
126
|
+
table {
|
|
127
|
+
width: 100%;
|
|
128
|
+
border-collapse: collapse;
|
|
129
|
+
background: #ffffff;
|
|
130
|
+
border: 1px solid #d0d7de;
|
|
131
|
+
border-radius: 6px;
|
|
132
|
+
overflow: hidden;
|
|
133
|
+
}
|
|
134
|
+
th, td {
|
|
135
|
+
text-align: left;
|
|
136
|
+
padding: 0.5rem 0.75rem;
|
|
137
|
+
border-bottom: 1px solid #d0d7de;
|
|
138
|
+
}
|
|
139
|
+
th {
|
|
140
|
+
background: #f6f8fa;
|
|
141
|
+
font-weight: 600;
|
|
142
|
+
font-size: 0.875rem;
|
|
143
|
+
}
|
|
144
|
+
td code {
|
|
145
|
+
background: #f0f3f6;
|
|
146
|
+
padding: 0.125rem 0.375rem;
|
|
147
|
+
border-radius: 3px;
|
|
148
|
+
font-size: 0.8125rem;
|
|
149
|
+
}
|
|
150
|
+
tr:last-child td { border-bottom: none; }
|
|
151
|
+
.empty {
|
|
152
|
+
text-align: center;
|
|
153
|
+
color: #57606a;
|
|
154
|
+
padding: 1.5rem;
|
|
155
|
+
}
|
|
156
|
+
.summary {
|
|
157
|
+
margin-top: 1rem;
|
|
158
|
+
font-size: 0.875rem;
|
|
159
|
+
color: #57606a;
|
|
160
|
+
}
|
|
161
|
+
@media print {
|
|
162
|
+
body { background: #fff; padding: 0; }
|
|
163
|
+
}
|
|
164
|
+
</style>
|
|
165
|
+
</head>
|
|
166
|
+
<body>
|
|
167
|
+
<h1>SecureFlow Scan Report</h1>
|
|
168
|
+
<p class="meta">Generated by SecureFlow CLI</p>
|
|
169
|
+
<table>
|
|
170
|
+
<thead>
|
|
171
|
+
<tr>
|
|
172
|
+
<th>File</th>
|
|
173
|
+
<th>Line</th>
|
|
174
|
+
<th>Violation</th>
|
|
175
|
+
<th>Reason</th>
|
|
176
|
+
</tr>
|
|
177
|
+
</thead>
|
|
178
|
+
<tbody>
|
|
179
|
+
${tableRows}
|
|
180
|
+
</tbody>
|
|
181
|
+
</table>
|
|
182
|
+
<p class="summary">${violations.length} violation${violations.length === 1 ? "" : "s"} found.</p>
|
|
183
|
+
</body>
|
|
184
|
+
</html>
|
|
185
185
|
`;
|
|
186
186
|
}
|
|
187
187
|
//# sourceMappingURL=exporters.js.map
|
package/dist/index.js
CHANGED
|
@@ -3,13 +3,16 @@ import fs from "fs";
|
|
|
3
3
|
import { GitError, getStagedFiles, readStagedContent } from "./git.js";
|
|
4
4
|
import { scanFile, formatScanResults } from "./scanner.js";
|
|
5
5
|
import { NetworkUnavailableError, requestAiFileScan, } from "./lib/api-client.js";
|
|
6
|
+
import { hostedAiScanSkipReason } from "./lib/local-mode.js";
|
|
6
7
|
const VERBOSE = process.argv.includes("--verbose");
|
|
7
|
-
const
|
|
8
|
+
const AI_SKIP_REASON = hostedAiScanSkipReason(process.argv);
|
|
8
9
|
/**
|
|
9
|
-
* --local flag:
|
|
10
|
+
* --local flag: keep staged code on this machine (#892).
|
|
10
11
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
12
|
+
* The hosted AI pass is skipped (see hostedAiScanSkipReason), because it
|
|
13
|
+
* uploads file contents to the SecureFlow API whatever LOCAL_AI_URL says.
|
|
14
|
+
* LOCAL_AI_URL / LOCAL_AI_MODEL are still set for any in-process AI module
|
|
15
|
+
* that reads them via resolveLocalModelConfig().
|
|
13
16
|
* The model can be overridden with --local-model <tag> (default: llama3).
|
|
14
17
|
*/
|
|
15
18
|
const LOCAL_FLAG = process.argv.includes("--local");
|
|
@@ -17,7 +20,9 @@ if (LOCAL_FLAG) {
|
|
|
17
20
|
const localFlagIndex = process.argv.findIndex((a) => a === "--local");
|
|
18
21
|
const nextArg = process.argv[localFlagIndex + 1];
|
|
19
22
|
// Check if the argument after --local is a URL (starts with http:// or https://)
|
|
20
|
-
const customUrl = nextArg && (nextArg.startsWith("http://") || nextArg.startsWith("https://"))
|
|
23
|
+
const customUrl = nextArg && (nextArg.startsWith("http://") || nextArg.startsWith("https://"))
|
|
24
|
+
? nextArg
|
|
25
|
+
: undefined;
|
|
21
26
|
const modelIdx = process.argv.findIndex((a) => a === "--local-model");
|
|
22
27
|
const localModel = modelIdx !== -1 ? process.argv[modelIdx + 1] : undefined;
|
|
23
28
|
process.env.LOCAL_AI_URL = customUrl || process.env.LOCAL_AI_URL || "http://localhost:11434/v1";
|
|
@@ -71,7 +76,10 @@ function reportAiFinding(finding) {
|
|
|
71
76
|
* unchanged.
|
|
72
77
|
*/
|
|
73
78
|
async function runAiScanIfAvailable(stagedForAi) {
|
|
74
|
-
if (
|
|
79
|
+
if (AI_SKIP_REASON === "local" && VERBOSE) {
|
|
80
|
+
console.warn("ℹ️ [SecureFlow] --local: hosted AI scan skipped, staged code stays on this machine.");
|
|
81
|
+
}
|
|
82
|
+
if (AI_SKIP_REASON || stagedForAi.length === 0)
|
|
75
83
|
return [];
|
|
76
84
|
try {
|
|
77
85
|
return await requestAiFileScan(stagedForAi);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAA0C,MAAM,cAAc,CAAC;AACnG,OAAO,EACL,uBAAuB,EACvB,iBAAiB,GAGlB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Why the hosted AI pass must not run for this invocation, or `null` when it may.
|
|
3
|
+
*
|
|
4
|
+
* `--local` promises that no code leaves the machine (#892). The CLI has no AI
|
|
5
|
+
* model of its own: its AI pass is `requestAiFileScan`, which uploads staged
|
|
6
|
+
* file contents to the hosted SecureFlow API. Setting `LOCAL_AI_URL` in the CLI
|
|
7
|
+
* process does not change where that upload goes, so under `--local` the only
|
|
8
|
+
* way to keep the promise is not to upload. The local pattern scan still runs.
|
|
9
|
+
*/
|
|
10
|
+
export declare function hostedAiScanSkipReason(argv: readonly string[]): "no-ai" | "local" | null;
|
|
11
|
+
//# sourceMappingURL=local-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-mode.d.ts","sourceRoot":"","sources":["../../src/lib/local-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,CAIxF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Why the hosted AI pass must not run for this invocation, or `null` when it may.
|
|
3
|
+
*
|
|
4
|
+
* `--local` promises that no code leaves the machine (#892). The CLI has no AI
|
|
5
|
+
* model of its own: its AI pass is `requestAiFileScan`, which uploads staged
|
|
6
|
+
* file contents to the hosted SecureFlow API. Setting `LOCAL_AI_URL` in the CLI
|
|
7
|
+
* process does not change where that upload goes, so under `--local` the only
|
|
8
|
+
* way to keep the promise is not to upload. The local pattern scan still runs.
|
|
9
|
+
*/
|
|
10
|
+
export function hostedAiScanSkipReason(argv) {
|
|
11
|
+
if (argv.includes("--no-ai"))
|
|
12
|
+
return "no-ai";
|
|
13
|
+
if (argv.includes("--local"))
|
|
14
|
+
return "local";
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=local-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-mode.js","sourceRoot":"","sources":["../../src/lib/local-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAuB;IAC5D,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,OAAO,CAAC;IAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,OAAO,CAAC;IAC7C,OAAO,IAAI,CAAC;AACd,CAAC"}
|