cbrowser 18.13.4 → 18.14.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.
- package/dist/agent-personas.d.ts +55 -0
- package/dist/agent-personas.d.ts.map +1 -0
- package/dist/agent-personas.js +252 -0
- package/dist/agent-personas.js.map +1 -0
- package/dist/analysis/agent-ready-audit.d.ts.map +1 -1
- package/dist/analysis/agent-ready-audit.js +584 -0
- package/dist/analysis/agent-ready-audit.js.map +1 -1
- package/dist/analysis/competitive-benchmark.d.ts +14 -0
- package/dist/analysis/competitive-benchmark.d.ts.map +1 -1
- package/dist/analysis/competitive-benchmark.js +245 -0
- package/dist/analysis/competitive-benchmark.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/llms-txt/diff.d.ts +85 -0
- package/dist/llms-txt/diff.d.ts.map +1 -0
- package/dist/llms-txt/diff.js +234 -0
- package/dist/llms-txt/diff.js.map +1 -0
- package/dist/llms-txt/index.d.ts +19 -0
- package/dist/llms-txt/index.d.ts.map +1 -0
- package/dist/llms-txt/index.js +19 -0
- package/dist/llms-txt/index.js.map +1 -0
- package/dist/llms-txt/validator.d.ts +80 -0
- package/dist/llms-txt/validator.d.ts.map +1 -0
- package/dist/llms-txt/validator.js +341 -0
- package/dist/llms-txt/validator.js.map +1 -0
- package/dist/mcp-server-remote.d.ts.map +1 -1
- package/dist/mcp-server-remote.js +36 -13
- package/dist/mcp-server-remote.js.map +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +26 -2
- package/dist/mcp-server.js.map +1 -1
- package/dist/mcp-tools/base/analysis-tools.d.ts +1 -1
- package/dist/mcp-tools/base/analysis-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/analysis-tools.js +56 -2
- package/dist/mcp-tools/base/analysis-tools.js.map +1 -1
- package/dist/mcp-tools/base/cognitive-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/cognitive-tools.js +14 -1
- package/dist/mcp-tools/base/cognitive-tools.js.map +1 -1
- package/dist/mcp-tools/base/index.d.ts +7 -3
- package/dist/mcp-tools/base/index.d.ts.map +1 -1
- package/dist/mcp-tools/base/index.js +14 -4
- package/dist/mcp-tools/base/index.js.map +1 -1
- package/dist/mcp-tools/base/llms-txt-tools.d.ts +12 -0
- package/dist/mcp-tools/base/llms-txt-tools.d.ts.map +1 -0
- package/dist/mcp-tools/base/llms-txt-tools.js +119 -0
- package/dist/mcp-tools/base/llms-txt-tools.js.map +1 -0
- package/dist/mcp-tools/base/persona-comparison-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/persona-comparison-tools.js +12 -2
- package/dist/mcp-tools/base/persona-comparison-tools.js.map +1 -1
- package/dist/mcp-tools/base/remediation-tools.d.ts +12 -0
- package/dist/mcp-tools/base/remediation-tools.d.ts.map +1 -0
- package/dist/mcp-tools/base/remediation-tools.js +106 -0
- package/dist/mcp-tools/base/remediation-tools.js.map +1 -0
- package/dist/mcp-tools/index.d.ts +10 -10
- package/dist/mcp-tools/index.d.ts.map +1 -1
- package/dist/mcp-tools/index.js +11 -11
- package/dist/mcp-tools/index.js.map +1 -1
- package/dist/persona-questionnaire.d.ts +1 -1
- package/dist/persona-questionnaire.d.ts.map +1 -1
- package/dist/persona-questionnaire.js +12 -2
- package/dist/persona-questionnaire.js.map +1 -1
- package/dist/personas.d.ts +4 -2
- package/dist/personas.d.ts.map +1 -1
- package/dist/personas.js +12 -1
- package/dist/personas.js.map +1 -1
- package/dist/remediation/index.d.ts +19 -0
- package/dist/remediation/index.d.ts.map +1 -0
- package/dist/remediation/index.js +19 -0
- package/dist/remediation/index.js.map +1 -0
- package/dist/remediation/llms-txt.d.ts +65 -0
- package/dist/remediation/llms-txt.d.ts.map +1 -0
- package/dist/remediation/llms-txt.js +219 -0
- package/dist/remediation/llms-txt.js.map +1 -0
- package/dist/remediation/patch-generator.d.ts +54 -0
- package/dist/remediation/patch-generator.d.ts.map +1 -0
- package/dist/remediation/patch-generator.js +274 -0
- package/dist/remediation/patch-generator.js.map +1 -0
- package/dist/remediation/structured-data.d.ts +64 -0
- package/dist/remediation/structured-data.d.ts.map +1 -0
- package/dist/remediation/structured-data.js +352 -0
- package/dist/remediation/structured-data.js.map +1 -0
- package/dist/types.d.ts +213 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzF,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9E,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGnE,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAIvH,cAAc,mBAAmB,CAAC;AAGlC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,wBAAwB,CAAC;AAGvC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG1E,cAAc,oBAAoB,CAAC;AAInC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,4BAA4B,CAAC;AAI3C,cAAc,mBAAmB,CAAC;AAIlC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,4BAA4B,EAC5B,mBAAmB,EACnB,uBAAuB,EAEvB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,8BAA8B,EAC9B,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,8BAA8B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzF,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9E,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGnE,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAIvH,cAAc,mBAAmB,CAAC;AAGlC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,wBAAwB,CAAC;AAGvC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG1E,cAAc,oBAAoB,CAAC;AAInC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,4BAA4B,CAAC;AAI3C,cAAc,mBAAmB,CAAC;AAIlC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,4BAA4B,EAC5B,mBAAmB,EACnB,uBAAuB,EAEvB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,8BAA8B,EAC9B,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,8BAA8B,EAC9B,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAGpE,cAAc,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -31,6 +31,10 @@ export * from "./visual/index.js";
|
|
|
31
31
|
export * from "./testing/index.js";
|
|
32
32
|
// Analysis module
|
|
33
33
|
export * from "./analysis/index.js";
|
|
34
|
+
// Remediation module (v17.0.0)
|
|
35
|
+
export * from "./remediation/index.js";
|
|
36
|
+
// llms.txt module (v17.0.0)
|
|
37
|
+
export * from "./llms-txt/index.js";
|
|
34
38
|
// Performance module
|
|
35
39
|
export * from "./performance/index.js";
|
|
36
40
|
// Utilities module (v10.4.4)
|
|
@@ -49,7 +53,7 @@ export * from "./values/index.js";
|
|
|
49
53
|
// Allows granular tool imports for custom server composition
|
|
50
54
|
export { registerAllPublicTools, registerBaseTools, registerPersonaCreationTools, registerAskUserTool, registerEnterpriseStubs,
|
|
51
55
|
// Individual tool categories for granular use
|
|
52
|
-
registerNavigationTools, registerInteractionTools, registerExtractionTools, registerAssertionTools, registerAnalysisTools, registerSessionTools, registerHealingTools, registerVisualTestingTools, registerTestingTools, registerBugAnalysisTools, registerPersonaComparisonTools, registerCognitiveTools, registerValuesTools, registerPerformanceTools, registerAuditTools, registerBrowserManagementTools, } from "./mcp-tools/index.js";
|
|
56
|
+
registerNavigationTools, registerInteractionTools, registerExtractionTools, registerAssertionTools, registerAnalysisTools, registerSessionTools, registerHealingTools, registerVisualTestingTools, registerTestingTools, registerBugAnalysisTools, registerPersonaComparisonTools, registerCognitiveTools, registerValuesTools, registerPerformanceTools, registerAuditTools, registerBrowserManagementTools, registerRemediationTools, registerLlmsTxtTools, } from "./mcp-tools/index.js";
|
|
53
57
|
// Security module (v18.0.0) - Request signing and audit logging
|
|
54
58
|
export * from "./security/index.js";
|
|
55
59
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzF,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEnE,yEAAyE;AACzE,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEvH,2BAA2B;AAC3B,wBAAwB;AACxB,cAAc,mBAAmB,CAAC;AAElC,iBAAiB;AACjB,cAAc,oBAAoB,CAAC;AAEnC,kBAAkB;AAClB,cAAc,qBAAqB,CAAC;AAEpC,qBAAqB;AACrB,cAAc,wBAAwB,CAAC;AAEvC,6BAA6B;AAC7B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE1E,2BAA2B;AAC3B,cAAc,oBAAoB,CAAC;AAEnC,6CAA6C;AAC7C,uDAAuD;AACvD,cAAc,oBAAoB,CAAC;AAEnC,sEAAsE;AACtE,cAAc,4BAA4B,CAAC;AAE3C,2EAA2E;AAC3E,oEAAoE;AACpE,cAAc,mBAAmB,CAAC;AAElC,sDAAsD;AACtD,6DAA6D;AAC7D,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,4BAA4B,EAC5B,mBAAmB,EACnB,uBAAuB;AACvB,8CAA8C;AAC9C,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,8BAA8B,EAC9B,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,8BAA8B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzF,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEnE,yEAAyE;AACzE,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEvH,2BAA2B;AAC3B,wBAAwB;AACxB,cAAc,mBAAmB,CAAC;AAElC,iBAAiB;AACjB,cAAc,oBAAoB,CAAC;AAEnC,kBAAkB;AAClB,cAAc,qBAAqB,CAAC;AAEpC,+BAA+B;AAC/B,cAAc,wBAAwB,CAAC;AAEvC,4BAA4B;AAC5B,cAAc,qBAAqB,CAAC;AAEpC,qBAAqB;AACrB,cAAc,wBAAwB,CAAC;AAEvC,6BAA6B;AAC7B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE1E,2BAA2B;AAC3B,cAAc,oBAAoB,CAAC;AAEnC,6CAA6C;AAC7C,uDAAuD;AACvD,cAAc,oBAAoB,CAAC;AAEnC,sEAAsE;AACtE,cAAc,4BAA4B,CAAC;AAE3C,2EAA2E;AAC3E,oEAAoE;AACpE,cAAc,mBAAmB,CAAC;AAElC,sDAAsD;AACtD,6DAA6D;AAC7D,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,4BAA4B,EAC5B,mBAAmB,EACnB,uBAAuB;AACvB,8CAA8C;AAC9C,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,8BAA8B,EAC9B,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,8BAA8B,EAC9B,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAG9B,gEAAgE;AAChE,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CBrowser - Cognitive Browser Automation
|
|
3
|
+
* Copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com
|
|
4
|
+
* Learn more at https://cbrowser.ai - MIT License
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* A page entry from llms.txt or site
|
|
8
|
+
*/
|
|
9
|
+
export interface LlmsTxtPage {
|
|
10
|
+
/** Page title */
|
|
11
|
+
title: string;
|
|
12
|
+
/** Page URL */
|
|
13
|
+
url: string;
|
|
14
|
+
/** Optional description */
|
|
15
|
+
description?: string;
|
|
16
|
+
/** Section this page belongs to */
|
|
17
|
+
section?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* A difference found between llms.txt and site
|
|
21
|
+
*/
|
|
22
|
+
export interface LlmsTxtDiffEntry {
|
|
23
|
+
/** Type of change */
|
|
24
|
+
type: "added" | "removed" | "changed";
|
|
25
|
+
/** Page title */
|
|
26
|
+
title: string;
|
|
27
|
+
/** Page URL */
|
|
28
|
+
url: string;
|
|
29
|
+
/** For 'changed' type: what changed */
|
|
30
|
+
changes?: string[];
|
|
31
|
+
/** The section affected */
|
|
32
|
+
section?: string;
|
|
33
|
+
/** Suggested action */
|
|
34
|
+
action: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Result of llms.txt diff
|
|
38
|
+
*/
|
|
39
|
+
export interface LlmsTxtDiffResult {
|
|
40
|
+
/** Base URL that was analyzed */
|
|
41
|
+
url: string;
|
|
42
|
+
/** When diff was run */
|
|
43
|
+
timestamp: string;
|
|
44
|
+
/** Whether llms.txt is up to date */
|
|
45
|
+
upToDate: boolean;
|
|
46
|
+
/** Pages in site but not in llms.txt */
|
|
47
|
+
additions: LlmsTxtDiffEntry[];
|
|
48
|
+
/** Pages in llms.txt but not in site */
|
|
49
|
+
removals: LlmsTxtDiffEntry[];
|
|
50
|
+
/** Pages with changed content */
|
|
51
|
+
changes: LlmsTxtDiffEntry[];
|
|
52
|
+
/** Summary statistics */
|
|
53
|
+
summary: {
|
|
54
|
+
totalDifferences: number;
|
|
55
|
+
additions: number;
|
|
56
|
+
removals: number;
|
|
57
|
+
changes: number;
|
|
58
|
+
};
|
|
59
|
+
/** Suggested updated llms.txt content */
|
|
60
|
+
suggestedUpdate?: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Options for llms.txt diff
|
|
64
|
+
*/
|
|
65
|
+
export interface LlmsTxtDiffOptions {
|
|
66
|
+
/** Existing llms.txt content */
|
|
67
|
+
existingContent: string;
|
|
68
|
+
/** Run headless browser */
|
|
69
|
+
headless?: boolean;
|
|
70
|
+
/** Whether to crawl linked pages */
|
|
71
|
+
crawl?: boolean;
|
|
72
|
+
/** Max pages to crawl */
|
|
73
|
+
maxPages?: number;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Compare llms.txt against current site structure
|
|
77
|
+
*/
|
|
78
|
+
export declare function diffLlmsTxt(url: string, options: LlmsTxtDiffOptions): Promise<LlmsTxtDiffResult>;
|
|
79
|
+
/**
|
|
80
|
+
* Fetch existing llms.txt from URL and compare against site
|
|
81
|
+
*/
|
|
82
|
+
export declare function diffLlmsTxtFromUrl(siteUrl: string, options?: Omit<LlmsTxtDiffOptions, "existingContent"> & {
|
|
83
|
+
llmsTxtUrl?: string;
|
|
84
|
+
}): Promise<LlmsTxtDiffResult>;
|
|
85
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/llms-txt/diff.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qBAAqB;IACrB,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IACtC,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,wBAAwB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,wCAAwC;IACxC,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,wCAAwC;IACxC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,iCAAiC;IACjC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,yBAAyB;IACzB,OAAO,EAAE;QACP,gBAAgB,EAAE,MAAM,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,yCAAyC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gCAAgC;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA0ED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CA+G5B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,IAAI,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAClF,OAAO,CAAC,iBAAiB,CAAC,CAwD5B"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CBrowser - Cognitive Browser Automation
|
|
3
|
+
* Copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com
|
|
4
|
+
* Learn more at https://cbrowser.ai - MIT License
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* llms.txt Diff
|
|
8
|
+
*
|
|
9
|
+
* Compare current site structure against existing llms.txt to detect drift.
|
|
10
|
+
* Helps maintain llms.txt files as sites evolve.
|
|
11
|
+
*
|
|
12
|
+
* @since 17.0.0
|
|
13
|
+
*/
|
|
14
|
+
import { generateLlmsTxt } from "../remediation/llms-txt.js";
|
|
15
|
+
/**
|
|
16
|
+
* Parse llms.txt content into structured pages
|
|
17
|
+
*/
|
|
18
|
+
function parseLlmsTxtPages(content) {
|
|
19
|
+
const pages = [];
|
|
20
|
+
const lines = content.split("\n");
|
|
21
|
+
let currentSection;
|
|
22
|
+
for (const line of lines) {
|
|
23
|
+
// Section header
|
|
24
|
+
if (line.startsWith("## ")) {
|
|
25
|
+
currentSection = line.slice(3).trim();
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
// Link: - [title](url) or - [title](url): description
|
|
29
|
+
const linkMatch = line.match(/\[([^\]]+)\]\(([^)]+)\)(?::\s*(.+))?/);
|
|
30
|
+
if (linkMatch) {
|
|
31
|
+
pages.push({
|
|
32
|
+
title: linkMatch[1],
|
|
33
|
+
url: linkMatch[2],
|
|
34
|
+
description: linkMatch[3]?.trim(),
|
|
35
|
+
section: currentSection,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return pages;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Extract pages from generated llms.txt result
|
|
43
|
+
*/
|
|
44
|
+
function extractPagesFromResult(result) {
|
|
45
|
+
const pages = [];
|
|
46
|
+
for (const section of result.sections) {
|
|
47
|
+
for (const link of section.links) {
|
|
48
|
+
pages.push({
|
|
49
|
+
title: link.title,
|
|
50
|
+
url: link.url,
|
|
51
|
+
description: link.description,
|
|
52
|
+
section: section.title,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return pages;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Normalize URL for comparison (remove trailing slashes, protocol variations)
|
|
60
|
+
*/
|
|
61
|
+
function normalizeUrl(url, baseUrl) {
|
|
62
|
+
try {
|
|
63
|
+
// Handle relative URLs
|
|
64
|
+
const fullUrl = baseUrl && !url.startsWith("http")
|
|
65
|
+
? new URL(url, baseUrl).toString()
|
|
66
|
+
: url;
|
|
67
|
+
const parsed = new URL(fullUrl);
|
|
68
|
+
// Remove trailing slash, lowercase, remove www
|
|
69
|
+
return parsed.toString()
|
|
70
|
+
.replace(/\/$/, "")
|
|
71
|
+
.toLowerCase()
|
|
72
|
+
.replace(/^https?:\/\/www\./, "https://");
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return url.toLowerCase().replace(/\/$/, "");
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Compare llms.txt against current site structure
|
|
80
|
+
*/
|
|
81
|
+
export async function diffLlmsTxt(url, options) {
|
|
82
|
+
const { existingContent, headless = true, crawl = false, maxPages = 10, } = options;
|
|
83
|
+
// Parse existing llms.txt
|
|
84
|
+
const existingPages = parseLlmsTxtPages(existingContent);
|
|
85
|
+
// Generate fresh llms.txt from site
|
|
86
|
+
const freshResult = await generateLlmsTxt({
|
|
87
|
+
url,
|
|
88
|
+
crawl,
|
|
89
|
+
maxPages,
|
|
90
|
+
headless,
|
|
91
|
+
});
|
|
92
|
+
const freshPages = extractPagesFromResult(freshResult);
|
|
93
|
+
// Create maps for comparison
|
|
94
|
+
const existingByUrl = new Map();
|
|
95
|
+
for (const page of existingPages) {
|
|
96
|
+
existingByUrl.set(normalizeUrl(page.url, url), page);
|
|
97
|
+
}
|
|
98
|
+
const freshByUrl = new Map();
|
|
99
|
+
for (const page of freshPages) {
|
|
100
|
+
freshByUrl.set(normalizeUrl(page.url, url), page);
|
|
101
|
+
}
|
|
102
|
+
const additions = [];
|
|
103
|
+
const removals = [];
|
|
104
|
+
const changes = [];
|
|
105
|
+
// Find additions (in site but not in llms.txt)
|
|
106
|
+
for (const [normalizedUrl, freshPage] of freshByUrl) {
|
|
107
|
+
if (!existingByUrl.has(normalizedUrl)) {
|
|
108
|
+
additions.push({
|
|
109
|
+
type: "added",
|
|
110
|
+
title: freshPage.title,
|
|
111
|
+
url: freshPage.url,
|
|
112
|
+
section: freshPage.section,
|
|
113
|
+
action: `Add to llms.txt: - [${freshPage.title}](${freshPage.url})`,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Find removals (in llms.txt but not in site)
|
|
118
|
+
for (const [normalizedUrl, existingPage] of existingByUrl) {
|
|
119
|
+
if (!freshByUrl.has(normalizedUrl)) {
|
|
120
|
+
removals.push({
|
|
121
|
+
type: "removed",
|
|
122
|
+
title: existingPage.title,
|
|
123
|
+
url: existingPage.url,
|
|
124
|
+
section: existingPage.section,
|
|
125
|
+
action: `Remove from llms.txt or verify page still exists: ${existingPage.url}`,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Find changes (same URL but different title/description)
|
|
130
|
+
for (const [normalizedUrl, freshPage] of freshByUrl) {
|
|
131
|
+
const existingPage = existingByUrl.get(normalizedUrl);
|
|
132
|
+
if (existingPage) {
|
|
133
|
+
const changesList = [];
|
|
134
|
+
if (existingPage.title !== freshPage.title) {
|
|
135
|
+
changesList.push(`Title changed: "${existingPage.title}" → "${freshPage.title}"`);
|
|
136
|
+
}
|
|
137
|
+
if (existingPage.description !== freshPage.description) {
|
|
138
|
+
if (freshPage.description && !existingPage.description) {
|
|
139
|
+
changesList.push(`Description added: "${freshPage.description}"`);
|
|
140
|
+
}
|
|
141
|
+
else if (!freshPage.description && existingPage.description) {
|
|
142
|
+
changesList.push(`Description removed`);
|
|
143
|
+
}
|
|
144
|
+
else if (freshPage.description && existingPage.description) {
|
|
145
|
+
changesList.push(`Description changed`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (changesList.length > 0) {
|
|
149
|
+
changes.push({
|
|
150
|
+
type: "changed",
|
|
151
|
+
title: freshPage.title,
|
|
152
|
+
url: freshPage.url,
|
|
153
|
+
changes: changesList,
|
|
154
|
+
section: freshPage.section || existingPage.section,
|
|
155
|
+
action: `Update entry: - [${freshPage.title}](${freshPage.url})${freshPage.description ? `: ${freshPage.description}` : ""}`,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
const totalDifferences = additions.length + removals.length + changes.length;
|
|
161
|
+
return {
|
|
162
|
+
url,
|
|
163
|
+
timestamp: new Date().toISOString(),
|
|
164
|
+
upToDate: totalDifferences === 0,
|
|
165
|
+
additions,
|
|
166
|
+
removals,
|
|
167
|
+
changes,
|
|
168
|
+
summary: {
|
|
169
|
+
totalDifferences,
|
|
170
|
+
additions: additions.length,
|
|
171
|
+
removals: removals.length,
|
|
172
|
+
changes: changes.length,
|
|
173
|
+
},
|
|
174
|
+
suggestedUpdate: totalDifferences > 0 ? freshResult.markdown : undefined,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Fetch existing llms.txt from URL and compare against site
|
|
179
|
+
*/
|
|
180
|
+
export async function diffLlmsTxtFromUrl(siteUrl, options = {}) {
|
|
181
|
+
const { llmsTxtUrl, headless = true, crawl = false, maxPages = 10 } = options;
|
|
182
|
+
// Determine llms.txt URL
|
|
183
|
+
let fetchUrl = llmsTxtUrl;
|
|
184
|
+
if (!fetchUrl) {
|
|
185
|
+
const baseUrl = siteUrl.endsWith("/") ? siteUrl : siteUrl + "/";
|
|
186
|
+
fetchUrl = baseUrl + "llms.txt";
|
|
187
|
+
}
|
|
188
|
+
// Fetch existing llms.txt
|
|
189
|
+
try {
|
|
190
|
+
const response = await fetch(fetchUrl);
|
|
191
|
+
if (!response.ok) {
|
|
192
|
+
// No existing llms.txt - treat everything as additions
|
|
193
|
+
const freshResult = await generateLlmsTxt({
|
|
194
|
+
url: siteUrl,
|
|
195
|
+
crawl,
|
|
196
|
+
maxPages,
|
|
197
|
+
headless,
|
|
198
|
+
});
|
|
199
|
+
const freshPages = extractPagesFromResult(freshResult);
|
|
200
|
+
return {
|
|
201
|
+
url: siteUrl,
|
|
202
|
+
timestamp: new Date().toISOString(),
|
|
203
|
+
upToDate: false,
|
|
204
|
+
additions: freshPages.map((p) => ({
|
|
205
|
+
type: "added",
|
|
206
|
+
title: p.title,
|
|
207
|
+
url: p.url,
|
|
208
|
+
section: p.section,
|
|
209
|
+
action: `Add to llms.txt: - [${p.title}](${p.url})`,
|
|
210
|
+
})),
|
|
211
|
+
removals: [],
|
|
212
|
+
changes: [],
|
|
213
|
+
summary: {
|
|
214
|
+
totalDifferences: freshPages.length,
|
|
215
|
+
additions: freshPages.length,
|
|
216
|
+
removals: 0,
|
|
217
|
+
changes: 0,
|
|
218
|
+
},
|
|
219
|
+
suggestedUpdate: freshResult.markdown,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
const existingContent = await response.text();
|
|
223
|
+
return diffLlmsTxt(siteUrl, {
|
|
224
|
+
existingContent,
|
|
225
|
+
headless,
|
|
226
|
+
crawl,
|
|
227
|
+
maxPages,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
throw new Error(`Failed to fetch llms.txt: ${error.message}`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/llms-txt/diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CBrowser - Cognitive Browser Automation
|
|
3
|
+
* Copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com
|
|
4
|
+
* Learn more at https://cbrowser.ai - MIT License
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* llms.txt Module
|
|
8
|
+
*
|
|
9
|
+
* Complete llms.txt lifecycle management:
|
|
10
|
+
* - Validation: Check format and link validity
|
|
11
|
+
* - Diff: Compare site changes against existing llms.txt
|
|
12
|
+
*
|
|
13
|
+
* Generation is in remediation/llms-txt.ts (Phase 3)
|
|
14
|
+
*
|
|
15
|
+
* @since 17.0.0
|
|
16
|
+
*/
|
|
17
|
+
export * from "./validator.js";
|
|
18
|
+
export * from "./diff.js";
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llms-txt/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;GAUG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CBrowser - Cognitive Browser Automation
|
|
3
|
+
* Copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com
|
|
4
|
+
* Learn more at https://cbrowser.ai - MIT License
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* llms.txt Module
|
|
8
|
+
*
|
|
9
|
+
* Complete llms.txt lifecycle management:
|
|
10
|
+
* - Validation: Check format and link validity
|
|
11
|
+
* - Diff: Compare site changes against existing llms.txt
|
|
12
|
+
*
|
|
13
|
+
* Generation is in remediation/llms-txt.ts (Phase 3)
|
|
14
|
+
*
|
|
15
|
+
* @since 17.0.0
|
|
16
|
+
*/
|
|
17
|
+
export * from "./validator.js";
|
|
18
|
+
export * from "./diff.js";
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/llms-txt/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;GAUG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CBrowser - Cognitive Browser Automation
|
|
3
|
+
* Copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com
|
|
4
|
+
* Learn more at https://cbrowser.ai - MIT License
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* llms.txt Validator
|
|
8
|
+
*
|
|
9
|
+
* Validates llms.txt files for format compliance and link validity.
|
|
10
|
+
* Based on the llms.txt specification: https://llmstxt.org/
|
|
11
|
+
*
|
|
12
|
+
* @since 17.0.0
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Validation error with severity
|
|
16
|
+
*/
|
|
17
|
+
export interface ValidationIssue {
|
|
18
|
+
/** Line number (1-indexed) where issue was found */
|
|
19
|
+
line: number;
|
|
20
|
+
/** Severity: error (must fix) or warning (should fix) */
|
|
21
|
+
severity: "error" | "warning";
|
|
22
|
+
/** Type of issue */
|
|
23
|
+
type: "format" | "link" | "structure";
|
|
24
|
+
/** Human-readable message */
|
|
25
|
+
message: string;
|
|
26
|
+
/** The problematic content */
|
|
27
|
+
content?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Result of llms.txt validation
|
|
31
|
+
*/
|
|
32
|
+
export interface LlmsTxtValidationResult {
|
|
33
|
+
/** Whether the file is valid (no errors) */
|
|
34
|
+
valid: boolean;
|
|
35
|
+
/** Title extracted from the file */
|
|
36
|
+
title?: string;
|
|
37
|
+
/** Number of sections found */
|
|
38
|
+
sectionCount: number;
|
|
39
|
+
/** Number of links found */
|
|
40
|
+
linkCount: number;
|
|
41
|
+
/** Number of links that were validated as reachable */
|
|
42
|
+
linksValidated: number;
|
|
43
|
+
/** Number of broken links found */
|
|
44
|
+
brokenLinks: number;
|
|
45
|
+
/** All issues found */
|
|
46
|
+
issues: ValidationIssue[];
|
|
47
|
+
/** Summary statistics */
|
|
48
|
+
summary: {
|
|
49
|
+
errors: number;
|
|
50
|
+
warnings: number;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Options for llms.txt validation
|
|
55
|
+
*/
|
|
56
|
+
export interface LlmsTxtValidationOptions {
|
|
57
|
+
/** Whether to validate that links are reachable */
|
|
58
|
+
validateLinks?: boolean;
|
|
59
|
+
/** Timeout for link validation in ms */
|
|
60
|
+
linkTimeout?: number;
|
|
61
|
+
/** Maximum number of links to validate (for performance) */
|
|
62
|
+
maxLinksToValidate?: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Validate llms.txt format (structure and syntax)
|
|
66
|
+
*/
|
|
67
|
+
export declare function validateLlmsTxtFormat(content: string): ValidationIssue[];
|
|
68
|
+
/**
|
|
69
|
+
* Validate that links in llms.txt are reachable
|
|
70
|
+
*/
|
|
71
|
+
export declare function validateLlmsTxtLinks(content: string, options?: LlmsTxtValidationOptions): Promise<ValidationIssue[]>;
|
|
72
|
+
/**
|
|
73
|
+
* Fully validate an llms.txt file
|
|
74
|
+
*/
|
|
75
|
+
export declare function validateLlmsTxt(content: string, options?: LlmsTxtValidationOptions): Promise<LlmsTxtValidationResult>;
|
|
76
|
+
/**
|
|
77
|
+
* Fetch llms.txt from a URL and validate it
|
|
78
|
+
*/
|
|
79
|
+
export declare function validateLlmsTxtFromUrl(url: string, options?: LlmsTxtValidationOptions): Promise<LlmsTxtValidationResult>;
|
|
80
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/llms-txt/validator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,oBAAoB;IACpB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,4CAA4C;IAC5C,KAAK,EAAE,OAAO,CAAC;IACf,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,yBAAyB;IACzB,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,mDAAmD;IACnD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAsED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CAkJxE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,eAAe,EAAE,CAAC,CAyD5B;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,uBAAuB,CAAC,CAyClC;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,uBAAuB,CAAC,CAmDlC"}
|