@cogenta/cli 0.4.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 (174) hide show
  1. package/CHANGELOG.md +3951 -0
  2. package/dist/admin-assets/assets/index-Bc_X94A_.js +1090 -0
  3. package/dist/admin-assets/assets/index-CxZHGwVA.css +1 -0
  4. package/dist/admin-assets/assets/vips-_dmTUXFO.wasm +0 -0
  5. package/dist/admin-assets/assets/vips-es6-DrQTTS8Q.js +7 -0
  6. package/dist/admin-assets/branding/logo-cogenta-dark.png +0 -0
  7. package/dist/admin-assets/branding/logo-cogenta-icon.png +0 -0
  8. package/dist/admin-assets/branding/logo-cogenta-light.png +0 -0
  9. package/dist/admin-assets/branding/logo-cogenta-small.png +0 -0
  10. package/dist/admin-assets/branding/logo-cogenta-transparent.png +0 -0
  11. package/dist/admin-assets/branding/logo-cogenta.png +0 -0
  12. package/dist/admin-assets/favicon.png +0 -0
  13. package/dist/admin-assets/fonts/jetbrains-mono-var.woff2 +0 -0
  14. package/dist/admin-assets/fonts/space-grotesk-var.woff2 +0 -0
  15. package/dist/admin-assets/index.html +3 -2
  16. package/dist/bin.js +6 -0
  17. package/dist/bin.js.map +1 -1
  18. package/dist/commands/admin-assets.d.ts +1 -0
  19. package/dist/commands/admin-assets.d.ts.map +1 -1
  20. package/dist/commands/admin-assets.js +19 -1
  21. package/dist/commands/admin-assets.js.map +1 -1
  22. package/dist/commands/agent-runtime.d.ts +160 -0
  23. package/dist/commands/agent-runtime.d.ts.map +1 -0
  24. package/dist/commands/agent-runtime.js +524 -0
  25. package/dist/commands/agent-runtime.js.map +1 -0
  26. package/dist/commands/assistant.d.ts +89 -3
  27. package/dist/commands/assistant.d.ts.map +1 -1
  28. package/dist/commands/assistant.js +209 -41
  29. package/dist/commands/assistant.js.map +1 -1
  30. package/dist/commands/audit-integrity-alert.d.ts +23 -0
  31. package/dist/commands/audit-integrity-alert.d.ts.map +1 -0
  32. package/dist/commands/audit-integrity-alert.js +33 -0
  33. package/dist/commands/audit-integrity-alert.js.map +1 -0
  34. package/dist/commands/backup.d.ts +78 -0
  35. package/dist/commands/backup.d.ts.map +1 -0
  36. package/dist/commands/backup.js +238 -0
  37. package/dist/commands/backup.js.map +1 -0
  38. package/dist/commands/channels.d.ts +47 -0
  39. package/dist/commands/channels.d.ts.map +1 -0
  40. package/dist/commands/channels.js +284 -0
  41. package/dist/commands/channels.js.map +1 -0
  42. package/dist/commands/default-logo.d.ts +27 -0
  43. package/dist/commands/default-logo.d.ts.map +1 -0
  44. package/dist/commands/default-logo.js +30 -0
  45. package/dist/commands/default-logo.js.map +1 -0
  46. package/dist/commands/doctor.d.ts +5 -1
  47. package/dist/commands/doctor.d.ts.map +1 -1
  48. package/dist/commands/doctor.js +74 -2
  49. package/dist/commands/doctor.js.map +1 -1
  50. package/dist/commands/export.d.ts +22 -0
  51. package/dist/commands/export.d.ts.map +1 -0
  52. package/dist/commands/export.js +182 -0
  53. package/dist/commands/export.js.map +1 -0
  54. package/dist/commands/forms-page.d.ts +75 -0
  55. package/dist/commands/forms-page.d.ts.map +1 -0
  56. package/dist/commands/forms-page.js +191 -0
  57. package/dist/commands/forms-page.js.map +1 -0
  58. package/dist/commands/import.d.ts.map +1 -1
  59. package/dist/commands/import.js +13 -1
  60. package/dist/commands/import.js.map +1 -1
  61. package/dist/commands/mcp.d.ts +35 -0
  62. package/dist/commands/mcp.d.ts.map +1 -0
  63. package/dist/commands/mcp.js +277 -0
  64. package/dist/commands/mcp.js.map +1 -0
  65. package/dist/commands/roles.d.ts +22 -0
  66. package/dist/commands/roles.d.ts.map +1 -0
  67. package/dist/commands/roles.js +79 -0
  68. package/dist/commands/roles.js.map +1 -0
  69. package/dist/commands/search-page.d.ts +15 -0
  70. package/dist/commands/search-page.d.ts.map +1 -1
  71. package/dist/commands/search-page.js +22 -16
  72. package/dist/commands/search-page.js.map +1 -1
  73. package/dist/commands/seo.d.ts +92 -4
  74. package/dist/commands/seo.d.ts.map +1 -1
  75. package/dist/commands/seo.js +168 -4
  76. package/dist/commands/seo.js.map +1 -1
  77. package/dist/commands/serve.d.ts +439 -7
  78. package/dist/commands/serve.d.ts.map +1 -1
  79. package/dist/commands/serve.js +3515 -181
  80. package/dist/commands/serve.js.map +1 -1
  81. package/dist/commands/site-plan.d.ts +27 -1
  82. package/dist/commands/site-plan.d.ts.map +1 -1
  83. package/dist/commands/site-plan.js +79 -8
  84. package/dist/commands/site-plan.js.map +1 -1
  85. package/dist/commands/skin.d.ts.map +1 -1
  86. package/dist/commands/skin.js +7 -2
  87. package/dist/commands/skin.js.map +1 -1
  88. package/dist/commands/term-archive-page.d.ts +94 -0
  89. package/dist/commands/term-archive-page.d.ts.map +1 -0
  90. package/dist/commands/term-archive-page.js +195 -0
  91. package/dist/commands/term-archive-page.js.map +1 -0
  92. package/dist/commands/theme-css.d.ts +22 -7
  93. package/dist/commands/theme-css.d.ts.map +1 -1
  94. package/dist/commands/theme-css.js +33 -8
  95. package/dist/commands/theme-css.js.map +1 -1
  96. package/dist/commands/theme-registry.d.ts +94 -0
  97. package/dist/commands/theme-registry.d.ts.map +1 -0
  98. package/dist/commands/theme-registry.js +130 -0
  99. package/dist/commands/theme-registry.js.map +1 -0
  100. package/dist/commands/theme-render.d.ts +330 -9
  101. package/dist/commands/theme-render.d.ts.map +1 -1
  102. package/dist/commands/theme-render.js +932 -66
  103. package/dist/commands/theme-render.js.map +1 -1
  104. package/dist/commands/theme-wiring.d.ts +107 -0
  105. package/dist/commands/theme-wiring.d.ts.map +1 -0
  106. package/dist/commands/theme-wiring.js +308 -0
  107. package/dist/commands/theme-wiring.js.map +1 -0
  108. package/dist/commands/tools.d.ts +71 -0
  109. package/dist/commands/tools.d.ts.map +1 -0
  110. package/dist/commands/tools.js +330 -0
  111. package/dist/commands/tools.js.map +1 -0
  112. package/dist/commands/update.d.ts +25 -0
  113. package/dist/commands/update.d.ts.map +1 -0
  114. package/dist/commands/update.js +193 -0
  115. package/dist/commands/update.js.map +1 -0
  116. package/dist/index.d.ts +15 -0
  117. package/dist/index.d.ts.map +1 -1
  118. package/dist/index.js +146 -4
  119. package/dist/index.js.map +1 -1
  120. package/dist/invite-mail.d.ts +39 -0
  121. package/dist/invite-mail.d.ts.map +1 -0
  122. package/dist/invite-mail.js +39 -0
  123. package/dist/invite-mail.js.map +1 -0
  124. package/dist/update/apply.d.ts +54 -0
  125. package/dist/update/apply.d.ts.map +1 -0
  126. package/dist/update/apply.js +77 -0
  127. package/dist/update/apply.js.map +1 -0
  128. package/dist/update/changelog-risk.d.ts +20 -0
  129. package/dist/update/changelog-risk.d.ts.map +1 -0
  130. package/dist/update/changelog-risk.js +55 -0
  131. package/dist/update/changelog-risk.js.map +1 -0
  132. package/dist/update/check.d.ts +60 -0
  133. package/dist/update/check.d.ts.map +1 -0
  134. package/dist/update/check.js +56 -0
  135. package/dist/update/check.js.map +1 -0
  136. package/dist/update/contract-risk.d.ts +55 -0
  137. package/dist/update/contract-risk.d.ts.map +1 -0
  138. package/dist/update/contract-risk.js +75 -0
  139. package/dist/update/contract-risk.js.map +1 -0
  140. package/dist/update/history.d.ts +30 -0
  141. package/dist/update/history.d.ts.map +1 -0
  142. package/dist/update/history.js +38 -0
  143. package/dist/update/history.js.map +1 -0
  144. package/dist/update/index.d.ts +28 -0
  145. package/dist/update/index.d.ts.map +1 -0
  146. package/dist/update/index.js +11 -0
  147. package/dist/update/index.js.map +1 -0
  148. package/dist/update/list-restore-points.d.ts +20 -0
  149. package/dist/update/list-restore-points.d.ts.map +1 -0
  150. package/dist/update/list-restore-points.js +35 -0
  151. package/dist/update/list-restore-points.js.map +1 -0
  152. package/dist/update/npm-registry.d.ts +11 -0
  153. package/dist/update/npm-registry.d.ts.map +1 -0
  154. package/dist/update/npm-registry.js +74 -0
  155. package/dist/update/npm-registry.js.map +1 -0
  156. package/dist/update/restore-point.d.ts +26 -0
  157. package/dist/update/restore-point.d.ts.map +1 -0
  158. package/dist/update/restore-point.js +23 -0
  159. package/dist/update/restore-point.js.map +1 -0
  160. package/dist/update/tar.d.ts +27 -0
  161. package/dist/update/tar.d.ts.map +1 -0
  162. package/dist/update/tar.js +56 -0
  163. package/dist/update/tar.js.map +1 -0
  164. package/dist/update/version-compare.d.ts +17 -0
  165. package/dist/update/version-compare.d.ts.map +1 -0
  166. package/dist/update/version-compare.js +42 -0
  167. package/dist/update/version-compare.js.map +1 -0
  168. package/dist/version.d.ts +13 -0
  169. package/dist/version.d.ts.map +1 -0
  170. package/dist/version.js +18 -0
  171. package/dist/version.js.map +1 -0
  172. package/package.json +33 -16
  173. package/dist/admin-assets/assets/index-C9a7O_Xs.css +0 -1
  174. package/dist/admin-assets/assets/index-DXvMgWvn.js +0 -74
