cbrowser 19.3.8 → 19.3.9

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 (159) hide show
  1. package/dist/analysis/accessibility-empathy.d.ts.map +1 -1
  2. package/dist/analysis/accessibility-empathy.js +10 -1
  3. package/dist/analysis/accessibility-empathy.js.map +1 -1
  4. package/dist/analysis/agent-ready-audit.d.ts +9 -0
  5. package/dist/analysis/agent-ready-audit.d.ts.map +1 -1
  6. package/dist/analysis/agent-ready-audit.js +79 -6
  7. package/dist/analysis/agent-ready-audit.js.map +1 -1
  8. package/dist/analysis/bug-hunter.d.ts.map +1 -1
  9. package/dist/analysis/bug-hunter.js +27 -10
  10. package/dist/analysis/bug-hunter.js.map +1 -1
  11. package/dist/analysis/chaos-testing.d.ts.map +1 -1
  12. package/dist/analysis/chaos-testing.js +12 -3
  13. package/dist/analysis/chaos-testing.js.map +1 -1
  14. package/dist/analysis/competitive-benchmark.d.ts +50 -7
  15. package/dist/analysis/competitive-benchmark.d.ts.map +1 -1
  16. package/dist/analysis/competitive-benchmark.js +226 -106
  17. package/dist/analysis/competitive-benchmark.js.map +1 -1
  18. package/dist/analysis/page-understanding.d.ts +2 -0
  19. package/dist/analysis/page-understanding.d.ts.map +1 -1
  20. package/dist/analysis/page-understanding.js +104 -17
  21. package/dist/analysis/page-understanding.js.map +1 -1
  22. package/dist/artifact-store.d.ts +24 -2
  23. package/dist/artifact-store.d.ts.map +1 -1
  24. package/dist/artifact-store.js +34 -4
  25. package/dist/artifact-store.js.map +1 -1
  26. package/dist/browser/session-manager.d.ts.map +1 -1
  27. package/dist/browser/session-manager.js +3 -0
  28. package/dist/browser/session-manager.js.map +1 -1
  29. package/dist/browser/site-profile-manager.d.ts +17 -1
  30. package/dist/browser/site-profile-manager.d.ts.map +1 -1
  31. package/dist/browser/site-profile-manager.js +49 -12
  32. package/dist/browser/site-profile-manager.js.map +1 -1
  33. package/dist/browser.d.ts +58 -1
  34. package/dist/browser.d.ts.map +1 -1
  35. package/dist/browser.js +377 -50
  36. package/dist/browser.js.map +1 -1
  37. package/dist/charge-scope.d.ts.map +1 -1
  38. package/dist/charge-scope.js +6 -4
  39. package/dist/charge-scope.js.map +1 -1
  40. package/dist/cli.js +3 -0
  41. package/dist/cli.js.map +1 -1
  42. package/dist/config.d.ts.map +1 -1
  43. package/dist/config.js +8 -2
  44. package/dist/config.js.map +1 -1
  45. package/dist/mcp-server-remote.d.ts +7 -1
  46. package/dist/mcp-server-remote.d.ts.map +1 -1
  47. package/dist/mcp-server-remote.js +127 -83
  48. package/dist/mcp-server-remote.js.map +1 -1
  49. package/dist/mcp-server.d.ts.map +1 -1
  50. package/dist/mcp-server.js +4 -0
  51. package/dist/mcp-server.js.map +1 -1
  52. package/dist/mcp-tools/base/analysis-tools.d.ts.map +1 -1
  53. package/dist/mcp-tools/base/analysis-tools.js +5 -0
  54. package/dist/mcp-tools/base/analysis-tools.js.map +1 -1
  55. package/dist/mcp-tools/base/audit-tools.d.ts +14 -0
  56. package/dist/mcp-tools/base/audit-tools.d.ts.map +1 -1
  57. package/dist/mcp-tools/base/audit-tools.js +17 -8
  58. package/dist/mcp-tools/base/audit-tools.js.map +1 -1
  59. package/dist/mcp-tools/base/browser-state-tools.d.ts.map +1 -1
  60. package/dist/mcp-tools/base/browser-state-tools.js +18 -27
  61. package/dist/mcp-tools/base/browser-state-tools.js.map +1 -1
  62. package/dist/mcp-tools/base/capture-tools.d.ts +18 -0
  63. package/dist/mcp-tools/base/capture-tools.d.ts.map +1 -1
  64. package/dist/mcp-tools/base/capture-tools.js +109 -55
  65. package/dist/mcp-tools/base/capture-tools.js.map +1 -1
  66. package/dist/mcp-tools/base/cognitive-tools.d.ts.map +1 -1
  67. package/dist/mcp-tools/base/cognitive-tools.js +43 -16
  68. package/dist/mcp-tools/base/cognitive-tools.js.map +1 -1
  69. package/dist/mcp-tools/base/marketing-tools.d.ts.map +1 -1
  70. package/dist/mcp-tools/base/marketing-tools.js +8 -4
  71. package/dist/mcp-tools/base/marketing-tools.js.map +1 -1
  72. package/dist/mcp-tools/base/persona-comparison-tools.d.ts.map +1 -1
  73. package/dist/mcp-tools/base/persona-comparison-tools.js +14 -3
  74. package/dist/mcp-tools/base/persona-comparison-tools.js.map +1 -1
  75. package/dist/mcp-tools/base/remediation-tools.d.ts.map +1 -1
  76. package/dist/mcp-tools/base/remediation-tools.js +10 -2
  77. package/dist/mcp-tools/base/remediation-tools.js.map +1 -1
  78. package/dist/mcp-tools/base/session-tools.d.ts.map +1 -1
  79. package/dist/mcp-tools/base/session-tools.js +2 -0
  80. package/dist/mcp-tools/base/session-tools.js.map +1 -1
  81. package/dist/mcp-tools/base/visual-testing-tools.d.ts +13 -0
  82. package/dist/mcp-tools/base/visual-testing-tools.d.ts.map +1 -1
  83. package/dist/mcp-tools/base/visual-testing-tools.js +45 -16
  84. package/dist/mcp-tools/base/visual-testing-tools.js.map +1 -1
  85. package/dist/mcp-tools/persona-creation-tools.d.ts.map +1 -1
  86. package/dist/mcp-tools/persona-creation-tools.js +59 -13
  87. package/dist/mcp-tools/persona-creation-tools.js.map +1 -1
  88. package/dist/mcp-tools/persona-lifecycle-tools.d.ts.map +1 -1
  89. package/dist/mcp-tools/persona-lifecycle-tools.js +4 -2
  90. package/dist/mcp-tools/persona-lifecycle-tools.js.map +1 -1
  91. package/dist/mcp-tools/tier-gate.d.ts +4 -4
  92. package/dist/mcp-tools/tier-gate.d.ts.map +1 -1
  93. package/dist/mcp-tools/tier-gate.js +41 -19
  94. package/dist/mcp-tools/tier-gate.js.map +1 -1
  95. package/dist/mcp-tools/tool-categories.d.ts +11 -0
  96. package/dist/mcp-tools/tool-categories.d.ts.map +1 -1
  97. package/dist/mcp-tools/tool-categories.js +27 -1
  98. package/dist/mcp-tools/tool-categories.js.map +1 -1
  99. package/dist/mcp-tools/ui-resources.d.ts.map +1 -1
  100. package/dist/mcp-tools/ui-resources.js +32 -10
  101. package/dist/mcp-tools/ui-resources.js.map +1 -1
  102. package/dist/personas.d.ts +14 -0
  103. package/dist/personas.d.ts.map +1 -1
  104. package/dist/personas.js +26 -0
  105. package/dist/personas.js.map +1 -1
  106. package/dist/recording/engine.d.ts.map +1 -1
  107. package/dist/recording/engine.js +2 -1
  108. package/dist/recording/engine.js.map +1 -1
  109. package/dist/remediation/patch-generator.d.ts.map +1 -1
  110. package/dist/remediation/patch-generator.js +7 -1
  111. package/dist/remediation/patch-generator.js.map +1 -1
  112. package/dist/remediation/structured-data.d.ts +73 -1
  113. package/dist/remediation/structured-data.d.ts.map +1 -1
  114. package/dist/remediation/structured-data.js +239 -63
  115. package/dist/remediation/structured-data.js.map +1 -1
  116. package/dist/request-context.d.ts +18 -0
  117. package/dist/request-context.d.ts.map +1 -0
  118. package/dist/request-context.js +56 -0
  119. package/dist/request-context.js.map +1 -0
  120. package/dist/site-model/manager.d.ts +14 -1
  121. package/dist/site-model/manager.d.ts.map +1 -1
  122. package/dist/site-model/manager.js +24 -1
  123. package/dist/site-model/manager.js.map +1 -1
  124. package/dist/types.d.ts +90 -2
  125. package/dist/types.d.ts.map +1 -1
  126. package/dist/types.js.map +1 -1
  127. package/dist/values/index.d.ts +1 -1
  128. package/dist/values/index.d.ts.map +1 -1
  129. package/dist/values/index.js +1 -1
  130. package/dist/values/index.js.map +1 -1
  131. package/dist/values/persona-values.d.ts +16 -0
  132. package/dist/values/persona-values.d.ts.map +1 -1
  133. package/dist/values/persona-values.js +56 -4
  134. package/dist/values/persona-values.js.map +1 -1
  135. package/dist/visual/ab-comparison.d.ts +22 -0
  136. package/dist/visual/ab-comparison.d.ts.map +1 -1
  137. package/dist/visual/ab-comparison.js +36 -9
  138. package/dist/visual/ab-comparison.js.map +1 -1
  139. package/dist/visual/cognitive-transport.d.ts +15 -1
  140. package/dist/visual/cognitive-transport.d.ts.map +1 -1
  141. package/dist/visual/cognitive-transport.js +42 -12
  142. package/dist/visual/cognitive-transport.js.map +1 -1
  143. package/dist/visual/cross-browser.d.ts +8 -0
  144. package/dist/visual/cross-browser.d.ts.map +1 -1
  145. package/dist/visual/cross-browser.js +8 -4
  146. package/dist/visual/cross-browser.js.map +1 -1
  147. package/dist/visual/distance-metrics.d.ts +11 -2
  148. package/dist/visual/distance-metrics.d.ts.map +1 -1
  149. package/dist/visual/distance-metrics.js +44 -5
  150. package/dist/visual/distance-metrics.js.map +1 -1
  151. package/dist/visual/regression.d.ts +61 -0
  152. package/dist/visual/regression.d.ts.map +1 -1
  153. package/dist/visual/regression.js +123 -50
  154. package/dist/visual/regression.js.map +1 -1
  155. package/dist/visual/responsive.d.ts +8 -0
  156. package/dist/visual/responsive.d.ts.map +1 -1
  157. package/dist/visual/responsive.js +95 -17
  158. package/dist/visual/responsive.js.map +1 -1
  159. package/package.json +1 -1
