@design-intelligence/ghost 0.23.0 → 0.25.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 (174) hide show
  1. package/README.md +55 -28
  2. package/dist/commands/checks-command.js +3 -3
  3. package/dist/commands/checks-command.js.map +1 -1
  4. package/dist/commands/command-discovery.d.ts.map +1 -1
  5. package/dist/commands/command-discovery.js +5 -5
  6. package/dist/commands/command-discovery.js.map +1 -1
  7. package/dist/commands/export-command.d.ts.map +1 -1
  8. package/dist/commands/export-command.js +10 -10
  9. package/dist/commands/export-command.js.map +1 -1
  10. package/dist/commands/fingerprint-commands.d.ts +2 -2
  11. package/dist/commands/fingerprint-commands.d.ts.map +1 -1
  12. package/dist/commands/fingerprint-commands.js +7 -7
  13. package/dist/commands/fingerprint-commands.js.map +1 -1
  14. package/dist/commands/gather-command.d.ts.map +1 -1
  15. package/dist/commands/gather-command.js +72 -87
  16. package/dist/commands/gather-command.js.map +1 -1
  17. package/dist/commands/init-command.d.ts.map +1 -1
  18. package/dist/commands/init-command.js +6 -6
  19. package/dist/commands/init-command.js.map +1 -1
  20. package/dist/commands/pull-command.d.ts.map +1 -1
  21. package/dist/commands/pull-command.js +87 -140
  22. package/dist/commands/pull-command.js.map +1 -1
  23. package/dist/commands/pulse-command.js +6 -6
  24. package/dist/commands/pulse-command.js.map +1 -1
  25. package/dist/commands/review-command.js +7 -7
  26. package/dist/commands/review-command.js.map +1 -1
  27. package/dist/commands/skill-command.js +2 -2
  28. package/dist/embed/gather.d.ts +9 -0
  29. package/dist/embed/gather.d.ts.map +1 -0
  30. package/dist/embed/gather.js +80 -0
  31. package/dist/embed/gather.js.map +1 -0
  32. package/dist/embed/index.d.ts +9 -0
  33. package/dist/embed/index.d.ts.map +1 -0
  34. package/dist/embed/index.js +6 -0
  35. package/dist/embed/index.js.map +1 -0
  36. package/dist/embed/inspect.d.ts +3 -0
  37. package/dist/embed/inspect.d.ts.map +1 -0
  38. package/dist/embed/inspect.js +155 -0
  39. package/dist/embed/inspect.js.map +1 -0
  40. package/dist/embed/pull.d.ts +8 -0
  41. package/dist/embed/pull.d.ts.map +1 -0
  42. package/dist/embed/pull.js +96 -0
  43. package/dist/embed/pull.js.map +1 -0
  44. package/dist/embed/readonly-map.d.ts +3 -0
  45. package/dist/embed/readonly-map.d.ts.map +1 -0
  46. package/dist/embed/readonly-map.js +33 -0
  47. package/dist/embed/readonly-map.js.map +1 -0
  48. package/dist/embed/snapshot.d.ts +4 -0
  49. package/dist/embed/snapshot.d.ts.map +1 -0
  50. package/dist/embed/snapshot.js +105 -0
  51. package/dist/embed/snapshot.js.map +1 -0
  52. package/dist/embed/types.d.ts +156 -0
  53. package/dist/embed/types.d.ts.map +1 -0
  54. package/dist/embed/types.js +2 -0
  55. package/dist/embed/types.js.map +1 -0
  56. package/dist/fingerprint.d.ts +2 -1
  57. package/dist/fingerprint.d.ts.map +1 -1
  58. package/dist/fingerprint.js +1 -0
  59. package/dist/fingerprint.js.map +1 -1
  60. package/dist/ghost-core/catalog/assemble.d.ts.map +1 -1
  61. package/dist/ghost-core/catalog/assemble.js +2 -1
  62. package/dist/ghost-core/catalog/assemble.js.map +1 -1
  63. package/dist/ghost-core/catalog/menu.d.ts +6 -4
  64. package/dist/ghost-core/catalog/menu.d.ts.map +1 -1
  65. package/dist/ghost-core/catalog/menu.js +1 -0
  66. package/dist/ghost-core/catalog/menu.js.map +1 -1
  67. package/dist/ghost-core/catalog/types.d.ts +4 -2
  68. package/dist/ghost-core/catalog/types.d.ts.map +1 -1
  69. package/dist/ghost-core/check/index.d.ts +1 -1
  70. package/dist/ghost-core/check/index.js +1 -1
  71. package/dist/ghost-core/check/lint.d.ts +2 -2
  72. package/dist/ghost-core/check/lint.js +2 -2
  73. package/dist/ghost-core/check/load.d.ts +1 -1
  74. package/dist/ghost-core/check/load.js +3 -3
  75. package/dist/ghost-core/check/types.d.ts +3 -3
  76. package/dist/ghost-core/index.d.ts +10 -4
  77. package/dist/ghost-core/index.d.ts.map +1 -1
  78. package/dist/ghost-core/index.js +7 -3
  79. package/dist/ghost-core/index.js.map +1 -1
  80. package/dist/ghost-core/markdown.d.ts +1 -1
  81. package/dist/ghost-core/markdown.js +1 -1
  82. package/dist/ghost-core/material-transport.d.ts +11 -0
  83. package/dist/ghost-core/material-transport.d.ts.map +1 -1
  84. package/dist/ghost-core/material-transport.js +80 -8
  85. package/dist/ghost-core/material-transport.js.map +1 -1
  86. package/dist/ghost-core/node/index.d.ts +1 -1
  87. package/dist/ghost-core/node/index.d.ts.map +1 -1
  88. package/dist/ghost-core/node/index.js +1 -1
  89. package/dist/ghost-core/node/index.js.map +1 -1
  90. package/dist/ghost-core/node/schema.js +1 -1
  91. package/dist/ghost-core/node/steering.d.ts +1 -0
  92. package/dist/ghost-core/node/steering.d.ts.map +1 -1
  93. package/dist/ghost-core/node/steering.js +4 -1
  94. package/dist/ghost-core/node/steering.js.map +1 -1
  95. package/dist/ghost-core/node/types.d.ts +4 -5
  96. package/dist/ghost-core/node/types.d.ts.map +1 -1
  97. package/dist/ghost-core/package-manifest.d.ts +23 -13
  98. package/dist/ghost-core/package-manifest.d.ts.map +1 -1
  99. package/dist/ghost-core/package-manifest.js +20 -7
  100. package/dist/ghost-core/package-manifest.js.map +1 -1
  101. package/dist/ghost-core/skill-bundle-loader.d.ts +1 -1
  102. package/dist/ghost-core/skill-bundle-loader.js +1 -1
  103. package/dist/index.d.ts +3 -1
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.js +3 -1
  106. package/dist/index.js.map +1 -1
  107. package/dist/init-payloads/median/cliche.median.md +6 -6
  108. package/dist/init-payloads/median/median-tells.md +1 -1
  109. package/dist/init-payloads/skeleton/brand.md +4 -3
  110. package/dist/init-payloads/skeleton/glossary.md +1 -1
  111. package/dist/init-payloads/vessel-light/anti-goal.median.md +6 -6
  112. package/dist/init-payloads/vessel-light/checks/motion-restraint.md +1 -1
  113. package/dist/init-payloads/vessel-light/manifest.yml +1 -1
  114. package/dist/init-payloads/vessel-light/materials/ref/composition.form.html +2 -2
  115. package/dist/init-payloads/vessel-light/materials/ref/composition.overlay.html +3 -3
  116. package/dist/observability-events.d.ts +1 -0
  117. package/dist/observability-events.d.ts.map +1 -1
  118. package/dist/observability-events.js +4 -1
  119. package/dist/observability-events.js.map +1 -1
  120. package/dist/package.d.ts +7 -0
  121. package/dist/package.d.ts.map +1 -0
  122. package/dist/package.js +4 -0
  123. package/dist/package.js.map +1 -0
  124. package/dist/review/resolve.js +1 -1
  125. package/dist/review/resolve.js.map +1 -1
  126. package/dist/review/review-packet.d.ts +5 -3
  127. package/dist/review/review-packet.d.ts.map +1 -1
  128. package/dist/review/review-packet.js +12 -11
  129. package/dist/review/review-packet.js.map +1 -1
  130. package/dist/scan/constants.d.ts +6 -2
  131. package/dist/scan/constants.d.ts.map +1 -1
  132. package/dist/scan/constants.js +8 -4
  133. package/dist/scan/constants.js.map +1 -1
  134. package/dist/scan/file-kind.d.ts +1 -1
  135. package/dist/scan/file-kind.d.ts.map +1 -1
  136. package/dist/scan/file-kind.js +11 -11
  137. package/dist/scan/file-kind.js.map +1 -1
  138. package/dist/scan/fingerprint-package-lint.d.ts +3 -1
  139. package/dist/scan/fingerprint-package-lint.d.ts.map +1 -1
  140. package/dist/scan/fingerprint-package-lint.js +14 -12
  141. package/dist/scan/fingerprint-package-lint.js.map +1 -1
  142. package/dist/scan/fingerprint-package-loader.d.ts +7 -3
  143. package/dist/scan/fingerprint-package-loader.d.ts.map +1 -1
  144. package/dist/scan/fingerprint-package-loader.js +10 -6
  145. package/dist/scan/fingerprint-package-loader.js.map +1 -1
  146. package/dist/scan/fingerprint-package.d.ts +30 -14
  147. package/dist/scan/fingerprint-package.d.ts.map +1 -1
  148. package/dist/scan/fingerprint-package.js +17 -9
  149. package/dist/scan/fingerprint-package.js.map +1 -1
  150. package/dist/scan/index.d.ts +3 -1
  151. package/dist/scan/index.d.ts.map +1 -1
  152. package/dist/scan/index.js +3 -1
  153. package/dist/scan/index.js.map +1 -1
  154. package/dist/scan/tarball.d.ts +2 -2
  155. package/dist/scan/tarball.js +3 -3
  156. package/dist/scan/tarball.js.map +1 -1
  157. package/dist/scan/templates.d.ts +1 -1
  158. package/dist/scan/templates.d.ts.map +1 -1
  159. package/dist/scan/templates.js +7 -283
  160. package/dist/scan/templates.js.map +1 -1
  161. package/dist/skill-bundle/SKILL.md +40 -32
  162. package/dist/skill-bundle/references/adapting-a-starter.md +11 -11
  163. package/dist/skill-bundle/references/authoring-scenarios.md +33 -30
  164. package/dist/skill-bundle/references/blocks.md +19 -20
  165. package/dist/skill-bundle/references/brief.md +13 -11
  166. package/dist/skill-bundle/references/capture.md +66 -39
  167. package/dist/skill-bundle/references/concrete-tiers.md +7 -7
  168. package/dist/skill-bundle/references/distill.md +204 -0
  169. package/dist/skill-bundle/references/making.md +113 -0
  170. package/dist/skill-bundle/references/recall.md +11 -7
  171. package/dist/skill-bundle/references/schema.md +16 -12
  172. package/dist/skill-bundle/references/self-check.md +12 -12
  173. package/dist/skill-bundle/references/steering-audit.md +19 -9
  174. package/package.json +11 -3