@@ -1,9 +1,10 @@
1
1
  import { writeFile } from 'node:fs/promises';
2
2
  import { join } from 'node:path';
3
- import { createAnthropicClient, createFileSitePlanStore, createGoogleClient, createOpenAiClient, extractDocumentText, proposeSitePlan, resolveApprovedPlan, summarisePlan, } from '@cogenta/agents';
3
+ import { createAnthropicClient, createFileSitePlanStore, createGoogleClient, createOpenAiClient, describeExistingSite, extractDocumentText, proposeSitePlan, resolveApprovedPlan, resolveProviderTuningDefaults, summarisePlan, } from '@cogenta/agents';
4
4
  import { CogentaError } from '@cogenta/core';
5
- import { createContentStore, createSchemaTables } from '@cogenta/schema';
5
+ import { createContentStore, createSchemaTables, createSiteSettingsStore, createTaxonomyStore, createThemeStore, ensureSiteSettingsTables, ensureThemeTable, } from '@cogenta/schema';
6
6
  import { findSchemaFile } from './serve.js';
7
+ import { DEFAULT_THEME_NAME } from './theme-registry.js';
7
8
  /**
8
9
  * L19 task 7 — the same document-driven planning the installer offers, on a
9
10
  * site that is already running.
@@ -24,11 +25,12 @@ import { findSchemaFile } from './serve.js';
24
25
  * pretending the change is live.
25
26
  */
