@design-intelligence/ghost 0.21.0 → 0.22.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.
Files changed (125) hide show
  1. package/README.md +47 -33
  2. package/dist/commands/fingerprint-commands.d.ts.map +1 -1
  3. package/dist/commands/fingerprint-commands.js +1 -6
  4. package/dist/commands/fingerprint-commands.js.map +1 -1
  5. package/dist/commands/gather-command.d.ts.map +1 -1
  6. package/dist/commands/gather-command.js +26 -30
  7. package/dist/commands/gather-command.js.map +1 -1
  8. package/dist/commands/init-command.d.ts.map +1 -1
  9. package/dist/commands/init-command.js +1 -6
  10. package/dist/commands/init-command.js.map +1 -1
  11. package/dist/commands/pull-command.d.ts.map +1 -1
  12. package/dist/commands/pull-command.js +12 -19
  13. package/dist/commands/pull-command.js.map +1 -1
  14. package/dist/commands/pulse-command.js +1 -10
  15. package/dist/commands/pulse-command.js.map +1 -1
  16. package/dist/ghost-core/catalog/assemble.d.ts +0 -4
  17. package/dist/ghost-core/catalog/assemble.d.ts.map +1 -1
  18. package/dist/ghost-core/catalog/assemble.js +0 -10
  19. package/dist/ghost-core/catalog/assemble.js.map +1 -1
  20. package/dist/ghost-core/catalog/index.d.ts +1 -1
  21. package/dist/ghost-core/catalog/index.d.ts.map +1 -1
  22. package/dist/ghost-core/catalog/index.js +1 -1
  23. package/dist/ghost-core/catalog/index.js.map +1 -1
  24. package/dist/ghost-core/catalog/menu.d.ts +1 -11
  25. package/dist/ghost-core/catalog/menu.d.ts.map +1 -1
  26. package/dist/ghost-core/catalog/menu.js +1 -6
  27. package/dist/ghost-core/catalog/menu.js.map +1 -1
  28. package/dist/ghost-core/catalog/types.d.ts +0 -6
  29. package/dist/ghost-core/catalog/types.d.ts.map +1 -1
  30. package/dist/ghost-core/glossary.d.ts +0 -13
  31. package/dist/ghost-core/glossary.d.ts.map +1 -1
  32. package/dist/ghost-core/glossary.js +0 -7
  33. package/dist/ghost-core/glossary.js.map +1 -1
  34. package/dist/ghost-core/index.d.ts +2 -2
  35. package/dist/ghost-core/index.d.ts.map +1 -1
  36. package/dist/ghost-core/index.js +1 -1
  37. package/dist/ghost-core/index.js.map +1 -1
  38. package/dist/ghost-core/package-manifest.d.ts +7 -0
  39. package/dist/ghost-core/package-manifest.d.ts.map +1 -1
  40. package/dist/ghost-core/package-manifest.js +10 -0
  41. package/dist/ghost-core/package-manifest.js.map +1 -1
  42. package/dist/init-payloads/median/median-tells.md +25 -25
  43. package/dist/init-payloads/skeleton/brand.md +22 -0
  44. package/dist/init-payloads/skeleton/context.conversation.md +24 -0
  45. package/dist/init-payloads/skeleton/foundation.color.md +39 -0
  46. package/dist/init-payloads/skeleton/foundation.composition.md +30 -0
  47. package/dist/init-payloads/skeleton/foundation.controls.md +29 -0
  48. package/dist/init-payloads/skeleton/foundation.layout.md +45 -0
  49. package/dist/init-payloads/skeleton/foundation.motion.md +34 -0
  50. package/dist/init-payloads/skeleton/foundation.type.md +44 -0
  51. package/dist/init-payloads/skeleton/foundation.voice.md +29 -0
  52. package/dist/init-payloads/skeleton/glossary.md +27 -32
  53. package/dist/init-payloads/vessel-light/anti-goal.tells.md +5 -4
  54. package/dist/init-payloads/vessel-light/checks/shape-matches-job.md +43 -0
  55. package/dist/init-payloads/vessel-light/glossary.md +0 -1
  56. package/dist/init-payloads/vessel-light/grammar.color-roles.md +2 -2
  57. package/dist/init-payloads/vessel-light/grammar.deletion.md +35 -0
  58. package/dist/init-payloads/vessel-light/grammar.hierarchy.md +13 -3
  59. package/dist/init-payloads/vessel-light/grammar.job.md +54 -0
  60. package/dist/init-payloads/vessel-light/index.md +20 -24
  61. package/dist/init-payloads/vessel-light/manifest.yml +1 -0
  62. package/dist/init-payloads/vessel-light/materials/primitives.css +15 -52
  63. package/dist/init-payloads/vessel-light/materials/ref/composition.editorial.html +12 -7
  64. package/dist/init-payloads/vessel-light/materials/ref/composition.overlay.html +8 -2
  65. package/dist/init-payloads/vessel-light/materials/ref/composition.table.html +3 -3
  66. package/dist/init-payloads/vessel-light/materials/tokens.css +27 -78
  67. package/dist/init-payloads/vessel-light/signature.temperature.md +7 -0
  68. package/dist/init-payloads/vessel-light/signature.type.md +6 -5
  69. package/dist/observability-events.d.ts +0 -3
  70. package/dist/observability-events.d.ts.map +1 -1
  71. package/dist/observability-events.js.map +1 -1
  72. package/dist/review/resolve.d.ts +1 -2
  73. package/dist/review/resolve.d.ts.map +1 -1
  74. package/dist/review/resolve.js +4 -5
  75. package/dist/review/resolve.js.map +1 -1
  76. package/dist/review/review-packet.d.ts +0 -1
  77. package/dist/review/review-packet.d.ts.map +1 -1
  78. package/dist/review/review-packet.js +0 -19
  79. package/dist/review/review-packet.js.map +1 -1
  80. package/dist/scan/check-files.d.ts.map +1 -1
  81. package/dist/scan/check-files.js +0 -15
  82. package/dist/scan/check-files.js.map +1 -1
  83. package/dist/scan/check-scaffold.js +2 -2
  84. package/dist/scan/check-scaffold.js.map +1 -1
  85. package/dist/scan/fingerprint-package-lint.d.ts +8 -0
  86. package/dist/scan/fingerprint-package-lint.d.ts.map +1 -0
  87. package/dist/scan/fingerprint-package-lint.js +284 -0
  88. package/dist/scan/fingerprint-package-lint.js.map +1 -0
  89. package/dist/scan/fingerprint-package-loader.d.ts.map +1 -1
  90. package/dist/scan/fingerprint-package-loader.js +2 -29
  91. package/dist/scan/fingerprint-package-loader.js.map +1 -1
  92. package/dist/scan/fingerprint-package.d.ts +9 -7
  93. package/dist/scan/fingerprint-package.d.ts.map +1 -1
  94. package/dist/scan/fingerprint-package.js +18 -231
  95. package/dist/scan/fingerprint-package.js.map +1 -1
  96. package/dist/scan/node-files.d.ts.map +1 -1
  97. package/dist/scan/node-files.js +1 -3
  98. package/dist/scan/node-files.js.map +1 -1
  99. package/dist/scan/templates.d.ts.map +1 -1
  100. package/dist/scan/templates.js +43 -35
  101. package/dist/scan/templates.js.map +1 -1
  102. package/dist/skill-bundle/SKILL.md +15 -13
  103. package/dist/skill-bundle/references/adapting-a-starter.md +62 -60
  104. package/dist/skill-bundle/references/authoring-scenarios.md +6 -8
  105. package/dist/skill-bundle/references/brief.md +5 -6
  106. package/dist/skill-bundle/references/capture.md +47 -36
  107. package/dist/skill-bundle/references/concrete-tiers.md +95 -0
  108. package/dist/skill-bundle/references/recall.md +6 -12
  109. package/dist/skill-bundle/references/schema.md +15 -24
  110. package/dist/skill-bundle/references/self-check.md +2 -2
  111. package/dist/skill-bundle/references/steering-audit.md +7 -10
  112. package/package.json +1 -1
  113. package/dist/init-payloads/skeleton/grammar.color-roles.md +0 -26
  114. package/dist/init-payloads/skeleton/grammar.conversation.md +0 -23
  115. package/dist/init-payloads/skeleton/grammar.hierarchy.md +0 -39
  116. package/dist/init-payloads/skeleton/grammar.motion.md +0 -24
  117. package/dist/init-payloads/skeleton/grammar.rhythm.md +0 -23
  118. package/dist/init-payloads/skeleton/grammar.surfaces.md +0 -26
  119. package/dist/init-payloads/skeleton/index.md +0 -27
  120. package/dist/init-payloads/skeleton/signature.palette.md +0 -24
  121. package/dist/init-payloads/skeleton/signature.shape.md +0 -19
  122. package/dist/init-payloads/skeleton/signature.temperature.md +0 -20
  123. package/dist/init-payloads/skeleton/signature.type.md +0 -22
  124. package/dist/skill-bundle/references/wild.md +0 -30
  125. /package/dist/init-payloads/median/{anti-goal.median.md → cliche.median.md} +0 -0