@@ -5,6 +5,67 @@
5
5
  */
6
6
  import { CBrowser } from "../browser.js";
7
7
  import { navigationError } from "../navigation-errors.js";
8
+ /**
9
+ * Below this, no type is claimed. Any score above the 0.1 floor used to win,
10
+ * so one weak signal produced a full schema: cbrowser.ai/pricing became an
11
+ * Article at 20% (meta author alone). One strong signal (<article>, the site
12
+ * root) still reaches it; one weak one (a date, a price, an address) does not.
13
+ * (2026-10-10, B34)
14
+ */
15
+ export const MIN_TYPE_CONFIDENCE = 0.4;
16
+ const ORGANIZATION_TYPES = ["Organization", "Corporation", "NGO", "EducationalOrganization", "GovernmentOrganization", "OnlineBusiness"];
17
+ const ARTICLE_TYPES = ["Article", "BlogPosting", "NewsArticle", "TechArticle", "ScholarlyArticle", "Report", "LiveBlogPosting", "SocialMediaPosting"];
18
+ const PRODUCT_TYPES = ["Product", "ProductGroup", "ProductModel", "IndividualProduct"];
19
+ const SOFTWARE_TYPES = ["SoftwareApplication", "WebApplication", "MobileApplication"];
20
+ const LOCAL_BUSINESS_TYPES = ["LocalBusiness", "Store", "Restaurant", "FoodEstablishment", "ProfessionalService", "MedicalBusiness"];
21
+ const EVENT_TYPES = ["Event", "BusinessEvent", "EducationEvent", "Festival", "MusicEvent", "SocialEvent", "SportsEvent", "TheaterEvent"];
22
+ const WEBPAGE_TYPES = ["WebPage", "AboutPage", "CollectionPage", "ContactPage", "FAQPage", "ItemPage", "ProfilePage", "QAPage", "SearchResultsPage", "CheckoutPage"];
23
+ /** Existing types that already describe what a suggested @type would add. */
24
+ const ALREADY_DESCRIBED = {
25
+ Organization: [...ORGANIZATION_TYPES, ...LOCAL_BUSINESS_TYPES],
26
+ Article: ARTICLE_TYPES,
27
+ // A SaaS page's offering is a SoftwareApplication; a Product beside it
28
+ // describes the same thing twice.
29
+ Product: [...PRODUCT_TYPES, ...SOFTWARE_TYPES],
30
+ FAQPage: ["FAQPage"],
31
+ LocalBusiness: LOCAL_BUSINESS_TYPES,
32
+ WebPage: WEBPAGE_TYPES,
33
+ };
34
+ /**
35
+ * A page has one main subject, so these exclude each other. SoftwareApplication
36
+ * is deliberately absent: cbrowser.ai declares it site-wide, on its blog posts
37
+ * too, where an Article is right. (Measured 2026-10-10.)
38
+ */
39
+ const MAIN_SUBJECT = {
40
+ Article: ARTICLE_TYPES,
41
+ Product: PRODUCT_TYPES,
42
+ Event: EVENT_TYPES,
43
+ Recipe: ["Recipe"],
44
+ };
45
+ /**
46
+ * Does suggesting `suggestedType` clash with what the page already declares?
47
+ * A duplicate (the page has it) or a conflict (the page declares a different
48
+ * main subject). Never suggest either. (2026-10-10, B34)
49
+ */
50
+ export function schemaClash(suggestedType, existing) {
51
+ const dup = existing.find((t) => (ALREADY_DESCRIBED[suggestedType] ?? [suggestedType]).includes(t));
52
+ if (dup)
53
+ return { kind: "duplicate", existingType: dup };
54
+ if (MAIN_SUBJECT[suggestedType]) {
55
+ for (const [subject, types] of Object.entries(MAIN_SUBJECT)) {
56
+ if (subject === suggestedType)
57
+ continue;
58
+ const other = existing.find((t) => types.includes(t));
59
+ if (other)
60
+ return { kind: "conflict", existingType: other };
61
+ }
62
+ }
63
+ return null;
64
+ }
65
+ /** og:title, else the page's h1, else <title>. (2026-10-10, B34) */
66
+ function pageHeadline(signals) {
67
+ return signals.ogTitle || signals.h1 || signals.title;
68
+ }
8
69
  /**
9
70
  * Extract signals from a page for type detection
10
71
  */
