@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
@@ -1,14 +1,11 @@
1
- import { readFile } from "node:fs/promises";
2
- import { buildCatalogMenu, parseGlossary, } from "#ghost-core";
3
- import { resolveFingerprintPackage } from "../fingerprint.js";
4
- import { isMissingPathError } from "../internal/fs.js";
1
+ import { gatherGhostPackage, loadGhostSnapshot } from "../embed/index.js";
5
2
  import { appendGhostEvent, resolveRunId } from "../observability-events.js";
6
- import { loadFingerprintPackage } from "../scan/fingerprint-package.js";
3
+ import { resolveGhostPackage } from "../package.js";
7
4
  import { failFromError } from "./errors.js";
8
5
  export function registerGatherCommand(cli) {
9
6
  cli
10
- .command("gather [...ask]", "Emit the fingerprint menu every node's id, kind, and description — for the agent to select from.")
11
- .option("--package <dir>", "Use this fingerprint package directory (default: ./.ghost)")
7
+ .command("gather [...ask]", "Emit the complete available guidance menu so the agent can pull applicable nodes.")
8
+ .option("--package <dir>", "Use this ghost package directory (default: ./.ghost)")
12
9
  .option("--format <fmt>", "Output format: markdown or json", {
13
10
  default: "markdown",
14
11
  })
@@ -20,43 +17,25 @@ export function registerGatherCommand(cli) {
20
17
  process.exit(2);
21
18
  return;
22
19
  }
23
- const ask = normalizeAsk(askParts);
24
- const paths = resolveFingerprintPackage(opts.package, process.cwd());
25
- const loaded = await loadFingerprintPackage(paths);
26
- const coverId = loaded.manifest.cover;
27
- const coverNode = coverId
28
- ? loaded.catalog.nodes.get(coverId)
29
- : undefined;
30
- const menu = buildCatalogMenu(loaded.catalog).filter((entry) => entry.id !== coverNode?.id);
31
- const kinds = await readMenuKinds(paths.glossary);
20
+ const ask = normalizeAskParts(askParts);
21
+ const paths = resolveGhostPackage(opts.package, process.cwd());
22
+ const snapshot = await loadGhostSnapshot(paths);
23
+ const menu = gatherGhostPackage(snapshot, { ask });
32
24
  const runId = resolveRunId(opts.run);
33
25
  await appendGhostEvent(paths.packageDir, {
34
26
  event: "gather",
35
27
  ...(runId ? { run: runId } : {}),
36
- ...(ask ? { ask } : {}),
37
- menu: menu.map((entry) => entry.id),
28
+ ...(menu.ask ? { ask: menu.ask } : {}),
29
+ menu: menu.nodes.map((entry) => entry.id),
38
30
  });
39
- // Ghost does no selection. It emits the catalog; the agent reads the
40
- // ask against it and pulls the nodes it judges relevant.
31
+ // ghost does no selection. It emits the complete catalog; the agent
32
+ // reads the ask against it and pulls the nodes whose described
33
+ // conditions apply.
41
34
  if (opts.format === "json") {
42
- process.stdout.write(`${JSON.stringify({
43
- kind: "menu",
44
- ...(ask ? { ask } : {}),
45
- ...(coverNode
46
- ? { cover: { id: coverNode.id, body: coverNode.body } }
47
- : {}),
48
- coverage: menuCoverage(menu),
49
- ...(kinds.length > 0 ? { kinds } : {}),
50
- nodes: menu,
51
- }, null, 2)}\n`);
35
+ process.stdout.write(`${JSON.stringify(formatGatherJson(menu), null, 2)}\n`);
52
36
  }
53
37
  else {
54
- process.stdout.write(formatMenuMarkdown(menu, kinds, {
55
- ask,
56
- cover: coverNode
57
- ? { id: coverNode.id, body: coverNode.body }
58
- : undefined,
59
- }));
38
+ process.stdout.write(formatMenuMarkdown(menu));
60
39
  }
61
40
  process.exit(0);
62
41
  }
