@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,33 @@
1
+ /**
2
+ * The CLI exit-code contract, in one place so every command agrees and an agent
3
+ * can branch on the code:
4
+ *
5
+ * - `0` success
6
+ * - `1` ran, but unhappy: a lint/validate finding, or an unexpected error
7
+ * - `2` called wrong: a bad flag or argument, a missing package, an unknown
8
+ * node or surface
9
+ * - `3` a command-specific refusal (e.g. `skill install` without `--force`)
10
+ *
11
+ * Usage errors (`2`) are often surfaced by throwing from deep in a helper
12
+ * (path validation, byte budgets, overwrite guards). Throwing `UsageError`
13
+ * instead of a plain `Error` lets the shared catch tell those apart from a
14
+ * genuine crash, so the contract holds without each call site picking a code.
15
+ */
16
+ export const EXIT = {
17
+ ok: 0,
18
+ failure: 1,
19
+ usage: 2,
20
+ };
21
+ /**
22
+ * A caller-facing "you used it wrong" error: bad flag or argument, missing
23
+ * package, invalid environment, or a refused overwrite. Reported at exit code
24
+ * 2, distinct from an unexpected crash (1).
25
+ */
26
+ export class UsageError extends Error {
27
+ exitCode = EXIT.usage;
28
+ constructor(message) {
29
+ super(message);
30
+ this.name = "UsageError";
31
+ }
32
+ }
33
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/ghost-core/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,EAAE,EAAE,CAAC;IACL,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;CACA,CAAC;AAEX;;;;GAIG;AACH,MAAM,OAAO,UAAW,SAAQ,KAAK;IAC1B,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;IAC/B,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ /** Tiny dependency-free glob matcher for repo-relative paths. */
2
+ export declare function matchesGlob(glob: string, path: string): boolean;
3
+ export declare function hasGlobMagic(path: string): boolean;
4
+ export declare function normalizeGlobPath(path: string): string;
5
+ //# sourceMappingURL=glob.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/ghost-core/glob.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAG/D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD"}
@@ -0,0 +1,68 @@
1
+ /** Tiny dependency-free glob matcher for repo-relative paths. */
2
+ export function matchesGlob(glob, path) {
3
+ const re = globToRegExp(glob);
4
+ return re.test(normalize(path));
5
+ }
6
+ export function hasGlobMagic(path) {
7
+ return /[*?{]/.test(path);
8
+ }
9
+ export function normalizeGlobPath(path) {
10
+ return normalize(path);
11
+ }
12
+ function normalize(p) {
13
+ return p.replace(/\\/g, "/").replace(/^\.\//, "");
14
+ }
15
+ const cache = new Map();
16
+ function globToRegExp(glob) {
17
+ const cached = cache.get(glob);
18
+ if (cached)
19
+ return cached;
20
+ const g = normalize(glob);
21
+ let re = "";
22
+ for (let i = 0; i < g.length; i++) {
23
+ const c = g[i];
24
+ if (c === "*") {
25
+ if (g[i + 1] === "*") {
26
+ i++;
27
+ if (g[i + 1] === "/") {
28
+ i++;
29
+ re += "(?:.*/)?";
30
+ }
31
+ else {
32
+ re += ".*";
33
+ }
34
+ }
35
+ else {
36
+ re += "[^/]*";
37
+ }
38
+ }
39
+ else if (c === "?") {
40
+ re += "[^/]";
41
+ }
42
+ else if (c === "{") {
43
+ const close = g.indexOf("}", i);
44
+ if (close === -1) {
45
+ re += "\\{";
46
+ }
47
+ else {
48
+ const alts = g
49
+ .slice(i + 1, close)
50
+ .split(",")
51
+ .map(escapeLiteral)
52
+ .join("|");
53
+ re += `(?:${alts})`;
54
+ i = close;
55
+ }
56
+ }
57
+ else {
58
+ re += escapeLiteral(c);
59
+ }
60
+ }
61
+ const compiled = new RegExp(`^${re}$`);
62
+ cache.set(glob, compiled);
63
+ return compiled;
64
+ }
65
+ function escapeLiteral(s) {
66
+ return s.replace(/[.+^${}()|[\]\\]/g, "\\$&");
67
+ }
68
+ //# sourceMappingURL=glob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/ghost-core/glob.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,IAAY;IACpD,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IAC1B,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;AAExC,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACrB,CAAC,EAAE,CAAC;gBACJ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBACrB,CAAC,EAAE,CAAC;oBACJ,EAAE,IAAI,UAAU,CAAC;gBACnB,CAAC;qBAAM,CAAC;oBACN,EAAE,IAAI,IAAI,CAAC;gBACb,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,EAAE,IAAI,OAAO,CAAC;YAChB,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,EAAE,IAAI,MAAM,CAAC;QACf,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAChC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,EAAE,IAAI,KAAK,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,CAAC;qBACX,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;qBACnB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,aAAa,CAAC;qBAClB,IAAI,CAAC,GAAG,CAAC,CAAC;gBACb,EAAE,IAAI,MAAM,IAAI,GAAG,CAAC;gBACpB,CAAC,GAAG,KAAK,CAAC;YACZ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,EAAE,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACvC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CAAC,CAAS;IAC9B,OAAO,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { z } from "zod";
2
+ export declare const GhostGlossaryFrontmatterSchema: z.ZodObject<{
3
+ kinds: z.ZodArray<z.ZodObject<{
4
+ name: z.ZodString;
5
+ }, z.core.$loose>>;
6
+ }, z.core.$loose>;
7
+ export interface GhostGlossaryKind {
8
+ name: string;
9
+ /** Prose purpose/normative weight for this kind, parsed from its section. */
10
+ purpose: string;
11
+ }
12
+ export interface GhostGlossaryDocument {
13
+ frontmatter: z.infer<typeof GhostGlossaryFrontmatterSchema>;
14
+ body: string;
15
+ kinds: GhostGlossaryKind[];
16
+ }
17
+ export type GhostGlossaryParseResult = {
18
+ glossary: GhostGlossaryDocument;
19
+ errors: [];
20
+ } | {
21
+ glossary: null;
22
+ errors: string[];
23
+ };
24
+ export declare function parseGlossary(raw: string): GhostGlossaryParseResult;
25
+ //# sourceMappingURL=glossary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glossary.d.ts","sourceRoot":"","sources":["../../src/ghost-core/glossary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,8BAA8B;;;;iBAU3B,CAAC;AAEjB,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,QAAQ,EAAE,qBAAqB,CAAC;IAAC,MAAM,EAAE,EAAE,CAAA;CAAE,GAC/C;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEzC,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,wBAAwB,CAgCnE"}
@@ -0,0 +1,69 @@
1
+ import { z } from "zod";
2
+ import { splitMarkdownFrontmatter } from "./markdown.js";
3
+ export const GhostGlossaryFrontmatterSchema = z
4
+ .object({
5
+ kinds: z.array(z
6
+ .object({
7
+ name: z.string().min(1),
8
+ })
9
+ .passthrough()),
10
+ })
11
+ .passthrough();
12
+ export function parseGlossary(raw) {
13
+ const { frontmatter, body } = splitMarkdownFrontmatter(raw);
14
+ if (frontmatter === null) {
15
+ return {
16
+ glossary: null,
17
+ errors: ["glossary must begin with YAML frontmatter"],
18
+ };
19
+ }
20
+ const result = GhostGlossaryFrontmatterSchema.safeParse(frontmatter);
21
+ if (!result.success) {
22
+ return {
23
+ glossary: null,
24
+ errors: result.error.issues.map((issue) => issue.message),
25
+ };
26
+ }
27
+ const normalizedBody = body.replace(/^\n+/, "").replace(/\s+$/, "");
28
+ const sections = parseMarkdownSections(normalizedBody);
29
+ const kinds = result.data.kinds.map((kind) => ({
30
+ name: kind.name,
31
+ purpose: sections.get(normalizeHeading(kind.name)) ?? "",
32
+ }));
33
+ return {
34
+ glossary: {
35
+ frontmatter: result.data,
36
+ body: normalizedBody,
37
+ kinds,
38
+ },
39
+ errors: [],
40
+ };
41
+ }
42
+ function parseMarkdownSections(body) {
43
+ const sections = new Map();
44
+ const lines = body.split(/\r?\n/);
45
+ let current;
46
+ let buffer = [];
47
+ const flush = () => {
48
+ if (current !== undefined) {
49
+ sections.set(current, buffer.join("\n").trim());
50
+ }
51
+ };
52
+ for (const line of lines) {
53
+ const match = /^(#{1,6})\s+(.+?)\s*$/.exec(line);
54
+ if (match) {
55
+ flush();
56
+ current = normalizeHeading(match[2] ?? "");
57
+ buffer = [];
58
+ continue;
59
+ }
60
+ if (current !== undefined)
61
+ buffer.push(line);
62
+ }
63
+ flush();
64
+ return sections;
65
+ }
66
+ function normalizeHeading(value) {
67
+ return value.trim().toLowerCase();
68
+ }
69
+ //# sourceMappingURL=glossary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glossary.js","sourceRoot":"","sources":["../../src/ghost-core/glossary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export { type AssembleCatalogInput, assembleCatalog, buildCatalogMenu, type CatalogMenuEntry, closestIds, type GhostCatalog, type GhostCatalogNode, type PlacedNode, } from "./catalog/index.js";
2
+ export { GHOST_CHECK_SCHEMA, GHOST_CHECK_SEVERITIES, type GhostCheckDocument, type GhostCheckFrontmatter, type GhostCheckLintIssue, type GhostCheckLintReport, type GhostCheckLintSeverity, type GhostCheckMarkdownSeverity, lintGhostCheck, loadGhostCheck, type ParsedCheckMarkdown, type ParsedSourceRef, parseCheckMarkdown, parseSourceRef, sliceNodeSection, } from "./check/index.js";
3
+ export { EXIT, UsageError } from "./errors.js";
4
+ export { hasGlobMagic, matchesGlob, normalizeGlobPath } from "./glob.js";
5
+ export { type GhostGlossaryDocument, GhostGlossaryFrontmatterSchema, type GhostGlossaryKind, type GhostGlossaryParseResult, parseGlossary, } from "./glossary.js";
6
+ export { type ExpandedLocalMaterialLocator, expandLocalMaterialLocator, listBundledMaterialFiles, type MaterialTransportOptions, type MaterialTransportResult, materialLocatorClaimsPath, resolveLocalMaterialLocator, type TransportedMaterial, type TransportedMaterialTier, transportMaterials, } from "./material-transport.js";
7
+ export { type ClassifiedGhostMaterialLocator, classifyMaterialLocator, type GhostMaterialLocatorKind, validateMaterialLocator, } from "./materials.js";
8
+ export { carriesConcreteMaterial, extractSkeletonFences, extractSkeletonSections, type FencedBlock, GHOST_NODE_SCHEMA, type GhostNodeDocument, type GhostNodeFrontmatter, GhostNodeFrontmatterSchema, type GhostNodeLintIssue, type GhostNodeLintReport, type GhostNodeLintSeverity, hasSubstantialFencedExample, lintGhostNode, NodeIdSchema, NodeRefSchema, type ParseNodeResult, parseNode, type SkeletonSection, serializeNode, stripSkeletonSections, } from "./node/index.js";
9
+ export type { GhostFingerprintPackageManifest } from "./package-manifest.js";
10
+ export { GHOST_FINGERPRINT_PACKAGE_SCHEMA, GhostFingerprintPackageManifestSchema, } from "./package-manifest.js";
11
+ export type { SkillBundleFile } from "./skill-bundle-loader.js";
12
+ export { loadSkillBundle } from "./skill-bundle-loader.js";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ghost-core/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,oBAAoB,EACzB,eAAe,EACf,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,UAAU,EACV,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,cAAc,EACd,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEzE,OAAO,EACL,KAAK,qBAAqB,EAC1B,8BAA8B,EAC9B,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,4BAA4B,EACjC,0BAA0B,EAC1B,wBAAwB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,yBAAyB,EACzB,2BAA2B,EAC3B,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,KAAK,8BAA8B,EACnC,uBAAuB,EACvB,KAAK,wBAAwB,EAC7B,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,WAAW,EAChB,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,0BAA0B,EAC1B,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,2BAA2B,EAC3B,aAAa,EACb,YAAY,EACZ,aAAa,EACb,KAAK,eAAe,EACpB,SAAS,EACT,KAAK,eAAe,EACpB,aAAa,EACb,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EACL,gCAAgC,EAChC,qCAAqC,GACtC,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,19 @@
1
+ // --- Embedding primitives ---
2
+ // --- Catalog (flat in-memory fingerprint node map) ---
3
+ export { assembleCatalog, buildCatalogMenu, closestIds, } from "./catalog/index.js";
4
+ // --- Check (ghost.check/v1) — markdown checks, agent-evaluated ---
5
+ export { GHOST_CHECK_SCHEMA, GHOST_CHECK_SEVERITIES, lintGhostCheck, loadGhostCheck, parseCheckMarkdown, parseSourceRef, sliceNodeSection, } from "./check/index.js";
6
+ // --- CLI exit-code contract ---
7
+ export { EXIT, UsageError } from "./errors.js";
8
+ // --- Glob matching (repo-relative locators) ---
9
+ export { hasGlobMagic, matchesGlob, normalizeGlobPath } from "./glob.js";
10
+ // --- Glossary (reserved fingerprint vocabulary slot) ---
11
+ export { GhostGlossaryFrontmatterSchema, parseGlossary, } from "./glossary.js";
12
+ export { expandLocalMaterialLocator, listBundledMaterialFiles, materialLocatorClaimsPath, resolveLocalMaterialLocator, transportMaterials, } from "./material-transport.js";
13
+ // --- Materials (node locators) ---
14
+ export { classifyMaterialLocator, validateMaterialLocator, } from "./materials.js";
15
+ // --- Node (ghost.node/v1) — the markdown node artifact ---
16
+ export { carriesConcreteMaterial, extractSkeletonFences, extractSkeletonSections, GHOST_NODE_SCHEMA, GhostNodeFrontmatterSchema, hasSubstantialFencedExample, lintGhostNode, NodeIdSchema, NodeRefSchema, parseNode, serializeNode, stripSkeletonSections, } from "./node/index.js";
17
+ export { GHOST_FINGERPRINT_PACKAGE_SCHEMA, GhostFingerprintPackageManifestSchema, } from "./package-manifest.js";
18
+ export { loadSkillBundle } from "./skill-bundle-loader.js";
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ghost-core/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B,wDAAwD;AACxD,OAAO,EAEL,eAAe,EACf,gBAAgB,EAEhB,UAAU,GAIX,MAAM,oBAAoB,CAAC;AAC5B,oEAAoE;AACpE,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EAOtB,cAAc,EACd,cAAc,EAGd,kBAAkB,EAClB,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,iCAAiC;AACjC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC/C,iDAAiD;AACjD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACzE,0DAA0D;AAC1D,OAAO,EAEL,8BAA8B,EAG9B,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,0BAA0B,EAC1B,wBAAwB,EAGxB,yBAAyB,EACzB,2BAA2B,EAG3B,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,oCAAoC;AACpC,OAAO,EAEL,uBAAuB,EAEvB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,4DAA4D;AAC5D,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EAEvB,iBAAiB,EAGjB,0BAA0B,EAI1B,2BAA2B,EAC3B,aAAa,EACb,YAAY,EACZ,aAAa,EAEb,SAAS,EAET,aAAa,EACb,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,gCAAgC,EAChC,qCAAqC,GACtC,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,15 @@
1
+ export interface ParsedMarkdown {
2
+ /** Raw parsed frontmatter object (unvalidated), or null when absent. */
3
+ frontmatter: Record<string, unknown> | null;
4
+ body: string;
5
+ }
6
+ /**
7
+ * Split a markdown artifact into its YAML frontmatter and body. The artifact is
8
+ * `---\n<yaml>\n---\n<body>`. Returns `frontmatter: null` when there is no
9
+ * leading frontmatter block (callers report it as an error).
10
+ *
11
+ * Shared by every Ghost markdown+frontmatter artifact (checks, nodes): one
12
+ * envelope, one splitter.
13
+ */
14
+ export declare function splitMarkdownFrontmatter(raw: string): ParsedMarkdown;
15
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/ghost-core/markdown.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAoBpE"}
@@ -0,0 +1,30 @@
1
+ import { parse as parseYaml } from "yaml";
2
+ /**
3
+ * Split a markdown artifact into its YAML frontmatter and body. The artifact is
4
+ * `---\n<yaml>\n---\n<body>`. Returns `frontmatter: null` when there is no
5
+ * leading frontmatter block (callers report it as an error).
6
+ *
7
+ * Shared by every Ghost markdown+frontmatter artifact (checks, nodes): one
8
+ * envelope, one splitter.
9
+ */
10
+ export function splitMarkdownFrontmatter(raw) {
11
+ const text = raw.replace(/^\uFEFF/, "");
12
+ const lines = text.split(/\r?\n/);
13
+ if (lines[0]?.trim() !== "---") {
14
+ return { frontmatter: null, body: text };
15
+ }
16
+ for (let i = 1; i < lines.length; i++) {
17
+ if (lines[i]?.trim() === "---") {
18
+ const yaml = lines.slice(1, i).join("\n");
19
+ const body = lines.slice(i + 1).join("\n");
20
+ const parsed = parseYaml(yaml);
21
+ const frontmatter = parsed && typeof parsed === "object" && !Array.isArray(parsed)
22
+ ? parsed
23
+ : {};
24
+ return { frontmatter, body: body.replace(/^\n+/, "") };
25
+ }
26
+ }
27
+ // Opening fence with no close: treat the whole thing as body, no frontmatter.
28
+ return { frontmatter: null, body: text };
29
+ }
30
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/ghost-core/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAQ1C;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;QAC/B,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,WAAW,GACf,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC5D,CAAC,CAAE,MAAkC;gBACrC,CAAC,CAAC,EAAE,CAAC;YACT,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACzD,CAAC;IACH,CAAC;IACD,8EAA8E;IAC9E,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,43 @@
1
+ export type TransportedMaterialTier = "bundled" | "referenced" | "url";
2
+ export interface TransportedMaterial {
3
+ locator: string;
4
+ tier: TransportedMaterialTier;
5
+ /** Repo-relative concrete file path, when the locator resolved to a file. */
6
+ path?: string;
7
+ inlined?: string;
8
+ omitted?: true;
9
+ reason?: string;
10
+ }
11
+ export interface MaterialTransportOptions {
12
+ repoRoot: string;
13
+ packageDir: string;
14
+ materialsDir?: string;
15
+ globCap?: number;
16
+ referencedInlineBytes?: number;
17
+ }
18
+ export interface MaterialTransportResult {
19
+ materials: TransportedMaterial[];
20
+ inlined: number;
21
+ omitted: number;
22
+ }
23
+ export interface ExpandedLocalMaterialLocator {
24
+ locator: string;
25
+ tier: Exclude<TransportedMaterialTier, "url">;
26
+ pattern: string;
27
+ matches: Array<{
28
+ absolutePath: string;
29
+ repoRelativePath: string;
30
+ }>;
31
+ truncated: boolean;
32
+ }
33
+ export declare function transportMaterials(locators: string[] | undefined, options: MaterialTransportOptions): Promise<MaterialTransportResult>;
34
+ export declare function expandLocalMaterialLocator(locator: string, options: MaterialTransportOptions, expandOptions?: {
35
+ cap?: number;
36
+ }): Promise<ExpandedLocalMaterialLocator>;
37
+ export declare function listBundledMaterialFiles(options: MaterialTransportOptions): Promise<string[]>;
38
+ export declare function materialLocatorClaimsPath(locator: string, repoRelativePath: string, options: MaterialTransportOptions): boolean;
39
+ export declare function resolveLocalMaterialLocator(locator: string, options: MaterialTransportOptions): {
40
+ tier: Exclude<TransportedMaterialTier, "url">;
41
+ pattern: string;
42
+ };
43
+ //# sourceMappingURL=material-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"material-transport.d.ts","sourceRoot":"","sources":["../../src/ghost-core/material-transport.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,YAAY,GAAG,KAAK,CAAC;AAEvE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,uBAAuB,CAAC;IAC9B,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE,SAAS,EAAE,OAAO,CAAC;CACpB;AAOD,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,EAC9B,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,uBAAuB,CAAC,CAyDlC;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,wBAAwB,EACjC,aAAa,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GACnC,OAAO,CAAC,4BAA4B,CAAC,CAwCvC;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,MAAM,EAAE,CAAC,CAWnB;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAOT;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,wBAAwB,GAChC;IACD,IAAI,EAAE,OAAO,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;IAC9C,OAAO,EAAE,MAAM,CAAC;CACjB,CAeA"}
@@ -0,0 +1,231 @@
1
+ import { readdir, readFile, stat } from "node:fs/promises";
2
+ import { isAbsolute, join, relative, resolve } from "node:path";
3
+ import { TextDecoder } from "node:util";
4
+ import { hasGlobMagic, matchesGlob, normalizeGlobPath } from "./glob.js";
5
+ import { classifyMaterialLocator } from "./materials.js";
6
+ const DEFAULT_MATERIALS_DIR = "materials";
7
+ const DEFAULT_GLOB_CAP = 12;
8
+ const DEFAULT_REFERENCED_INLINE_BYTES = 8 * 1024;
9
+ const textDecoder = new TextDecoder("utf-8", { fatal: true });
10
+ export async function transportMaterials(locators, options) {
11
+ const materials = [];
12
+ let inlined = 0;
13
+ let omitted = 0;
14
+ for (const locator of locators ?? []) {
15
+ const classified = classifyMaterialLocator(locator);
16
+ if (classified.kind === "url") {
17
+ materials.push({
18
+ locator,
19
+ tier: "url",
20
+ omitted: true,
21
+ reason: "HTTPS URL; fetch it only if the task requires it",
22
+ });
23
+ omitted += 1;
24
+ continue;
25
+ }
26
+ const expanded = await expandLocalMaterialLocator(locator, options, {
27
+ cap: options.globCap ?? DEFAULT_GLOB_CAP,
28
+ });
29
+ const globbed = hasGlobMagic(locator);
30
+ if (expanded.matches.length === 0) {
31
+ materials.push({
32
+ locator,
33
+ tier: expanded.tier,
34
+ omitted: true,
35
+ reason: "matched no local files",
36
+ });
37
+ omitted += 1;
38
+ continue;
39
+ }
40
+ for (const match of expanded.matches) {
41
+ const transported = await transportFile(globbed ? match.repoRelativePath : locator, match, expanded.tier, options);
42
+ materials.push(transported);
43
+ if (transported.inlined !== undefined)
44
+ inlined += 1;
45
+ if (transported.omitted)
46
+ omitted += 1;
47
+ }
48
+ if (expanded.truncated) {
49
+ materials.push({
50
+ locator,
51
+ tier: expanded.tier,
52
+ omitted: true,
53
+ reason: `glob matched more than ${options.globCap ?? DEFAULT_GLOB_CAP} files; omitted the rest`,
54
+ });
55
+ omitted += 1;
56
+ }
57
+ }
58
+ return { materials, inlined, omitted };
59
+ }
60
+ export async function expandLocalMaterialLocator(locator, options, expandOptions = {}) {
61
+ const resolved = resolveLocalMaterialLocator(locator, options);
62
+ const cap = expandOptions.cap ?? Number.POSITIVE_INFINITY;
63
+ if (!hasGlobMagic(locator)) {
64
+ const absolutePath = resolve(options.repoRoot, resolved.pattern);
65
+ try {
66
+ const s = await stat(absolutePath);
67
+ return {
68
+ locator,
69
+ tier: resolved.tier,
70
+ pattern: resolved.pattern,
71
+ matches: s.isFile()
72
+ ? [{ absolutePath, repoRelativePath: resolved.pattern }]
73
+ : [],
74
+ truncated: false,
75
+ };
76
+ }
77
+ catch {
78
+ return {
79
+ locator,
80
+ tier: resolved.tier,
81
+ pattern: resolved.pattern,
82
+ matches: [],
83
+ truncated: false,
84
+ };
85
+ }
86
+ }
87
+ const base = globLiteralBase(resolved.pattern);
88
+ const baseAbs = resolve(options.repoRoot, base);
89
+ const found = [];
90
+ await walkFiles(baseAbs, options.repoRoot, found, cap + 1, resolved.pattern);
91
+ return {
92
+ locator,
93
+ tier: resolved.tier,
94
+ pattern: resolved.pattern,
95
+ matches: found.slice(0, cap),
96
+ truncated: found.length > cap,
97
+ };
98
+ }
99
+ export async function listBundledMaterialFiles(options) {
100
+ const materialsDir = options.materialsDir ?? DEFAULT_MATERIALS_DIR;
101
+ const bundledDir = join(options.packageDir, materialsDir);
102
+ const files = [];
103
+ await walkFiles(bundledDir, options.repoRoot, files, Number.POSITIVE_INFINITY);
104
+ return files.map((file) => file.repoRelativePath).sort();
105
+ }
106
+ export function materialLocatorClaimsPath(locator, repoRelativePath, options) {
107
+ if (classifyMaterialLocator(locator).kind === "url")
108
+ return false;
109
+ const resolved = resolveLocalMaterialLocator(locator, options);
110
+ const normalizedPath = normalizeGlobPath(repoRelativePath);
111
+ return hasGlobMagic(locator)
112
+ ? matchesGlob(resolved.pattern, normalizedPath)
113
+ : resolved.pattern === normalizedPath;
114
+ }
115
+ export function resolveLocalMaterialLocator(locator, options) {
116
+ const materialsDir = options.materialsDir ?? DEFAULT_MATERIALS_DIR;
117
+ const normalized = normalizeGlobPath(locator);
118
+ const packageMaterialsDir = resolve(options.packageDir, materialsDir);
119
+ const packageRelative = normalized === materialsDir || normalized.startsWith(`${materialsDir}/`);
120
+ const pattern = packageRelative
121
+ ? toRepoRelative(resolve(options.packageDir, normalized), options.repoRoot)
122
+ : normalized;
123
+ const absolutePattern = resolve(options.repoRoot, pattern);
124
+ const tier = packageRelative || isInsideOrEqual(absolutePattern, packageMaterialsDir)
125
+ ? "bundled"
126
+ : "referenced";
127
+ return { tier, pattern };
128
+ }
129
+ async function transportFile(locator, match, tier, options) {
130
+ const base = { locator, tier, path: match.repoRelativePath };
131
+ let s;
132
+ try {
133
+ s = await stat(match.absolutePath);
134
+ }
135
+ catch {
136
+ return {
137
+ ...base,
138
+ omitted: true,
139
+ reason: "matched file could not be read",
140
+ };
141
+ }
142
+ if (!s.isFile()) {
143
+ return { ...base, omitted: true, reason: "not a file" };
144
+ }
145
+ const inlineLimit = options.referencedInlineBytes ?? DEFAULT_REFERENCED_INLINE_BYTES;
146
+ if (tier === "referenced" && s.size > inlineLimit) {
147
+ return {
148
+ ...base,
149
+ omitted: true,
150
+ reason: `exceeds ${formatBytes(inlineLimit)} inline limit`,
151
+ };
152
+ }
153
+ let buffer;
154
+ try {
155
+ buffer = await readFile(match.absolutePath);
156
+ }
157
+ catch {
158
+ return {
159
+ ...base,
160
+ omitted: true,
161
+ reason: "matched file could not be read",
162
+ };
163
+ }
164
+ if (isBinary(buffer)) {
165
+ return {
166
+ ...base,
167
+ omitted: true,
168
+ reason: "binary inspect-pointer",
169
+ };
170
+ }
171
+ try {
172
+ return { ...base, inlined: textDecoder.decode(buffer) };
173
+ }
174
+ catch {
175
+ return { ...base, omitted: true, reason: "not valid UTF-8 text" };
176
+ }
177
+ }
178
+ async function walkFiles(dir, repoRoot, files, limit, glob) {
179
+ if (files.length >= limit)
180
+ return;
181
+ let entries;
182
+ try {
183
+ entries = await readdir(dir, { withFileTypes: true });
184
+ }
185
+ catch {
186
+ return;
187
+ }
188
+ for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
189
+ if (files.length >= limit)
190
+ return;
191
+ if (entry.name === ".git")
192
+ continue;
193
+ const absolutePath = join(dir, entry.name);
194
+ if (entry.isDirectory()) {
195
+ await walkFiles(absolutePath, repoRoot, files, limit, glob);
196
+ continue;
197
+ }
198
+ if (!entry.isFile())
199
+ continue;
200
+ const repoRelativePath = toRepoRelative(absolutePath, repoRoot);
201
+ if (glob === undefined || matchesGlob(glob, repoRelativePath)) {
202
+ files.push({ absolutePath, repoRelativePath });
203
+ }
204
+ }
205
+ }
206
+ function globLiteralBase(pattern) {
207
+ const segments = normalizeGlobPath(pattern).split("/");
208
+ const literal = [];
209
+ for (const segment of segments) {
210
+ if (hasGlobMagic(segment))
211
+ break;
212
+ literal.push(segment);
213
+ }
214
+ const base = literal.join("/");
215
+ return base === "" ? "." : base;
216
+ }
217
+ function toRepoRelative(path, repoRoot) {
218
+ const rel = relative(repoRoot, path);
219
+ return normalizeGlobPath(rel === "" ? "." : rel);
220
+ }
221
+ function isInsideOrEqual(child, parent) {
222
+ const rel = relative(parent, child);
223
+ return rel === "" || (!rel.startsWith("..") && !isAbsolute(rel));
224
+ }
225
+ function isBinary(buffer) {
226
+ return buffer.includes(0);
227
+ }
228
+ function formatBytes(bytes) {
229
+ return bytes % 1024 === 0 ? `${bytes / 1024} KB` : `${bytes} bytes`;
230
+ }
231
+ //# sourceMappingURL=material-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"material-transport.js","sourceRoot":"","sources":["../../src/ghost-core/material-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAoCzD,MAAM,qBAAqB,GAAG,WAAW,CAAC;AAC1C,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,MAAM,+BAA+B,GAAG,CAAC,GAAG,IAAI,CAAC;AACjD,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAE9D,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAA8B,EAC9B,OAAiC;IAEjC,MAAM,SAAS,GAA0B,EAAE,CAAC;IAC5C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,OAAO,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,UAAU,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC9B,SAAS,CAAC,IAAI,CAAC;gBACb,OAAO;gBACP,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,kDAAkD;aAC3D,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,CAAC;YACb,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC,OAAO,EAAE,OAAO,EAAE;YAClE,GAAG,EAAE,OAAO,CAAC,OAAO,IAAI,gBAAgB;SACzC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,SAAS,CAAC,IAAI,CAAC;gBACb,OAAO;gBACP,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,wBAAwB;aACjC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,CAAC;YACb,SAAS;QACX,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,MAAM,aAAa,CACrC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,EAC1C,KAAK,EACL,QAAQ,CAAC,IAAI,EACb,OAAO,CACR,CAAC;YACF,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5B,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC,CAAC;YACpD,IAAI,WAAW,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YACvB,SAAS,CAAC,IAAI,CAAC;gBACb,OAAO;gBACP,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,0BAA0B,OAAO,CAAC,OAAO,IAAI,gBAAgB,0BAA0B;aAChG,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAAe,EACf,OAAiC,EACjC,gBAAkC,EAAE;IAEpC,MAAM,QAAQ,GAAG,2BAA2B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC;IAE1D,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC;YACnC,OAAO;gBACL,OAAO;gBACP,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;oBACjB,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACxD,CAAC,CAAC,EAAE;gBACN,SAAS,EAAE,KAAK;aACjB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;gBACL,OAAO;gBACP,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,KAAK;aACjB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAChD,MAAM,KAAK,GAA8D,EAAE,CAAC;IAC5E,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE7E,OAAO;QACL,OAAO;QACP,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;QAC5B,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,GAAG;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAiC;IAEjC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,qBAAqB,CAAC;IACnE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAC1D,MAAM,KAAK,GAA8D,EAAE,CAAC;IAC5E,MAAM,SAAS,CACb,UAAU,EACV,OAAO,CAAC,QAAQ,EAChB,KAAK,EACL,MAAM,CAAC,iBAAiB,CACzB,CAAC;IACF,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,OAAe,EACf,gBAAwB,EACxB,OAAiC;IAEjC,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAClE,MAAM,QAAQ,GAAG,2BAA2B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/D,MAAM,cAAc,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAC3D,OAAO,YAAY,CAAC,OAAO,CAAC;QAC1B,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;QAC/C,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,cAAc,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,OAAe,EACf,OAAiC;IAKjC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,qBAAqB,CAAC;IACnE,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACtE,MAAM,eAAe,GACnB,UAAU,KAAK,YAAY,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,YAAY,GAAG,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,eAAe;QAC7B,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC;QAC3E,CAAC,CAAC,UAAU,CAAC;IACf,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3D,MAAM,IAAI,GACR,eAAe,IAAI,eAAe,CAAC,eAAe,EAAE,mBAAmB,CAAC;QACtE,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,YAAY,CAAC;IACnB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,OAAe,EACf,KAAyD,EACzD,IAA6C,EAC7C,OAAiC;IAEjC,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC;IAC7D,IAAI,CAAmC,CAAC;IACxC,IAAI,CAAC;QACH,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,GAAG,IAAI;YACP,OAAO,EAAE,IAAa;YACtB,MAAM,EAAE,gCAAgC;SACzC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAChB,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAa,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IACnE,CAAC;IAED,MAAM,WAAW,GACf,OAAO,CAAC,qBAAqB,IAAI,+BAA+B,CAAC;IACnE,IAAI,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,IAAI,GAAG,WAAW,EAAE,CAAC;QAClD,OAAO;YACL,GAAG,IAAI;YACP,OAAO,EAAE,IAAa;YACtB,MAAM,EAAE,WAAW,WAAW,CAAC,WAAW,CAAC,eAAe;SAC3D,CAAC;IACJ,CAAC;IAED,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,GAAG,IAAI;YACP,OAAO,EAAE,IAAa;YACtB,MAAM,EAAE,gCAAgC;SACzC,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,OAAO;YACL,GAAG,IAAI;YACP,OAAO,EAAE,IAAa;YACtB,MAAM,EAAE,wBAAwB;SACjC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAa,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CACtB,GAAW,EACX,QAAgB,EAChB,KAAgE,EAChE,KAAa,EACb,IAAa;IAEb,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK;QAAE,OAAO;IAElC,IAAI,OAIF,CAAC;IACH,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACzE,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK;YAAE,OAAO;QAClC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QACpC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC5D,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAAE,SAAS;QAC9B,MAAM,gBAAgB,GAAG,cAAc,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAChE,IAAI,IAAI,KAAK,SAAS,IAAI,WAAW,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,CAAC;YAC9D,KAAK,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,YAAY,CAAC,OAAO,CAAC;YAAE,MAAM;QACjC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAClC,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,QAAgB;IACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACrC,OAAO,iBAAiB,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,eAAe,CAAC,KAAa,EAAE,MAAc;IACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc;IAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC;AACtE,CAAC"}
@@ -0,0 +1,14 @@
1
+ /** Material locator support for fingerprint nodes. */
2
+ export type GhostMaterialLocatorKind = "local" | "url";
3
+ export interface ClassifiedGhostMaterialLocator {
4
+ kind: GhostMaterialLocatorKind;
5
+ value: string;
6
+ }
7
+ /**
8
+ * Classify a material locator. `https://…` locators point outside the repo;
9
+ * everything else is a repo-relative path/glob after validation.
10
+ */
11
+ export declare function classifyMaterialLocator(value: string): ClassifiedGhostMaterialLocator;
12
+ /** Return a human-readable validation error, or null when the locator is valid. */
13
+ export declare function validateMaterialLocator(value: string): string | null;
14
+ //# sourceMappingURL=materials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"materials.d.ts","sourceRoot":"","sources":["../../src/ghost-core/materials.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,KAAK,CAAC;AAEvD,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,wBAAwB,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAID;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,GACZ,8BAA8B,CAIhC;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0CpE"}