@@ -0,0 +1,96 @@
1
+ import { classifyMaterialLocator, closestIds, extractSkeletonFences, resolveLocalMaterialLocator, stripSkeletonSections, transportMaterials, } from "#ghost-core";
2
+ import { GHOST_MATERIALS_DIR } from "../scan/constants.js";
3
+ export async function pullGhostNodes(snapshot, options) {
4
+ const requested = [...new Set(options.ids)];
5
+ const allIds = [...snapshot.catalog.nodes.keys()];
6
+ const known = requested.filter((id) => snapshot.catalog.nodes.has(id));
7
+ const missed = requested
8
+ .filter((id) => !snapshot.catalog.nodes.has(id))
9
+ .map((id) => ({ requested: id, suggested: closestIds(id, allIds) }));
10
+ const givenNodes = known.map((id) => snapshot.catalog.nodes.get(id));
11
+ const orderedNodes = (options.order ?? "steering") === "given"
12
+ ? givenNodes
13
+ : orderPulledNodes(givenNodes, snapshot.cover.state === "resolved" ? snapshot.cover.id : undefined);
14
+ const packageDir = snapshot.package.dir;
15
+ const pulledNodes = await resolvePulledNodes(orderedNodes, options.repoRoot, packageDir, options.inlineMaterials !== false);
16
+ const materialCounts = sumMaterialCounts(pulledNodes);
17
+ return {
18
+ kind: "pull",
19
+ requested,
20
+ ids: known,
21
+ missed,
22
+ nodes: pulledNodes.map(({ node, materials }) => ({
23
+ id: node.id,
24
+ ...(node.kind !== undefined ? { kind: node.kind } : {}),
25
+ ...(node.description ? { description: node.description } : {}),
26
+ ...(node.materials !== undefined
27
+ ? { declaredMaterials: [...node.materials] }
28
+ : {}),
29
+ ...(node.materials !== undefined
30
+ ? { materials: materials.materials }
31
+ : {}),
32
+ body: stripSkeletonSections(node.body),
33
+ })),
34
+ skeletons: pulledSkeletons(pulledNodes),
35
+ materialCounts,
36
+ };
37
+ }
38
+ async function resolvePulledNodes(nodes, repoRoot, packageDir, inlineMaterials) {
39
+ return Promise.all(nodes.map(async (node) => ({
40
+ node,
41
+ materials: inlineMaterials
42
+ ? await transportMaterials(node.materials, {
43
+ repoRoot,
44
+ packageDir,
45
+ materialsDir: GHOST_MATERIALS_DIR,
46
+ })
47
+ : locatorOnlyMaterials(node.materials, repoRoot, packageDir),
48
+ })));
49
+ }
50
+ function orderPulledNodes(nodes, coverId) {
51
+ return nodes
52
+ .map((node, index) => ({
53
+ node,
54
+ index,
55
+ bucket: steeringBucket(node, coverId),
56
+ }))
57
+ .sort((a, b) => a.bucket - b.bucket || a.index - b.index)
58
+ .map((entry) => entry.node);
59
+ }
60
+ function steeringBucket(node, coverId) {
61
+ if (coverId !== undefined && node.id === coverId)
62
+ return 0;
63
+ if (node.concrete)
64
+ return 1;
65
+ return 2;
66
+ }
67
+ function locatorOnlyMaterials(locators, repoRoot, packageDir) {
68
+ return {
69
+ materials: (locators ?? []).map((locator) => ({
70
+ locator,
71
+ tier: classifyMaterialLocator(locator).kind === "url"
72
+ ? "url"
73
+ : resolveLocalMaterialLocator(locator, {
74
+ repoRoot,
75
+ packageDir,
76
+ materialsDir: GHOST_MATERIALS_DIR,
77
+ }).tier,
78
+ })),
79
+ inlined: 0,
80
+ omitted: 0,
81
+ };
82
+ }
83
+ function sumMaterialCounts(nodes) {
84
+ return nodes.reduce((sum, { materials }) => ({
85
+ inlined: sum.inlined + materials.inlined,
86
+ omitted: sum.omitted + materials.omitted,
87
+ }), { inlined: 0, omitted: 0 });
88
+ }
89
+ function pulledSkeletons(nodes) {
90
+ return nodes.flatMap(({ node }) => extractSkeletonFences(node.body).map((fence) => ({
91
+ nodeId: node.id,
92
+ ...(fence.info ? { info: fence.info } : {}),
93
+ content: fence.content,
94
+ })));
95
+ }
96
+ //# sourceMappingURL=pull.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/embed/pull.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export type ReadOnlySnapshotMap<K, V> = ReadonlyMap<K, V>;
2
+ export declare function snapshotMap<K, V>(source: ReadonlyMap<K, V>): ReadOnlySnapshotMap<K, V>;
3
+ //# sourceMappingURL=readonly-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readonly-map.d.ts","sourceRoot":"","sources":["../../src/embed/readonly-map.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,CAAC,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE1D,wBAAgB,WAAW,CAAC,CAAC,EAAE,CAAC,EAC9B,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GACxB,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAiC3B"}
@@ -0,0 +1,33 @@
1
+ export function snapshotMap(source) {
2
+ const map = new Map(source.entries());
3
+ const readonlyMap = {
4
+ get size() {
5
+ return map.size;
6
+ },
7
+ get(key) {
8
+ return map.get(key);
9
+ },
10
+ has(key) {
11
+ return map.has(key);
12
+ },
13
+ entries() {
14
+ return map.entries();
15
+ },
16
+ keys() {
17
+ return map.keys();
18
+ },
19
+ values() {
20
+ return map.values();
21
+ },
22
+ forEach(callback, thisArg) {
23
+ map.forEach((value, key) => {
24
+ callback.call(thisArg, value, key, readonlyMap);
25
+ });
26
+ },
27
+ [Symbol.iterator]() {
28
+ return map[Symbol.iterator]();
29
+ },
30
+ };
31
+ return Object.freeze(readonlyMap);
32
+ }
33
+ //# sourceMappingURL=readonly-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readonly-map.js","sourceRoot":"","sources":["../../src/embed/readonly-map.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CACzB,MAAyB;IAEzB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAO,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAE5C,MAAM,WAAW,GAA8B;QAC7C,IAAI,IAAI;YACN,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC;QACD,GAAG,CAAC,GAAG;YACL,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;QACD,GAAG,CAAC,GAAG;YACL,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;QACD,OAAO;YACL,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QACD,IAAI;YACF,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;QACD,MAAM;YACJ,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,CAAC,QAAQ,EAAE,OAAO;YACvB,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBACzB,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC;QACL,CAAC;QACD,CAAC,MAAM,CAAC,QAAQ,CAAC;YACf,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,CAAC;KACF,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { GhostPackagePaths } from "../scan/fingerprint-package.js";
2
+ import type { GhostEmbedSnapshot } from "./types.js";
3
+ export declare function loadGhostSnapshot(paths: GhostPackagePaths): Promise<GhostEmbedSnapshot>;
4
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/embed/snapshot.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGxE,OAAO,KAAK,EAAmB,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEtE,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,kBAAkB,CAAC,CAsB7B"}
@@ -0,0 +1,105 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { parseGlossary } from "#ghost-core";
3
+ import { isMissingPathError } from "../internal/fs.js";
4
+ import { loadGhostPackage } from "../scan/fingerprint-package.js";
5
+ import { snapshotMap } from "./readonly-map.js";
6
+ export async function loadGhostSnapshot(paths) {
7
+ const loaded = await loadGhostPackage(paths);
8
+ const nodes = snapshotMap(cloneNodeMap(loaded.catalog.nodes));
9
+ const cover = resolveCoverState(loaded.manifest.cover, nodes);
10
+ const glossary = await loadSnapshotGlossary(paths.glossary);
11
+ return deepFreeze({
12
+ package: {
13
+ id: loaded.manifest.id,
14
+ dir: paths.packageDir,
15
+ manifest: loaded.manifest,
16
+ manifestRaw: loaded.manifestRaw,
17
+ },
18
+ catalog: {
19
+ nodes,
20
+ },
21
+ cover,
22
+ ...(glossary ? { glossary } : {}),
23
+ checks: snapshotMap(cloneCheckMap(loaded.checks)),
24
+ invalid: loaded.invalid.map((entry) => ({ ...entry })),
25
+ invalidChecks: loaded.invalidChecks.map((entry) => ({ ...entry })),
26
+ });
27
+ }
28
+ function resolveCoverState(coverId, nodes) {
29
+ if (coverId === undefined)
30
+ return { state: "absent" };
31
+ const node = nodes.get(coverId);
32
+ if (node === undefined)
33
+ return { state: "dangling", id: coverId };
34
+ return { state: "resolved", id: coverId, node };
35
+ }
36
+ function cloneNodeMap(source) {
37
+ return new Map([...source.entries()].map(([id, node]) => [
38
+ id,
39
+ deepFreeze({
40
+ ...node,
41
+ ...(node.materials ? { materials: [...node.materials] } : {}),
42
+ }),
43
+ ]));
44
+ }
45
+ function cloneCheckMap(source) {
46
+ return new Map([...source.entries()].map(([id, check]) => [
47
+ id,
48
+ deepFreeze({
49
+ id: check.id,
50
+ doc: {
51
+ frontmatter: cloneCheckFrontmatter(check.doc.frontmatter),
52
+ body: check.doc.body,
53
+ },
54
+ references: [...check.references],
55
+ }),
56
+ ]));
57
+ }
58
+ function cloneCheckFrontmatter(frontmatter) {
59
+ return {
60
+ ...frontmatter,
61
+ ...(frontmatter.tools ? { tools: [...frontmatter.tools] } : {}),
62
+ ...(frontmatter.references
63
+ ? { references: [...frontmatter.references] }
64
+ : {}),
65
+ };
66
+ }
67
+ async function loadSnapshotGlossary(glossaryPath) {
68
+ let raw;
69
+ try {
70
+ raw = await readFile(glossaryPath, "utf-8");
71
+ }
72
+ catch (err) {
73
+ if (isMissingPathError(err))
74
+ return undefined;
75
+ throw err;
76
+ }
77
+ const result = parseGlossary(raw);
78
+ if (result.glossary === null)
79
+ return undefined;
80
+ return {
81
+ path: glossaryPath,
82
+ kinds: result.glossary.kinds.map((kind) => ({ ...kind })),
83
+ };
84
+ }
85
+ function deepFreeze(value) {
86
+ if (value && typeof value === "object") {
87
+ if (value instanceof Map) {
88
+ for (const [key, item] of value) {
89
+ deepFreeze(key);
90
+ deepFreeze(item);
91
+ }
92
+ }
93
+ else if (Array.isArray(value)) {
94
+ for (const item of value)
95
+ deepFreeze(item);
96
+ }
97
+ else {
98
+ for (const item of Object.values(value))
99
+ deepFreeze(item);
100
+ }
101
+ Object.freeze(value);
102
+ }
103
+ return value;
104
+ }
105
+ //# sourceMappingURL=snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/embed/snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ import type { CatalogMenuEntry, GhostCatalogNode, GhostGlossaryKind, GhostPackageManifest, TransportedMaterial } from "#ghost-core";
2
+ import type { PullMiss } from "../observability-events.js";
3
+ import type { LoadedCheck } from "../scan/check-files.js";
4
+ import type { ReadOnlySnapshotMap } from "./readonly-map.js";
5
+ export type GhostCoverState = {
6
+ state: "resolved";
7
+ id: string;
8
+ node: Readonly<GhostCatalogNode>;
9
+ } | {
10
+ state: "absent";
11
+ } | {
12
+ state: "dangling";
13
+ id: string;
14
+ };
15
+ export interface GhostGlossarySnapshot {
16
+ path: string;
17
+ kinds: readonly Readonly<GhostGlossaryKind>[];
18
+ }
19
+ export interface GhostEmbedSnapshot {
20
+ package: Readonly<{
21
+ id: string;
22
+ dir: string;
23
+ manifest: Readonly<GhostPackageManifest>;
24
+ manifestRaw: string;
25
+ }>;
26
+ catalog: Readonly<{
27
+ nodes: ReadOnlySnapshotMap<string, Readonly<GhostCatalogNode>>;
28
+ }>;
29
+ cover: GhostCoverState;
30
+ glossary?: Readonly<GhostGlossarySnapshot>;
31
+ checks: ReadOnlySnapshotMap<string, Readonly<LoadedCheck>>;
32
+ invalid: readonly Readonly<{
33
+ file: string;
34
+ message: string;
35
+ }>[];
36
+ invalidChecks: readonly Readonly<{
37
+ file: string;
38
+ message: string;
39
+ }>[];
40
+ }
41
+ export interface GhostMenuKind {
42
+ name: string;
43
+ purpose: string;
44
+ }
45
+ export interface GhostGatherCoverage {
46
+ nodes: number;
47
+ concrete: number;
48
+ payloads: {
49
+ materials: number;
50
+ fencedExamples: number;
51
+ skeletons: number;
52
+ };
53
+ undescribed: number;
54
+ }
55
+ export interface GhostGatherContract {
56
+ completeness: {
57
+ complete: true;
58
+ filtered: false;
59
+ ranked: false;
60
+ selectedByGhost: false;
61
+ };
62
+ selection: {
63
+ basis: "applicability";
64
+ instruction: string;
65
+ topicOverlapAloneIsApplicability: false;
66
+ addForCompleteness: false;
67
+ omitApplicableForCount: false;
68
+ };
69
+ noAsk: string;
70
+ }
71
+ export interface GhostGatherResult {
72
+ kind: "menu";
73
+ ask?: string;
74
+ source: {
75
+ artifact: "ghost package";
76
+ list: "Available guidance";
77
+ };
78
+ contract: GhostGatherContract;
79
+ cover: GhostCoverState;
80
+ silence: {
81
+ ifNoneApply: string;
82
+ };
83
+ coverage: GhostGatherCoverage;
84
+ kinds?: readonly GhostMenuKind[];
85
+ /** Selectable menu entries. A resolved cover is intentionally separated. */
86
+ nodes: readonly CatalogMenuEntry[];
87
+ }
88
+ export type GhostPullOrder = "steering" | "given";
89
+ export interface GhostPulledSkeleton {
90
+ nodeId: string;
91
+ info?: string;
92
+ content: string;
93
+ }
94
+ export interface GhostPulledNode {
95
+ id: string;
96
+ kind?: string;
97
+ description?: string;
98
+ declaredMaterials?: readonly string[];
99
+ materials?: readonly TransportedMaterial[];
100
+ body: string;
101
+ }
102
+ export interface GhostPullResult {
103
+ kind: "pull";
104
+ requested: readonly string[];
105
+ ids: readonly string[];
106
+ missed: readonly PullMiss[];
107
+ nodes: readonly GhostPulledNode[];
108
+ skeletons: readonly GhostPulledSkeleton[];
109
+ materialCounts: {
110
+ inlined: number;
111
+ omitted: number;
112
+ };
113
+ }
114
+ export type GhostInspectLocalPolicy = "bundled" | "bundled-and-referenced";
115
+ export interface GhostInspectPolicy {
116
+ local?: GhostInspectLocalPolicy;
117
+ maxBytes?: number;
118
+ allowedMimeTypes?: readonly string[];
119
+ }
120
+ export interface InspectGhostMaterialRequest {
121
+ nodeId: string;
122
+ locator: string;
123
+ repoRoot: string;
124
+ policy?: GhostInspectPolicy;
125
+ }
126
+ export type InspectGhostMaterialResult = {
127
+ ok: true;
128
+ nodeId: string;
129
+ locator: string;
130
+ tier: "bundled" | "referenced";
131
+ path: string;
132
+ byteLength: number;
133
+ mime: string;
134
+ contentKind: "text";
135
+ encoding: "utf-8";
136
+ text: string;
137
+ } | {
138
+ ok: true;
139
+ nodeId: string;
140
+ locator: string;
141
+ tier: "bundled" | "referenced";
142
+ path: string;
143
+ byteLength: number;
144
+ mime: string;
145
+ contentKind: "image" | "binary";
146
+ } | {
147
+ ok: false;
148
+ nodeId: string;
149
+ locator: string;
150
+ reason: string;
151
+ tier?: "bundled" | "referenced" | "url";
152
+ path?: string;
153
+ byteLength?: number;
154
+ mime?: string;
155
+ };
156
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/embed/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/embed/types.ts"],"names":[],"mappings":""}
@@ -1,5 +1,6 @@
1
+ /** @deprecated Import from `@design-intelligence/ghost/package`. */
1
2
  export { FINGERPRINT_MANIFEST_FILENAME, FINGERPRINT_PACKAGE_DIR, } from "./scan/constants.js";
