@momentiq/dark-factory-cli 2.1.0 → 2.2.1

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 (110) hide show
  1. package/dist/adapters/static-schema-lint.js +1 -1
  2. package/dist/cli.js +3 -3
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/onboard.d.ts +64 -1
  5. package/dist/commands/onboard.d.ts.map +1 -1
  6. package/dist/commands/onboard.js +268 -53
  7. package/dist/commands/onboard.js.map +1 -1
  8. package/dist/doctor.d.ts.map +1 -1
  9. package/dist/doctor.js +20 -0
  10. package/dist/doctor.js.map +1 -1
  11. package/dist/mcp/server.d.ts.map +1 -1
  12. package/dist/mcp/server.js +2 -0
  13. package/dist/mcp/server.js.map +1 -1
  14. package/dist/mcp/tools/onboard.d.ts +6 -0
  15. package/dist/mcp/tools/onboard.d.ts.map +1 -0
  16. package/dist/mcp/tools/onboard.js +115 -0
  17. package/dist/mcp/tools/onboard.js.map +1 -0
  18. package/dist/onboard/analyzers/ci.d.ts.map +1 -1
  19. package/dist/onboard/analyzers/ci.js +32 -0
  20. package/dist/onboard/analyzers/ci.js.map +1 -1
  21. package/dist/onboard/analyzers/lockfile.d.ts.map +1 -1
  22. package/dist/onboard/analyzers/lockfile.js +154 -74
  23. package/dist/onboard/analyzers/lockfile.js.map +1 -1
  24. package/dist/onboard/apply-plan.d.ts +29 -0
  25. package/dist/onboard/apply-plan.d.ts.map +1 -0
  26. package/dist/onboard/apply-plan.js +80 -0
  27. package/dist/onboard/apply-plan.js.map +1 -0
  28. package/dist/onboard/auto-profile.d.ts +3 -0
  29. package/dist/onboard/auto-profile.d.ts.map +1 -0
  30. package/dist/onboard/auto-profile.js +20 -0
  31. package/dist/onboard/auto-profile.js.map +1 -0
  32. package/dist/onboard/generate-plan.d.ts +18 -0
  33. package/dist/onboard/generate-plan.d.ts.map +1 -0
  34. package/dist/onboard/generate-plan.js +72 -0
  35. package/dist/onboard/generate-plan.js.map +1 -0
  36. package/dist/onboard/llm-client.d.ts +45 -0
  37. package/dist/onboard/llm-client.d.ts.map +1 -0
  38. package/dist/onboard/llm-client.js +101 -0
  39. package/dist/onboard/llm-client.js.map +1 -0
  40. package/dist/onboard/prompts/scaffold.md +93 -0
  41. package/dist/onboard/prompts.d.ts +13 -0
  42. package/dist/onboard/prompts.d.ts.map +1 -0
  43. package/dist/onboard/prompts.js +54 -0
  44. package/dist/onboard/prompts.js.map +1 -0
  45. package/dist/onboard/scaffold-schema.d.ts +194 -0
  46. package/dist/onboard/scaffold-schema.d.ts.map +1 -0
  47. package/dist/onboard/scaffold-schema.js +73 -0
  48. package/dist/onboard/scaffold-schema.js.map +1 -0
  49. package/dist/onboard/schema.d.ts +10 -0
  50. package/dist/onboard/schema.d.ts.map +1 -1
  51. package/dist/onboard/schema.js +23 -1
  52. package/dist/onboard/schema.js.map +1 -1
  53. package/dist/onboard/seeders/adr.d.ts +3 -0
  54. package/dist/onboard/seeders/adr.d.ts.map +1 -0
  55. package/dist/onboard/seeders/adr.js +212 -0
  56. package/dist/onboard/seeders/adr.js.map +1 -0
  57. package/dist/onboard/seeders/agent-review-config/cloud.canonical.json +22 -0
  58. package/dist/onboard/seeders/agent-review-config/local.canonical.json +21 -0
  59. package/dist/onboard/seeders/agent-review-config.d.ts +3 -0
  60. package/dist/onboard/seeders/agent-review-config.d.ts.map +1 -0
  61. package/dist/onboard/seeders/agent-review-config.js +38 -0
  62. package/dist/onboard/seeders/agent-review-config.js.map +1 -0
  63. package/dist/onboard/seeders/cycle1-bootstrap.d.ts +3 -0
  64. package/dist/onboard/seeders/cycle1-bootstrap.d.ts.map +1 -0
  65. package/dist/onboard/seeders/cycle1-bootstrap.js +76 -0
  66. package/dist/onboard/seeders/cycle1-bootstrap.js.map +1 -0
  67. package/dist/onboard/seeders/index.d.ts +47 -0
  68. package/dist/onboard/seeders/index.d.ts.map +1 -0
  69. package/dist/onboard/seeders/index.js +37 -0
  70. package/dist/onboard/seeders/index.js.map +1 -0
  71. package/dist/onboard/seeders/runbook.d.ts +13 -0
  72. package/dist/onboard/seeders/runbook.d.ts.map +1 -0
  73. package/dist/onboard/seeders/runbook.js +144 -0
  74. package/dist/onboard/seeders/runbook.js.map +1 -0
  75. package/dist/onboard/seeders/templates/adr.md.tmpl +26 -0
  76. package/dist/onboard/seeders/templates/cycle1-bootstrap.md.tmpl +64 -0
  77. package/dist/onboard/seeders/templates/runbook.md.tmpl +26 -0
  78. package/dist/onboard/template-loader.d.ts +20 -0
  79. package/dist/onboard/template-loader.d.ts.map +1 -0
  80. package/dist/onboard/template-loader.js +152 -0
  81. package/dist/onboard/template-loader.js.map +1 -0
  82. package/dist/onboard/template-ref.d.ts +15 -0
  83. package/dist/onboard/template-ref.d.ts.map +1 -0
  84. package/dist/onboard/template-ref.js +45 -0
  85. package/dist/onboard/template-ref.js.map +1 -0
  86. package/dist/onboard/validate.d.ts +19 -0
  87. package/dist/onboard/validate.d.ts.map +1 -0
  88. package/dist/onboard/validate.js +127 -0
  89. package/dist/onboard/validate.js.map +1 -0
  90. package/dist/onboard/writers/dry-run-renderer.d.ts +6 -0
  91. package/dist/onboard/writers/dry-run-renderer.d.ts.map +1 -0
  92. package/dist/onboard/writers/dry-run-renderer.js +88 -0
  93. package/dist/onboard/writers/dry-run-renderer.js.map +1 -0
  94. package/dist/onboard/writers/emit.d.ts +6 -0
  95. package/dist/onboard/writers/emit.d.ts.map +1 -0
  96. package/dist/onboard/writers/emit.js +29 -0
  97. package/dist/onboard/writers/emit.js.map +1 -0
  98. package/dist/onboard/writers/merge.d.ts +16 -0
  99. package/dist/onboard/writers/merge.d.ts.map +1 -0
  100. package/dist/onboard/writers/merge.js +142 -0
  101. package/dist/onboard/writers/merge.js.map +1 -0
  102. package/dist/onboard/writers/pr-writer.d.ts +44 -0
  103. package/dist/onboard/writers/pr-writer.d.ts.map +1 -0
  104. package/dist/onboard/writers/pr-writer.js +104 -0
  105. package/dist/onboard/writers/pr-writer.js.map +1 -0
  106. package/dist/onboard/writers/skip.d.ts +9 -0
  107. package/dist/onboard/writers/skip.d.ts.map +1 -0
  108. package/dist/onboard/writers/skip.js +9 -0
  109. package/dist/onboard/writers/skip.js.map +1 -0
  110. package/package.json +4 -1
