@eightmedia/flightcheck 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/LICENSE +691 -0
  3. package/README.md +106 -2
  4. package/dist/analyze/fixManifest.d.ts +65 -0
  5. package/dist/analyze/fixManifest.d.ts.map +1 -0
  6. package/dist/analyze/fixManifest.js +588 -0
  7. package/dist/analyze/report.d.ts +283 -0
  8. package/dist/analyze/report.d.ts.map +1 -0
  9. package/dist/analyze/report.js +726 -0
  10. package/dist/analyze/reportTier1.d.ts +46 -0
  11. package/dist/analyze/reportTier1.d.ts.map +1 -0
  12. package/dist/analyze/reportTier1.js +251 -0
  13. package/dist/analyze/stack.d.ts +33 -0
  14. package/dist/analyze/stack.d.ts.map +1 -0
  15. package/dist/analyze/stack.js +188 -0
  16. package/dist/analyze/structuredReport.d.ts +62 -0
  17. package/dist/analyze/structuredReport.d.ts.map +1 -0
  18. package/dist/analyze/structuredReport.js +524 -0
  19. package/dist/analyze.d.ts +3 -0
  20. package/dist/analyze.d.ts.map +1 -0
  21. package/dist/analyze.js +40 -0
  22. package/dist/checks/agent-ready.d.ts +63 -0
  23. package/dist/checks/agent-ready.d.ts.map +1 -0
  24. package/dist/checks/agent-ready.js +219 -0
  25. package/dist/checks/analyze.d.ts +15 -0
  26. package/dist/checks/analyze.d.ts.map +1 -0
  27. package/dist/checks/analyze.js +63 -0
  28. package/dist/checks/crawl.d.ts +28 -0
  29. package/dist/checks/crawl.d.ts.map +1 -0
  30. package/dist/checks/crawl.js +86 -0
  31. package/dist/checks/dns.d.ts +25 -0
  32. package/dist/checks/dns.d.ts.map +1 -0
  33. package/dist/checks/dns.js +80 -0
  34. package/dist/checks/index.d.ts +24 -0
  35. package/dist/checks/index.d.ts.map +1 -0
  36. package/dist/checks/index.js +12 -0
  37. package/dist/checks/issues.d.ts +8 -0
  38. package/dist/checks/issues.d.ts.map +1 -0
  39. package/dist/checks/issues.js +3 -0
  40. package/dist/checks/redirect.d.ts +38 -0
  41. package/dist/checks/redirect.d.ts.map +1 -0
  42. package/dist/checks/redirect.js +209 -0
  43. package/dist/checks/registry.d.ts +8 -0
  44. package/dist/checks/registry.d.ts.map +1 -0
  45. package/dist/checks/registry.js +275 -0
  46. package/dist/checks/robots-txt.d.ts +16 -0
  47. package/dist/checks/robots-txt.d.ts.map +1 -0
  48. package/dist/checks/robots-txt.js +99 -0
  49. package/dist/checks/runner.d.ts +9 -0
  50. package/dist/checks/runner.d.ts.map +1 -0
  51. package/dist/checks/runner.js +110 -0
  52. package/dist/checks/security-headers.d.ts +12 -0
  53. package/dist/checks/security-headers.d.ts.map +1 -0
  54. package/dist/checks/security-headers.js +53 -0
  55. package/dist/checks/sitemap.d.ts +36 -0
  56. package/dist/checks/sitemap.d.ts.map +1 -0
  57. package/dist/checks/sitemap.js +140 -0
  58. package/dist/checks/types.d.ts +72 -0
  59. package/dist/checks/types.d.ts.map +1 -0
  60. package/dist/checks/types.js +20 -0
  61. package/dist/cli.d.ts +3 -0
  62. package/dist/cli.d.ts.map +1 -0
  63. package/dist/cli.js +125 -0
  64. package/dist/crawler/checkGroups.d.ts +7 -0
  65. package/dist/crawler/checkGroups.d.ts.map +1 -0
  66. package/dist/crawler/checkGroups.js +29 -0
  67. package/dist/crawler/crawlState.d.ts +7 -0
  68. package/dist/crawler/crawlState.d.ts.map +1 -0
  69. package/dist/crawler/crawlState.js +6 -0
  70. package/dist/crawler/defaults.d.ts +11 -0
  71. package/dist/crawler/defaults.d.ts.map +1 -0
  72. package/dist/crawler/defaults.js +10 -0
  73. package/dist/crawler/extractors.d.ts +5 -0
  74. package/dist/crawler/extractors.d.ts.map +1 -0
  75. package/dist/crawler/extractors.js +169 -0
  76. package/dist/crawler/jsAssets.d.ts +2 -0
  77. package/dist/crawler/jsAssets.d.ts.map +1 -0
  78. package/dist/crawler/jsAssets.js +22 -0
  79. package/dist/crawler/outputPaths.d.ts +14 -0
  80. package/dist/crawler/outputPaths.d.ts.map +1 -0
  81. package/dist/crawler/outputPaths.js +51 -0
  82. package/dist/crawler/reporter.d.ts +3 -0
  83. package/dist/crawler/reporter.d.ts.map +1 -0
  84. package/dist/crawler/reporter.js +12 -0
  85. package/dist/crawler/robots.d.ts +5 -0
  86. package/dist/crawler/robots.d.ts.map +1 -0
  87. package/dist/crawler/robots.js +29 -0
  88. package/dist/crawler/runCrawler.d.ts +22 -0
  89. package/dist/crawler/runCrawler.d.ts.map +1 -0
  90. package/dist/crawler/runCrawler.js +172 -0
  91. package/dist/crawler/schema.d.ts +87 -0
  92. package/dist/crawler/schema.d.ts.map +1 -0
  93. package/dist/crawler/schema.js +44 -0
  94. package/dist/crawler/secrets.d.ts +4 -0
  95. package/dist/crawler/secrets.d.ts.map +1 -0
  96. package/dist/crawler/secrets.js +70 -0
  97. package/dist/crawler/sitemap.d.ts +8 -0
  98. package/dist/crawler/sitemap.d.ts.map +1 -0
  99. package/dist/crawler/sitemap.js +105 -0
  100. package/dist/crawler/stack.d.ts +3 -0
  101. package/dist/crawler/stack.d.ts.map +1 -0
  102. package/dist/crawler/stack.js +1 -0
  103. package/dist/crawler/stackDetect.d.ts +24 -0
  104. package/dist/crawler/stackDetect.d.ts.map +1 -0
  105. package/dist/crawler/stackDetect.js +604 -0
  106. package/dist/crawler/tier1Extractors.d.ts +5 -0
  107. package/dist/crawler/tier1Extractors.d.ts.map +1 -0
  108. package/dist/crawler/tier1Extractors.js +255 -0
  109. package/dist/crawler/tracking.d.ts +8 -0
  110. package/dist/crawler/tracking.d.ts.map +1 -0
  111. package/dist/crawler/tracking.js +50 -0
  112. package/dist/crawler/urlUtils.d.ts +12 -0
  113. package/dist/crawler/urlUtils.d.ts.map +1 -0
  114. package/dist/crawler/urlUtils.js +53 -0
  115. package/dist/index.d.ts +14 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +7 -0
  118. package/docs/agent-fixes.md +17 -0
  119. package/docs/agent-ready.md +44 -0
  120. package/docs/analyze.md +103 -0
  121. package/docs/check-api.md +142 -0
  122. package/docs/checks.md +116 -0
  123. package/docs/crawler.md +158 -0
  124. package/docs/index.md +24 -0
  125. package/docs/qc-checks-plan.md +796 -0
  126. package/docs/stack.md +99 -0
  127. package/package.json +86 -4