2
- export type { FingerprintPackagePaths, LoadedFingerprintPackage, } from "./scan/fingerprint-package.js";
3
+ export type { FingerprintPackagePaths, InitFingerprintPackageOptions, InitFingerprintPackageResult, LoadedFingerprintPackage, } from "./scan/fingerprint-package.js";
3
4
  export { initFingerprintPackage, lintFingerprintPackage, loadFingerprintPackage, resolveFingerprintPackage, } from "./scan/fingerprint-package.js";
4
5
  export type { LintIssue, LintReport, LintSeverity } from "./scan/lint.js";
5
6
  //# sourceMappingURL=fingerprint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,uBAAuB,EACvB,6BAA6B,EAC7B,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,3 +1,4 @@
1
+ /** @deprecated Import from `@design-intelligence/ghost/package`. */
1
2
  export { FINGERPRINT_MANIFEST_FILENAME, FINGERPRINT_PACKAGE_DIR, } from "./scan/constants.js";
2
3
  export { initFingerprintPackage, lintFingerprintPackage, loadFingerprintPackage, resolveFingerprintPackage, } from "./scan/fingerprint-package.js";
3
4
  //# sourceMappingURL=fingerprint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,+BAA+B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"assemble.d.ts","sourceRoot":"","sources":["../../../src/ghost-core/catalog/assemble.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,YAAY,CAAC;AAEjE;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,iBAAiB,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,YAAY,CAsBzE"}
