@prenta/core 5.3.1 → 5.4.1

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 (146) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/actions.d.ts.map +1 -1
  3. package/dist/actions.js +19 -2
  4. package/dist/actions.js.map +1 -1
  5. package/dist/ai/content-writing-generate.d.ts.map +1 -1
  6. package/dist/ai/content-writing-generate.js +3 -0
  7. package/dist/ai/content-writing-generate.js.map +1 -1
  8. package/dist/ai/feature-defaults.d.ts +1 -1
  9. package/dist/ai/feature-defaults.d.ts.map +1 -1
  10. package/dist/ai/feature-defaults.js +3 -13
  11. package/dist/ai/feature-defaults.js.map +1 -1
  12. package/dist/ai/governance.d.ts +31 -0
  13. package/dist/ai/governance.d.ts.map +1 -0
  14. package/dist/ai/governance.js +56 -0
  15. package/dist/ai/governance.js.map +1 -0
  16. package/dist/ai/index.d.ts +2 -1
  17. package/dist/ai/index.d.ts.map +1 -1
  18. package/dist/ai/index.js +2 -1
  19. package/dist/ai/index.js.map +1 -1
  20. package/dist/ai/providers/custom.d.ts +2 -1
  21. package/dist/ai/providers/custom.d.ts.map +1 -1
  22. package/dist/ai/providers/custom.js +7 -1
  23. package/dist/ai/providers/custom.js.map +1 -1
  24. package/dist/ai/providers/http.d.ts +13 -0
  25. package/dist/ai/providers/http.d.ts.map +1 -1
  26. package/dist/ai/providers/http.js +33 -0
  27. package/dist/ai/providers/http.js.map +1 -1
  28. package/dist/ai/providers/index.d.ts +5 -2
  29. package/dist/ai/providers/index.d.ts.map +1 -1
  30. package/dist/ai/providers/index.js +10 -0
  31. package/dist/ai/providers/index.js.map +1 -1
  32. package/dist/ai/providers/openai.d.ts +2 -1
  33. package/dist/ai/providers/openai.d.ts.map +1 -1
  34. package/dist/ai/providers/openai.js +4 -1
  35. package/dist/ai/providers/openai.js.map +1 -1
  36. package/dist/ai/runtime.d.ts +28 -1
  37. package/dist/ai/runtime.d.ts.map +1 -1
  38. package/dist/ai/runtime.js +73 -2
  39. package/dist/ai/runtime.js.map +1 -1
  40. package/dist/ai/usage.d.ts +6 -0
  41. package/dist/ai/usage.d.ts.map +1 -1
  42. package/dist/ai/usage.js +29 -0
  43. package/dist/ai/usage.js.map +1 -1
  44. package/dist/api/route-helpers.d.ts +2 -0
  45. package/dist/api/route-helpers.d.ts.map +1 -1
  46. package/dist/api/route-helpers.js +14 -0
  47. package/dist/api/route-helpers.js.map +1 -1
  48. package/dist/api/routes/ai-authoring.js +1 -1
  49. package/dist/api/routes/ai-authoring.js.map +1 -1
  50. package/dist/api/routes/ai-seo.d.ts.map +1 -1
  51. package/dist/api/routes/ai-seo.js +13 -5
  52. package/dist/api/routes/ai-seo.js.map +1 -1
  53. package/dist/api/routes/ai-settings.d.ts.map +1 -1
  54. package/dist/api/routes/ai-settings.js +39 -1
  55. package/dist/api/routes/ai-settings.js.map +1 -1
  56. package/dist/api/routes/redirects.d.ts.map +1 -1
  57. package/dist/api/routes/redirects.js +3 -2
  58. package/dist/api/routes/redirects.js.map +1 -1
  59. package/dist/api/routes/scheduling.d.ts.map +1 -1
  60. package/dist/api/routes/scheduling.js +17 -0
  61. package/dist/api/routes/scheduling.js.map +1 -1
  62. package/dist/api/routes/seo-public.d.ts.map +1 -1
  63. package/dist/api/routes/seo-public.js +205 -1
  64. package/dist/api/routes/seo-public.js.map +1 -1
  65. package/dist/api/routes/seo.d.ts.map +1 -1
  66. package/dist/api/routes/seo.js +216 -16
  67. package/dist/api/routes/seo.js.map +1 -1
  68. package/dist/db/model-types.d.ts +32 -0
  69. package/dist/db/model-types.d.ts.map +1 -1
  70. package/dist/generated/browser.d.ts +17 -0
  71. package/dist/generated/client.d.ts +17 -0
  72. package/dist/generated/commonInputTypes.d.ts +30 -30
  73. package/dist/generated/internal/class.d.ts +22 -0
  74. package/dist/generated/internal/class.js +4 -4
  75. package/dist/generated/internal/prismaNamespace.d.ts +198 -1
  76. package/dist/generated/internal/prismaNamespace.js +43 -0
  77. package/dist/generated/internal/prismaNamespaceBrowser.d.ts +47 -0
  78. package/dist/generated/internal/prismaNamespaceBrowser.js +43 -0
  79. package/dist/generated/models/ApiRequestMetric.d.ts +0 -7
  80. package/dist/generated/models/SearchPageInsight.d.ts +1460 -0
  81. package/dist/generated/models/SearchPageInsight.js +1 -0
  82. package/dist/generated/models/SearchPerfDaily.d.ts +1167 -0
  83. package/dist/generated/models/SearchPerfDaily.js +1 -0
  84. package/dist/generated/models.d.ts +2 -0
  85. package/dist/redirects/recovery.d.ts +12 -0
  86. package/dist/redirects/recovery.d.ts.map +1 -1
  87. package/dist/redirects/recovery.js +42 -2
  88. package/dist/redirects/recovery.js.map +1 -1
  89. package/dist/redirects/rerank.d.ts +14 -1
  90. package/dist/redirects/rerank.d.ts.map +1 -1
  91. package/dist/redirects/rerank.js +66 -37
  92. package/dist/redirects/rerank.js.map +1 -1
  93. package/dist/security/strip-dangerous-keys.d.ts +33 -0
  94. package/dist/security/strip-dangerous-keys.d.ts.map +1 -0
  95. package/dist/security/strip-dangerous-keys.js +71 -0
  96. package/dist/security/strip-dangerous-keys.js.map +1 -0
  97. package/dist/seo/audit-engine.d.ts +21 -3
  98. package/dist/seo/audit-engine.d.ts.map +1 -1
  99. package/dist/seo/audit-engine.js +51 -6
  100. package/dist/seo/audit-engine.js.map +1 -1
  101. package/dist/seo/audit-runner.d.ts.map +1 -1
  102. package/dist/seo/audit-runner.js +18 -0
  103. package/dist/seo/audit-runner.js.map +1 -1
  104. package/dist/seo/config-store.d.ts +13 -0
  105. package/dist/seo/config-store.d.ts.map +1 -1
  106. package/dist/seo/config-store.js +6 -0
  107. package/dist/seo/config-store.js.map +1 -1
  108. package/dist/seo/crux.d.ts +58 -0
  109. package/dist/seo/crux.d.ts.map +1 -0
  110. package/dist/seo/crux.js +101 -0
  111. package/dist/seo/crux.js.map +1 -0
  112. package/dist/seo/issue-content-brief.d.ts.map +1 -1
  113. package/dist/seo/issue-content-brief.js +11 -0
  114. package/dist/seo/issue-content-brief.js.map +1 -1
  115. package/dist/seo/issue-content-research.d.ts.map +1 -1
  116. package/dist/seo/issue-content-research.js +3 -0
  117. package/dist/seo/issue-content-research.js.map +1 -1
  118. package/dist/seo/issue-fix-ai.d.ts.map +1 -1
  119. package/dist/seo/issue-fix-ai.js +3 -0
  120. package/dist/seo/issue-fix-ai.js.map +1 -1
  121. package/dist/seo/issue-fix-redirect.d.ts.map +1 -1
  122. package/dist/seo/issue-fix-redirect.js +1 -0
  123. package/dist/seo/issue-fix-redirect.js.map +1 -1
  124. package/dist/seo/search-console/client.d.ts +39 -0
  125. package/dist/seo/search-console/client.d.ts.map +1 -0
  126. package/dist/seo/search-console/client.js +226 -0
  127. package/dist/seo/search-console/client.js.map +1 -0
  128. package/dist/seo/search-console/prompt-context.d.ts +21 -0
  129. package/dist/seo/search-console/prompt-context.d.ts.map +1 -0
  130. package/dist/seo/search-console/prompt-context.js +93 -0
  131. package/dist/seo/search-console/prompt-context.js.map +1 -0
  132. package/dist/seo/search-console/sync.d.ts +67 -0
  133. package/dist/seo/search-console/sync.d.ts.map +1 -0
  134. package/dist/seo/search-console/sync.js +469 -0
  135. package/dist/seo/search-console/sync.js.map +1 -0
  136. package/dist/seo/search-console/types.d.ts +75 -0
  137. package/dist/seo/search-console/types.d.ts.map +1 -0
  138. package/dist/seo/search-console/types.js +16 -0
  139. package/dist/seo/search-console/types.js.map +1 -0
  140. package/dist/seo/search-insight-signals.d.ts +29 -0
  141. package/dist/seo/search-insight-signals.d.ts.map +1 -0
  142. package/dist/seo/search-insight-signals.js +103 -0
  143. package/dist/seo/search-insight-signals.js.map +1 -0
  144. package/package.json +1 -1
  145. package/prisma/migrations/0016_search_console_tables/migration.sql +56 -0
  146. package/prisma/schema.prisma +49 -0