26
27
  const PLAN_DIRECTORY = join('.cogenta', 'site-plans');
27
- function providerClient(llm, apiKey) {
28
+ function providerClient(llm, apiKey, defaults) {
28
29
  const config = {
29
30
  apiKey,
30
31
  model: llm.model,
31
32
  ...(llm.baseUrl === undefined ? {} : { baseUrl: llm.baseUrl }),
33
+ defaults,
32
34
  };
33
35
  if (llm.provider === 'anthropic')
34
36
  return createAnthropicClient(config);
@@ -38,18 +40,76 @@ function providerClient(llm, apiKey) {
38
40
  return createGoogleClient(config);
39
41
  return undefined;
40
42
  }
41
- function createPlanner(client, model, siteName) {
43
+ /**
44
+ * Fiche 60 task 2 — detected by config presence alone, never guessed: a
45
+ * section absent from `CogentaConfig` (R2's own vocabulary — "sans
46
+ * fournisseur configuré") is simply not listed here, rather than inferred
47
+ * from some other signal.
48
+ */
49
+ export function detectActiveIntegrations(config) {
50
+ const active = [];
51
+ if (config.llm !== undefined)
52
+ active.push('llm');
53
+ if (config.imageGeneration !== undefined)
54
+ active.push('image generation');
55
+ if (config.billing !== undefined)
56
+ active.push('billing');
57
+ if (config.webhooks.endpoints.length > 0)
58
+ active.push('webhooks');
59
+ if (config.payment.stripeSecretKey !== undefined)
60
+ active.push('stripe payments');
61
+ return active;
62
+ }
63
+ /**
64
+ * Fiche 60 task 6 — read fresh on every call, never cached across the
65
+ * process's lifetime (same discipline `theme-wiring.ts`'s own
66
+ * `computeEffectiveStyles` documents for the theme overlay): a proposal made
67
+ * an hour into a running `cogenta serve` has to see the entries and terms
68
+ * written since boot, not the count at start-up.
69
+ */
70
+ export async function buildExistingSiteSnapshot(context) {
71
+ const entryCounts = {};
72
+ for (const collection of context.collections) {
73
+ const store = createContentStore({
74
+ db: context.db,
75
+ collection,
76
+ defaultLocale: context.defaultLocale,
77
+ });
78
+ const counts = await store.count();
79
+ entryCounts[collection.name] = { total: counts.total, published: counts.published };
80
+ }
81
+ const termCounts = {};
82
+ for (const taxonomy of context.taxonomies) {
83
+ const store = createTaxonomyStore({ db: context.db, taxonomy });
84
+ termCounts[taxonomy.name] = (await store.list()).length;
85
+ }
86
+ // Idempotent (`create table if not exists`) — safe even when
87
+ // `createThemeWiring` already ran this earlier in the same boot.
88
+ await ensureThemeTable(context.db);
89
+ const theme = await createThemeStore({ db: context.db }).get();
90
+ return describeExistingSite({
91
+ collections: context.collections,
92
+ taxonomies: context.taxonomies,
93
+ entryCounts,
94
+ termCounts,
95
+ activeTheme: theme.activeTheme ?? DEFAULT_THEME_NAME,
96
+ integrations: detectActiveIntegrations(context.config),
97
+ });
98
+ }
99
+ function createPlanner(client, model, siteName, siteContext) {
42
100
  return {
43
101
  async propose(input) {
44
102
  const documents = input.documents.map((document) => extractDocumentText({
45
103
  filename: document.filename,
46
104
  bytes: Buffer.from(document.contentBase64, 'base64'),
47
105
  }));
106
+ const existingSite = await buildExistingSiteSnapshot(siteContext);
48
107
  const result = await proposeSitePlan({
49
108
  client,
50
109
  model,
51
110
  documents,
52
111
  siteName: input.siteName ?? siteName,
112
+ existingSite,
53
113
  });
54
114
  return result.ok
55
115
  ? { ok: true, draft: result.draft }
@@ -195,9 +255,12 @@ export async function createSitePlanning(options) {
195
255
  const store = createFileSitePlanStore(join(options.projectRoot, PLAN_DIRECTORY));
196
256
  const llm = options.config.llm;
197
257
  const apiKey = llm?.apiKey;
198
- const client = llm === undefined || apiKey === undefined || apiKey === ''
199
- ? undefined
200
- : providerClient(llm, apiKey);
258
+ let client;
259
+ if (llm !== undefined && apiKey !== undefined && apiKey !== '') {
260
+ await ensureSiteSettingsTables(options.db);
261
+ const defaults = await resolveProviderTuningDefaults(createSiteSettingsStore({ db: options.db }));
262
+ client = providerClient(llm, apiKey, defaults);
263
+ }
201
264
  if (client !== undefined && llm !== undefined && llm.model === '') {
202
265
  throw new CogentaError({
203
266
  code: 'CONFIG_INVALID',
@@ -215,7 +278,15 @@ export async function createSitePlanning(options) {
215
278
  store,
216
279
  ...(client === undefined || llm === undefined
217
280
  ? {}
218
- : { planner: createPlanner(client, llm.model, options.config.site.name) }),
281
+ : {
282
+ planner: createPlanner(client, llm.model, options.config.site.name, {
283
+ db: options.db,
284
+ collections: options.collections,
285
+ taxonomies: options.taxonomies ?? [],
286
+ defaultLocale: options.config.site.defaultLocale,
287
+ config: options.config,
288
+ }),
289
+ }),
219
290
  ...(schemaPath === undefined
220
291
  ? {}
221
292
  : {
@@ -1 +1 @@
1
- {"version":3,"file":"site-plan.js","sourceRoot":"","sources":["../../src/commands/site-plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"site-plan.js","sourceRoot":"","sources":["../../src/commands/site-plan.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"skin.d.ts","sourceRoot":"","sources":["../../src/commands/skin.ts"],"names":[],"mappings":"AAUA,OAAO,EAAgC,KAAK,MAAM,EAAc,MAAM,eAAe,CAAA;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAElD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,CAAA;AAEvE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,oFAAoF;IACpF,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,0EAA0E;IAC1E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CAClC;AA0MD;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAcnE"}
1
+ {"version":3,"file":"skin.d.ts","sourceRoot":"","sources":["../../src/commands/skin.ts"],"names":[],"mappings":"AAWA,OAAO,EAAgC,KAAK,MAAM,EAAc,MAAM,eAAe,CAAA;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAElD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,CAAA;AAEvE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,oFAAoF;IACpF,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,0EAA0E;IAC1E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CAClC;AA+MD;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAcnE"}
@@ -1,7 +1,7 @@
1
1
  import { readFile, writeFile } from 'node:fs/promises';
2
2
  import { dirname, join, resolve as resolvePath } from 'node:path';
3
3
  import process from 'node:process';
4
- import { createAnthropicClient, createGoogleClient, createOpenAiClient, generateSkin, } from '@cogenta/agents';
4
+ import { createAnthropicClient, createGoogleClient, createOpenAiClient, generateSkin, staticProviderTuningDefaults, } from '@cogenta/agents';
5
5
  import { CogentaError, isCogentaError, loadConfig } from '@cogenta/core';
6
6
  import { TOKEN_GROUPS, validateSkin } from '@cogenta/render';
7
7
  const TOKENS_FILE = 'theme.tokens.json';
@@ -121,7 +121,12 @@ async function runApply(options) {
121
121
  }
122
122
  /** The same adapter construction `create-cogenta`'s `llm-setup.ts` uses for its own provider client — kept as a small, local switch rather than a shared dependency, since the CLI's only need is "one client for the configured provider," with its own test seam. */
123
123
  function clientFor(provider, apiKey, model, fetchImpl) {
124
- const config = { apiKey, model, ...(fetchImpl === undefined ? {} : { fetchImpl }) };
124
+ const config = {
125
+ apiKey,
126
+ model,
127
+ ...(fetchImpl === undefined ? {} : { fetchImpl }),
128
+ defaults: staticProviderTuningDefaults(),
129
+ };
125
130
  if (provider === 'anthropic')
126
131
  return createAnthropicClient(config);
127
132
  if (provider === 'openai')
@@ -1 +1 @@
1
- {"version":3,"file":"skin.js","sourceRoot":"","sources":["../../src/commands/skin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skin.js","sourceRoot":"","sources":["../../src/commands/skin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import type { AccessContext, ContentGateway } from '@cogenta/api';
2
+ import type { MediaAsset } from '@cogenta/render';
3
+ import { type CollectionDefinition } from '@cogenta/schema';
4
+ import { type TermArchiveLabels } from '@cogenta/theme-kit';
5
+ import type { SeoRenderDefaults } from './seo.js';
6
+ import type { BrandingSettings } from './theme-render.js';
7
+ import { type PageChromeMenus, type SiteIdentityMedia } from './theme-render.js';
8
+ /**
9
+ * `GET /{taxonomy}/{term-slug}` — the public archive page of one taxonomy
10
+ * term (audit 2026-09-01, 04-taxonomies-menus.md T01).
11
+ *
12
+ * ADR-0022 shipped native taxonomies, the admin has let an editor point a
13
+ * menu item at a term ever since, and `resolveMenuTerm` answered `route:
14
+ * null` for every one of them — with a comment saying, honestly, that no
15
+ * site rendered such a page yet. Until this file, a term was a filing
16
+ * cabinet with no door.
17
+ *
18
+ * **The URL pattern is resolved here, in the host, and nowhere else.** A
19
+ * taxonomy has no `routing` in ADR-0022, and giving it one would be a
20
+ * contract A change for a feature that does not need it — exactly the same
21
+ * reasoning that keeps `/search` a route rather than a collection. So the
22
+ * pattern is fixed (`/{taxonomy name}/{term slug}`) and it is tried only
23
+ * *after* every real collection route has failed to match, which is what
24
+ * makes a collision with a `/blog/:slug` route impossible by construction
25
+ * rather than by a rule someone has to remember.
26
+ */
27
+ /** One page of an archive. Small on purpose: an archive is a browsing surface, not a data dump. */
28
+ export declare const ARCHIVE_PAGE_SIZE = 12;
29
+ /** What the host resolved out of the taxonomy store before any rendering happened. */
30
+ export interface TermArchiveResolution {
31
+ readonly taxonomyName: string;
32
+ readonly term: {
33
+ readonly slug: string;
34
+ readonly label: string;
35
+ };
36
+ /** Root-most first, down to the direct parent. */
37
+ readonly ancestors: readonly {
38
+ readonly slug: string;
39
+ readonly label: string;
40
+ }[];
41
+ readonly children: readonly {
42
+ readonly slug: string;
43
+ readonly label: string;
44
+ }[];
45
+ /**
46
+ * Every published entry filed under this term, newest first, as
47
+ * `(collection, id)` pairs. Ids rather than entries: each one is still read
48
+ * back through the permission-checked gateway below, so an entry this
49
+ * visitor may not see never reaches the page even though the SQL that
50
+ * found it knows nothing about roles (R4 — the check is the runtime's, not
51
+ * the query's).
52
+ */
53
+ readonly entries: readonly {
54
+ readonly collection: string;
55
+ readonly id: string;
56
+ }[];
57
+ }
58
+ export interface TermArchivePageOptions {
59
+ readonly collections: readonly CollectionDefinition[];
60
+ readonly gateway: ContentGateway;
61
+ readonly site: {
62
+ readonly name: string;
63
+ readonly url: string;
64
+ readonly locales: readonly string[];
65
+ readonly defaultLocale: string;
66
+ };
67
+ readonly styles: string | null;
68
+ readonly menus?: PageChromeMenus;
69
+ readonly branding?: () => Promise<BrandingSettings>;
70
+ readonly activeTheme?: () => Promise<string | null>;
71
+ readonly seo?: () => Promise<SeoRenderDefaults>;
72
+ readonly identity?: () => Promise<SiteIdentityMedia>;
73
+ readonly loadMedia?: (ids: readonly string[]) => Promise<ReadonlyMap<string, MediaAsset>>;
74
+ }
75
+ /**
76
+ * The archive's own chrome strings, in the page's language.
77
+ *
78
+ * Resolved here rather than in each theme for the same reason the admin
79
+ * bar's are (`theme-render.ts`): this is server-rendered HTML with no React
80
+ * runtime near it, and five theme packages each carrying their own
81
+ * English-only "Previous"/"Next" is precisely the drift `@cogenta/theme-kit`
82
+ * exists to prevent. `fr-CA` resolves like `fr`; an unknown language gets
83
+ * English rather than a key or a blank.
84
+ */
85
+ export declare function archiveLabels(locale: string): TermArchiveLabels;
86
+ /**
87
+ * Renders the archive page, or `null` when the requested page number is past
88
+ * the end — which the caller turns into the same 404 any other unresolvable
89
+ * path gets. An *empty* term is not that: it answers 200 with an empty list,
90
+ * because "this category exists and nothing is filed under it" is a true
91
+ * answer, and 404 would be a lie.
92
+ */
93
+ export declare function renderTermArchivePage(resolution: TermArchiveResolution, page: number, options: TermArchivePageOptions, context: AccessContext): Promise<string | null>;
94
+ //# sourceMappingURL=term-archive-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"term-archive-page.d.ts","sourceRoot":"","sources":["../../src/commands/term-archive-page.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,195 @@
1
+ import { buildPath } from '@cogenta/schema';
2
+ import { escapeHtmlAttribute, escapeHtmlText } from '@cogenta/seo';
3
+ import { h, serialize, } from '@cogenta/theme-kit';
4
+ import { resolveTheme } from './theme-registry.js';
5
+ import { entryTitle, renderPageChrome, } from './theme-render.js';
6
+ /**
7
+ * `GET /{taxonomy}/{term-slug}` — the public archive page of one taxonomy
8
+ * term (audit 2026-09-01, 04-taxonomies-menus.md T01).
9
+ *
10
+ * ADR-0022 shipped native taxonomies, the admin has let an editor point a
11
+ * menu item at a term ever since, and `resolveMenuTerm` answered `route:
12
+ * null` for every one of them — with a comment saying, honestly, that no
13
+ * site rendered such a page yet. Until this file, a term was a filing
14
+ * cabinet with no door.
15
+ *
16
+ * **The URL pattern is resolved here, in the host, and nowhere else.** A
17
+ * taxonomy has no `routing` in ADR-0022, and giving it one would be a
18
+ * contract A change for a feature that does not need it — exactly the same
19
+ * reasoning that keeps `/search` a route rather than a collection. So the
20
+ * pattern is fixed (`/{taxonomy name}/{term slug}`) and it is tried only
21
+ * *after* every real collection route has failed to match, which is what
22
+ * makes a collision with a `/blog/:slug` route impossible by construction
23
+ * rather than by a rule someone has to remember.
24
+ */
25
+ /** One page of an archive. Small on purpose: an archive is a browsing surface, not a data dump. */
26
+ export const ARCHIVE_PAGE_SIZE = 12;
27
+ const LABELS = {
28
+ en: {
29
+ empty: 'Nothing is filed here yet.',
30
+ previous: 'Previous',
31
+ next: 'Next',
32
+ breadcrumb: 'Breadcrumb',
33
+ pagination: 'Pagination',
34
+ subterms: 'Sub-categories',
35
+ },
36
+ fr: {
37
+ empty: 'Rien n’est encore classé ici.',
38
+ previous: 'Précédent',
39
+ next: 'Suivant',
40
+ breadcrumb: 'Fil d’Ariane',
41
+ pagination: 'Pagination',
42
+ subterms: 'Sous-catégories',
43
+ },
44
+ };
45
+ /**
46
+ * The archive's own chrome strings, in the page's language.
47
+ *
48
+ * Resolved here rather than in each theme for the same reason the admin
49
+ * bar's are (`theme-render.ts`): this is server-rendered HTML with no React
50
+ * runtime near it, and five theme packages each carrying their own
51
+ * English-only "Previous"/"Next" is precisely the drift `@cogenta/theme-kit`
52
+ * exists to prevent. `fr-CA` resolves like `fr`; an unknown language gets
53
+ * English rather than a key or a blank.
54
+ */
55
+ export function archiveLabels(locale) {
56
+ const base = locale.split('-')[0]?.toLowerCase() ?? 'en';
57
+ return LABELS[base] ?? LABELS.en;
58
+ }
59
+ /** The fields a summary may come from — the same list `@cogenta/seo`'s feed builder uses, so an archive and a feed describe an entry the same way. */
60
+ const SUMMARY_FIELDS = ['excerpt', 'description', 'summary', 'subtitle', 'teaser'];
61
+ function summaryOf(collection, entry) {
62
+ for (const candidate of SUMMARY_FIELDS) {
63
+ if (collection.fields[candidate] === undefined)
64
+ continue;
65
+ const value = entry.values[candidate];
66
+ if (typeof value === 'string' && value.trim() !== '')
67
+ return value.trim();
68
+ }
69
+ return null;
70
+ }
71
+ function hrefOf(collection, entry) {
72
+ if (collection.routing === undefined)
73
+ return null;
74
+ try {
75
+ return buildPath(collection, Object.fromEntries(Object.entries(entry.values).filter((pair) => typeof pair[1] === 'string')), entry.locale ?? undefined);
76
+ }
77
+ catch {
78
+ // A routed collection whose slug field is empty on this entry: listed
79
+ // without a link rather than with a URL that 404s. Same rule
80
+ // `search-page.ts` already applies.
81
+ return null;
82
+ }
83
+ }
84
+ /** `/{taxonomy}/{slug}`, and `?page=N` past the first. */
85
+ function archiveHref(taxonomy, slug, page) {
86
+ const path = `/${encodeURIComponent(taxonomy)}/${encodeURIComponent(slug)}`;
87
+ return page <= 1 ? path : `${path}?page=${page}`;
88
+ }
89
+ /**
90
+ * The minimal archive the host renders for a theme that does not implement
91
+ * `renderTermArchive`.
92
+ *
93
+ * It uses the same `cg-main`/`cg-page__title` classes every built-in theme
94
+ * already styles, so it is not unstyled — but it is deliberately plain: a
95
+ * theme that wants an archive of its own has one extra export to write, and
96
+ * this exists so that not writing it never breaks a site.
97
+ */
98
+ function fallbackArchive(input) {
99
+ return h('main', { class: 'cg-main cg-archive', id: 'cg-main' }, h('h1', { class: 'cg-page__title' }, input.term.label), input.entries.length === 0
100
+ ? h('p', {}, input.labels.empty)
101
+ : h('ul', {}, ...input.entries.map((entry) => h('li', {}, entry.href === null ? entry.title : h('a', { href: entry.href }, entry.title)))));
102
+ }
103
+ function headFor(input, options, page) {
104
+ const title = `${input.term.label} — ${options.site.name}`;
105
+ const canonical = new URL(archiveHref(input.taxonomyName, input.term.slug, page), options.site.url).toString();
106
+ // Page 2 and beyond are `noindex, follow`: they are the same set of entries
107
+ // sliced differently, so indexing them competes with page 1 for the same
108
+ // query while adding nothing — and `follow` still lets a crawler reach
109
+ // every entry they link to, which is the whole reason they exist.
110
+ const robots = page > 1 ? 'noindex, follow' : 'index, follow';
111
+ return [
112
+ `<title>${escapeHtmlText(title)}</title>`,
113
+ `<meta name="robots" content="${robots}">`,
114
+ `<link rel="canonical" href="${escapeHtmlAttribute(canonical)}">`,
115
+ input.page.previousHref === null
116
+ ? ''
117
+ : `<link rel="prev" href="${escapeHtmlAttribute(new URL(input.page.previousHref, options.site.url).toString())}">`,
118
+ input.page.nextHref === null
119
+ ? ''
120
+ : `<link rel="next" href="${escapeHtmlAttribute(new URL(input.page.nextHref, options.site.url).toString())}">`,
121
+ ]
122
+ .filter((part) => part !== '')
123
+ .join('\n');
124
+ }
125
+ /**
126
+ * Renders the archive page, or `null` when the requested page number is past
127
+ * the end — which the caller turns into the same 404 any other unresolvable
128
+ * path gets. An *empty* term is not that: it answers 200 with an empty list,
129
+ * because "this category exists and nothing is filed under it" is a true
130
+ * answer, and 404 would be a lie.
131
+ */
132
+ export async function renderTermArchivePage(resolution, page, options, context) {
133
+ const totalPages = Math.max(1, Math.ceil(resolution.entries.length / ARCHIVE_PAGE_SIZE));
134
+ if (page < 1 || page > totalPages)
135
+ return null;
136
+ const byName = new Map(options.collections.map((collection) => [collection.name, collection]));
137
+ const slice = resolution.entries.slice((page - 1) * ARCHIVE_PAGE_SIZE, page * ARCHIVE_PAGE_SIZE);
138
+ const entries = [];
139
+ for (const reference of slice) {
140
+ const collection = byName.get(reference.collection);
141
+ if (collection === undefined)
142
+ continue;
143
+ // R4: the permission check is here, in the runtime, on every single
144
+ // entry — never a `WHERE role = …` bolted onto the query that found it.
145
+ const entry = await options.gateway.read(reference.collection, reference.id, context);
146
+ if (entry === null)
147
+ continue;
148
+ entries.push({
149
+ title: entryTitle(entry),
150
+ href: hrefOf(collection, entry),
151
+ summary: summaryOf(collection, entry),
152
+ collection: collection.name,
153
+ publishedAt: entry.publishedAt ?? null,
154
+ });
155
+ }
156
+ const locale = options.site.defaultLocale;
157
+ const taxonomy = resolution.taxonomyName;
158
+ const input = {
159
+ taxonomyName: taxonomy,
160
+ term: resolution.term,
161
+ ancestors: resolution.ancestors.map((ancestor) => ({
162
+ label: ancestor.label,
163
+ href: archiveHref(taxonomy, ancestor.slug, 1),
164
+ })),
165
+ children: resolution.children.map((child) => ({
166
+ label: child.label,
167
+ href: archiveHref(taxonomy, child.slug, 1),
168
+ })),
169
+ entries,
170
+ page: {
171
+ current: page,
172
+ totalPages,
173
+ previousHref: page > 1 ? archiveHref(taxonomy, resolution.term.slug, page - 1) : null,
174
+ nextHref: page < totalPages ? archiveHref(taxonomy, resolution.term.slug, page + 1) : null,
175
+ },
176
+ locale,
177
+ labels: archiveLabels(locale),
178
+ };
179
+ const theme = await resolveTheme(options.activeTheme === undefined ? null : await options.activeTheme());
180
+ const body = serialize(theme.renderTermArchive === undefined ? fallbackArchive(input) : theme.renderTermArchive(input));
181
+ return renderPageChrome({
182
+ site: options.site,
183
+ locale,
184
+ styles: options.styles,
185
+ headHtml: headFor(input, options, page),
186
+ bodyHtml: body,
187
+ ...(options.menus === undefined ? {} : { menus: options.menus }),
188
+ ...(options.branding === undefined ? {} : { branding: options.branding }),
189
+ ...(options.activeTheme === undefined ? {} : { activeTheme: options.activeTheme }),
190
+ ...(options.seo === undefined ? {} : { seo: options.seo }),
191
+ ...(options.identity === undefined ? {} : { identity: options.identity }),
192
+ ...(options.loadMedia === undefined ? {} : { loadMedia: options.loadMedia }),
193
+ }, context);
194
+ }
195
+ //# sourceMappingURL=term-archive-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"term-archive-page.js","sourceRoot":"","sources":["../../src/commands/term-archive-page.ts"],"names":[],"mappings":"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"}
@@ -38,17 +38,32 @@ export interface InlineImportsOptions {
38
38
  * untouched for the browser to refuse or fetch as it sees fit.
39
39
  */
40
40
  export declare function inlineImports(entry: URL, options: InlineImportsOptions): Promise<string>;
41
- /**
42
- * The whole theme stylesheet as one minified string, or `null` when the theme
43
- * package cannot be resolved — a site then renders with the skin's custom
44
- * properties alone rather than refusing to serve, the same degradation
45
- * `loadSkinCss` already chose for a missing `theme.tokens.json`.
46
- */
47
41
  /**
48
42
  * FNV-1a, 32 bits. A cache key, never a security boundary — and deliberately
49
43
  * not `node:crypto`, to match the hash `@cogenta/render` already uses for the
50
44
  * skin sheet's ETag rather than introduce a second convention beside it.
51
45
  */
52
46
  export declare function cssEtag(css: string): string;
53
- export declare function loadThemeCss(options: InlineImportsOptions): Promise<string | null>;
47
+ /**
48
+ * The whole theme stylesheet as one minified string, or `null` when the named
49
+ * theme package cannot be resolved — a site then renders with the skin's
50
+ * custom properties alone rather than refusing to serve, the same degradation
51
+ * `loadSkinCss` already chose for a missing `theme.tokens.json`.
52
+ *
53
+ * Every theme package publishes its stylesheet at the same `./styles/theme.css`
54
+ * export subpath (contract D, mirrored by every theme package's `package.json`)
55
+ * so this stays a one-line lookup regardless of which theme is active — a
56
+ * per-theme convention, not a per-theme code branch.
57
+ */
58
+ export declare function loadThemeCss(options: InlineImportsOptions, themeName: string): Promise<string | null>;
59
+ /**
60
+ * A theme's own stylesheet is code, not data — installing a second theme
61
+ * package is a redeploy, unlike the skin tokens `resolveStyles` re-reads on
62
+ * every request. So each theme's CSS is loaded and flattened once per name
63
+ * and kept for the life of the process, memoised by this factory rather than
64
+ * reloaded on a request that merely switched *which* already-installed theme
65
+ * is active — switching is still live (fiche L23): only the file I/O is not
66
+ * repeated for a theme this process has already read.
67
+ */
68
+ export declare function createThemeCssResolver(options: InlineImportsOptions): (themeName: string) => Promise<string | null>;
54
69
  //# sourceMappingURL=theme-css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme-css.d.ts","sourceRoot":"","sources":["../../src/commands/theme-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAeH;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiC7C;AAID,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC5C,kFAAkF;IAClF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmB9F;AAED;;;;;GAKG;AACH;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO3C;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOxF"}
1
+ {"version":3,"file":"theme-css.d.ts","sourceRoot":"","sources":["../../src/commands/theme-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAeH;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiC7C;AAID,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC5C,kFAAkF;IAClF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmB9F;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO3C;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,oBAAoB,GAC5B,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAS/C"}