ctxr-cli 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/dist/adapter.d.ts +0 -1
  2. package/dist/adapter.d.ts.map +1 -1
  3. package/dist/adapter.js.map +1 -1
  4. package/dist/adapters/builtin/index.d.ts.map +1 -1
  5. package/dist/adapters/builtin/index.js +2 -2
  6. package/dist/adapters/builtin/index.js.map +1 -1
  7. package/dist/adapters/harness/claude-code.d.ts.map +1 -1
  8. package/dist/adapters/harness/claude-code.js +30 -14
  9. package/dist/adapters/harness/claude-code.js.map +1 -1
  10. package/dist/adapters/harness/hermes-agent.d.ts +9 -0
  11. package/dist/adapters/harness/hermes-agent.d.ts.map +1 -0
  12. package/dist/adapters/harness/hermes-agent.js +13 -0
  13. package/dist/adapters/harness/hermes-agent.js.map +1 -0
  14. package/dist/adapters/types.d.ts +38 -18
  15. package/dist/adapters/types.d.ts.map +1 -1
  16. package/dist/adapters/types.js +3 -3
  17. package/dist/adapters/types.js.map +1 -1
  18. package/dist/commands/adapters-generate.d.ts +4 -2
  19. package/dist/commands/adapters-generate.d.ts.map +1 -1
  20. package/dist/commands/adapters-generate.js +14 -6
  21. package/dist/commands/adapters-generate.js.map +1 -1
  22. package/dist/commands/archive.d.ts +6 -4
  23. package/dist/commands/archive.d.ts.map +1 -1
  24. package/dist/commands/archive.js +7 -5
  25. package/dist/commands/archive.js.map +1 -1
  26. package/dist/commands/catalog-show.d.ts +0 -1
  27. package/dist/commands/catalog-show.d.ts.map +1 -1
  28. package/dist/commands/catalog-show.js +1 -1
  29. package/dist/commands/catalog-show.js.map +1 -1
  30. package/dist/commands/graph-query.d.ts +2 -11
  31. package/dist/commands/graph-query.d.ts.map +1 -1
  32. package/dist/commands/graph-query.js +11 -14
  33. package/dist/commands/graph-query.js.map +1 -1
  34. package/dist/commands/init.d.ts +2 -0
  35. package/dist/commands/init.d.ts.map +1 -1
  36. package/dist/commands/init.js +82 -21
  37. package/dist/commands/init.js.map +1 -1
  38. package/dist/commands/publish-check.d.ts +23 -0
  39. package/dist/commands/publish-check.d.ts.map +1 -0
  40. package/dist/commands/publish-check.js +112 -0
  41. package/dist/commands/publish-check.js.map +1 -0
  42. package/dist/commands/publish-gather.d.ts +27 -0
  43. package/dist/commands/publish-gather.d.ts.map +1 -0
  44. package/dist/commands/publish-gather.js +73 -0
  45. package/dist/commands/publish-gather.js.map +1 -0
  46. package/dist/commands/publish-new.d.ts +19 -0
  47. package/dist/commands/publish-new.d.ts.map +1 -0
  48. package/dist/commands/publish-new.js +108 -0
  49. package/dist/commands/publish-new.js.map +1 -0
  50. package/dist/commands/serve.d.ts +32 -0
  51. package/dist/commands/serve.d.ts.map +1 -0
  52. package/dist/commands/serve.js +151 -0
  53. package/dist/commands/serve.js.map +1 -0
  54. package/dist/commands/session-capture.d.ts.map +1 -1
  55. package/dist/commands/session-capture.js +0 -2
  56. package/dist/commands/session-capture.js.map +1 -1
  57. package/dist/commands/update.js +3 -3
  58. package/dist/commands/update.js.map +1 -1
  59. package/dist/config/defaults.d.ts +49 -44
  60. package/dist/config/defaults.d.ts.map +1 -1
  61. package/dist/config/defaults.js +49 -47
  62. package/dist/config/defaults.js.map +1 -1
  63. package/dist/config/schema.d.ts +53 -52
  64. package/dist/config/schema.d.ts.map +1 -1
  65. package/dist/config/schema.js +84 -62
  66. package/dist/config/schema.js.map +1 -1
  67. package/dist/core/agents-doc.d.ts +9 -0
  68. package/dist/core/agents-doc.d.ts.map +1 -1
  69. package/dist/core/agents-doc.js +31 -16
  70. package/dist/core/agents-doc.js.map +1 -1
  71. package/dist/core/browse/link-resolver.d.ts +12 -0
  72. package/dist/core/browse/link-resolver.d.ts.map +1 -0
  73. package/dist/core/browse/link-resolver.js +12 -0
  74. package/dist/core/browse/link-resolver.js.map +1 -0
  75. package/dist/core/browse/nav.d.ts +10 -0
  76. package/dist/core/browse/nav.d.ts.map +1 -0
  77. package/dist/core/browse/nav.js +101 -0
  78. package/dist/core/browse/nav.js.map +1 -0
  79. package/dist/core/browse/render.d.ts +5 -0
  80. package/dist/core/browse/render.d.ts.map +1 -0
  81. package/dist/core/browse/render.js +66 -0
  82. package/dist/core/browse/render.js.map +1 -0
  83. package/dist/core/browse/routes.d.ts +40 -0
  84. package/dist/core/browse/routes.d.ts.map +1 -0
  85. package/dist/core/browse/routes.js +68 -0
  86. package/dist/core/browse/routes.js.map +1 -0
  87. package/dist/core/browse/templates.d.ts +13 -0
  88. package/dist/core/browse/templates.d.ts.map +1 -0
  89. package/dist/core/browse/templates.js +39 -0
  90. package/dist/core/browse/templates.js.map +1 -0
  91. package/dist/core/browse/tree.d.ts +33 -0
  92. package/dist/core/browse/tree.d.ts.map +1 -0
  93. package/dist/core/browse/tree.js +53 -0
  94. package/dist/core/browse/tree.js.map +1 -0
  95. package/dist/core/catalog/build.d.ts +1 -1
  96. package/dist/core/catalog/build.d.ts.map +1 -1
  97. package/dist/core/catalog/build.js +1 -2
  98. package/dist/core/catalog/build.js.map +1 -1
  99. package/dist/core/catalog/model.d.ts +2 -0
  100. package/dist/core/catalog/model.d.ts.map +1 -1
  101. package/dist/core/catalog/model.js +2 -1
  102. package/dist/core/catalog/model.js.map +1 -1
  103. package/dist/core/checks/integrity-checks.d.ts +18 -2
  104. package/dist/core/checks/integrity-checks.d.ts.map +1 -1
  105. package/dist/core/checks/integrity-checks.js +55 -10
  106. package/dist/core/checks/integrity-checks.js.map +1 -1
  107. package/dist/core/checks/manifest.d.ts.map +1 -1
  108. package/dist/core/checks/manifest.js +0 -5
  109. package/dist/core/checks/manifest.js.map +1 -1
  110. package/dist/core/checks/organize-checks.d.ts +10 -3
  111. package/dist/core/checks/organize-checks.d.ts.map +1 -1
  112. package/dist/core/checks/organize-checks.js +14 -5
  113. package/dist/core/checks/organize-checks.js.map +1 -1
  114. package/dist/core/checks/types.d.ts +1 -1
  115. package/dist/core/convention-doc.d.ts +21 -19
  116. package/dist/core/convention-doc.d.ts.map +1 -1
  117. package/dist/core/convention-doc.js +48 -62
  118. package/dist/core/convention-doc.js.map +1 -1
  119. package/dist/core/conventions.d.ts +2 -2
  120. package/dist/core/conventions.js +2 -2
  121. package/dist/core/errors.d.ts +31 -44
  122. package/dist/core/errors.d.ts.map +1 -1
  123. package/dist/core/errors.js +81 -128
  124. package/dist/core/errors.js.map +1 -1
  125. package/dist/core/exit-codes.d.ts +7 -5
  126. package/dist/core/exit-codes.d.ts.map +1 -1
  127. package/dist/core/exit-codes.js +7 -5
  128. package/dist/core/exit-codes.js.map +1 -1
  129. package/dist/core/git/repo.d.ts +0 -6
  130. package/dist/core/git/repo.d.ts.map +1 -1
  131. package/dist/core/git/repo.js +0 -13
  132. package/dist/core/git/repo.js.map +1 -1
  133. package/dist/core/git/worktree.d.ts +4 -7
  134. package/dist/core/git/worktree.d.ts.map +1 -1
  135. package/dist/core/git/worktree.js +4 -10
  136. package/dist/core/git/worktree.js.map +1 -1
  137. package/dist/core/graph/model.d.ts +14 -0
  138. package/dist/core/graph/model.d.ts.map +1 -1
  139. package/dist/core/graph/model.js +30 -14
  140. package/dist/core/graph/model.js.map +1 -1
  141. package/dist/core/harness/bridge.d.ts +30 -0
  142. package/dist/core/harness/bridge.d.ts.map +1 -0
  143. package/dist/core/harness/bridge.js +178 -0
  144. package/dist/core/harness/bridge.js.map +1 -0
  145. package/dist/core/ingest/identity.d.ts +4 -4
  146. package/dist/core/ingest/identity.js +4 -4
  147. package/dist/core/json-config-merge.d.ts.map +1 -1
  148. package/dist/core/json-config-merge.js +30 -7
  149. package/dist/core/json-config-merge.js.map +1 -1
  150. package/dist/core/migrations/add-explanation-craft-skill.d.ts +26 -0
  151. package/dist/core/migrations/add-explanation-craft-skill.d.ts.map +1 -0
  152. package/dist/core/migrations/add-explanation-craft-skill.js +94 -0
  153. package/dist/core/migrations/add-explanation-craft-skill.js.map +1 -0
  154. package/dist/core/migrations/archive-destination-from-taxonomy.d.ts +35 -0
  155. package/dist/core/migrations/archive-destination-from-taxonomy.d.ts.map +1 -0
  156. package/dist/core/migrations/archive-destination-from-taxonomy.js +109 -0
  157. package/dist/core/migrations/archive-destination-from-taxonomy.js.map +1 -0
  158. package/dist/core/migrations/drop-access-axes.d.ts +24 -0
  159. package/dist/core/migrations/drop-access-axes.d.ts.map +1 -0
  160. package/dist/core/migrations/drop-access-axes.js +54 -0
  161. package/dist/core/migrations/drop-access-axes.js.map +1 -0
  162. package/dist/core/migrations/drop-forge-and-workspaces-external.d.ts +19 -0
  163. package/dist/core/migrations/drop-forge-and-workspaces-external.d.ts.map +1 -0
  164. package/dist/core/migrations/drop-forge-and-workspaces-external.js +49 -0
  165. package/dist/core/migrations/drop-forge-and-workspaces-external.js.map +1 -0
  166. package/dist/core/migrations/registry.d.ts +11 -1
  167. package/dist/core/migrations/registry.d.ts.map +1 -1
  168. package/dist/core/migrations/registry.js +19 -3
  169. package/dist/core/migrations/registry.js.map +1 -1
  170. package/dist/core/notes/list.d.ts +1 -12
  171. package/dist/core/notes/list.d.ts.map +1 -1
  172. package/dist/core/notes/list.js +5 -1
  173. package/dist/core/notes/list.js.map +1 -1
  174. package/dist/core/publish/script-check.d.ts +12 -0
  175. package/dist/core/publish/script-check.d.ts.map +1 -0
  176. package/dist/core/publish/script-check.js +39 -0
  177. package/dist/core/publish/script-check.js.map +1 -0
  178. package/dist/core/reconcile.d.ts +3 -0
  179. package/dist/core/reconcile.d.ts.map +1 -1
  180. package/dist/core/reconcile.js +15 -5
  181. package/dist/core/reconcile.js.map +1 -1
  182. package/dist/core/records.d.ts +4 -5
  183. package/dist/core/records.d.ts.map +1 -1
  184. package/dist/core/records.js +0 -2
  185. package/dist/core/records.js.map +1 -1
  186. package/dist/core/session.d.ts +9 -9
  187. package/dist/core/session.js +9 -9
  188. package/dist/core/skills.d.ts +42 -0
  189. package/dist/core/skills.d.ts.map +1 -1
  190. package/dist/core/skills.js +159 -31
  191. package/dist/core/skills.js.map +1 -1
  192. package/dist/core/write-lifecycle/path-gate.d.ts.map +1 -1
  193. package/dist/core/write-lifecycle/path-gate.js +4 -2
  194. package/dist/core/write-lifecycle/path-gate.js.map +1 -1
  195. package/dist/prompt/inquirer-prompter.d.ts.map +1 -1
  196. package/dist/prompt/inquirer-prompter.js +11 -1
  197. package/dist/prompt/inquirer-prompter.js.map +1 -1
  198. package/dist/prompt/prompter.d.ts +16 -0
  199. package/dist/prompt/prompter.d.ts.map +1 -1
  200. package/dist/run.d.ts.map +1 -1
  201. package/dist/run.js +69 -101
  202. package/dist/run.js.map +1 -1
  203. package/dist/taxonomy/profiles.d.ts +11 -0
  204. package/dist/taxonomy/profiles.d.ts.map +1 -1
  205. package/dist/taxonomy/profiles.js +1 -0
  206. package/dist/taxonomy/profiles.js.map +1 -1
  207. package/dist/version.d.ts +1 -1
  208. package/dist/version.js +1 -1
  209. package/package.json +3 -1
  210. package/templates/agents/canonical.md +1 -3
  211. package/templates/conventions/baseline-conventions.md +27 -0
  212. package/templates/conventions/{custom-convention-seed.md → house-conventions-seed.md} +15 -2
  213. package/templates/hooks/pre-push.sh +1 -1
  214. package/templates/serve/shell.html +18 -0
  215. package/templates/serve/style.css +163 -0
  216. package/templates/skills/ctxr-land.md +32 -18
  217. package/templates/skills/ctxr-organize-audit.md +2 -10
  218. package/templates/skills/ctxr-placement.md +6 -24
  219. package/templates/skills/ctxr-publish.md +84 -0
  220. package/templates/skills/ctxr-session-capture.md +43 -3
  221. package/templates/skills/ctxr-session-lifecycle.md +20 -1
  222. package/templates/skills/ctxr-submit.md +15 -11
  223. package/templates/vendor/eli5/LICENSE.txt +21 -0
  224. package/templates/vendor/eli5/SKILL.md +116 -0
  225. package/templates/vendor/eli5/provenance.json +8 -0
  226. package/templates/vendor/frontend-design/LICENSE.txt +177 -0
  227. package/templates/vendor/frontend-design/SKILL.md +55 -0
  228. package/templates/vendor/frontend-design/provenance.json +7 -0
  229. package/dist/adapters/forge/github.d.ts +0 -12
  230. package/dist/adapters/forge/github.d.ts.map +0 -1
  231. package/dist/adapters/forge/github.js +0 -76
  232. package/dist/adapters/forge/github.js.map +0 -1
  233. package/dist/adapters/forge/types.d.ts +0 -46
  234. package/dist/adapters/forge/types.d.ts.map +0 -1
  235. package/dist/adapters/forge/types.js +0 -2
  236. package/dist/adapters/forge/types.js.map +0 -1
  237. package/dist/commands/check.d.ts +0 -30
  238. package/dist/commands/check.d.ts.map +0 -1
  239. package/dist/commands/check.js +0 -70
  240. package/dist/commands/check.js.map +0 -1
  241. package/dist/commands/note-resolve.d.ts +0 -14
  242. package/dist/commands/note-resolve.d.ts.map +0 -1
  243. package/dist/commands/note-resolve.js +0 -24
  244. package/dist/commands/note-resolve.js.map +0 -1
  245. package/dist/commands/session-abandon.d.ts +0 -13
  246. package/dist/commands/session-abandon.d.ts.map +0 -1
  247. package/dist/commands/session-abandon.js +0 -22
  248. package/dist/commands/session-abandon.js.map +0 -1
  249. package/dist/commands/session-land.d.ts +0 -45
  250. package/dist/commands/session-land.d.ts.map +0 -1
  251. package/dist/commands/session-land.js +0 -171
  252. package/dist/commands/session-land.js.map +0 -1
  253. package/dist/commands/session-reap.d.ts +0 -22
  254. package/dist/commands/session-reap.d.ts.map +0 -1
  255. package/dist/commands/session-reap.js +0 -52
  256. package/dist/commands/session-reap.js.map +0 -1
  257. package/dist/commands/session-submit.d.ts +0 -29
  258. package/dist/commands/session-submit.d.ts.map +0 -1
  259. package/dist/commands/session-submit.js +0 -72
  260. package/dist/commands/session-submit.js.map +0 -1
  261. package/dist/core/checks/disclosure-checks.d.ts +0 -4
  262. package/dist/core/checks/disclosure-checks.d.ts.map +0 -1
  263. package/dist/core/checks/disclosure-checks.js +0 -24
  264. package/dist/core/checks/disclosure-checks.js.map +0 -1
  265. package/dist/core/disclosure/leak-scan.d.ts +0 -19
  266. package/dist/core/disclosure/leak-scan.d.ts.map +0 -1
  267. package/dist/core/disclosure/leak-scan.js +0 -31
  268. package/dist/core/disclosure/leak-scan.js.map +0 -1
  269. package/dist/core/disclosure/model.d.ts +0 -18
  270. package/dist/core/disclosure/model.d.ts.map +0 -1
  271. package/dist/core/disclosure/model.js +0 -45
  272. package/dist/core/disclosure/model.js.map +0 -1
  273. package/dist/core/graph/visibility-filter.d.ts +0 -13
  274. package/dist/core/graph/visibility-filter.d.ts.map +0 -1
  275. package/dist/core/graph/visibility-filter.js +0 -26
  276. package/dist/core/graph/visibility-filter.js.map +0 -1
  277. package/dist/core/migrations/rename-visibility-field.d.ts +0 -3
  278. package/dist/core/migrations/rename-visibility-field.d.ts.map +0 -1
  279. package/dist/core/migrations/rename-visibility-field.js +0 -62
  280. package/dist/core/migrations/rename-visibility-field.js.map +0 -1
  281. package/dist/core/notes/checks.d.ts +0 -20
  282. package/dist/core/notes/checks.d.ts.map +0 -1
  283. package/dist/core/notes/checks.js +0 -58
  284. package/dist/core/notes/checks.js.map +0 -1
  285. package/dist/core/notes/visibility.d.ts +0 -26
  286. package/dist/core/notes/visibility.d.ts.map +0 -1
  287. package/dist/core/notes/visibility.js +0 -41
  288. package/dist/core/notes/visibility.js.map +0 -1
  289. package/templates/conventions/baseline-convention.md +0 -60
