@momentiq/dark-factory-cli 1.0.0 → 2.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.
Files changed (159) hide show
  1. package/README.md +121 -40
  2. package/dist/adapters/codex-sdk.d.ts +66 -0
  3. package/dist/adapters/codex-sdk.d.ts.map +1 -1
  4. package/dist/adapters/codex-sdk.js +321 -4
  5. package/dist/adapters/codex-sdk.js.map +1 -1
  6. package/dist/adapters/critic-result-schema.d.ts +15 -10
  7. package/dist/adapters/critic-result-schema.d.ts.map +1 -1
  8. package/dist/adapters/critic-result-schema.js +10 -0
  9. package/dist/adapters/critic-result-schema.js.map +1 -1
  10. package/dist/adapters/cursor-cli.d.ts +19 -1
  11. package/dist/adapters/cursor-cli.d.ts.map +1 -1
  12. package/dist/adapters/cursor-cli.js +96 -14
  13. package/dist/adapters/cursor-cli.js.map +1 -1
  14. package/dist/adapters/index.d.ts +1 -0
  15. package/dist/adapters/index.d.ts.map +1 -1
  16. package/dist/adapters/index.js +7 -0
  17. package/dist/adapters/index.js.map +1 -1
  18. package/dist/adapters/static-schema-lint.d.ts +68 -0
  19. package/dist/adapters/static-schema-lint.d.ts.map +1 -0
  20. package/dist/adapters/static-schema-lint.js +813 -0
  21. package/dist/adapters/static-schema-lint.js.map +1 -0
  22. package/dist/branch-protection/spec-default.yaml +2 -2
  23. package/dist/cli.d.ts +17 -1
  24. package/dist/cli.d.ts.map +1 -1
  25. package/dist/cli.js +414 -113
  26. package/dist/cli.js.map +1 -1
  27. package/dist/commands/findings.d.ts +6 -0
  28. package/dist/commands/findings.d.ts.map +1 -0
  29. package/dist/commands/findings.js +196 -0
  30. package/dist/commands/findings.js.map +1 -0
  31. package/dist/commands/show.d.ts +11 -0
  32. package/dist/commands/show.d.ts.map +1 -0
  33. package/dist/commands/show.js +78 -0
  34. package/dist/commands/show.js.map +1 -0
  35. package/dist/commands/skills.d.ts +6 -0
  36. package/dist/commands/skills.d.ts.map +1 -0
  37. package/dist/commands/skills.js +248 -0
  38. package/dist/commands/skills.js.map +1 -0
  39. package/dist/commands/status.d.ts +6 -0
  40. package/dist/commands/status.d.ts.map +1 -0
  41. package/dist/commands/status.js +85 -0
  42. package/dist/commands/status.js.map +1 -0
  43. package/dist/compact/index.d.ts +2 -0
  44. package/dist/compact/index.d.ts.map +1 -0
  45. package/dist/compact/index.js +3 -0
  46. package/dist/compact/index.js.map +1 -0
  47. package/dist/compact/lockfile.d.ts +53 -0
  48. package/dist/compact/lockfile.d.ts.map +1 -0
  49. package/dist/compact/lockfile.js +626 -0
  50. package/dist/compact/lockfile.js.map +1 -0
  51. package/dist/cycle-doc-validator/validate_cycle_doc.py +39 -9
  52. package/dist/doctor.d.ts +51 -1
  53. package/dist/doctor.d.ts.map +1 -1
  54. package/dist/doctor.js +497 -1
  55. package/dist/doctor.js.map +1 -1
  56. package/dist/evidence/docker-build.d.ts +6 -0
  57. package/dist/evidence/docker-build.d.ts.map +1 -0
  58. package/dist/evidence/docker-build.js +199 -0
  59. package/dist/evidence/docker-build.js.map +1 -0
  60. package/dist/evidence/index.d.ts +1 -0
  61. package/dist/evidence/index.d.ts.map +1 -1
  62. package/dist/evidence/index.js +6 -0
  63. package/dist/evidence/index.js.map +1 -1
  64. package/dist/handoff/handoff-verb.d.ts.map +1 -1
  65. package/dist/handoff/handoff-verb.js +6 -3
  66. package/dist/handoff/handoff-verb.js.map +1 -1
  67. package/dist/handoff/ports.d.ts +8 -0
  68. package/dist/handoff/ports.d.ts.map +1 -1
  69. package/dist/handoff/real-clients.js +1 -1
  70. package/dist/handoff/real-clients.js.map +1 -1
  71. package/dist/index.d.ts +2 -0
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +8 -0
  74. package/dist/index.js.map +1 -1
  75. package/dist/lib/show-status-core.d.ts +63 -0
  76. package/dist/lib/show-status-core.d.ts.map +1 -0
  77. package/dist/lib/show-status-core.js +156 -0
  78. package/dist/lib/show-status-core.js.map +1 -0
  79. package/dist/mcp/prompts.d.ts.map +1 -1
  80. package/dist/mcp/prompts.js +113 -78
  81. package/dist/mcp/prompts.js.map +1 -1
  82. package/dist/mcp/resources.js +1 -1
  83. package/dist/mcp/resources.js.map +1 -1
  84. package/dist/mcp/server.d.ts.map +1 -1
  85. package/dist/mcp/server.js +2 -0
  86. package/dist/mcp/server.js.map +1 -1
  87. package/dist/mcp/tools/doctor.d.ts.map +1 -1
  88. package/dist/mcp/tools/doctor.js +5 -0
  89. package/dist/mcp/tools/doctor.js.map +1 -1
  90. package/dist/mcp/tools/findings.d.ts +0 -22
  91. package/dist/mcp/tools/findings.d.ts.map +1 -1
  92. package/dist/mcp/tools/findings.js +5 -73
  93. package/dist/mcp/tools/findings.js.map +1 -1
  94. package/dist/mcp/tools/handoff.d.ts.map +1 -1
  95. package/dist/mcp/tools/handoff.js +10 -17
  96. package/dist/mcp/tools/handoff.js.map +1 -1
  97. package/dist/mcp/tools/review-bypass.d.ts.map +1 -1
  98. package/dist/mcp/tools/review-bypass.js +22 -1
  99. package/dist/mcp/tools/review-bypass.js.map +1 -1
  100. package/dist/mcp/tools/skills-install.d.ts +6 -0
  101. package/dist/mcp/tools/skills-install.d.ts.map +1 -0
  102. package/dist/mcp/tools/skills-install.js +260 -0
  103. package/dist/mcp/tools/skills-install.js.map +1 -0
  104. package/dist/mcp/tools/stats-gate.d.ts.map +1 -1
  105. package/dist/mcp/tools/stats-gate.js +63 -15
  106. package/dist/mcp/tools/stats-gate.js.map +1 -1
  107. package/dist/policy/baseline.d.ts.map +1 -1
  108. package/dist/policy/baseline.js +11 -3
  109. package/dist/policy/baseline.js.map +1 -1
  110. package/dist/policy/gate.d.ts +1 -1
  111. package/dist/policy/gate.d.ts.map +1 -1
  112. package/dist/policy/gate.js +96 -12
  113. package/dist/policy/gate.js.map +1 -1
  114. package/dist/prompt.d.ts +1 -0
  115. package/dist/prompt.d.ts.map +1 -1
  116. package/dist/prompt.js +123 -4
  117. package/dist/prompt.js.map +1 -1
  118. package/dist/report.d.ts +130 -3
  119. package/dist/report.d.ts.map +1 -1
  120. package/dist/report.js +367 -10
  121. package/dist/report.js.map +1 -1
  122. package/dist/runner.d.ts +6 -0
  123. package/dist/runner.d.ts.map +1 -1
  124. package/dist/runner.js +213 -4
  125. package/dist/runner.js.map +1 -1
  126. package/dist/self-consistency.d.ts +144 -0
  127. package/dist/self-consistency.d.ts.map +1 -0
  128. package/dist/self-consistency.js +368 -0
  129. package/dist/self-consistency.js.map +1 -0
  130. package/dist/skills/config.d.ts +176 -0
  131. package/dist/skills/config.d.ts.map +1 -0
  132. package/dist/skills/config.js +251 -0
  133. package/dist/skills/config.js.map +1 -0
  134. package/dist/skills/index.d.ts +4 -0
  135. package/dist/skills/index.d.ts.map +1 -0
  136. package/dist/skills/index.js +8 -0
  137. package/dist/skills/index.js.map +1 -0
  138. package/dist/skills/install.d.ts +62 -0
  139. package/dist/skills/install.d.ts.map +1 -0
  140. package/dist/skills/install.js +315 -0
  141. package/dist/skills/install.js.map +1 -0
  142. package/dist/skills/template.d.ts +42 -0
  143. package/dist/skills/template.d.ts.map +1 -0
  144. package/dist/skills/template.js +95 -0
  145. package/dist/skills/template.js.map +1 -0
  146. package/dist/trusted-surface/rebind.d.ts.map +1 -1
  147. package/dist/trusted-surface/rebind.js +199 -2
  148. package/dist/trusted-surface/rebind.js.map +1 -1
  149. package/package.json +36 -2
  150. package/skills/README.md +89 -0
  151. package/skills/chief-engineer-blitz/SKILL.md.tmpl +443 -0
  152. package/skills/chief-engineer-blitz/skill.json +53 -0
  153. package/skills/chief-engineer-review/SKILL.md.tmpl +184 -0
  154. package/skills/chief-engineer-review/references/review-examples.md.tmpl +130 -0
  155. package/skills/chief-engineer-review/skill.json +67 -0
  156. package/skills/chief-engineer-review/templates/code-review-prompt.md.tmpl +111 -0
  157. package/skills/chief-engineer-review/templates/escalation-prompt.md.tmpl +56 -0
  158. package/skills/chief-engineer-review/templates/plan-review-prompt.md.tmpl +74 -0
  159. package/skills/skill-schema.json +73 -0