@@ -0,0 +1 @@
1
+ export {};
@@ -16,6 +16,8 @@ export type * from './models/SeoAuditRun.js';
16
16
  export type * from './models/SeoIssue.js';
17
17
  export type * from './models/Redirect404Hit.js';
18
18
  export type * from './models/AiCrawlerHit.js';
19
+ export type * from './models/SearchPerfDaily.js';
20
+ export type * from './models/SearchPageInsight.js';
19
21
  export type * from './models/RedirectSuggestion.js';
20
22
  export type * from './models/FormSchemaVersion.js';
21
23
  export type * from './models/FormSubmission.js';
@@ -33,6 +33,8 @@ export interface RecoveryPlanOptions {
33
33
  semanticRerank?: import('./rerank.js').SemanticRerankFn | null;
34
34
  /** Test seam for live source-URL probes. */
35
35
  fetchFn?: typeof safeFetch;
36
+ /** DB handle for the governed semantic rerank. Omitted = heuristic only. */
37
+ db?: unknown;
36
38
  }
37
39
  /** Merge 404 hit paths and audit broken-link hrefs into one deduped map. */
38
40
  export declare function collectRecoveryPaths(hits: Array<{
@@ -48,6 +50,12 @@ type RecoveryHitRow = {
48
50
  hits?: number;
49
51
  };
50
52
  type RecoverySuggestionDb = {
53
+ document?: {
54
+ findFirst?: (args: unknown) => Promise<unknown>;
55
+ };
56
+ auditLog?: {
57
+ create?: (args: unknown) => Promise<unknown>;
58
+ };
51
59
  redirect404Hit?: {
52
60
  findMany: (args: unknown) => Promise<RecoveryHitRow[]>;
53
61
  updateMany?: (args: unknown) => Promise<unknown>;
@@ -89,10 +97,14 @@ export declare function generateRecoverySuggestions(db: RecoverySuggestionDb, op
89
97
  autoApplyUserId?: string;
90
98
  semanticRerank?: import('./rerank.js').SemanticRerankFn | null;
91
99
  fetchFn?: typeof safeFetch;
100
+ /** DB handle for the governed semantic rerank; defaults to the positional `db`. */
101
+ db?: unknown;
92
102
  }): Promise<{
93
103
  created: number;
94
104
  planned: number;
95
105
  autoApplied: number;
106
+ /** Set when governance vetoed a requested auto-apply; plans became suggestions. */
107
+ governanceBlocked?: string;
96
108
  }>;
97
109
  export {};
98
110
  //# sourceMappingURL=recovery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../src/redirects/recovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../src/redirects/recovery.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ import { resolveRedirectMatch } from './rerank.js';
8
8
  import { validateRedirectDestination } from './validate-destination.js';
9
9
  import { filterConfirmedDeadRecoveryPaths, probeSitePathStatus, } from '../seo/confirm-broken-links.js';
10
10
  import { isConfirmedDeadLinkStatus } from '../seo/link-probe.js';
11
+ import { assertAutoApplyAllowed } from '../ai/governance.js';
11
12
  function normalizeBrokenHref(href, siteUrl) {
12
13
  const trimmed = href.trim();
13
14
  if (!trimmed ||
@@ -61,6 +62,7 @@ export async function planRecoveryRedirect(fromPath, signals, options) {
61
62
  minConfidence: options.minConfidence ?? 30,
62
63
  enableAiRerank: options.enableAiRerank,
63
64
  semanticRerank: options.semanticRerank,
65
+ db: options.db,
64
66
  });
65
67
  if (!match)
66
68
  return null;
@@ -200,15 +202,48 @@ export async function generateRecoverySuggestions(db, options) {
200
202
  pathPrefixes: options.pathPrefixes,
201
203
  enableAiRerank: options.enableAiRerank,
202
204
  semanticRerank: options.semanticRerank,
205
+ db: options.db ?? db,
203
206
  siteUrl,
204
207
  fetchFn: options.fetchFn,
205
208
  });
206
209
  const autoMin = options.autoApplyMinConfidence ?? 85;
210
+ let autoApply = options.autoApply === true;
211
+ let governanceBlocked;
212
+ if (autoApply) {
213
+ const eligible = plans.filter((p) => p.confidence >= autoMin).length;
214
+ if (eligible > 0) {
215
+ const decision = await assertAutoApplyAllowed(db, 'ai.features.seo404Recovery', {
216
+ count: eligible,
217
+ });
218
+ if (!decision.ok) {
219
+ autoApply = false;
220
+ governanceBlocked = decision.reason;
221
+ try {
222
+ await db.auditLog?.create?.({
223
+ data: {
224
+ event: 'ai_auto_apply_blocked',
225
+ userId: options.autoApplyUserId ?? 'system',
226
+ timestamp: new Date(),
227
+ details: {
228
+ source: 'redirect-recovery',
229
+ feature: 'ai.features.seo404Recovery',
230
+ reason: decision.reason,
231
+ eligible,
232
+ },
233
+ },
234
+ });
235
+ }
236
+ catch {
237
+ // Audit is observational — never block the pipeline.
238
+ }
239
+ }
240
+ }
241
+ }
207
242
  let created = 0;
208
243
  let autoApplied = 0;
209
244
  const pending = [];
210
245
  for (const plan of plans) {
211
- if (options.autoApply && plan.confidence >= autoMin) {
246
+ if (autoApply && plan.confidence >= autoMin) {
212
247
  try {
213
248
  await createRecoveryRedirect(db, plan, options.autoApplyUserId, {
214
249
  siteUrl,
@@ -224,6 +259,11 @@ export async function generateRecoverySuggestions(db, options) {
224
259
  pending.push(plan);
225
260
  }
226
261
  created = await upsertRedirectSuggestions(db, pending);
227
- return { created, planned: plans.length, autoApplied };
262
+ return {
263
+ created,
264
+ planned: plans.length,
265
+ autoApplied,
266
+ ...(governanceBlocked ? { governanceBlocked } : {}),
267
+ };
228
268
  }
229
269
  //# sourceMappingURL=recovery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/redirects/recovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/redirects/recovery.ts"],"names":[],"mappings":"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"}
@@ -13,10 +13,23 @@ export interface ResolveRedirectMatchOptions {
13
13
  enableAiRerank?: boolean;
14
14
  ambiguousLow?: number;
15
15
  ambiguousHigh?: number;
16
- /** Injected semantic ranker (for tests). When omitted, loads plugin-ai dynamically. */
16
+ /** Injected semantic ranker (for tests). Overrides the governed default. */
17
17
  semanticRerank?: SemanticRerankFn | null;
18
+ /** DB handle for the governed embeddings ranker. Omitted = heuristic only. */
19
+ db?: unknown;
18
20
  }
19
21
  export type SemanticRerankFn = (fromPath: string, shortlist: SuggestCandidate[]) => Promise<RedirectSuggestionResult | null>;
22
+ /** Cosine similarity; returns 0 for mismatched dimensions or zero-norm vectors. */
23
+ export declare function cosineSimilarity(a: number[], b: number[]): number;
24
+ /**
25
+ * Semantic ranker backed by the governed AI runtime. All enforcement (feature
26
+ * toggle, monthly budget, daily cap, usage metering) happens inside
27
+ * `embedForFeature`; any governed refusal or provider failure returns null so
28
+ * the caller falls back to the heuristic match.
29
+ */
30
+ export declare function buildGovernedRerank(db: unknown, opts?: {
31
+ fetchImpl?: typeof fetch;
32
+ }): SemanticRerankFn;
20
33
  /**
21
34
  * Resolve the best redirect target — heuristic first, semantic re-rank when ambiguous.
22
35
  */
@@ -1 +1 @@
1
- {"version":3,"file":"rerank.d.ts","sourceRoot":"","sources":["../../src/redirects/rerank.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAA;AAErB,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,UAAU,CAAA;AAE1D,MAAM,MAAM,mBAAmB,GAAG,wBAAwB,GAAG;IAC3D,WAAW,EAAE,mBAAmB,CAAA;CACjC,CAAA;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,kFAAkF;IAClF,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,uFAAuF;IACvF,cAAc,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;CACzC;AAED,MAAM,MAAM,gBAAgB,GAAG,CAC7B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,gBAAgB,EAAE,KAC1B,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAAA;AA6D7C;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,gBAAgB,EAAE,EAC9B,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAuCrC"}
1
+ {"version":3,"file":"rerank.d.ts","sourceRoot":"","sources":["../../src/redirects/rerank.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAA;AAGrB,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,UAAU,CAAA;AAE1D,MAAM,MAAM,mBAAmB,GAAG,wBAAwB,GAAG;IAC3D,WAAW,EAAE,mBAAmB,CAAA;CACjC,CAAA;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,kFAAkF;IAClF,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACxC,8EAA8E;IAC9E,EAAE,CAAC,EAAE,OAAO,CAAA;CACb;AAED,MAAM,MAAM,gBAAgB,GAAG,CAC7B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,gBAAgB,EAAE,KAC1B,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAAA;AAO7C,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAcjE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,OAAO,EACX,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO,GACtC,gBAAgB,CAiClB;AASD;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,gBAAgB,EAAE,EAC9B,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CA4CrC"}
@@ -3,45 +3,70 @@
3
3
  * Constrained to published candidate URLs only — the model never invents paths.
4
4
  */
5
5
  import { rankRedirectCandidates, suggestRedirectTarget, } from './suggest.js';
6
+ import { embedForFeature } from '../ai/runtime.js';
6
7
  const CLEAR_MATCH = 85;
7
- async function loadSemanticRerank() {
8
- try {
9
- const mod = '@prenta/' + 'plugin-ai';
10
- const ai = (await import(mod));
11
- if (typeof ai.semanticSearch !== 'function')
8
+ const RECOVERY_FEATURE_KEY = 'ai.features.seo404Recovery';
9
+ const SEMANTIC_THRESHOLD = 0.42;
10
+ /** Cosine similarity; returns 0 for mismatched dimensions or zero-norm vectors. */
11
+ export function cosineSimilarity(a, b) {
12
+ if (a.length !== b.length || a.length === 0)
13
+ return 0;
14
+ let dot = 0;
15
+ let normA = 0;
16
+ let normB = 0;
17
+ for (let i = 0; i < a.length; i++) {
18
+ const x = a[i] ?? 0;
19
+ const y = b[i] ?? 0;
20
+ dot += x * y;
21
+ normA += x * x;
22
+ normB += y * y;
23
+ }
24
+ if (normA === 0 || normB === 0)
25
+ return 0;
26
+ return dot / (Math.sqrt(normA) * Math.sqrt(normB));
27
+ }
28
+ /**
29
+ * Semantic ranker backed by the governed AI runtime. All enforcement (feature
30
+ * toggle, monthly budget, daily cap, usage metering) happens inside
31
+ * `embedForFeature`; any governed refusal or provider failure returns null so
32
+ * the caller falls back to the heuristic match.
33
+ */
34
+ export function buildGovernedRerank(db, opts = {}) {
35
+ return async (fromPath, shortlist) => {
36
+ if (shortlist.length === 0)
37
+ return null;
38
+ const query = `Best replacement page for broken URL path: ${fromPath}`;
39
+ const texts = [query, ...shortlist.map((c) => `${c.title ?? ''} ${c.url}`.trim())];
40
+ const res = await embedForFeature(db, RECOVERY_FEATURE_KEY, texts, {
41
+ fetchImpl: opts.fetchImpl,
42
+ });
43
+ if (!res.ok)
44
+ return null;
45
+ const [queryVec, ...candidateVecs] = res.vectors;
46
+ if (!queryVec)
12
47
  return null;
13
- return async (fromPath, shortlist) => {
14
- if (shortlist.length === 0)
15
- return null;
16
- const query = `Best replacement page for broken URL path: ${fromPath}`;
17
- const corpus = shortlist.map((c) => ({
18
- id: c.url,
19
- collectionSlug: 'content',
20
- title: c.title ?? c.url,
21
- content: `${c.title ?? ''} ${c.url}`.trim(),
22
- }));
23
- const results = await ai.semanticSearch(query, {
24
- corpus,
25
- limit: 3,
26
- threshold: 0.42,
27
- });
28
- const top = results[0];
29
- if (!top)
30
- return null;
31
- const matched = shortlist.find((c) => c.url === top.id);
32
- if (!matched)
33
- return null;
34
- const confidence = Math.round(Math.min(1, Math.max(0, top.score)) * 100);
35
- return {
36
- toPath: matched.url,
37
- confidence,
38
- reason: `Semantic match to "${matched.title ?? matched.url}"`,
39
- };
48
+ let best = null;
49
+ for (let i = 0; i < candidateVecs.length; i++) {
50
+ const vec = candidateVecs[i];
51
+ if (!vec)
52
+ continue;
53
+ const score = cosineSimilarity(queryVec, vec);
54
+ if (score >= SEMANTIC_THRESHOLD && (!best || score > best.score)) {
55
+ best = { index: i, score };
56
+ }
57
+ }
58
+ if (!best)
59
+ return null;
60
+ const matched = shortlist[best.index];
61
+ if (!matched)
62
+ return null;
63
+ const confidence = Math.round(Math.min(1, Math.max(0, best.score)) * 100);
64
+ return {
65
+ toPath: matched.url,
66
+ confidence,
67
+ reason: `Semantic match to "${matched.title ?? matched.url}"`,
40
68
  };
41
- }
42
- catch {
43
- return null;
44
- }
69
+ };
45
70
  }
46
71
  function withSource(match, matchSource) {
47
72
  return { ...match, matchSource };
@@ -62,7 +87,11 @@ export async function resolveRedirectMatch(fromPath, candidates, options = {}) {
62
87
  if (heuristic && heuristic.confidence >= CLEAR_MATCH) {
63
88
  return withSource(heuristic, 'heuristic');
64
89
  }
65
- const rerank = options.semanticRerank ?? (await loadSemanticRerank());
90
+ const rerank = options.semanticRerank !== undefined
91
+ ? options.semanticRerank
92
+ : options.db != null
93
+ ? buildGovernedRerank(options.db)
94
+ : null;
66
95
  if (!rerank) {
67
96
  return heuristic ? withSource(heuristic, 'heuristic') : null;
68
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rerank.js","sourceRoot":"","sources":["../../src/redirects/rerank.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rerank.js","sourceRoot":"","sources":["../../src/redirects/rerank.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Write-time JSON shape sanitization: strip prototype-pollution vectors from
3
+ * author-supplied payloads before they are stored.
4
+ *
5
+ * SECURITY: stored document JSON is later merged/spread by consumers that are
6
+ * not all pollution-safe. The concrete driver is Tiptap 2.x's
7
+ * `mergeAttributes()` (GHSA — "mergeAttributes() turns an own __proto__ key
8
+ * into inherited executable DOM attributes"): a document whose node/mark
9
+ * attrs carry an own `__proto__` key becomes stored XSS when it renders in
10
+ * another user's editor session, i.e. an editor-role account can hijack an
11
+ * admin session. The patch exists only in Tiptap 3, which cms-admin has not
12
+ * adopted yet, so the write gate removes the vector at the source instead:
13
+ * `__proto__`, `constructor`, and `prototype` keys are dropped from every
14
+ * plain object in the payload, recursively.
15
+ *
16
+ * JSON.parse creates `__proto__` as an OWN key (no setter fires), so these
17
+ * keys survive transport and arrive in request bodies verbatim. They have no
18
+ * legitimate use in content payloads.
19
+ *
20
+ * Wired into every document write action (`createDocument`, `updateDocument`,
21
+ * `updateDocumentSeoFields`, `updateGlobal`) and into `sanitizeDocumentData`,
22
+ * so a save of a document stored before this mitigation also scrubs the
23
+ * merged legacy data.
24
+ */
25
+ /**
26
+ * Return a deep copy of `value` with every own `__proto__` / `constructor` /
27
+ * `prototype` key removed from plain objects (recursively, arrays included).
28
+ * Primitives and non-plain objects pass through unchanged; the input is never
29
+ * mutated. Cycles (impossible in JSON bodies, possible from programmatic
30
+ * callers) are returned as-is instead of recursing forever.
31
+ */
32
+ export declare function stripDangerousKeys<T>(value: T): T;
33
+ //# sourceMappingURL=strip-dangerous-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strip-dangerous-keys.d.ts","sourceRoot":"","sources":["../../src/security/strip-dangerous-keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAqCH;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAEjD"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Write-time JSON shape sanitization: strip prototype-pollution vectors from
3
+ * author-supplied payloads before they are stored.
4
+ *
5
+ * SECURITY: stored document JSON is later merged/spread by consumers that are
6
+ * not all pollution-safe. The concrete driver is Tiptap 2.x's
7
+ * `mergeAttributes()` (GHSA — "mergeAttributes() turns an own __proto__ key
8
+ * into inherited executable DOM attributes"): a document whose node/mark
9
+ * attrs carry an own `__proto__` key becomes stored XSS when it renders in
10
+ * another user's editor session, i.e. an editor-role account can hijack an
11
+ * admin session. The patch exists only in Tiptap 3, which cms-admin has not
12
+ * adopted yet, so the write gate removes the vector at the source instead:
13
+ * `__proto__`, `constructor`, and `prototype` keys are dropped from every
14
+ * plain object in the payload, recursively.
15
+ *
16
+ * JSON.parse creates `__proto__` as an OWN key (no setter fires), so these
17
+ * keys survive transport and arrive in request bodies verbatim. They have no
18
+ * legitimate use in content payloads.
19
+ *
20
+ * Wired into every document write action (`createDocument`, `updateDocument`,
21
+ * `updateDocumentSeoFields`, `updateGlobal`) and into `sanitizeDocumentData`,
22
+ * so a save of a document stored before this mitigation also scrubs the
23
+ * merged legacy data.
24
+ */
25
+ const DANGEROUS_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
26
+ /**
27
+ * Only recurse into null-prototype or plain `Object.prototype` objects.
28
+ * Dates, buffers, and class instances pass through by reference — rebuilding
29
+ * them key-by-key would destroy them, and they cannot carry JSON-parsed
30
+ * `__proto__` own keys in the first place.
31
+ */
32
+ function isPlainObject(value) {
33
+ if (typeof value !== 'object' || value === null)
34
+ return false;
35
+ const proto = Object.getPrototypeOf(value);
36
+ return proto === Object.prototype || proto === null;
37
+ }
38
+ function walk(value, seen) {
39
+ if (Array.isArray(value)) {
40
+ if (seen.has(value))
41
+ return value;
42
+ seen.add(value);
43
+ return value.map((item) => walk(item, seen));
44
+ }
45
+ if (isPlainObject(value)) {
46
+ if (seen.has(value))
47
+ return value;
48
+ seen.add(value);
49
+ const out = {};
50
+ for (const key of Object.keys(value)) {
51
+ if (DANGEROUS_KEYS.has(key))
52
+ continue;
53
+ // Safe: dangerous keys are skipped above, so this assignment can never
54
+ // hit the Object.prototype `__proto__` setter.
55
+ out[key] = walk(value[key], seen);
56
+ }
57
+ return out;
58
+ }
59
+ return value;
60
+ }
61
+ /**
62
+ * Return a deep copy of `value` with every own `__proto__` / `constructor` /
63
+ * `prototype` key removed from plain objects (recursively, arrays included).
64
+ * Primitives and non-plain objects pass through unchanged; the input is never
65
+ * mutated. Cycles (impossible in JSON bodies, possible from programmatic
66
+ * callers) are returned as-is instead of recursing forever.
67
+ */
68
+ export function stripDangerousKeys(value) {
69
+ return walk(value, new WeakSet());
70
+ }
71
+ //# sourceMappingURL=strip-dangerous-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strip-dangerous-keys.js","sourceRoot":"","sources":["../../src/security/strip-dangerous-keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAA;AAEzE;;;;;GAKG;AACH,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAC7D,MAAM,KAAK,GAAY,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;IACnD,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,CAAA;AACrD,CAAC;AAED,SAAS,IAAI,CAAC,KAAc,EAAE,IAAqB;IACjD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAA;QACjC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACf,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAC9C,CAAC;IACD,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAA;QACjC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACf,MAAM,GAAG,GAA4B,EAAE,CAAA;QACvC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAQ;YACrC,uEAAuE;YACvE,+CAA+C;YAC/C,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;QACnC,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAI,KAAQ;IAC5C,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,OAAO,EAAE,CAAM,CAAA;AACxC,CAAC"}
@@ -71,6 +71,17 @@ export interface AuditExtraSignals {
71
71
  url: string;
72
72
  note?: string;
73
73
  }[];
74
+ /** Pages whose 28-day clicks dropped sharply vs the prior window (synced GSC data). */
75
+ decliningPages?: Array<{
76
+ entityId: string;
77
+ entityType: 'page' | 'post';
78
+ title: string;
79
+ url: string;
80
+ clicks28d: number;
81
+ clicksPrev28d: number;
82
+ }>;
83
+ /** Trailing-28d impressions per entity (synced GSC data) — weights quick wins. */
84
+ impressionsByEntityId?: Record<string, number>;
74
85
  redirectChains?: number;
75
86
  redirectLoops?: number;
76
87
  sitemapEnabled?: boolean;
@@ -133,9 +144,16 @@ export declare function issueKeyFor(type: string, identifier: string): string;
133
144
  export declare function runSeoAuditAnalysis(entities: AuditEntityInput[], signals?: AuditExtraSignals): SeoAuditResult;
134
145
  /**
135
146
  * Derive priority-ranked quick wins by grouping issues by type and ranking by
136
- * (impact, severity, count). Never hardcoded — purely a function of detected
137
- * issues, so the Overview "Quick Wins" card always reflects reality.
147
+ * (impact, weight). Never hardcoded — purely a function of detected issues,
148
+ * so the Overview "Quick Wins" card always reflects reality.
149
+ *
150
+ * When synced search data exists, `impressionsByEntityId` weights each group
151
+ * by the real traffic of the affected pages, so a missing meta description on
152
+ * a 10k-impression page outranks ten on pages nobody sees. Without search
153
+ * data the weight degrades to the plain issue count (previous behavior).
138
154
  */
139
- export declare function buildQuickWins(issues: DetectedIssue[]): QuickWin[];
155
+ export declare function buildQuickWins(issues: DetectedIssue[], options?: {
156
+ impressionsByEntityId?: Record<string, number>;
157
+ }): QuickWin[];
140
158
  export { gradeForSeoScore };
141
159
  //# sourceMappingURL=audit-engine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"audit-engine.d.ts","sourceRoot":"","sources":["../../src/seo/audit-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit-engine.d.ts","sourceRoot":"","sources":["../../src/seo/audit-engine.ts"],"names":[],"mappings":"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"}