1
+ {"version":3,"file":"assemble.d.ts","sourceRoot":"","sources":["../../../src/ghost-core/catalog/assemble.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,YAAY,CAAC;AAEjE;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,iBAAiB,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,YAAY,CAuBzE"}
@@ -1,4 +1,4 @@
1
- import { carriesConcreteMaterial, extractSkeletonSections, } from "../node/steering.js";
1
+ import { carriesConcreteMaterial, extractSkeletonSections, hasSubstantialFencedExample, } from "../node/steering.js";
2
2
  /**
3
3
  * Assemble package node files into one flat in-memory catalog. Each node's id
4
4
  * is its path; kind/slug come from its filename. No edges, no cascade — the
@@ -19,6 +19,7 @@ export function assembleCatalog(input) {
19
19
  ...(fm.description !== undefined ? { description: fm.description } : {}),
20
20
  ...(fm.materials !== undefined ? { materials: fm.materials } : {}),
21
21
  concrete,
22
+ hasFencedExample: hasSubstantialFencedExample(placed.doc.body),
22
23
  hasSkeleton: extractSkeletonSections(placed.doc.body).length > 0,
23
24
  body: placed.doc.body,
24
25
  });
@@ -1 +1 @@
1
- {"version":3,"file":"assemble.js","sourceRoot":"","sources":["../../../src/ghost-core/catalog/assemble.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAuB7B;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAElD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;QAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;QAClC,MAAM,QAAQ,GAAG,uBAAuB,CAAC;YACvC,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI;SACtB,CAAC,CAAC;QACH,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE;YACnB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,EAAE;YAC5D,GAAG,CAAC,EAAE,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,GAAG,CAAC,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,QAAQ;YACR,WAAW,EAAE,uBAAuB,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAChE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI;SACtB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"assemble.js","sourceRoot":"","sources":["../../../src/ghost-core/catalog/assemble.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,qBAAqB,CAAC;AAuB7B;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAElD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;QAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;QAClC,MAAM,QAAQ,GAAG,uBAAuB,CAAC;YACvC,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI;SACtB,CAAC,CAAC;QACH,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE;YACnB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,EAAE;YAC5D,GAAG,CAAC,EAAE,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,GAAG,CAAC,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,QAAQ;YACR,gBAAgB,EAAE,2BAA2B,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAC9D,WAAW,EAAE,uBAAuB,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAChE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI;SACtB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import type { GhostCatalog } from "./types.js";
2
2
  /**
3
3
  * One entry in the gather menu: a node presented as `id` + `kind` +
4
- * `description` the retrieval payload the agent selects against. The agent
5
- * matches a natural-language ask against these and reads what it judges
6
- * relevant; Ghost does no NLP and no selection.
4
+ * `description`, the retrieval payload the agent selects against. The agent
5
+ * matches a natural-language ask against these and pulls applicable nodes;
6
+ * ghost does no NLP and no selection.
7
7
  */
8
8
  export interface CatalogMenuEntry {
9
9
  id: string;
@@ -12,8 +12,10 @@ export interface CatalogMenuEntry {
12
12
  description?: string;
13
13
  /** Count of material locators available after pulling this node. */
14
14
  materials?: number;
15
- /** True when this entry carries concrete material by derived structure. */
15
+ /** True when this entry carries a material locator, fenced example, or Skeleton. */
16
16
  concrete: boolean;
17
+ /** True when this entry includes a substantial fenced example. */
18
+ hasFencedExample?: true;
17
19
  /** True when this entry includes a Skeleton section. */
18
20
  hasSkeleton?: true;
19
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../src/ghost-core/catalog/menu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,QAAQ,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,gBAAgB,EAAE,CAiB1E"}
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../src/ghost-core/catalog/menu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,QAAQ,EAAE,OAAO,CAAC;IAClB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,IAAI,CAAC;IACxB,wDAAwD;IACxD,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,gBAAgB,EAAE,CAkB1E"}
@@ -14,6 +14,7 @@ export function buildCatalogMenu(catalog) {
14
14
  ? { materials: node.materials.length }
15
15
  : {}),
16
16
  concrete: node.concrete,
17
+ ...(node.hasFencedExample ? { hasFencedExample: true } : {}),
17
18
  ...(node.hasSkeleton ? { hasSkeleton: true } : {}),
18
19
  });
19
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../../src/ghost-core/catalog/menu.ts"],"names":[],"mappings":"AAqBA;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAqB;IACpD,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;gBAC3D,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;gBACtC,CAAC,CAAC,EAAE,CAAC;YACP,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5D,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC"}
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../../src/ghost-core/catalog/menu.ts"],"names":[],"mappings":"AAuBA;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAqB;IACpD,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;gBAC3D,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;gBACtC,CAAC,CAAC,EAAE,CAAC;YACP,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5D,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC"}
@@ -10,12 +10,14 @@ export interface GhostCatalogNode {
10
10
  kind?: string;
11
11
  /** Filename slug: bare name, or the part after the first dot. */
12
12
  slug: string;
13
- /** One-line "what this is / when to gather it" — the retrieval payload. */
13
+ /** Retrieval payload shown in gather: what applies, when, and what it contributes. */
14
14
  description?: string;
15
15
  /** Optional material locators carried by the authored node. */
16
16
  materials?: string[];
17
- /** True when the node carries materials, a substantial fence, or a Skeleton. */
17
+ /** True when the node carries a material locator, substantial fence, or Skeleton. */
18
18
  concrete: boolean;
19
+ /** True when the node body carries a fenced block of at least 3 lines. */
20
+ hasFencedExample: boolean;
19
21
  /** True when the node declares a `## Skeleton` section. */
20
22
  hasSkeleton: boolean;
21
23
  body: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ghost-core/catalog/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,gFAAgF;IAChF,QAAQ,EAAE,OAAO,CAAC;IAClB,2DAA2D;IAC3D,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CACtC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ghost-core/catalog/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,qFAAqF;IACrF,QAAQ,EAAE,OAAO,CAAC;IAClB,0EAA0E;IAC1E,gBAAgB,EAAE,OAAO,CAAC;IAC1B,2DAA2D;IAC3D,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CACtC"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Public surface for `ghost.check/v1` — markdown + frontmatter checks an agent
3
- * evaluates (Ghost never runs them). Every check is offered to the reviewer;
3
+ * evaluates (ghost never runs them). Every check is offered to the reviewer;
4
4
  * the agent judges relevance against the diff and the grounded prose. A check's
5
5
  * optional `source:` names the fingerprint prose it enforces.
6
6
  */
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Public surface for `ghost.check/v1` — markdown + frontmatter checks an agent
3
- * evaluates (Ghost never runs them). Every check is offered to the reviewer;
3
+ * evaluates (ghost never runs them). Every check is offered to the reviewer;
4
4
  * the agent judges relevance against the diff and the grounded prose. A check's
5
5
  * optional `source:` names the fingerprint prose it enforces.
6
6
  */
@@ -1,8 +1,8 @@
1
1
  import { type GhostCheckLintReport } from "./types.js";
2
2
  /**
3
- * Lint a Ghost check markdown file (`ghost.check/v1`): required frontmatter
3
+ * Lint a ghost check markdown file (`ghost.check/v1`): required frontmatter
4
4
  * (`name`, `description`, `severity`), an optional `source:` provenance pointer,
5
- * and a non-empty body. Ghost never executes the check — this only validates
5
+ * and a non-empty body. ghost never executes the check — this only validates
6
6
  * that it is well-formed.
7
7
  */
8
8
  export declare function lintGhostCheck(raw: string): GhostCheckLintReport;
@@ -2,9 +2,9 @@ import { parseCheckMarkdown } from "./parse.js";
2
2
  import { parseSourceRef } from "./source-ref.js";
3
3
  import { GHOST_CHECK_SEVERITIES, } from "./types.js";
4
4
  /**
5
- * Lint a Ghost check markdown file (`ghost.check/v1`): required frontmatter
5
+ * Lint a ghost check markdown file (`ghost.check/v1`): required frontmatter
6
6
  * (`name`, `description`, `severity`), an optional `source:` provenance pointer,
7
- * and a non-empty body. Ghost never executes the check — this only validates
7
+ * and a non-empty body. ghost never executes the check — this only validates
8
8
  * that it is well-formed.
9
9
  */
10
10
  export function lintGhostCheck(raw) {
@@ -1,6 +1,6 @@
1
1
  import type { GhostCheckDocument } from "./types.js";
2
2
  /**
3
- * Parse a well-formed Ghost check into a typed document. Assumes the input has
3
+ * Parse a well-formed ghost check into a typed document. Assumes the input has
4
4
  * already passed `lintGhostCheck` (throws on missing required frontmatter).
5
5
  */
6
6
  export declare function loadGhostCheck(raw: string): GhostCheckDocument;