upstream-radar 0.33.0 → 0.33.2

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.
@@ -0,0 +1,600 @@
1
+ import { access, readFile, realpath } from 'node:fs/promises';
2
+ import { dirname, isAbsolute, join, relative, resolve } from 'node:path';
3
+ import { parseNpmLockGraph, parsePnpmLockGraph } from './graph.js';
4
+ import { parsePackageManifestSnapshot } from './inventory.js';
5
+ export const DSH_PROFILE_CHECK_SCHEMA = 'upstream-radar.dsh-profile-check/v1alpha1';
6
+ const MAX_FILE_BYTES = 16 * 1024 * 1024;
7
+ const MAX_PATCH_ENTRIES = 10_000;
8
+ const MAX_WARNINGS = 100;
9
+ const PACKAGE_NAME = /^(?:@[^/\s]+\/[^/\s]+|[^/@\s]+)(?:\/[^\s]+)*$/;
10
+ function asRecord(value) {
11
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
12
+ return undefined;
13
+ return value;
14
+ }
15
+ function parseJson(text, path) {
16
+ try {
17
+ return JSON.parse(text);
18
+ }
19
+ catch {
20
+ throw new Error(`${path} is not valid JSON`);
21
+ }
22
+ }
23
+ async function readBounded(path) {
24
+ const text = await readFile(path, 'utf8');
25
+ if (Buffer.byteLength(text, 'utf8') > MAX_FILE_BYTES)
26
+ throw new Error(`${path} exceeds ${MAX_FILE_BYTES} bytes`);
27
+ return { text };
28
+ }
29
+ async function readOptional(path) {
30
+ try {
31
+ return await readBounded(path);
32
+ }
33
+ catch (error) {
34
+ if (error.code === 'ENOENT')
35
+ return undefined;
36
+ throw error;
37
+ }
38
+ }
39
+ async function pathExists(path) {
40
+ try {
41
+ await access(path);
42
+ return true;
43
+ }
44
+ catch (error) {
45
+ if (error.code === 'ENOENT')
46
+ return false;
47
+ throw error;
48
+ }
49
+ }
50
+ async function realPathIfExists(path) {
51
+ try {
52
+ return await realpath(path);
53
+ }
54
+ catch (error) {
55
+ if (error.code === 'ENOENT')
56
+ return undefined;
57
+ throw error;
58
+ }
59
+ }
60
+ function isOutside(baseDirectory, path) {
61
+ const value = relative(baseDirectory, path);
62
+ return value.startsWith('..') || isAbsolute(value);
63
+ }
64
+ function cleanYamlScalar(value) {
65
+ const trimmed = value.trim().replace(/\s+#.*$/, '');
66
+ if (trimmed === '')
67
+ return undefined;
68
+ if (trimmed === 'true')
69
+ return true;
70
+ if (trimmed === 'false')
71
+ return false;
72
+ if (trimmed.startsWith('!!js '))
73
+ return trimmed.slice(5).trim();
74
+ if (trimmed.startsWith("'") && trimmed.endsWith("'"))
75
+ return trimmed.slice(1, -1).replaceAll("''", "'");
76
+ if (trimmed.startsWith('"') && trimmed.endsWith('"')) {
77
+ try {
78
+ return JSON.parse(trimmed);
79
+ }
80
+ catch {
81
+ return trimmed.slice(1, -1);
82
+ }
83
+ }
84
+ return trimmed;
85
+ }
86
+ function yamlKeyValue(value) {
87
+ const colon = value.indexOf(':');
88
+ if (colon < 1)
89
+ return undefined;
90
+ const key = value.slice(0, colon).trim();
91
+ if (!/^[A-Za-z][A-Za-z0-9_-]*$/.test(key))
92
+ return undefined;
93
+ return { key, value: cleanYamlScalar(value.slice(colon + 1)) };
94
+ }
95
+ function patchLines(text) {
96
+ return text.split(/\r?\n/).flatMap((raw, index) => {
97
+ if (raw.includes('\t'))
98
+ return [];
99
+ const withoutComment = raw.replace(/\s+#.*$/, '').trimEnd();
100
+ if (withoutComment.trim() === '' || withoutComment.trim() === '---' || withoutComment.trim() === '...')
101
+ return [];
102
+ const indent = withoutComment.length - withoutComment.trimStart().length;
103
+ return [{ indent, content: withoutComment.slice(indent), line: index + 1 }];
104
+ });
105
+ }
106
+ /**
107
+ * Read the loader rows that can make a DSH patch import a package.
108
+ * This deliberately understands only the small subset needed for a safety
109
+ * check; it never evaluates YAML tags, JavaScript values, or plugin code.
110
+ */
111
+ function parsePatchEntries(text, sourceFile) {
112
+ const entries = [];
113
+ let insertIndent;
114
+ let active;
115
+ let activeIndent;
116
+ for (const line of patchLines(text)) {
117
+ if (line.content.startsWith('-')) {
118
+ const rest = line.content.slice(1).trim();
119
+ const mapping = yamlKeyValue(rest);
120
+ if (mapping?.key === 'insert' && mapping.value === undefined) {
121
+ insertIndent = line.indent;
122
+ active = undefined;
123
+ activeIndent = undefined;
124
+ continue;
125
+ }
126
+ if (insertIndent !== undefined && line.indent <= insertIndent)
127
+ insertIndent = undefined;
128
+ if (mapping?.key !== 'id' && mapping?.key !== 'name' && mapping?.key !== 'disabled') {
129
+ active = undefined;
130
+ activeIndent = undefined;
131
+ continue;
132
+ }
133
+ const id = mapping.key === 'id' && typeof mapping.value === 'string' ? mapping.value : undefined;
134
+ const entry = id === undefined
135
+ ? undefined
136
+ : {
137
+ id,
138
+ operation: insertIndent !== undefined && line.indent > insertIndent ? 'insert' : 'row',
139
+ sourceFile,
140
+ line: line.line,
141
+ };
142
+ if (entry !== undefined)
143
+ entries.push(entry);
144
+ active = entry;
145
+ activeIndent = entry === undefined ? undefined : line.indent;
146
+ if (active !== undefined && mapping.key !== 'id')
147
+ applyPatchField(active, mapping.key, mapping.value);
148
+ continue;
149
+ }
150
+ if (active === undefined || activeIndent === undefined)
151
+ continue;
152
+ if (line.indent <= activeIndent) {
153
+ active = undefined;
154
+ activeIndent = undefined;
155
+ continue;
156
+ }
157
+ const mapping = yamlKeyValue(line.content);
158
+ if (mapping === undefined)
159
+ continue;
160
+ if (mapping.key === 'id' && typeof mapping.value === 'string')
161
+ active.id = mapping.value;
162
+ else if (mapping.key === 'name' && typeof mapping.value === 'string')
163
+ active.name = mapping.value;
164
+ else if (mapping.key === 'disabled' && typeof mapping.value === 'boolean')
165
+ active.disabled = mapping.value;
166
+ }
167
+ if (entries.length > MAX_PATCH_ENTRIES)
168
+ throw new Error(`${sourceFile} contains more than ${MAX_PATCH_ENTRIES} loader rows`);
169
+ return entries.filter(entry => entry.id.length > 0 && entry.id.length <= 512);
170
+ }
171
+ function applyPatchField(entry, key, value) {
172
+ if (key === 'name' && typeof value === 'string')
173
+ entry.name = value;
174
+ if (key === 'disabled' && typeof value === 'boolean')
175
+ entry.disabled = value;
176
+ }
177
+ function rootPackageName(value) {
178
+ const trimmed = value.trim();
179
+ if (!PACKAGE_NAME.test(trimmed))
180
+ return undefined;
181
+ if (trimmed.startsWith('@')) {
182
+ const parts = trimmed.split('/');
183
+ return parts.length >= 2 ? `${parts[0]}/${parts[1]}` : undefined;
184
+ }
185
+ return trimmed.split('/')[0];
186
+ }
187
+ function profileRelative(profileDirectory, path) {
188
+ const value = relative(profileDirectory, path);
189
+ return value === '' ? '.' : value;
190
+ }
191
+ function safeChildPath(profileDirectory, path) {
192
+ const resolvedProfile = resolve(profileDirectory);
193
+ const resolvedPath = resolve(path);
194
+ const value = relative(resolvedProfile, resolvedPath);
195
+ if (value.startsWith('..') || isAbsolute(value))
196
+ return undefined;
197
+ return resolvedPath;
198
+ }
199
+ async function readProfileManifest(profileDirectory) {
200
+ const path = join(profileDirectory, 'package.json');
201
+ const file = await readBounded(path);
202
+ const manifest = parsePackageManifestSnapshot(parseJson(file.text, path));
203
+ const source = asRecord(manifest.dsh);
204
+ const profile = asRecord(source?.profile);
205
+ const bundles = profile?.bundles;
206
+ if (!Array.isArray(bundles) || bundles.length === 0 || !bundles.every(item => typeof item === 'string' && item.length > 0)) {
207
+ throw new Error(`${path} does not contain dsh.profile.bundles`);
208
+ }
209
+ return { manifest, bundles: bundles.map(item => item) };
210
+ }
211
+ async function readNodeModulesManifest(profileDirectory, packageName) {
212
+ const rootName = rootPackageName(packageName);
213
+ if (rootName === undefined)
214
+ return undefined;
215
+ const path = safeChildPath(profileDirectory, join(profileDirectory, 'node_modules', ...rootName.split('/'), 'package.json'));
216
+ if (path === undefined)
217
+ return undefined;
218
+ const realProfileDirectory = await realpath(profileDirectory);
219
+ const realNodeModulesDirectory = await realPathIfExists(join(profileDirectory, 'node_modules'));
220
+ const realManifest = await realPathIfExists(path);
221
+ if (realNodeModulesDirectory === undefined || realManifest === undefined)
222
+ return undefined;
223
+ if (isOutside(realProfileDirectory, realManifest) || isOutside(realNodeModulesDirectory, realManifest)) {
224
+ throw new Error(`DSH package manifest escapes the profile node_modules directory: ${packageName}`);
225
+ }
226
+ const file = await readBounded(realManifest);
227
+ return { manifest: parsePackageManifestSnapshot(parseJson(file.text, realManifest)), path: realManifest };
228
+ }
229
+ async function patchPathForManifest(profileDirectory, manifestPath, manifest) {
230
+ const source = asRecord(manifest.dsh);
231
+ const bundle = asRecord(source?.bundle);
232
+ const patch = bundle?.patch;
233
+ if (typeof patch !== 'string' || patch.trim() === '')
234
+ return undefined;
235
+ const path = safeChildPath(profileDirectory, resolve(dirname(manifestPath), patch));
236
+ if (path === undefined)
237
+ return undefined;
238
+ const realProfileDirectory = await realpath(profileDirectory);
239
+ const realPatch = await realPathIfExists(path);
240
+ if (realPatch === undefined)
241
+ return undefined;
242
+ if (isOutside(realProfileDirectory, realPatch))
243
+ throw new Error(`DSH bundle patch escapes the profile: ${patch}`);
244
+ return realPatch;
245
+ }
246
+ function parseReleaseAgePolicy(text, sourceFile, bundles) {
247
+ let minimumReleaseAge;
248
+ const excluded = [];
249
+ let readingExcluded = false;
250
+ for (const raw of text.split(/\r?\n/)) {
251
+ const withoutComment = raw.replace(/\s+#.*$/, '').trimEnd();
252
+ if (withoutComment.trim() === '')
253
+ continue;
254
+ const indent = withoutComment.length - withoutComment.trimStart().length;
255
+ const content = withoutComment.slice(indent);
256
+ if (indent === 0)
257
+ readingExcluded = false;
258
+ const mapping = yamlKeyValue(content);
259
+ if (indent === 0 && mapping?.key === 'minimumReleaseAge' && typeof mapping.value === 'string') {
260
+ minimumReleaseAge = mapping.value;
261
+ continue;
262
+ }
263
+ if (indent === 0 && mapping?.key === 'minimumReleaseAgeExclude') {
264
+ readingExcluded = true;
265
+ continue;
266
+ }
267
+ if (readingExcluded && indent > 0 && content.startsWith('-')) {
268
+ const value = cleanYamlScalar(content.slice(1).trim());
269
+ if (typeof value === 'string')
270
+ excluded.push(value);
271
+ }
272
+ }
273
+ if (minimumReleaseAge === undefined)
274
+ return undefined;
275
+ const unexcludedBundles = bundles.filter(bundle => !isReleaseAgeExcluded(bundle, excluded));
276
+ return { minimumReleaseAge, excluded, unexcludedBundles, sourceFile };
277
+ }
278
+ function policyPackageName(value) {
279
+ const trimmed = value.trim();
280
+ const at = trimmed.lastIndexOf('@');
281
+ if (at > 0 && (trimmed.startsWith('@') ? at > trimmed.indexOf('/') : true))
282
+ return trimmed.slice(0, at);
283
+ return trimmed;
284
+ }
285
+ function isReleaseAgeExcluded(packageName, excluded) {
286
+ return excluded.some(raw => {
287
+ const pattern = policyPackageName(raw);
288
+ if (pattern === packageName)
289
+ return true;
290
+ if (pattern.endsWith('/*'))
291
+ return packageName.startsWith(pattern.slice(0, -1));
292
+ return false;
293
+ });
294
+ }
295
+ async function loadDependencyGraph(profileDirectory, root, warnings, searchDirectories) {
296
+ let pnpmPath;
297
+ let pnpm;
298
+ let npmPath;
299
+ let npm;
300
+ for (const directory of [...new Set(searchDirectories)]) {
301
+ if (pnpm === undefined) {
302
+ const candidate = join(directory, 'pnpm-lock.yaml');
303
+ const file = await readOptional(candidate);
304
+ if (file !== undefined) {
305
+ pnpmPath = candidate;
306
+ pnpm = file;
307
+ }
308
+ }
309
+ if (npm === undefined) {
310
+ const candidate = join(directory, 'package-lock.json');
311
+ const file = await readOptional(candidate);
312
+ if (file !== undefined) {
313
+ npmPath = candidate;
314
+ npm = file;
315
+ }
316
+ }
317
+ }
318
+ if (pnpm !== undefined) {
319
+ if (npm !== undefined)
320
+ warnings.push('both pnpm-lock.yaml and package-lock.json exist; pnpm-lock.yaml was selected');
321
+ try {
322
+ return { packageManager: 'pnpm', lockfile: profileRelative(profileDirectory, pnpmPath), graph: parsePnpmLockGraph(pnpm.text, root) };
323
+ }
324
+ catch (error) {
325
+ warnings.push(`could not parse ${profileRelative(profileDirectory, pnpmPath)}: ${error instanceof Error ? error.message : String(error)}`);
326
+ return { packageManager: 'pnpm', lockfile: profileRelative(profileDirectory, pnpmPath) };
327
+ }
328
+ }
329
+ if (npm !== undefined) {
330
+ try {
331
+ return { packageManager: 'npm', lockfile: profileRelative(profileDirectory, npmPath), graph: parseNpmLockGraph(parseJson(npm.text, npmPath), root) };
332
+ }
333
+ catch (error) {
334
+ warnings.push(`could not parse ${profileRelative(profileDirectory, npmPath)}: ${error instanceof Error ? error.message : String(error)}`);
335
+ return { packageManager: 'npm', lockfile: profileRelative(profileDirectory, npmPath) };
336
+ }
337
+ }
338
+ warnings.push('no pnpm-lock.yaml or package-lock.json was found; dependency presence is checked only against node_modules');
339
+ return { packageManager: 'unknown' };
340
+ }
341
+ async function packageAvailability(profileDirectory, packageName, graph) {
342
+ const rootName = rootPackageName(packageName) ?? packageName;
343
+ const node = graph?.nodes.find(item => item.name === rootName);
344
+ if (node !== undefined)
345
+ return { rootName, version: node.version, available: true, source: 'dependency-graph' };
346
+ const installed = await readNodeModulesManifest(profileDirectory, rootName);
347
+ if (installed !== undefined)
348
+ return { rootName, version: installed.manifest.version, available: true, source: 'node_modules' };
349
+ return { rootName, available: graph === undefined, source: graph === undefined ? 'unknown' : 'dependency-graph' };
350
+ }
351
+ function displayCoordinate(name, version) {
352
+ return version === undefined ? name : `${name}@${version}`;
353
+ }
354
+ function sourceFilesFor(entries) {
355
+ return [...new Set(entries.map(entry => entry.sourceFile))].sort();
356
+ }
357
+ async function buildFindings(profileDirectory, entries, graph, policy, warnings) {
358
+ const active = entries.filter(entry => entry.disabled !== true);
359
+ const findings = [];
360
+ const duplicateGroups = new Map();
361
+ for (const entry of active) {
362
+ const group = duplicateGroups.get(entry.id) ?? [];
363
+ group.push(entry);
364
+ duplicateGroups.set(entry.id, group);
365
+ }
366
+ for (const [id, group] of duplicateGroups) {
367
+ if (group.length < 2 || !group.some(entry => entry.operation === 'insert'))
368
+ continue;
369
+ const files = sourceFilesFor(group);
370
+ findings.push({
371
+ code: 'duplicate-loader-id',
372
+ severity: 'block',
373
+ summary: `loader id ${id} appears more than once`,
374
+ detail: `${group.map(entry => `${entry.sourceFile}:${entry.line}`).join(', ')} all contribute an active row. At least one is an insert, so DSH may reject the profile with a duplicate loader entry or load the wrong implementation.`,
375
+ remediation: `Keep one active registration for ${id}; if the row is already supplied by a bundle, remove the generated insert instead of installing another package.`,
376
+ evidence: {
377
+ sourceFiles: files,
378
+ lines: group.map(entry => entry.line),
379
+ loaderIds: [id],
380
+ packageNames: group.flatMap(entry => entry.name === undefined ? [] : [entry.name]),
381
+ },
382
+ });
383
+ }
384
+ const missingEntries = [];
385
+ for (const entry of active) {
386
+ if (entry.name === undefined)
387
+ continue;
388
+ const availability = await packageAvailability(profileDirectory, entry.name, graph);
389
+ if (!availability.available && availability.source === 'dependency-graph') {
390
+ missingEntries.push({ entry: entry, availability });
391
+ }
392
+ }
393
+ for (const { entry, availability } of missingEntries) {
394
+ findings.push({
395
+ code: 'missing-loader-package',
396
+ severity: 'block',
397
+ summary: `loader ${entry.id} imports a package that is not in the profile`,
398
+ detail: `${entry.sourceFile}:${entry.line} names ${entry.name}, but ${availability.rootName} is absent from the locked dependency graph. DSH will fail when it imports this loader; adding the package separately can create a second registration for the same id.`,
399
+ remediation: `Align the patch with the installed bundle layout: remove this insert when the feature is bundled, or add the exact package to the profile and ensure it is registered only once.`,
400
+ evidence: {
401
+ sourceFiles: [entry.sourceFile],
402
+ lines: [entry.line],
403
+ loaderIds: [entry.id],
404
+ packageNames: [entry.name],
405
+ dependencyVersions: [displayCoordinate(availability.rootName, availability.version)],
406
+ },
407
+ });
408
+ }
409
+ if (policy !== undefined && policy.unexcludedBundles.length > 0) {
410
+ const source = policy.sourceFile;
411
+ findings.push({
412
+ code: 'minimum-release-age-unexcluded',
413
+ severity: 'review',
414
+ summary: 'pnpm can silently hold a DSH plugin below its newest release',
415
+ detail: `${source} sets minimumReleaseAge=${policy.minimumReleaseAge}, but these profile bundles are not excluded: ${policy.unexcludedBundles.join(', ')}. A newly published fix can therefore be unavailable during the cooling window, leaving the profile on an older broken layout.`,
416
+ remediation: `Either pin and review the intended versions, or add the exact plugin package names to minimumReleaseAgeExclude and re-run this check after updating the lockfile.`,
417
+ evidence: {
418
+ sourceFiles: [source],
419
+ packageNames: policy.unexcludedBundles,
420
+ },
421
+ });
422
+ }
423
+ if (warnings.length > MAX_WARNINGS)
424
+ warnings.splice(MAX_WARNINGS);
425
+ return findings.sort((left, right) => left.code.localeCompare(right.code));
426
+ }
427
+ export async function checkDshProfile(options) {
428
+ const profileDirectory = resolve(options.profileDirectory);
429
+ const profile = await readProfileManifest(profileDirectory);
430
+ const warnings = [];
431
+ const dshHomeDirectory = resolve(profileDirectory, '..', '..');
432
+ const graphResult = await loadDependencyGraph(profileDirectory, profile.manifest, warnings, [profileDirectory, dshHomeDirectory]);
433
+ const bundles = [];
434
+ const patchFiles = new Set();
435
+ const loaderEntries = [];
436
+ const profilePatchCandidates = options.patchFile === undefined
437
+ ? [
438
+ join(profileDirectory, 'cordis.patch.yml'),
439
+ join(profileDirectory, 'cordis.patch.yaml'),
440
+ join(dshHomeDirectory, 'cordis.patch.yml'),
441
+ join(dshHomeDirectory, 'cordis.patch.yaml'),
442
+ ]
443
+ : [resolve(options.patchFile)];
444
+ for (const path of profilePatchCandidates) {
445
+ const file = await readOptional(path);
446
+ if (file === undefined)
447
+ continue;
448
+ const displayPath = profileRelative(profileDirectory, path);
449
+ patchFiles.add(displayPath);
450
+ loaderEntries.push(...parsePatchEntries(file.text, displayPath));
451
+ break;
452
+ }
453
+ for (const bundleName of profile.bundles) {
454
+ const packageObservation = await readNodeModulesManifest(profileDirectory, bundleName);
455
+ if (packageObservation === undefined) {
456
+ bundles.push({ name: bundleName });
457
+ continue;
458
+ }
459
+ const bundle = {
460
+ name: bundleName,
461
+ version: packageObservation.manifest.version,
462
+ manifestPath: profileRelative(profileDirectory, packageObservation.path),
463
+ };
464
+ const patchPath = await patchPathForManifest(profileDirectory, packageObservation.path, packageObservation.manifest);
465
+ if (patchPath !== undefined) {
466
+ const displayPath = profileRelative(profileDirectory, patchPath);
467
+ bundle.patchPath = displayPath;
468
+ if (!patchFiles.has(displayPath)) {
469
+ const file = await readBounded(patchPath);
470
+ patchFiles.add(displayPath);
471
+ loaderEntries.push(...parsePatchEntries(file.text, displayPath));
472
+ }
473
+ }
474
+ bundles.push(bundle);
475
+ }
476
+ const workspaceCandidates = [
477
+ join(profileDirectory, 'pnpm-workspace.yaml'),
478
+ join(profileDirectory, 'pnpm-workspace.yml'),
479
+ join(dshHomeDirectory, 'pnpm-workspace.yaml'),
480
+ join(dshHomeDirectory, 'pnpm-workspace.yml'),
481
+ ];
482
+ let workspacePath;
483
+ for (const candidate of workspaceCandidates) {
484
+ if (await pathExists(candidate)) {
485
+ workspacePath = candidate;
486
+ break;
487
+ }
488
+ }
489
+ let policy;
490
+ if (workspacePath !== undefined) {
491
+ const policyFile = await readBounded(workspacePath);
492
+ policy = parseReleaseAgePolicy(policyFile.text, profileRelative(profileDirectory, workspacePath), profile.bundles);
493
+ }
494
+ const findings = await buildFindings(profileDirectory, loaderEntries, graphResult.graph, policy, warnings);
495
+ const status = findings.some(finding => finding.severity === 'block')
496
+ ? 'blocked'
497
+ : findings.length > 0 || warnings.length > 0 || graphResult.graph === undefined
498
+ ? 'review'
499
+ : 'pass';
500
+ return {
501
+ schema: DSH_PROFILE_CHECK_SCHEMA,
502
+ checkedAt: options.checkedAt ?? new Date().toISOString(),
503
+ profile: {
504
+ name: profile.manifest.name,
505
+ version: profile.manifest.version,
506
+ directory: profileDirectory,
507
+ },
508
+ bundles,
509
+ packageManager: graphResult.packageManager,
510
+ ...(graphResult.lockfile === undefined ? {} : { lockfile: graphResult.lockfile }),
511
+ ...(graphResult.graph === undefined ? {} : { dependencyGraph: graphResult.graph }),
512
+ ...(policy === undefined ? {} : { policy }),
513
+ patchFiles: [...patchFiles].sort(),
514
+ loaderEntries: loaderEntries.sort((left, right) => left.sourceFile.localeCompare(right.sourceFile) || left.line - right.line),
515
+ warnings,
516
+ findings,
517
+ status,
518
+ execution: {
519
+ network: false,
520
+ installs: false,
521
+ pluginCode: false,
522
+ dshAgent: false,
523
+ llm: false,
524
+ },
525
+ };
526
+ }
527
+ function displayPath(value) {
528
+ return value.replaceAll('\\', '/');
529
+ }
530
+ export function renderDshProfileCheck(report) {
531
+ const lines = [
532
+ 'Upstream Radar — DSH profile check',
533
+ `Profile: ${displayPath(report.profile.directory)} (${report.profile.name}@${report.profile.version})`,
534
+ `Status: ${report.status.toUpperCase()}`,
535
+ `Dependency graph: ${report.packageManager}${report.lockfile === undefined ? '' : ` / ${report.lockfile}`} ${report.dependencyGraph === undefined ? '(not available)' : `(${report.dependencyGraph.nodes.length} nodes, ${report.dependencyGraph.edges.length} edges)`}`,
536
+ `Patch files: ${report.patchFiles.length === 0 ? 'none' : report.patchFiles.join(', ')}`,
537
+ '',
538
+ 'This run:',
539
+ ' network: no',
540
+ ' installs: no',
541
+ ' plugin code: no',
542
+ ' DSH Agent / LLM: no',
543
+ ];
544
+ if (report.dependencyGraph !== undefined) {
545
+ lines.push('', 'Dependency graph packages:');
546
+ for (const node of report.dependencyGraph.nodes.slice(0, 80))
547
+ lines.push(` ${node.name}@${node.version}`);
548
+ if (report.dependencyGraph.nodes.length > 80)
549
+ lines.push(` ... ${report.dependencyGraph.nodes.length - 80} more`);
550
+ }
551
+ if (report.policy !== undefined) {
552
+ lines.push('', `pnpm release-age policy: minimumReleaseAge=${report.policy.minimumReleaseAge}`);
553
+ lines.push(` excluded: ${report.policy.excluded.length === 0 ? 'none' : report.policy.excluded.join(', ')}`);
554
+ }
555
+ if (report.warnings.length > 0) {
556
+ lines.push('', 'Warnings:');
557
+ for (const warning of report.warnings)
558
+ lines.push(` - ${warning}`);
559
+ }
560
+ if (report.findings.length === 0) {
561
+ lines.push('', 'Findings: none');
562
+ }
563
+ else {
564
+ lines.push('', `Findings (${report.findings.length}):`);
565
+ for (const finding of report.findings) {
566
+ lines.push(` [${finding.severity.toUpperCase()}] ${finding.code}: ${finding.summary}`);
567
+ lines.push(` ${finding.detail}`);
568
+ lines.push(` Fix: ${finding.remediation}`);
569
+ }
570
+ }
571
+ lines.push('', `Result: ${report.status === 'blocked' ? 'do not start this profile' : report.status === 'review' ? 'review the evidence before starting' : 'static checks passed'}`);
572
+ return `${lines.join('\n')}\n`;
573
+ }
574
+ /**
575
+ * A short operator-facing result for the common case where the user wants the
576
+ * answer and the next repair, not the complete graph dump.
577
+ */
578
+ export function renderDshProfileCheckSummary(report) {
579
+ const status = report.status.toUpperCase();
580
+ const lines = [
581
+ `DSH profile ${displayPath(report.profile.name)}@${displayPath(report.profile.version)}: ${status}`,
582
+ `Evidence: ${report.dependencyGraph?.nodes.length ?? 0} dependency nodes, ${report.loaderEntries.length} loader rows, ${report.findings.length} finding(s).`,
583
+ 'Scope: static profile files only; no install, plugin execution, DSH start, or Agent/model call.',
584
+ ];
585
+ if (report.findings.length === 0) {
586
+ lines.push('Next: static checks passed; continue with the normal DSH start or dependency monitoring flow.');
587
+ return `${lines.join('\n')}\n`;
588
+ }
589
+ lines.push('', 'Findings:');
590
+ for (const finding of report.findings.slice(0, 5)) {
591
+ lines.push(`- [${finding.severity.toUpperCase()}] ${finding.code}: ${finding.summary}`);
592
+ lines.push(` Why: ${finding.detail}`);
593
+ lines.push(` Fix: ${finding.remediation}`);
594
+ }
595
+ if (report.findings.length > 5)
596
+ lines.push(`- ... ${report.findings.length - 5} more finding(s)`);
597
+ lines.push('', `Next: ${report.status === 'blocked' ? 'do not start this profile until the findings are fixed.' : 'review the findings before starting this profile.'}`);
598
+ return `${lines.join('\n')}\n`;
599
+ }
600
+ //# sourceMappingURL=dsh-profile-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dsh-profile-check.js","sourceRoot":"","sources":["../../src/dsh-profile-check.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"github-advisory.d.ts","sourceRoot":"","sources":["../../src/github-advisory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EAGlB,MAAM,kBAAkB,CAAA;AAiBzB,KAAK,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAE/E,MAAM,WAAW,2BAA2B;IAC1C,wFAAwF;IACxF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B;AAqOD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IAEzC,YAAY,OAAO,GAAE,2BAAgC,EAUpD;YAEa,SAAS;YA2BT,eAAe;IAyBvB,KAAK,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,CAsBtF;CACF"}
1
+ {"version":3,"file":"github-advisory.d.ts","sourceRoot":"","sources":["../../src/github-advisory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EAGlB,MAAM,kBAAkB,CAAA;AAiBzB,KAAK,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAE/E,MAAM,WAAW,2BAA2B;IAC1C,wFAAwF;IACxF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B;AAyOD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IAEzC,YAAY,OAAO,GAAE,2BAAgC,EAUpD;YAEa,SAAS;YA2BT,eAAe;IAyBvB,KAAK,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,CAsBtF;CACF"}