@vaultcompass/vault-guard 1.0.0
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 +21 -0
- package/dist/__tests__/integration/proxy-test-helpers.d.ts +47 -0
- package/dist/__tests__/integration/proxy-test-helpers.d.ts.map +1 -0
- package/dist/__tests__/integration/proxy-test-helpers.js +146 -0
- package/dist/__tests__/integration/proxy-test-helpers.js.map +1 -0
- package/dist/cli-entry.d.ts +3 -0
- package/dist/cli-entry.d.ts.map +1 -0
- package/dist/cli-entry.js +15 -0
- package/dist/cli-entry.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +241 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/check.d.ts +2 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +40 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/config.d.ts +6 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +57 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/data.d.ts +67 -0
- package/dist/commands/data.d.ts.map +1 -0
- package/dist/commands/data.js +294 -0
- package/dist/commands/data.js.map +1 -0
- package/dist/commands/fix.d.ts +2 -0
- package/dist/commands/fix.d.ts.map +1 -0
- package/dist/commands/fix.js +80 -0
- package/dist/commands/fix.js.map +1 -0
- package/dist/commands/index.d.ts +11 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +26 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/install-hook.d.ts +3 -0
- package/dist/commands/install-hook.d.ts.map +1 -0
- package/dist/commands/install-hook.js +31 -0
- package/dist/commands/install-hook.js.map +1 -0
- package/dist/commands/monitor.d.ts +2 -0
- package/dist/commands/monitor.d.ts.map +1 -0
- package/dist/commands/monitor.js +23 -0
- package/dist/commands/monitor.js.map +1 -0
- package/dist/commands/proxy.d.ts +68 -0
- package/dist/commands/proxy.d.ts.map +1 -0
- package/dist/commands/proxy.js +445 -0
- package/dist/commands/proxy.js.map +1 -0
- package/dist/commands/scan.d.ts +3 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +156 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/statusline.d.ts +2 -0
- package/dist/commands/statusline.d.ts.map +1 -0
- package/dist/commands/statusline.js +34 -0
- package/dist/commands/statusline.js.map +1 -0
- package/dist/commands/suggest-model.d.ts +6 -0
- package/dist/commands/suggest-model.d.ts.map +1 -0
- package/dist/commands/suggest-model.js +38 -0
- package/dist/commands/suggest-model.js.map +1 -0
- package/dist/commands/tokens.d.ts +2 -0
- package/dist/commands/tokens.d.ts.map +1 -0
- package/dist/commands/tokens.js +22 -0
- package/dist/commands/tokens.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +18 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/scan-utils.d.ts +65 -0
- package/dist/utils/scan-utils.d.ts.map +1 -0
- package/dist/utils/scan-utils.js +333 -0
- package/dist/utils/scan-utils.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options for {@link dataStatusCommand}.
|
|
3
|
+
*
|
|
4
|
+
* `dbPath` overrides the default `~/.vault-guard/usage.sqlite` location and
|
|
5
|
+
* exists primarily for tests. Production callers should leave it undefined.
|
|
6
|
+
*/
|
|
7
|
+
export interface DataStatusOptions {
|
|
8
|
+
json?: boolean;
|
|
9
|
+
dbPath?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Options for {@link dataResetCommand}.
|
|
13
|
+
*
|
|
14
|
+
* - `yes` skips the interactive `y/N` prompt. Required for non-interactive
|
|
15
|
+
* contexts (CI, scripts).
|
|
16
|
+
* - `dryRun` reports what would be deleted without touching the filesystem.
|
|
17
|
+
* - `confirmFn` is a test seam — when omitted the command reads from stdin.
|
|
18
|
+
*/
|
|
19
|
+
export interface DataResetOptions {
|
|
20
|
+
yes?: boolean;
|
|
21
|
+
dryRun?: boolean;
|
|
22
|
+
json?: boolean;
|
|
23
|
+
dbPath?: string;
|
|
24
|
+
confirmFn?: () => Promise<boolean>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Options for {@link dataExportCommand}. `output` is the destination path
|
|
28
|
+
* (a file; `-` is not currently supported — keeps the implementation honest
|
|
29
|
+
* about file permissions and atomic writes).
|
|
30
|
+
*/
|
|
31
|
+
export interface DataExportOptions {
|
|
32
|
+
output: string;
|
|
33
|
+
format?: 'json' | 'jsonl';
|
|
34
|
+
dbPath?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Print a privacy-respecting summary of the local telemetry database.
|
|
38
|
+
*
|
|
39
|
+
* Prefers JSON when `options.json` is true. Returns the process exit code.
|
|
40
|
+
* Returns 2 (not 1) when telemetry is unavailable so callers can distinguish
|
|
41
|
+
* "expected degradation" from "real failure".
|
|
42
|
+
*/
|
|
43
|
+
export declare function dataStatusCommand(options?: DataStatusOptions): Promise<number>;
|
|
44
|
+
/**
|
|
45
|
+
* Delete `~/.vault-guard/usage.sqlite` and its WAL/SHM/journal sidecars.
|
|
46
|
+
*
|
|
47
|
+
* Safety:
|
|
48
|
+
* - Interactive `y/N` prompt unless `--yes`. Refuses to proceed when
|
|
49
|
+
* stdin is not a TTY and `--yes` was not passed (prevents accidental
|
|
50
|
+
* pipe-driven nukes in CI).
|
|
51
|
+
* - `--dry-run` prints the plan without touching the filesystem.
|
|
52
|
+
* - Only deletes the four expected files; never `rm -rf`s the directory.
|
|
53
|
+
*
|
|
54
|
+
* Returns the process exit code.
|
|
55
|
+
*/
|
|
56
|
+
export declare function dataResetCommand(options?: DataResetOptions): Promise<number>;
|
|
57
|
+
/**
|
|
58
|
+
* Export the raw contents of `usage_events` and `session_events` to a file.
|
|
59
|
+
*
|
|
60
|
+
* **Privacy note:** unlike `data status`, the export includes the `cwd`
|
|
61
|
+
* column as persisted (64-char **HMAC-SHA256** digests — not plaintext paths).
|
|
62
|
+
* The user explicitly chose the output path; nothing is transmitted off-device.
|
|
63
|
+
*
|
|
64
|
+
* Returns the process exit code.
|
|
65
|
+
*/
|
|
66
|
+
export declare function dataExportCommand(options: DataExportOptions): Promise<number>;
|
|
67
|
+
//# sourceMappingURL=data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/commands/data.ts"],"names":[],"mappings":"AAaA;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACpC;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyCxF;AA4BD;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgGtF;AA4BD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8CnF"}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.dataStatusCommand = dataStatusCommand;
|
|
37
|
+
exports.dataResetCommand = dataResetCommand;
|
|
38
|
+
exports.dataExportCommand = dataExportCommand;
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const readline = __importStar(require("readline/promises"));
|
|
41
|
+
const process_1 = require("process");
|
|
42
|
+
const vault_guard_telemetry_1 = require("@vaultcompass/vault-guard-telemetry");
|
|
43
|
+
/**
|
|
44
|
+
* Print a privacy-respecting summary of the local telemetry database.
|
|
45
|
+
*
|
|
46
|
+
* Prefers JSON when `options.json` is true. Returns the process exit code.
|
|
47
|
+
* Returns 2 (not 1) when telemetry is unavailable so callers can distinguish
|
|
48
|
+
* "expected degradation" from "real failure".
|
|
49
|
+
*/
|
|
50
|
+
async function dataStatusCommand(options = {}) {
|
|
51
|
+
const dbPath = options.dbPath ?? (0, vault_guard_telemetry_1.getDefaultDbPath)();
|
|
52
|
+
const asJson = Boolean(options.json);
|
|
53
|
+
let store;
|
|
54
|
+
try {
|
|
55
|
+
store = new vault_guard_telemetry_1.TelemetryStore(dbPath);
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
if (e instanceof vault_guard_telemetry_1.TelemetryUnavailableError) {
|
|
59
|
+
const payload = {
|
|
60
|
+
error: 'telemetry_unavailable',
|
|
61
|
+
message: e.message,
|
|
62
|
+
db_path: dbPath,
|
|
63
|
+
};
|
|
64
|
+
if (asJson) {
|
|
65
|
+
process.stdout.write(`${JSON.stringify(payload)}\n`);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
process.stderr.write(`vault-guard data status: telemetry unavailable — ${e.message}\n` +
|
|
69
|
+
`expected db path: ${dbPath}\n`);
|
|
70
|
+
}
|
|
71
|
+
return 2;
|
|
72
|
+
}
|
|
73
|
+
throw e;
|
|
74
|
+
}
|
|
75
|
+
let status;
|
|
76
|
+
try {
|
|
77
|
+
status = store.getDataStatus(dbPath);
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
store.close();
|
|
81
|
+
}
|
|
82
|
+
if (asJson) {
|
|
83
|
+
process.stdout.write(`${JSON.stringify(status)}\n`);
|
|
84
|
+
return 0;
|
|
85
|
+
}
|
|
86
|
+
printStatusHuman(status);
|
|
87
|
+
return 0;
|
|
88
|
+
}
|
|
89
|
+
function printStatusHuman(s) {
|
|
90
|
+
const sizeKb = (s.db_size_bytes / 1024).toFixed(1);
|
|
91
|
+
const lines = [
|
|
92
|
+
'Vault Guard local telemetry status',
|
|
93
|
+
'',
|
|
94
|
+
` db path : ${s.db_path}`,
|
|
95
|
+
` db exists : ${s.db_exists ? 'yes' : 'no'}`,
|
|
96
|
+
` db size : ${sizeKb} KB`,
|
|
97
|
+
` last write : ${s.last_write_iso ?? '—'}`,
|
|
98
|
+
` usage events : ${s.usage_events}`,
|
|
99
|
+
` session events : ${s.session_events}`,
|
|
100
|
+
` earliest event : ${s.earliest_event_iso ?? '—'}`,
|
|
101
|
+
` latest event : ${s.latest_event_iso ?? '—'}`,
|
|
102
|
+
` distinct cwd : ${s.distinct_cwd_count} (count only — values redacted; see docs/PRIVACY.md)`,
|
|
103
|
+
` distinct models : ${s.distinct_model_count}`,
|
|
104
|
+
` last model : ${s.last_model ?? '—'}`,
|
|
105
|
+
];
|
|
106
|
+
if (s.sidecars.length > 0) {
|
|
107
|
+
lines.push(' sidecar files :');
|
|
108
|
+
for (const side of s.sidecars) {
|
|
109
|
+
lines.push(` - ${side.path} (${side.size_bytes} B)`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
process.stdout.write(`${lines.join('\n')}\n`);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Delete `~/.vault-guard/usage.sqlite` and its WAL/SHM/journal sidecars.
|
|
116
|
+
*
|
|
117
|
+
* Safety:
|
|
118
|
+
* - Interactive `y/N` prompt unless `--yes`. Refuses to proceed when
|
|
119
|
+
* stdin is not a TTY and `--yes` was not passed (prevents accidental
|
|
120
|
+
* pipe-driven nukes in CI).
|
|
121
|
+
* - `--dry-run` prints the plan without touching the filesystem.
|
|
122
|
+
* - Only deletes the four expected files; never `rm -rf`s the directory.
|
|
123
|
+
*
|
|
124
|
+
* Returns the process exit code.
|
|
125
|
+
*/
|
|
126
|
+
async function dataResetCommand(options = {}) {
|
|
127
|
+
const dbPath = options.dbPath ?? (0, vault_guard_telemetry_1.getDefaultDbPath)();
|
|
128
|
+
const asJson = Boolean(options.json);
|
|
129
|
+
const dryRun = Boolean(options.dryRun);
|
|
130
|
+
const candidates = [dbPath, ...(0, vault_guard_telemetry_1.getDbSidecarPaths)(dbPath)];
|
|
131
|
+
const existing = candidates.filter(p => {
|
|
132
|
+
try {
|
|
133
|
+
fs.statSync(p);
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
if (existing.length === 0) {
|
|
141
|
+
const payload = {
|
|
142
|
+
action: 'reset',
|
|
143
|
+
removed: [],
|
|
144
|
+
dry_run: dryRun,
|
|
145
|
+
message: 'No telemetry files to delete.',
|
|
146
|
+
db_path: dbPath,
|
|
147
|
+
};
|
|
148
|
+
if (asJson) {
|
|
149
|
+
process.stdout.write(`${JSON.stringify(payload)}\n`);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
process.stdout.write(`vault-guard data reset: nothing to delete (no telemetry files at ${dbPath}).\n`);
|
|
153
|
+
}
|
|
154
|
+
return 0;
|
|
155
|
+
}
|
|
156
|
+
// Confirmation gate. Order matters: --yes wins, then dry-run is treated as
|
|
157
|
+
// implicitly confirmed (no destructive side effect), otherwise prompt.
|
|
158
|
+
if (!options.yes && !dryRun) {
|
|
159
|
+
const confirmed = await confirmReset(options.confirmFn, existing);
|
|
160
|
+
if (!confirmed) {
|
|
161
|
+
const payload = {
|
|
162
|
+
action: 'reset',
|
|
163
|
+
removed: [],
|
|
164
|
+
dry_run: false,
|
|
165
|
+
cancelled: true,
|
|
166
|
+
db_path: dbPath,
|
|
167
|
+
};
|
|
168
|
+
if (asJson) {
|
|
169
|
+
process.stdout.write(`${JSON.stringify(payload)}\n`);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
process.stdout.write('vault-guard data reset: cancelled.\n');
|
|
173
|
+
}
|
|
174
|
+
return 0;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
const removed = [];
|
|
178
|
+
const errors = [];
|
|
179
|
+
for (const p of existing) {
|
|
180
|
+
if (dryRun) {
|
|
181
|
+
removed.push(p);
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
try {
|
|
185
|
+
fs.unlinkSync(p);
|
|
186
|
+
removed.push(p);
|
|
187
|
+
}
|
|
188
|
+
catch (e) {
|
|
189
|
+
errors.push({
|
|
190
|
+
path: p,
|
|
191
|
+
message: e instanceof Error ? e.message : String(e),
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
const payload = {
|
|
196
|
+
action: 'reset',
|
|
197
|
+
removed,
|
|
198
|
+
errors,
|
|
199
|
+
dry_run: dryRun,
|
|
200
|
+
db_path: dbPath,
|
|
201
|
+
};
|
|
202
|
+
if (asJson) {
|
|
203
|
+
process.stdout.write(`${JSON.stringify(payload)}\n`);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
const verb = dryRun ? 'would delete' : 'deleted';
|
|
207
|
+
process.stdout.write(`vault-guard data reset: ${verb} ${removed.length} file(s):\n`);
|
|
208
|
+
for (const p of removed)
|
|
209
|
+
process.stdout.write(` - ${p}\n`);
|
|
210
|
+
if (errors.length > 0) {
|
|
211
|
+
process.stderr.write(`vault-guard data reset: ${errors.length} error(s):\n`);
|
|
212
|
+
for (const err of errors) {
|
|
213
|
+
process.stderr.write(` - ${err.path}: ${err.message}\n`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return errors.length > 0 ? 1 : 0;
|
|
218
|
+
}
|
|
219
|
+
async function confirmReset(confirmFn, files) {
|
|
220
|
+
if (confirmFn) {
|
|
221
|
+
return confirmFn();
|
|
222
|
+
}
|
|
223
|
+
// Refuse to silently proceed in non-interactive contexts. The user can pass
|
|
224
|
+
// --yes if that's actually what they want.
|
|
225
|
+
if (!process_1.stdin.isTTY) {
|
|
226
|
+
process.stderr.write('vault-guard data reset: stdin is not a TTY. Re-run with --yes to confirm non-interactively.\n');
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
process.stdout.write('About to delete the following files:\n');
|
|
230
|
+
for (const p of files)
|
|
231
|
+
process.stdout.write(` - ${p}\n`);
|
|
232
|
+
const rl = readline.createInterface({ input: process_1.stdin, output: process_1.stdout });
|
|
233
|
+
try {
|
|
234
|
+
const answer = await rl.question('Continue? [y/N] ');
|
|
235
|
+
return /^y(es)?$/i.test(answer.trim());
|
|
236
|
+
}
|
|
237
|
+
finally {
|
|
238
|
+
rl.close();
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Export the raw contents of `usage_events` and `session_events` to a file.
|
|
243
|
+
*
|
|
244
|
+
* **Privacy note:** unlike `data status`, the export includes the `cwd`
|
|
245
|
+
* column as persisted (64-char **HMAC-SHA256** digests — not plaintext paths).
|
|
246
|
+
* The user explicitly chose the output path; nothing is transmitted off-device.
|
|
247
|
+
*
|
|
248
|
+
* Returns the process exit code.
|
|
249
|
+
*/
|
|
250
|
+
async function dataExportCommand(options) {
|
|
251
|
+
const dbPath = options.dbPath ?? (0, vault_guard_telemetry_1.getDefaultDbPath)();
|
|
252
|
+
const format = options.format ?? 'json';
|
|
253
|
+
let store;
|
|
254
|
+
try {
|
|
255
|
+
store = new vault_guard_telemetry_1.TelemetryStore(dbPath);
|
|
256
|
+
}
|
|
257
|
+
catch (e) {
|
|
258
|
+
if (e instanceof vault_guard_telemetry_1.TelemetryUnavailableError) {
|
|
259
|
+
process.stderr.write(`vault-guard data export: telemetry unavailable — ${e.message}\n`);
|
|
260
|
+
return 2;
|
|
261
|
+
}
|
|
262
|
+
throw e;
|
|
263
|
+
}
|
|
264
|
+
try {
|
|
265
|
+
const usage = store.exportUsageEvents();
|
|
266
|
+
const sessions = store.exportSessionEvents();
|
|
267
|
+
if (format === 'jsonl') {
|
|
268
|
+
const lines = [];
|
|
269
|
+
for (const r of usage)
|
|
270
|
+
lines.push(JSON.stringify({ table: 'usage_events', ...r }));
|
|
271
|
+
for (const r of sessions)
|
|
272
|
+
lines.push(JSON.stringify({ table: 'session_events', ...r }));
|
|
273
|
+
// 0o600 mode: export contains raw paths/cwd; restrict to the user.
|
|
274
|
+
fs.writeFileSync(options.output, `${lines.join('\n')}\n`, { mode: 0o600 });
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
const payload = {
|
|
278
|
+
exported_at: new Date().toISOString(),
|
|
279
|
+
db_path: dbPath,
|
|
280
|
+
usage_events: usage,
|
|
281
|
+
session_events: sessions,
|
|
282
|
+
};
|
|
283
|
+
fs.writeFileSync(options.output, `${JSON.stringify(payload, null, 2)}\n`, {
|
|
284
|
+
mode: 0o600,
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
process.stdout.write(`vault-guard data export: wrote ${usage.length} usage row(s) and ${sessions.length} session row(s) to ${options.output}\n`);
|
|
288
|
+
return 0;
|
|
289
|
+
}
|
|
290
|
+
finally {
|
|
291
|
+
store.close();
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/commands/data.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"AAKA,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA8DjE"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.fixCommand = fixCommand;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const vault_guard_core_1 = require("@vaultcompass/vault-guard-core");
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
async function fixCommand(files) {
|
|
12
|
+
console.log(chalk_1.default.blue.bold('🔧 Secret Remediation Guide\n'));
|
|
13
|
+
console.log(chalk_1.default.gray('This command shows you exactly what needs to be fixed.'));
|
|
14
|
+
console.log(chalk_1.default.gray('Manual remediation is required for security reasons.\n'));
|
|
15
|
+
if (files.length === 0) {
|
|
16
|
+
console.log(chalk_1.default.yellow('⚠️ No files specified'));
|
|
17
|
+
console.log(chalk_1.default.gray('Usage: vault-guard fix <files...>\n'));
|
|
18
|
+
return 0; // Success (nothing to do)
|
|
19
|
+
}
|
|
20
|
+
const scanner = new vault_guard_core_1.SecretScanner();
|
|
21
|
+
let filesWithSecrets = 0;
|
|
22
|
+
let totalSecrets = 0;
|
|
23
|
+
for (const file of files) {
|
|
24
|
+
if (!fs_1.default.existsSync(file)) {
|
|
25
|
+
console.error(chalk_1.default.red('❌ Error:'), chalk_1.default.white(`File not found: ${file}\n`));
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const matches = scanner.scan(file);
|
|
29
|
+
if (matches.length === 0) {
|
|
30
|
+
console.log(chalk_1.default.green('✅'), chalk_1.default.white(`${file}: No secrets found`));
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
filesWithSecrets++;
|
|
34
|
+
totalSecrets += matches.length;
|
|
35
|
+
const relativePath = path_1.default.relative(process.cwd(), file);
|
|
36
|
+
console.log(chalk_1.default.yellow('⚠️'), chalk_1.default.white(`${relativePath}: ${matches.length} secret${matches.length > 1 ? 's' : ''} found`));
|
|
37
|
+
console.log(chalk_1.default.gray(' Remediation steps:'));
|
|
38
|
+
for (const match of matches) {
|
|
39
|
+
console.log('');
|
|
40
|
+
console.log(chalk_1.default.gray(` 1. Open file: ${relativePath}`));
|
|
41
|
+
console.log(chalk_1.default.gray(` 2. Go to line: ${match.line}`));
|
|
42
|
+
console.log(chalk_1.default.gray(` 3. Remove: ${chalk_1.default.white(match.type)} secret`));
|
|
43
|
+
console.log(chalk_1.default.gray(` 4. Replace with: ${getReplacementSuggestion(match.type)}`));
|
|
44
|
+
// Show context (masked)
|
|
45
|
+
console.log(chalk_1.default.gray(` Found: ${match.value}`));
|
|
46
|
+
}
|
|
47
|
+
console.log('');
|
|
48
|
+
}
|
|
49
|
+
if (filesWithSecrets === 0) {
|
|
50
|
+
console.log(chalk_1.default.green.bold('✅ All files clean!\n'));
|
|
51
|
+
return 0; // Success exit code
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
console.log(chalk_1.default.bold('Summary:'));
|
|
55
|
+
console.log(chalk_1.default.yellow(` ⚠️ Files with secrets: ${filesWithSecrets}`));
|
|
56
|
+
console.log(chalk_1.default.red(` ❌ Total secrets: ${totalSecrets}`));
|
|
57
|
+
console.log('');
|
|
58
|
+
console.log(chalk_1.default.gray('Next steps:'));
|
|
59
|
+
console.log(chalk_1.default.gray(' 1. Fix the secrets listed above'));
|
|
60
|
+
console.log(chalk_1.default.gray(' 2. Run: vault-guard check to verify'));
|
|
61
|
+
console.log(chalk_1.default.gray(' 3. Commit your changes\n'));
|
|
62
|
+
return 1; // Error exit code (secrets found)
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function getReplacementSuggestion(secretType) {
|
|
66
|
+
const suggestions = {
|
|
67
|
+
'anthropic': 'Environment variable (ANTHROPIC_API_KEY)',
|
|
68
|
+
'openai': 'Environment variable (OPENAI_API_KEY)',
|
|
69
|
+
'stripe': 'Environment variable (STRIPE_SECRET_KEY)',
|
|
70
|
+
'aws-access': 'AWS IAM role or environment variable',
|
|
71
|
+
'aws-secret': 'AWS IAM role or environment variable',
|
|
72
|
+
'github-token': 'GitHub Actions secret or environment variable',
|
|
73
|
+
'jwt-token': 'Environment variable or authentication service',
|
|
74
|
+
'api-key-generic': 'Environment variable or secrets manager',
|
|
75
|
+
'secret-generic': 'Environment variable or secrets manager',
|
|
76
|
+
'password-in-code': 'Environment variable or secrets manager'
|
|
77
|
+
};
|
|
78
|
+
return suggestions[secretType] || 'Environment variable or secure vault';
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=fix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { scanCommand } from './scan';
|
|
2
|
+
export { configValidateCommand } from './config';
|
|
3
|
+
export { installHookCommand } from './install-hook';
|
|
4
|
+
export { tokensCommand } from './tokens';
|
|
5
|
+
export { fixCommand } from './fix';
|
|
6
|
+
export { checkCommand } from './check';
|
|
7
|
+
export { statuslineCommand } from './statusline';
|
|
8
|
+
export { suggestModelCommand } from './suggest-model';
|
|
9
|
+
export { proxyCommand } from './proxy';
|
|
10
|
+
export { dataStatusCommand, dataResetCommand, dataExportCommand, type DataStatusOptions, type DataResetOptions, type DataExportOptions, } from './data';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,GACvB,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.dataExportCommand = exports.dataResetCommand = exports.dataStatusCommand = exports.proxyCommand = exports.suggestModelCommand = exports.statuslineCommand = exports.checkCommand = exports.fixCommand = exports.tokensCommand = exports.installHookCommand = exports.configValidateCommand = exports.scanCommand = void 0;
|
|
4
|
+
var scan_1 = require("./scan");
|
|
5
|
+
Object.defineProperty(exports, "scanCommand", { enumerable: true, get: function () { return scan_1.scanCommand; } });
|
|
6
|
+
var config_1 = require("./config");
|
|
7
|
+
Object.defineProperty(exports, "configValidateCommand", { enumerable: true, get: function () { return config_1.configValidateCommand; } });
|
|
8
|
+
var install_hook_1 = require("./install-hook");
|
|
9
|
+
Object.defineProperty(exports, "installHookCommand", { enumerable: true, get: function () { return install_hook_1.installHookCommand; } });
|
|
10
|
+
var tokens_1 = require("./tokens");
|
|
11
|
+
Object.defineProperty(exports, "tokensCommand", { enumerable: true, get: function () { return tokens_1.tokensCommand; } });
|
|
12
|
+
var fix_1 = require("./fix");
|
|
13
|
+
Object.defineProperty(exports, "fixCommand", { enumerable: true, get: function () { return fix_1.fixCommand; } });
|
|
14
|
+
var check_1 = require("./check");
|
|
15
|
+
Object.defineProperty(exports, "checkCommand", { enumerable: true, get: function () { return check_1.checkCommand; } });
|
|
16
|
+
var statusline_1 = require("./statusline");
|
|
17
|
+
Object.defineProperty(exports, "statuslineCommand", { enumerable: true, get: function () { return statusline_1.statuslineCommand; } });
|
|
18
|
+
var suggest_model_1 = require("./suggest-model");
|
|
19
|
+
Object.defineProperty(exports, "suggestModelCommand", { enumerable: true, get: function () { return suggest_model_1.suggestModelCommand; } });
|
|
20
|
+
var proxy_1 = require("./proxy");
|
|
21
|
+
Object.defineProperty(exports, "proxyCommand", { enumerable: true, get: function () { return proxy_1.proxyCommand; } });
|
|
22
|
+
var data_1 = require("./data");
|
|
23
|
+
Object.defineProperty(exports, "dataStatusCommand", { enumerable: true, get: function () { return data_1.dataStatusCommand; } });
|
|
24
|
+
Object.defineProperty(exports, "dataResetCommand", { enumerable: true, get: function () { return data_1.dataResetCommand; } });
|
|
25
|
+
Object.defineProperty(exports, "dataExportCommand", { enumerable: true, get: function () { return data_1.dataExportCommand; } });
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":";;;AAAA,+BAAqC;AAA5B,mGAAA,WAAW,OAAA;AACpB,mCAAiD;AAAxC,+GAAA,qBAAqB,OAAA;AAC9B,+CAAoD;AAA3C,kHAAA,kBAAkB,OAAA;AAC3B,mCAAyC;AAAhC,uGAAA,aAAa,OAAA;AACtB,6BAAmC;AAA1B,iGAAA,UAAU,OAAA;AACnB,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,2CAAiD;AAAxC,+GAAA,iBAAiB,OAAA;AAC1B,iDAAsD;AAA7C,oHAAA,mBAAmB,OAAA;AAC5B,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,+BAOgB;AANd,yGAAA,iBAAiB,OAAA;AACjB,wGAAA,gBAAgB,OAAA;AAChB,yGAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-hook.d.ts","sourceRoot":"","sources":["../../src/commands/install-hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAGjF,wBAAsB,kBAAkB,CAAC,OAAO,GAAE,WAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBvF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.installHookCommand = installHookCommand;
|
|
7
|
+
const vault_guard_core_1 = require("@vaultcompass/vault-guard-core");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
async function installHookCommand(manager = 'native') {
|
|
10
|
+
console.log(chalk_1.default.blue('🪝 Installing pre-commit hook\n'));
|
|
11
|
+
console.log(chalk_1.default.gray(` Manager: ${manager}\n`));
|
|
12
|
+
const hook = new vault_guard_core_1.PreCommitHook();
|
|
13
|
+
const result = hook.install({ manager });
|
|
14
|
+
if (result.success) {
|
|
15
|
+
console.log(chalk_1.default.green.bold('✅ SUCCESS:'), chalk_1.default.white(result.message));
|
|
16
|
+
if (result.hookPath) {
|
|
17
|
+
console.log(chalk_1.default.gray(` Path: ${result.hookPath}`));
|
|
18
|
+
}
|
|
19
|
+
console.log(chalk_1.default.gray('\nThe hook runs `vault-guard scan --staged` before each commit (staged files only).\n'));
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
console.error(chalk_1.default.red('❌ Error:'), chalk_1.default.white(result.message));
|
|
23
|
+
if (result.message.includes('git repository')) {
|
|
24
|
+
console.log(chalk_1.default.gray('💡 Hint: Run'), chalk_1.default.cyan('git init'), chalk_1.default.gray('first\n'));
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
console.log(chalk_1.default.gray('💡 Hint: Check file permissions or merge the snippet shown above.\n'));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=install-hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-hook.js","sourceRoot":"","sources":["../../src/commands/install-hook.ts"],"names":[],"mappings":";;;;;AAGA,gDAyBC;AA5BD,qEAAiF;AACjF,kDAA0B;AAEnB,KAAK,UAAU,kBAAkB,CAAC,UAAuB,QAAQ;IACtE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,eAAe,OAAO,IAAI,CAAC,CAAC,CAAC;IAEpD,MAAM,IAAI,GAAG,IAAI,gCAAa,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAEzC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,eAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACzE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CACR,uFAAuF,CACxF,CACF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAClE,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/commands/monitor.ts"],"names":[],"mappings":"AAEA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBpD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.monitorCommand = monitorCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
async function monitorCommand() {
|
|
9
|
+
console.log(chalk_1.default.blue.bold('📊 Status Monitor\n'));
|
|
10
|
+
// TODO: Implement real-time status monitor
|
|
11
|
+
// This will display:
|
|
12
|
+
// - Current token usage
|
|
13
|
+
// - Session savings
|
|
14
|
+
// - Active AI sessions
|
|
15
|
+
// - Security status
|
|
16
|
+
console.log(chalk_1.default.gray('Status monitor coming soon'));
|
|
17
|
+
console.log(chalk_1.default.gray('Will display:'));
|
|
18
|
+
console.log(chalk_1.default.gray(' • Real-time token usage'));
|
|
19
|
+
console.log(chalk_1.default.gray(' • Session savings %'));
|
|
20
|
+
console.log(chalk_1.default.gray(' • Active AI sessions'));
|
|
21
|
+
console.log(chalk_1.default.gray(' • Security scan status\n'));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/commands/monitor.ts"],"names":[],"mappings":";;;;;AAEA,wCAgBC;AAlBD,kDAA0B;AAEnB,KAAK,UAAU,cAAc;IAClC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAEpD,2CAA2C;IAC3C,qBAAqB;IACrB,wBAAwB;IACxB,oBAAoB;IACpB,uBAAuB;IACvB,oBAAoB;IAEpB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;AACxD,CAAC"}
|