@@ -0,0 +1,115 @@
1
+ // packages/cli/src/mcp/tools/onboard.ts
2
+ //
3
+ // Cycle 15 Phase C — `df_onboard {target, mode}` MCP tool.
4
+ //
5
+ // Delegates EVERYTHING beyond analysis-only to `cmdOnboard()` from
6
+ // `src/commands/onboard.ts` (Task 4.5) so the MCP path returns the SAME
7
+ // merged plan as the CLI path. The MCP tool MUST NOT re-assemble a plan
8
+ // from seeders alone — that would skip Phase B's LLM-emitted CLAUDE.md
9
+ // and break Task 5 metric 1 through the MCP path.
10
+ //
11
+ // Per-mode `destructiveHint` annotation is set on the response (NOT on
12
+ // the tool registration) because it varies per call:
13
+ // - analysis-only / dry-run → false (read-only / in-memory)
14
+ // - apply / pr → true (writes to working tree / opens PR)
15
+ //
16
+ // Tool-registration `openWorldHint: true` applies to ALL modes —
17
+ // analysis reads the filesystem; pr reaches GitHub via gh.
18
+ import { z } from "zod";
19
+ import { analyze } from "../../onboard/analyze.js";
20
+ import { cmdOnboard } from "../../commands/onboard.js";
21
+ function isDestructive(mode) {
22
+ return mode === "apply" || mode === "pr";
23
+ }
24
+ function renderMarkdownSummary(input) {
25
+ if ("analysis" in input.sc) {
26
+ const a = input.sc.analysis;
27
+ return [
28
+ `**df_onboard** (mode=analysis-only)`,
29
+ `- canonicalName: ${a.canonicalName || "(unknown)"}`,
30
+ `- stacks: ${a.stacks.map((s) => s.language).join(", ") || "(none)"}`,
31
+ `- services: ${a.services.length}`,
32
+ `- decisions: ${a.decisions.length}`,
33
+ `- analyzerErrors: ${a.analyzerErrors.length}`,
34
+ ].join("\n");
35
+ }
36
+ const p = input.sc;
37
+ return [
38
+ `**df_onboard** (mode=${input.mode}, dryRun=${p.dryRun}, applied=${p.applied})`,
39
+ `- files in plan: ${p.plan.files.length}`,
40
+ p.branchName ? `- branch: ${p.branchName}` : null,
41
+ ]
42
+ .filter((line) => Boolean(line))
43
+ .join("\n");
44
+ }
45
+ export function registerOnboardTool(server, _opts = {}) {
46
+ server.registerTool("df_onboard", {
47
+ title: "Dark Factory onboard",
48
+ description: "Run `df onboard` on a target repo. Modes: analysis-only (Phase A — emit RepoAnalysis only), " +
49
+ "dry-run (Phase B+C — emit merged ScaffoldPlan without writing), apply (Phase B+C — write files " +
50
+ "to working tree), pr (Phase B+C — branch + commit + open a PR via gh). 'apply' and 'pr' mutate " +
51
+ "the working tree; their per-call response carries `annotations.destructiveHint: true`.",
52
+ inputSchema: {
53
+ target: z
54
+ .string()
55
+ .describe("Absolute path to the target repo's working tree."),
56
+ mode: z
57
+ .enum(["analysis-only", "dry-run", "apply", "pr"])
58
+ .describe("Operation mode. 'analysis-only' is read-only; 'dry-run' computes a plan but writes nothing; " +
59
+ "'apply' writes files in place; 'pr' writes to a fresh branch and opens a PR."),
60
+ },
61
+ outputSchema: {
62
+ analysis: z
63
+ .unknown()
64
+ .optional()
65
+ .describe("Present when mode='analysis-only' — the RepoAnalysis JSON."),
66
+ plan: z
67
+ .unknown()
68
+ .optional()
69
+ .describe("Present when mode != 'analysis-only' — the merged ScaffoldPlan."),
70
+ dryRun: z.boolean().optional(),
71
+ applied: z.boolean().optional(),
72
+ branchName: z.string().nullable().optional(),
73
+ },
74
+ annotations: {
75
+ // openWorldHint applies to ALL modes — analysis reads the
76
+ // filesystem; pr reaches GitHub via gh. destructiveHint is NOT
77
+ // set at registration because it varies per-mode (set per-call
78
+ // on the response below).
79
+ openWorldHint: true,
80
+ },
81
+ }, async (args) => {
82
+ const target = args.target;
83
+ const mode = args.mode;
84
+ const destructiveHint = isDestructive(mode);
85
+ if (mode === "analysis-only") {
86
+ const analysis = await analyze(target);
87
+ const result = { analysis };
88
+ return {
89
+ structuredContent: result,
90
+ content: [{ type: "text", text: renderMarkdownSummary({ mode, sc: result }) }],
91
+ // Per-call destructive flag — analysis-only is read-only.
92
+ annotations: { destructiveHint },
93
+ };
94
+ }
95
+ // dry-run / apply / pr — delegate to cmdOnboard. `json: true` is
96
+ // structurally irrelevant in the orchestrator's contract today
97
+ // (the orchestrator always returns the structured plan; the CLI
98
+ // shim handles rendered diff output), but pass it explicitly so
99
+ // the intent ("MCP wants the structured plan, not a rendered
100
+ // ANSI diff") is documented at the call site.
101
+ const out = (await cmdOnboard({ target, mode }));
102
+ const result = {
103
+ plan: out.plan,
104
+ dryRun: mode === "dry-run",
105
+ applied: out.applied,
106
+ branchName: out.branchName,
107
+ };
108
+ return {
109
+ structuredContent: result,
110
+ content: [{ type: "text", text: renderMarkdownSummary({ mode, sc: result }) }],
111
+ annotations: { destructiveHint },
112
+ };
113
+ });
114
+ }
115
+ //# sourceMappingURL=onboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../../src/mcp/tools/onboard.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../../src/onboard/analyzers/ci.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAc/C,eAAO,MAAM,UAAU,EAAE,QA8CxB,CAAC"}
1
+ {"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../../src/onboard/analyzers/ci.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAc/C,eAAO,MAAM,UAAU,EAAE,QAoDxB,CAAC"}
@@ -49,6 +49,12 @@ export const ciAnalyzer = {
49
49
  triggers,
50
50
  jobs,
51
51
  matrixDimensions,
52
+ // First TRUE single-line `run:` command in this workflow's raw YAML.
53
+ // Multi-line `run: |` blocks return null (the validator's metric-4
54
+ // regex matches the single-line form, so embedding a multi-line
55
+ // block's inner line in a runbook would not be a candidate).
56
+ // Consumed by the runbook seeder's donor fallback (issue #138).
57
+ firstRunCommand: extractFirstSingleLineRunFromText(raw),
52
58
  });
