@qualitykit/engine 0.0.0-stage → 0.3.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/robots.js ADDED
@@ -0,0 +1,71 @@
1
+ export const AI_CRAWLERS = [
2
+ "GPTBot",
3
+ "Google-Extended",
4
+ "PerplexityBot",
5
+ "ClaudeBot",
6
+ "anthropic-ai",
7
+ "Bingbot",
8
+ "Applebot-Extended",
9
+ "Bytespider",
10
+ ];
11
+ export function analyzeRobotsContent(content) {
12
+ const lines = content.split(/\r?\n/);
13
+ let currentAgents = [];
14
+ const rules = [];
15
+ for (const raw of lines) {
16
+ const line = raw.trim();
17
+ if (!line || line.startsWith("#"))
18
+ continue;
19
+ const ua = line.match(/^user-agent\s*:\s*(.+)$/i);
20
+ if (ua) {
21
+ currentAgents = [ua[1].trim()];
22
+ continue;
23
+ }
24
+ const disallow = line.match(/^disallow\s*:\s*(.*)$/i);
25
+ if (disallow) {
26
+ for (const agent of currentAgents) {
27
+ rules.push({
28
+ agent,
29
+ type: "disallow",
30
+ path: disallow[1].trim() || "/",
31
+ });
32
+ }
33
+ continue;
34
+ }
35
+ const allow = line.match(/^allow\s*:\s*(.*)$/i);
36
+ if (allow) {
37
+ for (const agent of currentAgents) {
38
+ rules.push({
39
+ agent,
40
+ type: "allow",
41
+ path: allow[1].trim() || "/",
42
+ });
43
+ }
44
+ }
45
+ }
46
+ const starDisallowsRoot = rules.some((r) => (r.agent === "*" || r.agent.toLowerCase() === "*") &&
47
+ r.type === "disallow" &&
48
+ (r.path === "/" || r.path === ""));
49
+ const aiCrawlers = AI_CRAWLERS.map((name) => {
50
+ const specific = rules.filter((r) => r.agent.toLowerCase() === name.toLowerCase());
51
+ if (specific.length === 0) {
52
+ return {
53
+ name,
54
+ status: starDisallowsRoot
55
+ ? "disallowed"
56
+ : "allowed",
57
+ evidence: starDisallowsRoot
58
+ ? "Blocked by User-agent: * Disallow: /"
59
+ : "No specific rule; inherits *",
60
+ };
61
+ }
62
+ const blocked = specific.some((r) => r.type === "disallow" && (r.path === "/" || r.path === ""));
63
+ return {
64
+ name,
65
+ status: blocked ? "disallowed" : "allowed",
66
+ evidence: specific.map((r) => `${r.type}: ${r.path}`).join("; "),
67
+ };
68
+ });
69
+ return { blocksAll: starDisallowsRoot, aiCrawlers };
70
+ }
71
+ //# sourceMappingURL=robots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"robots.js","sourceRoot":"","sources":["../src/robots.ts"],"names":[],"mappings":"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"}
package/dist/site.d.ts ADDED
@@ -0,0 +1,171 @@
1
+ export type FrameworkId = "nextjs" | "generic";
2
+ export type RouterKind = "app" | "pages" | "static-html" | "unknown";
3
+ export type Severity = "critical" | "high" | "medium" | "low" | "info";
4
+ export type ChangeKind = "create" | "edit" | "note";
5
+ export interface ProjectFile {
6
+ /** Posix-style path relative to project root */
7
+ path: string;
8
+ content: string;
9
+ size: number;
10
+ }
11
+ export interface AnalyzeOptions {
12
+ siteUrl?: string;
13
+ }
14
+ export interface BlogOptions {
15
+ includeCategories?: boolean;
16
+ skeletonCount?: number;
17
+ }
18
+ export interface RouteInfo {
19
+ path: string;
20
+ file: string;
21
+ kind: "page" | "layout" | "route" | "other";
22
+ title?: string;
23
+ description?: string;
24
+ hasMetadata: boolean;
25
+ hasCanonical: boolean;
26
+ headings: string[];
27
+ h1Count: number;
28
+ imagesMissingAlt: number;
29
+ internalLinks: string[];
30
+ }
31
+ export interface MetadataSignals {
32
+ hasMetadataBase: boolean;
33
+ hasTitleTemplate: boolean;
34
+ hasRootTitle: boolean;
35
+ hasRootDescription: boolean;
36
+ metadataBaseValue?: string;
37
+ titleTemplate?: string;
38
+ rootTitle?: string;
39
+ rootDescription?: string;
40
+ layoutFile?: string;
41
+ }
42
+ export interface RobotsSignals {
43
+ present: boolean;
44
+ source?: "app/robots.ts" | "app/robots.txt" | "public/robots.txt" | "pages";
45
+ file?: string;
46
+ content?: string;
47
+ blocksAll?: boolean;
48
+ aiCrawlers: AiCrawlerStatus[];
49
+ }
50
+ export interface AiCrawlerStatus {
51
+ name: string;
52
+ status: "allowed" | "disallowed" | "unknown";
53
+ evidence?: string;
54
+ }
55
+ export interface SitemapSignals {
56
+ present: boolean;
57
+ source?: "app/sitemap.ts" | "public/sitemap.xml" | "pages";
58
+ file?: string;
59
+ routesHint: string[];
60
+ }
61
+ export interface RedirectSignals {
62
+ present: boolean;
63
+ file?: string;
64
+ count: number;
65
+ snippets: string[];
66
+ }
67
+ export interface StructuredDataSignals {
68
+ files: string[];
69
+ types: string[];
70
+ }
71
+ export interface BlogSignals {
72
+ present: boolean;
73
+ routes: string[];
74
+ contentDir?: string;
75
+ postCount: number;
76
+ }
77
+ export interface BusinessHints {
78
+ name?: string;
79
+ description?: string;
80
+ audienceHints: string[];
81
+ topics: string[];
82
+ packageName?: string;
83
+ confidence: number;
84
+ }
85
+ export interface SiteModel {
86
+ projectRoot: string;
87
+ framework: FrameworkId;
88
+ frameworkConfidence: number;
89
+ router: RouterKind;
90
+ siteUrl?: string;
91
+ packageName?: string;
92
+ nextVersion?: string;
93
+ routes: RouteInfo[];
94
+ metadata: MetadataSignals;
95
+ robots: RobotsSignals;
96
+ sitemap: SitemapSignals;
97
+ redirects: RedirectSignals;
98
+ structuredData: StructuredDataSignals;
99
+ blog: BlogSignals;
100
+ business: BusinessHints;
101
+ unsupportedReason?: string;
102
+ files: ProjectFile[];
103
+ }
104
+ export interface FileSpec {
105
+ path: string;
106
+ kind: ChangeKind;
107
+ content?: string;
108
+ /** For edits: text that should already exist near the change */
109
+ anchor?: string;
110
+ /** For edits: suggested replacement or insertion */
111
+ snippet?: string;
112
+ rationale: string;
113
+ }
114
+ export interface Recommendation {
115
+ id: string;
116
+ title: string;
117
+ category: "technical-seo" | "blog" | "schema" | "internal-links" | "content" | "aeo" | "performance";
118
+ severity: Severity;
119
+ impact: number;
120
+ confidence: number;
121
+ effort: number;
122
+ risk: number;
123
+ priority: number;
124
+ evidence: string[];
125
+ rationale: string;
126
+ files: FileSpec[];
127
+ dependencies?: string[];
128
+ requiresUserApproval?: boolean;
129
+ }
130
+ export interface AuditFinding {
131
+ id: string;
132
+ severity: Severity;
133
+ title: string;
134
+ detail: string;
135
+ evidence: string[];
136
+ relatedRecommendationIds?: string[];
137
+ }
138
+ export interface AuditResult {
139
+ site: Omit<SiteModel, "files">;
140
+ findings: AuditFinding[];
141
+ summary: {
142
+ critical: number;
143
+ high: number;
144
+ medium: number;
145
+ low: number;
146
+ info: number;
147
+ };
148
+ }
149
+ export interface LinkSuggestion {
150
+ sourceFile: string;
151
+ sourceRoute: string;
152
+ targetHref: string;
153
+ anchorText: string;
154
+ rationale: string;
155
+ sharedTerms: string[];
156
+ }
157
+ export interface ContentBrief {
158
+ slug: string;
159
+ title: string;
160
+ audience: string;
161
+ intent: string;
162
+ questionsToAnswer: string[];
163
+ outline: string[];
164
+ claimsNeedingSources: string[];
165
+ internalLinks: string[];
166
+ doNotPublishIf: string[];
167
+ priority: number;
168
+ }
169
+ export declare function scorePriority(impact: number, confidence: number, effort: number, risk: number): number;
170
+ export declare function stripFiles(site: SiteModel): Omit<SiteModel, "files">;
171
+ //# sourceMappingURL=site.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"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"}
package/dist/site.js ADDED
@@ -0,0 +1,18 @@
1
+ export function scorePriority(impact, confidence, effort, risk) {
2
+ const safeImpact = clamp(impact, 1, 10);
3
+ const safeConfidence = clamp(confidence, 0.1, 1);
4
+ const safeEffort = clamp(effort, 1, 10);
5
+ const safeRisk = clamp(risk, 1, 10);
6
+ return round2((safeImpact * safeConfidence) / (safeEffort + safeRisk));
7
+ }
8
+ function clamp(n, min, max) {
9
+ return Math.min(max, Math.max(min, n));
10
+ }
11
+ function round2(n) {
12
+ return Math.round(n * 100) / 100;
13
+ }
14
+ export function stripFiles(site) {
15
+ const { files: _files, ...rest } = site;
16
+ return rest;
17
+ }
18
+ //# sourceMappingURL=site.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site.js","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"AAsMA,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,UAAkB,EAClB,MAAc,EACd,IAAY;IAEZ,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC,CAAC,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,KAAK,CAAC,CAAS,EAAE,GAAW,EAAE,GAAW;IAChD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAe;IACxC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IACxC,OAAO,IAAI,CAAC;AACd,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,40 @@
1
- {
2
- "name": "@qualitykit/engine",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
1
+ {
2
+ "name": "@qualitykit/engine",
3
+ "version": "0.3.0",
4
+ "description": "Shared SEO/AEO audit engine for QualityKit MCP and Cloud",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsc -p tsconfig.json",
19
+ "prepare": "tsc -p tsconfig.json",
20
+ "prepublishOnly": "npm run build",
21
+ "test": "echo \"engine tested via root suite\""
22
+ },
23
+ "publishConfig": {
24
+ "access": "public"
25
+ },
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "git+https://github.com/maxim-at-autonomiclabs/qualitykit.git",
29
+ "directory": "packages/engine"
30
+ },
31
+ "homepage": "https://qualitykit.dev",
32
+ "license": "MIT",
33
+ "engines": {
34
+ "node": ">=18"
35
+ },
36
+ "dependencies": {
37
+ "@types/node": "^22.15.29",
38
+ "typescript": "^5.8.3"
39
+ }
40
+ }
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.