@momentiq/dark-factory-cli 0.1.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +150 -0
- package/dist/adapters/_shared.d.ts +45 -0
- package/dist/adapters/_shared.d.ts.map +1 -0
- package/dist/adapters/_shared.js +200 -0
- package/dist/adapters/_shared.js.map +1 -0
- package/dist/adapters/codex-sdk.d.ts +279 -0
- package/dist/adapters/codex-sdk.d.ts.map +1 -0
- package/dist/adapters/codex-sdk.js +930 -0
- package/dist/adapters/codex-sdk.js.map +1 -0
- package/dist/adapters/critic-result-schema.d.ts +215 -0
- package/dist/adapters/critic-result-schema.d.ts.map +1 -0
- package/dist/adapters/critic-result-schema.js +153 -0
- package/dist/adapters/critic-result-schema.js.map +1 -0
- package/dist/adapters/critic.d.ts +62 -0
- package/dist/adapters/critic.d.ts.map +1 -0
- package/dist/adapters/critic.js +79 -0
- package/dist/adapters/critic.js.map +1 -0
- package/dist/adapters/cursor-sdk.d.ts +153 -0
- package/dist/adapters/cursor-sdk.d.ts.map +1 -0
- package/dist/adapters/cursor-sdk.js +818 -0
- package/dist/adapters/cursor-sdk.js.map +1 -0
- package/dist/adapters/gemini-sdk.d.ts +113 -0
- package/dist/adapters/gemini-sdk.d.ts.map +1 -0
- package/dist/adapters/gemini-sdk.js +532 -0
- package/dist/adapters/gemini-sdk.js.map +1 -0
- package/dist/adapters/grok-direct-sdk.d.ts +148 -0
- package/dist/adapters/grok-direct-sdk.d.ts.map +1 -0
- package/dist/adapters/grok-direct-sdk.js +694 -0
- package/dist/adapters/grok-direct-sdk.js.map +1 -0
- package/dist/branch-protection/audit_branch_protection.py +759 -0
- package/dist/branch-protection/index.d.ts +25 -0
- package/dist/branch-protection/index.d.ts.map +1 -0
- package/dist/branch-protection/index.js +70 -0
- package/dist/branch-protection/index.js.map +1 -0
- package/dist/branch-protection/spec-default.yaml +314 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +581 -0
- package/dist/cli.js.map +1 -0
- package/dist/cycle-doc-validator/index.d.ts +43 -0
- package/dist/cycle-doc-validator/index.d.ts.map +1 -0
- package/dist/cycle-doc-validator/index.js +69 -0
- package/dist/cycle-doc-validator/index.js.map +1 -0
- package/dist/cycle-doc-validator/validate_cycle_doc.py +1260 -0
- package/dist/cycle-tracker-sync/attribute_pr_cycle_ref.py +384 -0
- package/dist/cycle-tracker-sync/index.d.ts +20 -0
- package/dist/cycle-tracker-sync/index.d.ts.map +1 -0
- package/dist/cycle-tracker-sync/index.js +71 -0
- package/dist/cycle-tracker-sync/index.js.map +1 -0
- package/dist/cycle-tracker-sync/sync_cycle_trackers.py +1093 -0
- package/dist/evidence/audit-trail.d.ts +59 -0
- package/dist/evidence/audit-trail.d.ts.map +1 -0
- package/dist/evidence/audit-trail.js +283 -0
- package/dist/evidence/audit-trail.js.map +1 -0
- package/dist/evidence/index.d.ts +4 -0
- package/dist/evidence/index.d.ts.map +1 -0
- package/dist/evidence/index.js +29 -0
- package/dist/evidence/index.js.map +1 -0
- package/dist/evidence/per-sha.d.ts +13 -0
- package/dist/evidence/per-sha.d.ts.map +1 -0
- package/dist/evidence/per-sha.js +97 -0
- package/dist/evidence/per-sha.js.map +1 -0
- package/dist/evidence/quality-gates.d.ts +19 -0
- package/dist/evidence/quality-gates.d.ts.map +1 -0
- package/dist/evidence/quality-gates.js +212 -0
- package/dist/evidence/quality-gates.js.map +1 -0
- package/dist/git.d.ts +40 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +414 -0
- package/dist/git.js.map +1 -0
- package/dist/glob.d.ts +4 -0
- package/dist/glob.d.ts.map +1 -0
- package/dist/glob.js +99 -0
- package/dist/glob.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/paths.d.ts +12 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +42 -0
- package/dist/paths.js.map +1 -0
- package/dist/policy/baseline.d.ts +15 -0
- package/dist/policy/baseline.d.ts.map +1 -0
- package/dist/policy/baseline.js +115 -0
- package/dist/policy/baseline.js.map +1 -0
- package/dist/policy/config.d.ts +64 -0
- package/dist/policy/config.d.ts.map +1 -0
- package/dist/policy/config.js +363 -0
- package/dist/policy/config.js.map +1 -0
- package/dist/policy/gate.d.ts +80 -0
- package/dist/policy/gate.d.ts.map +1 -0
- package/dist/policy/gate.js +1019 -0
- package/dist/policy/gate.js.map +1 -0
- package/dist/policy/index.d.ts +7 -0
- package/dist/policy/index.d.ts.map +1 -0
- package/dist/policy/index.js +14 -0
- package/dist/policy/index.js.map +1 -0
- package/dist/policy/merge-queue.d.ts +183 -0
- package/dist/policy/merge-queue.d.ts.map +1 -0
- package/dist/policy/merge-queue.js +310 -0
- package/dist/policy/merge-queue.js.map +1 -0
- package/dist/policy/profile.d.ts +98 -0
- package/dist/policy/profile.d.ts.map +1 -0
- package/dist/policy/profile.js +156 -0
- package/dist/policy/profile.js.map +1 -0
- package/dist/policy/tdd-classifier.d.ts +18 -0
- package/dist/policy/tdd-classifier.d.ts.map +1 -0
- package/dist/policy/tdd-classifier.js +79 -0
- package/dist/policy/tdd-classifier.js.map +1 -0
- package/dist/prompt.d.ts +13 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +175 -0
- package/dist/prompt.js.map +1 -0
- package/dist/report.d.ts +88 -0
- package/dist/report.d.ts.map +1 -0
- package/dist/report.js +376 -0
- package/dist/report.js.map +1 -0
- package/dist/runner.d.ts +30 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +456 -0
- package/dist/runner.js.map +1 -0
- package/dist/security.d.ts +2 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +19 -0
- package/dist/security.js.map +1 -0
- package/dist/trusted-surface/rebind.d.ts +10 -0
- package/dist/trusted-surface/rebind.d.ts.map +1 -0
- package/dist/trusted-surface/rebind.js +154 -0
- package/dist/trusted-surface/rebind.js.map +1 -0
- package/package.json +78 -0
package/dist/git.js
ADDED
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { promisify } from "node:util";
|
|
4
|
+
const runFile = promisify(execFile);
|
|
5
|
+
const MAX_BUFFER = 64 * 1024 * 1024;
|
|
6
|
+
async function git(args, options = {}) {
|
|
7
|
+
try {
|
|
8
|
+
const { stdout } = await runFile("git", args, {
|
|
9
|
+
cwd: options.cwd,
|
|
10
|
+
maxBuffer: MAX_BUFFER,
|
|
11
|
+
...(options.input !== undefined ? { input: options.input } : {}),
|
|
12
|
+
});
|
|
13
|
+
return stdout;
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
const e = err;
|
|
17
|
+
const detail = e.stderr ? `: ${e.stderr.trim()}` : "";
|
|
18
|
+
throw new Error(`git ${args.join(" ")} failed${detail}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
// Read a file's contents at a specific git ref. Returns null if the file
|
|
22
|
+
// does not exist at that ref (caller decides how to handle — e.g., the
|
|
23
|
+
// commit being reviewed is the one that introduces the file).
|
|
24
|
+
export async function gitShowFile(ref, path, cwd = process.cwd()) {
|
|
25
|
+
try {
|
|
26
|
+
return await git(["show", `${ref}:${path}`], { cwd });
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
// git show fails for missing-at-ref; we don't want to differentiate
|
|
30
|
+
// missing-file from missing-ref here — both mean "no baseline".
|
|
31
|
+
const msg = err.message;
|
|
32
|
+
if (/does not exist|exists on disk, but not in|fatal: ambiguous argument/.test(msg)) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
throw err;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export async function repoRoot(cwd = process.cwd()) {
|
|
39
|
+
const out = await git(["rev-parse", "--show-toplevel"], { cwd });
|
|
40
|
+
return out.trim();
|
|
41
|
+
}
|
|
42
|
+
export async function gitCommonDir(cwd = process.cwd()) {
|
|
43
|
+
const out = await git(["rev-parse", "--git-common-dir"], { cwd });
|
|
44
|
+
const trimmed = out.trim();
|
|
45
|
+
if (trimmed.startsWith("/"))
|
|
46
|
+
return trimmed;
|
|
47
|
+
return `${await repoRoot(cwd)}/${trimmed}`;
|
|
48
|
+
}
|
|
49
|
+
export async function gitDir(cwd = process.cwd()) {
|
|
50
|
+
const out = await git(["rev-parse", "--git-dir"], { cwd });
|
|
51
|
+
const trimmed = out.trim();
|
|
52
|
+
if (trimmed.startsWith("/"))
|
|
53
|
+
return trimmed;
|
|
54
|
+
return `${await repoRoot(cwd)}/${trimmed}`;
|
|
55
|
+
}
|
|
56
|
+
export async function currentBranch(cwd = process.cwd()) {
|
|
57
|
+
const out = await git(["rev-parse", "--abbrev-ref", "HEAD"], { cwd });
|
|
58
|
+
return out.trim();
|
|
59
|
+
}
|
|
60
|
+
export async function resolveCommit(ref, cwd = process.cwd()) {
|
|
61
|
+
const out = await git(["rev-parse", "--verify", `${ref}^{commit}`], { cwd });
|
|
62
|
+
return out.trim();
|
|
63
|
+
}
|
|
64
|
+
export async function commitParent(sha, cwd = process.cwd()) {
|
|
65
|
+
const out = await git(["rev-list", "--parents", "-n", "1", sha], { cwd });
|
|
66
|
+
const parts = out.trim().split(/\s+/);
|
|
67
|
+
if (parts.length < 2) {
|
|
68
|
+
throw new Error(`commit ${sha} has no parent (root or shallow)`);
|
|
69
|
+
}
|
|
70
|
+
return parts[1] ?? "";
|
|
71
|
+
}
|
|
72
|
+
export async function commitMetadata(sha, cwd = process.cwd()) {
|
|
73
|
+
// ASCII Unit Separator (0x1F) is reserved as a delimiter in git pretty-format output.
|
|
74
|
+
const sep = "\x1f";
|
|
75
|
+
const out = await git([
|
|
76
|
+
"show",
|
|
77
|
+
"--no-patch",
|
|
78
|
+
`--pretty=format:%H${sep}%P${sep}%an${sep}%ae${sep}%aI${sep}%s${sep}%b`,
|
|
79
|
+
sha,
|
|
80
|
+
], { cwd });
|
|
81
|
+
const fields = out.split(sep);
|
|
82
|
+
if (fields.length < 7) {
|
|
83
|
+
throw new Error(`unexpected git show output for ${sha}`);
|
|
84
|
+
}
|
|
85
|
+
const parents = (fields[1] ?? "").trim().split(/\s+/).filter(Boolean);
|
|
86
|
+
return {
|
|
87
|
+
sha: (fields[0] ?? "").trim(),
|
|
88
|
+
parent: parents[0] ?? "",
|
|
89
|
+
author: fields[2] ?? "",
|
|
90
|
+
email: fields[3] ?? "",
|
|
91
|
+
timestamp: fields[4] ?? "",
|
|
92
|
+
subject: fields[5] ?? "",
|
|
93
|
+
body: (fields[6] ?? "").trimEnd(),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export async function commitStat(parent, sha, cwd = process.cwd()) {
|
|
97
|
+
if (!parent) {
|
|
98
|
+
return git(["show", "--stat", "--format=", sha], { cwd });
|
|
99
|
+
}
|
|
100
|
+
return git(["diff", "--stat", `${parent}..${sha}`], { cwd });
|
|
101
|
+
}
|
|
102
|
+
export async function commitDiff(parent, sha, cwd = process.cwd()) {
|
|
103
|
+
if (!parent) {
|
|
104
|
+
return git(["show", "--patch", "--format=", sha], { cwd });
|
|
105
|
+
}
|
|
106
|
+
return git(["diff", "--patch", "--no-color", `${parent}..${sha}`], { cwd });
|
|
107
|
+
}
|
|
108
|
+
async function numstat(parent, sha, cwd) {
|
|
109
|
+
const args = parent
|
|
110
|
+
? ["diff", "--numstat", "-z", `${parent}..${sha}`]
|
|
111
|
+
: ["show", "--numstat", "--format=", "-z", sha];
|
|
112
|
+
const out = await git(args, { cwd });
|
|
113
|
+
const map = new Map();
|
|
114
|
+
if (!out)
|
|
115
|
+
return map;
|
|
116
|
+
let i = 0;
|
|
117
|
+
const tokens = out.split("\0");
|
|
118
|
+
while (i < tokens.length) {
|
|
119
|
+
const line = tokens[i++];
|
|
120
|
+
if (line === undefined || line === "")
|
|
121
|
+
continue;
|
|
122
|
+
const match = /^(\S+)\s+(\S+)\s*(.*)$/.exec(line);
|
|
123
|
+
if (!match)
|
|
124
|
+
continue;
|
|
125
|
+
const addedStr = match[1] ?? "0";
|
|
126
|
+
const deletedStr = match[2] ?? "0";
|
|
127
|
+
let path = match[3] ?? "";
|
|
128
|
+
let oldPath;
|
|
129
|
+
if (path === "") {
|
|
130
|
+
oldPath = tokens[i++];
|
|
131
|
+
path = tokens[i++] ?? "";
|
|
132
|
+
}
|
|
133
|
+
const entry = {
|
|
134
|
+
added: addedStr === "-" ? "binary" : Number(addedStr),
|
|
135
|
+
deleted: deletedStr === "-" ? "binary" : Number(deletedStr),
|
|
136
|
+
path,
|
|
137
|
+
...(oldPath !== undefined ? { oldPath } : {}),
|
|
138
|
+
};
|
|
139
|
+
map.set(path, entry);
|
|
140
|
+
}
|
|
141
|
+
return map;
|
|
142
|
+
}
|
|
143
|
+
export async function changedFiles(parent, sha, cwd = process.cwd(), options = {}) {
|
|
144
|
+
const args = parent
|
|
145
|
+
? ["diff", "--name-status", "-z", `${parent}..${sha}`]
|
|
146
|
+
: ["show", "--name-status", "--format=", "-z", sha];
|
|
147
|
+
const out = await git(args, { cwd });
|
|
148
|
+
const stats = await numstat(parent, sha, cwd);
|
|
149
|
+
const files = [];
|
|
150
|
+
if (!out)
|
|
151
|
+
return files;
|
|
152
|
+
const tokens = out.split("\0");
|
|
153
|
+
let i = 0;
|
|
154
|
+
while (i < tokens.length) {
|
|
155
|
+
const status = tokens[i++];
|
|
156
|
+
if (status === undefined || status === "")
|
|
157
|
+
continue;
|
|
158
|
+
const code = (status.charAt(0) ?? "X");
|
|
159
|
+
let oldPath;
|
|
160
|
+
let path;
|
|
161
|
+
if (code === "R" || code === "C") {
|
|
162
|
+
oldPath = tokens[i++];
|
|
163
|
+
path = tokens[i++] ?? "";
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
path = tokens[i++] ?? "";
|
|
167
|
+
}
|
|
168
|
+
if (!path)
|
|
169
|
+
continue;
|
|
170
|
+
const stat = stats.get(path);
|
|
171
|
+
const isBinary = stat?.added === "binary" || stat?.deleted === "binary";
|
|
172
|
+
const file = {
|
|
173
|
+
path,
|
|
174
|
+
status: code,
|
|
175
|
+
...(oldPath !== undefined ? { oldPath } : {}),
|
|
176
|
+
};
|
|
177
|
+
if (code === "D") {
|
|
178
|
+
file.omittedReason = "missing";
|
|
179
|
+
files.push(file);
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
if (isBinary) {
|
|
183
|
+
file.omittedReason = "binary";
|
|
184
|
+
files.push(file);
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
if (options.readContent !== false) {
|
|
188
|
+
try {
|
|
189
|
+
const sizeOut = await git(["cat-file", "-s", `${sha}:${path}`], { cwd });
|
|
190
|
+
const bytes = Number(sizeOut.trim());
|
|
191
|
+
file.bytes = bytes;
|
|
192
|
+
if (options.maxBytes !== undefined && bytes > options.maxBytes) {
|
|
193
|
+
file.omittedReason = "too_large";
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
const content = await git(["show", `${sha}:${path}`], { cwd });
|
|
197
|
+
file.content = content;
|
|
198
|
+
file.contentHash = sha256(content);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
file.omittedReason = "missing";
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
files.push(file);
|
|
206
|
+
}
|
|
207
|
+
return files;
|
|
208
|
+
}
|
|
209
|
+
// Cycle 332 — push-delta variant of `changedFiles`. Differs from the
|
|
210
|
+
// per-commit walker above in three respects:
|
|
211
|
+
// 1. Status discovery uses `git diff --name-status --find-renames
|
|
212
|
+
// --find-copies -z BASE..HEAD`. The rename / copy detection flags
|
|
213
|
+
// (`-M` / `-C`) are REQUIRED — without them git only emits R*/C*
|
|
214
|
+
// status records when `diff.renames=copies` is set in the repo's
|
|
215
|
+
// git config, and CI's fresh `actions/checkout@v4` workspace
|
|
216
|
+
// cannot rely on that. A rename push without the flags surfaces
|
|
217
|
+
// as a delete + add and the Phase 2 rename/copy carry-forward
|
|
218
|
+
// never fires (cycle doc Mechanism B step 3, ratified Phase 1).
|
|
219
|
+
// 2. The parser HARD-ERRORS on an `X` status. `X` is git's "unknown"
|
|
220
|
+
// sentinel and the cache writer aborts the run rather than make a
|
|
221
|
+
// guess. Per cycle doc Mechanism B step 3.
|
|
222
|
+
// 3. `U` (unmerged) is treated as `M` (re-evaluate) by the caller; the
|
|
223
|
+
// parser preserves the `U` code so telemetry can surface it.
|
|
224
|
+
export class UnknownGitStatusError extends Error {
|
|
225
|
+
statusRaw;
|
|
226
|
+
constructor(statusRaw) {
|
|
227
|
+
super(`unknown git status code; refusing to make a cache decision (raw=${JSON.stringify(statusRaw)})`);
|
|
228
|
+
this.statusRaw = statusRaw;
|
|
229
|
+
this.name = "UnknownGitStatusError";
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
export async function pushDeltaChangedFiles(base, head, cwd = process.cwd()) {
|
|
233
|
+
const args = base
|
|
234
|
+
? [
|
|
235
|
+
"diff",
|
|
236
|
+
"--name-status",
|
|
237
|
+
"--find-renames",
|
|
238
|
+
"--find-copies",
|
|
239
|
+
"-z",
|
|
240
|
+
`${base}..${head}`,
|
|
241
|
+
]
|
|
242
|
+
: [
|
|
243
|
+
"show",
|
|
244
|
+
"--no-patch",
|
|
245
|
+
"--pretty=",
|
|
246
|
+
"--name-status",
|
|
247
|
+
"--find-renames",
|
|
248
|
+
"--find-copies",
|
|
249
|
+
"-z",
|
|
250
|
+
head,
|
|
251
|
+
];
|
|
252
|
+
const out = await git(args, { cwd });
|
|
253
|
+
return parsePushDeltaNameStatus(out);
|
|
254
|
+
}
|
|
255
|
+
// Pure parser for `git diff --name-status --find-renames --find-copies
|
|
256
|
+
// -z` output. Exposed as a named export so unit tests can feed
|
|
257
|
+
// synthetic tokens without spinning a real git repo.
|
|
258
|
+
//
|
|
259
|
+
// Token layout for a status entry:
|
|
260
|
+
// - <status-token> ("A" | "M" | "D" | "R<score>" | "C<score>" |
|
|
261
|
+
// "T" | "U" | "X" | unknown)
|
|
262
|
+
// - For R*/C*: <oldPath-token> <newPath-token>
|
|
263
|
+
// - Otherwise: <path-token>
|
|
264
|
+
//
|
|
265
|
+
// We collapse "R100" / "C75" / etc. down to the leading letter so
|
|
266
|
+
// downstream code matches by single-character code (and the existing
|
|
267
|
+
// ChangedFileStatus enum stays single-letter). The similarity score
|
|
268
|
+
// is informational only and is dropped on parse.
|
|
269
|
+
export function parsePushDeltaNameStatus(out) {
|
|
270
|
+
const files = [];
|
|
271
|
+
if (!out)
|
|
272
|
+
return files;
|
|
273
|
+
const tokens = out.split("\0");
|
|
274
|
+
let i = 0;
|
|
275
|
+
while (i < tokens.length) {
|
|
276
|
+
const statusRaw = tokens[i++];
|
|
277
|
+
if (statusRaw === undefined || statusRaw === "")
|
|
278
|
+
continue;
|
|
279
|
+
const leading = statusRaw.charAt(0);
|
|
280
|
+
let code;
|
|
281
|
+
let oldPath;
|
|
282
|
+
let path;
|
|
283
|
+
switch (leading) {
|
|
284
|
+
case "A":
|
|
285
|
+
case "M":
|
|
286
|
+
case "D":
|
|
287
|
+
case "T": {
|
|
288
|
+
code = leading;
|
|
289
|
+
path = tokens[i++] ?? "";
|
|
290
|
+
break;
|
|
291
|
+
}
|
|
292
|
+
case "R":
|
|
293
|
+
case "C": {
|
|
294
|
+
code = leading;
|
|
295
|
+
oldPath = tokens[i++] ?? "";
|
|
296
|
+
path = tokens[i++] ?? "";
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
case "U": {
|
|
300
|
+
code = "U";
|
|
301
|
+
path = tokens[i++] ?? "";
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
case "X":
|
|
305
|
+
default: {
|
|
306
|
+
// Cycle 332 hard-error path. Silently treating "X" as any
|
|
307
|
+
// other code risks mis-keying findings and letting a parser
|
|
308
|
+
// regression corrupt cross-push state.
|
|
309
|
+
throw new UnknownGitStatusError(statusRaw);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
if (!path)
|
|
313
|
+
continue;
|
|
314
|
+
const file = { path, status: code };
|
|
315
|
+
if (oldPath !== undefined)
|
|
316
|
+
file.oldPath = oldPath;
|
|
317
|
+
files.push(file);
|
|
318
|
+
}
|
|
319
|
+
return files;
|
|
320
|
+
}
|
|
321
|
+
// Check whether a commit / ref is reachable from the current
|
|
322
|
+
// repository. Used by review-push's restore-side fetch-depth guard
|
|
323
|
+
// to decide whether the cached last_reviewed_head_sha can serve as
|
|
324
|
+
// the delta base, or whether to fall back to the content-hash-direct
|
|
325
|
+
// path (cycle doc Q3 case 2).
|
|
326
|
+
export async function isShaReachable(sha, cwd = process.cwd()) {
|
|
327
|
+
try {
|
|
328
|
+
await git(["rev-parse", "--verify", `${sha}^{commit}`], { cwd });
|
|
329
|
+
return true;
|
|
330
|
+
}
|
|
331
|
+
catch {
|
|
332
|
+
return false;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
// Check whether a file exists at a given git ref. Used by the
|
|
336
|
+
// deletion-clean-coverage carry-forward branch (Q1) where the
|
|
337
|
+
// decision is existence-based, not hash-based.
|
|
338
|
+
export async function gitFileExists(ref, path, cwd = process.cwd()) {
|
|
339
|
+
try {
|
|
340
|
+
await git(["cat-file", "-e", `${ref}:${path}`], { cwd });
|
|
341
|
+
return true;
|
|
342
|
+
}
|
|
343
|
+
catch {
|
|
344
|
+
return false;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
// Read commit message bodies for the commit range `base..head`. Used
|
|
348
|
+
// by review-push's trailer-honoring path to walk every commit in the
|
|
349
|
+
// delta range and pick up `Critic-Reconsider:` trailers BEFORE the
|
|
350
|
+
// failure-mode dispatch (cycle doc Q3).
|
|
351
|
+
export async function commitMessagesInRange(base, head, cwd = process.cwd()) {
|
|
352
|
+
const args = base
|
|
353
|
+
? ["log", "--format=%B%x00", `${base}..${head}`]
|
|
354
|
+
: ["log", "--format=%B%x00", head];
|
|
355
|
+
const out = await git(args, { cwd });
|
|
356
|
+
if (!out)
|
|
357
|
+
return [];
|
|
358
|
+
return out
|
|
359
|
+
.split("\0")
|
|
360
|
+
.map((m) => m.replace(/^\n+|\n+$/g, ""))
|
|
361
|
+
.filter((m) => m.length > 0);
|
|
362
|
+
}
|
|
363
|
+
export function diffHash(diff) {
|
|
364
|
+
return `sha256:${sha256(diff)}`;
|
|
365
|
+
}
|
|
366
|
+
// Cycle 332 — re-exported under the module-private name as a named
|
|
367
|
+
// export so `finding-cache.ts` and tests can use the same canonical
|
|
368
|
+
// helper rather than re-implementing crypto. Both consumers MUST go
|
|
369
|
+
// through `sha256Hex` / `sha256Tagged` in `finding-cache.ts` (which
|
|
370
|
+
// internally call createHash directly) so the on-disk hash format
|
|
371
|
+
// stays consistent — exporting the bare helper here is only for
|
|
372
|
+
// readability when callers want the un-tagged hex form for an audit
|
|
373
|
+
// log.
|
|
374
|
+
export function sha256(input) {
|
|
375
|
+
return createHash("sha256").update(input).digest("hex");
|
|
376
|
+
}
|
|
377
|
+
export const ZERO_SHA = "0000000000000000000000000000000000000000";
|
|
378
|
+
export function parsePrePushUpdates(stdin) {
|
|
379
|
+
const updates = [];
|
|
380
|
+
for (const rawLine of stdin.split("\n")) {
|
|
381
|
+
const line = rawLine.trim();
|
|
382
|
+
if (!line)
|
|
383
|
+
continue;
|
|
384
|
+
const parts = line.split(/\s+/);
|
|
385
|
+
if (parts.length !== 4)
|
|
386
|
+
continue;
|
|
387
|
+
const [localRef, localSha, remoteRef, remoteSha] = parts;
|
|
388
|
+
updates.push({
|
|
389
|
+
localRef,
|
|
390
|
+
localSha,
|
|
391
|
+
remoteRef,
|
|
392
|
+
remoteSha,
|
|
393
|
+
isCreate: remoteSha === ZERO_SHA,
|
|
394
|
+
isDelete: localSha === ZERO_SHA,
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
return updates;
|
|
398
|
+
}
|
|
399
|
+
export async function commitsForPushUpdate(update, cwd = process.cwd(), options = {}) {
|
|
400
|
+
if (update.isDelete)
|
|
401
|
+
return [];
|
|
402
|
+
const args = update.isCreate
|
|
403
|
+
? ["rev-list", "--reverse", update.localSha, "--not", "--remotes"]
|
|
404
|
+
: ["rev-list", "--reverse", `${update.remoteSha}..${update.localSha}`];
|
|
405
|
+
if (options.maxCommits !== undefined) {
|
|
406
|
+
args.push(`--max-count=${options.maxCommits}`);
|
|
407
|
+
}
|
|
408
|
+
const out = await git(args, { cwd });
|
|
409
|
+
return out
|
|
410
|
+
.split("\n")
|
|
411
|
+
.map((l) => l.trim())
|
|
412
|
+
.filter(Boolean);
|
|
413
|
+
}
|
|
414
|
+
//# sourceMappingURL=git.js.map
|
package/dist/git.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|
package/dist/glob.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../src/glob.ts"],"names":[],"mappings":"AAiBA,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA6DnD;AAQD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAK/E"}
|
package/dist/glob.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// POSIX-style glob matcher with the subset needed for verification-route
|
|
2
|
+
// triggers and TDD classifier globs. Kept dependency-free on purpose:
|
|
3
|
+
// pulling in picomatch / minimatch would expand the supply-chain surface
|
|
4
|
+
// of a security-sensitive tool that already runs as a git hook. The subset
|
|
5
|
+
// here is what the cycle 318.2 config actually uses:
|
|
6
|
+
//
|
|
7
|
+
// * — matches any sequence of characters EXCEPT path separator
|
|
8
|
+
// ** — matches any sequence of characters INCLUDING path separators
|
|
9
|
+
// ? — matches a single character (not path separator)
|
|
10
|
+
// {a,b,c} — matches any of the comma-separated alternatives (one level)
|
|
11
|
+
// [abc] — matches one of a, b, c (character class)
|
|
12
|
+
// / — matched literally
|
|
13
|
+
//
|
|
14
|
+
// Match is anchored to the full string (not substring), case-sensitive,
|
|
15
|
+
// and uses POSIX path semantics (forward slash). Patterns are compiled to
|
|
16
|
+
// a RegExp at call time; cache externally if perf becomes a concern.
|
|
17
|
+
export function compileGlob(pattern) {
|
|
18
|
+
let i = 0;
|
|
19
|
+
let body = "";
|
|
20
|
+
while (i < pattern.length) {
|
|
21
|
+
const ch = pattern[i] ?? "";
|
|
22
|
+
if (ch === "*") {
|
|
23
|
+
// Look ahead for `**`.
|
|
24
|
+
if (pattern[i + 1] === "*") {
|
|
25
|
+
// `**/` or `**` at end: match any characters including `/`.
|
|
26
|
+
// Allow `**/` to optionally match zero segments (so `a/**/b` matches `a/b`).
|
|
27
|
+
if (pattern[i + 2] === "/") {
|
|
28
|
+
body += "(?:.*/)?";
|
|
29
|
+
i += 3;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
body += ".*";
|
|
33
|
+
i += 2;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
// Single `*`: match anything except `/`.
|
|
38
|
+
body += "[^/]*";
|
|
39
|
+
i += 1;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else if (ch === "?") {
|
|
43
|
+
body += "[^/]";
|
|
44
|
+
i += 1;
|
|
45
|
+
}
|
|
46
|
+
else if (ch === "{") {
|
|
47
|
+
// One-level brace expansion: {ts,tsx} → (?:ts|tsx).
|
|
48
|
+
// Nested braces are not supported (no current callers need them).
|
|
49
|
+
const close = pattern.indexOf("}", i + 1);
|
|
50
|
+
if (close === -1) {
|
|
51
|
+
// Unmatched brace — fall through to literal.
|
|
52
|
+
body += "\\{";
|
|
53
|
+
i += 1;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const inner = pattern.slice(i + 1, close);
|
|
57
|
+
const alts = inner.split(",").map((s) => escapeRegex(s));
|
|
58
|
+
body += `(?:${alts.join("|")})`;
|
|
59
|
+
i = close + 1;
|
|
60
|
+
}
|
|
61
|
+
else if (ch === "[") {
|
|
62
|
+
// Character class; escape `/` as `\/` inside the regex but keep
|
|
63
|
+
// the class otherwise verbatim. Note `[!...]` (POSIX negation) is
|
|
64
|
+
// converted to `[^...]`.
|
|
65
|
+
const close = pattern.indexOf("]", i + 1);
|
|
66
|
+
if (close === -1) {
|
|
67
|
+
body += "\\[";
|
|
68
|
+
i += 1;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
let inner = pattern.slice(i + 1, close);
|
|
72
|
+
if (inner.startsWith("!")) {
|
|
73
|
+
inner = `^${inner.slice(1)}`;
|
|
74
|
+
}
|
|
75
|
+
body += `[${inner}]`;
|
|
76
|
+
i = close + 1;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
body += escapeRegex(ch);
|
|
80
|
+
i += 1;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return new RegExp(`^${body}$`);
|
|
84
|
+
}
|
|
85
|
+
const REGEX_ESCAPE = /[.+^$|()\\\\]/g;
|
|
86
|
+
function escapeRegex(s) {
|
|
87
|
+
return s.replace(REGEX_ESCAPE, "\\$&");
|
|
88
|
+
}
|
|
89
|
+
export function matchGlob(path, pattern) {
|
|
90
|
+
return compileGlob(pattern).test(path);
|
|
91
|
+
}
|
|
92
|
+
export function matchAnyGlob(path, patterns) {
|
|
93
|
+
for (const p of patterns) {
|
|
94
|
+
if (matchGlob(path, p))
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=glob.js.map
|
package/dist/glob.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../src/glob.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export * from "./adapters/critic.js";
|
|
2
|
+
export * from "./adapters/critic-result-schema.js";
|
|
3
|
+
export { evaluateCommitGate, evaluatePushGate, evaluateQuorumCriticResults, summarizeGate, enforceVerificationRoutes, runTddClassifier, enforceFindingRubric, buildRubricContext, classifyTdd, type EvaluateGateOptions, type EvaluatePushGateOptions, type EnforceRoutesOptions, type RouteEvaluation, type RouteResult, type RubricStripContext, type RubricResult, type StrippedFinding, type BuildRubricContextOptions, type RunTddClassifierOptions, type TddClassifierConfig, type TddClassifierResult, } from "./policy/gate.js";
|
|
4
|
+
export { classifyTdd as tddClassify, type TddClassifierConfig as TddConfig, type TddClassifierResult as TddResult, type TddVerdict, } from "./policy/tdd-classifier.js";
|
|
5
|
+
export { resolvePolicyBaseline, TRUSTED_SCRIPT_PATHS, type PolicyBaseline, type ResolveBaselineOptions, } from "./policy/baseline.js";
|
|
6
|
+
export { resolveProfile, resolveProfileWithConfig, applyProfileParamOverrides, applyProfileAuth, type ResolvedProfile, } from "./policy/profile.js";
|
|
7
|
+
export { loadAgentReviewConfig, loadAgentReviewConfigFromRef, applyEnvOverrides, CONFIG_RELATIVE_PATH, POLICY_OVERRIDE_ENV, type LoadedConfig, type LoadConfigOptions, type PolicyOverrideRecord, type ApplyEnvOverridesOptions, type ApplyEnvOverridesResult, } from "./policy/config.js";
|
|
8
|
+
export { buildReviewPacket, readContainedFiles, type BuildPacketOptions, } from "./trusted-surface/rebind.js";
|
|
9
|
+
export { parseCommitTrailers, getTrailer, perShaQualityGatePath, collectChangedPaths, QUALITY_GATES_SUBDIR, runQualityGates, readQualityGateEvidence, type CommitTrailers, type QualityGateRunOptions, type ReadEvidenceResult, } from "./evidence/index.js";
|
|
10
|
+
export { runValidateCycleDoc, getValidateCycleDocScriptPath, type ValidateCycleDocOptions, type ValidateCycleDocResult, } from "./cycle-doc-validator/index.js";
|
|
11
|
+
export { runAuditBranchProtection, getAuditBranchProtectionScriptPath, getBundledDefaultSpecPath, type AuditBranchProtectionOptions, type AuditBranchProtectionResult, } from "./branch-protection/index.js";
|
|
12
|
+
export { runSyncCycleTrackers, runAttributePrCycleRef, getSyncCycleTrackersScriptPath, getAttributePrCycleRefScriptPath, type SyncCycleTrackersOptions, type AttributePrCycleRefOptions, type PythonScriptResult, } from "./cycle-tracker-sync/index.js";
|
|
13
|
+
export { classifyPrKind, classifyPrKindFromFiles, resolveChiefEngineerLogin, evaluatePlanPrReviewGate, defaultMergeQueueRule, defaultMainRulesetShape, defaultCeReviewRulesetShape, PR_PLAN_DOC_PATTERN, PR_DOC_ROOT, type PrKind, type PlanPrGateInputs, type PlanPrGateVerdict, type MergeQueueRule, type RulesetShape, } from "./policy/merge-queue.js";
|
|
14
|
+
export { FileTelemetrySink, MemoryTelemetrySink, readTelemetryEvents, summarizeTelemetry, computeQuorumStats, computeCriticAgreement, type TelemetrySink, type TelemetryStats, type RetrySummary, type CriticStats, type CriticAgreement, type QuorumStats, } from "./evidence/audit-trail.js";
|
|
15
|
+
export { runReview, runCommitGate, type ReviewRunOptions, type ReviewRunOutcome, type GateRunOptions, } from "./runner.js";
|
|
16
|
+
export * from "@momentiq/dark-factory-schemas";
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Barrel exports for @momentiq/dark-factory-cli.
|
|
2
|
+
// Top-level entry: re-exports the three services and the runner.
|
|
3
|
+
// Service #1 — Critic Orchestrator
|
|
4
|
+
export * from "./adapters/critic.js";
|
|
5
|
+
export * from "./adapters/critic-result-schema.js";
|
|
6
|
+
// Service #2 — Policy Engine
|
|
7
|
+
export { evaluateCommitGate, evaluatePushGate, evaluateQuorumCriticResults, summarizeGate, enforceVerificationRoutes, runTddClassifier, enforceFindingRubric, buildRubricContext, classifyTdd, } from "./policy/gate.js";
|
|
8
|
+
export { classifyTdd as tddClassify, } from "./policy/tdd-classifier.js";
|
|
9
|
+
export { resolvePolicyBaseline, TRUSTED_SCRIPT_PATHS, } from "./policy/baseline.js";
|
|
10
|
+
export { resolveProfile, resolveProfileWithConfig, applyProfileParamOverrides, applyProfileAuth, } from "./policy/profile.js";
|
|
11
|
+
export { loadAgentReviewConfig, loadAgentReviewConfigFromRef, applyEnvOverrides, CONFIG_RELATIVE_PATH, POLICY_OVERRIDE_ENV, } from "./policy/config.js";
|
|
12
|
+
// Service #3 — Trusted-Surface Rebind
|
|
13
|
+
export { buildReviewPacket, readContainedFiles, } from "./trusted-surface/rebind.js";
|
|
14
|
+
// Service #4 — Per-SHA Evidence Store (Phase C boundary)
|
|
15
|
+
export { parseCommitTrailers, getTrailer, perShaQualityGatePath, collectChangedPaths, QUALITY_GATES_SUBDIR, runQualityGates, readQualityGateEvidence, } from "./evidence/index.js";
|
|
16
|
+
// Service #5 — Cycle-Doc Trailer Validator (Phase C — Python-wrapped)
|
|
17
|
+
export { runValidateCycleDoc, getValidateCycleDocScriptPath, } from "./cycle-doc-validator/index.js";
|
|
18
|
+
// Service #7 — Branch-Protection Drift Detector (Phase C — Python-wrapped)
|
|
19
|
+
export { runAuditBranchProtection, getAuditBranchProtectionScriptPath, getBundledDefaultSpecPath, } from "./branch-protection/index.js";
|
|
20
|
+
// Service #9 — Cycle Tracker Sync + PR Attribution (Phase C — Python-wrapped)
|
|
21
|
+
export { runSyncCycleTrackers, runAttributePrCycleRef, getSyncCycleTrackersScriptPath, getAttributePrCycleRefScriptPath, } from "./cycle-tracker-sync/index.js";
|
|
22
|
+
// Service #6 — Merge Queue Admission Policy (Phase D boundary).
|
|
23
|
+
// Plan-vs-code PR classifier + merge-queue rule shape (the ruleset
|
|
24
|
+
// contract that audit_branch_protection.py compares against).
|
|
25
|
+
export { classifyPrKind, classifyPrKindFromFiles, resolveChiefEngineerLogin, evaluatePlanPrReviewGate, defaultMergeQueueRule, defaultMainRulesetShape, defaultCeReviewRulesetShape, PR_PLAN_DOC_PATTERN, PR_DOC_ROOT, } from "./policy/merge-queue.js";
|
|
26
|
+
// Service #8 — Audit / Compliance Trail (Phase D boundary).
|
|
27
|
+
// `_runs.ndjson` sink + read/summarize helpers.
|
|
28
|
+
export { FileTelemetrySink, MemoryTelemetrySink, readTelemetryEvents, summarizeTelemetry, computeQuorumStats, computeCriticAgreement, } from "./evidence/audit-trail.js";
|
|
29
|
+
// Runner — drives the orchestrator end-to-end.
|
|
30
|
+
export { runReview, runCommitGate, } from "./runner.js";
|
|
31
|
+
// Re-export schemas for ergonomic single-import.
|
|
32
|
+
export * from "@momentiq/dark-factory-schemas";
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,iEAAiE;AAEjE,mCAAmC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oCAAoC,CAAC;AAEnD,6BAA6B;AAC7B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,2BAA2B,EAC3B,aAAa,EACb,yBAAyB,EACzB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,WAAW,GAaZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,WAAW,IAAI,WAAW,GAI3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GAGrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,0BAA0B,EAC1B,gBAAgB,GAEjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GAMpB,MAAM,oBAAoB,CAAC;AAE5B,sCAAsC;AACtC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GAEnB,MAAM,6BAA6B,CAAC;AAErC,yDAAyD;AACzD,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,uBAAuB,GAIxB,MAAM,qBAAqB,CAAC;AAE7B,sEAAsE;AACtE,OAAO,EACL,mBAAmB,EACnB,6BAA6B,GAG9B,MAAM,gCAAgC,CAAC;AAExC,2EAA2E;AAC3E,OAAO,EACL,wBAAwB,EACxB,kCAAkC,EAClC,yBAAyB,GAG1B,MAAM,8BAA8B,CAAC;AAEtC,8EAA8E;AAC9E,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,8BAA8B,EAC9B,gCAAgC,GAIjC,MAAM,+BAA+B,CAAC;AAEvC,gEAAgE;AAChE,mEAAmE;AACnE,8DAA8D;AAC9D,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,EACnB,WAAW,GAMZ,MAAM,yBAAyB,CAAC;AAEjC,4DAA4D;AAC5D,gDAAgD;AAChD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,GAOvB,MAAM,2BAA2B,CAAC;AAEnC,+CAA+C;AAC/C,OAAO,EACL,SAAS,EACT,aAAa,GAId,MAAM,aAAa,CAAC;AAErB,iDAAiD;AACjD,cAAc,gCAAgC,CAAC"}
|
package/dist/paths.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { LoadedConfig } from "./policy/config.js";
|
|
2
|
+
export declare function resolveArtifactRoot(loaded: LoadedConfig): Promise<string>;
|
|
3
|
+
export declare function resolveArtifactDir(loaded: LoadedConfig): Promise<string>;
|
|
4
|
+
export declare function artifactJsonPath(artifactDir: string, sha: string): string;
|
|
5
|
+
export declare function artifactMarkdownPath(artifactDir: string, sha: string): string;
|
|
6
|
+
export declare function artifactLockPath(artifactDir: string, sha: string): string;
|
|
7
|
+
export declare function diagnosticsDir(artifactDir: string): string;
|
|
8
|
+
export declare function telemetryPath(artifactDir: string): string;
|
|
9
|
+
export declare function resolveValidationResultPath(loaded: LoadedConfig): Promise<string>;
|
|
10
|
+
export declare function findingCacheDir(artifactDir: string, prNumber: number): string;
|
|
11
|
+
export declare function findingCachePath(artifactDir: string, prNumber: number): string;
|
|
12
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAK/E;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAE9E;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAsB,2BAA2B,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAGvF;AAOD,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9E"}
|