@momentiq/dark-factory-cli 1.1.0 → 2.1.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.
- package/README.md +86 -2
- package/dist/adapters/critic-result-schema.d.ts +14 -14
- package/dist/adapters/index.d.ts +1 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +7 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/static-schema-lint.d.ts +68 -0
- package/dist/adapters/static-schema-lint.d.ts.map +1 -0
- package/dist/adapters/static-schema-lint.js +813 -0
- package/dist/adapters/static-schema-lint.js.map +1 -0
- package/dist/cli.d.ts +17 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +313 -41
- package/dist/cli.js.map +1 -1
- package/dist/commands/findings.d.ts +6 -0
- package/dist/commands/findings.d.ts.map +1 -0
- package/dist/commands/findings.js +196 -0
- package/dist/commands/findings.js.map +1 -0
- package/dist/commands/onboard.d.ts +6 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +111 -0
- package/dist/commands/onboard.js.map +1 -0
- package/dist/commands/skills.d.ts +6 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +248 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/cycle-doc-validator/validate_cycle_doc.py +131 -60
- package/dist/doctor.d.ts +17 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +107 -0
- package/dist/doctor.js.map +1 -1
- package/dist/evidence/docker-build.d.ts +6 -0
- package/dist/evidence/docker-build.d.ts.map +1 -0
- package/dist/evidence/docker-build.js +199 -0
- package/dist/evidence/docker-build.js.map +1 -0
- package/dist/evidence/index.d.ts +1 -0
- package/dist/evidence/index.d.ts.map +1 -1
- package/dist/evidence/index.js +6 -0
- package/dist/evidence/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +2 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/doctor.d.ts.map +1 -1
- package/dist/mcp/tools/doctor.js +5 -0
- package/dist/mcp/tools/doctor.js.map +1 -1
- package/dist/mcp/tools/review-bypass.d.ts.map +1 -1
- package/dist/mcp/tools/review-bypass.js +21 -0
- package/dist/mcp/tools/review-bypass.js.map +1 -1
- package/dist/mcp/tools/skills-install.d.ts +6 -0
- package/dist/mcp/tools/skills-install.d.ts.map +1 -0
- package/dist/mcp/tools/skills-install.js +260 -0
- package/dist/mcp/tools/skills-install.js.map +1 -0
- package/dist/mcp/tools/stats-gate.d.ts.map +1 -1
- package/dist/mcp/tools/stats-gate.js +63 -15
- package/dist/mcp/tools/stats-gate.js.map +1 -1
- package/dist/onboard/analyze.d.ts +7 -0
- package/dist/onboard/analyze.d.ts.map +1 -0
- package/dist/onboard/analyze.js +86 -0
- package/dist/onboard/analyze.js.map +1 -0
- package/dist/onboard/analyzer.d.ts +15 -0
- package/dist/onboard/analyzer.d.ts.map +1 -0
- package/dist/onboard/analyzer.js +52 -0
- package/dist/onboard/analyzer.js.map +1 -0
- package/dist/onboard/analyzers/ci.d.ts +3 -0
- package/dist/onboard/analyzers/ci.d.ts.map +1 -0
- package/dist/onboard/analyzers/ci.js +112 -0
- package/dist/onboard/analyzers/ci.js.map +1 -0
- package/dist/onboard/analyzers/docs.d.ts +3 -0
- package/dist/onboard/analyzers/docs.d.ts.map +1 -0
- package/dist/onboard/analyzers/docs.js +151 -0
- package/dist/onboard/analyzers/docs.js.map +1 -0
- package/dist/onboard/analyzers/git.d.ts +3 -0
- package/dist/onboard/analyzers/git.d.ts.map +1 -0
- package/dist/onboard/analyzers/git.js +87 -0
- package/dist/onboard/analyzers/git.js.map +1 -0
- package/dist/onboard/analyzers/lockfile.d.ts +3 -0
- package/dist/onboard/analyzers/lockfile.d.ts.map +1 -0
- package/dist/onboard/analyzers/lockfile.js +285 -0
- package/dist/onboard/analyzers/lockfile.js.map +1 -0
- package/dist/onboard/analyzers/manifest.d.ts +3 -0
- package/dist/onboard/analyzers/manifest.d.ts.map +1 -0
- package/dist/onboard/analyzers/manifest.js +228 -0
- package/dist/onboard/analyzers/manifest.js.map +1 -0
- package/dist/onboard/analyzers/tree.d.ts +3 -0
- package/dist/onboard/analyzers/tree.d.ts.map +1 -0
- package/dist/onboard/analyzers/tree.js +196 -0
- package/dist/onboard/analyzers/tree.js.map +1 -0
- package/dist/onboard/fixtures/replay-git-history.d.ts +20 -0
- package/dist/onboard/fixtures/replay-git-history.d.ts.map +1 -0
- package/dist/onboard/fixtures/replay-git-history.js +91 -0
- package/dist/onboard/fixtures/replay-git-history.js.map +1 -0
- package/dist/onboard/schema.d.ts +545 -0
- package/dist/onboard/schema.d.ts.map +1 -0
- package/dist/onboard/schema.js +142 -0
- package/dist/onboard/schema.js.map +1 -0
- package/dist/policy/gate.d.ts +1 -1
- package/dist/policy/gate.d.ts.map +1 -1
- package/dist/policy/gate.js +96 -12
- package/dist/policy/gate.js.map +1 -1
- package/dist/prompt.d.ts +1 -0
- package/dist/prompt.d.ts.map +1 -1
- package/dist/prompt.js +105 -1
- package/dist/prompt.js.map +1 -1
- package/dist/report.d.ts +106 -3
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +282 -10
- package/dist/report.js.map +1 -1
- package/dist/runner.d.ts +2 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +86 -2
- package/dist/runner.js.map +1 -1
- package/dist/self-consistency.d.ts +144 -0
- package/dist/self-consistency.d.ts.map +1 -0
- package/dist/self-consistency.js +368 -0
- package/dist/self-consistency.js.map +1 -0
- package/dist/skills/config.d.ts +176 -0
- package/dist/skills/config.d.ts.map +1 -0
- package/dist/skills/config.js +251 -0
- package/dist/skills/config.js.map +1 -0
- package/dist/skills/index.d.ts +4 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +8 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/install.d.ts +62 -0
- package/dist/skills/install.d.ts.map +1 -0
- package/dist/skills/install.js +315 -0
- package/dist/skills/install.js.map +1 -0
- package/dist/skills/template.d.ts +42 -0
- package/dist/skills/template.d.ts.map +1 -0
- package/dist/skills/template.js +95 -0
- package/dist/skills/template.js.map +1 -0
- package/dist/trusted-surface/rebind.d.ts.map +1 -1
- package/dist/trusted-surface/rebind.js +14 -1
- package/dist/trusted-surface/rebind.js.map +1 -1
- package/package.json +36 -2
- package/skills/README.md +89 -0
- package/skills/chief-engineer-blitz/SKILL.md.tmpl +443 -0
- package/skills/chief-engineer-blitz/skill.json +53 -0
- package/skills/chief-engineer-review/SKILL.md.tmpl +184 -0
- package/skills/chief-engineer-review/references/review-examples.md.tmpl +130 -0
- package/skills/chief-engineer-review/skill.json +67 -0
- package/skills/chief-engineer-review/templates/code-review-prompt.md.tmpl +111 -0
- package/skills/chief-engineer-review/templates/escalation-prompt.md.tmpl +56 -0
- package/skills/chief-engineer-review/templates/plan-review-prompt.md.tmpl +74 -0
- package/skills/skill-schema.json +73 -0
|
@@ -0,0 +1,285 @@
|
|
|
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";
|
|
18
|
+
import TOML from "@iarna/toml";
|
|
19
|
+
// @yarnpkg/lockfile is CJS; ESM only sees the default export.
|
|
20
|
+
// Pull `parse` off the default to keep ESM consumers + Node ESM-loader happy.
|
|
21
|
+
import yarnpkgLockfile from "@yarnpkg/lockfile";
|
|
22
|
+
const { parse: parseYarnLock } = yarnpkgLockfile;
|
|
23
|
+
const MAX_DEPS = 20;
|
|
24
|
+
const MAX_DECISIONS = 10;
|
|
25
|
+
// Decision-surface heuristics. Each entry matches a single dep name (exact
|
|
26
|
+
// match, post-lowercase) and emits ONE decision with evidence: [lockfilePath].
|
|
27
|
+
// Title strings follow the spec's example phrasing — Phase B's LLM polishes
|
|
28
|
+
// the narrative; Phase A only surfaces deterministic signals.
|
|
29
|
+
const DECISION_MARKERS = [
|
|
30
|
+
// test-framework
|
|
31
|
+
{ match: "vitest", surface: "test-framework", title: "Repo uses Vitest as test framework" },
|
|
32
|
+
{ match: "jest", surface: "test-framework", title: "Repo uses Jest as test framework" },
|
|
33
|
+
{ match: "mocha", surface: "test-framework", title: "Repo uses Mocha as test framework" },
|
|
34
|
+
{ match: "pytest", surface: "test-framework", title: "Repo uses Pytest as test framework" },
|
|
35
|
+
// deploy-target
|
|
36
|
+
{ match: "@kubernetes/client-node", surface: "deploy-target", title: "Repo deploys via Kubernetes" },
|
|
37
|
+
{ match: "aws-sdk", surface: "deploy-target", title: "Repo deploys via AWS" },
|
|
38
|
+
// stack — frontend
|
|
39
|
+
{ match: "next", surface: "stack", title: "Frontend stack: Next.js" },
|
|
40
|
+
{ match: "react", surface: "stack", title: "Frontend stack: React" },
|
|
41
|
+
{ match: "vue", surface: "stack", title: "Frontend stack: Vue" },
|
|
42
|
+
{ match: "svelte", surface: "stack", title: "Frontend stack: Svelte" },
|
|
43
|
+
{ match: "solid-js", surface: "stack", title: "Frontend stack: Solid.js" },
|
|
44
|
+
// stack — backend
|
|
45
|
+
{ match: "express", surface: "stack", title: "Backend framework: Express" },
|
|
46
|
+
{ match: "fastify", surface: "stack", title: "Backend framework: Fastify" },
|
|
47
|
+
{ match: "koa", surface: "stack", title: "Backend framework: Koa" },
|
|
48
|
+
{ match: "hono", surface: "stack", title: "Backend framework: Hono" },
|
|
49
|
+
{ match: "fastapi", surface: "stack", title: "Backend framework: FastAPI" },
|
|
50
|
+
{ match: "gin", surface: "stack", title: "Backend framework: Gin" },
|
|
51
|
+
// auth-model
|
|
52
|
+
{ match: "passport", surface: "auth-model", title: "Auth model: Passport" },
|
|
53
|
+
{ match: "auth0", surface: "auth-model", title: "Auth model: Auth0" },
|
|
54
|
+
{ match: "clerk", surface: "auth-model", title: "Auth model: Clerk" },
|
|
55
|
+
{ match: "next-auth", surface: "auth-model", title: "Auth model: NextAuth" },
|
|
56
|
+
{ match: "nextauth", surface: "auth-model", title: "Auth model: NextAuth" },
|
|
57
|
+
];
|
|
58
|
+
const LOCKFILE_PRECEDENCE = [
|
|
59
|
+
"package-lock.json",
|
|
60
|
+
"yarn.lock",
|
|
61
|
+
"poetry.lock",
|
|
62
|
+
"go.sum",
|
|
63
|
+
];
|
|
64
|
+
async function readIfExists(path) {
|
|
65
|
+
try {
|
|
66
|
+
return await readFile(path, "utf8");
|
|
67
|
+
}
|
|
68
|
+
catch (e) {
|
|
69
|
+
if (e.code === "ENOENT")
|
|
70
|
+
return null;
|
|
71
|
+
throw e;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
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 };
|
|
79
|
+
}
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
// package-lock.json — handles both lockfileVersion 1 (root-level dependencies
|
|
83
|
+
// with the version values being the pins) and 2/3 (packages[""].dependencies
|
|
84
|
+
// for direct-dep names; packages["node_modules/<name>"].version for the pin).
|
|
85
|
+
function parsePackageLock(contents, lockfilePath) {
|
|
86
|
+
let parsed;
|
|
87
|
+
try {
|
|
88
|
+
parsed = JSON.parse(contents);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return [];
|
|
92
|
+
}
|
|
93
|
+
if (typeof parsed !== "object" || parsed === null)
|
|
94
|
+
return [];
|
|
95
|
+
const obj = parsed;
|
|
96
|
+
const out = [];
|
|
97
|
+
const seen = new Set();
|
|
98
|
+
// v2/v3: prefer packages[""] for direct-dep NAMES; resolve pins from
|
|
99
|
+
// packages["node_modules/<name>"].version when available.
|
|
100
|
+
const packages = obj.packages;
|
|
101
|
+
const root = typeof packages === "object" && packages !== null
|
|
102
|
+
? packages[""]
|
|
103
|
+
: undefined;
|
|
104
|
+
if (root !== undefined && typeof root === "object" && packages !== null) {
|
|
105
|
+
const directDeps = {
|
|
106
|
+
...root.dependencies,
|
|
107
|
+
...root.devDependencies,
|
|
108
|
+
};
|
|
109
|
+
const pkgMap = packages;
|
|
110
|
+
for (const [name, requestedRange] of Object.entries(directDeps)) {
|
|
111
|
+
if (seen.has(name))
|
|
112
|
+
continue;
|
|
113
|
+
const pkgEntry = pkgMap[`node_modules/${name}`];
|
|
114
|
+
const pinnedVersion = pkgEntry && typeof pkgEntry.version === "string"
|
|
115
|
+
? pkgEntry.version
|
|
116
|
+
: requestedRange;
|
|
117
|
+
out.push({ name, version: pinnedVersion, manifestPath: lockfilePath });
|
|
118
|
+
seen.add(name);
|
|
119
|
+
if (out.length >= MAX_DEPS)
|
|
120
|
+
return out;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// v1 fallback (and a belt+braces top-up if v2/v3 produced nothing): root
|
|
124
|
+
// dependencies/devDependencies whose values ARE the pinned versions.
|
|
125
|
+
if (out.length === 0) {
|
|
126
|
+
const flat = {
|
|
127
|
+
...obj.dependencies,
|
|
128
|
+
...obj.devDependencies,
|
|
129
|
+
};
|
|
130
|
+
for (const [name, version] of Object.entries(flat)) {
|
|
131
|
+
if (seen.has(name))
|
|
132
|
+
continue;
|
|
133
|
+
// v1 entries can be either bare strings (pin) or objects with .version.
|
|
134
|
+
// We only get strings here from the spread above; objects are excluded.
|
|
135
|
+
if (typeof version !== "string")
|
|
136
|
+
continue;
|
|
137
|
+
out.push({ name, version, manifestPath: lockfilePath });
|
|
138
|
+
seen.add(name);
|
|
139
|
+
if (out.length >= MAX_DEPS)
|
|
140
|
+
return out;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return out;
|
|
144
|
+
}
|
|
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"));
|
|
150
|
+
if (pkgJsonRaw === null)
|
|
151
|
+
return [];
|
|
152
|
+
let pkg;
|
|
153
|
+
try {
|
|
154
|
+
pkg = JSON.parse(pkgJsonRaw);
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
return [];
|
|
158
|
+
}
|
|
159
|
+
if (typeof pkg !== "object" || pkg === null)
|
|
160
|
+
return [];
|
|
161
|
+
const pkgObj = pkg;
|
|
162
|
+
const directDeps = {
|
|
163
|
+
...pkgObj.dependencies,
|
|
164
|
+
...pkgObj.devDependencies,
|
|
165
|
+
};
|
|
166
|
+
const parsed = parseYarnLock(contents);
|
|
167
|
+
if (parsed.type === "conflict")
|
|
168
|
+
return [];
|
|
169
|
+
const entries = parsed.object;
|
|
170
|
+
const out = [];
|
|
171
|
+
for (const [name, range] of Object.entries(directDeps)) {
|
|
172
|
+
const key = `${name}@${range}`;
|
|
173
|
+
const entry = entries[key];
|
|
174
|
+
const version = entry && typeof entry.version === "string" ? entry.version : range;
|
|
175
|
+
out.push({ name, version, manifestPath: lockfilePath });
|
|
176
|
+
if (out.length >= MAX_DEPS)
|
|
177
|
+
return out;
|
|
178
|
+
}
|
|
179
|
+
return out;
|
|
180
|
+
}
|
|
181
|
+
// poetry.lock — iterate [[package]] blocks. Older formats use category="main";
|
|
182
|
+
// newer formats omit category — accept either.
|
|
183
|
+
function parsePoetry(contents, lockfilePath) {
|
|
184
|
+
let parsed;
|
|
185
|
+
try {
|
|
186
|
+
parsed = TOML.parse(contents);
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
return [];
|
|
190
|
+
}
|
|
191
|
+
if (typeof parsed !== "object" || parsed === null)
|
|
192
|
+
return [];
|
|
193
|
+
const pkgs = parsed.package;
|
|
194
|
+
if (!Array.isArray(pkgs))
|
|
195
|
+
return [];
|
|
196
|
+
const out = [];
|
|
197
|
+
for (const raw of pkgs) {
|
|
198
|
+
if (typeof raw !== "object" || raw === null)
|
|
199
|
+
continue;
|
|
200
|
+
const entry = raw;
|
|
201
|
+
const category = entry.category;
|
|
202
|
+
if (typeof category === "string" && category !== "main")
|
|
203
|
+
continue;
|
|
204
|
+
const name = entry.name;
|
|
205
|
+
const version = entry.version;
|
|
206
|
+
if (typeof name !== "string" || typeof version !== "string")
|
|
207
|
+
continue;
|
|
208
|
+
out.push({ name, version, manifestPath: lockfilePath });
|
|
209
|
+
if (out.length >= MAX_DEPS)
|
|
210
|
+
return out;
|
|
211
|
+
}
|
|
212
|
+
return out;
|
|
213
|
+
}
|
|
214
|
+
// go.sum — `<module> <version>/go.mod <hash>` lines. The /go.mod-suffix is
|
|
215
|
+
// the canonical pin (the bare `<module> <version>` lines hash the module zip;
|
|
216
|
+
// many lines per dep exist — first-match-per-module wins).
|
|
217
|
+
function parseGoSum(contents, lockfilePath) {
|
|
218
|
+
const out = [];
|
|
219
|
+
const seen = new Set();
|
|
220
|
+
for (const line of contents.split(/\r?\n/)) {
|
|
221
|
+
const trimmed = line.trim();
|
|
222
|
+
if (!trimmed)
|
|
223
|
+
continue;
|
|
224
|
+
// Match: "<module> <version>/go.mod <hash>"
|
|
225
|
+
const match = trimmed.match(/^(\S+)\s+(\S+?)\/go\.mod\s+/);
|
|
226
|
+
if (!match)
|
|
227
|
+
continue;
|
|
228
|
+
const name = match[1];
|
|
229
|
+
const version = match[2];
|
|
230
|
+
if (name === undefined || version === undefined)
|
|
231
|
+
continue;
|
|
232
|
+
if (seen.has(name))
|
|
233
|
+
continue;
|
|
234
|
+
seen.add(name);
|
|
235
|
+
out.push({ name, version, manifestPath: lockfilePath });
|
|
236
|
+
if (out.length >= MAX_DEPS)
|
|
237
|
+
return out;
|
|
238
|
+
}
|
|
239
|
+
return out;
|
|
240
|
+
}
|
|
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
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return out;
|
|
259
|
+
}
|
|
260
|
+
export const lockfileAnalyzer = {
|
|
261
|
+
name: "lockfile",
|
|
262
|
+
async detect(rootDir) {
|
|
263
|
+
const chosen = await chooseLockfile(rootDir);
|
|
264
|
+
if (chosen === null)
|
|
265
|
+
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;
|
|
280
|
+
}
|
|
281
|
+
const decisions = deriveDecisions(dependencies, chosen.name);
|
|
282
|
+
return { dependencies, decisions };
|
|
283
|
+
},
|
|
284
|
+
};
|
|
285
|
+
//# sourceMappingURL=lockfile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../../src/onboard/analyzers/lockfile.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,EAAE;AACF,2EAA2E;AAC3E,+DAA+D;AAC/D,EAAE;AACF,kEAAkE;AAClE,yEAAyE;AACzE,oEAAoE;AACpE,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAC7E,EAAE;AACF,4EAA4E;AAC5E,yEAAyE;AACzE,yEAAyE;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,IAAI,MAAM,aAAa,CAAC;AAC/B,8DAA8D;AAC9D,8EAA8E;AAC9E,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,eAAe,CAAC;AAIjD,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,2EAA2E;AAC3E,+EAA+E;AAC/E,4EAA4E;AAC5E,8DAA8D;AAC9D,MAAM,gBAAgB,GAIjB;IACH,iBAAiB;IACjB,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,oCAAoC,EAAE;IAC3F,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,kCAAkC,EAAE;IACvF,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,mCAAmC,EAAE;IACzF,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,oCAAoC,EAAE;IAE3F,gBAAgB;IAChB,EAAE,KAAK,EAAE,yBAAyB,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,6BAA6B,EAAE;IACpG,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,sBAAsB,EAAE;IAE7E,mBAAmB;IACnB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,yBAAyB,EAAE;IACrE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE;IACpE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE;IAChE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE;IACtE,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,0BAA0B,EAAE;IAE1E,kBAAkB;IAClB,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,4BAA4B,EAAE;IAC3E,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,4BAA4B,EAAE;IAC3E,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE;IACnE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,yBAAyB,EAAE;IACrE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,4BAA4B,EAAE;IAC3E,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE;IAEnE,aAAa;IACb,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,sBAAsB,EAAE;IAC3E,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,mBAAmB,EAAE;IACrE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,mBAAmB,EAAE;IACrE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,sBAAsB,EAAE;IAC5E,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,sBAAsB,EAAE;CAC5E,CAAC;AAEF,MAAM,mBAAmB,GAAG;IAC1B,mBAAmB;IACnB,WAAW;IACX,aAAa;IACb,QAAQ;CACA,CAAC;AAIX,KAAK,UAAU,YAAY,CAAC,IAAY;IACtC,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAK,CAA2B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAChE,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,OAAe;IAEf,KAAK,MAAM,IAAI,IAAI,mBAAmB,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACzD,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACnD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,SAAS,gBAAgB,CAAC,QAAgB,EAAE,YAAoB;IAC9D,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC7D,MAAM,GAAG,GAAG,MAAiC,CAAC;IAE9C,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,qEAAqE;IACrE,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC9B,MAAM,IAAI,GACR,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI;QAC/C,CAAC,CAAE,QAAgE,CAAC,EAAE,CAAC;QACvE,CAAC,CAAC,SAAS,CAAC;IAChB,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACxE,MAAM,UAAU,GAA2B;YACzC,GAAI,IAAI,CAAC,YAAmD;YAC5D,GAAI,IAAI,CAAC,eAAsD;SAChE,CAAC;QACF,MAAM,MAAM,GAAG,QAAmD,CAAC;QACnE,KAAK,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAChE,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,aAAa,GACjB,QAAQ,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ;gBAC9C,CAAC,CAAC,QAAQ,CAAC,OAAO;gBAClB,CAAC,CAAC,cAAc,CAAC;YACrB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;YACvE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACf,IAAI,GAAG,CAAC,MAAM,IAAI,QAAQ;gBAAE,OAAO,GAAG,CAAC;QACzC,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,qEAAqE;IACrE,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,GAA2B;YACnC,GAAI,GAAG,CAAC,YAAmD;YAC3D,GAAI,GAAG,CAAC,eAAsD;SAC/D,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC7B,wEAAwE;YACxE,wEAAwE;YACxE,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,SAAS;YAC1C,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;YACxD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACf,IAAI,GAAG,CAAC,MAAM,IAAI,QAAQ;gBAAE,OAAO,GAAG,CAAC;QACzC,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+EAA+E;AAC/E,4EAA4E;AAC5E,qCAAqC;AACrC,KAAK,UAAU,SAAS,CACtB,QAAgB,EAChB,YAAoB,EACpB,OAAe;IAEf,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IACrE,IAAI,UAAU,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACvD,MAAM,MAAM,GAAG,GAA8B,CAAC;IAC9C,MAAM,UAAU,GAA2B;QACzC,GAAI,MAAM,CAAC,YAAmD;QAC9D,GAAI,MAAM,CAAC,eAAsD;KAClE,CAAC;IAEF,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IAE9B,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,OAAO,GACX,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QACrE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;QACxD,IAAI,GAAG,CAAC,MAAM,IAAI,QAAQ;YAAE,OAAO,GAAG,CAAC;IACzC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+EAA+E;AAC/E,+CAA+C;AAC/C,SAAS,WAAW,CAAC,QAAgB,EAAE,YAAoB;IACzD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC7D,MAAM,IAAI,GAAI,MAAkC,CAAC,OAAO,CAAC;IACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;YAAE,SAAS;QACtD,MAAM,KAAK,GAAG,GAA8B,CAAC;QAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,MAAM;YAAE,SAAS;QAClE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,SAAS;QACtE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;QACxD,IAAI,GAAG,CAAC,MAAM,IAAI,QAAQ;YAAE,OAAO,GAAG,CAAC;IACzC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,2EAA2E;AAC3E,8EAA8E;AAC9E,2DAA2D;AAC3D,SAAS,UAAU,CAAC,QAAgB,EAAE,YAAoB;IACxD,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,4CAA4C;QAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS;YAAE,SAAS;QAC1D,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;QACxD,IAAI,GAAG,CAAC,MAAM,IAAI,QAAQ;YAAE,OAAO,GAAG,CAAC;IACzC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CACtB,YAA0B,EAC1B,YAAoB;IAEpB,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;YACtC,IAAI,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC3B,GAAG,CAAC,IAAI,CAAC;oBACP,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,QAAQ,EAAE,CAAC,YAAY,CAAC;iBACzB,CAAC,CAAC;gBACH,IAAI,GAAG,CAAC,MAAM,IAAI,aAAa;oBAAE,OAAO,GAAG,CAAC;gBAC5C,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAa;IACxC,IAAI,EAAE,UAAU;IAChB,KAAK,CAAC,MAAM,CAAC,OAAO;QAClB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAEjC,IAAI,YAA0B,CAAC;QAC/B,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,mBAAmB;gBACtB,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC9D,MAAM;YACR,KAAK,WAAW;gBACd,YAAY,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACtE,MAAM;YACR,KAAK,aAAa;gBAChB,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBACzD,MAAM;YACR,KAAK,QAAQ;gBACX,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBACxD,MAAM;QACV,CAAC;QAED,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;IACrC,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/onboard/analyzers/manifest.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAyM/C,eAAO,MAAM,gBAAgB,EAAE,QAqB9B,CAAC"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
// packages/cli/src/onboard/analyzers/manifest.ts
|
|
2
|
+
//
|
|
3
|
+
// Manifest analyzer — cycle 15 Phase A, Task 3.
|
|
4
|
+
//
|
|
5
|
+
// Detects every stack present in a repo from primary manifests (package.json,
|
|
6
|
+
// pyproject.toml, go.mod, Cargo.toml, Gemfile, mix.exs, pom.xml,
|
|
7
|
+
// build.gradle.kts), plus the asdf/mise multi-runtime `.tool-versions` file,
|
|
8
|
+
// plus a Dockerfile fallback signal. Populates `RepoAnalysis.stacks[]`.
|
|
9
|
+
import { readFile } from "node:fs/promises";
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
import { parse as parseToml } from "@iarna/toml";
|
|
12
|
+
async function readIfExists(p) {
|
|
13
|
+
try {
|
|
14
|
+
return await readFile(p, "utf8");
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async function detectNode(root) {
|
|
21
|
+
const pkg = await readIfExists(join(root, "package.json"));
|
|
22
|
+
if (!pkg)
|
|
23
|
+
return null;
|
|
24
|
+
let pin = null;
|
|
25
|
+
try {
|
|
26
|
+
const p = JSON.parse(pkg);
|
|
27
|
+
pin = p.engines?.node ?? p.volta?.node ?? null;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
/* malformed package.json — pin stays null */
|
|
31
|
+
}
|
|
32
|
+
if (!pin) {
|
|
33
|
+
const nvmrc = await readIfExists(join(root, ".nvmrc"));
|
|
34
|
+
if (nvmrc)
|
|
35
|
+
pin = nvmrc.trim();
|
|
36
|
+
}
|
|
37
|
+
return { language: "typescript", versionPin: pin, manifestPath: "package.json" };
|
|
38
|
+
}
|
|
39
|
+
async function detectPython(root) {
|
|
40
|
+
const py = await readIfExists(join(root, "pyproject.toml"));
|
|
41
|
+
if (!py)
|
|
42
|
+
return null;
|
|
43
|
+
let pin = null;
|
|
44
|
+
try {
|
|
45
|
+
const parsed = parseToml(py);
|
|
46
|
+
pin =
|
|
47
|
+
parsed.tool?.poetry?.dependencies?.python ??
|
|
48
|
+
parsed.project?.["requires-python"] ??
|
|
49
|
+
null;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
/* malformed pyproject.toml — pin stays null */
|
|
53
|
+
}
|
|
54
|
+
if (!pin) {
|
|
55
|
+
const pv = await readIfExists(join(root, ".python-version"));
|
|
56
|
+
if (pv)
|
|
57
|
+
pin = pv.trim() || null;
|
|
58
|
+
}
|
|
59
|
+
return { language: "python", versionPin: pin, manifestPath: "pyproject.toml" };
|
|
60
|
+
}
|
|
61
|
+
async function detectGo(root) {
|
|
62
|
+
const body = await readIfExists(join(root, "go.mod"));
|
|
63
|
+
if (!body)
|
|
64
|
+
return null;
|
|
65
|
+
const m = body.match(/^go\s+(\S+)/m);
|
|
66
|
+
return {
|
|
67
|
+
language: "go",
|
|
68
|
+
versionPin: m?.[1] ?? null,
|
|
69
|
+
manifestPath: "go.mod",
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
async function detectRust(root) {
|
|
73
|
+
const cargo = await readIfExists(join(root, "Cargo.toml"));
|
|
74
|
+
if (!cargo)
|
|
75
|
+
return null;
|
|
76
|
+
let pin = null;
|
|
77
|
+
try {
|
|
78
|
+
const parsed = parseToml(cargo);
|
|
79
|
+
pin = parsed.package?.["rust-version"] ?? null;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
/* malformed Cargo.toml — pin stays null */
|
|
83
|
+
}
|
|
84
|
+
if (!pin) {
|
|
85
|
+
const tc = await readIfExists(join(root, "rust-toolchain.toml"));
|
|
86
|
+
if (tc) {
|
|
87
|
+
try {
|
|
88
|
+
const parsed = parseToml(tc);
|
|
89
|
+
pin = parsed.toolchain?.channel ?? null;
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
/* malformed rust-toolchain.toml — pin stays null */
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return { language: "rust", versionPin: pin, manifestPath: "Cargo.toml" };
|
|
97
|
+
}
|
|
98
|
+
async function detectRuby(root) {
|
|
99
|
+
const body = await readIfExists(join(root, "Gemfile"));
|
|
100
|
+
if (!body)
|
|
101
|
+
return null;
|
|
102
|
+
const m = body.match(/^ruby\s+['"]([^'"]+)['"]/m);
|
|
103
|
+
let pin = m?.[1] ?? null;
|
|
104
|
+
if (!pin) {
|
|
105
|
+
const rv = await readIfExists(join(root, ".ruby-version"));
|
|
106
|
+
if (rv)
|
|
107
|
+
pin = rv.trim() || null;
|
|
108
|
+
}
|
|
109
|
+
return { language: "ruby", versionPin: pin, manifestPath: "Gemfile" };
|
|
110
|
+
}
|
|
111
|
+
async function detectElixir(root) {
|
|
112
|
+
const body = await readIfExists(join(root, "mix.exs"));
|
|
113
|
+
if (!body)
|
|
114
|
+
return null;
|
|
115
|
+
const m = body.match(/elixir:\s*"([^"]+)"/);
|
|
116
|
+
return {
|
|
117
|
+
language: "elixir",
|
|
118
|
+
versionPin: m?.[1] ?? null,
|
|
119
|
+
manifestPath: "mix.exs",
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
async function detectJava(root) {
|
|
123
|
+
const body = await readIfExists(join(root, "pom.xml"));
|
|
124
|
+
if (!body)
|
|
125
|
+
return null;
|
|
126
|
+
const compiler = body.match(/<maven\.compiler\.source>([^<]+)<\/maven\.compiler\.source>/);
|
|
127
|
+
const javaVer = body.match(/<java\.version>([^<]+)<\/java\.version>/);
|
|
128
|
+
const pin = compiler?.[1] ?? javaVer?.[1] ?? null;
|
|
129
|
+
return { language: "java", versionPin: pin, manifestPath: "pom.xml" };
|
|
130
|
+
}
|
|
131
|
+
async function detectKotlin(root) {
|
|
132
|
+
const body = await readIfExists(join(root, "build.gradle.kts"));
|
|
133
|
+
if (!body)
|
|
134
|
+
return null;
|
|
135
|
+
const jvm = body.match(/jvmTarget\s*=\s*"([^"]+)"/);
|
|
136
|
+
let pin = jvm?.[1] ?? null;
|
|
137
|
+
if (!pin) {
|
|
138
|
+
const jv = body.match(/JavaVersion\.VERSION_(\d+)/);
|
|
139
|
+
if (jv)
|
|
140
|
+
pin = jv[1] ?? null;
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
language: "kotlin",
|
|
144
|
+
versionPin: pin,
|
|
145
|
+
manifestPath: "build.gradle.kts",
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
async function detectDocker(root) {
|
|
149
|
+
const body = await readIfExists(join(root, "Dockerfile"));
|
|
150
|
+
if (!body)
|
|
151
|
+
return null;
|
|
152
|
+
const m = body.match(/^FROM\s+(\S+)/m);
|
|
153
|
+
return {
|
|
154
|
+
language: "other",
|
|
155
|
+
versionPin: m?.[1] ?? null,
|
|
156
|
+
manifestPath: "Dockerfile",
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
const RUNTIME_TO_LANG = {
|
|
160
|
+
nodejs: "typescript",
|
|
161
|
+
node: "typescript",
|
|
162
|
+
python: "python",
|
|
163
|
+
golang: "go",
|
|
164
|
+
go: "go",
|
|
165
|
+
ruby: "ruby",
|
|
166
|
+
rust: "rust",
|
|
167
|
+
elixir: "elixir",
|
|
168
|
+
java: "java",
|
|
169
|
+
kotlin: "kotlin",
|
|
170
|
+
};
|
|
171
|
+
async function detectToolVersions(root) {
|
|
172
|
+
const body = await readIfExists(join(root, ".tool-versions"));
|
|
173
|
+
if (!body)
|
|
174
|
+
return [];
|
|
175
|
+
const out = [];
|
|
176
|
+
for (const raw of body.split(/\r?\n/)) {
|
|
177
|
+
const line = raw.split("#")[0]?.trim();
|
|
178
|
+
if (!line)
|
|
179
|
+
continue;
|
|
180
|
+
const [rt, ver] = line.split(/\s+/);
|
|
181
|
+
if (!rt || !ver)
|
|
182
|
+
continue;
|
|
183
|
+
const lang = RUNTIME_TO_LANG[rt.toLowerCase()];
|
|
184
|
+
if (!lang)
|
|
185
|
+
continue;
|
|
186
|
+
out.push({ language: lang, versionPin: ver, manifestPath: ".tool-versions" });
|
|
187
|
+
}
|
|
188
|
+
return out;
|
|
189
|
+
}
|
|
190
|
+
// Merge a primary-manifest stack list with .tool-versions entries.
|
|
191
|
+
// Rule (see plan's "Supported manifests" table): .tool-versions pin wins for
|
|
192
|
+
// any language that also has a primary manifest, but the primary manifest's
|
|
193
|
+
// path is preserved as `manifestPath`. Languages only in .tool-versions are
|
|
194
|
+
// added with manifestPath: ".tool-versions". De-dupe by language.
|
|
195
|
+
function mergeStacks(primary, toolVersions) {
|
|
196
|
+
const byLang = new Map();
|
|
197
|
+
for (const s of primary)
|
|
198
|
+
byLang.set(s.language, s);
|
|
199
|
+
for (const tv of toolVersions) {
|
|
200
|
+
const existing = byLang.get(tv.language);
|
|
201
|
+
byLang.set(tv.language, existing ? { ...existing, versionPin: tv.versionPin } : tv);
|
|
202
|
+
}
|
|
203
|
+
return [...byLang.values()];
|
|
204
|
+
}
|
|
205
|
+
export const manifestAnalyzer = {
|
|
206
|
+
name: "manifest",
|
|
207
|
+
async detect(rootDir) {
|
|
208
|
+
const detectors = [
|
|
209
|
+
detectNode,
|
|
210
|
+
detectPython,
|
|
211
|
+
detectGo,
|
|
212
|
+
detectRust,
|
|
213
|
+
detectRuby,
|
|
214
|
+
detectElixir,
|
|
215
|
+
detectJava,
|
|
216
|
+
detectKotlin,
|
|
217
|
+
detectDocker,
|
|
218
|
+
];
|
|
219
|
+
const primary = (await Promise.all(detectors.map((d) => d(rootDir))))
|
|
220
|
+
.filter((s) => s !== null);
|
|
221
|
+
const toolVersions = await detectToolVersions(rootDir);
|
|
222
|
+
const stacks = mergeStacks(primary, toolVersions);
|
|
223
|
+
if (stacks.length === 0)
|
|
224
|
+
return null;
|
|
225
|
+
return { stacks };
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/onboard/analyzers/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../src/onboard/analyzers/tree.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAgK/C,eAAO,MAAM,YAAY,EAAE,QA+D1B,CAAC"}
|