@@ -4,6 +4,7 @@ import { GRAPH_DOCUMENT_RELATIVE_PATH } from './graph/persist.js';
4
4
  import { CONFIG_FILE_NAME } from './root.js';
5
5
  import { excludedPrefixesFor } from './notes/list.js';
6
6
  import { extractDocMetadata, inlineDocBody, scanConventions } from './conventions.js';
7
+ import { renderBaselineConventions } from './convention-doc.js';
7
8
  import { readFencedRegionFromFile, removeFencedRegionFromFile, upsertFencedRegionInFile } from './fs/fenced-region.js';
8
9
  import { htmlCommentFence } from './markers.js';
9
10
  import { packagedTemplate, substituteBlock } from './templates.js';
@@ -97,10 +98,7 @@ export function renderPlacementSection(config) {
97
98
  const { layers } = config.taxonomy;
98
99
  if (layers.length === 0)
99
100
  return agentsTemplate('placement-no-layers').split('\n');
100
- const layerLines = layers.map((layer) => {
101
- const directoryDefault = Object.entries(config.visibility.directory_defaults).find(([prefix]) => prefix === layer.path || prefix === `${layer.path}/`)?.[1];
102
- return `- **${layer.name}** (\`${layer.path}/\`): ${layer.description}${directoryDefault ? ` Notes here default to visibility "${directoryDefault}" unless given an explicit value.` : ''}`;
103
- });
101
+ const layerLines = layers.map((layer) => `- **${layer.name}** (\`${layer.path}/\`): ${layer.description}`);
104
102
  return substituteBlock(agentsTemplate('placement'), '__LAYER_LIST__', layerLines).split('\n');
105
103
  }