53
59
  if (!deployStory) {
54
60
  deployStory = findDeployCommand(p, `.github/workflows/${name}`);
@@ -109,4 +115,30 @@ function findDeployCommand(parsed, workflowPath) {
109
115
  }
110
116
  return null;
111
117
  }
118
+ // Extracts the first TRUE single-line `run:` command from raw YAML text
119
+ // (`run: <cmd>`), not the first line of a multi-line `run: |` block. The
120
+ // raw-text path is intentional: this value is consumed by the runbook
121
+ // seeder, and the metric 4 validator's candidate-line extractor uses the
122
+ // same `^\s*-?\s*run:\s*(.+)$` shape — extracting via the YAML AST would
123
+ // silently lose the single-vs-multiline distinction (after parsing, both
124
+ // forms yield the same `run` string).
125
+ //
126
+ // Returns null when every `run:` is a block scalar (`run: |`, `run: >`,
127
+ // `run: |-`, etc.) or the workflow has no `run:` steps at all.
128
+ function extractFirstSingleLineRunFromText(rawYaml) {
129
+ for (const line of rawYaml.split(/\r?\n/)) {
130
+ const m = /^\s*-\s*run:\s+(\S.*)$/.exec(line) ?? /^\s*run:\s+(\S.*)$/.exec(line);
131
+ if (!m)
132
+ continue;
133
+ const cmd = m[1]?.trim();
134
+ if (!cmd)
135
+ continue;
136
+ if (cmd === "|" || cmd === "|-" || cmd === ">" || cmd === ">-")
137
+ continue;
138
+ if (cmd.length <= 10)
139
+ continue;
140
+ return cmd;
141
+ }
142
+ return null;
143
+ }
112
144
  //# sourceMappingURL=ci.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ci.js","sourceRoot":"","sources":["../../../src/onboard/analyzers/ci.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ci.js","sourceRoot":"","sources":["../../../src/onboard/analyzers/ci.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../../../src/onboard/analyzers/lockfile.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AA2P/C,eAAO,MAAM,gBAAgB,EAAE,QAyB9B,CAAC"}