@@ -0,0 +1,284 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { relative, resolve } from "node:path";
3
+ import { classifyMaterialLocator, closestIds, expandLocalMaterialLocator, extractSkeletonSections, listBundledMaterialFiles, materialLocatorClaimsPath, parseGlossary, parseSourceRef, sliceNodeSection, } from "#ghost-core";
4
+ import { isMissingPathError } from "../internal/fs.js";
5
+ import { GHOST_GLOSSARY_FILENAME, GHOST_MATERIALS_DIR } from "./constants.js";
6
+ import { resolveFingerprintPackage, } from "./fingerprint-package.js";
7
+ import { lintFingerprintPackageManifest, loadFingerprintPackage, } from "./fingerprint-package-loader.js";
8
+ import { resolveGitRoot } from "./package-paths.js";
9
+ /**
10
+ * `validate` for a package: artifact shape, per-node validity, and the
11
+ * deterministic kind-prefix lint enabled by glossary.md. The catalog is flat;
12
+ * loading collects malformed nodes so they can be surfaced as structured issues.
13
+ */
14
+ export async function lintFingerprintPackage(dirArg, cwd = process.cwd()) {
15
+ const paths = resolveFingerprintPackage(dirArg, cwd);
16
+ const issues = [];
17
+ const manifestRaw = await readRequired(paths.manifest, "manifest.yml", issues);
18
+ if (manifestRaw !== undefined) {
19
+ // shape pass: manifest well-formed.
20
+ const beforeManifestErrors = issues.filter((issue) => issue.severity === "error").length;
21
+ lintFingerprintPackageManifest(manifestRaw, issues);
22
+ const manifestHasErrors = issues.filter((issue) => issue.severity === "error").length >
23
+ beforeManifestErrors;
24
+ if (manifestHasErrors)
25
+ return finalize(issues);
26
+ // catalog pass: load + validate the node catalog.
27
+ try {
28
+ const { manifest, catalog, checks, invalid, invalidChecks } = await loadFingerprintPackage(paths);
29
+ // node pass: a node that failed its own schema was skipped while loading
30
+ // the catalog; surface it here so a malformed node is loud, not silent.
31
+ issues.push(...invalid.map((entry) => ({
32
+ severity: "error",
33
+ rule: "node-invalid",
34
+ message: entry.message,
35
+ path: entry.file,
36
+ })));
37
+ issues.push(...invalidChecks.map((entry) => ({
38
+ severity: "error",
39
+ rule: "check-invalid",
40
+ message: entry.message,
41
+ path: entry.file,
42
+ })));
43
+ await lintGlossary(paths.glossary, issues);
44
+ lintCover(manifest.cover, catalog, issues);
45
+ await lintKindPrefixes(paths, catalog, issues);
46
+ lintNodeDescriptions(catalog, issues);
47
+ lintSkeletonSections(catalog, issues);
48
+ await lintMaterialLocators(paths, catalog, issues, cwd);
49
+ lintCheckReferences(catalog, checks, issues);
50
+ }
51
+ catch (err) {
52
+ issues.push({
53
+ severity: "error",
54
+ rule: "package-catalog-invalid",
55
+ message: err instanceof Error ? err.message : String(err),
56
+ path: ".ghost",
57
+ });
58
+ }
59
+ }
60
+ return finalize(issues);
61
+ }
62
+ async function lintGlossary(glossaryPath, issues) {
63
+ let raw;
64
+ try {
65
+ raw = await readFile(glossaryPath, "utf-8");
66
+ }
67
+ catch (err) {
68
+ if (isMissingPathError(err))
69
+ return;
70
+ throw err;
71
+ }
72
+ const result = parseGlossary(raw);
73
+ if (result.glossary !== null)
74
+ return;
75
+ issues.push(...result.errors.map((message) => ({
76
+ severity: "error",
77
+ rule: "glossary-invalid",
78
+ message,
79
+ path: GHOST_GLOSSARY_FILENAME,
80
+ })));
81
+ }
82
+ function lintCover(coverId, catalog, issues) {
83
+ if (coverId === undefined) {
84
+ issues.push({
85
+ severity: "warning",
86
+ rule: "cover-undeclared",
87
+ message: 'no cover declared in manifest.yml — fingerprints steer better with one node guaranteed in context; add "cover: <node-id>"',
88
+ path: "manifest.yml.cover",
89
+ });
90
+ return;
91
+ }
92
+ const cover = catalog.nodes.get(coverId);
93
+ if (cover === undefined) {
94
+ issues.push({
95
+ severity: "error",
96
+ rule: "cover-missing",
97
+ message: `manifest cover "${coverId}" does not match any node`,
98
+ path: "manifest.yml.cover",
99
+ });
100
+ return;
101
+ }
102
+ const bytes = Buffer.byteLength(cover.body, "utf-8");
103
+ if (bytes > 1500) {
104
+ issues.push({
105
+ severity: "warning",
106
+ rule: "cover-oversized",
107
+ message: `cover node "${coverId}" body is ${bytes} bytes — the cover is a one-screen budget; element-scoped rules belong in foundation chapters`,
108
+ path: `${coverId}.md`,
109
+ });
110
+ }
111
+ }
112
+ async function lintKindPrefixes(paths, catalog, issues) {
113
+ const declaredKinds = await readDeclaredGlossaryKinds(paths.glossary);
114
+ if (declaredKinds === undefined)
115
+ return;
116
+ const declared = new Set(declaredKinds);
117
+ for (const node of catalog.nodes.values()) {
118
+ if (node.kind === undefined || declared.has(node.kind))
119
+ continue;
120
+ const suggestions = closestIds(node.kind, declaredKinds, 1);
121
+ const suggestion = suggestions[0];
122
+ issues.push({
123
+ severity: "warning",
124
+ rule: "kind-undeclared",
125
+ message: `Kind prefix \`${node.kind}\` is not declared in ${GHOST_GLOSSARY_FILENAME}.` +
126
+ (suggestion === undefined
127
+ ? " Drop the prefix if this node has no kind."
128
+ : ` Did you mean \`${suggestion}\`? Drop the prefix if this node has no kind.`),
129
+ path: `${node.id}.md`,
130
+ });
131
+ }
132
+ }
133
+ /**
134
+ * The `description` is a node's entire retrieval payload: `gather` lists it as
135
+ * the text the agent selects against. A node without one renders as a bare id
136
+ * and is effectively invisible to selection, so `validate` makes that loud.
137
+ * Warning, not error: an undescribed node is legal, just undiscoverable.
138
+ */
139
+ function lintNodeDescriptions(catalog, issues) {
140
+ for (const node of catalog.nodes.values()) {
141
+ if (node.description !== undefined && node.description.trim().length > 0) {
142
+ continue;
143
+ }
144
+ issues.push({
145
+ severity: "warning",
146
+ rule: "node-description-missing",
147
+ message: "node has no `description`, so `gather` lists it as a bare id the agent cannot select against; add a one-line description of what this truth is and when to pull it",
148
+ path: `${node.id}.md`,
149
+ });
150
+ }
151
+ }
152
+ function lintSkeletonSections(catalog, issues) {
153
+ for (const node of catalog.nodes.values()) {
154
+ const sections = extractSkeletonSections(node.body);
155
+ for (const section of sections) {
156
+ if (section.fences.length === 1)
157
+ continue;
158
+ issues.push({
159
+ severity: "warning",
160
+ rule: "skeleton-fence-count",
161
+ message: "## Skeleton section should contain exactly one fenced block; pull will emit all found skeleton fences",
162
+ path: `${node.id}.md`,
163
+ });
164
+ }
165
+ }
166
+ }
167
+ async function lintMaterialLocators(paths, catalog, issues, cwd) {
168
+ const repoRoot = await resolveGitRoot(cwd);
169
+ const options = {
170
+ repoRoot,
171
+ packageDir: paths.packageDir,
172
+ materialsDir: GHOST_MATERIALS_DIR,
173
+ };
174
+ const claimedLocators = [];
175
+ for (const node of catalog.nodes.values()) {
176
+ for (const locator of node.materials ?? []) {
177
+ if (classifyMaterialLocator(locator).kind === "url")
178
+ continue;
179
+ claimedLocators.push(locator);
180
+ const expanded = await expandLocalMaterialLocator(locator, options, {
181
+ cap: Number.POSITIVE_INFINITY,
182
+ });
183
+ if (expanded.matches.length > 0)
184
+ continue;
185
+ issues.push({
186
+ severity: "warning",
187
+ rule: "material-locator-dead",
188
+ message: `material locator '${locator}' matches no local files`,
189
+ path: `${node.id}.md.materials`,
190
+ });
191
+ }
192
+ }
193
+ const bundledFiles = await listBundledMaterialFiles(options);
194
+ for (const file of bundledFiles) {
195
+ const claimed = claimedLocators.some((locator) => materialLocatorClaimsPath(locator, file, options));
196
+ if (claimed)
197
+ continue;
198
+ issues.push({
199
+ severity: "warning",
200
+ rule: "material-orphaned",
201
+ message: "bundled material is not claimed by any node `materials` locator",
202
+ path: toPackageRelative(file, repoRoot, paths.packageDir),
203
+ });
204
+ }
205
+ }
206
+ function toPackageRelative(repoRelativePath, repoRoot, packageDir) {
207
+ const packageRelative = relative(packageDir, resolve(repoRoot, repoRelativePath))
208
+ .replace(/\\/g, "/")
209
+ .replace(/^\.\//, "");
210
+ return packageRelative.startsWith("../") ? repoRelativePath : packageRelative;
211
+ }
212
+ function lintCheckReferences(catalog, checks, issues) {
213
+ for (const check of checks.values()) {
214
+ for (const raw of check.references) {
215
+ const parsed = parseSourceRef(raw);
216
+ if (parsed === null) {
217
+ issues.push({
218
+ severity: "error",
219
+ rule: "check-reference-malformed",
220
+ message: `check reference '${raw}' is not a node id with optional '> Heading' anchor`,
221
+ path: `checks/${check.id}.md.references`,
222
+ });
223
+ continue;
224
+ }
225
+ const node = catalog.nodes.get(parsed.nodeId);
226
+ if (node === undefined) {
227
+ issues.push({
228
+ severity: "warning",
229
+ rule: "check-reference-unresolved",
230
+ message: `check reference '${raw}' does not resolve to a fingerprint node — if you pruned this rule from the node, delete its paired flag in the check too`,
231
+ path: `checks/${check.id}.md.references`,
232
+ });
233
+ continue;
234
+ }
235
+ if (parsed.heading !== undefined &&
236
+ sliceNodeSection(node.body, parsed.heading) === null) {
237
+ issues.push({
238
+ severity: "warning",
239
+ rule: "check-reference-heading-missing",
240
+ message: `check reference '${raw}' names a heading that was not found — if you pruned this rule from the node, delete its paired flag in the check too`,
241
+ path: `checks/${check.id}.md.references`,
242
+ });
243
+ }
244
+ }
245
+ }
246
+ }
247
+ async function readDeclaredGlossaryKinds(glossaryPath) {
248
+ let raw;
249
+ try {
250
+ raw = await readFile(glossaryPath, "utf-8");
251
+ }
252
+ catch (err) {
253
+ if (isMissingPathError(err))
254
+ return undefined;
255
+ throw err;
256
+ }
257
+ const result = parseGlossary(raw);
258
+ if (result.glossary === null)
259
+ return [];
260
+ return result.glossary.frontmatter.kinds.map((kind) => kind.name);
261
+ }
262
+ async function readRequired(path, label, issues) {
263
+ try {
264
+ return await readFile(path, "utf-8");
265
+ }
266
+ catch {
267
+ issues.push({
268
+ severity: "error",
269
+ rule: "package-artifact-missing",
270
+ message: `Fingerprint package is missing ${label}.`,
271
+ path: label,
272
+ });
273
+ return undefined;
274
+ }
275
+ }
276
+ function finalize(issues) {
277
+ return {
278
+ issues,
279
+ errors: issues.filter((issue) => issue.severity === "error").length,
280
+ warnings: issues.filter((issue) => issue.severity === "warning").length,
281
+ info: issues.filter((issue) => issue.severity === "info").length,
282
+ };
283
+ }
284
+ //# sourceMappingURL=fingerprint-package-lint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fingerprint-package-lint.js","sourceRoot":"","sources":["../../src/scan/fingerprint-package-lint.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint-package-loader.d.ts","sourceRoot":"","sources":["../../src/scan/fingerprint-package-loader.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,wBAAwB,CAAC,CAmCnC;AAED,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,SAAS,EAAE,GAClB,IAAI,CAkBN"}
1
+ {"version":3,"file":"fingerprint-package-loader.d.ts","sourceRoot":"","sources":["../../src/scan/fingerprint-package-loader.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,wBAAwB,CAAC,CA8BnC;AAED,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,SAAS,EAAE,GAClB,IAAI,CAkBN"}
@@ -1,6 +1,6 @@
1
1
  import { readFile } from "node:fs/promises";
2
2
  import { parse as parseYaml } from "yaml";
3
- import { assembleCatalog, GhostFingerprintPackageManifestSchema, parseGlossary, UsageError, } from "#ghost-core";
3
+ import { assembleCatalog, GhostFingerprintPackageManifestSchema, 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";
@@ -21,12 +21,7 @@ export async function loadFingerprintPackage(paths) {
21
21
  // Per-node schema failures are collected as `invalid`.
22
22
  const { nodes: placedNodes, invalid } = await loadNodeFiles(paths.packageDir);
23
23
  const checkFiles = await loadCheckFiles(paths.packageDir);
24
- const postureKinds = await readPostureGlossaryKinds(paths.glossary);
25
- const catalog = assembleCatalog({
26
- placedNodes,
27
- wildKinds: postureKinds.wild,
28
- guardKinds: postureKinds.guard,
29
- });
24
+ const catalog = assembleCatalog({ placedNodes });
30
25
  return {
31
26
  manifest,
32
27
  manifestRaw,
@@ -54,28 +49,6 @@ export function lintFingerprintPackageManifest(raw, issues) {
54
49
  return;
55
50
  }
56
51
  }
57
- async function readPostureGlossaryKinds(glossaryPath) {
58
- let raw;
59
- try {
60
- raw = await readFile(glossaryPath, "utf-8");
61
- }
62
- catch (err) {
63
- if (isMissingPathError(err))
64
- return { wild: [], guard: [] };
65
- throw err;
66
- }
67
- const result = parseGlossary(raw);
68
- if (result.glossary === null)
69
- return { wild: [], guard: [] };
70
- return {
71
- wild: result.glossary.kinds
72
- .filter((kind) => kind.posture === "wild")
73
- .map((kind) => kind.name),
74
- guard: result.glossary.kinds
75
- .filter((kind) => kind.posture === "guard")
76
- .map((kind) => kind.name),
77
- };
78
- }
79
52
  function parseManifest(raw, label) {
80
53
  const parsed = parseYamlStrict(raw, label);
81
54
  return GhostFingerprintPackageManifestSchema.parse(parsed);
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint-package-loader.js","sourceRoot":"","sources":["../../src/scan/fingerprint-package-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fingerprint-package-loader.js","sourceRoot":"","sources":["../../src/scan/fingerprint-package-loader.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { type GhostCatalog, type GhostFingerprintPackageManifest } from "#ghost-core";
2
2
  import type { LoadedCheck } from "./check-files.js";
3
3
  import { loadFingerprintPackage } from "./fingerprint-package-loader.js";
4
- import type { LintReport } from "./lint.js";
4
+ export { lintFingerprintPackage } from "./fingerprint-package-lint.js";
5
5
  export { loadFingerprintPackage };
6
6
  export interface FingerprintPackagePaths {
7
7
  dir: string;
@@ -53,12 +53,14 @@ export interface InitFingerprintPackageResult {
53
53
  /** Package-relative paths of the files the template wrote. */
54
54
  written: string[];
55
55
  }
56
- export declare function resolveFingerprintPackage(dirArg: string | undefined, cwd?: string): FingerprintPackagePaths;
57
- export declare function initFingerprintPackage(dirArg: string | undefined, cwd?: string, options?: InitFingerprintPackageOptions): Promise<InitFingerprintPackageResult>;
58
56
  /**
59
- * `validate` for a package: artifact shape, per-node validity, and the
60
- * deterministic kind-prefix lint enabled by glossary.md. The catalog is flat;
61
- * loading collects malformed nodes so they can be surfaced as structured issues.
57
+ * Resolve the fingerprint package directory. `dirArg` (an explicit
58
+ * `--package <dir>`) always wins and is used exactly as given — it may be
59
+ * absolute or relative, unlike `GHOST_PACKAGE_DIR`. When `dirArg` is
60
+ * omitted, `GHOST_PACKAGE_DIR` is honored so every command — not just `init`
61
+ * and `validate` — respects a host-configured package location. Falls back
62
+ * to the default `.ghost` when neither is set.
62
63
  */
63
- export declare function lintFingerprintPackage(dirArg: string | undefined, cwd?: string): Promise<LintReport>;
64
+ export declare function resolveFingerprintPackage(dirArg: string | undefined, cwd?: string): FingerprintPackagePaths;
65
+ export declare function initFingerprintPackage(dirArg: string | undefined, cwd?: string, options?: InitFingerprintPackageOptions): Promise<InitFingerprintPackageResult>;
64
66
  //# 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,EAKL,KAAK,YAAY,EACjB,KAAK,+BAA+B,EAOrC,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAUpD,OAAO,EAEL,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,WAAW,CAAC;AAWvD,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAElC,MAAM,WAAW,uBAAuB;IACtC,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,wBAAwB;IACvC,QAAQ,EAAE,+BAA+B,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,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,6BAA6B;IAC5C,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,4BAA4B;IAC3C,KAAK,EAAE,uBAAuB,CAAC;IAC/B,8DAA8D;IAC9D,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,GAAG,SAAgB,GAClB,uBAAuB,CAYzB;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,GAAG,SAAgB,EACnB,OAAO,GAAE,6BAAkC,GAC1C,OAAO,CAAC,4BAA4B,CAAC,CAiDvC;AA4CD;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,GAAG,SAAgB,GAClB,OAAO,CAAC,UAAU,CAAC,CA0DrB"}
1
+ {"version":3,"file":"fingerprint-package.d.ts","sourceRoot":"","sources":["../../src/scan/fingerprint-package.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,+BAA+B,EAErC,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAQpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAazE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAElC,MAAM,WAAW,uBAAuB;IACtC,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,wBAAwB;IACvC,QAAQ,EAAE,+BAA+B,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,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,6BAA6B;IAC5C,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,4BAA4B;IAC3C,KAAK,EAAE,uBAAuB,CAAC;IAC/B,8DAA8D;IAC9D,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,GAAG,SAAgB,GAClB,uBAAuB,CAYzB;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,GAAG,SAAgB,EACnB,OAAO,GAAE,6BAAkC,GAC1C,OAAO,CAAC,4BAA4B,CAAC,CAiDvC"}