@design-intelligence/ghost 0.0.0-next-20260715121453

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 (327) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +89 -0
  3. package/dist/bin.d.ts +3 -0
  4. package/dist/bin.d.ts.map +1 -0
  5. package/dist/bin.js +19 -0
  6. package/dist/bin.js.map +1 -0
  7. package/dist/cli.d.ts +4 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +29 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/commands/checks-command.d.ts +9 -0
  12. package/dist/commands/checks-command.d.ts.map +1 -0
  13. package/dist/commands/checks-command.js +52 -0
  14. package/dist/commands/checks-command.js.map +1 -0
  15. package/dist/commands/command-discovery.d.ts +57 -0
  16. package/dist/commands/command-discovery.d.ts.map +1 -0
  17. package/dist/commands/command-discovery.js +220 -0
  18. package/dist/commands/command-discovery.js.map +1 -0
  19. package/dist/commands/errors.d.ts +7 -0
  20. package/dist/commands/errors.d.ts.map +1 -0
  21. package/dist/commands/errors.js +19 -0
  22. package/dist/commands/errors.js.map +1 -0
  23. package/dist/commands/export-command.d.ts +3 -0
  24. package/dist/commands/export-command.d.ts.map +1 -0
  25. package/dist/commands/export-command.js +157 -0
  26. package/dist/commands/export-command.js.map +1 -0
  27. package/dist/commands/fingerprint-commands.d.ts +10 -0
  28. package/dist/commands/fingerprint-commands.d.ts.map +1 -0
  29. package/dist/commands/fingerprint-commands.js +69 -0
  30. package/dist/commands/fingerprint-commands.js.map +1 -0
  31. package/dist/commands/gather-command.d.ts +3 -0
  32. package/dist/commands/gather-command.d.ts.map +1 -0
  33. package/dist/commands/gather-command.js +214 -0
  34. package/dist/commands/gather-command.js.map +1 -0
  35. package/dist/commands/init-command.d.ts +3 -0
  36. package/dist/commands/init-command.d.ts.map +1 -0
  37. package/dist/commands/init-command.js +89 -0
  38. package/dist/commands/init-command.js.map +1 -0
  39. package/dist/commands/manifest-command.d.ts +9 -0
  40. package/dist/commands/manifest-command.d.ts.map +1 -0
  41. package/dist/commands/manifest-command.js +33 -0
  42. package/dist/commands/manifest-command.js.map +1 -0
  43. package/dist/commands/pull-command.d.ts +3 -0
  44. package/dist/commands/pull-command.d.ts.map +1 -0
  45. package/dist/commands/pull-command.js +230 -0
  46. package/dist/commands/pull-command.js.map +1 -0
  47. package/dist/commands/pulse-command.d.ts +3 -0
  48. package/dist/commands/pulse-command.d.ts.map +1 -0
  49. package/dist/commands/pulse-command.js +248 -0
  50. package/dist/commands/pulse-command.js.map +1 -0
  51. package/dist/commands/review-command.d.ts +3 -0
  52. package/dist/commands/review-command.d.ts.map +1 -0
  53. package/dist/commands/review-command.js +78 -0
  54. package/dist/commands/review-command.js.map +1 -0
  55. package/dist/commands/skill-command.d.ts +3 -0
  56. package/dist/commands/skill-command.d.ts.map +1 -0
  57. package/dist/commands/skill-command.js +96 -0
  58. package/dist/commands/skill-command.js.map +1 -0
  59. package/dist/fingerprint.d.ts +5 -0
  60. package/dist/fingerprint.d.ts.map +1 -0
  61. package/dist/fingerprint.js +3 -0
  62. package/dist/fingerprint.js.map +1 -0
  63. package/dist/ghost-core/catalog/assemble.d.ts +26 -0
  64. package/dist/ghost-core/catalog/assemble.d.ts.map +1 -0
  65. package/dist/ghost-core/catalog/assemble.js +29 -0
  66. package/dist/ghost-core/catalog/assemble.js.map +1 -0
  67. package/dist/ghost-core/catalog/closest.d.ts +16 -0
  68. package/dist/ghost-core/catalog/closest.d.ts.map +1 -0
  69. package/dist/ghost-core/catalog/closest.js +63 -0
  70. package/dist/ghost-core/catalog/closest.js.map +1 -0
  71. package/dist/ghost-core/catalog/index.d.ts +10 -0
  72. package/dist/ghost-core/catalog/index.d.ts.map +1 -0
  73. package/dist/ghost-core/catalog/index.js +9 -0
  74. package/dist/ghost-core/catalog/index.js.map +1 -0
  75. package/dist/ghost-core/catalog/menu.d.ts +28 -0
  76. package/dist/ghost-core/catalog/menu.d.ts.map +1 -0
  77. package/dist/ghost-core/catalog/menu.js +23 -0
  78. package/dist/ghost-core/catalog/menu.js.map +1 -0
  79. package/dist/ghost-core/catalog/types.d.ts +33 -0
  80. package/dist/ghost-core/catalog/types.d.ts.map +1 -0
  81. package/dist/ghost-core/catalog/types.js +2 -0
  82. package/dist/ghost-core/catalog/types.js.map +1 -0
  83. package/dist/ghost-core/check/index.d.ts +12 -0
  84. package/dist/ghost-core/check/index.d.ts.map +1 -0
  85. package/dist/ghost-core/check/index.js +12 -0
  86. package/dist/ghost-core/check/index.js.map +1 -0
  87. package/dist/ghost-core/check/lint.d.ts +9 -0
  88. package/dist/ghost-core/check/lint.d.ts.map +1 -0
  89. package/dist/ghost-core/check/lint.js +119 -0
  90. package/dist/ghost-core/check/lint.js.map +1 -0
  91. package/dist/ghost-core/check/load.d.ts +7 -0
  92. package/dist/ghost-core/check/load.d.ts.map +1 -0
  93. package/dist/ghost-core/check/load.js +44 -0
  94. package/dist/ghost-core/check/load.js.map +1 -0
  95. package/dist/ghost-core/check/parse.d.ts +12 -0
  96. package/dist/ghost-core/check/parse.d.ts.map +1 -0
  97. package/dist/ghost-core/check/parse.js +13 -0
  98. package/dist/ghost-core/check/parse.js.map +1 -0
  99. package/dist/ghost-core/check/source-ref.d.ts +27 -0
  100. package/dist/ghost-core/check/source-ref.d.ts.map +1 -0
  101. package/dist/ghost-core/check/source-ref.js +58 -0
  102. package/dist/ghost-core/check/source-ref.js.map +1 -0
  103. package/dist/ghost-core/check/types.d.ts +48 -0
  104. package/dist/ghost-core/check/types.d.ts.map +1 -0
  105. package/dist/ghost-core/check/types.js +4 -0
  106. package/dist/ghost-core/check/types.js.map +1 -0
  107. package/dist/ghost-core/errors.d.ts +30 -0
  108. package/dist/ghost-core/errors.d.ts.map +1 -0
  109. package/dist/ghost-core/errors.js +33 -0
  110. package/dist/ghost-core/errors.js.map +1 -0
  111. package/dist/ghost-core/glob.d.ts +5 -0
  112. package/dist/ghost-core/glob.d.ts.map +1 -0
  113. package/dist/ghost-core/glob.js +68 -0
  114. package/dist/ghost-core/glob.js.map +1 -0
  115. package/dist/ghost-core/glossary.d.ts +25 -0
  116. package/dist/ghost-core/glossary.d.ts.map +1 -0
  117. package/dist/ghost-core/glossary.js +69 -0
  118. package/dist/ghost-core/glossary.js.map +1 -0
  119. package/dist/ghost-core/index.d.ts +13 -0
  120. package/dist/ghost-core/index.d.ts.map +1 -0
  121. package/dist/ghost-core/index.js +19 -0
  122. package/dist/ghost-core/index.js.map +1 -0
  123. package/dist/ghost-core/markdown.d.ts +15 -0
  124. package/dist/ghost-core/markdown.d.ts.map +1 -0
  125. package/dist/ghost-core/markdown.js +30 -0
  126. package/dist/ghost-core/markdown.js.map +1 -0
  127. package/dist/ghost-core/material-transport.d.ts +43 -0
  128. package/dist/ghost-core/material-transport.d.ts.map +1 -0
  129. package/dist/ghost-core/material-transport.js +231 -0
  130. package/dist/ghost-core/material-transport.js.map +1 -0
  131. package/dist/ghost-core/materials.d.ts +14 -0
  132. package/dist/ghost-core/materials.d.ts.map +1 -0
  133. package/dist/ghost-core/materials.js +52 -0
  134. package/dist/ghost-core/materials.js.map +1 -0
  135. package/dist/ghost-core/node/index.d.ts +11 -0
  136. package/dist/ghost-core/node/index.d.ts.map +1 -0
  137. package/dist/ghost-core/node/index.js +11 -0
  138. package/dist/ghost-core/node/index.js.map +1 -0
  139. package/dist/ghost-core/node/parse.d.ts +16 -0
  140. package/dist/ghost-core/node/parse.d.ts.map +1 -0
  141. package/dist/ghost-core/node/parse.js +55 -0
  142. package/dist/ghost-core/node/parse.js.map +1 -0
  143. package/dist/ghost-core/node/schema.d.ts +17 -0
  144. package/dist/ghost-core/node/schema.d.ts.map +1 -0
  145. package/dist/ghost-core/node/schema.js +49 -0
  146. package/dist/ghost-core/node/schema.js.map +1 -0
  147. package/dist/ghost-core/node/serialize.d.ts +12 -0
  148. package/dist/ghost-core/node/serialize.d.ts.map +1 -0
  149. package/dist/ghost-core/node/serialize.js +39 -0
  150. package/dist/ghost-core/node/serialize.js.map +1 -0
  151. package/dist/ghost-core/node/steering.d.ts +19 -0
  152. package/dist/ghost-core/node/steering.d.ts.map +1 -0
  153. package/dist/ghost-core/node/steering.js +68 -0
  154. package/dist/ghost-core/node/steering.js.map +1 -0
  155. package/dist/ghost-core/node/types.d.ts +43 -0
  156. package/dist/ghost-core/node/types.d.ts.map +1 -0
  157. package/dist/ghost-core/node/types.js +2 -0
  158. package/dist/ghost-core/node/types.js.map +1 -0
  159. package/dist/ghost-core/package-manifest.d.ts +19 -0
  160. package/dist/ghost-core/package-manifest.d.ts.map +1 -0
  161. package/dist/ghost-core/package-manifest.js +24 -0
  162. package/dist/ghost-core/package-manifest.js.map +1 -0
  163. package/dist/ghost-core/skill-bundle-loader.d.ts +28 -0
  164. package/dist/ghost-core/skill-bundle-loader.d.ts.map +1 -0
  165. package/dist/ghost-core/skill-bundle-loader.js +51 -0
  166. package/dist/ghost-core/skill-bundle-loader.js.map +1 -0
  167. package/dist/index.d.ts +5 -0
  168. package/dist/index.d.ts.map +1 -0
  169. package/dist/index.js +5 -0
  170. package/dist/index.js.map +1 -0
  171. package/dist/init-payloads/median/cliche.median.md +86 -0
  172. package/dist/init-payloads/median/median-tells.md +117 -0
  173. package/dist/init-payloads/skeleton/brand.md +23 -0
  174. package/dist/init-payloads/skeleton/context.conversation.md +24 -0
  175. package/dist/init-payloads/skeleton/foundation.color.md +39 -0
  176. package/dist/init-payloads/skeleton/foundation.composition.md +30 -0
  177. package/dist/init-payloads/skeleton/foundation.controls.md +29 -0
  178. package/dist/init-payloads/skeleton/foundation.layout.md +45 -0
  179. package/dist/init-payloads/skeleton/foundation.motion.md +34 -0
  180. package/dist/init-payloads/skeleton/foundation.type.md +44 -0
  181. package/dist/init-payloads/skeleton/foundation.voice.md +29 -0
  182. package/dist/init-payloads/skeleton/glossary.md +39 -0
  183. package/dist/init-payloads/vessel-light/anti-goal.median.md +86 -0
  184. package/dist/init-payloads/vessel-light/anti-goal.tells.md +38 -0
  185. package/dist/init-payloads/vessel-light/checks/conversation-grammar.md +20 -0
  186. package/dist/init-payloads/vessel-light/checks/median-tells.md +103 -0
  187. package/dist/init-payloads/vessel-light/checks/motion-restraint.md +20 -0
  188. package/dist/init-payloads/vessel-light/checks/relationships.md +33 -0
  189. package/dist/init-payloads/vessel-light/checks/shape-matches-job.md +43 -0
  190. package/dist/init-payloads/vessel-light/checks/values.md +51 -0
  191. package/dist/init-payloads/vessel-light/glossary.md +44 -0
  192. package/dist/init-payloads/vessel-light/grammar.color-roles.md +30 -0
  193. package/dist/init-payloads/vessel-light/grammar.conversation.md +30 -0
  194. package/dist/init-payloads/vessel-light/grammar.deletion.md +35 -0
  195. package/dist/init-payloads/vessel-light/grammar.hierarchy.md +58 -0
  196. package/dist/init-payloads/vessel-light/grammar.job.md +54 -0
  197. package/dist/init-payloads/vessel-light/grammar.motion.md +27 -0
  198. package/dist/init-payloads/vessel-light/grammar.rhythm.md +27 -0
  199. package/dist/init-payloads/vessel-light/grammar.surfaces.md +35 -0
  200. package/dist/init-payloads/vessel-light/index.md +33 -0
  201. package/dist/init-payloads/vessel-light/manifest.yml +3 -0
  202. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Black.woff2 +0 -0
  203. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Bold.woff2 +0 -0
  204. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-ExtraBold.woff2 +0 -0
  205. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Light.woff2 +0 -0
  206. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Medium.woff2 +0 -0
  207. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Regular.woff2 +0 -0
  208. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-SemiBold.woff2 +0 -0
  209. package/dist/init-payloads/vessel-light/materials/primitives.css +351 -0
  210. package/dist/init-payloads/vessel-light/materials/ref/composition.conversation.html +63 -0
  211. package/dist/init-payloads/vessel-light/materials/ref/composition.editorial.html +74 -0
  212. package/dist/init-payloads/vessel-light/materials/ref/composition.form.html +89 -0
  213. package/dist/init-payloads/vessel-light/materials/ref/composition.overlay.html +66 -0
  214. package/dist/init-payloads/vessel-light/materials/ref/composition.table.html +104 -0
  215. package/dist/init-payloads/vessel-light/materials/ref/email.html +80 -0
  216. package/dist/init-payloads/vessel-light/materials/tokens.css +191 -0
  217. package/dist/init-payloads/vessel-light/register.data-density.md +39 -0
  218. package/dist/init-payloads/vessel-light/register.editorial.md +41 -0
  219. package/dist/init-payloads/vessel-light/register.email.md +43 -0
  220. package/dist/init-payloads/vessel-light/signature.palette.md +45 -0
  221. package/dist/init-payloads/vessel-light/signature.shape.md +27 -0
  222. package/dist/init-payloads/vessel-light/signature.temperature.md +44 -0
  223. package/dist/init-payloads/vessel-light/signature.type.md +37 -0
  224. package/dist/internal/fs.d.ts +4 -0
  225. package/dist/internal/fs.d.ts.map +1 -0
  226. package/dist/internal/fs.js +24 -0
  227. package/dist/internal/fs.js.map +1 -0
  228. package/dist/observability-events.d.ts +34 -0
  229. package/dist/observability-events.d.ts.map +1 -0
  230. package/dist/observability-events.js +68 -0
  231. package/dist/observability-events.js.map +1 -0
  232. package/dist/package-version.d.ts +3 -0
  233. package/dist/package-version.d.ts.map +1 -0
  234. package/dist/package-version.js +10 -0
  235. package/dist/package-version.js.map +1 -0
  236. package/dist/review/baseline.d.ts +11 -0
  237. package/dist/review/baseline.d.ts.map +1 -0
  238. package/dist/review/baseline.js +35 -0
  239. package/dist/review/baseline.js.map +1 -0
  240. package/dist/review/diff.d.ts +7 -0
  241. package/dist/review/diff.d.ts.map +1 -0
  242. package/dist/review/diff.js +41 -0
  243. package/dist/review/diff.js.map +1 -0
  244. package/dist/review/glob.d.ts +2 -0
  245. package/dist/review/glob.d.ts.map +1 -0
  246. package/dist/review/glob.js +2 -0
  247. package/dist/review/glob.js.map +1 -0
  248. package/dist/review/probes.d.ts +13 -0
  249. package/dist/review/probes.d.ts.map +1 -0
  250. package/dist/review/probes.js +45 -0
  251. package/dist/review/probes.js.map +1 -0
  252. package/dist/review/resolve.d.ts +28 -0
  253. package/dist/review/resolve.d.ts.map +1 -0
  254. package/dist/review/resolve.js +90 -0
  255. package/dist/review/resolve.js.map +1 -0
  256. package/dist/review/review-packet.d.ts +41 -0
  257. package/dist/review/review-packet.d.ts.map +1 -0
  258. package/dist/review/review-packet.js +128 -0
  259. package/dist/review/review-packet.js.map +1 -0
  260. package/dist/scan/check-files.d.ts +23 -0
  261. package/dist/scan/check-files.d.ts.map +1 -0
  262. package/dist/scan/check-files.js +75 -0
  263. package/dist/scan/check-files.js.map +1 -0
  264. package/dist/scan/check-scaffold.d.ts +8 -0
  265. package/dist/scan/check-scaffold.d.ts.map +1 -0
  266. package/dist/scan/check-scaffold.js +53 -0
  267. package/dist/scan/check-scaffold.js.map +1 -0
  268. package/dist/scan/constants.d.ts +21 -0
  269. package/dist/scan/constants.d.ts.map +1 -0
  270. package/dist/scan/constants.js +21 -0
  271. package/dist/scan/constants.js.map +1 -0
  272. package/dist/scan/file-kind.d.ts +12 -0
  273. package/dist/scan/file-kind.d.ts.map +1 -0
  274. package/dist/scan/file-kind.js +114 -0
  275. package/dist/scan/file-kind.js.map +1 -0
  276. package/dist/scan/fingerprint-package-lint.d.ts +8 -0
  277. package/dist/scan/fingerprint-package-lint.d.ts.map +1 -0
  278. package/dist/scan/fingerprint-package-lint.js +284 -0
  279. package/dist/scan/fingerprint-package-lint.js.map +1 -0
  280. package/dist/scan/fingerprint-package-loader.d.ts +5 -0
  281. package/dist/scan/fingerprint-package-loader.d.ts.map +1 -0
  282. package/dist/scan/fingerprint-package-loader.js +78 -0
  283. package/dist/scan/fingerprint-package-loader.js.map +1 -0
  284. package/dist/scan/fingerprint-package.d.ts +66 -0
  285. package/dist/scan/fingerprint-package.d.ts.map +1 -0
  286. package/dist/scan/fingerprint-package.js +101 -0
  287. package/dist/scan/fingerprint-package.js.map +1 -0
  288. package/dist/scan/index.d.ts +3 -0
  289. package/dist/scan/index.d.ts.map +1 -0
  290. package/dist/scan/index.js +3 -0
  291. package/dist/scan/index.js.map +1 -0
  292. package/dist/scan/lint.d.ts +15 -0
  293. package/dist/scan/lint.d.ts.map +1 -0
  294. package/dist/scan/lint.js +2 -0
  295. package/dist/scan/lint.js.map +1 -0
  296. package/dist/scan/node-files.d.ts +25 -0
  297. package/dist/scan/node-files.d.ts.map +1 -0
  298. package/dist/scan/node-files.js +112 -0
  299. package/dist/scan/node-files.js.map +1 -0
  300. package/dist/scan/package-paths.d.ts +10 -0
  301. package/dist/scan/package-paths.d.ts.map +1 -0
  302. package/dist/scan/package-paths.js +49 -0
  303. package/dist/scan/package-paths.js.map +1 -0
  304. package/dist/scan/packed-payloads.d.ts +4 -0
  305. package/dist/scan/packed-payloads.d.ts.map +1 -0
  306. package/dist/scan/packed-payloads.js +55 -0
  307. package/dist/scan/packed-payloads.js.map +1 -0
  308. package/dist/scan/tarball.d.ts +23 -0
  309. package/dist/scan/tarball.d.ts.map +1 -0
  310. package/dist/scan/tarball.js +145 -0
  311. package/dist/scan/tarball.js.map +1 -0
  312. package/dist/scan/templates.d.ts +42 -0
  313. package/dist/scan/templates.d.ts.map +1 -0
  314. package/dist/scan/templates.js +375 -0
  315. package/dist/scan/templates.js.map +1 -0
  316. package/dist/skill-bundle/SKILL.md +146 -0
  317. package/dist/skill-bundle/references/adapting-a-starter.md +104 -0
  318. package/dist/skill-bundle/references/authoring-scenarios.md +184 -0
  319. package/dist/skill-bundle/references/blocks.md +179 -0
  320. package/dist/skill-bundle/references/brief.md +50 -0
  321. package/dist/skill-bundle/references/capture.md +392 -0
  322. package/dist/skill-bundle/references/concrete-tiers.md +95 -0
  323. package/dist/skill-bundle/references/recall.md +36 -0
  324. package/dist/skill-bundle/references/schema.md +114 -0
  325. package/dist/skill-bundle/references/self-check.md +65 -0
  326. package/dist/skill-bundle/references/steering-audit.md +60 -0
  327. package/package.json +79 -0