@@ -16,14 +77,19 @@ async function extractPageSignals(page, url) {
16
77
  // Check for article indicators
17
78
  const hasArticleTag = !!document.querySelector("article");
18
79
  const hasPublishDate = !!(document.querySelector('time[datetime], [class*="publish"], [class*="date"], meta[property="article:published_time"]'));
19
- const hasAuthor = !!(document.querySelector('[rel="author"], [class*="author"], [class*="byline"], meta[name="author"]'));
80
+ // Not meta[name="author"]: sites set it once in the layout, so it is on
81
+ // every page. It made cbrowser.ai/pricing an Article at 20% on the
82
+ // strength of "Has author attribution" alone. A byline is on the page.
83
+ // (2026-10-10, B34)
84
+ const hasAuthor = !!(document.querySelector('[rel="author"], [class*="author"], [class*="byline"]'));
20
85
  // Check for product indicators
21
86
  const hasPrice = !!(document.querySelector('[class*="price"], [itemprop="price"], .price'));
22
87
  // Check for add-to-cart buttons using class selectors and text content matching
23
88
  const hasAddToCart = !!(document.querySelector('[class*="add-to-cart"], [class*="addtocart"], [class*="add_to_cart"], [data-action="add-to-cart"]') ||
24
89
  Array.from(document.querySelectorAll('button, [role="button"], input[type="submit"]')).some(el => /add to cart|buy now|purchase|add to bag/i.test(el.textContent || '')));
25
- const hasProductSchema = !!(document.querySelector('script[type="application/ld+json"]')?.textContent?.includes('"@type":"Product"') ||
26
- document.querySelector('[itemtype*="Product"]'));
90
+ // JSON-LD Product is decided from the parsed types (parseExistingSchema):
91
+ // this read only the FIRST script, as a raw substring. (2026-10-10, B34)
92
+ const hasProductMicrodata = !!document.querySelector('[itemtype*="Product"]');
27
93
  // Check for FAQ indicators
28
94
  const hasFaqSection = !!(document.querySelector('[class*="faq"], details, [itemtype*="FAQPage"]') ||
29
95
  document.querySelector("h2, h3")?.textContent?.toLowerCase().includes("faq"));
@@ -36,26 +102,10 @@ async function extractPageSignals(page, url) {
36
102
  const hasPhone = !!(document.querySelector('a[href^="tel:"], [itemprop="telephone"]'));
37
103
  // Get og:type
38
104
  const ogType = document.querySelector('meta[property="og:type"]')?.getAttribute("content") || undefined;
39
- // Check for existing schema
40
- const schemaScripts = document.querySelectorAll('script[type="application/ld+json"]');
41
- const existingSchema = [];
42
- schemaScripts.forEach((script) => {
43
- try {
44
- const json = JSON.parse(script.textContent || "{}");
45
- if (json["@type"]) {
46
- existingSchema.push(json["@type"]);
47
- }
48
- else if (Array.isArray(json)) {
49
- json.forEach((item) => {
50
- if (item["@type"])
51
- existingSchema.push(item["@type"]);
52
- });
53
- }
54
- }
55
- catch {
56
- // Ignore parse errors
57
- }
58
- });
105
+ // Existing schema: the raw JSON-LD blocks, parsed in Node by
106
+ // parseExistingSchema so the parser is testable. (2026-10-10, B34)
107
+ const ldTexts = Array.from(document.querySelectorAll('script[type="application/ld+json"]'))
108
+ .map((script) => script.textContent || "");
59
109
  // Check if homepage
60
110
  const isHomepage = window.location.pathname === "/" || window.location.pathname === "";
61
111
  // ========== EXTRACT VALUES (v18.22.0) ==========
@@ -68,11 +118,12 @@ async function extractPageSignals(page, url) {
68
118
  document.querySelector('[rel="author"]')?.textContent ||
69
119
  document.querySelector('[class*="author"] a, [class*="byline"] a, .author, .byline')?.textContent ||
70
120
  "").trim();
71
- // Publish date
72
- const publishDateEl = document.querySelector('time[datetime]') ||
73
- document.querySelector('meta[property="article:published_time"]');
74
- const publishDate = publishDateEl?.getAttribute("datetime") ||
75
- publishDateEl?.getAttribute("content") || "";
121
+ // Publish date. The page-level meta first: the first <time datetime> in
122
+ // the document can belong to a sidebar or a related-posts card.
123
+ // Normalised to ISO 8601 by the generator (toIsoDate). (2026-10-10, B34)
124
+ const publishDate = (document.querySelector('meta[property="article:published_time"]')?.getAttribute("content") ||
125
+ document.querySelector('time[datetime]')?.getAttribute("datetime") ||
126
+ "").trim();
76
127
  // Modified date
77
128
  const modifiedDate = (document.querySelector('meta[property="article:modified_time"]')?.getAttribute("content") ||
78
129
  "");
@@ -106,6 +157,11 @@ async function extractPageSignals(page, url) {
106
157
  // Phone number
107
158
  const phoneEl = document.querySelector('a[href^="tel:"]');
108
159
  const phone = phoneEl ? phoneEl.getAttribute("href")?.replace("tel:", "") || "" : (document.querySelector('[itemprop="telephone"]')?.textContent?.trim() || "");
160
+ // Names better than the raw <title>, which carries the site suffix
161
+ // ("CBrowser | Pricing | CBrowser"). (2026-10-10, B34)
162
+ const ogTitle = (document.querySelector('meta[property="og:title"]')?.getAttribute("content") || "").trim();
163
+ const ogSiteName = (document.querySelector('meta[property="og:site_name"]')?.getAttribute("content") || "").trim();
164
+ const h1 = (document.querySelector("h1")?.textContent || "").replace(/\s+/g, " ").trim();
109
165
  // FAQ items extraction
110
166
  const faqItems = [];
111
167
  // Try <details> elements
@@ -142,7 +198,7 @@ async function extractPageSignals(page, url) {
142
198
  return {
143
199
  title,
144
200
  hasArticleTag,
145
- hasProductSchema,
201
+ hasProductMicrodata,
146
202
  hasPrice,
147
203
  hasAddToCart,
148
204
  hasPublishDate,
@@ -154,7 +210,10 @@ async function extractPageSignals(page, url) {
154
210
  hasPhone,
155
211
  isHomepage,
156
212
  ogType,
157
- existingSchema,
213
+ ldTexts,
214
+ ogTitle,
215
+ ogSiteName,
216
+ h1,
158
217
  // Extracted values (v18.22.0)
159
218
  description,
160
219
  authorName,
@@ -168,7 +227,83 @@ async function extractPageSignals(page, url) {
168
227
  faqItems: faqItems.length > 0 ? faqItems : undefined,
169
228
  };
170
229
  });
171
- return { ...signals, url };
230
+ const { ldTexts, hasProductMicrodata, ...rest } = signals;
231
+ const existing = parseExistingSchema(ldTexts);
232
+ return {
233
+ ...rest,
234
+ url,
235
+ hasProductSchema: hasProductMicrodata || existing.types.includes("Product"),
236
+ existingSchema: existing.types,
237
+ existingOrganizationName: existing.organizationName,
238
+ };
239
+ }
240
+ /**
241
+ * The @types a page's JSON-LD already declares, plus its Organization's name.
242
+ *
243
+ * Read top-level objects and arrays only, so cbrowser.ai, which declares
244
+ * Organization, SoftwareApplication, WebPage and WebSite in one @graph,
245
+ * reported "None detected" and was offered a fresh Article. Now @graph is
246
+ * read, and an array @type (["Organization", "LocalBusiness"]) gives every
247
+ * entry. Nested values (an Organization's founder Person) are not the page's
248
+ * own types and are not read. (2026-10-10, B34)
249
+ */
250
+ export function parseExistingSchema(ldTexts) {
251
+ const types = [];
252
+ let organizationName;
253
+ const visit = (node) => {
254
+ if (Array.isArray(node)) {
255
+ node.forEach(visit);
256
+ return;
257
+ }
258
+ if (!node || typeof node !== "object")
259
+ return;
260
+ const obj = node;
261
+ const declared = [].concat(obj["@type"] ?? []).filter((t) => typeof t === "string");
262
+ for (const t of declared)
263
+ if (!types.includes(t))
264
+ types.push(t);
265
+ if (!organizationName && declared.some((t) => ORGANIZATION_TYPES.includes(t)) && typeof obj.name === "string" && obj.name.trim()) {
266
+ organizationName = obj.name.trim();
267
+ }
268
+ if (obj["@graph"])
269
+ visit(obj["@graph"]);
270
+ };
271
+ for (const text of ldTexts) {
272
+ try {
273
+ visit(JSON.parse(text || "{}"));
274
+ }
275
+ catch { /* invalid JSON-LD is not schema */ }
276
+ }
277
+ return { types, organizationName };
278
+ }
279
+ /**
280
+ * ISO 8601, or "" when the value is not a date. Schema.org's datePublished
281
+ * and dateModified are ISO 8601; this passed the page's text through, so a
282
+ * <time datetime="Aug 4, 2026"> shipped verbatim, and cbrowser.ai's
283
+ * article:published_time "2026-08-04 17:47:17" would have too.
284
+ *
285
+ * Nothing is invented: a date with no time stays a date, and a time with no
286
+ * zone stays a local time ("2026-08-04T17:47:17"). Converting either to UTC
287
+ * would read it in THIS machine's zone, which says nothing about the page's.
288
+ * Only a value that names its zone becomes an instant. (2026-10-10, B34)
289
+ */
290
+ export function toIsoDate(raw) {
291
+ const s = (raw || "").trim();
292
+ if (!s)
293
+ return "";
294
+ if (/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:?\d{2})?)?$/.test(s))
295
+ return s;
296
+ const ms = Date.parse(s);
297
+ if (!Number.isFinite(ms))
298
+ return "";
299
+ const d = new Date(ms);
300
+ const two = (n) => String(n).padStart(2, "0");
301
+ const ymd = `${d.getFullYear()}-${two(d.getMonth() + 1)}-${two(d.getDate())}`;
302
+ if (!/\d{1,2}:\d{2}/.test(s))
303
+ return ymd;
304
+ if (/(?:Z|[+-]\d{2}:?\d{2})$/.test(s) || /\b(?:GMT|UTC)\b/i.test(s))
305
+ return d.toISOString();
306
+ return `${ymd}T${two(d.getHours())}:${two(d.getMinutes())}:${two(d.getSeconds())}`;
172
307
  }
173
308
  /**
174
309
  * Detect page type from signals
@@ -186,7 +321,7 @@ export function detectPageType(signals) {
186
321
  howto: 0,
187
322
  recipe: 0,
188
323
  "local-business": 0,
189
- unknown: 0.1, // Base score for unknown
324
+ unknown: 0,
190
325
  };
191
326
  // Homepage detection
192
327
  if (signals.isHomepage) {
@@ -223,18 +358,19 @@ export function detectPageType(signals) {
223
358
  scores["local-business"] += 0.6;
224
359
  if (signals.hasAddress && !signals.hasPhone)
225
360
  scores["local-business"] += 0.3;
226
- // Find highest scoring type
227
- let maxScore = 0;
228
- let detectedType = "unknown";
229
- for (const [type, score] of Object.entries(scores)) {
230
- if (score > maxScore) {
231
- maxScore = score;
232
- detectedType = type;
233
- }
361
+ const candidates = Object.entries(scores)
362
+ .filter(([type, score]) => type !== "unknown" && score > 0)
363
+ .map(([type, score]) => ({ type, confidence: Math.round(Math.min(1, score) * 100) / 100 }))
364
+ .sort((a, b) => b.confidence - a.confidence);
365
+ // The best candidate is a claim only at MIN_TYPE_CONFIDENCE. Below it the
366
+ // answer is "unknown", with the candidates, and its confidence is the best
367
+ // candidate's, so "unknown at 20%" reads as "nearly an article, at 20%".
368
+ // (2026-10-10, B34)
369
+ const best = candidates[0];
370
+ if (!best || best.confidence < MIN_TYPE_CONFIDENCE) {
371
+ return { type: "unknown", confidence: best?.confidence ?? 0, candidates };
234
372
  }
235
- // Normalize confidence
236
- const confidence = Math.min(1, maxScore);
237
- return { type: detectedType, confidence };
373
+ return { type: best.type, confidence: best.confidence, candidates };
238
374
  }
239
375
  /**
240
376
  * Generate Organization schema
@@ -245,7 +381,7 @@ function generateOrganizationSchema(signals) {
245
381
  return {
246
382
  "@context": "https://schema.org",
247
383
  "@type": "Organization",
248
- name: signals.title.split("|")[0].split("-")[0].trim(),
384
+ name: signals.ogSiteName || signals.title.split("|")[0].split("-")[0].trim(),
249
385
  url: baseUrl,
250
386
  description: signals.description || "", // Extracted or to be filled
251
387
  logo: signals.logoUrl ? new URL(signals.logoUrl, baseUrl).href : "", // Extracted or to be filled
@@ -261,17 +397,21 @@ function generateArticleSchema(signals) {
261
397
  return {
262
398
  "@context": "https://schema.org",
263
399
  "@type": "Article",
264
- headline: signals.title,
400
+ // Was the raw <title>, site suffix and all. (2026-10-10, B34)
401
+ headline: pageHeadline(signals),
265
402
  description: signals.description || "", // Extracted or to be filled
266
403
  author: {
267
404
  "@type": "Person",
268
405
  name: signals.authorName || "", // Extracted or to be filled
269
406
  },
270
- datePublished: signals.publishDate || "", // Extracted or to be filled
271
- dateModified: signals.modifiedDate || signals.publishDate || "", // Extracted or to be filled
407
+ // ISO 8601 or "", never the page's own wording. (2026-10-10, B34)
408
+ datePublished: toIsoDate(signals.publishDate), // Extracted or to be filled
409
+ dateModified: toIsoDate(signals.modifiedDate || signals.publishDate), // Extracted or to be filled
272
410
  publisher: {
273
411
  "@type": "Organization",
274
- name: "", // To be filled
412
+ // Was always "". The page's own Organization, else og:site_name.
413
+ // (2026-10-10, B34)
414
+ name: signals.existingOrganizationName || signals.ogSiteName || "",
275
415
  logo: {
276
416
  "@type": "ImageObject",
277
417
  url: signals.logoUrl ? new URL(signals.logoUrl, baseUrl).href : "", // Extracted or to be filled
@@ -289,7 +429,7 @@ function generateProductSchema(signals) {
289
429
  return {
290
430
  "@context": "https://schema.org",
291
431
  "@type": "Product",
292
- name: signals.title,
432
+ name: pageHeadline(signals),
293
433
  description: signals.description || "", // Extracted or to be filled
294
434
  image: signals.imageUrl ? new URL(signals.imageUrl, baseUrl).href : "", // Extracted or to be filled
295
435
  brand: {
@@ -379,7 +519,7 @@ export function generateStructuredData(signals, pageType) {
379
519
  return {
380
520
  "@context": "https://schema.org",
381
521
  "@type": "WebPage",
382
- name: signals.title,
522
+ name: pageHeadline(signals),
383
523
  url: signals.url,
384
524
  description: signals.description || "", // Extracted or to be filled
385
525
  };
@@ -389,6 +529,11 @@ export function generateStructuredData(signals, pageType) {
389
529
  * Get reasoning for the suggested schema
390
530
  */
391
531
  function getReasoningForType(pageType, signals, confidence) {
532
+ const confidenceText = confidence > 0.7 ? "High" : confidence >= MIN_TYPE_CONFIDENCE ? "Medium" : "Low";
533
+ return `${confidenceText} confidence. ${reasonsFor(pageType, signals).join(". ")}.`;
534
+ }
535
+ /** The signals behind a type, as short phrases. */
536
+ function reasonsFor(pageType, signals) {
392
537
  const reasons = [];
393
538
  switch (pageType) {
394
539
  case "homepage":
@@ -420,8 +565,49 @@ function getReasoningForType(pageType, signals, confidence) {
420
565
  default:
421
566
  reasons.push("No specific page type detected");
422
567
  }
423
- const confidenceText = confidence > 0.7 ? "High" : confidence > 0.4 ? "Medium" : "Low";
424
- return `${confidenceText} confidence. ${reasons.join(". ")}.`;
568
+ return reasons;
569
+ }
570
+ /**
571
+ * Detect, generate, and refuse what would clash: the whole suggestion from the
572
+ * page's signals, with no browser, so every branch is testable.
573
+ *
574
+ * Below MIN_TYPE_CONFIDENCE the type is "unknown" and only a generic WebPage
575
+ * is offered (name, url, description), never a typed schema built on one weak
576
+ * signal. And nothing is offered that the page already declares or that
577
+ * conflicts with what it declares: cbrowser.ai/pricing, which declares
578
+ * WebPage in its @graph, now gets no schema and says why. (2026-10-10, B34)
579
+ */
580
+ export function buildSuggestion(signals) {
581
+ const { type, confidence, candidates } = detectPageType(signals);
582
+ const generated = generateStructuredData(signals, type);
583
+ const suggestedType = String(generated["@type"]);
584
+ const clash = schemaClash(suggestedType, signals.existingSchema);
585
+ const pct = (n) => `${Math.round(n * 100)}%`;
586
+ let reasoning;
587
+ if (type === "unknown") {
588
+ const best = candidates[0];
589
+ reasoning = best
590
+ ? `Low confidence. No page type reached ${pct(MIN_TYPE_CONFIDENCE)}; the best candidate is ${best.type} at ${pct(best.confidence)} (${reasonsFor(best.type, signals).join(", ").toLowerCase()}), too weak to claim, so no typed schema is suggested.`
591
+ : "No specific page type detected.";
592
+ }
593
+ else {
594
+ reasoning = getReasoningForType(type, signals, confidence);
595
+ }
596
+ if (clash) {
597
+ reasoning += clash.kind === "duplicate"
598
+ ? ` The page already declares ${clash.existingType}, so ${suggestedType} is not suggested again.`
599
+ : ` The page declares ${clash.existingType} as its subject, which a ${suggestedType} would contradict, so none is suggested.`;
600
+ }
601
+ const suggestedSchema = clash ? null : generated;
602
+ return {
603
+ pageType: type,
604
+ confidence,
605
+ existingSchema: signals.existingSchema,
606
+ suggestedSchema,
607
+ suggestedSchemaString: suggestedSchema ? JSON.stringify(suggestedSchema, null, 2) : "",
608
+ reasoning,
609
+ candidates,
610
+ };
425
611
  }
426
612
  /**
427
613
  * Suggest structured data for a URL
@@ -436,17 +622,7 @@ export async function suggestStructuredData(options) {
436
622
  const signals = await extractPageSignals(page, url);
437
623
  await browser.close();
438
624
  browser = null;
439
- const { type, confidence } = detectPageType(signals);
440
- const suggestedSchema = generateStructuredData(signals, type);
441
- const reasoning = getReasoningForType(type, signals, confidence);
442
- return {
443
- pageType: type,
444
- confidence,
445
- existingSchema: signals.existingSchema,
446
- suggestedSchema,
447
- suggestedSchemaString: JSON.stringify(suggestedSchema, null, 2),
448
- reasoning,
449
- };
625
+ return buildSuggestion(signals);
450
626
  }
451
627
  finally {
452
628
  if (browser) {
@@ -1 +1 @@
1
- {"version":3,"file":"structured-data.js","sourceRoot":"","sources":["../../src/remediation/structured-data.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"structured-data.js","sourceRoot":"","sources":["../../src/remediation/structured-data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { PricingTier } from "./mcp-tools/tool-categories.js";
2
+ export interface RequestIdentity {
3
+ /** SHA-256 hex of the caller's account key; null when unauthenticated or not an account key. */
4
+ keyHash: string | null;
5
+ /** Pricing tier this request is gated at. null = ungated (self-hosted). */
6
+ tier: PricingTier | null;
7
+ /** The raw key the caller presented, for account-scoped CMS reads. */
8
+ apiKey: string | undefined;
9
+ }
10
+ /**
11
+ * Run `fn` with `identity` as this request's caller. Everything awaited inside
12
+ * sees it, and nothing outside does. The object is copied, so a setter called
13
+ * inside changes this request's view and never the caller's argument.
14
+ */
15
+ export declare function withRequestIdentity<T>(identity: RequestIdentity, fn: () => T): T;
16
+ /** The active request's identity, or undefined outside any request (CLI, stdio, tests). */
17
+ export declare function currentRequestIdentity(): RequestIdentity | undefined;
18
+ //# sourceMappingURL=request-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../src/request-context.ts"],"names":[],"mappings":"AA0CA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAElE,MAAM,WAAW,eAAe;IAC9B,gGAAgG;IAChG,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,2EAA2E;IAC3E,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,sEAAsE;IACtE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAID;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEhF;AAED,2FAA2F;AAC3F,wBAAgB,sBAAsB,IAAI,eAAe,GAAG,SAAS,CAEpE"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Per-request caller identity for the hosted server: key hash, pricing tier and
3
+ * raw API key.
4
+ *
5
+ * THE DEFECT THIS REPLACES
6
+ *
7
+ * The hosted server kept all three in module variables, assigned while a
8
+ * request's MCP server was being built and read when its tool ran:
9
+ * `currentKeyHash` and `currentTier` in mcp-tools/tier-gate.ts, `_sessionApiKey`
10
+ * in mcp-tools/base/cognitive-tools.ts. Between the assignment and the read sit
11
+ * several awaits (body read, redirect resolution, the CMS credit deduct), so an
12
+ * overlapping request from another account overwrote them and this request read
13
+ * the other caller's values: the usage log, the tool-result autosave and
14
+ * ask_cbrowser were filed under the other key hash; every CMS call made with
15
+ * the raw key used the other caller's key, which is a cross-tenant read for the
16
+ * custom-persona fetches (list_cognitive_personas, cognitive_journey_init,
17
+ * attention_analysis, the comparison and audit tools) and a cross-tenant WRITE
18
+ * for persona_update, persona_delete, persona creation and the visual-report
19
+ * saves; and the gate-before-charge check and the paid model-call entitlement
20
+ * (capture, attention_analysis) judged one account by another's plan. Same
21
+ * defect class as billing identity (resolveRequestKeyHash, 2026-07-26) and
22
+ * persona scope (persona-scope.ts, 2026-08-01); this closes the three variables
23
+ * those fixes left behind. (sec-identity, 2026-10-10)
24
+ *
25
+ * HOW IT IS USED
26
+ *
27
+ * mcp-server-remote.ts enters one context per HTTP request with
28
+ * `withRequestIdentity` (at createServer), so building the request's MCP server
29
+ * and dispatching its tool call both run inside it, and the /mcp branch sets
30
+ * the caller there. The existing setters (setActiveKeyHash, setActiveTier, setSessionApiKey)
31
+ * write into the active context when there is one and into their module
32
+ * variable when there is not; the getters read the same way. So code that sets
33
+ * the tier during registration (registerAllPublicTools, the enterprise demo's
34
+ * registrar) changes only its own request.
35
+ *
36
+ * DEFAULT BEHAVIOUR IS UNCHANGED. With no context entered the setters and
37
+ * getters use the module variables exactly as before, so the CLI, the stdio
38
+ * server and every local install are unaffected.
39
+ *
40
+ * @since 2026-10-10
41
+ */
42
+ import { AsyncLocalStorage } from "node:async_hooks";
43
+ const storage = new AsyncLocalStorage();
44
+ /**
45
+ * Run `fn` with `identity` as this request's caller. Everything awaited inside
46
+ * sees it, and nothing outside does. The object is copied, so a setter called
47
+ * inside changes this request's view and never the caller's argument.
48
+ */
49
+ export function withRequestIdentity(identity, fn) {
50
+ return storage.run({ ...identity }, fn);
51
+ }
52
+ /** The active request's identity, or undefined outside any request (CLI, stdio, tests). */
53
+ export function currentRequestIdentity() {
54
+ return storage.getStore();
55
+ }
56
+ //# sourceMappingURL=request-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-context.js","sourceRoot":"","sources":["../src/request-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAYrD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAmB,CAAC;AAEzD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAI,QAAyB,EAAE,EAAW;IAC3E,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,sBAAsB;IACpC,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC5B,CAAC"}
@@ -15,7 +15,20 @@ export declare class SiteModelManager {
15
15
  private writeTimer;
16
16
  /** Singleton instance for process-wide sharing */
17
17
  private static _instance;
18
- /** Get or create the singleton instance */
18
+ /**
19
+ * One instance per hosted account, keyed by that account's data dir.
20
+ *
21
+ * The singleton is one per process: on the hosted server its in-memory
22
+ * models and its site-models directory served every account, so one
23
+ * account's navigation history, element selectors, goal paths (action
24
+ * values included) and failure patterns for a domain were read through
25
+ * site_model_status, site_model_query and journey familiarity by any other
26
+ * account, and written to by all of them. Inside an account scope each
27
+ * account now gets its own instance under its own directory; unscoped
28
+ * callers (CLI, stdio, local) keep the singleton. (tenant, 2026-10-10)
29
+ */
30
+ private static _scoped;
31
+ /** Get or create the instance for this call's scope */
19
32
  static getInstance(dataDir?: string): SiteModelManager;
20
33
  /** Maximum JSON size per domain model file */
21
34
  private static readonly MAX_MODEL_SIZE;
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/site-model/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/site-model/manager.ts"],"names":[],"mappings":"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"}