@design-intelligence/ghost 0.23.0 → 0.24.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 +35 -29
- package/dist/commands/checks-command.js +3 -3
- package/dist/commands/checks-command.js.map +1 -1
- package/dist/commands/command-discovery.d.ts.map +1 -1
- package/dist/commands/command-discovery.js +5 -5
- package/dist/commands/command-discovery.js.map +1 -1
- package/dist/commands/export-command.d.ts.map +1 -1
- package/dist/commands/export-command.js +10 -10
- package/dist/commands/export-command.js.map +1 -1
- package/dist/commands/fingerprint-commands.d.ts +2 -2
- package/dist/commands/fingerprint-commands.d.ts.map +1 -1
- package/dist/commands/fingerprint-commands.js +7 -7
- package/dist/commands/fingerprint-commands.js.map +1 -1
- package/dist/commands/gather-command.d.ts.map +1 -1
- package/dist/commands/gather-command.js +82 -19
- package/dist/commands/gather-command.js.map +1 -1
- package/dist/commands/init-command.d.ts.map +1 -1
- package/dist/commands/init-command.js +6 -6
- package/dist/commands/init-command.js.map +1 -1
- package/dist/commands/pull-command.js +18 -8
- package/dist/commands/pull-command.js.map +1 -1
- package/dist/commands/pulse-command.js +6 -6
- package/dist/commands/pulse-command.js.map +1 -1
- package/dist/commands/review-command.js +7 -7
- package/dist/commands/review-command.js.map +1 -1
- package/dist/commands/skill-command.js +2 -2
- package/dist/fingerprint.d.ts +2 -1
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +1 -0
- package/dist/fingerprint.js.map +1 -1
- package/dist/ghost-core/catalog/assemble.d.ts.map +1 -1
- package/dist/ghost-core/catalog/assemble.js +2 -1
- package/dist/ghost-core/catalog/assemble.js.map +1 -1
- package/dist/ghost-core/catalog/menu.d.ts +6 -4
- package/dist/ghost-core/catalog/menu.d.ts.map +1 -1
- package/dist/ghost-core/catalog/menu.js +1 -0
- package/dist/ghost-core/catalog/menu.js.map +1 -1
- package/dist/ghost-core/catalog/types.d.ts +4 -2
- package/dist/ghost-core/catalog/types.d.ts.map +1 -1
- package/dist/ghost-core/check/index.d.ts +1 -1
- package/dist/ghost-core/check/index.js +1 -1
- package/dist/ghost-core/check/lint.d.ts +2 -2
- package/dist/ghost-core/check/lint.js +2 -2
- package/dist/ghost-core/check/load.d.ts +1 -1
- package/dist/ghost-core/check/load.js +3 -3
- package/dist/ghost-core/check/types.d.ts +3 -3
- package/dist/ghost-core/index.d.ts +9 -3
- package/dist/ghost-core/index.d.ts.map +1 -1
- package/dist/ghost-core/index.js +6 -2
- package/dist/ghost-core/index.js.map +1 -1
- package/dist/ghost-core/markdown.d.ts +1 -1
- package/dist/ghost-core/markdown.js +1 -1
- package/dist/ghost-core/node/index.d.ts +1 -1
- package/dist/ghost-core/node/index.d.ts.map +1 -1
- package/dist/ghost-core/node/index.js +1 -1
- package/dist/ghost-core/node/index.js.map +1 -1
- package/dist/ghost-core/node/schema.js +1 -1
- package/dist/ghost-core/node/steering.d.ts +1 -0
- package/dist/ghost-core/node/steering.d.ts.map +1 -1
- package/dist/ghost-core/node/steering.js +4 -1
- package/dist/ghost-core/node/steering.js.map +1 -1
- package/dist/ghost-core/node/types.d.ts +4 -5
- package/dist/ghost-core/node/types.d.ts.map +1 -1
- package/dist/ghost-core/package-manifest.d.ts +23 -13
- package/dist/ghost-core/package-manifest.d.ts.map +1 -1
- package/dist/ghost-core/package-manifest.js +20 -7
- package/dist/ghost-core/package-manifest.js.map +1 -1
- package/dist/ghost-core/skill-bundle-loader.d.ts +1 -1
- package/dist/ghost-core/skill-bundle-loader.js +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/init-payloads/median/cliche.median.md +6 -6
- package/dist/init-payloads/median/median-tells.md +1 -1
- package/dist/init-payloads/skeleton/brand.md +4 -3
- package/dist/init-payloads/skeleton/glossary.md +1 -1
- package/dist/init-payloads/vessel-light/anti-goal.median.md +6 -6
- package/dist/init-payloads/vessel-light/checks/motion-restraint.md +1 -1
- package/dist/init-payloads/vessel-light/manifest.yml +1 -1
- package/dist/init-payloads/vessel-light/materials/ref/composition.form.html +2 -2
- package/dist/init-payloads/vessel-light/materials/ref/composition.overlay.html +3 -3
- package/dist/package.d.ts +7 -0
- package/dist/package.d.ts.map +1 -0
- package/dist/package.js +4 -0
- package/dist/package.js.map +1 -0
- package/dist/review/resolve.js +1 -1
- package/dist/review/resolve.js.map +1 -1
- package/dist/review/review-packet.d.ts +5 -3
- package/dist/review/review-packet.d.ts.map +1 -1
- package/dist/review/review-packet.js +12 -11
- package/dist/review/review-packet.js.map +1 -1
- package/dist/scan/constants.d.ts +6 -2
- package/dist/scan/constants.d.ts.map +1 -1
- package/dist/scan/constants.js +8 -4
- package/dist/scan/constants.js.map +1 -1
- package/dist/scan/file-kind.d.ts +1 -1
- package/dist/scan/file-kind.d.ts.map +1 -1
- package/dist/scan/file-kind.js +11 -11
- package/dist/scan/file-kind.js.map +1 -1
- package/dist/scan/fingerprint-package-lint.d.ts +3 -1
- package/dist/scan/fingerprint-package-lint.d.ts.map +1 -1
- package/dist/scan/fingerprint-package-lint.js +14 -12
- package/dist/scan/fingerprint-package-lint.js.map +1 -1
- package/dist/scan/fingerprint-package-loader.d.ts +7 -3
- package/dist/scan/fingerprint-package-loader.d.ts.map +1 -1
- package/dist/scan/fingerprint-package-loader.js +10 -6
- package/dist/scan/fingerprint-package-loader.js.map +1 -1
- package/dist/scan/fingerprint-package.d.ts +30 -14
- package/dist/scan/fingerprint-package.d.ts.map +1 -1
- package/dist/scan/fingerprint-package.js +17 -9
- package/dist/scan/fingerprint-package.js.map +1 -1
- package/dist/scan/index.d.ts +3 -1
- package/dist/scan/index.d.ts.map +1 -1
- package/dist/scan/index.js +3 -1
- package/dist/scan/index.js.map +1 -1
- package/dist/scan/tarball.d.ts +2 -2
- package/dist/scan/tarball.js +3 -3
- package/dist/scan/tarball.js.map +1 -1
- package/dist/scan/templates.d.ts +1 -1
- package/dist/scan/templates.d.ts.map +1 -1
- package/dist/scan/templates.js +15 -11
- package/dist/scan/templates.js.map +1 -1
- package/dist/skill-bundle/SKILL.md +39 -31
- package/dist/skill-bundle/references/adapting-a-starter.md +11 -11
- package/dist/skill-bundle/references/authoring-scenarios.md +33 -30
- package/dist/skill-bundle/references/blocks.md +19 -20
- package/dist/skill-bundle/references/brief.md +13 -11
- package/dist/skill-bundle/references/capture.md +65 -37
- package/dist/skill-bundle/references/concrete-tiers.md +7 -7
- package/dist/skill-bundle/references/distill.md +204 -0
- package/dist/skill-bundle/references/making.md +113 -0
- package/dist/skill-bundle/references/recall.md +11 -7
- package/dist/skill-bundle/references/schema.md +16 -12
- package/dist/skill-bundle/references/self-check.md +12 -12
- package/dist/skill-bundle/references/steering-audit.md +19 -9
- package/package.json +7 -3
|
@@ -4,16 +4,16 @@ import { resolveGitRoot } from "../scan/package-paths.js";
|
|
|
4
4
|
import { resolveBaseline } from "./baseline.js";
|
|
5
5
|
import { runProbe } from "./probes.js";
|
|
6
6
|
import { resolveReview } from "./resolve.js";
|
|
7
|
-
export async function buildReviewPacket(
|
|
7
|
+
export async function buildReviewPacket(ghostPackage, diffText, options = {}) {
|
|
8
8
|
const cwd = options.cwd ?? process.cwd();
|
|
9
|
-
const resolution = resolveReview(
|
|
9
|
+
const resolution = resolveReview(ghostPackage.catalog, ghostPackage.checks, diffText, {
|
|
10
10
|
repoRoot: await resolveGitRoot(cwd),
|
|
11
11
|
packageDir: options.packageDir ?? join(cwd, ".ghost"),
|
|
12
12
|
materialsDir: GHOST_MATERIALS_DIR,
|
|
13
13
|
});
|
|
14
|
-
const materialNodes = resolution.materialNodes.map((matched) => materialNodeFromMatch(
|
|
14
|
+
const materialNodes = resolution.materialNodes.map((matched) => materialNodeFromMatch(ghostPackage, matched));
|
|
15
15
|
const checks = await Promise.all(resolution.offeredChecks.map(async (offered) => {
|
|
16
|
-
const check =
|
|
16
|
+
const check = ghostPackage.checks.get(offered.id);
|
|
17
17
|
const probeCommand = check?.doc.frontmatter.probe;
|
|
18
18
|
const probe = options.runProbes !== false && probeCommand !== undefined
|
|
19
19
|
? await runProbe(probeCommand, {
|
|
@@ -28,13 +28,14 @@ export async function buildReviewPacket(fingerprint, diffText, options = {}) {
|
|
|
28
28
|
via: offered.via,
|
|
29
29
|
prose: check?.doc.body.trim() ?? "",
|
|
30
30
|
baseline: check?.references
|
|
31
|
-
.map((ref) => resolveBaseline(ref,
|
|
31
|
+
.map((ref) => resolveBaseline(ref, ghostPackage.catalog))
|
|
32
32
|
.filter((ref) => ref !== null) ?? [],
|
|
33
33
|
...(probe ? { probe } : {}),
|
|
34
34
|
};
|
|
35
35
|
}));
|
|
36
36
|
return {
|
|
37
|
-
|
|
37
|
+
packageId: ghostPackage.manifest.id,
|
|
38
|
+
fingerprintId: ghostPackage.manifest.id,
|
|
38
39
|
touchedFiles: resolution.touchedFiles.map((file) => file.path),
|
|
39
40
|
materialNodes,
|
|
40
41
|
checks,
|
|
@@ -42,8 +43,8 @@ export async function buildReviewPacket(fingerprint, diffText, options = {}) {
|
|
|
42
43
|
diff: diffText,
|
|
43
44
|
};
|
|
44
45
|
}
|
|
45
|
-
function materialNodeFromMatch(
|
|
46
|
-
const node =
|
|
46
|
+
function materialNodeFromMatch(ghostPackage, matched) {
|
|
47
|
+
const node = ghostPackage.catalog.nodes.get(matched.id);
|
|
47
48
|
return {
|
|
48
49
|
id: node.id,
|
|
49
50
|
...(node.kind !== undefined ? { kind: node.kind } : {}),
|
|
@@ -58,8 +59,8 @@ function materialNodeFromMatch(fingerprint, matched) {
|
|
|
58
59
|
}
|
|
59
60
|
export function formatReviewPacket(packet) {
|
|
60
61
|
const out = [];
|
|
61
|
-
out.push(`#
|
|
62
|
-
out.push("You are reviewing a diff against
|
|
62
|
+
out.push(`# ghost review — package \`${packet.packageId}\``, "");
|
|
63
|
+
out.push("You are reviewing a diff against ghost package guidance. The command has", "assembled the touched files, matched material-backed nodes, offered", "checks, and optional probe evidence. Probes are repo-owned shell commands", "with the same trust class as npm scripts; git review is the boundary.", "Weigh which checks apply. Do not invent obligations that are not grounded", "in the ghost package guidance or check text.", "");
|
|
63
64
|
if (packet.touchedFiles.length > 0) {
|
|
64
65
|
out.push("## Touched files");
|
|
65
66
|
for (const file of packet.touchedFiles)
|
|
@@ -104,7 +105,7 @@ export function formatReviewPacket(packet) {
|
|
|
104
105
|
out.push("");
|
|
105
106
|
}
|
|
106
107
|
if (check.probe) {
|
|
107
|
-
out.push("Probe evidence (shell run by
|
|
108
|
+
out.push("Probe evidence (shell run by ghost; evidence only, not a pass/fail verdict):", `- command: \`${check.probe.command}\``, `- exit code: ${check.probe.exitCode ?? "unknown"}${check.probe.timedOut ? " (timed out)" : ""}`, "- stdout:", "```", check.probe.stdout.trimEnd(), "```", "- stderr:", "```", check.probe.stderr.trimEnd(), "```", "");
|
|
108
109
|
}
|
|
109
110
|
out.push(check.prose, "");
|
|
110
111
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-packet.js","sourceRoot":"","sources":["../../src/review/review-packet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAsB,eAAe,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAsB,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"review-packet.js","sourceRoot":"","sources":["../../src/review/review-packet.ts"],"names":[],"mappings":"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"}
|
package/dist/scan/constants.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
/** Canonical directory for
|
|
1
|
+
/** Canonical directory for a ghost package. */
|
|
2
|
+
export declare const GHOST_PACKAGE_DIR = ".ghost";
|
|
3
|
+
/** ghost package manifest filename. */
|
|
4
|
+
export declare const GHOST_MANIFEST_FILENAME = "manifest.yml";
|
|
5
|
+
/** @deprecated Use `GHOST_PACKAGE_DIR`. */
|
|
2
6
|
export declare const FINGERPRINT_PACKAGE_DIR = ".ghost";
|
|
3
|
-
/**
|
|
7
|
+
/** @deprecated Use `GHOST_MANIFEST_FILENAME`. */
|
|
4
8
|
export declare const FINGERPRINT_MANIFEST_FILENAME = "manifest.yml";
|
|
5
9
|
/** Reserved package-root glossary filename. */
|
|
6
10
|
export declare const GHOST_GLOSSARY_FILENAME = "glossary.md";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/scan/constants.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/scan/constants.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAE1C,uCAAuC;AACvC,eAAO,MAAM,uBAAuB,iBAAiB,CAAC;AAEtD,2CAA2C;AAC3C,eAAO,MAAM,uBAAuB,WAAoB,CAAC;AAEzD,iDAAiD;AACjD,eAAO,MAAM,6BAA6B,iBAA0B,CAAC;AAErE,+CAA+C;AAC/C,eAAO,MAAM,uBAAuB,gBAAgB,CAAC;AAErD,6DAA6D;AAC7D,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAE/C,sDAAsD;AACtD,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C,gEAAgE;AAChE,eAAO,MAAM,4BAA4B,WAAW,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,eAAe,CAAC;AACxD,eAAO,MAAM,8BAA8B,kBAAkB,CAAC;AAC9D,eAAO,MAAM,gCAAgC,oBAAoB,CAAC"}
|
package/dist/scan/constants.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
/** Canonical directory for
|
|
2
|
-
export const
|
|
3
|
-
/**
|
|
4
|
-
export const
|
|
1
|
+
/** Canonical directory for a ghost package. */
|
|
2
|
+
export const GHOST_PACKAGE_DIR = ".ghost";
|
|
3
|
+
/** ghost package manifest filename. */
|
|
4
|
+
export const GHOST_MANIFEST_FILENAME = "manifest.yml";
|
|
5
|
+
/** @deprecated Use `GHOST_PACKAGE_DIR`. */
|
|
6
|
+
export const FINGERPRINT_PACKAGE_DIR = GHOST_PACKAGE_DIR;
|
|
7
|
+
/** @deprecated Use `GHOST_MANIFEST_FILENAME`. */
|
|
8
|
+
export const FINGERPRINT_MANIFEST_FILENAME = GHOST_MANIFEST_FILENAME;
|
|
5
9
|
/** Reserved package-root glossary filename. */
|
|
6
10
|
export const GHOST_GLOSSARY_FILENAME = "glossary.md";
|
|
7
11
|
/** Reserved package-root directory for bundled materials. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/scan/constants.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/scan/constants.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAE1C,uCAAuC;AACvC,MAAM,CAAC,MAAM,uBAAuB,GAAG,cAAc,CAAC;AAEtD,2CAA2C;AAC3C,MAAM,CAAC,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;AAEzD,iDAAiD;AACjD,MAAM,CAAC,MAAM,6BAA6B,GAAG,uBAAuB,CAAC;AAErE,+CAA+C;AAC/C,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC;AAErD,6DAA6D;AAC7D,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAE/C,sDAAsD;AACtD,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAE/C,gEAAgE;AAChE,MAAM,CAAC,MAAM,4BAA4B,GAAG,QAAQ,CAAC;AAErD;;;;GAIG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,YAAY,CAAC;AACxD,MAAM,CAAC,MAAM,8BAA8B,GAAG,eAAe,CAAC;AAC9D,MAAM,CAAC,MAAM,gCAAgC,GAAG,iBAAiB,CAAC"}
|
package/dist/scan/file-kind.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { LintReport } from "./lint.js";
|
|
2
|
-
export type DetectedFileKind = "
|
|
2
|
+
export type DetectedFileKind = "package-manifest" | "check" | "material" | "node" | "unsupported";
|
|
3
3
|
/**
|
|
4
4
|
* Decide whether a file is a bundle artifact. The manifest routes to its
|
|
5
5
|
* artifact linter; files under a root `materials/` directory are material
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-kind.d.ts","sourceRoot":"","sources":["../../src/scan/file-kind.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,MAAM,gBAAgB,GACxB,
|
|
1
|
+
{"version":3,"file":"file-kind.d.ts","sourceRoot":"","sources":["../../src/scan/file-kind.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,MAAM,gBAAgB,GACxB,kBAAkB,GAClB,OAAO,GACP,UAAU,GACV,MAAM,GACN,aAAa,CAAC;AAElB;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAyB1E;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE,MAAM,GACV,UAAU,CAUZ"}
|
package/dist/scan/file-kind.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { parse as parseYaml } from "yaml";
|
|
2
|
-
import {
|
|
2
|
+
import { GhostPackageManifestSchema, lintGhostCheck, lintGhostNode, } from "#ghost-core";
|
|
3
3
|
import { GHOST_MATERIALS_DIR } from "./constants.js";
|
|
4
4
|
/**
|
|
5
5
|
* Decide whether a file is a bundle artifact. The manifest routes to its
|
|
@@ -12,10 +12,10 @@ export function detectFileKind(path, raw) {
|
|
|
12
12
|
const lowerPath = path.toLowerCase();
|
|
13
13
|
const filename = lowerPath.split(/[\\/]/).pop() ?? lowerPath;
|
|
14
14
|
if (filename === "manifest.yml") {
|
|
15
|
-
return "
|
|
15
|
+
return "package-manifest";
|
|
16
16
|
}
|
|
17
17
|
if (filename === "manifest.yaml") {
|
|
18
|
-
return "
|
|
18
|
+
return "package-manifest";
|
|
19
19
|
}
|
|
20
20
|
if (new RegExp(`(^|[\\\\/])${GHOST_MATERIALS_DIR}[\\\\/]`).test(lowerPath)) {
|
|
21
21
|
return "material";
|
|
@@ -29,14 +29,14 @@ export function detectFileKind(path, raw) {
|
|
|
29
29
|
if (filename.endsWith(".md")) {
|
|
30
30
|
return "node";
|
|
31
31
|
}
|
|
32
|
-
if (/^\s*schema:\s*ghost\.fingerprint-package\/v1\b/m.test(raw)) {
|
|
33
|
-
return "
|
|
32
|
+
if (/^\s*schema:\s*ghost\.(?:package|fingerprint-package)\/v1\b/m.test(raw)) {
|
|
33
|
+
return "package-manifest";
|
|
34
34
|
}
|
|
35
35
|
return "unsupported";
|
|
36
36
|
}
|
|
37
37
|
export function lintDetectedFileKind(kind, raw) {
|
|
38
|
-
return kind === "
|
|
39
|
-
?
|
|
38
|
+
return kind === "package-manifest"
|
|
39
|
+
? lintPackageManifestFile(raw)
|
|
40
40
|
: kind === "check"
|
|
41
41
|
? lintGhostCheck(raw)
|
|
42
42
|
: kind === "material"
|
|
@@ -48,12 +48,12 @@ export function lintDetectedFileKind(kind, raw) {
|
|
|
48
48
|
function emptyLintReport() {
|
|
49
49
|
return { issues: [], errors: 0, warnings: 0, info: 0 };
|
|
50
50
|
}
|
|
51
|
-
function
|
|
51
|
+
function lintPackageManifestFile(raw) {
|
|
52
52
|
try {
|
|
53
|
-
return zodLintReport(
|
|
53
|
+
return zodLintReport(GhostPackageManifestSchema.safeParse(parseYaml(raw)));
|
|
54
54
|
}
|
|
55
55
|
catch (err) {
|
|
56
|
-
return yamlErrorReport("
|
|
56
|
+
return yamlErrorReport("package-manifest-not-yaml", "manifest.yml", err);
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
function zodLintReport(result) {
|
|
@@ -79,7 +79,7 @@ function lintUnsupportedFile() {
|
|
|
79
79
|
{
|
|
80
80
|
severity: "error",
|
|
81
81
|
rule: "unsupported-artifact",
|
|
82
|
-
message: "File is not a recognized
|
|
82
|
+
message: "File is not a recognized ghost artifact. Use manifest.yml, a checks/*.md check, or a *.md node.",
|
|
83
83
|
},
|
|
84
84
|
],
|
|
85
85
|
errors: 1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-kind.js","sourceRoot":"","sources":["../../src/scan/file-kind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"file-kind.js","sourceRoot":"","sources":["../../src/scan/file-kind.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,5 +4,7 @@ import type { LintReport } from "./lint.js";
|
|
|
4
4
|
* deterministic kind-prefix lint enabled by glossary.md. The catalog is flat;
|
|
5
5
|
* loading collects malformed nodes so they can be surfaced as structured issues.
|
|
6
6
|
*/
|
|
7
|
-
export declare function
|
|
7
|
+
export declare function lintGhostPackage(dirArg: string | undefined, cwd?: string): Promise<LintReport>;
|
|
8
|
+
/** @deprecated Use `lintGhostPackage`. */
|
|
9
|
+
export declare const lintFingerprintPackage: typeof lintGhostPackage;
|
|
8
10
|
//# sourceMappingURL=fingerprint-package-lint.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprint-package-lint.d.ts","sourceRoot":"","sources":["../../src/scan/fingerprint-package-lint.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvD;;;;GAIG;AACH,wBAAsB,
|
|
1
|
+
{"version":3,"file":"fingerprint-package-lint.d.ts","sourceRoot":"","sources":["../../src/scan/fingerprint-package-lint.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,GAAG,SAAgB,GAClB,OAAO,CAAC,UAAU,CAAC,CA4DrB;AA+QD,0CAA0C;AAC1C,eAAO,MAAM,sBAAsB,yBAAmB,CAAC"}
|
|
@@ -3,29 +3,29 @@ import { relative, resolve } from "node:path";
|
|
|
3
3
|
import { classifyMaterialLocator, closestIds, expandLocalMaterialLocator, extractSkeletonSections, listBundledMaterialFiles, materialLocatorClaimsPath, parseGlossary, parseSourceRef, sliceNodeSection, } from "#ghost-core";
|
|
4
4
|
import { isMissingPathError } from "../internal/fs.js";
|
|
5
5
|
import { GHOST_GLOSSARY_FILENAME, GHOST_MATERIALS_DIR } from "./constants.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { resolveGhostPackage, } from "./fingerprint-package.js";
|
|
7
|
+
import { lintGhostPackageManifest, loadGhostPackage, } from "./fingerprint-package-loader.js";
|
|
8
8
|
import { resolveGitRoot } from "./package-paths.js";
|
|
9
9
|
/**
|
|
10
10
|
* `validate` for a package: artifact shape, per-node validity, and the
|
|
11
11
|
* deterministic kind-prefix lint enabled by glossary.md. The catalog is flat;
|
|
12
12
|
* loading collects malformed nodes so they can be surfaced as structured issues.
|
|
13
13
|
*/
|
|
14
|
-
export async function
|
|
15
|
-
const paths =
|
|
14
|
+
export async function lintGhostPackage(dirArg, cwd = process.cwd()) {
|
|
15
|
+
const paths = resolveGhostPackage(dirArg, cwd);
|
|
16
16
|
const issues = [];
|
|
17
17
|
const manifestRaw = await readRequired(paths.manifest, "manifest.yml", issues);
|
|
18
18
|
if (manifestRaw !== undefined) {
|
|
19
19
|
// shape pass: manifest well-formed.
|
|
20
20
|
const beforeManifestErrors = issues.filter((issue) => issue.severity === "error").length;
|
|
21
|
-
|
|
21
|
+
lintGhostPackageManifest(manifestRaw, issues);
|
|
22
22
|
const manifestHasErrors = issues.filter((issue) => issue.severity === "error").length >
|
|
23
23
|
beforeManifestErrors;
|
|
24
24
|
if (manifestHasErrors)
|
|
25
25
|
return finalize(issues);
|
|
26
26
|
// catalog pass: load + validate the node catalog.
|
|
27
27
|
try {
|
|
28
|
-
const { manifest, catalog, checks, invalid, invalidChecks } = await
|
|
28
|
+
const { manifest, catalog, checks, invalid, invalidChecks } = await loadGhostPackage(paths);
|
|
29
29
|
// node pass: a node that failed its own schema was skipped while loading
|
|
30
30
|
// the catalog; surface it here so a malformed node is loud, not silent.
|
|
31
31
|
issues.push(...invalid.map((entry) => ({
|
|
@@ -84,7 +84,7 @@ function lintCover(coverId, catalog, issues) {
|
|
|
84
84
|
issues.push({
|
|
85
85
|
severity: "warning",
|
|
86
86
|
rule: "cover-undeclared",
|
|
87
|
-
message: 'no cover declared in manifest.yml —
|
|
87
|
+
message: 'no cover declared in manifest.yml — ghost packages steer better with one node guaranteed in context; add "cover: <node-id>"',
|
|
88
88
|
path: "manifest.yml.cover",
|
|
89
89
|
});
|
|
90
90
|
return;
|
|
@@ -133,8 +133,8 @@ async function lintKindPrefixes(paths, catalog, issues) {
|
|
|
133
133
|
/**
|
|
134
134
|
* The `description` is a node's entire retrieval payload: `gather` lists it as
|
|
135
135
|
* the text the agent selects against. A node without one renders as a bare id
|
|
136
|
-
* and
|
|
137
|
-
*
|
|
136
|
+
* and cannot show when it applies, so `validate` makes that loud. Warning,
|
|
137
|
+
* not error: an undescribed node is legal, just undiscoverable.
|
|
138
138
|
*/
|
|
139
139
|
function lintNodeDescriptions(catalog, issues) {
|
|
140
140
|
for (const node of catalog.nodes.values()) {
|
|
@@ -144,7 +144,7 @@ function lintNodeDescriptions(catalog, issues) {
|
|
|
144
144
|
issues.push({
|
|
145
145
|
severity: "warning",
|
|
146
146
|
rule: "node-description-missing",
|
|
147
|
-
message: "node has no `description`, so `gather` lists it as a bare id
|
|
147
|
+
message: "node has no `description`, so `gather` lists it as a bare id without applicability context; add a one-line description of what this guidance governs, when it applies, and what it contributes",
|
|
148
148
|
path: `${node.id}.md`,
|
|
149
149
|
});
|
|
150
150
|
}
|
|
@@ -227,7 +227,7 @@ function lintCheckReferences(catalog, checks, issues) {
|
|
|
227
227
|
issues.push({
|
|
228
228
|
severity: "warning",
|
|
229
229
|
rule: "check-reference-unresolved",
|
|
230
|
-
message: `check reference '${raw}' does not resolve to a
|
|
230
|
+
message: `check reference '${raw}' does not resolve to a ghost package node — if you pruned this rule from the node, delete its paired flag in the check too`,
|
|
231
231
|
path: `checks/${check.id}.md.references`,
|
|
232
232
|
});
|
|
233
233
|
continue;
|
|
@@ -267,12 +267,14 @@ async function readRequired(path, label, issues) {
|
|
|
267
267
|
issues.push({
|
|
268
268
|
severity: "error",
|
|
269
269
|
rule: "package-artifact-missing",
|
|
270
|
-
message: `
|
|
270
|
+
message: `ghost package is missing ${label}.`,
|
|
271
271
|
path: label,
|
|
272
272
|
});
|
|
273
273
|
return undefined;
|
|
274
274
|
}
|
|
275
275
|
}
|
|
276
|
+
/** @deprecated Use `lintGhostPackage`. */
|
|
277
|
+
export const lintFingerprintPackage = lintGhostPackage;
|
|
276
278
|
function finalize(issues) {
|
|
277
279
|
return {
|
|
278
280
|
issues,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprint-package-lint.js","sourceRoot":"","sources":["../../src/scan/fingerprint-package-lint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,0BAA0B,EAC1B,uBAAuB,EAEvB,wBAAwB,EACxB,yBAAyB,EACzB,aAAa,EACb,cAAc,EACd,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAEL,
|
|
1
|
+
{"version":3,"file":"fingerprint-package-lint.js","sourceRoot":"","sources":["../../src/scan/fingerprint-package-lint.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { GhostPackagePaths, LoadedGhostPackage } from "./fingerprint-package.js";
|
|
2
2
|
import type { LintIssue } from "./lint.js";
|
|
3
|
-
export declare function
|
|
4
|
-
export declare function
|
|
3
|
+
export declare function loadGhostPackage(paths: GhostPackagePaths): Promise<LoadedGhostPackage>;
|
|
4
|
+
export declare function lintGhostPackageManifest(raw: string, issues: LintIssue[]): void;
|
|
5
|
+
/** @deprecated Use `loadGhostPackage`. */
|
|
6
|
+
export declare const loadFingerprintPackage: typeof loadGhostPackage;
|
|
7
|
+
/** @deprecated Use `lintGhostPackageManifest`. */
|
|
8
|
+
export declare const lintFingerprintPackageManifest: typeof lintGhostPackageManifest;
|
|
5
9
|
//# sourceMappingURL=fingerprint-package-loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprint-package-loader.d.ts","sourceRoot":"","sources":["../../src/scan/fingerprint-package-loader.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"fingerprint-package-loader.d.ts","sourceRoot":"","sources":["../../src/scan/fingerprint-package-loader.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,kBAAkB,CAAC,CA8B7B;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,SAAS,EAAE,GAClB,IAAI,CAiBN;AAmBD,0CAA0C;AAC1C,eAAO,MAAM,sBAAsB,yBAAmB,CAAC;AAEvD,kDAAkD;AAClD,eAAO,MAAM,8BAA8B,iCAA2B,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
2
|
import { parse as parseYaml } from "yaml";
|
|
3
|
-
import { assembleCatalog,
|
|
3
|
+
import { assembleCatalog, GhostPackageManifestSchema, UsageError, } from "#ghost-core";
|
|
4
4
|
import { isMissingPathError } from "../internal/fs.js";
|
|
5
5
|
import { loadCheckFiles } from "./check-files.js";
|
|
6
6
|
import { loadNodeFiles } from "./node-files.js";
|
|
7
|
-
export async function
|
|
7
|
+
export async function loadGhostPackage(paths) {
|
|
8
8
|
let manifestRaw;
|
|
9
9
|
try {
|
|
10
10
|
manifestRaw = await readFile(paths.manifest, "utf-8");
|
|
@@ -12,7 +12,7 @@ export async function loadFingerprintPackage(paths) {
|
|
|
12
12
|
catch (err) {
|
|
13
13
|
// A missing package is a usage error (run `ghost init`), not a crash.
|
|
14
14
|
if (isMissingPathError(err)) {
|
|
15
|
-
throw new UsageError(`No
|
|
15
|
+
throw new UsageError(`No ghost package found at ${paths.packageDir} (expected manifest.yml). Run \`ghost init\` or pass --package <dir>.`);
|
|
16
16
|
}
|
|
17
17
|
throw err;
|
|
18
18
|
}
|
|
@@ -32,11 +32,11 @@ export async function loadFingerprintPackage(paths) {
|
|
|
32
32
|
invalidChecks: checkFiles.invalid,
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
|
-
export function
|
|
35
|
+
export function lintGhostPackageManifest(raw, issues) {
|
|
36
36
|
const manifest = parseYamlSafe(raw, "manifest.yml", issues);
|
|
37
37
|
if (manifest === undefined)
|
|
38
38
|
return;
|
|
39
|
-
const manifestResult =
|
|
39
|
+
const manifestResult = GhostPackageManifestSchema.safeParse(manifest);
|
|
40
40
|
if (!manifestResult.success) {
|
|
41
41
|
issues.push(...manifestResult.error.issues.map((issue) => ({
|
|
42
42
|
severity: "error",
|
|
@@ -51,7 +51,7 @@ export function lintFingerprintPackageManifest(raw, issues) {
|
|
|
51
51
|
}
|
|
52
52
|
function parseManifest(raw, label) {
|
|
53
53
|
const parsed = parseYamlStrict(raw, label);
|
|
54
|
-
return
|
|
54
|
+
return GhostPackageManifestSchema.parse(parsed);
|
|
55
55
|
}
|
|
56
56
|
function parseYamlStrict(raw, label) {
|
|
57
57
|
try {
|
|
@@ -61,6 +61,10 @@ function parseYamlStrict(raw, label) {
|
|
|
61
61
|
throw new Error(`${label} is not valid YAML: ${err instanceof Error ? err.message : String(err)}`);
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
|
+
/** @deprecated Use `loadGhostPackage`. */
|
|
65
|
+
export const loadFingerprintPackage = loadGhostPackage;
|
|
66
|
+
/** @deprecated Use `lintGhostPackageManifest`. */
|
|
67
|
+
export const lintFingerprintPackageManifest = lintGhostPackageManifest;
|
|
64
68
|
function parseYamlSafe(raw, label, issues) {
|
|
65
69
|
try {
|
|
66
70
|
return parseYaml(raw);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprint-package-loader.js","sourceRoot":"","sources":["../../src/scan/fingerprint-package-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EACL,eAAe,EAEf,
|
|
1
|
+
{"version":3,"file":"fingerprint-package-loader.js","sourceRoot":"","sources":["../../src/scan/fingerprint-package-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { type GhostCatalog, type
|
|
1
|
+
import { type GhostCatalog, type GhostPackageManifest } from "#ghost-core";
|
|
2
2
|
import type { LoadedCheck } from "./check-files.js";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
export {
|
|
6
|
-
export interface
|
|
3
|
+
import { lintGhostPackage } from "./fingerprint-package-lint.js";
|
|
4
|
+
import { loadGhostPackage } from "./fingerprint-package-loader.js";
|
|
5
|
+
export { lintGhostPackage, loadGhostPackage };
|
|
6
|
+
export interface GhostPackagePaths {
|
|
7
7
|
dir: string;
|
|
8
8
|
packageDir: string;
|
|
9
9
|
manifest: string;
|
|
@@ -13,10 +13,10 @@ export interface FingerprintPackagePaths {
|
|
|
13
13
|
inventory: string;
|
|
14
14
|
composition: string;
|
|
15
15
|
}
|
|
16
|
-
export interface
|
|
17
|
-
manifest:
|
|
16
|
+
export interface LoadedGhostPackage {
|
|
17
|
+
manifest: GhostPackageManifest;
|
|
18
18
|
manifestRaw: string;
|
|
19
|
-
/** The in-memory flat node catalog — the
|
|
19
|
+
/** The in-memory flat node catalog — the ghost package model. */
|
|
20
20
|
catalog: GhostCatalog;
|
|
21
21
|
/** Whether `.ghost/checks/` exists; `ghost review` requires it. */
|
|
22
22
|
hasChecksDir: boolean;
|
|
@@ -37,7 +37,7 @@ export interface LoadedFingerprintPackage {
|
|
|
37
37
|
message: string;
|
|
38
38
|
}>;
|
|
39
39
|
}
|
|
40
|
-
export interface
|
|
40
|
+
export interface InitGhostPackageOptions {
|
|
41
41
|
/** Init template name (default: "skeleton"). Mutually exclusive with `body`. */
|
|
42
42
|
template?: string;
|
|
43
43
|
/**
|
|
@@ -48,19 +48,35 @@ export interface InitFingerprintPackageOptions {
|
|
|
48
48
|
body?: string;
|
|
49
49
|
force?: boolean;
|
|
50
50
|
}
|
|
51
|
-
export interface
|
|
52
|
-
paths:
|
|
51
|
+
export interface InitGhostPackageResult {
|
|
52
|
+
paths: GhostPackagePaths;
|
|
53
53
|
/** Package-relative paths of the files the template wrote. */
|
|
54
54
|
written: string[];
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
|
-
* Resolve the
|
|
57
|
+
* Resolve the ghost package directory. `dirArg` (an explicit
|
|
58
58
|
* `--package <dir>`) always wins and is used exactly as given — it may be
|
|
59
59
|
* absolute or relative, unlike `GHOST_PACKAGE_DIR`. When `dirArg` is
|
|
60
60
|
* omitted, `GHOST_PACKAGE_DIR` is honored so every command — not just `init`
|
|
61
61
|
* and `validate` — respects a host-configured package location. Falls back
|
|
62
62
|
* to the default `.ghost` when neither is set.
|
|
63
63
|
*/
|
|
64
|
-
export declare function
|
|
65
|
-
export declare function
|
|
64
|
+
export declare function resolveGhostPackage(dirArg: string | undefined, cwd?: string): GhostPackagePaths;
|
|
65
|
+
export declare function initGhostPackage(dirArg: string | undefined, cwd?: string, options?: InitGhostPackageOptions): Promise<InitGhostPackageResult>;
|
|
66
|
+
/** @deprecated Use `GhostPackagePaths`. */
|
|
67
|
+
export type FingerprintPackagePaths = GhostPackagePaths;
|
|
68
|
+
/** @deprecated Use `LoadedGhostPackage`. */
|
|
69
|
+
export type LoadedFingerprintPackage = LoadedGhostPackage;
|
|
70
|
+
/** @deprecated Use `InitGhostPackageOptions`. */
|
|
71
|
+
export type InitFingerprintPackageOptions = InitGhostPackageOptions;
|
|
72
|
+
/** @deprecated Use `InitGhostPackageResult`. */
|
|
73
|
+
export type InitFingerprintPackageResult = InitGhostPackageResult;
|
|
74
|
+
/** @deprecated Use `resolveGhostPackage`. */
|
|
75
|
+
export declare const resolveFingerprintPackage: typeof resolveGhostPackage;
|
|
76
|
+
/** @deprecated Use `initGhostPackage`. */
|
|
77
|
+
export declare const initFingerprintPackage: typeof initGhostPackage;
|
|
78
|
+
/** @deprecated Use `loadGhostPackage`. */
|
|
79
|
+
export declare const loadFingerprintPackage: typeof loadGhostPackage;
|
|
80
|
+
/** @deprecated Use `lintGhostPackage`. */
|
|
81
|
+
export declare const lintFingerprintPackage: typeof lintGhostPackage;
|
|
66
82
|
//# sourceMappingURL=fingerprint-package.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprint-package.d.ts","sourceRoot":"","sources":["../../src/scan/fingerprint-package.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK
|
|
1
|
+
{"version":3,"file":"fingerprint-package.d.ts","sourceRoot":"","sources":["../../src/scan/fingerprint-package.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EAE1B,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAQpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAanE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,OAAO,EAAE,YAAY,CAAC;IACtB,mEAAmE;IACnE,YAAY,EAAE,OAAO,CAAC;IACtB,+DAA+D;IAC/D,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACjC;;;;OAIG;IACH,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,4CAA4C;IAC5C,aAAa,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,uBAAuB;IACtC,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,iBAAiB,CAAC;IACzB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,GAAG,SAAgB,GAClB,iBAAiB,CAYnB;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,GAAG,SAAgB,EACnB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,sBAAsB,CAAC,CAiDjC;AA4CD,2CAA2C;AAC3C,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;AACxD,4CAA4C;AAC5C,MAAM,MAAM,wBAAwB,GAAG,kBAAkB,CAAC;AAC1D,iDAAiD;AACjD,MAAM,MAAM,6BAA6B,GAAG,uBAAuB,CAAC;AACpE,gDAAgD;AAChD,MAAM,MAAM,4BAA4B,GAAG,sBAAsB,CAAC;AAClE,6CAA6C;AAC7C,eAAO,MAAM,yBAAyB,4BAAsB,CAAC;AAC7D,0CAA0C;AAC1C,eAAO,MAAM,sBAAsB,yBAAmB,CAAC;AACvD,0CAA0C;AAC1C,eAAO,MAAM,sBAAsB,yBAAmB,CAAC;AACvD,0CAA0C;AAC1C,eAAO,MAAM,sBAAsB,yBAAmB,CAAC"}
|