1
+ {"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../../../src/onboard/analyzers/lockfile.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AA8T/C,eAAO,MAAM,gBAAgB,EAAE,QAkE9B,CAAC"}
@@ -1,20 +1,5 @@
1
- // Lockfile analyzer cycle 15 Phase A.
2
- //
3
- // Reads ONE lockfile per repo (precedence: package-lock.json > yarn.lock >
4
- // poetry.lock > go.sum) and populates two RepoAnalysis fields:
5
- //
6
- // 1. `dependencies[]` — top 20 DIRECT deps with PINNED versions
7
- // (schema cap = 20). The deterministic name+version table Phase B's
8
- // LLM cites verbatim in ADR seeds (cycle 15 D2 lines 132–134).
9
- //
10
- // 2. `decisions[]` — heuristic markers (test-framework / deploy-target /
11
- // stack / auth-model) derived from dep names. Schema cap = 10 globally.
12
- //
13
- // `package.json` alone (no lockfile) returns null: only a real lockfile has
14
- // PINNED versions — package.json deps are ranges. Stack DETECTION is the
15
- // manifest analyzer's job (Task 3); pinned versions are this analyzer's.
16
- import { readFile } from "node:fs/promises";
17
- import { join } from "node:path";
1
+ import { readFile, readdir } from "node:fs/promises";
2
+ import { join, relative, sep } from "node:path";
18
3
  import TOML from "@iarna/toml";
