git-impact 0.3.0 → 0.6.3
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/README.md +125 -78
- package/dist/cli/index.js +32 -211
- package/dist/cli/index.js.map +1 -1
- package/dist/init/installer.d.ts +6 -0
- package/dist/init/installer.d.ts.map +1 -1
- package/dist/init/installer.js +58 -5
- package/dist/init/installer.js.map +1 -1
- package/dist/init/installer.test.d.ts +2 -0
- package/dist/init/installer.test.d.ts.map +1 -0
- package/dist/init/installer.test.js +127 -0
- package/dist/init/installer.test.js.map +1 -0
- package/dist/init/templates.d.ts +8 -7
- package/dist/init/templates.d.ts.map +1 -1
- package/dist/init/templates.js +73 -371
- package/dist/init/templates.js.map +1 -1
- package/dist/mcp/repo.d.ts +8 -3
- package/dist/mcp/repo.d.ts.map +1 -1
- package/dist/mcp/repo.js +27 -9
- package/dist/mcp/repo.js.map +1 -1
- package/dist/mcp/repo.test.d.ts +2 -0
- package/dist/mcp/repo.test.d.ts.map +1 -0
- package/dist/mcp/repo.test.js +133 -0
- package/dist/mcp/repo.test.js.map +1 -0
- package/dist/mcp/resources.js +0 -1
- package/dist/mcp/resources.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +100 -12
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/tools.test.d.ts +2 -0
- package/dist/mcp/tools.test.d.ts.map +1 -0
- package/dist/mcp/tools.test.js +123 -0
- package/dist/mcp/tools.test.js.map +1 -0
- package/dist/readers/git.d.ts +2 -1
- package/dist/readers/git.d.ts.map +1 -1
- package/dist/readers/git.js +12 -6
- package/dist/readers/git.js.map +1 -1
- package/dist/readers/redact.d.ts +29 -0
- package/dist/readers/redact.d.ts.map +1 -0
- package/dist/readers/redact.js +82 -0
- package/dist/readers/redact.js.map +1 -0
- package/dist/readers/redact.test.d.ts +2 -0
- package/dist/readers/redact.test.d.ts.map +1 -0
- package/dist/readers/redact.test.js +72 -0
- package/dist/readers/redact.test.js.map +1 -0
- package/dist/report/html.d.ts +2 -0
- package/dist/report/html.d.ts.map +1 -1
- package/dist/report/html.js +35 -1
- package/dist/report/html.js.map +1 -1
- package/dist/report/render.d.ts.map +1 -1
- package/dist/report/render.js +2 -0
- package/dist/report/render.js.map +1 -1
- package/dist/storage/db.d.ts +23 -2
- package/dist/storage/db.d.ts.map +1 -1
- package/dist/storage/db.js +12 -0
- package/dist/storage/db.js.map +1 -1
- package/dist/storage/db.test.d.ts +2 -0
- package/dist/storage/db.test.d.ts.map +1 -0
- package/dist/storage/db.test.js +152 -0
- package/dist/storage/db.test.js.map +1 -0
- package/package.json +7 -6
- package/skill/SKILL.md +142 -205
- package/skill/references/html-template.md +131 -0
- package/skill/references/translation-rules.md +87 -0
- package/dist/translator/prompt.d.ts +0 -21
- package/dist/translator/prompt.d.ts.map +0 -1
- package/dist/translator/prompt.js +0 -117
- package/dist/translator/prompt.js.map +0 -1
- package/dist/translator/translate.d.ts +0 -36
- package/dist/translator/translate.d.ts.map +0 -1
- package/dist/translator/translate.js +0 -73
- package/dist/translator/translate.js.map +0 -1
package/dist/readers/git.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RedactConfig } from "./redact";
|
|
1
2
|
export interface CommitInfo {
|
|
2
3
|
hash: string;
|
|
3
4
|
date: string;
|
|
@@ -17,7 +18,7 @@ export interface GitSummary {
|
|
|
17
18
|
to: string;
|
|
18
19
|
};
|
|
19
20
|
}
|
|
20
|
-
export declare function readGitActivity(repoPath: string, since: Date, until?: Date): Promise<GitSummary>;
|
|
21
|
+
export declare function readGitActivity(repoPath: string, since: Date, until?: Date, redactCfg?: RedactConfig): Promise<GitSummary>;
|
|
21
22
|
export declare function startOfDay(date?: Date): Date;
|
|
22
23
|
export declare function startOfDaysAgo(days: number): Date;
|
|
23
24
|
//# sourceMappingURL=git.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/readers/git.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/readers/git.ts"],"names":[],"mappings":"AAEA,OAAO,EAA8B,YAAY,EAAE,MAAM,UAAU,CAAC;AAEpE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC;AAaD,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,IAAI,EACX,KAAK,GAAE,IAAiB,EACxB,SAAS,GAAE,YAAgC,GAC1C,OAAO,CAAC,UAAU,CAAC,CAqErB;AAED,wBAAgB,UAAU,CAAC,IAAI,GAAE,IAAiB,GAAG,IAAI,CAIxD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAKjD"}
|
package/dist/readers/git.js
CHANGED
|
@@ -41,6 +41,7 @@ exports.startOfDay = startOfDay;
|
|
|
41
41
|
exports.startOfDaysAgo = startOfDaysAgo;
|
|
42
42
|
const simple_git_1 = __importDefault(require("simple-git"));
|
|
43
43
|
const path = __importStar(require("path"));
|
|
44
|
+
const redact_1 = require("./redact");
|
|
44
45
|
function stripCredentials(url) {
|
|
45
46
|
try {
|
|
46
47
|
const parsed = new URL(url);
|
|
@@ -52,7 +53,7 @@ function stripCredentials(url) {
|
|
|
52
53
|
return url.replace(/\/\/[^@]+@/, "//");
|
|
53
54
|
}
|
|
54
55
|
}
|
|
55
|
-
async function readGitActivity(repoPath, since, until = new Date()) {
|
|
56
|
+
async function readGitActivity(repoPath, since, until = new Date(), redactCfg = { enabled: true }) {
|
|
56
57
|
const git = (0, simple_git_1.default)(repoPath);
|
|
57
58
|
const sinceStr = since.toISOString();
|
|
58
59
|
const untilStr = until.toISOString();
|
|
@@ -73,7 +74,11 @@ async function readGitActivity(repoPath, since, until = new Date()) {
|
|
|
73
74
|
.join("/") || path.basename(repoPath);
|
|
74
75
|
const branch = await git.revparse(["--abbrev-ref", "HEAD"]);
|
|
75
76
|
const commits = await Promise.all(log.all.map(async (entry) => {
|
|
76
|
-
|
|
77
|
+
// Root commits don't have a parent; `<hash>^` blows up. Fall back to
|
|
78
|
+
// `git show --stat` which works for both root and non-root commits.
|
|
79
|
+
const diff = await git
|
|
80
|
+
.diff([`${entry.hash}^`, entry.hash, "--stat"])
|
|
81
|
+
.catch(() => git.show(["--stat", "--format=", entry.hash]));
|
|
77
82
|
const showOutput = await git.show([
|
|
78
83
|
"--stat",
|
|
79
84
|
"--name-only",
|
|
@@ -83,14 +88,15 @@ async function readGitActivity(repoPath, since, until = new Date()) {
|
|
|
83
88
|
const filesChanged = showOutput
|
|
84
89
|
.split("\n")
|
|
85
90
|
.map((l) => l.trim())
|
|
86
|
-
.filter((l) => l && !l.includes("|") && !l.startsWith("=>") && !l.match(/^\d+ file/))
|
|
91
|
+
.filter((l) => l && !l.includes("|") && !l.startsWith("=>") && !l.match(/^\d+ file/))
|
|
92
|
+
.map((f) => (0, redact_1.redactFilename)(f, redactCfg));
|
|
87
93
|
return {
|
|
88
94
|
hash: entry.hash.slice(0, 8),
|
|
89
95
|
date: entry.date,
|
|
90
|
-
message: entry.message,
|
|
96
|
+
message: (0, redact_1.redactText)(entry.message, redactCfg),
|
|
91
97
|
author: entry.author_name,
|
|
92
|
-
body: entry.body || "",
|
|
93
|
-
diff,
|
|
98
|
+
body: (0, redact_1.redactText)(entry.body || "", redactCfg),
|
|
99
|
+
diff: (0, redact_1.redactText)(diff, redactCfg),
|
|
94
100
|
filesChanged,
|
|
95
101
|
};
|
|
96
102
|
}));
|
package/dist/readers/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/readers/git.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/readers/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Privacy filter: scrubs sensitive paths and obvious secret-looking values
|
|
3
|
+
* from git activity before it reaches the translator.
|
|
4
|
+
*
|
|
5
|
+
* Default-on. Users can disable via `context.json` { "privacy": { "redact": false } }
|
|
6
|
+
* or extend the file/value patterns there.
|
|
7
|
+
*
|
|
8
|
+
* Why this exists: a manager update that leaks an API key, a customer name,
|
|
9
|
+
* or an internal-only filename is a real career incident. The defaults here
|
|
10
|
+
* are conservative — better to redact a benign filename than to leak.
|
|
11
|
+
*/
|
|
12
|
+
export interface RedactConfig {
|
|
13
|
+
enabled: boolean;
|
|
14
|
+
/** Extra file glob-ish patterns the user wants redacted. */
|
|
15
|
+
filePatterns?: string[];
|
|
16
|
+
/** Extra string patterns to redact from commit bodies. */
|
|
17
|
+
valuePatterns?: string[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Replace a filename with `[redacted-secret-file]` if it matches any sensitive
|
|
21
|
+
* pattern. Otherwise return as-is. Pure function — safe to map over arrays.
|
|
22
|
+
*/
|
|
23
|
+
export declare function redactFilename(file: string, cfg?: RedactConfig): string;
|
|
24
|
+
/**
|
|
25
|
+
* Scrub obvious-looking secrets from a free-text string (commit body, PR text).
|
|
26
|
+
* Filenames are not redacted here — use `redactFilename` for those.
|
|
27
|
+
*/
|
|
28
|
+
export declare function redactText(text: string, cfg?: RedactConfig): string;
|
|
29
|
+
//# sourceMappingURL=redact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/readers/redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA2BH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,YAA6B,GAAG,MAAM,CAOvF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,YAA6B,GAAG,MAAM,CAWnF"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Privacy filter: scrubs sensitive paths and obvious secret-looking values
|
|
4
|
+
* from git activity before it reaches the translator.
|
|
5
|
+
*
|
|
6
|
+
* Default-on. Users can disable via `context.json` { "privacy": { "redact": false } }
|
|
7
|
+
* or extend the file/value patterns there.
|
|
8
|
+
*
|
|
9
|
+
* Why this exists: a manager update that leaks an API key, a customer name,
|
|
10
|
+
* or an internal-only filename is a real career incident. The defaults here
|
|
11
|
+
* are conservative — better to redact a benign filename than to leak.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.redactFilename = redactFilename;
|
|
15
|
+
exports.redactText = redactText;
|
|
16
|
+
const DEFAULT_FILE_PATTERNS = [
|
|
17
|
+
/(^|\/)\.env(\..+)?$/i, // .env, .env.local, .env.production
|
|
18
|
+
/(^|\/)\.npmrc$/i, // npm auth token file
|
|
19
|
+
/(^|\/)\.pypirc$/i, // PyPI auth
|
|
20
|
+
/(^|\/)\.netrc$/i, // generic auth tokens
|
|
21
|
+
/(^|\/)\.aws\//i, // .aws/credentials etc.
|
|
22
|
+
/(^|\/)\.ssh\//i, // private keys, known_hosts
|
|
23
|
+
/(^|\/).*credentials.*$/i, // anything literally named credentials
|
|
24
|
+
/(^|\/).*secret.*$/i, // anything with "secret" in the name
|
|
25
|
+
/(^|\/).*\.pem$/i, // PEM private keys
|
|
26
|
+
/(^|\/).*\.p12$/i, // PKCS12 keys
|
|
27
|
+
/(^|\/).*\.key$/i, // generic .key files
|
|
28
|
+
];
|
|
29
|
+
// Things that look like leaked secrets in a commit message body or PR text.
|
|
30
|
+
// Conservative — we'd rather redact legit text than leak a token.
|
|
31
|
+
const DEFAULT_VALUE_PATTERNS = [
|
|
32
|
+
/\b(?:sk|pk)_(?:live|test)_[A-Za-z0-9]{16,}\b/g, // Stripe keys
|
|
33
|
+
/\bAKIA[0-9A-Z]{16}\b/g, // AWS access key id
|
|
34
|
+
/\bghp_[A-Za-z0-9]{36}\b/g, // GitHub personal access token
|
|
35
|
+
/\bgithub_pat_[A-Za-z0-9_]{40,}\b/g, // GitHub fine-grained PAT
|
|
36
|
+
/\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g, // Slack tokens
|
|
37
|
+
/\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g, // JWT-shaped strings
|
|
38
|
+
];
|
|
39
|
+
const DEFAULT_CONFIG = { enabled: true };
|
|
40
|
+
/**
|
|
41
|
+
* Replace a filename with `[redacted-secret-file]` if it matches any sensitive
|
|
42
|
+
* pattern. Otherwise return as-is. Pure function — safe to map over arrays.
|
|
43
|
+
*/
|
|
44
|
+
function redactFilename(file, cfg = DEFAULT_CONFIG) {
|
|
45
|
+
if (!cfg.enabled)
|
|
46
|
+
return file;
|
|
47
|
+
const patterns = [
|
|
48
|
+
...DEFAULT_FILE_PATTERNS,
|
|
49
|
+
...(cfg.filePatterns ?? []).map(globishToRegex),
|
|
50
|
+
];
|
|
51
|
+
return patterns.some((p) => p.test(file)) ? "[redacted-secret-file]" : file;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Scrub obvious-looking secrets from a free-text string (commit body, PR text).
|
|
55
|
+
* Filenames are not redacted here — use `redactFilename` for those.
|
|
56
|
+
*/
|
|
57
|
+
function redactText(text, cfg = DEFAULT_CONFIG) {
|
|
58
|
+
if (!cfg.enabled || !text)
|
|
59
|
+
return text;
|
|
60
|
+
const patterns = [
|
|
61
|
+
...DEFAULT_VALUE_PATTERNS,
|
|
62
|
+
...(cfg.valuePatterns ?? []).map((s) => new RegExp(s, "g")),
|
|
63
|
+
];
|
|
64
|
+
let out = text;
|
|
65
|
+
for (const p of patterns) {
|
|
66
|
+
out = out.replace(p, "[redacted-secret]");
|
|
67
|
+
}
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Convert a simple glob (*.env, foo/**, secret-*) into a RegExp. Not full glob —
|
|
72
|
+
* just `*` (any chars except slash) and `**` (any chars). Anchored to full path.
|
|
73
|
+
*/
|
|
74
|
+
function globishToRegex(glob) {
|
|
75
|
+
const escaped = glob
|
|
76
|
+
.replace(/[.+^${}()|[\]\\]/g, "\\$&")
|
|
77
|
+
.replace(/\*\*/g, "::DOUBLESTAR::")
|
|
78
|
+
.replace(/\*/g, "[^/]*")
|
|
79
|
+
.replace(/::DOUBLESTAR::/g, ".*");
|
|
80
|
+
return new RegExp(`(^|/)${escaped}$`, "i");
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=redact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/readers/redact.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAyCH,wCAOC;AAMD,gCAWC;AA/DD,MAAM,qBAAqB,GAAa;IACtC,sBAAsB,EAAwB,oCAAoC;IAClF,iBAAiB,EAA6B,sBAAsB;IACpE,kBAAkB,EAA4B,YAAY;IAC1D,iBAAiB,EAA6B,sBAAsB;IACpE,gBAAgB,EAA8B,wBAAwB;IACtE,gBAAgB,EAA8B,4BAA4B;IAC1E,yBAAyB,EAAqB,uCAAuC;IACrF,oBAAoB,EAA0B,qCAAqC;IACnF,iBAAiB,EAA6B,mBAAmB;IACjE,iBAAiB,EAA6B,cAAc;IAC5D,iBAAiB,EAA6B,qBAAqB;CACpE,CAAC;AAEF,4EAA4E;AAC5E,kEAAkE;AAClE,MAAM,sBAAsB,GAAa;IACvC,+CAA+C,EAAc,cAAc;IAC3E,uBAAuB,EAAsC,oBAAoB;IACjF,0BAA0B,EAAmC,+BAA+B;IAC5F,mCAAmC,EAA0B,0BAA0B;IACvF,mCAAmC,EAA0B,eAAe;IAC5E,wDAAwD,EAAK,qBAAqB;CACnF,CAAC;AAUF,MAAM,cAAc,GAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAEvD;;;GAGG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,MAAoB,cAAc;IAC7E,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,QAAQ,GAAG;QACf,GAAG,qBAAqB;QACxB,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC;KAChD,CAAC;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9E,CAAC;AAED;;;GAGG;AACH,SAAgB,UAAU,CAAC,IAAY,EAAE,MAAoB,cAAc;IACzE,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,QAAQ,GAAG;QACf,GAAG,sBAAsB;QACzB,GAAG,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;KAC5D,CAAC;IACF,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,OAAO,GAAG,IAAI;SACjB,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;SACpC,OAAO,CAAC,OAAO,EAAE,gBAAgB,CAAC;SAClC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;SACvB,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;IACpC,OAAO,IAAI,MAAM,CAAC,QAAQ,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.test.d.ts","sourceRoot":"","sources":["../../src/readers/redact.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const redact_1 = require("./redact");
|
|
5
|
+
(0, vitest_1.describe)("redactFilename — defaults", () => {
|
|
6
|
+
const cases = [
|
|
7
|
+
[".env", "redacted"],
|
|
8
|
+
[".env.local", "redacted"],
|
|
9
|
+
[".env.production", "redacted"],
|
|
10
|
+
["src/.env.staging", "redacted"],
|
|
11
|
+
[".npmrc", "redacted"],
|
|
12
|
+
[".aws/credentials", "redacted"],
|
|
13
|
+
[".ssh/id_rsa", "redacted"],
|
|
14
|
+
["config/credentials.yml", "redacted"],
|
|
15
|
+
["lib/secret-helper.ts", "redacted"],
|
|
16
|
+
["certs/tls.pem", "redacted"],
|
|
17
|
+
["keys/server.key", "redacted"],
|
|
18
|
+
// benign — should pass through
|
|
19
|
+
["src/index.ts", "kept"],
|
|
20
|
+
["README.md", "kept"],
|
|
21
|
+
["package.json", "kept"],
|
|
22
|
+
["src/utils/helpers.ts", "kept"],
|
|
23
|
+
["docs/architecture.md", "kept"],
|
|
24
|
+
];
|
|
25
|
+
for (const [file, expected] of cases) {
|
|
26
|
+
(0, vitest_1.it)(`${expected === "redacted" ? "redacts" : "keeps"} ${file}`, () => {
|
|
27
|
+
const out = (0, redact_1.redactFilename)(file);
|
|
28
|
+
if (expected === "redacted") {
|
|
29
|
+
(0, vitest_1.expect)(out).toBe("[redacted-secret-file]");
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
(0, vitest_1.expect)(out).toBe(file);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
(0, vitest_1.it)("respects enabled: false", () => {
|
|
37
|
+
(0, vitest_1.expect)((0, redact_1.redactFilename)(".env", { enabled: false })).toBe(".env");
|
|
38
|
+
});
|
|
39
|
+
(0, vitest_1.it)("supports user-supplied glob patterns", () => {
|
|
40
|
+
(0, vitest_1.expect)((0, redact_1.redactFilename)("config/internal-only.yml", {
|
|
41
|
+
enabled: true,
|
|
42
|
+
filePatterns: ["*internal*"],
|
|
43
|
+
})).toBe("[redacted-secret-file]");
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
(0, vitest_1.describe)("redactText — defaults", () => {
|
|
47
|
+
(0, vitest_1.it)("redacts Stripe live keys", () => {
|
|
48
|
+
const out = (0, redact_1.redactText)("token sk_live_abcdef0123456789xyz123 was leaked");
|
|
49
|
+
(0, vitest_1.expect)(out).toContain("[redacted-secret]");
|
|
50
|
+
(0, vitest_1.expect)(out).not.toContain("sk_live_");
|
|
51
|
+
});
|
|
52
|
+
(0, vitest_1.it)("redacts AWS access key ids", () => {
|
|
53
|
+
(0, vitest_1.expect)((0, redact_1.redactText)("AKIAIOSFODNN7EXAMPLE used")).toBe("[redacted-secret] used");
|
|
54
|
+
});
|
|
55
|
+
(0, vitest_1.it)("redacts GitHub PATs", () => {
|
|
56
|
+
const out = (0, redact_1.redactText)("ghp_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa pushed");
|
|
57
|
+
(0, vitest_1.expect)(out).toContain("[redacted-secret]");
|
|
58
|
+
});
|
|
59
|
+
(0, vitest_1.it)("redacts JWT-shaped strings", () => {
|
|
60
|
+
const out = (0, redact_1.redactText)("header eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjMifQ.abcDEF received");
|
|
61
|
+
(0, vitest_1.expect)(out).toContain("[redacted-secret]");
|
|
62
|
+
});
|
|
63
|
+
(0, vitest_1.it)("respects enabled: false", () => {
|
|
64
|
+
(0, vitest_1.expect)((0, redact_1.redactText)("ghp_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", { enabled: false }))
|
|
65
|
+
.toBe("ghp_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
|
66
|
+
});
|
|
67
|
+
(0, vitest_1.it)("preserves benign text", () => {
|
|
68
|
+
const benign = "Refactored auth middleware to support multi-tenant queries.";
|
|
69
|
+
(0, vitest_1.expect)((0, redact_1.redactText)(benign)).toBe(benign);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=redact.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.test.js","sourceRoot":"","sources":["../../src/readers/redact.test.ts"],"names":[],"mappings":"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"}
|
package/dist/report/html.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/report/html.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/report/html.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,IAAI,GAAG,aAAa,GAAG,gBAAgB,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC7E,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAqQjF"}
|
package/dist/report/html.js
CHANGED
|
@@ -127,6 +127,29 @@ function renderReportHtml(entries, repoName) {
|
|
|
127
127
|
margin-top: 4px;
|
|
128
128
|
font-family: ui-monospace, "SF Mono", Menlo, monospace;
|
|
129
129
|
}
|
|
130
|
+
.item .meta {
|
|
131
|
+
margin-top: 8px;
|
|
132
|
+
display: flex;
|
|
133
|
+
flex-wrap: wrap;
|
|
134
|
+
gap: 6px;
|
|
135
|
+
align-items: center;
|
|
136
|
+
}
|
|
137
|
+
.chip {
|
|
138
|
+
display: inline-block;
|
|
139
|
+
padding: 2px 8px;
|
|
140
|
+
border-radius: 999px;
|
|
141
|
+
font-size: 11px;
|
|
142
|
+
border: 1px solid var(--border);
|
|
143
|
+
color: var(--muted);
|
|
144
|
+
background: transparent;
|
|
145
|
+
}
|
|
146
|
+
.chip.inferred {
|
|
147
|
+
border-color: var(--amber);
|
|
148
|
+
color: var(--amber);
|
|
149
|
+
}
|
|
150
|
+
.chip.ref {
|
|
151
|
+
font-family: ui-monospace, "SF Mono", Menlo, monospace;
|
|
152
|
+
}
|
|
130
153
|
footer {
|
|
131
154
|
color: var(--muted);
|
|
132
155
|
font-size: 12px;
|
|
@@ -182,9 +205,20 @@ function renderReportHtml(entries, repoName) {
|
|
|
182
205
|
? '<div class="note">' + escape(item.technical_note) + '</div>' : '';
|
|
183
206
|
const impact = item.impact
|
|
184
207
|
? '<div class="impact">' + escape(item.impact) + '</div>' : '';
|
|
208
|
+
const chips = [];
|
|
209
|
+
if (item.provenance === "inferred") {
|
|
210
|
+
chips.push('<span class="chip inferred" title="Impact inferred — not stated explicitly in PR or commit body">inferred</span>');
|
|
211
|
+
}
|
|
212
|
+
if (Array.isArray(item.refs)) {
|
|
213
|
+
for (const ref of item.refs) {
|
|
214
|
+
chips.push('<span class="chip ref">' + escape(ref) + '</span>');
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const meta = chips.length
|
|
218
|
+
? '<div class="meta">' + chips.join("") + '</div>' : '';
|
|
185
219
|
return '<div class="item ' + cls + '">' +
|
|
186
220
|
'<div class="summary">' + escape(item.summary) + '</div>' +
|
|
187
|
-
impact + note +
|
|
221
|
+
impact + note + meta +
|
|
188
222
|
'</div>';
|
|
189
223
|
}).join("");
|
|
190
224
|
|
package/dist/report/html.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/report/html.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/report/html.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAoBH,4CAqQC;AArQD,SAAgB,gBAAgB,CAAC,OAAsB,EAAE,QAAgB;IACvE,8BAA8B;IAC9B,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAEjE,OAAO;;;;;sBAKa,UAAU,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBA4JnB,UAAU,CAAC,QAAQ,CAAC;;;;;;oBAMvB,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAwFpB,CAAC;AACT,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnC,GAAG,EAAE,OAAO;QACZ,GAAG,EAAE,MAAM;QACX,GAAG,EAAE,MAAM;QACX,GAAG,EAAE,QAAQ;QACb,GAAG,EAAE,OAAO;KACb,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;AACV,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/report/render.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/report/render.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,YAAY,CAiD9D"}
|
package/dist/report/render.js
CHANGED
|
@@ -70,6 +70,8 @@ function renderReport(opts) {
|
|
|
70
70
|
summary: (it.summary ?? it.title ?? it.text ?? it.headline ?? "—"),
|
|
71
71
|
impact: it.impact,
|
|
72
72
|
technical_note: (it.technical_note ?? it.note),
|
|
73
|
+
provenance: it.provenance,
|
|
74
|
+
refs: Array.isArray(it.refs) ? it.refs : undefined,
|
|
73
75
|
};
|
|
74
76
|
}),
|
|
75
77
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/report/render.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBH,
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/report/render.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/db.d.ts
CHANGED
|
@@ -3,13 +3,29 @@ export interface UserContext {
|
|
|
3
3
|
managerPriorities: string;
|
|
4
4
|
glossary: Record<string, string>;
|
|
5
5
|
githubToken?: string;
|
|
6
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Optional privacy filter config. Default: enabled. Filenames matching env /
|
|
8
|
+
* credentials patterns are redacted; obvious-looking secrets in commit
|
|
9
|
+
* bodies are too. Override via `{ "privacy": { "redact": false } }` to disable
|
|
10
|
+
* or `{ "privacy": { "filePatterns": [...], "valuePatterns": [...] } }` to extend.
|
|
11
|
+
*/
|
|
12
|
+
privacy?: {
|
|
13
|
+
redact?: boolean;
|
|
14
|
+
filePatterns?: string[];
|
|
15
|
+
valuePatterns?: string[];
|
|
16
|
+
};
|
|
7
17
|
}
|
|
18
|
+
export type ImpactStatus = "done" | "in_progress" | "blocked";
|
|
19
|
+
export type ImpactProvenance = "pr" | "commit_body" | "commit_message" | "ticket" | "inferred";
|
|
8
20
|
export interface ImpactItem {
|
|
9
|
-
status:
|
|
21
|
+
status: ImpactStatus;
|
|
10
22
|
summary: string;
|
|
11
23
|
impact: string;
|
|
12
24
|
technical_note?: string;
|
|
25
|
+
/** Where the "why it matters" came from. "inferred" means the model guessed — surface this in UI. */
|
|
26
|
+
provenance?: ImpactProvenance;
|
|
27
|
+
/** Optional supporting refs (PR numbers, commit hashes, ticket IDs) for the bullet. */
|
|
28
|
+
refs?: string[];
|
|
13
29
|
}
|
|
14
30
|
export interface ImpactEntry {
|
|
15
31
|
id?: number;
|
|
@@ -27,5 +43,10 @@ export declare function loadContext(repoRoot: string): UserContext | null;
|
|
|
27
43
|
export declare function saveContext(ctx: UserContext, repoRoot: string): void;
|
|
28
44
|
export declare function saveEntry(entry: ImpactEntry, repoRoot: string): number;
|
|
29
45
|
export declare function getEntriesForRange(fromDate: string, toDate: string, repoRoot: string): ImpactEntry[];
|
|
46
|
+
/**
|
|
47
|
+
* Returns the most recent saved entry's date (YYYY-MM-DD), or null if none exists.
|
|
48
|
+
* Used to power "since last standup" — the default mode after Phase 1.
|
|
49
|
+
*/
|
|
50
|
+
export declare function getLastEntryDate(repoRoot: string): string | null;
|
|
30
51
|
export declare function getEntriesForDaysAgo(days: number, repoRoot: string): ImpactEntry[];
|
|
31
52
|
//# sourceMappingURL=db.d.ts.map
|
package/dist/storage/db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/storage/db.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,WAAW;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/storage/db.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,WAAW;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;AAC9D,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,aAAa,GAAG,gBAAgB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE/F,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qGAAqG;IACrG,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAuCD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAQhE;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CASpE;AAID,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAmBtE;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,WAAW,EAAE,CAMf;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMhE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAMlF"}
|
package/dist/storage/db.js
CHANGED
|
@@ -40,6 +40,7 @@ exports.loadContext = loadContext;
|
|
|
40
40
|
exports.saveContext = saveContext;
|
|
41
41
|
exports.saveEntry = saveEntry;
|
|
42
42
|
exports.getEntriesForRange = getEntriesForRange;
|
|
43
|
+
exports.getLastEntryDate = getLastEntryDate;
|
|
43
44
|
exports.getEntriesForDaysAgo = getEntriesForDaysAgo;
|
|
44
45
|
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
45
46
|
const path = __importStar(require("path"));
|
|
@@ -131,6 +132,17 @@ function getEntriesForRange(fromDate, toDate, repoRoot) {
|
|
|
131
132
|
.all(fromDate, toDate);
|
|
132
133
|
return rows.map(rowToEntry);
|
|
133
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* Returns the most recent saved entry's date (YYYY-MM-DD), or null if none exists.
|
|
137
|
+
* Used to power "since last standup" — the default mode after Phase 1.
|
|
138
|
+
*/
|
|
139
|
+
function getLastEntryDate(repoRoot) {
|
|
140
|
+
const db = getDb(repoRoot);
|
|
141
|
+
const row = db
|
|
142
|
+
.prepare(`SELECT date FROM impact_entries ORDER BY date DESC, id DESC LIMIT 1`)
|
|
143
|
+
.get();
|
|
144
|
+
return row?.date ?? null;
|
|
145
|
+
}
|
|
134
146
|
function getEntriesForDaysAgo(days, repoRoot) {
|
|
135
147
|
const cutoff = new Date();
|
|
136
148
|
cutoff.setDate(cutoff.getDate() - days);
|
package/dist/storage/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/storage/db.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/storage/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.test.d.ts","sourceRoot":"","sources":["../../src/storage/db.test.ts"],"names":[],"mappings":""}
|