@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.
Files changed (132) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +150 -0
  3. package/dist/adapters/_shared.d.ts +45 -0
  4. package/dist/adapters/_shared.d.ts.map +1 -0
  5. package/dist/adapters/_shared.js +200 -0
  6. package/dist/adapters/_shared.js.map +1 -0
  7. package/dist/adapters/codex-sdk.d.ts +279 -0
  8. package/dist/adapters/codex-sdk.d.ts.map +1 -0
  9. package/dist/adapters/codex-sdk.js +930 -0
  10. package/dist/adapters/codex-sdk.js.map +1 -0
  11. package/dist/adapters/critic-result-schema.d.ts +215 -0
  12. package/dist/adapters/critic-result-schema.d.ts.map +1 -0
  13. package/dist/adapters/critic-result-schema.js +153 -0
  14. package/dist/adapters/critic-result-schema.js.map +1 -0
  15. package/dist/adapters/critic.d.ts +62 -0
  16. package/dist/adapters/critic.d.ts.map +1 -0
  17. package/dist/adapters/critic.js +79 -0
  18. package/dist/adapters/critic.js.map +1 -0
  19. package/dist/adapters/cursor-sdk.d.ts +153 -0
  20. package/dist/adapters/cursor-sdk.d.ts.map +1 -0
  21. package/dist/adapters/cursor-sdk.js +818 -0
  22. package/dist/adapters/cursor-sdk.js.map +1 -0
  23. package/dist/adapters/gemini-sdk.d.ts +113 -0
  24. package/dist/adapters/gemini-sdk.d.ts.map +1 -0
  25. package/dist/adapters/gemini-sdk.js +532 -0
  26. package/dist/adapters/gemini-sdk.js.map +1 -0
  27. package/dist/adapters/grok-direct-sdk.d.ts +148 -0
  28. package/dist/adapters/grok-direct-sdk.d.ts.map +1 -0
  29. package/dist/adapters/grok-direct-sdk.js +694 -0
  30. package/dist/adapters/grok-direct-sdk.js.map +1 -0
  31. package/dist/branch-protection/audit_branch_protection.py +759 -0
  32. package/dist/branch-protection/index.d.ts +25 -0
  33. package/dist/branch-protection/index.d.ts.map +1 -0
  34. package/dist/branch-protection/index.js +70 -0
  35. package/dist/branch-protection/index.js.map +1 -0
  36. package/dist/branch-protection/spec-default.yaml +314 -0
  37. package/dist/cli.d.ts +3 -0
  38. package/dist/cli.d.ts.map +1 -0
  39. package/dist/cli.js +581 -0
  40. package/dist/cli.js.map +1 -0
  41. package/dist/cycle-doc-validator/index.d.ts +43 -0
  42. package/dist/cycle-doc-validator/index.d.ts.map +1 -0
  43. package/dist/cycle-doc-validator/index.js +69 -0
  44. package/dist/cycle-doc-validator/index.js.map +1 -0
  45. package/dist/cycle-doc-validator/validate_cycle_doc.py +1260 -0
  46. package/dist/cycle-tracker-sync/attribute_pr_cycle_ref.py +384 -0
  47. package/dist/cycle-tracker-sync/index.d.ts +20 -0
  48. package/dist/cycle-tracker-sync/index.d.ts.map +1 -0
  49. package/dist/cycle-tracker-sync/index.js +71 -0
  50. package/dist/cycle-tracker-sync/index.js.map +1 -0
  51. package/dist/cycle-tracker-sync/sync_cycle_trackers.py +1093 -0
  52. package/dist/evidence/audit-trail.d.ts +59 -0
  53. package/dist/evidence/audit-trail.d.ts.map +1 -0
  54. package/dist/evidence/audit-trail.js +283 -0
  55. package/dist/evidence/audit-trail.js.map +1 -0
  56. package/dist/evidence/index.d.ts +4 -0
  57. package/dist/evidence/index.d.ts.map +1 -0
  58. package/dist/evidence/index.js +29 -0
  59. package/dist/evidence/index.js.map +1 -0
  60. package/dist/evidence/per-sha.d.ts +13 -0
  61. package/dist/evidence/per-sha.d.ts.map +1 -0
  62. package/dist/evidence/per-sha.js +97 -0
  63. package/dist/evidence/per-sha.js.map +1 -0
  64. package/dist/evidence/quality-gates.d.ts +19 -0
  65. package/dist/evidence/quality-gates.d.ts.map +1 -0
  66. package/dist/evidence/quality-gates.js +212 -0
  67. package/dist/evidence/quality-gates.js.map +1 -0
  68. package/dist/git.d.ts +40 -0
  69. package/dist/git.d.ts.map +1 -0
  70. package/dist/git.js +414 -0
  71. package/dist/git.js.map +1 -0
  72. package/dist/glob.d.ts +4 -0
  73. package/dist/glob.d.ts.map +1 -0
  74. package/dist/glob.js +99 -0
  75. package/dist/glob.js.map +1 -0
  76. package/dist/index.d.ts +17 -0
  77. package/dist/index.d.ts.map +1 -0
  78. package/dist/index.js +33 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/paths.d.ts +12 -0
  81. package/dist/paths.d.ts.map +1 -0
  82. package/dist/paths.js +42 -0
  83. package/dist/paths.js.map +1 -0
  84. package/dist/policy/baseline.d.ts +15 -0
  85. package/dist/policy/baseline.d.ts.map +1 -0
  86. package/dist/policy/baseline.js +115 -0
  87. package/dist/policy/baseline.js.map +1 -0
  88. package/dist/policy/config.d.ts +64 -0
  89. package/dist/policy/config.d.ts.map +1 -0
  90. package/dist/policy/config.js +363 -0
  91. package/dist/policy/config.js.map +1 -0
  92. package/dist/policy/gate.d.ts +80 -0
  93. package/dist/policy/gate.d.ts.map +1 -0
  94. package/dist/policy/gate.js +1019 -0
  95. package/dist/policy/gate.js.map +1 -0
  96. package/dist/policy/index.d.ts +7 -0
  97. package/dist/policy/index.d.ts.map +1 -0
  98. package/dist/policy/index.js +14 -0
  99. package/dist/policy/index.js.map +1 -0
  100. package/dist/policy/merge-queue.d.ts +183 -0
  101. package/dist/policy/merge-queue.d.ts.map +1 -0
  102. package/dist/policy/merge-queue.js +310 -0
  103. package/dist/policy/merge-queue.js.map +1 -0
  104. package/dist/policy/profile.d.ts +98 -0
  105. package/dist/policy/profile.d.ts.map +1 -0
  106. package/dist/policy/profile.js +156 -0
  107. package/dist/policy/profile.js.map +1 -0
  108. package/dist/policy/tdd-classifier.d.ts +18 -0
  109. package/dist/policy/tdd-classifier.d.ts.map +1 -0
  110. package/dist/policy/tdd-classifier.js +79 -0
  111. package/dist/policy/tdd-classifier.js.map +1 -0
  112. package/dist/prompt.d.ts +13 -0
  113. package/dist/prompt.d.ts.map +1 -0
  114. package/dist/prompt.js +175 -0
  115. package/dist/prompt.js.map +1 -0
  116. package/dist/report.d.ts +88 -0
  117. package/dist/report.d.ts.map +1 -0
  118. package/dist/report.js +376 -0
  119. package/dist/report.js.map +1 -0
  120. package/dist/runner.d.ts +30 -0
  121. package/dist/runner.d.ts.map +1 -0
  122. package/dist/runner.js +456 -0
  123. package/dist/runner.js.map +1 -0
  124. package/dist/security.d.ts +2 -0
  125. package/dist/security.d.ts.map +1 -0
  126. package/dist/security.js +19 -0
  127. package/dist/security.js.map +1 -0
  128. package/dist/trusted-surface/rebind.d.ts +10 -0
  129. package/dist/trusted-surface/rebind.d.ts.map +1 -0
  130. package/dist/trusted-surface/rebind.js +154 -0
  131. package/dist/trusted-surface/rebind.js.map +1 -0
  132. package/package.json +78 -0