19
4
  // @yarnpkg/lockfile is CJS; ESM only sees the default export.
20
5
  // Pull `parse` off the default to keep ESM consumers + Node ESM-loader happy.
@@ -22,6 +7,31 @@ import yarnpkgLockfile from "@yarnpkg/lockfile";
22
7
  const { parse: parseYarnLock } = yarnpkgLockfile;
23
8
  const MAX_DEPS = 20;
24
9
  const MAX_DECISIONS = 10;
10
+ // Walk depth: 0 = root, 1 = direct child (e.g. `web/`), 2 = grandchild
11
+ // (e.g. `tools/df-flow-assessor/`), 3 = great-grandchild. Covers every
12
+ // sage3c lockfile (deepest is depth-2). Mirrors tree.ts's depth budget.
13
+ const MAX_LOCKFILE_DEPTH = 3;
14
+ // Skip the same set tree.ts skips — kept local on purpose so this analyzer's
15
+ // diff doesn't collide with any sibling refactor of tree.ts. Hidden entries
16
+ // (starting with `.`) are also skipped to keep .git/.github/.venv etc. out
17
+ // of the walk.
18
+ const SKIP_DIR_NAMES = new Set([
19
+ "node_modules",
20
+ "dist",
21
+ "build",
22
+ "target",
23
+ ".next",
24
+ ".venv",
25
+ "__pycache__",
26
+ ".gradle",
27
+ ]);
28
+ function shouldSkipDir(name) {
29
+ if (name.startsWith("."))
30
+ return true;
31
+ if (SKIP_DIR_NAMES.has(name))
32
+ return true;
33
+ return false;
34
+ }
25
35
  // Decision-surface heuristics. Each entry matches a single dep name (exact
26
36
  // match, post-lowercase) and emits ONE decision with evidence: [lockfilePath].
27
37
  // Title strings follow the spec's example phrasing — Phase B's LLM polishes
@@ -71,17 +81,62 @@ async function readIfExists(path) {
71
81
  throw e;
72
82
  }
73
83
  }