106
104
  export async function buildAgentsPlacementSection(root, config) {
@@ -143,8 +141,6 @@ function renderMissionPointer(config) {
143
141
  export function renderCanonicalSection(config) {
144
142
  return substituteBlock(agentsTemplate('canonical')
145
143
  .replaceAll('__CONFIG_FILE_NAME__', CONFIG_FILE_NAME)
146
- .replaceAll('__VISIBILITY_FIELD__', config.fields.visibility)
147
- .replaceAll('__DEFAULT_CONTEXT__', config.visibility.default_context)
148
144
  .replaceAll('__SKILLS_PATH__', config.harness.skills_path), '__MISSION_POINTER__', renderMissionPointer(config)).split('\n');
149
145
  }
150
146
  export async function buildAgentsCanonicalSection(root, config) {
@@ -209,17 +205,29 @@ export const AGENTS_MD_CONVENTIONS_FENCE = htmlCommentFence('conventions');
209
205
  export function renderConventionBlock(doc) {
210
206
  return [`### ${doc.title}`, '', ...inlineDocBody(doc, 2), '', `_Source: ${doc.path}_`];
211
207
  }
208
+ /**
209
+ * What the baseline block names as its origin. It is not a path: the baseline
210
+ * is rendered from the shipped template and this store's configuration at
211
+ * generation time, and deliberately has no file in the guidance directory —
212
+ * its bytes live here and only here.
213
+ */
214
+ export const BASELINE_SOURCE_LABEL = "contexture's shipped baseline, rendered from this store's configuration";
215
+ /** The shipped baseline as an inlined block, synthesized rather than read off disk. */
216
+ export function renderBaselineBlock(config) {
217
+ const doc = extractDocMetadata(renderBaselineConventions(config), BASELINE_SOURCE_LABEL);
218
+ return [`### ${doc.title}`, '', ...inlineDocBody(doc, 2), '', `_Source: ${BASELINE_SOURCE_LABEL}_`];
219
+ }
212
220
  function conventionsBody(config, conventions) {
213
- if (conventions.length === 0) {
214
- return [
215
- 'This store declares no convention documents yet. Operator-authored conventions (content style, field',
216
- `semantics, house rules) belong as markdown files under \`${config.harness.guidance_path}\` — each is`,
217
- 'inlined here in full on regeneration.',
218
- ];
219
- }
220
- const blocks = conventions.map(renderConventionBlock);
221
+ const intro = conventions.length === 0
222
+ ? [
223
+ "contexture's shipped baseline, inlined in full. This store has added none of its own yet —",
224
+ 'operator-authored conventions (content style, field semantics, house rules) belong as markdown',
225
+ `files under \`${config.harness.guidance_path}\`, each inlined here alongside the baseline.`,
226
+ ]
227
+ : ["contexture's shipped baseline and this store's own conventions, inlined in full:"];
228
+ const blocks = [renderBaselineBlock(config), ...conventions.map(renderConventionBlock)];
221
229
  const bodies = blocks.flatMap((block, i) => (i === blocks.length - 1 ? block : [...block, '']));
222
- return ['Operator-authored conventions for this store, inlined in full:', '', ...bodies];
230
+ return [...intro, '', ...bodies];
223
231
  }
224
232
  export function renderConventionsSection(config, conventions) {
225
233
  return substituteBlock(agentsTemplate('conventions'), '__CONVENTION_BODY__', conventionsBody(config, conventions)).split('\n');
@@ -259,8 +267,15 @@ export async function checkAgentsMdDrift(root, config) {
259
267
  const freshConventionsSection = renderConventionsSection(config, conventions).join('\n');
260
268
  const driftedConventions = [];
261
269
  if (freshConventionsSection !== conventionsRegion) {
270
+ // The baseline is synthesized, not scanned, so it is checked on its own —
271
+ // otherwise a config change that only moves the baseline would be reported
272
+ // against the guidance directory, which may hold no files at all.
273
+ if (!conventionsRegion.includes(renderBaselineBlock(config).join('\n'))) {
274
+ driftedConventions.push(BASELINE_SOURCE_LABEL);
275
+ }
262
276
  if (conventions.length === 0) {
263
- driftedConventions.push(config.harness.guidance_path);
277
+ if (driftedConventions.length === 0)
278
+ driftedConventions.push(config.harness.guidance_path);
264
279
  }
265
280
  else {
266
281
  for (const doc of conventions) {
@@ -1 +1 @@
1
- {"version":3,"file":"agents-doc.js","sourceRoot":"","sources":["../../src/core/agents-doc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,eAAe,EAAmB,MAAM,kBAAkB,CAAC;AACvG,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACvH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEnE;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;AAErF,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,sBAAsB,CAAC,QAA2B;IACzD,2EAA2E;IAC3E,0EAA0E;IAC1E,wEAAwE;IACxE,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpD,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,GAAG,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;SAC1F,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAmB;IACzD,MAAM,UAAU,GAAG,sBAAsB,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,OAAO,eAAe,CACpB,cAAc,CAAC,uBAAuB,CAAC,CAAC,UAAU,CAAC,yBAAyB,EAAE,4BAA4B,CAAC,EAC3G,qBAAqB,EACrB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CACzD,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,mHAAmH;AACnH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,IAAY,EAAE,MAAmB;IAClF,OAAO,wBAAwB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,2BAA2B,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;AACpH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;AAE9E,MAAM,UAAU,oBAAoB,CAAC,MAAmB;IACtD,OAAO,cAAc,CAAC,oBAAoB,CAAC,CAAC,UAAU,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACjH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,IAAY,EAAE,MAAmB;IAC/E,OAAO,wBAAwB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,uBAAuB,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7G,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;AAEvE,MAAM,UAAU,sBAAsB,CAAC,MAAmB;IACxD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;IACnC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,cAAc,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElF,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACtC,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAChF,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,CACnE,EAAE,CAAC,CAAC,CAAC,CAAC;QACP,OAAO,OAAO,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,WAAW,GACnE,gBAAgB,CAAC,CAAC,CAAC,sCAAsC,gBAAgB,mCAAmC,CAAC,CAAC,CAAC,EACjH,EAAE,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,eAAe,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,IAAY,EAAE,MAAmB;IACjF,OAAO,wBAAwB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,yBAAyB,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;AACjH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;AAEvE;;;;;;;;;;GAUG;AACH,SAAS,oBAAoB,CAAC,MAAmB;IAC/C,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;IACtD,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAC5B,OAAO;QACL,EAAE;QACF,UAAU,WAAW,mFAAmF;YACtG,qIAAqI;KACxI,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAmB;IACxD,OAAO,eAAe,CACpB,cAAc,CAAC,WAAW,CAAC;SACxB,UAAU,CAAC,sBAAsB,EAAE,gBAAgB,CAAC;SACpD,UAAU,CAAC,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;SAC5D,UAAU,CAAC,qBAAqB,EAAE,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC;SACpE,UAAU,CAAC,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAC5D,qBAAqB,EACrB,oBAAoB,CAAC,MAAM,CAAC,CAC7B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,IAAY,EAAE,MAAmB;IACjF,OAAO,wBAAwB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,yBAAyB,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;AACjH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAEnE,MAAM,UAAU,oBAAoB,CAAC,MAAmB,EAAE,UAAyB;IACjF,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;IACtD,IAAI,CAAC,WAAW,IAAI,UAAU,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACnD,MAAM,GAAG,GAAG,kBAAkB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACxD,OAAO,eAAe,CACpB,cAAc,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,kBAAkB,EAAE,WAAW,CAAC,EACrE,kBAAkB,EAClB,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CACtB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,IAAY,EAAE,MAAmB;IAC/E,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;IACtD,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,GAAG,CAAC;QAClE,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACtD,4EAA4E;IAC5E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,sEAAsE;IACtE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,0BAA0B,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,uBAAuB,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,wBAAwB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,uBAAuB,EAAE,IAAI,CAAC,CAAC;AACrF,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;AAE3E,+HAA+H;AAC/H,MAAM,UAAU,qBAAqB,CAAC,GAAe;IACnD,OAAO,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,eAAe,CAAC,MAAmB,EAAE,WAAkC;IAC9E,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,sGAAsG;YACtG,4DAA4D,MAAM,CAAC,OAAO,CAAC,aAAa,cAAc;YACtG,uCAAuC;SACxC,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAChG,OAAO,CAAC,gEAAgE,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAmB,EAAE,WAAkC;IAC9F,OAAO,eAAe,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,qBAAqB,EAAE,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACjI,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,IAAY,EAAE,MAAmB;IACnF,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxD,OAAO,wBAAwB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,2BAA2B,EAAE,wBAAwB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;AAClI,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,yBAAyB;IACzB,uBAAuB;IACvB,2BAA2B;IAC3B,uBAAuB;IACvB,yBAAyB;IACzB,2BAA2B;CAC5B,CAAC;AASF;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY,EAAE,MAAmB;IACxE,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAEpC,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxD,MAAM,iBAAiB,GAAG,CAAC,MAAM,wBAAwB,CAAC,QAAQ,EAAE,2BAA2B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7G,MAAM,uBAAuB,GAAG,wBAAwB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzF,MAAM,kBAAkB,GAAa,EAAE,CAAC;IACxC,IAAI,uBAAuB,KAAK,iBAAiB,EAAE,CAAC;QAClD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;gBAC9B,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAAE,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC5G,CAAC;YACD,sEAAsE;YACtE,uEAAuE;YACvE,mEAAmE;YACnE,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC;gBAAE,kBAAkB,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;IAED,IAAI,cAAc,GAAkB,IAAI,CAAC;IACzC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;IACjD,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,UAAU,GAAkB,IAAI,CAAC;QACrC,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,GAAG,CAAC;QAClE,CAAC;QACD,MAAM,aAAa,GAAG,CAAC,MAAM,wBAAwB,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrG,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChF,IAAI,mBAAmB,KAAK,aAAa;YAAE,cAAc,GAAG,WAAW,CAAC;IAC1E,CAAC;IAED,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"agents-doc.js","sourceRoot":"","sources":["../../src/core/agents-doc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type StemResolution } from '../graph/model.js';
2
+ import type { Note } from '../notes/list.js';
3
+ /** A wikilink target -> a resolved note path, or a reason it didn't resolve to exactly one note. */
4
+ export type LinkResolver = (target: string) => StemResolution;
5
+ /**
6
+ * local-browsing-surface design.md D3: backed by the exact same stem index
7
+ * `ctxr graph build` resolves wikilinks against, so a note that renders
8
+ * cleanly in the browser view is, by construction, a note the graph build
9
+ * also resolves cleanly — never a second, potentially divergent resolver.
10
+ */
11
+ export declare function buildLinkResolver(notes: readonly Note[]): LinkResolver;
12
+ //# sourceMappingURL=link-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-resolver.d.ts","sourceRoot":"","sources":["../../../src/core/browse/link-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C,oGAAoG;AACpG,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,cAAc,CAAC;AAE9D;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,YAAY,CAGtE"}
@@ -0,0 +1,12 @@
1
+ import { buildStemIndex, resolveStem } from '../graph/model.js';
2
+ /**
3
+ * local-browsing-surface design.md D3: backed by the exact same stem index
4
+ * `ctxr graph build` resolves wikilinks against, so a note that renders
5
+ * cleanly in the browser view is, by construction, a note the graph build
6
+ * also resolves cleanly — never a second, potentially divergent resolver.
7
+ */
8
+ export function buildLinkResolver(notes) {
9
+ const stemIndex = buildStemIndex(notes);
10
+ return (target) => resolveStem(stemIndex, target);
11
+ }
12
+ //# sourceMappingURL=link-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-resolver.js","sourceRoot":"","sources":["../../../src/core/browse/link-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAuB,MAAM,mBAAmB,CAAC;AAMrF;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAsB;IACtD,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,CAAC,MAAc,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type RouteTable } from './routes.js';
2
+ /**
3
+ * browse-navigation-by-folder design.md D1: produced once and substituted
4
+ * into the shell, so every HTML route carries it without four call sites
5
+ * having to remember to.
6
+ */
7
+ export declare function renderNav(table: RouteTable): string;
8
+ /** The index page's body: the same four areas, in the same order, from the same listings. */
9
+ export declare function renderIndexBody(table: RouteTable): string;
10
+ //# sourceMappingURL=nav.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../../../src/core/browse/nav.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoC,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAmGhF;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAMnD;AAED,6FAA6F;AAC7F,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CASzD"}
@@ -0,0 +1,101 @@
1
+ import { titleFor } from '../catalog/model.js';
2
+ import { escapeHtml } from './render.js';
3
+ import { publishPages, PUBLISH_INDEX_FILE } from './routes.js';
4
+ import { buildPathTree } from './tree.js';
5
+ /**
6
+ * The four content areas the browsing surface serves, in the one order both
7
+ * the navigation and the index page render them — declared once here so the
8
+ * two cannot disagree about what that order is.
9
+ */
10
+ const AREAS = ['publish', 'notes', 'catalog', 'graph'];
11
+ const AREA_TITLES = {
12
+ publish: 'Published pages',
13
+ notes: 'Notes',
14
+ catalog: 'Catalog',
15
+ graph: 'Graph',
16
+ };
17
+ /** The index page's anchor for each area, which is also what the navigation links to. */
18
+ const AREA_ANCHORS = {
19
+ publish: 'published-pages',
20
+ notes: 'notes',
21
+ catalog: 'catalog',
22
+ graph: 'graph',
23
+ };
24
+ const EMPTY_STATE = '<p class="ctxr-empty">none yet</p>';
25
+ const GRAPH_LINK = '<p><a href="/graph">graph document</a></p>';
26
+ function lastSegment(pathValue) {
27
+ const separator = pathValue.lastIndexOf('/');
28
+ return separator === -1 ? pathValue : pathValue.slice(separator + 1);
29
+ }
30
+ /**
31
+ * browse-navigation-by-folder design.md D3: collapsing is `<details>` and
32
+ * nothing else, so the tree stays navigable with scripting disabled. The
33
+ * top level renders open and everything below it renders collapsed, which
34
+ * bounds what a deep store shows on arrival by its top-level directory
35
+ * count rather than by its note count.
36
+ */
37
+ function renderTree(nodes, depth) {
38
+ if (nodes.length === 0)
39
+ return EMPTY_STATE;
40
+ const items = nodes.map((node) => {
41
+ if (node.kind === 'leaf') {
42
+ return `<li class="ctxr-tree-leaf"><a href="${escapeHtml(node.href)}">${escapeHtml(node.label)}</a></li>`;
43
+ }
44
+ const open = depth === 0 ? ' open' : '';
45
+ const children = renderTree(node.children, depth + 1);
46
+ return `<li class="ctxr-tree-dir"><details${open}><summary>${escapeHtml(node.name)}</summary>${children}</details></li>`;
47
+ });
48
+ return `<ul class="ctxr-tree">${items.join('')}</ul>`;
49
+ }
50
+ function renderFlatList(items, hrefFor) {
51
+ if (items.length === 0)
52
+ return EMPTY_STATE;
53
+ const listItems = items.map((item) => `<li class="ctxr-tree-leaf"><a href="${escapeHtml(hrefFor(item))}">${escapeHtml(item)}</a></li>`);
54
+ return `<ul class="ctxr-tree">${listItems.join('')}</ul>`;
55
+ }
56
+ /** The listing for one area, rendered once and used by both the navigation and the index page. */
57
+ function renderAreaContent(table, area) {
58
+ switch (area) {
59
+ case 'publish': {
60
+ const pages = publishPages(table);
61
+ const tree = buildPathTree(pages, (page) => lastSegment(page), (page) => `/publish/${encodeURI(page)}/${PUBLISH_INDEX_FILE}`);
62
+ return renderTree(tree, 0);
63
+ }
64
+ case 'notes': {
65
+ const paths = [...table.notes.keys()].sort();
66
+ const tree = buildPathTree(paths,
67
+ // D6: the same answer the catalog gives to "what is this note called".
68
+ (notePath) => titleFor(table.notes.get(notePath)), (notePath) => `/notes/${encodeURI(notePath)}`);
69
+ return renderTree(tree, 0);
70
+ }
71
+ case 'catalog':
72
+ return renderFlatList([...table.catalog.keys()].sort(), (id) => `/catalog/${encodeURIComponent(id)}`);
73
+ case 'graph':
74
+ return GRAPH_LINK;
75
+ }
76
+ }
77
+ function headingHrefFor(area) {
78
+ return area === 'graph' ? '/graph' : `/#${AREA_ANCHORS[area]}`;
79
+ }
80
+ /**
81
+ * browse-navigation-by-folder design.md D1: produced once and substituted
82
+ * into the shell, so every HTML route carries it without four call sites
83
+ * having to remember to.
84
+ */
85
+ export function renderNav(table) {
86
+ const sections = AREAS.map((area) => {
87
+ const heading = `<h2 class="ctxr-nav-heading"><a href="${headingHrefFor(area)}">${escapeHtml(AREA_TITLES[area])}</a></h2>`;
88
+ return `<section class="ctxr-nav-area" id="nav-${AREA_ANCHORS[area]}">${heading}${renderAreaContent(table, area)}</section>`;
89
+ });
90
+ return `<nav class="ctxr-nav" aria-label="Store contents">${sections.join('')}</nav>`;
91
+ }
92
+ /** The index page's body: the same four areas, in the same order, from the same listings. */
93
+ export function renderIndexBody(table) {
94
+ const counts = `<p class="ctxr-summary">${publishPages(table).length} published page(s), ${table.notes.size} note(s), ${table.catalog.size} catalog section(s).</p>`;
95
+ const sections = AREAS.map((area) => {
96
+ const heading = `<h2 id="${AREA_ANCHORS[area]}">${escapeHtml(AREA_TITLES[area])}</h2>`;
97
+ return `${heading}\n${renderAreaContent(table, area)}`;
98
+ });
99
+ return ['<h1>contexture</h1>', counts, ...sections].join('\n');
100
+ }
101
+ //# sourceMappingURL=nav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav.js","sourceRoot":"","sources":["../../../src/core/browse/nav.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { LinkResolver } from './link-resolver.js';
2
+ export declare function escapeHtml(text: string): string;
3
+ /** Renders a note's markdown body to HTML, with wikilinks resolved via `resolveLink` (design.md D3). */
4
+ export declare function renderNoteBody(body: string, resolveLink: LinkResolver): string;
5
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/core/browse/render.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA+CvD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM/C;AAuBD,wGAAwG;AACxG,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,GAAG,MAAM,CAE9E"}
@@ -0,0 +1,66 @@
1
+ import MarkdownIt from 'markdown-it';
2
+ const OPEN = 0x5b; // '['
3
+ /**
4
+ * local-browsing-surface design.md D3: a resolvable `[[Target]]` becomes a
5
+ * real link to that note's route; an unresolved or ambiguous one becomes
6
+ * visibly-marked, non-clickable markup naming the reason — never a link to
7
+ * an arbitrary or wrong target. Target extraction (up to the first `]`,
8
+ * `|`, or `#`) mirrors `extractLinks`' `WIKILINK_RE` in
9
+ * `src/core/graph/model.ts`, so a link this parses is a link the graph
10
+ * build parses identically.
11
+ */
12
+ function wikilinkRule(state, silent) {
13
+ const start = state.pos;
14
+ const max = state.posMax;
15
+ if (start + 3 >= max)
16
+ return false;
17
+ if (state.src.charCodeAt(start) !== OPEN || state.src.charCodeAt(start + 1) !== OPEN)
18
+ return false;
19
+ const end = state.src.indexOf(']]', start + 2);
20
+ if (end === -1 || end > max)
21
+ return false;
22
+ const rawInner = state.src.slice(start + 2, end);
23
+ const targetMatch = /^([^\]|#]+)/.exec(rawInner);
24
+ const target = targetMatch?.[1]?.trim();
25
+ if (!target)
26
+ return false;
27
+ const pipeIdx = rawInner.indexOf('|');
28
+ const label = (pipeIdx !== -1 ? rawInner.slice(pipeIdx + 1).trim() : '') || target;
29
+ if (!silent) {
30
+ const token = state.push('wikilink', '', 0);
31
+ token.meta = { target, label };
32
+ }
33
+ state.pos = end + 2;
34
+ return true;
35
+ }
36
+ export function escapeHtml(text) {
37
+ return text
38
+ .replace(/&/g, '&amp;')
39
+ .replace(/</g, '&lt;')
40
+ .replace(/>/g, '&gt;')
41
+ .replace(/"/g, '&quot;');
42
+ }
43
+ function renderWikilink(resolveLink) {
44
+ return (tokens, idx) => {
45
+ const { target, label } = tokens[idx].meta;
46
+ const resolution = resolveLink(target);
47
+ const safeLabel = escapeHtml(label);
48
+ if ('path' in resolution) {
49
+ return `<a href="/notes/${encodeURI(resolution.path)}">${safeLabel}</a>`;
50
+ }
51
+ const reasonText = resolution.reason === 'ambiguous' ? 'ambiguous' : 'unresolved';
52
+ const title = `${reasonText} wikilink target: ${target}`;
53
+ return `<span class="ctxr-broken-link" data-reason="${resolution.reason}" title="${escapeHtml(title)}">${safeLabel}</span>`;
54
+ };
55
+ }
56
+ function buildRenderer(resolveLink) {
57
+ const md = new MarkdownIt({ html: false, linkify: true });
58
+ md.inline.ruler.before('link', 'wikilink', wikilinkRule);
59
+ md.renderer.rules.wikilink = renderWikilink(resolveLink);
60
+ return md;
61
+ }
62
+ /** Renders a note's markdown body to HTML, with wikilinks resolved via `resolveLink` (design.md D3). */
63
+ export function renderNoteBody(body, resolveLink) {
64
+ return buildRenderer(resolveLink).render(body);
65
+ }
66
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/core/browse/render.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,aAAa,CAAC;AAarC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM;AAEzB;;;;;;;;GAQG;AACH,SAAS,YAAY,CAAC,KAAkB,EAAE,MAAe;IACvD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;IACxB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IACzB,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAEnG,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC/C,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG;QAAE,OAAO,KAAK,CAAC;IAE1C,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACxC,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC;IAEnF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACjC,CAAC;IACD,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;IACpB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,cAAc,CAAC,WAAyB;IAC/C,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACrB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,GAAG,CAAE,CAAC,IAAyC,CAAC;QACjF,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,MAAM,IAAI,UAAU,EAAE,CAAC;YACzB,OAAO,mBAAmB,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,SAAS,MAAM,CAAC;QAC3E,CAAC;QACD,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;QAClF,MAAM,KAAK,GAAG,GAAG,UAAU,qBAAqB,MAAM,EAAE,CAAC;QACzD,OAAO,+CAA+C,UAAU,CAAC,MAAM,YAAY,UAAU,CAAC,KAAK,CAAC,KAAK,SAAS,SAAS,CAAC;IAC9H,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,WAAyB;IAC9C,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IACzD,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IACzD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,WAAyB;IACpE,OAAO,aAAa,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { type Note } from '../notes/list.js';
2
+ import type { Store } from '../store.js';
3
+ export interface CatalogRoute {
4
+ id: string;
5
+ absolutePath: string;
6
+ }
7
+ export interface PublishFileRoute {
8
+ /** URL-relative path under /publish/, e.g. "my-page/index.html". */
9
+ urlPath: string;
10
+ absolutePath: string;
11
+ }
12
+ export interface RouteTable {
13
+ /** Keyed by store-relative note path (the same string used as the note's URL and its graph node id). */
14
+ notes: ReadonlyMap<string, Note>;
15
+ /** Keyed by catalog section id. */
16
+ catalog: ReadonlyMap<string, CatalogRoute>;
17
+ graphDocumentPath: string;
18
+ /** Keyed by the exact URL-relative path under /publish/ — a lookup miss is the only traversal guard needed (design.md D2). */
19
+ publishFiles: ReadonlyMap<string, PublishFileRoute>;
20
+ }
21
+ /**
22
+ * local-browsing-surface design.md D2: built fresh from the store's own
23
+ * enumeration on every call, never cached — so a path outside every
24
+ * configured location is absent from the table by construction, and a
25
+ * request for it is an ordinary lookup miss rather than a check that could
26
+ * be forgotten on one route and not another.
27
+ */
28
+ export declare function buildRouteTable(store: Store): Promise<RouteTable>;
29
+ /** The file every published-page directory carries, and the route the navigation links a page to. */
30
+ export declare const PUBLISH_INDEX_FILE = "index.html";
31
+ /**
32
+ * browse-navigation-by-folder design.md D4: a published page is a directory
33
+ * holding an index page, at whatever depth it sits — not an immediate child
34
+ * of the publish path. A directory that only contains other pages is a
35
+ * grouping node with no page of its own, and a page nested several
36
+ * directories deep is addressable at its full path rather than collapsed
37
+ * onto a top-level ancestor that may hold no index page at all.
38
+ */
39
+ export declare function publishPages(table: RouteTable): string[];
40
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/core/browse/routes.ts"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,wGAAwG;IACxG,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjC,mCAAmC;IACnC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC3C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,8HAA8H;IAC9H,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CACrD;AAuBD;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAevE;AAED,qGAAqG;AACrG,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAE/C;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,CASxD"}
@@ -0,0 +1,68 @@
1
+ import { readdir } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { catalogSectionsFor, sectionFileName } from '../catalog/model.js';
4
+ import { graphDocumentPath } from '../graph/persist.js';
5
+ import { listNotes } from '../notes/list.js';
6
+ async function walkFiles(root, relative = '') {
7
+ let entries;
8
+ try {
9
+ entries = await readdir(path.join(root, relative), { withFileTypes: true });
10
+ }
11
+ catch (err) {
12
+ if (err.code === 'ENOENT')
13
+ return [];
14
+ throw err;
15
+ }
16
+ const files = [];
17
+ for (const entry of entries) {
18
+ const entryRelative = relative ? `${relative}/${entry.name}` : entry.name;
19
+ if (entry.isDirectory()) {
20
+ files.push(...(await walkFiles(root, entryRelative)));
21
+ }
22
+ else if (entry.isFile()) {
23
+ files.push({ urlPath: entryRelative, absolutePath: path.join(root, entryRelative) });
24
+ }
25
+ }
26
+ return files;
27
+ }
28
+ /**
29
+ * local-browsing-surface design.md D2: built fresh from the store's own
30
+ * enumeration on every call, never cached — so a path outside every
31
+ * configured location is absent from the table by construction, and a
32
+ * request for it is an ordinary lookup miss rather than a check that could
33
+ * be forgotten on one route and not another.
34
+ */
35
+ export async function buildRouteTable(store) {
36
+ const noteList = await listNotes(store.root, store.config);
37
+ const notes = new Map(noteList.map((note) => [note.path, note]));
38
+ const catalog = new Map(catalogSectionsFor(store.config).map((section) => [
39
+ section.id,
40
+ { id: section.id, absolutePath: path.join(store.root, store.config.catalog.path, sectionFileName(section)) },
41
+ ]));
42
+ const publishRoot = path.join(store.root, store.config.publish.path);
43
+ const publishFiles = new Map((await walkFiles(publishRoot)).map((file) => [file.urlPath, file]));
44
+ return { notes, catalog, graphDocumentPath: graphDocumentPath(store), publishFiles };
45
+ }
46
+ /** The file every published-page directory carries, and the route the navigation links a page to. */
47
+ export const PUBLISH_INDEX_FILE = 'index.html';
48
+ /**
49
+ * browse-navigation-by-folder design.md D4: a published page is a directory
50
+ * holding an index page, at whatever depth it sits — not an immediate child
51
+ * of the publish path. A directory that only contains other pages is a
52
+ * grouping node with no page of its own, and a page nested several
53
+ * directories deep is addressable at its full path rather than collapsed
54
+ * onto a top-level ancestor that may hold no index page at all.
55
+ */
56
+ export function publishPages(table) {
57
+ const pages = new Set();
58
+ for (const urlPath of table.publishFiles.keys()) {
59
+ const separator = urlPath.lastIndexOf('/');
60
+ if (separator === -1)
61
+ continue;
62
+ if (urlPath.slice(separator + 1) !== PUBLISH_INDEX_FILE)
63
+ continue;
64
+ pages.add(urlPath.slice(0, separator));
65
+ }
66
+ return [...pages].sort();
67
+ }
68
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/core/browse/routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Wraps rendered body HTML in the shared page shell, substituting all three
3
+ * slots exactly once each. browse-navigation-by-folder design.md D1: the
4
+ * navigation is a slot here rather than markup each route prepends, so no
5
+ * HTML route can render without it.
6
+ *
7
+ * Each substitution passes a replacer function rather than a string, because
8
+ * `String.replace` reads `$&`, `$\'` and friends out of a string replacement
9
+ * — and a note path or title is free to contain them.
10
+ */
11
+ export declare function renderShell(title: string, bodyHtml: string, navHtml: string): Promise<string>;
12
+ export declare function readStylesheet(): Promise<string>;
13
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/core/browse/templates.ts"],"names":[],"mappings":"AAqBA;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMnG;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAEtD"}
@@ -0,0 +1,39 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { escapeHtml } from './render.js';
5
+ /**
6
+ * local-browsing-surface design.md D7: shell.html/style.css are markup and
7
+ * CSS, not markdown fragments meant for splicing, so they don't fit
8
+ * `packagedTemplate()`'s contract (strips exactly one trailing newline from
9
+ * a `.md` file, for `substituteBlock`'s line-array callers). This mirrors
10
+ * `hooks.ts`'s own small async reader for the same reason: a different file
11
+ * type needs a different loading contract, not a stretched shared one.
12
+ */
13
+ function templatesDir() {
14
+ return fileURLToPath(new URL('../../../templates/serve', import.meta.url));
15
+ }
16
+ async function readServeTemplate(fileName) {
17
+ return readFile(path.join(templatesDir(), fileName), 'utf8');
18
+ }
19
+ /**
20
+ * Wraps rendered body HTML in the shared page shell, substituting all three
21
+ * slots exactly once each. browse-navigation-by-folder design.md D1: the
22
+ * navigation is a slot here rather than markup each route prepends, so no
23
+ * HTML route can render without it.
24
+ *
25
+ * Each substitution passes a replacer function rather than a string, because
26
+ * `String.replace` reads `$&`, `$\'` and friends out of a string replacement
27
+ * — and a note path or title is free to contain them.
28
+ */
29
+ export async function renderShell(title, bodyHtml, navHtml) {
30
+ const shell = await readServeTemplate('shell.html');
31
+ return shell
32
+ .replace('{{TITLE}}', () => escapeHtml(title))
33
+ .replace('{{NAV}}', () => navHtml)
34
+ .replace('{{BODY}}', () => bodyHtml);
35
+ }
36
+ export async function readStylesheet() {
37
+ return readServeTemplate('style.css');
38
+ }
39
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/core/browse/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;GAOG;AACH,SAAS,YAAY;IACnB,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,0BAA0B,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IAC/C,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAa,EAAE,QAAgB,EAAE,OAAe;IAChF,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACpD,OAAO,KAAK;SACT,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SAC7C,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC;SACjC,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,OAAO,iBAAiB,CAAC,WAAW,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * browse-navigation-by-folder design.md D2: notes and published pages are
3
+ * both addressed by `/`-separated relative strings, so one primitive builds
4
+ * both trees. Folder collapsing has exactly one set of edge cases — a leaf
5
+ * at the root, a directory sharing a name with a sibling leaf, a directory
6
+ * whose only child is another directory — and handling them once means the
7
+ * two areas cannot disagree about the shape of the store.
8
+ */
9
+ export interface TreeLeaf {
10
+ kind: 'leaf';
11
+ /** The entry's own last path segment, which is what orders it among its siblings. */
12
+ name: string;
13
+ /** The full `/`-separated path this leaf was built from, unchanged. */
14
+ path: string;
15
+ label: string;
16
+ href: string;
17
+ }
18
+ export interface TreeDirectory {
19
+ kind: 'directory';
20
+ name: string;
21
+ /** The full `/`-separated path of this directory, for a stable node key. */
22
+ path: string;
23
+ children: TreeNode[];
24
+ }
25
+ export type TreeNode = TreeDirectory | TreeLeaf;
26
+ /**
27
+ * Groups `paths` by their directory segments, to the full depth they carry.
28
+ * A path with no directory segment becomes a leaf at the top level. The
29
+ * result is deterministic for a given set of paths, whatever order they
30
+ * arrive in.
31
+ */
32
+ export declare function buildPathTree(paths: readonly string[], labelFor: (path: string) => string, hrefFor: (path: string) => string): TreeNode[];
33
+ //# sourceMappingURL=tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../src/core/browse/tree.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,QAAQ,CAAC;AA2BhD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAClC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAChC,QAAQ,EAAE,CAqBZ"}