@codyswann/lisa 3.27.0 → 3.28.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/dist/cli/doctor-lisa-owned-artifact-copies.d.ts +23 -0
- package/dist/cli/doctor-lisa-owned-artifact-copies.d.ts.map +1 -0
- package/dist/cli/doctor-lisa-owned-artifact-copies.js +41 -0
- package/dist/cli/doctor-lisa-owned-artifact-copies.js.map +1 -0
- package/dist/cli/doctor-lisa-owned-artifacts.d.ts.map +1 -1
- package/dist/cli/doctor-lisa-owned-artifacts.js +97 -25
- package/dist/cli/doctor-lisa-owned-artifacts.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +1 -0
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** A resolved Lisa-owned artifact copy. */
|
|
2
|
+
interface ResolvedArtifactCopy {
|
|
3
|
+
readonly location: string;
|
|
4
|
+
readonly version: string;
|
|
5
|
+
readonly governs: boolean;
|
|
6
|
+
}
|
|
7
|
+
/** Provenance for an artifact that is reachable from more than one place. */
|
|
8
|
+
export interface MultiCopyArtifact {
|
|
9
|
+
readonly destination: string;
|
|
10
|
+
readonly copies: readonly ResolvedArtifactCopy[];
|
|
11
|
+
readonly disagrees: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Report all resolvable copies for one installed Lisa-owned artifact.
|
|
15
|
+
* @param lisaRoot - Installed Lisa package root
|
|
16
|
+
* @param destination - Project-relative artifact destination
|
|
17
|
+
* @param installed - Bytes currently installed in the project
|
|
18
|
+
* @param sources - Absolute paths of shipped package variants
|
|
19
|
+
* @returns Multi-copy provenance
|
|
20
|
+
*/
|
|
21
|
+
export declare function describeResolvableCopies(lisaRoot: string, destination: string, installed: Buffer, sources: readonly string[]): Promise<MultiCopyArtifact>;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=doctor-lisa-owned-artifact-copies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-lisa-owned-artifact-copies.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-lisa-owned-artifact-copies.ts"],"names":[],"mappings":"AAQA,2CAA2C;AAC3C,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACjD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAWD;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,OAAO,CAAC,iBAAiB,CAAC,CAkB5B"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copy provenance helpers for Lisa-owned doctor artifacts.
|
|
3
|
+
* @module cli/doctor-lisa-owned-artifact-copies
|
|
4
|
+
*/
|
|
5
|
+
import { createHash } from "node:crypto";
|
|
6
|
+
import { readFile } from "node:fs/promises";
|
|
7
|
+
import * as path from "node:path";
|
|
8
|
+
/**
|
|
9
|
+
* Short content identity for a resolved artifact copy.
|
|
10
|
+
* @param bytes - File contents
|
|
11
|
+
* @returns Human-sized content version
|
|
12
|
+
*/
|
|
13
|
+
function artifactVersion(bytes) {
|
|
14
|
+
return `sha256:${createHash("sha256").update(bytes).digest("hex").slice(0, 12)}`;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Report all resolvable copies for one installed Lisa-owned artifact.
|
|
18
|
+
* @param lisaRoot - Installed Lisa package root
|
|
19
|
+
* @param destination - Project-relative artifact destination
|
|
20
|
+
* @param installed - Bytes currently installed in the project
|
|
21
|
+
* @param sources - Absolute paths of shipped package variants
|
|
22
|
+
* @returns Multi-copy provenance
|
|
23
|
+
*/
|
|
24
|
+
export async function describeResolvableCopies(lisaRoot, destination, installed, sources) {
|
|
25
|
+
const shipped = await Promise.all(sources.map(async (source) => [source, await readFile(source)]));
|
|
26
|
+
const copies = [
|
|
27
|
+
{
|
|
28
|
+
location: `project:${destination}`,
|
|
29
|
+
version: artifactVersion(installed),
|
|
30
|
+
governs: true,
|
|
31
|
+
},
|
|
32
|
+
...shipped.map(([source, bytes]) => ({
|
|
33
|
+
location: `package:${path.relative(lisaRoot, source).split(path.sep).join("/")}`,
|
|
34
|
+
version: artifactVersion(bytes),
|
|
35
|
+
governs: false,
|
|
36
|
+
})),
|
|
37
|
+
];
|
|
38
|
+
const versions = new Set(copies.map(copy => copy.version));
|
|
39
|
+
return { destination, copies, disagrees: versions.size > 1 };
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=doctor-lisa-owned-artifact-copies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-lisa-owned-artifact-copies.js","sourceRoot":"","sources":["../../src/cli/doctor-lisa-owned-artifact-copies.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAgBlC;;;;GAIG;AACH,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACnF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,QAAgB,EAChB,WAAmB,EACnB,SAAiB,EACjB,OAA0B;IAE1B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAU,CAAC,CACvE,CAAC;IACF,MAAM,MAAM,GAA2B;QACrC;YACE,QAAQ,EAAE,WAAW,WAAW,EAAE;YAClC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC;YACnC,OAAO,EAAE,IAAI;SACd;QACD,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACnC,QAAQ,EAAE,WAAW,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAChF,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC;YAC/B,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;KACJ,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;AAC/D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-lisa-owned-artifacts.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-lisa-owned-artifacts.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor-lisa-owned-artifacts.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-lisa-owned-artifacts.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAwBnE,wEAAwE;AACxE,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB;AAwHD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAA0B,EACpC,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,aAAa,CAAC,CA8CxB"}
|
|
@@ -25,6 +25,7 @@ import { isLisaOwnedTemplate } from "../core/lisa-owned-templates.js";
|
|
|
25
25
|
import { isLisaSourceRepo } from "../core/self-apply.js";
|
|
26
26
|
import { listFilesRecursive } from "../utils/file-operations.js";
|
|
27
27
|
import { matchesAnyPattern, parseIgnorePatterns, } from "../utils/ignore-patterns.js";
|
|
28
|
+
import { describeResolvableCopies, } from "./doctor-lisa-owned-artifact-copies.js";
|
|
28
29
|
const CHECK_NAME = "Lisa enforcement artifacts current?";
|
|
29
30
|
const COPY_OVERWRITE = "copy-overwrite";
|
|
30
31
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
@@ -145,33 +146,64 @@ export async function checkLisaOwnedArtifacts(targetPath, lisaRoot = defaultLisa
|
|
|
145
146
|
// unless the target's package.json is Lisa itself. A host must not be able to
|
|
146
147
|
// swap a guard for a thin re-export and have doctor call it current.
|
|
147
148
|
const selfHost = await isLisaSourceRepo(targetPath);
|
|
148
|
-
const results = await Promise.all([...shipped].map(async ([destination, sources]) =>
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
149
|
+
const results = await Promise.all([...shipped].map(async ([destination, sources]) => assessArtifact(targetPath, lisaRoot, destination, sources, ignorePatterns, selfHost, ledger)));
|
|
150
|
+
const assessments = results.filter((item) => item !== undefined);
|
|
151
|
+
return summarise(assessments
|
|
152
|
+
.map(item => item.finding)
|
|
153
|
+
.filter((item) => item !== undefined), assessments
|
|
154
|
+
.map(item => item.multiCopy)
|
|
155
|
+
.filter((item) => item !== undefined));
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Assess one installed Lisa-owned artifact destination.
|
|
159
|
+
* @param targetPath - Project path to inspect
|
|
160
|
+
* @param lisaRoot - Installed Lisa package root
|
|
161
|
+
* @param destination - Project-relative artifact destination
|
|
162
|
+
* @param sources - Absolute shipped package variants
|
|
163
|
+
* @param ignorePatterns - Parsed .lisaignore patterns
|
|
164
|
+
* @param selfHost - Whether the target is Lisa's own source repository
|
|
165
|
+
* @param ledger - Known-good hashes, defaulting to Lisa's shipping history
|
|
166
|
+
* @returns Per-artifact assessment, or undefined when no installed copy exists
|
|
167
|
+
*/
|
|
168
|
+
async function assessArtifact(targetPath, lisaRoot, destination, sources, ignorePatterns, selfHost, ledger) {
|
|
169
|
+
const installedPath = path.join(targetPath, destination);
|
|
170
|
+
const installed = await readFile(installedPath).catch(() => undefined);
|
|
171
|
+
const ignored = matchesAnyPattern(destination, ignorePatterns);
|
|
172
|
+
if (installed === undefined) {
|
|
173
|
+
return ignored
|
|
174
|
+
? {
|
|
175
|
+
finding: [destination, "ignored"],
|
|
176
|
+
}
|
|
177
|
+
: undefined;
|
|
178
|
+
}
|
|
179
|
+
const multiCopy = await describeResolvableCopies(lisaRoot, destination, installed, sources);
|
|
180
|
+
if (ignored)
|
|
181
|
+
return withMultiCopy([destination, "ignored"], multiCopy);
|
|
182
|
+
if (await matchesAnyShipped(installed, sources)) {
|
|
183
|
+
return multiCopy === undefined ? undefined : { multiCopy };
|
|
184
|
+
}
|
|
185
|
+
if (selfHost && reExportsShippedTemplate(installed, installedPath, sources)) {
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
188
|
+
const outdated = await isProvablyStale(installed, destination, sources, ledger);
|
|
189
|
+
return withMultiCopy([destination, outdated ? "stale" : "modified"], multiCopy);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Attach optional multi-copy provenance without materialising undefined fields.
|
|
193
|
+
* @param finding - Artifact finding tuple
|
|
194
|
+
* @param multiCopy - Optional multi-copy provenance
|
|
195
|
+
* @returns Artifact assessment
|
|
196
|
+
*/
|
|
197
|
+
function withMultiCopy(finding, multiCopy) {
|
|
198
|
+
return multiCopy === undefined ? { finding } : { finding, multiCopy };
|
|
168
199
|
}
|
|
169
200
|
/**
|
|
170
201
|
* Turn the per-artifact findings into one doctor line.
|
|
171
202
|
* @param findings - Destination paths paired with what was found
|
|
203
|
+
* @param multiCopies - Provenance for artifacts reachable from multiple paths
|
|
172
204
|
* @returns Doctor check result
|
|
173
205
|
*/
|
|
174
|
-
function summarise(findings) {
|
|
206
|
+
function summarise(findings, multiCopies) {
|
|
175
207
|
const pick = (wanted) => findings
|
|
176
208
|
.filter(([, finding]) => finding === wanted)
|
|
177
209
|
.map(([destination]) => destination)
|
|
@@ -179,7 +211,12 @@ function summarise(findings) {
|
|
|
179
211
|
const stale = pick("stale");
|
|
180
212
|
const modified = pick("modified");
|
|
181
213
|
const ignored = pick("ignored");
|
|
182
|
-
|
|
214
|
+
const copyDisagreements = multiCopies.filter(copy => copy.disagrees);
|
|
215
|
+
const copyReports = renderCopyReports(multiCopies);
|
|
216
|
+
const warningFree = stale.length === 0 &&
|
|
217
|
+
modified.length === 0 &&
|
|
218
|
+
copyDisagreements.length === 0;
|
|
219
|
+
if (warningFree) {
|
|
183
220
|
// Named rather than folded into the pass. A guard excluded by
|
|
184
221
|
// `.lisaignore` was never compared, so claiming it matches asserts
|
|
185
222
|
// something no comparison established — and the file it most often hides
|
|
@@ -187,21 +224,56 @@ function summarise(findings) {
|
|
|
187
224
|
return {
|
|
188
225
|
name: CHECK_NAME,
|
|
189
226
|
status: "ok",
|
|
190
|
-
detail: ignored
|
|
191
|
-
? `Enforcement guards match the installed Lisa version; ${ignored.length} not assessed (.lisaignore): ${ignored.join(", ")}`
|
|
192
|
-
: "Enforcement guards match the installed Lisa version",
|
|
227
|
+
detail: renderOkDetail(ignored, copyReports),
|
|
193
228
|
};
|
|
194
229
|
}
|
|
195
230
|
const parts = [
|
|
231
|
+
ignored.length > 0
|
|
232
|
+
? `${ignored.length} not assessed (.lisaignore): ${ignored.join(", ")}`
|
|
233
|
+
: "",
|
|
196
234
|
stale.length > 0
|
|
197
235
|
? `Outdated Lisa-owned guards (run \`npx lisa apply .\` to refresh): ${stale.join(", ")}`
|
|
198
236
|
: "",
|
|
199
237
|
modified.length > 0
|
|
200
238
|
? `Lisa-owned guards edited in this project, so apply will keep yours rather than overwrite them: ${modified.join(", ")}`
|
|
201
239
|
: "",
|
|
240
|
+
copyDisagreements.length > 0
|
|
241
|
+
? `Resolvable Lisa-owned artifact copies disagree: ${renderCopyReports(copyDisagreements, false)}`
|
|
242
|
+
: "",
|
|
202
243
|
].filter(part => part.length > 0);
|
|
203
244
|
return { name: CHECK_NAME, status: "warn", detail: parts.join(". ") };
|
|
204
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* Render the OK detail while preserving the ignored-is-unassessed wording.
|
|
248
|
+
* @param ignored - Paths skipped by .lisaignore
|
|
249
|
+
* @param copyReports - Rendered multi-copy provenance
|
|
250
|
+
* @returns Doctor detail text
|
|
251
|
+
*/
|
|
252
|
+
function renderOkDetail(ignored, copyReports) {
|
|
253
|
+
const suffix = copyReports.length > 0 ? `; ${copyReports}` : "";
|
|
254
|
+
if (ignored.length > 0) {
|
|
255
|
+
return `Enforcement guards match the installed Lisa version; ${ignored.length} not assessed (.lisaignore): ${ignored.join(", ")}${suffix}`;
|
|
256
|
+
}
|
|
257
|
+
return `Enforcement guards match the installed Lisa version${suffix}`;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Render copy provenance in one operator-readable fragment.
|
|
261
|
+
* @param multiCopies - Multi-copy artifact reports
|
|
262
|
+
* @param includeHeading - Include the generic provenance heading
|
|
263
|
+
* @returns Detail text for multi-copy provenance
|
|
264
|
+
*/
|
|
265
|
+
function renderCopyReports(multiCopies, includeHeading = true) {
|
|
266
|
+
if (multiCopies.length === 0)
|
|
267
|
+
return "";
|
|
268
|
+
const reports = multiCopies
|
|
269
|
+
.map(artifact => `${artifact.destination} governed by ${artifact.copies.find(copy => copy.governs)?.location ?? "unknown"} first (${artifact.copies
|
|
270
|
+
.map(copy => `${copy.location}@${copy.version}${copy.governs ? " governs" : ""}`)
|
|
271
|
+
.join(", ")})`)
|
|
272
|
+
.join("; ");
|
|
273
|
+
return includeHeading
|
|
274
|
+
? `Resolvable Lisa-owned artifact copies: ${reports}`
|
|
275
|
+
: reports;
|
|
276
|
+
}
|
|
205
277
|
/**
|
|
206
278
|
* Whether a differing installed guard is genuinely behind Lisa's.
|
|
207
279
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-lisa-owned-artifacts.js","sourceRoot":"","sources":["../../src/cli/doctor-lisa-owned-artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor-lisa-owned-artifacts.js","sourceRoot":"","sources":["../../src/cli/doctor-lisa-owned-artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAw0EpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAw0EpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAmqOjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
|
|
@@ -7025,6 +7025,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7025
7025
|
"src/cli/doctor-learnings-ledger.ts": true,
|
|
7026
7026
|
"src/cli/doctor-learnings-merge-driver.ts": true,
|
|
7027
7027
|
"src/cli/doctor-legacy-overlay.ts": true,
|
|
7028
|
+
"src/cli/doctor-lisa-owned-artifact-copies.ts": true,
|
|
7028
7029
|
"src/cli/doctor-lisa-owned-artifacts.ts": true,
|
|
7029
7030
|
"src/cli/doctor-monitor-thresholds.ts": true,
|
|
7030
7031
|
"src/cli/doctor-readiness-action-pins.ts": true,
|