74
- async function chooseLockfile(rootDir) {
75
- for (const name of LOCKFILE_PRECEDENCE) {
76
- const contents = await readIfExists(join(rootDir, name));
77
- if (contents !== null)
78
- return { name, contents };
84
+ const LOCKFILE_SET = new Set(LOCKFILE_PRECEDENCE);
85
+ // Walk the repo (bounded by MAX_LOCKFILE_DEPTH + SKIP_DIR_NAMES) for every
86
+ // known lockfile filename. Results are sorted by relPath for deterministic
87
+ // output across readdir order.
88
+ async function discoverLockfiles(rootDir) {
89
+ const found = [];
90
+ async function walk(absDir, depth) {
91
+ if (depth > MAX_LOCKFILE_DEPTH)
92
+ return;
93
+ let entries;
94
+ try {
95
+ entries = await readdir(absDir, { withFileTypes: true });
96
+ }
97
+ catch {
98
+ // Permission denied / transient — treat as empty so one unreadable
99
+ // subtree can't bomb the whole analyzer.
100
+ return;
101
+ }
102
+ // Read files in this dir before descending so each level's lockfile
103
+ // joins `found` before its descendants'.
104
+ for (const entry of entries) {
105
+ if (!entry.isFile())
106
+ continue;
107
+ if (!LOCKFILE_SET.has(entry.name))
108
+ continue;
109
+ const absPath = join(absDir, entry.name);
110
+ const contents = await readIfExists(absPath);
111
+ if (contents === null)
112
+ continue;
113
+ const rel = relative(rootDir, absPath).split(sep).join("/");
114
+ found.push({
115
+ name: entry.name,
116
+ relPath: rel,
117
+ absDir,
118
+ contents,
119
+ });
120
+ }
121
+ for (const entry of entries) {
122
+ if (!entry.isDirectory())
123
+ continue;
124
+ if (shouldSkipDir(entry.name))
125
+ continue;
126
+ await walk(join(absDir, entry.name), depth + 1);
127
+ }
79
128
  }
80
- return null;
129
+ await walk(rootDir, 0);
130
+ found.sort((a, b) => (a.relPath < b.relPath ? -1 : a.relPath > b.relPath ? 1 : 0));
131
+ return found;
81
132
  }
82
133
  // package-lock.json — handles both lockfileVersion 1 (root-level dependencies
83
134
  // with the version values being the pins) and 2/3 (packages[""].dependencies
84
135
  // for direct-dep names; packages["node_modules/<name>"].version for the pin).
136
+ //
137
+ // Returns EVERY direct dep (no internal cap). The aggregate cap is enforced
138
+ // in `detect()` so the decision-marker scan can find matches anywhere in the
139
+ // lockfile, not just within the first 20 alphabetical entries.
85
140
  function parsePackageLock(contents, lockfilePath) {
86
141
  let parsed;
87
142
  try {
@@ -116,8 +171,6 @@ function parsePackageLock(contents, lockfilePath) {
116
171
  : requestedRange;
117
172
  out.push({ name, version: pinnedVersion, manifestPath: lockfilePath });
118
173
  seen.add(name);
119
- if (out.length >= MAX_DEPS)
120
- return out;
121
174
  }
122
175
  }
123
176
  // v1 fallback (and a belt+braces top-up if v2/v3 produced nothing): root
@@ -136,17 +189,16 @@ function parsePackageLock(contents, lockfilePath) {
136
189
  continue;
137
190
  out.push({ name, version, manifestPath: lockfilePath });
138
191
  seen.add(name);
139
- if (out.length >= MAX_DEPS)
140
- return out;
141
192
  }
142
193
  }
143
194
  return out;
144
195
  }
145
- // yarn.lock — cross-reference top-level package.json keys with parsed lockfile
146
- // entries; lockfile keys take the form "<name>@<range>", so we look up each
147
- // direct dep by its requested range.
148
- async function parseYarn(contents, lockfilePath, rootDir) {
149
- const pkgJsonRaw = await readIfExists(join(rootDir, "package.json"));
196
+ // yarn.lock — cross-reference the SIBLING package.json's deps (NOT the repo
197
+ // root's yarn workspaces put a lockfile next to a per-package manifest)
198
+ // with parsed lockfile entries; lockfile keys take the form "<name>@<range>",
199
+ // so we look up each direct dep by its requested range.
200
+ async function parseYarn(contents, lockfilePath, lockfileDir) {
201
+ const pkgJsonRaw = await readIfExists(join(lockfileDir, "package.json"));
150
202
  if (pkgJsonRaw === null)
151
203
  return [];
152
204
  let pkg;
@@ -167,19 +219,19 @@ async function parseYarn(contents, lockfilePath, rootDir) {
167
219
  if (parsed.type === "conflict")
168
220
  return [];
169
221
  const entries = parsed.object;
222
+ // Returns every direct dep (no internal cap — aggregate cap is in detect()).
170
223
  const out = [];
171
224
  for (const [name, range] of Object.entries(directDeps)) {
172
225
  const key = `${name}@${range}`;
173
226
  const entry = entries[key];
174
227
  const version = entry && typeof entry.version === "string" ? entry.version : range;
175
228
  out.push({ name, version, manifestPath: lockfilePath });
176
- if (out.length >= MAX_DEPS)
177
- return out;
178
229
  }
179
230
  return out;
180
231
  }
181
232
  // poetry.lock — iterate [[package]] blocks. Older formats use category="main";
182
- // newer formats omit category — accept either.
233
+ // newer formats omit category — accept either. Returns every package (no
234
+ // internal cap — aggregate cap is in detect()).
183
235
  function parsePoetry(contents, lockfilePath) {
184
236
  let parsed;
185
237
  try {
@@ -206,14 +258,13 @@ function parsePoetry(contents, lockfilePath) {
206
258
  if (typeof name !== "string" || typeof version !== "string")
207
259
  continue;
208
260
  out.push({ name, version, manifestPath: lockfilePath });
209
- if (out.length >= MAX_DEPS)
210
- return out;
211
261
  }
212
262
  return out;
213
263
  }
214
264
  // go.sum — `<module> <version>/go.mod <hash>` lines. The /go.mod-suffix is
215
265
  // the canonical pin (the bare `<module> <version>` lines hash the module zip;
216
- // many lines per dep exist — first-match-per-module wins).
266
+ // many lines per dep exist — first-match-per-module wins). Returns every
267
+ // module (no internal cap — aggregate cap is in detect()).
217
268
  function parseGoSum(contents, lockfilePath) {
218
269
  const out = [];
219
270
  const seen = new Set();
@@ -233,52 +284,81 @@ function parseGoSum(contents, lockfilePath) {
233
284
  continue;
234
285
  seen.add(name);
235
286
  out.push({ name, version, manifestPath: lockfilePath });
236
- if (out.length >= MAX_DEPS)
237
- return out;
238
287
  }
239
288
  return out;
240
289
  }
241
- function deriveDecisions(dependencies, lockfilePath) {
242
- const out = [];
243
- for (const dep of dependencies) {
244
- const lower = dep.name.toLowerCase();
245
- for (const marker of DECISION_MARKERS) {
246
- if (lower === marker.match) {
247
- out.push({
248
- title: marker.title,
249
- surface: marker.surface,
250
- evidence: [lockfilePath],
251
- });
252
- if (out.length >= MAX_DECISIONS)
253
- return out;
254
- break;
255
- }
256
- }
290
+ async function parseOne(lf) {
291
+ switch (lf.name) {
292
+ case "package-lock.json":
293
+ return parsePackageLock(lf.contents, lf.relPath);
294
+ case "yarn.lock":
295
+ return parseYarn(lf.contents, lf.relPath, lf.absDir);
296
+ case "poetry.lock":
297
+ return parsePoetry(lf.contents, lf.relPath);
298
+ case "go.sum":
299
+ return parseGoSum(lf.contents, lf.relPath);
257
300
  }
258
- return out;
259
301
  }
260
302
  export const lockfileAnalyzer = {
261
303
  name: "lockfile",
262
304
  async detect(rootDir) {
263
- const chosen = await chooseLockfile(rootDir);
264
- if (chosen === null)
305
+ const discovered = await discoverLockfiles(rootDir);
306
+ if (discovered.length === 0)
265
307
  return null;
266
- let dependencies;
267
- switch (chosen.name) {
268
- case "package-lock.json":
269
- dependencies = parsePackageLock(chosen.contents, chosen.name);
270
- break;
271
- case "yarn.lock":
272
- dependencies = await parseYarn(chosen.contents, chosen.name, rootDir);
273
- break;
274
- case "poetry.lock":
275
- dependencies = parsePoetry(chosen.contents, chosen.name);
276
- break;
277
- case "go.sum":
278
- dependencies = parseGoSum(chosen.contents, chosen.name);
279
- break;
308
+ // Aggregate dependencies + decisions across every lockfile, capped at the
309
+ // schema maxima. Dependencies dedupe on `name` (the FIRST lockfile in
310
+ // sort order wins — root before subdirs). Decisions dedupe on the
311
+ // `(title, surface)` tuple with evidence accumulated as the sorted union
312
+ // of source lockfiles.
313
+ const dependencies = [];
314
+ const seenDeps = new Set();
315
+ const decisionMap = new Map();
316
+ for (const lf of discovered) {
317
+ const deps = await parseOne(lf);
318
+ // Take this lockfile's contribution to the bounded dependency table.
319
+ // The cap is checked BEFORE the push so `dependencies.length` is
320
+ // strictly ≤ MAX_DEPS (the schema's hard contract — exceeding it
321
+ // throws inside `RepoAnalysisSchema.parse()`).
322
+ for (const dep of deps) {
323
+ if (dependencies.length >= MAX_DEPS)
324
+ break;
325
+ if (seenDeps.has(dep.name))
326
+ continue;
327
+ seenDeps.add(dep.name);
328
+ dependencies.push(dep);
329
+ }
330
+ // Decision-marker scan walks EVERY parsed dep for this lockfile,
331
+ // independent of whether the dep made it into the bounded table.
332
+ // Without this independence, a long alphabetical lockfile (e.g.
333
+ // sage3c's backend/poetry.lock) would fill the 20-slot dependency
334
+ // budget before reaching `fastapi`/`pytest`, suppressing the
335
+ // marker scan even though the names are right there in the file.
336
+ for (const dep of deps) {
337
+ const lower = dep.name.toLowerCase();
338
+ for (const marker of DECISION_MARKERS) {
339
+ if (lower !== marker.match)
340
+ continue;
341
+ const key = `${marker.surface}::${marker.title}`;
342
+ const existing = decisionMap.get(key);
343
+ if (existing) {
344
+ existing.evidence.add(lf.relPath);
345
+ }
346
+ else if (decisionMap.size < MAX_DECISIONS) {
347
+ decisionMap.set(key, {
348
+ title: marker.title,
349
+ surface: marker.surface,
350
+ evidence: new Set([lf.relPath]),
351
+ });
352
+ }
353
+ break;
354
+ }
355
+ }
280
356
  }
281
- const decisions = deriveDecisions(dependencies, chosen.name);
357
+ const decisions = Array.from(decisionMap.values()).map((d) => ({
358
+ title: d.title,
359
+ surface: d.surface,
360
+ evidence: Array.from(d.evidence).sort(),
361
+ }));
282
362
  return { dependencies, decisions };
283
363
  },
284
364
  };
@@ -1 +1 @@
1
- {"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../../src/onboard/analyzers/lockfile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../../src/onboard/analyzers/lockfile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { type MergeResult } from "./writers/merge.js";
2
+ import { type SkipResult } from "./writers/skip.js";
3
+ import type { ScaffoldPlan } from "./scaffold-schema.js";
4
+ export type ApplyMode = "dry-run" | "apply";
5
+ export interface EmitResult {
6
+ path: string;
7
+ action: "emit";
8
+ wrote: boolean;
9
+ }
10
+ export type ApplyFileResult = EmitResult | MergeResult | SkipResult;
11
+ export interface ApplyResult {
12
+ mode: ApplyMode;
13
+ results: ApplyFileResult[];
14
+ rendered?: string;
15
+ }
16
+ export interface ApplyOptions {
17
+ mode: ApplyMode;
18
+ force?: boolean;
19
+ color?: boolean;
20
+ stderr?: (s: string) => void;
21
+ }
22
+ export declare class ScaffoldApplyError extends Error {
23
+ written: string[];
24
+ notWritten: string[];
25
+ cause: unknown;
26
+ constructor(message: string, written: string[], notWritten: string[], cause: unknown);
27
+ }
28
+ export declare function applyPlan(rootDir: string, plan: ScaffoldPlan, opts: ApplyOptions): Promise<ApplyResult>;
29
+ //# sourceMappingURL=apply-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-plan.d.ts","sourceRoot":"","sources":["../../src/onboard/apply-plan.ts"],"names":[],"mappings":"AAcA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE5C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;AAEpE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;gBACZ,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO;CAOrF;AAED,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,WAAW,CAAC,CAuDtB"}