@@ -65,76 +44,71 @@ export function registerGatherCommand(cli) {
65
44
  }
66
45
  });
67
46
  }
68
- function normalizeAsk(askParts) {
47
+ function normalizeAskParts(askParts) {
69
48
  const ask = (askParts ?? []).join(" ").trim();
70
49
  return ask.length > 0 ? ask : undefined;
71
50
  }
72
- /**
73
- * Read the glossary's declared kinds and their prose purposes for the menu
74
- * header. Missing or malformed glossaries degrade to no legend — the menu
75
- * itself never depends on the glossary being present.
76
- */
77
- async function readMenuKinds(glossaryPath) {
78
- let raw;
79
- try {
80
- raw = await readFile(glossaryPath, "utf-8");
81
- }
82
- catch (err) {
83
- if (isMissingPathError(err))
84
- return [];
85
- throw err;
86
- }
87
- const result = parseGlossary(raw);
88
- if (result.glossary === null)
89
- return [];
90
- return result.glossary.kinds
91
- .filter((kind) => kind.purpose.length > 0)
92
- .map((kind) => ({
93
- name: kind.name,
94
- // Legend entries are one line each: keep the section's first paragraph
95
- // and collapse internal wrapping.
96
- purpose: (kind.purpose.split(/\n\s*\n/, 1)[0] ?? "")
97
- .replace(/\s+/g, " ")
98
- .trim(),
99
- }));
100
- }
101
- function menuCoverage(menu) {
51
+ function formatGatherJson(menu) {
102
52
  return {
103
- nodes: menu.length,
104
- concrete: menu.filter((entry) => entry.concrete).length,
105
- // A node without a description is a bare id the agent cannot select
106
- // against — surface the count where selection happens.
107
- undescribed: menu.filter((entry) => !entry.description || entry.description.trim().length === 0).length,
53
+ kind: menu.kind,
54
+ ...(menu.ask ? { ask: menu.ask } : {}),
55
+ source: menu.source,
56
+ contract: menu.contract,
57
+ ...(menu.cover.state === "resolved"
58
+ ? {
59
+ cover: {
60
+ id: menu.cover.id,
61
+ body: menu.cover.node.body,
62
+ inContext: true,
63
+ selectable: false,
64
+ },
65
+ }
66
+ : {}),
67
+ next: { command: "ghost pull <id> [<id>…]" },
68
+ silence: menu.silence,
69
+ coverage: menu.coverage,
70
+ ...(menu.kinds !== undefined ? { kinds: menu.kinds } : {}),
71
+ nodes: menu.nodes,
108
72
  };
109
73
  }
110
74
  function menuCoverageLine(menu) {
111
- const coverage = menuCoverage(menu);
75
+ const coverage = menu.coverage;
76
+ const payloadParts = [
77
+ `${coverage.payloads.materials} with materials`,
78
+ `${coverage.payloads.fencedExamples} with substantial fenced examples`,
79
+ `${coverage.payloads.skeletons} with Skeletons`,
80
+ ];
112
81
  const parts = [
113
82
  `${coverage.nodes} nodes`,
114
- `${coverage.concrete} carry concrete material`,
83
+ `${coverage.concrete} carry payloads (${payloadParts.join(", ")})`,
115
84
  ];
116
85
  if (coverage.undescribed > 0) {
117
86
  parts.push(`${coverage.undescribed} lack descriptions`);
118
87
  }
119
88
  return parts.join(" · ");
120
89
  }
121
- function formatMenuMarkdown(menu, kinds, options = {}) {
122
- const lines = [
123
- options.ask ? `# Ghost Nodes — for: ${options.ask}` : "# Ghost Nodes",
124
- "",
125
- ];
126
- if (options.cover) {
127
- lines.push(`## Cover — \`${options.cover.id}\``, "", options.cover.body, "", "---", "");
90
+ function formatMenuMarkdown(menu) {
91
+ const lines = ["# ghost package", ""];
92
+ if (menu.ask)
93
+ lines.push(`Ask: ${menu.ask}`, "");
94
+ if (menu.cover.state === "resolved") {
95
+ lines.push(`## Cover in context: \`${menu.cover.id}\``, "", menu.cover.node.body, "", "Cover status: already in context; outside selection; do not pull again.", "", "---", "");
96
+ }
97
+ lines.push("## Available guidance", "", menuCoverageLine(menu), "");
98
+ if (menu.ask) {
99
+ lines.push("Complete, unfiltered, unranked list from the ghost package. ghost has not selected nodes for this ask.", "Pull every node whose description indicates its stated situation applies and whose guidance, material, structure, or refusal governs the work. Skip inapplicable nodes. Topic overlap alone is not applicability. Do not add nodes for completeness or omit applicable nodes to meet a count.", "Next: `ghost pull <id> [<id>…]`.", "If nothing applies, name the package's silence, follow the cover silence posture, and do not invent ghost-backed guidance.", "");
128
100
  }
129
- lines.push("The fingerprint menu. Match the ask against these nodes and read the ones you judge relevant.", menuCoverageLine(menu), "");
130
- if (kinds.length > 0) {
101
+ else {
102
+ lines.push("Complete, unfiltered, unranked list from the ghost package. Bare gather is catalog inspection; ghost has not grounded a task or selected nodes.", "When grounding an ask, pull every applicable node with `ghost pull <id> [<id>…]`. Skip inapplicable nodes and do not invent ghost-backed guidance when the ghost package is silent.", "");
103
+ }
104
+ if (menu.kinds !== undefined && menu.kinds.length > 0) {
131
105
  lines.push("Kinds:", "");
132
- for (const kind of kinds) {
106
+ for (const kind of menu.kinds) {
133
107
  lines.push(`- **${kind.name}** — ${kind.purpose}`);
134
108
  }
135
109
  lines.push("");
136
110
  }
137
- for (const entry of menu) {
111
+ for (const entry of menu.nodes) {
138
112
  const kind = entry.kind ? ` _(${entry.kind})_` : "";
139
113
  lines.push(`- \`${entry.id}\`${kind}`);
140
114
  if (entry.description)
@@ -142,10 +116,21 @@ function formatMenuMarkdown(menu, kinds, options = {}) {
142
116
  if (entry.materials !== undefined) {
143
117
  lines.push(` - materials: ${entry.materials}`);
144
118
  }
145
- if (entry.concrete) {
146
- lines.push(` - carries concrete material${entry.hasSkeleton ? " (Skeleton)" : ""}`);
119
+ const payloadTypes = formatPayloadTypes(entry);
120
+ if (payloadTypes.length > 0) {
121
+ lines.push(` - payloads: ${payloadTypes.join(", ")}`);
147
122
  }
148
123
  }
149
124
  return `${lines.join("\n")}\n`;
150
125
  }
126
+ function formatPayloadTypes(entry) {
127
+ const types = [];
128
+ if (entry.materials !== undefined)
129
+ types.push("materials");
130
+ if (entry.hasFencedExample)
131
+ types.push("substantial fenced example");
132
+ if (entry.hasSkeleton)
133
+ types.push("Skeleton");
134
+ return types;
135
+ }
151
136
  //# sourceMappingURL=gather-command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gather-command.js","sourceRoot":"","sources":["../../src/commands/gather-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gather-command.js","sourceRoot":"","sources":["../../src/commands/gather-command.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init-command.d.ts","sourceRoot":"","sources":["../../src/commands/init-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAO/B,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAwGlD"}
1
+ {"version":3,"file":"init-command.d.ts","sourceRoot":"","sources":["../../src/commands/init-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAO/B,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAiGlD"}
@@ -1,16 +1,16 @@
1
1
  import { UsageError } from "#ghost-core";
2
- import { initFingerprintPackage } from "../fingerprint.js";
2
+ import { initGhostPackage } from "../package.js";
3
3
  import { addChecksDir } from "../scan/check-scaffold.js";
4
4
  import { getInitBody } from "../scan/templates.js";
5
5
  import { failFromError } from "./errors.js";
6
6
  export function registerInitCommand(cli) {
7
7
  cli
8
- .command("init", "Create a root .ghost node fingerprint package")
9
- .option("--package <dir>", "Exact fingerprint package directory to initialize")
8
+ .command("init", "Create a root .ghost package of nodes")
9
+ .option("--package <dir>", "Exact ghost package directory to initialize")
10
10
  .option("--template <name>", "Init template to scaffold (default: skeleton)")
11
11
  .option("--body <name>", "Init body to install: a full inhabited package (e.g. vessel-light)")
12
12
  .option("--with <capabilities>", "Comma-separated capabilities to add after scaffolding (e.g. checks)")
13
- .option("--force", "Overwrite existing Ghost fingerprint files")
13
+ .option("--force", "Overwrite existing ghost package files")
14
14
  .option("--format <fmt>", "Output format: cli or json", { default: "cli" })
15
15
  .action(async (opts) => {
16
16
  try {
@@ -30,7 +30,7 @@ export function registerInitCommand(cli) {
30
30
  if (body?.includesChecks && withIds.includes("checks")) {
31
31
  throw new UsageError(`--with checks is redundant with --body ${body.name} — this body already includes its own checks/.`);
32
32
  }
33
- const result = await initFingerprintPackage(exactPackage, process.cwd(), {
33
+ const result = await initGhostPackage(exactPackage, process.cwd(), {
34
34
  ...(typeof opts.template === "string"
35
35
  ? { template: opts.template }
36
36
  : {}),
@@ -55,7 +55,7 @@ export function registerInitCommand(cli) {
55
55
  }, null, 2)}\n`);
56
56
  }
57
57
  else {
58
- process.stdout.write(`Initialized Ghost fingerprint package: ${result.paths.dir}\n`);
58
+ process.stdout.write(`Initialized ghost package: ${result.paths.dir}\n`);
59
59
  for (const relativePath of result.written) {
60
60
  process.stdout.write(` ${relativePath}\n`);
61
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"init-command.js","sourceRoot":"","sources":["../../src/commands/init-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-command.js","sourceRoot":"","sources":["../../src/commands/init-command.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pull-command.d.ts","sourceRoot":"","sources":["../../src/commands/pull-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAqC/B,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CA+HlD"}
1
+ {"version":3,"file":"pull-command.d.ts","sourceRoot":"","sources":["../../src/commands/pull-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAU/B,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAwFlD"}
@@ -1,14 +1,13 @@
1
- import { classifyMaterialLocator, closestIds, extractSkeletonFences, resolveLocalMaterialLocator, stripSkeletonSections, transportMaterials, } from "#ghost-core";
2
- import { resolveFingerprintPackage } from "../fingerprint.js";
3
- import { appendGhostEvent, resolveRunId, } from "../observability-events.js";
4
- import { GHOST_EVENTS_FILENAME, GHOST_MATERIALS_DIR, } from "../scan/constants.js";
5
- import { loadFingerprintPackage } from "../scan/fingerprint-package.js";
1
+ import { loadGhostSnapshot, pullGhostNodes } from "../embed/index.js";
2
+ import { appendGhostEvent, resolveRunId } from "../observability-events.js";
3
+ import { resolveGhostPackage } from "../package.js";
4
+ import { GHOST_EVENTS_FILENAME } from "../scan/constants.js";
6
5
  import { resolveGitRoot } from "../scan/package-paths.js";
7
6
  import { failFromError } from "./errors.js";
8
7
  export function registerPullCommand(cli) {
9
8
  cli
10
9
  .command("pull <...ids>", "Emit the named nodes' full prose bodies, and append the pull to the events tape.")
11
- .option("--package <dir>", "Use this fingerprint package directory (default: ./.ghost)")
10
+ .option("--package <dir>", "Use this ghost package directory (default: ./.ghost)")
12
11
  .option("--format <fmt>", "Output format: markdown or json", {
13
12
  default: "markdown",
14
13
  })
@@ -30,69 +29,44 @@ export function registerPullCommand(cli) {
30
29
  process.exit(2);
31
30
  return;
32
31
  }
33
- const paths = resolveFingerprintPackage(opts.package, process.cwd());
34
- const loaded = await loadFingerprintPackage(paths);
35
- const catalog = loaded.catalog;
36
- const requested = [...new Set(ids)];
37
- const allIds = [...catalog.nodes.keys()];
38
- const known = requested.filter((id) => catalog.nodes.has(id));
39
- const missed = requested
40
- .filter((id) => !catalog.nodes.has(id))
41
- .map((id) => ({ requested: id, suggested: closestIds(id, allIds) }));
42
- for (const miss of missed) {
32
+ const paths = resolveGhostPackage(opts.package, process.cwd());
33
+ const snapshot = await loadGhostSnapshot(paths);
34
+ const repoRoot = await resolveGitRoot(process.cwd());
35
+ const result = await pullGhostNodes(snapshot, {
36
+ ids,
37
+ repoRoot,
38
+ inlineMaterials: opts.materials !== false,
39
+ order: opts.order,
40
+ });
41
+ for (const miss of result.missed) {
43
42
  const hint = miss.suggested.length > 0
44
43
  ? ` (did you mean ${miss.suggested.map((s) => `\`${s}\``).join(", ")}?)`
45
44
  : "";
46
45
  console.error(`Warning: unknown node \`${miss.requested}\`${hint}`);
47
46
  }
48
- if (missed.length > 0) {
47
+ if (result.missed.length > 0) {
49
48
  console.error("Run `ghost gather` to list every node.");
50
49
  }
51
- const givenNodes = known.map((id) => catalog.nodes.get(id));
52
- const nodes = opts.order === "given"
53
- ? givenNodes
54
- : orderPulledNodes(givenNodes, loaded.manifest.cover);
55
- const pulledNodes = await resolvePulledNodes(nodes, paths.packageDir, opts.materials !== false);
56
- const counts = sumMaterialCounts(pulledNodes);
57
50
  if (opts.events !== false) {
58
51
  const runId = resolveRunId(opts.run);
59
52
  await appendGhostEvent(paths.packageDir, {
60
53
  event: "pull",
61
54
  ...(runId ? { run: runId } : {}),
62
- ids: known,
63
- inlinedMaterials: counts.inlined,
64
- omittedMaterials: counts.omitted,
65
- ...(missed.length > 0 ? { missed } : {}),
55
+ ids: [...result.ids],
56
+ inlinedMaterials: result.materialCounts.inlined,
57
+ omittedMaterials: result.materialCounts.omitted,
58
+ ...(result.missed.length > 0 ? { missed: [...result.missed] } : {}),
66
59
  });
67
60
  }
68
- if (known.length === 0) {
61
+ if (result.ids.length === 0) {
69
62
  process.exit(2);
70
63
  return;
71
64
  }
72
65
  if (opts.format === "json") {
73
- process.stdout.write(`${JSON.stringify({
74
- kind: "pull",
75
- ...(missed.length > 0 ? { missed } : {}),
76
- nodes: pulledNodes.map(({ node, materials }) => ({
77
- id: node.id,
78
- ...(node.kind !== undefined ? { kind: node.kind } : {}),
79
- ...(node.description
80
- ? { description: node.description }
81
- : {}),
82
- ...(node.materials !== undefined
83
- ? {
84
- materials: opts.materials === false
85
- ? node.materials
86
- : materials.materials.map(formatJsonMaterial),
87
- }
88
- : {}),
89
- body: stripSkeletonSections(node.body),
90
- })),
91
- skeletons: pulledSkeletons(pulledNodes),
92
- }, null, 2)}\n`);
66
+ process.stdout.write(`${JSON.stringify(formatPullJson(result, opts.materials !== false), null, 2)}\n`);
93
67
  }
94
68
  else {
95
- process.stdout.write(formatPullMarkdown(pulledNodes));
69
+ process.stdout.write(formatPullMarkdown(result));
96
70
  }
97
71
  process.exit(0);
98
72
  }
@@ -101,120 +75,93 @@ export function registerPullCommand(cli) {
101
75
  }
102
76
  });
103
77
  }
104
- async function resolvePulledNodes(nodes, packageDir, inlineMaterials) {
105
- const repoRoot = await resolveGitRoot(process.cwd());
106
- return Promise.all(nodes.map(async (node) => ({
107
- node,
108
- materials: inlineMaterials
109
- ? await transportMaterials(node.materials, {
110
- repoRoot,
111
- packageDir,
112
- materialsDir: GHOST_MATERIALS_DIR,
113
- })
114
- : locatorOnlyMaterials(node.materials, repoRoot, packageDir),
115
- })));
116
- }
117
- function orderPulledNodes(nodes, coverId) {
118
- return nodes
119
- .map((node, index) => ({
120
- node,
121
- index,
122
- bucket: steeringBucket(node, coverId),
123
- }))
124
- .sort((a, b) => a.bucket - b.bucket || a.index - b.index)
125
- .map((entry) => entry.node);
126
- }
127
- function steeringBucket(node, coverId) {
128
- if (coverId !== undefined && node.id === coverId)
129
- return 0;
130
- if (node.concrete)
131
- return 1;
132
- return 2;
133
- }
134
- function locatorOnlyMaterials(locators, repoRoot, packageDir) {
78
+ function formatPullJson(result, inlineMaterials) {
135
79
  return {
136
- materials: (locators ?? []).map((locator) => ({
137
- locator,
138
- tier: classifyMaterialLocator(locator).kind === "url"
139
- ? "url"
140
- : resolveLocalMaterialLocator(locator, {
141
- repoRoot,
142
- packageDir,
143
- materialsDir: GHOST_MATERIALS_DIR,
144
- }).tier,
80
+ kind: "pull",
81
+ ...(result.missed.length > 0 ? { missed: result.missed } : {}),
82
+ nodes: result.nodes.map((node) => ({
83
+ id: node.id,
84
+ ...(node.kind !== undefined ? { kind: node.kind } : {}),
85
+ ...(node.description ? { description: node.description } : {}),
86
+ ...(node.declaredMaterials !== undefined
87
+ ? {
88
+ materials: inlineMaterials
89
+ ? (node.materials ?? []).map(formatJsonMaterial)
90
+ : node.declaredMaterials,
91
+ }
92
+ : {}),
93
+ body: node.body,
145
94
  })),
146
- inlined: 0,
147
- omitted: 0,
148
- };
149
- }
150
- function sumMaterialCounts(nodes) {
151
- return nodes.reduce((sum, { materials }) => ({
152
- inlined: sum.inlined + materials.inlined,
153
- omitted: sum.omitted + materials.omitted,
154
- }), { inlined: 0, omitted: 0 });
155
- }
156
- function pulledSkeletons(nodes) {
157
- return nodes.flatMap(({ node }) => extractSkeletonFences(node.body).map((fence) => ({
158
- nodeId: node.id,
159
- ...(fence.info ? { info: fence.info } : {}),
160
- content: fence.content,
161
- })));
162
- }
163
- function formatJsonMaterial(material) {
164
- return {
165
- locator: material.locator,
166
- tier: material.tier,
167
- ...(material.inlined !== undefined ? { inlined: material.inlined } : {}),
168
- ...(material.omitted
169
- ? { omitted: true, reason: material.reason ?? "not inlined" }
170
- : {}),
171
- ...(material.reason === "binary inspect-pointer"
172
- ? { inspect: material.path ?? material.locator }
173
- : {}),
95
+ skeletons: result.skeletons,
174
96
  };
175
97
  }
176
- function formatPullMarkdown(nodes) {
98
+ function formatPullMarkdown(result) {
177
99
  const sections = [];
178
- for (const { node, materials } of nodes) {
100
+ for (const node of result.nodes) {
179
101
  const kind = node.kind ? ` _(${node.kind})_` : "";
180
102
  const lines = [`# \`${node.id}\`${kind}`];
181
103
  if (node.description)
182
104
  lines.push("", `> ${node.description}`);
183
- lines.push("", stripSkeletonSections(node.body).trim());
184
- if (materials.materials.length > 0) {
105
+ lines.push("", node.body.trim());
106
+ if (node.materials !== undefined && node.materials.length > 0) {
185
107
  lines.push("", "Materials:");
186
- for (const material of materials.materials) {
187
- if (material.inlined !== undefined) {
188
- const info = material.path ?? material.locator;
189
- lines.push("", `\`\`\`${info}`, material.inlined.trimEnd(), "```");
190
- }
191
- else if (material.reason === "binary inspect-pointer") {
192
- lines.push(`- inspect: ${material.path ?? material.locator} — view this image before generating`);
193
- }
194
- else {
195
- const reason = material.omitted
196
- ? ` — ${material.reason ?? "not inlined"}`
197
- : "";
198
- lines.push(`- ${material.locator}${reason}`);
199
- }
108
+ for (const material of node.materials) {
109
+ appendMaterialMarkdown(lines, material);
200
110
  }
201
111
  }
202
112
  sections.push(lines.join("\n"));
203
113
  }
204
- const skeletons = pulledSkeletons(nodes);
205
- if (skeletons.length > 0) {
114
+ if (result.skeletons.length > 0) {
206
115
  const lines = [
207
116
  "# Skeletons — begin the artifact from this structure",
208
117
  "",
209
118
  "Begin the artifact from the matching structure below verbatim, then fill it.",
210
119
  ];
211
- for (const skeleton of skeletons) {
120
+ for (const skeleton of result.skeletons) {
212
121
  lines.push("", `## From \`${skeleton.nodeId}\``, "");
213
- const info = skeleton.info ? skeleton.info : "";
214
- lines.push(`\`\`\`${info}`, skeleton.content.trimEnd(), "```");
122
+ lines.push(fencedMarkdown(skeleton.content.trimEnd(), skeleton.info));
215
123
  }
216
124
  sections.push(lines.join("\n"));
217
125
  }
218
126
  return `${sections.join("\n\n---\n\n")}\n`;
219
127
  }
128
+ function appendMaterialMarkdown(lines, material) {
129
+ if (material.inlined !== undefined) {
130
+ const info = material.path ?? material.locator;
131
+ lines.push("", fencedMarkdown(material.inlined.trimEnd(), info));
132
+ }
133
+ else if (material.reason === "binary inspect-pointer") {
134
+ lines.push(`- inspect: ${material.path ?? material.locator} — view this image before generating`);
135
+ }
136
+ else {
137
+ const reason = material.omitted
138
+ ? ` — ${material.reason ?? "not inlined"}`
139
+ : "";
140
+ lines.push(`- ${material.locator}${reason}`);
141
+ }
142
+ }
143
+ function formatJsonMaterial(material) {
144
+ return {
145
+ locator: material.locator,
146
+ tier: material.tier,
147
+ ...(material.inlined !== undefined ? { inlined: material.inlined } : {}),
148
+ ...(material.omitted
149
+ ? { omitted: true, reason: material.reason ?? "not inlined" }
150
+ : {}),
151
+ ...(material.reason === "binary inspect-pointer"
152
+ ? { inspect: material.path ?? material.locator }
153
+ : {}),
154
+ };
155
+ }
156
+ function fencedMarkdown(content, info) {
157
+ const fence = "`".repeat(Math.max(3, longestBacktickRun(content) + 1));
158
+ return `${fence}${info ?? ""}\n${content}\n${fence}`;
159
+ }
160
+ function longestBacktickRun(content) {
161
+ let longest = 0;
162
+ for (const match of content.matchAll(/`+/g)) {
163
+ longest = Math.max(longest, match[0].length);
164
+ }
165
+ return longest;
166
+ }
220
167
  //# sourceMappingURL=pull-command.js.map