package/README.md CHANGED
@@ -1,3 +1,107 @@
1
- # Temporary Holding Version
1
+ # Flightcheck
2
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.
3
+ Pre-launch website audit CLI and library.
4
+
5
+ Flightcheck crawls a site and checks what is wrong before go-live: missing meta tags,
6
+ accessibility issues, weak security headers, DNS settings, robots.txt and sitemap
7
+ mismatches, exposed secrets, and more. Every run produces:
8
+
9
+ - crawl data (`*-raw.json`)
10
+ - a structured report (`*-report.json`) — analysis facts + findings
11
+ - a plain-language Markdown report (`*-report.md`) rendered from that JSON
12
+
13
+ ## Install
14
+
15
+ ```bash
16
+ pnpm add -g @eightmedia/flightcheck
17
+ # or: npm install -g @eightmedia/flightcheck
18
+ ```
19
+
20
+ Or run without installing:
21
+
22
+ ```bash
23
+ pnpm dlx @eightmedia/flightcheck https://example.com
24
+ # or: npx @eightmedia/flightcheck https://example.com
25
+ ```
26
+
27
+ ## How it works
28
+
29
+ 1. **Crawl & checks** — pages are scanned and modular checks run (SEO, a11y, security,
30
+ infra, agent readiness).
31
+ 2. **Analyze** — issues become a flat `findings[]` list. Each finding has severity,
32
+ category, scope, and a short title/message. Site facts (stack, DNS, …) live under
33
+ `analysis`.
34
+ 3. **Reports** — `*-report.json` is the source of truth for tools; `*-report.md` is the
35
+ same data in readable form (grouped by severity for humans).
36
+
37
+ | Output | Audience | Purpose |
38
+ | --- | --- | --- |
39
+ | `*-raw.json` | Machine | Source data from all checks |
40
+ | `*-report.json` | Machine / tools | `analysis` + flat `findings[]` |
41
+ | `*-report.md` | Human | Plain-language report from the JSON |
42
+
43
+ See [docs/analyze.md](docs/analyze.md) for the report schema.
44
+
45
+ ## Quick start
46
+
47
+ ```bash
48
+ pnpm add -D @eightmedia/flightcheck
49
+ pnpm exec flightcheck https://example.com
50
+ ```
51
+
52
+ This writes timestamped files in `./flightcheck/`, for example:
53
+
54
+ - `./flightcheck/20260618.1413-example.com-raw.json`
55
+ - `./flightcheck/20260618.1413-example.com-report.json`
56
+ - `./flightcheck/20260618.1413-example.com-report.md`
57
+
58
+ By default this runs all implemented checks: crawl, security headers, DNS, robots.txt,
59
+ sitemap, agent readiness, and analyze. If the start URL is a domain redirect, only
60
+ redirect validation, DNS, and analyze run. Use `--checks crawl` to force a full crawl on
61
+ redirect domains. Use `--checks` for a subset, or `--json-only` for crawl JSON only.
62
+
63
+ Re-analyze an existing crawl without re-crawling:
64
+
65
+ ```bash
66
+ pnpm exec flightcheck-analyze ./flightcheck/20260618.1413-example.com-raw.json
67
+ ```
68
+
69
+ ## Documentation
70
+
71
+ - [What Flightcheck checks](docs/checks.md) — plain-language checklist
72
+ - [Analyze reports](docs/analyze.md) — `*-report.json` / `*-report.md`
73
+ - [Crawler](docs/crawler.md) — crawl CLI and flags
74
+ - [Check API](docs/check-api.md) — modular checks for developers
75
+ - [Stack detection](docs/stack.md)
76
+ - [Agent readiness](docs/agent-ready.md) — llms.txt, markdown negotiation, …
77
+ - [QC checks plan](docs/qc-checks-plan.md) — roadmap
78
+ - [Docs index](docs/index.md) · [Changelog](CHANGELOG.md)
79
+
80
+ ## Programmatic API
81
+
82
+ ```typescript
83
+ import { runChecks } from "@eightmedia/flightcheck";
84
+
85
+ const { outputs } = await runChecks({
86
+ startUrl: "https://example.com",
87
+ });
88
+
89
+ const report = outputs.analyze?.report;
90
+ // report.analysis.stack, report.findings, …
91
+ ```
92
+
93
+ ## Development
94
+
95
+ ```bash
96
+ nvm use # see .nvmrc
97
+ pnpm install
98
+ pnpm test
99
+ pnpm build
100
+ ```
101
+
102
+ ## License
103
+
104
+ Flightcheck is licensed under [GNU GPL v3.0](LICENSE). You may use, modify, and
105
+ distribute it under the GPL terms. Derivative works must also be open source under a
106
+ compatible license — it cannot be incorporated into closed-source products without
107
+ complying with the GPL (typically by open-sourcing the combined work).
@@ -0,0 +1,65 @@
1
+ import type { StackProfile } from "./stack.js";
2
+ import type { Tier1ReportData } from "./reportTier1.js";
3
+ import type { ReportRecord } from "./report.js";
4
+ import { defaultManifestPathForInput } from "../crawler/outputPaths.js";
5
+ export declare const FIX_MANIFEST_VERSION: 1;
6
+ export type LocationDiscovery = "search-codebase" | "hosting-panel" | "dns-panel" | "cms-studio" | "manual";
7
+ export type FixSurface = "repo" | "hosting" | "cms" | "dns" | "manual";
8
+ export type ManifestStackEntry = {
9
+ name: string;
10
+ categories: string[];
11
+ confidence: string;
12
+ scope: string;
13
+ evidence: string[];
14
+ };
15
+ export type ManifestIssue = {
16
+ id: string;
17
+ severity: string;
18
+ scope: string;
19
+ count?: number;
20
+ todo: string;
21
+ urls?: string[];
22
+ };
23
+ /**
24
+ * A crawled URL that is not a real fixable page (404/401/error — often emails, phone
25
+ * numbers, or dynamic-route placeholders crawled as paths). Surfaced for human review
26
+ * instead of generating "add metadata" todos against pages that do not exist.
27
+ */
28
+ export type ReviewItem = {
29
+ url: string;
30
+ status: number | null;
31
+ reason: string;
32
+ };
33
+ export type WorkPackage = {
34
+ id: string;
35
+ promptId: string;
36
+ fixSurface: FixSurface;
37
+ priority: number;
38
+ scope: string;
39
+ template?: string;
40
+ issues: ManifestIssue[];
41
+ locationDiscovery: LocationDiscovery;
42
+ searchHints: string[];
43
+ mcpServers: string[];
44
+ prTitle: string;
45
+ autoFixable: boolean;
46
+ };
47
+ export type FixManifest = {
48
+ version: typeof FIX_MANIFEST_VERSION;
49
+ generatedAt: string;
50
+ source: string;
51
+ reportPath: string;
52
+ redirectOnly: boolean;
53
+ stack: ManifestStackEntry[];
54
+ workPackages: WorkPackage[];
55
+ /** Non-200 crawled URLs that should be investigated, not auto-fixed. */
56
+ reviewItems: ReviewItem[];
57
+ };
58
+ export type BuildFixManifestOptions = {
59
+ redirectOnly?: boolean;
60
+ reportPath?: string;
61
+ stackProfile?: StackProfile;
62
+ };
63
+ export declare function buildFixManifest(sourcePath: string, records: ReportRecord[], tier1?: Tier1ReportData, options?: BuildFixManifestOptions): Promise<FixManifest>;
64
+ export { defaultManifestPathForInput };
65
+ //# sourceMappingURL=fixManifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixManifest.d.ts","sourceRoot":"","sources":["../../src/analyze/fixManifest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,2BAA2B,EAA6B,MAAM,2BAA2B,CAAC;AAEnG,eAAO,MAAM,oBAAoB,EAAG,CAAU,CAAC;AAE/C,MAAM,MAAM,iBAAiB,GACzB,iBAAiB,GACjB,eAAe,GACf,WAAW,GACX,YAAY,GACZ,QAAQ,CAAC;AAEb,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEvE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,OAAO,oBAAoB,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,wEAAwE;IACxE,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B,CAAC;AAgnBF,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,YAAY,EAAE,EACvB,KAAK,GAAE,eAAoB,EAC3B,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,WAAW,CAAC,CAyBtB;AAED,OAAO,EAAE,2BAA2B,EAAE,CAAC"}