@@ -0,0 +1,626 @@
1
+ // ADR 0001 — bounded lockfile strategy (issue #67).
2
+ //
3
+ // Per-lockfile-format extractors + renderer. The compactor walks a
4
+ // unified-diff section (per the cycle's "diff --git ..." → next
5
+ // "diff --git ..." boundary), identifies the lockfile kind by
6
+ // filename, parses the +/- lines into a CompactedLockfileDelta, and
7
+ // renders a stable text stub the prompt builder splices in.
8
+ //
9
+ // See `docs/ADR/0001-bounded-lockfile-strategy.md` for the full
10
+ // design + format spec. This module implements §§ 2.2.1, 2.3, 2.4.1,
11
+ // 3.6, 3.7 of that ADR.
12
+ import { createHash } from "node:crypto";
13
+ import { matchAnyGlob, matchGlob } from "../glob.js";
14
+ // ADR § 2.4.1 — byte caps on the prompt-rendered surfaces. The 250KB
15
+ // cap on compactedDiff is the LOAD-BEARING fix for codex round-2
16
+ // performance blocker: even after compaction, a mono-repo with
17
+ // hundreds of compacted lockfiles must not overflow the model
18
+ // context window. 250KB ≈ 60K tokens, leaving headroom below the
19
+ // smallest critic context window.
20
+ //
21
+ // The 50KB cap on compactedContent applies per-file: a single
22
+ // lockfile with thousands of packages can still produce a large
23
+ // `packages-after:` stub. Truncation preserves content-sha256 over
24
+ // the FULL pre-truncation body so audit recovery remains possible.
25
+ export const MAX_COMPACTED_DIFF_BYTES = 250_000;
26
+ export const MAX_COMPACTED_CONTENT_BYTES = 50_000;
27
+ // ADR § 2.2 — shipped default glob list, substituted at packet-build
28
+ // time when generatedFilePolicy.globs is omitted. § 3.7 documents
29
+ // why we do NOT merge with explicit globs: the default list will
30
+ // grow over CLI versions, and silently expanding an operator's
31
+ // match set is a surprise vector.
32
+ export const DEFAULT_GENERATED_LOCKFILE_GLOBS = [
33
+ "**/package-lock.json",
34
+ "**/npm-shrinkwrap.json",
35
+ "**/pnpm-lock.yaml",
36
+ "**/yarn.lock",
37
+ ];
38
+ // ---------------------------------------------------------------------------
39
+ // Identification
40
+ // ---------------------------------------------------------------------------
41
+ export function identifyLockfileKind(path) {
42
+ const base = path.split("/").pop() ?? path;
43
+ if (base === "package-lock.json" || base === "npm-shrinkwrap.json")
44
+ return "npm";
45
+ if (base === "pnpm-lock.yaml")
46
+ return "pnpm";
47
+ if (base === "yarn.lock")
48
+ return "yarn";
49
+ return undefined;
50
+ }
51
+ // ADR § 2.2.1 — effective-mode resolver. Override precedence is
52
+ // strictly per-path; the packet builder triggers compaction whenever
53
+ // ANY path has effectiveMode !== "full", not when policy.mode !== "full".
54
+ export function effectiveMode(path, policy) {
55
+ for (const override of policy.overrides ?? []) {
56
+ if (matchGlob(path, override.glob))
57
+ return override.mode;
58
+ }
59
+ const effectiveGlobs = policy.globs ?? DEFAULT_GENERATED_LOCKFILE_GLOBS;
60
+ if (matchAnyGlob(path, effectiveGlobs))
61
+ return policy.mode;
62
+ return "full";
63
+ }
64
+ // ---------------------------------------------------------------------------
65
+ // Extraction
66
+ // ---------------------------------------------------------------------------
67
+ export function extractFromUnifiedDiff(perFileDiff, path) {
68
+ const lockfileKind = identifyLockfileKind(path);
69
+ if (lockfileKind === undefined) {
70
+ return {
71
+ path,
72
+ lockfileKind: "npm",
73
+ addedLines: 0,
74
+ removedLines: 0,
75
+ patchSha256: sha256(perFileDiff),
76
+ packages: [],
77
+ parseError: `unknown-lockfile-kind: ${path}`,
78
+ };
79
+ }
80
+ const { added, removed } = countAddedRemoved(perFileDiff);
81
+ const patchSha256 = sha256(perFileDiff);
82
+ try {
83
+ let packages;
84
+ switch (lockfileKind) {
85
+ case "npm":
86
+ packages = extractNpm(perFileDiff);
87
+ break;
88
+ case "pnpm":
89
+ packages = extractPnpm(perFileDiff);
90
+ break;
91
+ case "yarn":
92
+ packages = extractYarn(perFileDiff);
93
+ break;
94
+ }
95
+ return {
96
+ path,
97
+ lockfileKind,
98
+ addedLines: added,
99
+ removedLines: removed,
100
+ patchSha256,
101
+ packages,
102
+ ...(packages.length === 0 ? { notes: ["lockfile-metadata-only"] } : {}),
103
+ };
104
+ }
105
+ catch (err) {
106
+ const message = err instanceof Error ? err.message : String(err);
107
+ return {
108
+ path,
109
+ lockfileKind,
110
+ addedLines: added,
111
+ removedLines: removed,
112
+ patchSha256,
113
+ packages: [],
114
+ parseError: message,
115
+ };
116
+ }
117
+ }
118
+ // npm — walk hunks; track last-seen `"node_modules/<name>":` marker.
119
+ // Each `+/-"version"` or `+/-"integrity"` line attributes to the
120
+ // last-seen marker. Pure-add and pure-remove blocks are detected by
121
+ // the marker line itself appearing on a `+` or `-` line.
122
+ function extractNpm(diff) {
123
+ const byName = new Map();
124
+ let lastName = null;
125
+ // Match "node_modules/<name>" entries; ignore workspace ("") and
126
+ // bare "packages/<name>" entries.
127
+ const markerRe = /^([+\- ])\s*"node_modules\/(@?[^"]+)":\s*\{/;
128
+ const versionRe = /^([+\- ])\s*"version":\s*"([^"]+)"/;
129
+ const integrityRe = /^([+\- ])\s*"integrity":\s*"([^"]+)"/;
130
+ let saw = false;
131
+ for (const line of diff.split("\n")) {
132
+ const m = markerRe.exec(line);
133
+ if (m) {
134
+ saw = true;
135
+ lastName = m[2] ?? null;
136
+ // Skip nested packages like "node_modules/foo/node_modules/bar"
137
+ // for v1; record the inner name only.
138
+ if (lastName?.includes("/node_modules/")) {
139
+ const parts = lastName.split("/node_modules/");
140
+ lastName = parts[parts.length - 1] ?? lastName;
141
+ }
142
+ if (!lastName)
143
+ continue;
144
+ let acc = byName.get(lastName);
145
+ if (!acc) {
146
+ acc = { sawAddMarker: false, sawRemoveMarker: false };
147
+ byName.set(lastName, acc);
148
+ }
149
+ if (m[1] === "+")
150
+ acc.sawAddMarker = true;
151
+ else if (m[1] === "-")
152
+ acc.sawRemoveMarker = true;
153
+ continue;
154
+ }
155
+ if (!lastName)
156
+ continue;
157
+ const acc = byName.get(lastName);
158
+ if (!acc)
159
+ continue;
160
+ const vm = versionRe.exec(line);
161
+ if (vm) {
162
+ saw = true;
163
+ if (vm[1] === "+")
164
+ acc.addVersion = vm[2] ?? "";
165
+ else if (vm[1] === "-")
166
+ acc.removeVersion = vm[2] ?? "";
167
+ continue;
168
+ }
169
+ const im = integrityRe.exec(line);
170
+ if (im) {
171
+ if (im[1] === "+")
172
+ acc.addIntegrity = im[2] ?? "";
173
+ else if (im[1] === "-")
174
+ acc.removeIntegrity = im[2] ?? "";
175
+ continue;
176
+ }
177
+ }
178
+ if (!saw) {
179
+ throw new Error("npm: no node_modules entries found in diff");
180
+ }
181
+ const out = [];
182
+ for (const [name, acc] of byName) {
183
+ // Pure add: sawAddMarker AND not sawRemoveMarker
184
+ // Pure remove: sawRemoveMarker AND not sawAddMarker
185
+ // Upgrade: any version change or integrity change without
186
+ // marker-only flip
187
+ if (acc.sawAddMarker && !acc.sawRemoveMarker) {
188
+ out.push({
189
+ kind: "add",
190
+ name,
191
+ ...(acc.addVersion !== undefined ? { version: acc.addVersion } : {}),
192
+ ...(acc.addIntegrity !== undefined ? { integrity: acc.addIntegrity } : {}),
193
+ });
194
+ }
195
+ else if (acc.sawRemoveMarker && !acc.sawAddMarker) {
196
+ out.push({
197
+ kind: "remove",
198
+ name,
199
+ ...(acc.removeVersion !== undefined ? { oldVersion: acc.removeVersion } : {}),
200
+ });
201
+ }
202
+ else if (acc.addVersion !== undefined || acc.removeVersion !== undefined) {
203
+ out.push({
204
+ kind: "upgrade",
205
+ name,
206
+ ...(acc.removeVersion !== undefined ? { oldVersion: acc.removeVersion } : {}),
207
+ ...(acc.addVersion !== undefined ? { newVersion: acc.addVersion } : {}),
208
+ ...(acc.removeIntegrity !== undefined
209
+ ? { oldIntegrity: acc.removeIntegrity }
210
+ : {}),
211
+ ...(acc.addIntegrity !== undefined ? { integrity: acc.addIntegrity } : {}),
212
+ });
213
+ }
214
+ // Else: marker-only inside a context block — ignore.
215
+ }
216
+ return out;
217
+ }
218
+ // pnpm — walk hunks; match `+/- /<name>@<version>:` spec lines.
219
+ // Group by name; if both + and - versions exist, it's an upgrade.
220
+ // Track integrity from the immediate-following indented line.
221
+ function extractPnpm(diff) {
222
+ const adds = [];
223
+ const removes = [];
224
+ const lines = diff.split("\n");
225
+ const specRe = /^([+\- ])\s*\/(@?[^@/]+(?:\/[^@/]+)?)@([^:()]+)(?:\([^)]+\))?:/;
226
+ const integrityRe = /^([+\- ])\s*integrity:\s*(\S+)/;
227
+ let pending = null;
228
+ let pendingSign = null;
229
+ let saw = false;
230
+ function flush() {
231
+ if (!pending || !pendingSign)
232
+ return;
233
+ (pendingSign === "+" ? adds : removes).push(pending);
234
+ pending = null;
235
+ pendingSign = null;
236
+ }
237
+ for (const line of lines) {
238
+ const m = specRe.exec(line);
239
+ if (m && (m[1] === "+" || m[1] === "-")) {
240
+ saw = true;
241
+ flush();
242
+ pending = { name: m[2] ?? "", version: m[3] ?? "" };
243
+ pendingSign = m[1];
244
+ continue;
245
+ }
246
+ if (pending && pendingSign) {
247
+ const im = integrityRe.exec(line);
248
+ if (im && (im[1] === pendingSign)) {
249
+ pending.integrity = im[2] ?? "";
250
+ continue;
251
+ }
252
+ // Any non-matching line ends the pending block.
253
+ // (We don't flush eagerly — wait for next spec or EOF.)
254
+ }
255
+ }
256
+ flush();
257
+ if (!saw) {
258
+ throw new Error("pnpm: no /<name>@<version>: entries found in diff");
259
+ }
260
+ const byName = new Map();
261
+ for (const a of adds) {
262
+ const e = byName.get(a.name) ?? {};
263
+ e.add = a;
264
+ byName.set(a.name, e);
265
+ }
266
+ for (const r of removes) {
267
+ const e = byName.get(r.name) ?? {};
268
+ e.remove = r;
269
+ byName.set(r.name, e);
270
+ }
271
+ const out = [];
272
+ for (const [name, e] of byName) {
273
+ if (e.add && e.remove) {
274
+ out.push({
275
+ kind: "upgrade",
276
+ name,
277
+ oldVersion: e.remove.version,
278
+ newVersion: e.add.version,
279
+ ...(e.remove.integrity !== undefined ? { oldIntegrity: e.remove.integrity } : {}),
280
+ ...(e.add.integrity !== undefined ? { integrity: e.add.integrity } : {}),
281
+ });
282
+ }
283
+ else if (e.add) {
284
+ out.push({
285
+ kind: "add",
286
+ name,
287
+ version: e.add.version,
288
+ ...(e.add.integrity !== undefined ? { integrity: e.add.integrity } : {}),
289
+ });
290
+ }
291
+ else if (e.remove) {
292
+ out.push({
293
+ kind: "remove",
294
+ name,
295
+ oldVersion: e.remove.version,
296
+ });
297
+ }
298
+ }
299
+ return out;
300
+ }
301
+ // yarn — walk hunks; match `+/-<name>@<spec>:` top-level entries.
302
+ // Each entry's body has `version "X"` and `integrity sha512-...`
303
+ // lines (also +/-).
304
+ function extractYarn(diff) {
305
+ const adds = new Map();
306
+ const removes = new Map();
307
+ const lines = diff.split("\n");
308
+ // yarn spec line: ^<sign><name>@<range>: (no leading whitespace
309
+ // for the spec line; nested entries are indented two spaces).
310
+ const specRe = /^([+\-])(@?[^@\s]+)@[^:]+:/;
311
+ const versionRe = /^([+\- ])\s+version\s+"([^"]+)"/;
312
+ const integrityRe = /^([+\- ])\s+integrity\s+(\S+)/;
313
+ let currentSign = null;
314
+ let currentName = null;
315
+ let saw = false;
316
+ // Context-line spec matcher: same as specRe but with a leading
317
+ // single space (` `) in place of `+`/`-`. Matching a context spec
318
+ // line ENDS the current +/- block so a context-line body doesn't
319
+ // leak into the previous +/- block's fields (the yarn case where
320
+ // `qux@^3.1.0:` follows `-baz@^0.5.1:` without separator).
321
+ const contextSpecRe = /^ (@?[^@\s]+)@[^:]+:/;
322
+ for (const line of lines) {
323
+ const m = specRe.exec(line);
324
+ if (m) {
325
+ saw = true;
326
+ currentSign = m[1];
327
+ currentName = m[2] ?? null;
328
+ if (currentName) {
329
+ const map = currentSign === "+" ? adds : removes;
330
+ if (!map.has(currentName))
331
+ map.set(currentName, { name: currentName });
332
+ }
333
+ continue;
334
+ }
335
+ // A context spec line clears the current +/- block context so
336
+ // its body's version/integrity (also context) don't overwrite
337
+ // the prior block's fields.
338
+ if (contextSpecRe.test(line)) {
339
+ currentSign = null;
340
+ currentName = null;
341
+ continue;
342
+ }
343
+ if (!currentName || !currentSign)
344
+ continue;
345
+ const map = currentSign === "+" ? adds : removes;
346
+ const entry = map.get(currentName);
347
+ if (!entry)
348
+ continue;
349
+ const vm = versionRe.exec(line);
350
+ if (vm) {
351
+ // Only accept body lines whose sign matches the current
352
+ // block's sign. Context (` `) lines belong to context-block
353
+ // sections, NOT to +/- blocks.
354
+ if (vm[1] === currentSign) {
355
+ entry.version = vm[2] ?? "";
356
+ }
357
+ continue;
358
+ }
359
+ const im = integrityRe.exec(line);
360
+ if (im) {
361
+ if (im[1] === currentSign) {
362
+ entry.integrity = im[2] ?? "";
363
+ }
364
+ continue;
365
+ }
366
+ }
367
+ if (!saw) {
368
+ throw new Error("yarn: no top-level <name>@<range>: entries found in diff");
369
+ }
370
+ const allNames = new Set([...adds.keys(), ...removes.keys()]);
371
+ const out = [];
372
+ for (const name of allNames) {
373
+ const a = adds.get(name);
374
+ const r = removes.get(name);
375
+ if (a && r) {
376
+ out.push({
377
+ kind: "upgrade",
378
+ name,
379
+ ...(r.version !== undefined ? { oldVersion: r.version } : {}),
380
+ ...(a.version !== undefined ? { newVersion: a.version } : {}),
381
+ ...(r.integrity !== undefined ? { oldIntegrity: r.integrity } : {}),
382
+ ...(a.integrity !== undefined ? { integrity: a.integrity } : {}),
383
+ });
384
+ }
385
+ else if (a) {
386
+ out.push({
387
+ kind: "add",
388
+ name,
389
+ ...(a.version !== undefined ? { version: a.version } : {}),
390
+ ...(a.integrity !== undefined ? { integrity: a.integrity } : {}),
391
+ });
392
+ }
393
+ else if (r) {
394
+ out.push({
395
+ kind: "remove",
396
+ name,
397
+ ...(r.version !== undefined ? { oldVersion: r.version } : {}),
398
+ });
399
+ }
400
+ }
401
+ return out;
402
+ }
403
+ // ---------------------------------------------------------------------------
404
+ // Rendering
405
+ // ---------------------------------------------------------------------------
406
+ export function renderDiffStub(delta) {
407
+ if (delta.parseError !== undefined) {
408
+ return [
409
+ `diff --git a/${delta.path} b/${delta.path}`,
410
+ `[DF-COMPACT v1 PARSE-ERROR]`,
411
+ `files:`,
412
+ ` - +${delta.addedLines} -${delta.removedLines} patch-sha256: ${delta.patchSha256}`,
413
+ `error: ${delta.parseError}`,
414
+ `[DF-COMPACT end]`,
415
+ ``,
416
+ ].join("\n");
417
+ }
418
+ const sortedPackages = sortPackages(delta.packages);
419
+ const pkgLines = sortedPackages.map(renderPackageLine);
420
+ const lines = [
421
+ `diff --git a/${delta.path} b/${delta.path}`,
422
+ `[DF-COMPACT v1 ${delta.lockfileKind}]`,
423
+ `files:`,
424
+ ` - +${delta.addedLines} -${delta.removedLines} patch-sha256: ${delta.patchSha256}`,
425
+ ];
426
+ if (sortedPackages.length === 0) {
427
+ lines.push(`notes: ${(delta.notes ?? []).join(",") || "lockfile-metadata-only"}`);
428
+ }
429
+ else {
430
+ lines.push(`packages:`);
431
+ lines.push(...pkgLines);
432
+ }
433
+ lines.push(`[DF-COMPACT end]`);
434
+ lines.push(``);
435
+ return lines.join("\n");
436
+ }
437
+ function sortPackages(pkgs) {
438
+ return [...pkgs].sort((a, b) => {
439
+ if (a.name !== b.name)
440
+ return a.name < b.name ? -1 : 1;
441
+ const order = { add: 0, remove: 1, upgrade: 2 };
442
+ return (order[a.kind] ?? 99) - (order[b.kind] ?? 99);
443
+ });
444
+ }
445
+ function renderPackageLine(p) {
446
+ if (p.kind === "add") {
447
+ const v = p.version ?? "unknown";
448
+ const i = p.integrity ?? "unknown";
449
+ return ` + ${p.name}@${v} integrity=${i}`;
450
+ }
451
+ if (p.kind === "remove") {
452
+ const v = p.oldVersion ?? "unknown";
453
+ return ` - ${p.name}@${v}`;
454
+ }
455
+ // upgrade
456
+ const ov = p.oldVersion ?? "unknown";
457
+ const nv = p.newVersion ?? "unknown";
458
+ const oi = p.oldIntegrity ?? "unknown";
459
+ const ni = p.integrity ?? "unknown";
460
+ return ` ~ ${p.name} ${ov} → ${nv} (integrity: ${oi} → ${ni})`;
461
+ }
462
+ // renderContentStub: produces a packages-after stub for the
463
+ // `<file>` block. Cap at MAX_COMPACTED_CONTENT_BYTES with truncation
464
+ // marker. content-sha256 always hashes the full pre-truncation body
465
+ // so audit recovery is possible.
466
+ export function renderContentStub(input) {
467
+ const header = [
468
+ `[DF-COMPACT v1 ${input.lockfileKind} full-content omitted]`,
469
+ `files:`,
470
+ ` - bytes: ${input.bytesBefore}`,
471
+ ` - content-sha256: ${input.contentSha256}`,
472
+ `packages-after:`,
473
+ ];
474
+ const headerJoined = header.join("\n") + "\n";
475
+ // Sort packages by name for determinism.
476
+ const sorted = [...input.packagesAfter].sort((a, b) => (a.name < b.name ? -1 : 1));
477
+ const out = [...header];
478
+ let runningBytes = Buffer.byteLength(headerJoined, "utf8");
479
+ let elided = 0;
480
+ for (const p of sorted) {
481
+ const line = ` - ${p.name}@${p.version} integrity=${p.integrity ?? "unknown"}`;
482
+ const lineBytes = Buffer.byteLength(line + "\n", "utf8");
483
+ // Budget for the truncation marker + final newline.
484
+ const reserve = 80;
485
+ if (runningBytes + lineBytes + reserve > MAX_COMPACTED_CONTENT_BYTES) {
486
+ elided++;
487
+ continue;
488
+ }
489
+ if (elided > 0) {
490
+ // We're past the budget — keep counting.
491
+ elided++;
492
+ continue;
493
+ }
494
+ out.push(line);
495
+ runningBytes += lineBytes;
496
+ }
497
+ if (elided > 0) {
498
+ out.push(`[DF-COMPACT TRUNCATED — ${elided} more packages elided]`);
499
+ }
500
+ return out.join("\n");
501
+ }
502
+ // ---------------------------------------------------------------------------
503
+ // Diff-walker — splits a fullDiff into per-file sections and routes
504
+ // matched paths through the extractor/renderer. § 2.1.1 (pipeline
505
+ // order): operates on the UNTRUNCATED fullDiff so source-file hunks
506
+ // that previously overflowed now fit after lockfile sections collapse.
507
+ // ---------------------------------------------------------------------------
508
+ export function compactDiff(fullDiff, policy) {
509
+ const sections = splitDiffByFile(fullDiff);
510
+ const outSections = [];
511
+ const matchedFiles = new Map();
512
+ const parseErrorPaths = [];
513
+ let elidedLockfileSections = 0;
514
+ let runningBytes = 0;
515
+ let capHit = false;
516
+ for (const section of sections) {
517
+ const path = section.path;
518
+ if (path === null) {
519
+ // Header-only section (no path discovered, e.g. binary diff).
520
+ pushSection(outSections, section.text, runningBytes);
521
+ runningBytes += Buffer.byteLength(section.text, "utf8");
522
+ continue;
523
+ }
524
+ const mode = effectiveMode(path, policy);
525
+ if (mode === "full") {
526
+ const sectionBytes = Buffer.byteLength(section.text, "utf8");
527
+ if (runningBytes + sectionBytes > MAX_COMPACTED_DIFF_BYTES) {
528
+ capHit = true;
529
+ break;
530
+ }
531
+ outSections.push(section.text);
532
+ runningBytes += sectionBytes;
533
+ continue;
534
+ }
535
+ if (mode === "omit") {
536
+ const stub = `diff --git a/${path} b/${path}\n` +
537
+ `[DF-COMPACT v1 omit-by-policy ${path}]\n\n`;
538
+ const stubBytes = Buffer.byteLength(stub, "utf8");
539
+ if (runningBytes + stubBytes > MAX_COMPACTED_DIFF_BYTES) {
540
+ capHit = true;
541
+ elidedLockfileSections++;
542
+ break;
543
+ }
544
+ outSections.push(stub);
545
+ runningBytes += stubBytes;
546
+ const kind = identifyLockfileKind(path);
547
+ if (kind !== undefined)
548
+ matchedFiles.set(path, kind);
549
+ continue;
550
+ }
551
+ // mode === "compact"
552
+ const extracted = extractFromUnifiedDiff(section.text, path);
553
+ if (extracted.parseError !== undefined)
554
+ parseErrorPaths.push(path);
555
+ const stub = renderDiffStub(extracted);
556
+ const stubBytes = Buffer.byteLength(stub, "utf8");
557
+ if (runningBytes + stubBytes > MAX_COMPACTED_DIFF_BYTES) {
558
+ capHit = true;
559
+ elidedLockfileSections++;
560
+ break;
561
+ }
562
+ outSections.push(stub);
563
+ runningBytes += stubBytes;
564
+ matchedFiles.set(path, extracted.lockfileKind);
565
+ }
566
+ if (capHit) {
567
+ outSections.push(`[DF-COMPACT TRUNCATED — ${elidedLockfileSections} more lockfile sections elided (cap=${MAX_COMPACTED_DIFF_BYTES})]\n`);
568
+ }
569
+ return {
570
+ compactedDiff: outSections.join(""),
571
+ matchedFiles,
572
+ parseErrorPaths,
573
+ };
574
+ }
575
+ function pushSection(outSections, text, runningBytes) {
576
+ // Helper kept for clarity; cap-check happens at caller.
577
+ outSections.push(text);
578
+ }
579
+ // Split a unified diff into per-file sections, preserving each
580
+ // section's trailing newline. A section starts at "diff --git " and
581
+ // ends at the next "diff --git " (or EOF).
582
+ export function splitDiffByFile(diff) {
583
+ const out = [];
584
+ const headerRe = /^diff --git a\/(.+?) b\/(.+?)$/;
585
+ const lines = diff.split("\n");
586
+ let current = [];
587
+ let currentPath = null;
588
+ function flush() {
589
+ if (current.length === 0)
590
+ return;
591
+ const text = current.join("\n") + (current[current.length - 1] === "" ? "" : "\n");
592
+ out.push({ path: currentPath, text });
593
+ current = [];
594
+ currentPath = null;
595
+ }
596
+ for (const line of lines) {
597
+ if (line.startsWith("diff --git ")) {
598
+ flush();
599
+ const m = headerRe.exec(line);
600
+ currentPath = m?.[2] ?? null;
601
+ }
602
+ current.push(line);
603
+ }
604
+ flush();
605
+ return out;
606
+ }
607
+ // ---------------------------------------------------------------------------
608
+ // Utilities
609
+ // ---------------------------------------------------------------------------
610
+ function countAddedRemoved(diff) {
611
+ let added = 0;
612
+ let removed = 0;
613
+ for (const line of diff.split("\n")) {
614
+ if (line.startsWith("+++ ") || line.startsWith("--- "))
615
+ continue;
616
+ if (line.startsWith("+"))
617
+ added++;
618
+ else if (line.startsWith("-"))
619
+ removed++;
620
+ }
621
+ return { added, removed };
622
+ }
623
+ function sha256(input) {
624
+ return createHash("sha256").update(input).digest("hex");
625
+ }
626
+ //# sourceMappingURL=lockfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../src/compact/lockfile.ts"],"names":[],"mappings":"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"}