@@ -0,0 +1,214 @@
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";
5
+ import { appendGhostEvent, resolveRunId } from "../observability-events.js";
6
+ import { loadFingerprintPackage } from "../scan/fingerprint-package.js";
7
+ import { failFromError } from "./errors.js";
8
+ export function registerGatherCommand(cli) {
9
+ cli
10
+ .command("gather [...ask]", "Emit the complete available guidance menu so the agent can pull applicable nodes.")
11
+ .option("--package <dir>", "Use this fingerprint package directory (default: ./.ghost)")
12
+ .option("--format <fmt>", "Output format: markdown or json", {
13
+ default: "markdown",
14
+ })
15
+ .option("--run <id>", "Attribute the tape event to this run id (default: GHOST_RUN_ID)")
16
+ .action(async (askParts, opts) => {
17
+ try {
18
+ if (opts.format !== "markdown" && opts.format !== "json") {
19
+ console.error("Error: --format must be 'markdown' or 'json'");
20
+ process.exit(2);
21
+ return;
22
+ }
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);
32
+ const runId = resolveRunId(opts.run);
33
+ await appendGhostEvent(paths.packageDir, {
34
+ event: "gather",
35
+ ...(runId ? { run: runId } : {}),
36
+ ...(ask ? { ask } : {}),
37
+ menu: menu.map((entry) => entry.id),
38
+ });
39
+ // Ghost does no selection. It emits the complete catalog; the agent
40
+ // reads the ask against it and pulls the nodes whose described
41
+ // conditions apply.
42
+ if (opts.format === "json") {
43
+ process.stdout.write(`${JSON.stringify({
44
+ kind: "menu",
45
+ ...(ask ? { ask } : {}),
46
+ source: {
47
+ artifact: "Ghost brand fingerprint",
48
+ list: "Available guidance",
49
+ },
50
+ contract: gatherContract(ask),
51
+ ...(coverNode
52
+ ? {
53
+ cover: {
54
+ id: coverNode.id,
55
+ body: coverNode.body,
56
+ inContext: true,
57
+ selectable: false,
58
+ },
59
+ }
60
+ : {}),
61
+ next: { command: "ghost pull <id> [<id>…]" },
62
+ silence: {
63
+ ifNoneApply: "Name the fingerprint's silence, follow the cover silence posture when present, and do not invent Ghost-backed guidance.",
64
+ },
65
+ coverage: menuCoverage(menu),
66
+ ...(kinds.length > 0 ? { kinds } : {}),
67
+ nodes: menu,
68
+ }, null, 2)}\n`);
69
+ }
70
+ else {
71
+ process.stdout.write(formatMenuMarkdown(menu, kinds, {
72
+ ask,
73
+ cover: coverNode
74
+ ? { id: coverNode.id, body: coverNode.body }
75
+ : undefined,
76
+ }));
77
+ }
78
+ process.exit(0);
79
+ }
80
+ catch (err) {
81
+ failFromError(err);
82
+ }
83
+ });
84
+ }
85
+ function normalizeAsk(askParts) {
86
+ const ask = (askParts ?? []).join(" ").trim();
87
+ return ask.length > 0 ? ask : undefined;
88
+ }
89
+ /**
90
+ * Read the glossary's declared kinds and their prose purposes for the menu
91
+ * header. Missing or malformed glossaries degrade to no legend — the menu
92
+ * itself never depends on the glossary being present.
93
+ */
94
+ async function readMenuKinds(glossaryPath) {
95
+ let raw;
96
+ try {
97
+ raw = await readFile(glossaryPath, "utf-8");
98
+ }
99
+ catch (err) {
100
+ if (isMissingPathError(err))
101
+ return [];
102
+ throw err;
103
+ }
104
+ const result = parseGlossary(raw);
105
+ if (result.glossary === null)
106
+ return [];
107
+ return result.glossary.kinds
108
+ .filter((kind) => kind.purpose.length > 0)
109
+ .map((kind) => ({
110
+ name: kind.name,
111
+ // Legend entries are one line each: keep the section's first paragraph
112
+ // and collapse internal wrapping.
113
+ purpose: (kind.purpose.split(/\n\s*\n/, 1)[0] ?? "")
114
+ .replace(/\s+/g, " ")
115
+ .trim(),
116
+ }));
117
+ }
118
+ function gatherContract(ask) {
119
+ return {
120
+ completeness: {
121
+ complete: true,
122
+ filtered: false,
123
+ ranked: false,
124
+ selectedByGhost: false,
125
+ },
126
+ selection: {
127
+ basis: "applicability",
128
+ instruction: ask
129
+ ? "Pull every node whose description indicates its stated situation applies and whose truth, material, structure, or refusal governs the work; skip inapplicable nodes."
130
+ : "Bare gather is catalog inspection. Do not treat the menu as task grounding until an ask is supplied; when grounding a task, pull every applicable node and skip inapplicable nodes.",
131
+ topicOverlapAloneIsApplicability: false,
132
+ addForCompleteness: false,
133
+ omitApplicableForCount: false,
134
+ },
135
+ noAsk: "Bare gather is catalog inspection and does not imply task grounding.",
136
+ };
137
+ }
138
+ function menuCoverage(menu) {
139
+ return {
140
+ nodes: menu.length,
141
+ concrete: menu.filter((entry) => entry.concrete).length,
142
+ payloads: {
143
+ materials: menu.filter((entry) => entry.materials !== undefined).length,
144
+ fencedExamples: menu.filter((entry) => entry.hasFencedExample).length,
145
+ skeletons: menu.filter((entry) => entry.hasSkeleton).length,
146
+ },
147
+ // A node without a description is a bare id the agent cannot select
148
+ // against; surface the count where selection happens.
149
+ undescribed: menu.filter((entry) => !entry.description || entry.description.trim().length === 0).length,
150
+ };
151
+ }
152
+ function menuCoverageLine(menu) {
153
+ const coverage = menuCoverage(menu);
154
+ const payloadParts = [
155
+ `${coverage.payloads.materials} with materials`,
156
+ `${coverage.payloads.fencedExamples} with substantial fenced examples`,
157
+ `${coverage.payloads.skeletons} with Skeletons`,
158
+ ];
159
+ const parts = [
160
+ `${coverage.nodes} nodes`,
161
+ `${coverage.concrete} carry payloads (${payloadParts.join(", ")})`,
162
+ ];
163
+ if (coverage.undescribed > 0) {
164
+ parts.push(`${coverage.undescribed} lack descriptions`);
165
+ }
166
+ return parts.join(" · ");
167
+ }
168
+ function formatMenuMarkdown(menu, kinds, options = {}) {
169
+ const lines = ["# Ghost brand fingerprint", ""];
170
+ if (options.ask)
171
+ lines.push(`Ask: ${options.ask}`, "");
172
+ if (options.cover) {
173
+ lines.push(`## Cover in context: \`${options.cover.id}\``, "", options.cover.body, "", "Cover status: already in context; outside selection; do not pull again.", "", "---", "");
174
+ }
175
+ lines.push("## Available guidance", "", menuCoverageLine(menu), "");
176
+ if (options.ask) {
177
+ lines.push("Complete, unfiltered, unranked list from the fingerprint. Ghost has not selected nodes for this ask.", "Pull every node whose description indicates its stated situation applies and whose truth, 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 fingerprint's silence, follow the cover silence posture, and do not invent Ghost-backed guidance.", "");
178
+ }
179
+ else {
180
+ lines.push("Complete, unfiltered, unranked list from the fingerprint. 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 fingerprint is silent.", "");
181
+ }
182
+ if (kinds.length > 0) {
183
+ lines.push("Kinds:", "");
184
+ for (const kind of kinds) {
185
+ lines.push(`- **${kind.name}** — ${kind.purpose}`);
186
+ }
187
+ lines.push("");
188
+ }
189
+ for (const entry of menu) {
190
+ const kind = entry.kind ? ` _(${entry.kind})_` : "";
191
+ lines.push(`- \`${entry.id}\`${kind}`);
192
+ if (entry.description)
193
+ lines.push(` - ${entry.description}`);
194
+ if (entry.materials !== undefined) {
195
+ lines.push(` - materials: ${entry.materials}`);
196
+ }
197
+ const payloadTypes = formatPayloadTypes(entry);
198
+ if (payloadTypes.length > 0) {
199
+ lines.push(` - payloads: ${payloadTypes.join(", ")}`);
200
+ }
201
+ }
202
+ return `${lines.join("\n")}\n`;
203
+ }
204
+ function formatPayloadTypes(entry) {
205
+ const types = [];
206
+ if (entry.materials !== undefined)
207
+ types.push("materials");
208
+ if (entry.hasFencedExample)
209
+ types.push("substantial fenced example");
210
+ if (entry.hasSkeleton)
211
+ types.push("Skeleton");
212
+ return types;
213
+ }
214
+ //# sourceMappingURL=gather-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gather-command.js","sourceRoot":"","sources":["../../src/commands/gather-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CAC } from "cac";
2
+ export declare function registerInitCommand(cli: CAC): void;
3
+ //# sourceMappingURL=init-command.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,89 @@
1
+ import { UsageError } from "#ghost-core";
2
+ import { initFingerprintPackage } from "../fingerprint.js";
3
+ import { addChecksDir } from "../scan/check-scaffold.js";
4
+ import { getInitBody } from "../scan/templates.js";
5
+ import { failFromError } from "./errors.js";
6
+ export function registerInitCommand(cli) {
7
+ cli
8
+ .command("init", "Create a root .ghost node fingerprint package")
9
+ .option("--package <dir>", "Exact fingerprint package directory to initialize")
10
+ .option("--template <name>", "Init template to scaffold (default: skeleton)")
11
+ .option("--body <name>", "Init body to install: a full inhabited package (e.g. vessel-light)")
12
+ .option("--with <capabilities>", "Comma-separated capabilities to add after scaffolding (e.g. checks)")
13
+ .option("--force", "Overwrite existing Ghost fingerprint files")
14
+ .option("--format <fmt>", "Output format: cli or json", { default: "cli" })
15
+ .action(async (opts) => {
16
+ try {
17
+ if (cli.args.length > 0) {
18
+ console.error("Error: ghost init no longer accepts a positional directory. Use --package <dir> for an exact package directory.");
19
+ process.exit(2);
20
+ return;
21
+ }
22
+ const exactPackage = typeof opts.package === "string" ? opts.package : undefined;
23
+ const withIds = parseWithCapabilities(opts.with);
24
+ for (const id of withIds) {
25
+ if (id !== "checks") {
26
+ throw new UsageError(`Unknown --with capability '${id}'. Available: checks.`);
27
+ }
28
+ }
29
+ const body = typeof opts.body === "string" ? getInitBody(opts.body) : undefined;
30
+ if (body?.includesChecks && withIds.includes("checks")) {
31
+ throw new UsageError(`--with checks is redundant with --body ${body.name} — this body already includes its own checks/.`);
32
+ }
33
+ const result = await initFingerprintPackage(exactPackage, process.cwd(), {
34
+ ...(typeof opts.template === "string"
35
+ ? { template: opts.template }
36
+ : {}),
37
+ ...(typeof opts.body === "string" ? { body: opts.body } : {}),
38
+ force: Boolean(opts.force),
39
+ });
40
+ const addedChecks = withIds.includes("checks")
41
+ ? await addChecksDir(result.paths.packageDir)
42
+ : undefined;
43
+ if (opts.format === "json") {
44
+ process.stdout.write(`${JSON.stringify({
45
+ dir: result.paths.dir,
46
+ written: result.written,
47
+ ...(addedChecks !== undefined
48
+ ? {
49
+ checks: {
50
+ written: addedChecks.written,
51
+ skipped: addedChecks.skipped,
52
+ },
53
+ }
54
+ : {}),
55
+ }, null, 2)}\n`);
56
+ }
57
+ else {
58
+ process.stdout.write(`Initialized Ghost fingerprint package: ${result.paths.dir}\n`);
59
+ for (const relativePath of result.written) {
60
+ process.stdout.write(` ${relativePath}\n`);
61
+ }
62
+ if (addedChecks !== undefined) {
63
+ process.stdout.write("Added checks/:\n");
64
+ for (const file of addedChecks.written) {
65
+ process.stdout.write(` checks/${file}\n`);
66
+ }
67
+ for (const file of addedChecks.skipped) {
68
+ process.stdout.write(` skipped checks/${file}\n`);
69
+ }
70
+ }
71
+ }
72
+ process.exit(0);
73
+ }
74
+ catch (err) {
75
+ failFromError(err);
76
+ }
77
+ });
78
+ }
79
+ function parseWithCapabilities(withOpt) {
80
+ if (typeof withOpt !== "string" || withOpt.trim().length === 0)
81
+ return [];
82
+ return [
83
+ ...new Set(withOpt
84
+ .split(",")
85
+ .map((id) => id.trim())
86
+ .filter((id) => id.length > 0)),
87
+ ];
88
+ }
89
+ //# sourceMappingURL=init-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-command.js","sourceRoot":"","sources":["../../src/commands/init-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { CAC } from "cac";
2
+ /**
3
+ * Emit a self-describing manifest of the CLI: every command, its curated
4
+ * discovery metadata, and its flags. Lets a host agent learn the CLI in one
5
+ * call instead of scraping `--help`. Derived from the cac registry, so it can
6
+ * never drift from the real command definitions.
7
+ */
8
+ export declare function registerManifestCommand(cli: CAC): void;
9
+ //# sourceMappingURL=manifest-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-command.d.ts","sourceRoot":"","sources":["../../src/commands/manifest-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAI/B;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAyBtD"}
@@ -0,0 +1,33 @@
1
+ import { buildCliManifest } from "./command-discovery.js";
2
+ import { failFromError } from "./errors.js";
3
+ /**
4
+ * Emit a self-describing manifest of the CLI: every command, its curated
5
+ * discovery metadata, and its flags. Lets a host agent learn the CLI in one
6
+ * call instead of scraping `--help`. Derived from the cac registry, so it can
7
+ * never drift from the real command definitions.
8
+ */
9
+ export function registerManifestCommand(cli) {
10
+ cli
11
+ .command("manifest", "Emit a self-describing JSON manifest of every command and flag.")
12
+ .option("--format <fmt>", "Output format: json", { default: "json" })
13
+ .action((opts) => {
14
+ try {
15
+ if (opts.format !== "json") {
16
+ console.error("Error: ghost manifest supports only --format json");
17
+ process.exit(2);
18
+ return;
19
+ }
20
+ const manifest = {
21
+ apiVersion: 1,
22
+ type: "manifest",
23
+ data: buildCliManifest(cli, cli.name),
24
+ };
25
+ process.stdout.write(`${JSON.stringify(manifest, null, 2)}\n`);
26
+ process.exit(0);
27
+ }
28
+ catch (err) {
29
+ failFromError(err);
30
+ }
31
+ });
32
+ }
33
+ //# sourceMappingURL=manifest-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-command.js","sourceRoot":"","sources":["../../src/commands/manifest-command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAQ;IAC9C,GAAG;SACA,OAAO,CACN,UAAU,EACV,iEAAiE,CAClE;SACA,MAAM,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;SACpE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACf,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;gBACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO;YACT,CAAC;YACD,MAAM,QAAQ,GAAG;gBACf,UAAU,EAAE,CAAC;gBACb,IAAI,EAAE,UAAmB;gBACzB,IAAI,EAAE,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC;aACtC,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,aAAa,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CAC } from "cac";
2
+ export declare function registerPullCommand(cli: CAC): void;
3
+ //# sourceMappingURL=pull-command.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,230 @@
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";
6
+ import { resolveGitRoot } from "../scan/package-paths.js";
7
+ import { failFromError } from "./errors.js";
8
+ export function registerPullCommand(cli) {
9
+ cli
10
+ .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)")
12
+ .option("--format <fmt>", "Output format: markdown or json", {
13
+ default: "markdown",
14
+ })
15
+ .option("--no-materials", "Emit material locators only; do not inline files")
16
+ .option("--order <mode>", "Output order: steering or given", {
17
+ default: "steering",
18
+ })
19
+ .option("--no-events", `Skip appending to .ghost/${GHOST_EVENTS_FILENAME}`)
20
+ .option("--run <id>", "Attribute the tape event to this run id (default: GHOST_RUN_ID)")
21
+ .action(async (ids, opts) => {
22
+ try {
23
+ if (opts.format !== "markdown" && opts.format !== "json") {
24
+ console.error("Error: --format must be 'markdown' or 'json'");
25
+ process.exit(2);
26
+ return;
27
+ }
28
+ if (opts.order !== "steering" && opts.order !== "given") {
29
+ console.error("Error: --order must be 'steering' or 'given'");
30
+ process.exit(2);
31
+ return;
32
+ }
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) {
43
+ const hint = miss.suggested.length > 0
44
+ ? ` (did you mean ${miss.suggested.map((s) => `\`${s}\``).join(", ")}?)`
45
+ : "";
46
+ console.error(`Warning: unknown node \`${miss.requested}\`${hint}`);
47
+ }
48
+ if (missed.length > 0) {
49
+ console.error("Run `ghost gather` to list every node.");
50
+ }
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
+ if (opts.events !== false) {
58
+ const runId = resolveRunId(opts.run);
59
+ await appendGhostEvent(paths.packageDir, {
60
+ event: "pull",
61
+ ...(runId ? { run: runId } : {}),
62
+ ids: known,
63
+ inlinedMaterials: counts.inlined,
64
+ omittedMaterials: counts.omitted,
65
+ ...(missed.length > 0 ? { missed } : {}),
66
+ });
67
+ }
68
+ if (known.length === 0) {
69
+ process.exit(2);
70
+ return;
71
+ }
72
+ 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`);
93
+ }
94
+ else {
95
+ process.stdout.write(formatPullMarkdown(pulledNodes));
96
+ }
97
+ process.exit(0);
98
+ }
99
+ catch (err) {
100
+ failFromError(err);
101
+ }
102
+ });
103
+ }
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) {
135
+ 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,
145
+ })),
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
+ : {}),
174
+ };
175
+ }
176
+ function formatPullMarkdown(nodes) {
177
+ const sections = [];
178
+ for (const { node, materials } of nodes) {
179
+ const kind = node.kind ? ` _(${node.kind})_` : "";
180
+ const lines = [`# \`${node.id}\`${kind}`];
181
+ if (node.description)
182
+ lines.push("", `> ${node.description}`);
183
+ lines.push("", stripSkeletonSections(node.body).trim());
184
+ if (materials.materials.length > 0) {
185
+ 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("", fencedMarkdown(material.inlined.trimEnd(), info));
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
+ }
200
+ }
201
+ }
202
+ sections.push(lines.join("\n"));
203
+ }
204
+ const skeletons = pulledSkeletons(nodes);
205
+ if (skeletons.length > 0) {
206
+ const lines = [
207
+ "# Skeletons — begin the artifact from this structure",
208
+ "",
209
+ "Begin the artifact from the matching structure below verbatim, then fill it.",
210
+ ];
211
+ for (const skeleton of skeletons) {
212
+ lines.push("", `## From \`${skeleton.nodeId}\``, "");
213
+ lines.push(fencedMarkdown(skeleton.content.trimEnd(), skeleton.info));
214
+ }
215
+ sections.push(lines.join("\n"));
216
+ }
217
+ return `${sections.join("\n\n---\n\n")}\n`;
218
+ }
219
+ function fencedMarkdown(content, info) {
220
+ const fence = "`".repeat(Math.max(3, longestBacktickRun(content) + 1));
221
+ return `${fence}${info ?? ""}\n${content}\n${fence}`;
222
+ }
223
+ function longestBacktickRun(content) {
224
+ let longest = 0;
225
+ for (const match of content.matchAll(/`+/g)) {
226
+ longest = Math.max(longest, match[0].length);
227
+ }
228
+ return longest;
229
+ }
230
+ //# sourceMappingURL=pull-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-command.js","sourceRoot":"","sources":["../../src/commands/pull-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CAC } from "cac";
2
+ export declare function registerPulseCommand(cli: CAC): void;
3
+ //# sourceMappingURL=pulse-command.d.ts.map