@@ -0,0 +1,212 @@
1
+ import { spawn } from "node:child_process";
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { dirname } from "node:path";
4
+ import { perShaQualityGatePath } from "./per-sha.js";
5
+ // Consumer-supplied env keys that should be scrubbed from gate subprocess
6
+ // environments. This is the OSS-minimal allowlist; consumers needing
7
+ // repo-specific scrubbing extend it via the future config surface (Phase D).
8
+ // Extracted from sage3c's `tools/agent-review/src/doppler-bootstrap.ts` —
9
+ // the bootstrap logic itself is sage3c-specific and stays in the consumer
10
+ // repo's own bootstrap path until Phase D externalizes the contract.
11
+ const DOPPLER_BOOTSTRAP_ALLOWLIST = Object.freeze([
12
+ "DOPPLER_TOKEN",
13
+ "DOPPLER_SERVICE_TOKEN_SAGE",
14
+ ]);
15
+ import { resolveArtifactRoot, resolveValidationResultPath, } from "../paths.js";
16
+ import { parseQualityGateEvidence, } from "@momentiq/dark-factory-schemas";
17
+ const DEFAULT_LOG_EXCERPT_LINES = 80;
18
+ export async function runQualityGates(options) {
19
+ const { loaded, commit, signal, routeId } = options;
20
+ const cwd = options.cwd ?? loaded.repoRoot;
21
+ const commands = options.commands ?? loaded.config.validation.requiredQualityGates;
22
+ const excerptLines = options.excerptLines ?? DEFAULT_LOG_EXCERPT_LINES;
23
+ const newResults = [];
24
+ for (const command of commands) {
25
+ if (signal?.aborted)
26
+ break;
27
+ const result = await runOne(command, cwd, signal, excerptLines);
28
+ if (routeId)
29
+ result.routeId = routeId;
30
+ newResults.push(result);
31
+ }
32
+ // Cycle 318.2 Component 3: per-SHA evidence is the canonical path.
33
+ // Read any existing per-SHA file so subsequent route runs accumulate
34
+ // instead of clobbering. Then write both the per-SHA file (canonical)
35
+ // and the legacy `validation.resultFile` (back-compat for 318.2 → 318.4).
36
+ const artifactRoot = await resolveArtifactRoot(loaded);
37
+ const perShaPath = perShaQualityGatePath(artifactRoot, loaded.config.git.artifactDir, commit);
38
+ const existing = readEvidenceAtPath(perShaPath, commit);
39
+ const mergedResults = mergeResults(existing?.results ?? [], newResults);
40
+ const mergedGateResults = {
41
+ ...(existing?.gateResults ?? {}),
42
+ };
43
+ if (routeId && newResults.length > 0) {
44
+ // In practice each route ships a single command. If a route does run
45
+ // multiple commands, the LAST result is what gate-push checks — the
46
+ // semantics is "did the route as a whole pass at the boundary?"
47
+ const last = newResults[newResults.length - 1];
48
+ if (last)
49
+ mergedGateResults[routeId] = last;
50
+ }
51
+ const evidence = {
52
+ version: 2,
53
+ commit,
54
+ generatedAt: new Date().toISOString(),
55
+ results: mergedResults,
56
+ ...(Object.keys(mergedGateResults).length > 0
57
+ ? { gateResults: mergedGateResults }
58
+ : {}),
59
+ };
60
+ mkdirSync(dirname(perShaPath), { recursive: true });
61
+ writeFileSync(perShaPath, `${JSON.stringify(evidence, null, 2)}\n`, "utf8");
62
+ // Back-compat: also write the legacy `validation.resultFile` (latest.json)
63
+ // as a copy of the same evidence. We use a copy rather than a symlink so
64
+ // concurrent gate runs on different commits do not race on symlink
65
+ // rewrites. This stays in place through the 318.2 → 318.4 migration
66
+ // window; consumers should transition to reading the per-SHA path.
67
+ const legacyPath = await resolveValidationResultPath(loaded);
68
+ mkdirSync(dirname(legacyPath), { recursive: true });
69
+ writeFileSync(legacyPath, `${JSON.stringify(evidence, null, 2)}\n`, "utf8");
70
+ return evidence;
71
+ }
72
+ function mergeResults(prior, added) {
73
+ // Same (routeId, command) tuple: newest wins. Different tuples: append.
74
+ // Without this merge, a route that re-runs the same command on a retry
75
+ // would accumulate stale entries.
76
+ const keyOf = (r) => `${r.routeId ?? ""}::${r.command}`;
77
+ const out = new Map();
78
+ for (const r of prior)
79
+ out.set(keyOf(r), r);
80
+ for (const r of added)
81
+ out.set(keyOf(r), r);
82
+ return [...out.values()];
83
+ }
84
+ export async function readQualityGateEvidence(loaded, commit) {
85
+ // Prefer the per-SHA file (cycle 318.2 canonical layout). Fall back to
86
+ // the legacy resultFile if no per-SHA file exists yet — this keeps the
87
+ // read path tolerant of intermediate states during rollout: evidence
88
+ // produced by an older `runQualityGates()` (v1 single latest.json) is
89
+ // still readable, and the staleness check fires correctly when the
90
+ // legacy file points at a different commit.
91
+ const artifactRoot = await resolveArtifactRoot(loaded);
92
+ const perShaPath = perShaQualityGatePath(artifactRoot, loaded.config.git.artifactDir, commit);
93
+ const perSha = readEvidenceAtPath(perShaPath, commit);
94
+ if (perSha) {
95
+ return { evidence: perSha, path: perShaPath, stale: false };
96
+ }
97
+ const legacyPath = await resolveValidationResultPath(loaded);
98
+ if (!existsSync(legacyPath)) {
99
+ return { evidence: null, path: legacyPath, stale: false };
100
+ }
101
+ const legacy = readEvidenceAtPath(legacyPath);
102
+ if (!legacy)
103
+ return { evidence: null, path: legacyPath, stale: false };
104
+ if (legacy.commit !== commit) {
105
+ return { evidence: legacy, path: legacyPath, stale: true };
106
+ }
107
+ return { evidence: legacy, path: legacyPath, stale: false };
108
+ }
109
+ function readEvidenceAtPath(path, expectedCommit) {
110
+ if (!existsSync(path))
111
+ return null;
112
+ let parsed;
113
+ try {
114
+ parsed = JSON.parse(readFileSync(path, "utf8"));
115
+ }
116
+ catch {
117
+ return null;
118
+ }
119
+ let evidence;
120
+ try {
121
+ evidence = parseQualityGateEvidence(parsed);
122
+ }
123
+ catch {
124
+ return null;
125
+ }
126
+ if (expectedCommit !== undefined && evidence.commit !== expectedCommit) {
127
+ // A per-SHA file whose `commit` field doesn't match its filename is
128
+ // a corrupted artifact; treat as missing so a fresh run rewrites
129
+ // cleanly rather than merging into garbage.
130
+ return null;
131
+ }
132
+ return evidence;
133
+ }
134
+ function splitCommand(command) {
135
+ const trimmed = command.trim();
136
+ if (!trimmed)
137
+ throw new Error("empty command");
138
+ const argv = trimmed.split(/\s+/);
139
+ return { argv };
140
+ }
141
+ function lastNonEmptyLines(text, count) {
142
+ const lines = text.split(/\r?\n/);
143
+ while (lines.length > 0 && lines[lines.length - 1] === "")
144
+ lines.pop();
145
+ if (lines.length <= count)
146
+ return lines.join("\n");
147
+ return lines.slice(lines.length - count).join("\n");
148
+ }
149
+ function runOne(command, cwd, signal, excerptLines) {
150
+ const { argv } = splitCommand(command);
151
+ return new Promise((resolvePromise) => {
152
+ const startedAt = new Date();
153
+ const startMs = Date.now();
154
+ const head = argv[0] ?? "";
155
+ const tail = argv.slice(1);
156
+ // Scrub the bootstrap-loaded Doppler vars from the gate subprocess env.
157
+ // `agent-review gates` itself does NOT invoke the Doppler bootstrap —
158
+ // main() scopes the bootstrap to the critic-running commands
159
+ // (`doctor`/`review`/`eval`) so quality-gate subprocesses don't inherit
160
+ // the main-checkout service token. But the tokens can still reach this
161
+ // code path indirectly (e.g., a parent shell that ran one of the
162
+ // critic-running commands earlier, or the `.husky/post-commit` hook's
163
+ // inline parser exporting them before invoking the CLI). Scrub them
164
+ // defensively here so gate subprocesses and their grandchildren never
165
+ // see them regardless of the call path. Gates that genuinely need
166
+ // Doppler should call `doppler -p sage -c dev run -- <cmd>` themselves.
167
+ // (issue #1312)
168
+ const childEnv = { ...process.env };
169
+ for (const k of DOPPLER_BOOTSTRAP_ALLOWLIST) {
170
+ delete childEnv[k];
171
+ }
172
+ const child = spawn(head, tail, {
173
+ cwd,
174
+ env: childEnv,
175
+ stdio: ["ignore", "pipe", "pipe"],
176
+ ...(signal !== undefined ? { signal } : {}),
177
+ });
178
+ let stdout = "";
179
+ let stderr = "";
180
+ child.stdout.on("data", (chunk) => {
181
+ stdout += chunk.toString("utf8");
182
+ });
183
+ child.stderr.on("data", (chunk) => {
184
+ stderr += chunk.toString("utf8");
185
+ });
186
+ child.on("error", (err) => {
187
+ const finishedAt = new Date();
188
+ resolvePromise({
189
+ command,
190
+ exitCode: -1,
191
+ durationMs: Date.now() - startMs,
192
+ logExcerpt: `spawn error: ${err.message}`,
193
+ startedAt: startedAt.toISOString(),
194
+ finishedAt: finishedAt.toISOString(),
195
+ });
196
+ });
197
+ child.on("close", (code, sig) => {
198
+ const finishedAt = new Date();
199
+ const combined = `${stdout}${stderr}`;
200
+ const excerpt = lastNonEmptyLines(combined, excerptLines);
201
+ resolvePromise({
202
+ command,
203
+ exitCode: code === null ? -1 : code,
204
+ durationMs: Date.now() - startMs,
205
+ logExcerpt: sig ? `${excerpt}\n[killed by signal ${sig}]` : excerpt,
206
+ startedAt: startedAt.toISOString(),
207
+ finishedAt: finishedAt.toISOString(),
208
+ });
209
+ });
210
+ });
211
+ }
212
+ //# sourceMappingURL=quality-gates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality-gates.js","sourceRoot":"","sources":["../../src/evidence/quality-gates.ts"],"names":[],"mappings":"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"}
package/dist/git.d.ts ADDED
@@ -0,0 +1,40 @@
1
+ import type { ChangedFile, CommitMetadata } from "@momentiq/dark-factory-schemas";
2
+ export declare function gitShowFile(ref: string, path: string, cwd?: string): Promise<string | null>;
3
+ export declare function repoRoot(cwd?: string): Promise<string>;
4
+ export declare function gitCommonDir(cwd?: string): Promise<string>;
5
+ export declare function gitDir(cwd?: string): Promise<string>;
6
+ export declare function currentBranch(cwd?: string): Promise<string>;
7
+ export declare function resolveCommit(ref: string, cwd?: string): Promise<string>;
8
+ export declare function commitParent(sha: string, cwd?: string): Promise<string>;
9
+ export declare function commitMetadata(sha: string, cwd?: string): Promise<CommitMetadata>;
10
+ export declare function commitStat(parent: string, sha: string, cwd?: string): Promise<string>;
11
+ export declare function commitDiff(parent: string, sha: string, cwd?: string): Promise<string>;
12
+ export declare function changedFiles(parent: string, sha: string, cwd?: string, options?: {
13
+ maxBytes?: number;
14
+ readContent?: boolean;
15
+ }): Promise<ChangedFile[]>;
16
+ export declare class UnknownGitStatusError extends Error {
17
+ readonly statusRaw: string;
18
+ constructor(statusRaw: string);
19
+ }
20
+ export declare function pushDeltaChangedFiles(base: string, head: string, cwd?: string): Promise<ChangedFile[]>;
21
+ export declare function parsePushDeltaNameStatus(out: string): ChangedFile[];
22
+ export declare function isShaReachable(sha: string, cwd?: string): Promise<boolean>;
23
+ export declare function gitFileExists(ref: string, path: string, cwd?: string): Promise<boolean>;
24
+ export declare function commitMessagesInRange(base: string, head: string, cwd?: string): Promise<string[]>;
25
+ export declare function diffHash(diff: string): string;
26
+ export declare function sha256(input: string): string;
27
+ export interface PushUpdate {
28
+ localRef: string;
29
+ localSha: string;
30
+ remoteRef: string;
31
+ remoteSha: string;
32
+ isCreate: boolean;
33
+ isDelete: boolean;
34
+ }
35
+ export declare const ZERO_SHA = "0000000000000000000000000000000000000000";
36
+ export declare function parsePrePushUpdates(stdin: string): PushUpdate[];
37
+ export declare function commitsForPushUpdate(update: PushUpdate, cwd?: string, options?: {
38
+ maxCommits?: number;
39
+ }): Promise<string[]>;
40
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}