pseolint 0.3.1 → 0.4.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/README.md +90 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +199 -13
- package/dist/cli.js.map +1 -1
- package/dist/commands/diff.d.ts +11 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +0 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +23 -0
- package/dist/config.js.map +1 -1
- package/dist/ensure-gitignore.d.ts +18 -0
- package/dist/ensure-gitignore.d.ts.map +1 -0
- package/dist/ensure-gitignore.js +86 -0
- package/dist/ensure-gitignore.js.map +1 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -4,6 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
The only tool purpose-built for **programmatic SEO compliance**. Audits page *relationships*, not just pages. Detects the exact patterns Google's SpamBrain targets.
|
|
6
6
|
|
|
7
|
+
## What's new in v0.4
|
|
8
|
+
|
|
9
|
+
v0.4 reshapes the audit output around a single **verdict** (`ready` / `caution` / `concerning` / `critical`) plus four category grades (`Integrity`, `Discoverability`, `Citation`, `Data`). The old numeric "SpamBrain Risk Score" is no longer the headline — it remains internally as `risk` for CI threshold tuning, trends, and alert gates, but operators ship on verdict, not on a number that needs a translation table.
|
|
10
|
+
|
|
11
|
+
By default the console output prints the verdict, four grades, and the top 3 fixes. Use `--explain` for the full bucketed list. CI gates use verdict severity (`--ci-threshold`) instead of a numeric risk threshold; the legacy `--threshold` flag is deprecated for one release.
|
|
12
|
+
|
|
13
|
+
See `docs/superpowers/specs/2026-04-29-pseolint-v0.4-engine-redesign.md` for the full design rationale.
|
|
14
|
+
|
|
7
15
|
## Install
|
|
8
16
|
|
|
9
17
|
```bash
|
|
@@ -26,17 +34,51 @@ npx pseolint http://localhost:3000
|
|
|
26
34
|
npx pseolint https://yoursite.com
|
|
27
35
|
|
|
28
36
|
# Audit a build directory
|
|
29
|
-
npx pseolint ./out --threshold
|
|
37
|
+
npx pseolint ./out --ci-threshold concerning
|
|
38
|
+
|
|
39
|
+
# Show every finding (default view shows verdict + grades + top 3 fixes)
|
|
40
|
+
npx pseolint http://localhost:3000 --explain
|
|
41
|
+
|
|
42
|
+
# Diff two audit runs (verdict, grades, fixed/regressed/new findings)
|
|
43
|
+
npx pseolint diff baseline.json current.json
|
|
30
44
|
|
|
31
45
|
# Save an HTML report
|
|
32
46
|
npx pseolint http://localhost:3000 --format html --output report.html
|
|
33
47
|
```
|
|
34
48
|
|
|
49
|
+
A typical first-run console looks like:
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
Verdict: CAUTION
|
|
53
|
+
Integrity A · Discoverability C · Citation F · Data A
|
|
54
|
+
|
|
55
|
+
3 blockers, 16 warnings — top fixes by impact:
|
|
56
|
+
1. /tools/* missing og:image (13 pages) → add to layout.tsx
|
|
57
|
+
pseolint.dev/rules/og-completeness
|
|
58
|
+
2. Symptom Article schema author (5 errors) → add author + datePublished
|
|
59
|
+
pseolint.dev/rules/schema-required-fields
|
|
60
|
+
3. /tools index thin unique words (1 error) → add 36 distinctive words
|
|
61
|
+
pseolint.dev/rules/unique-value
|
|
62
|
+
|
|
63
|
+
Run `pseolint --explain` for the full list.
|
|
64
|
+
```
|
|
65
|
+
|
|
35
66
|
## Options
|
|
36
67
|
|
|
37
68
|
```
|
|
38
69
|
-f, --format <type> console, json, markdown, html (default: "console")
|
|
39
|
-
-
|
|
70
|
+
--ci-threshold <severity> Verdict severity that fails CI: ready | caution |
|
|
71
|
+
concerning | critical (default: concerning).
|
|
72
|
+
Exit non-zero if the audit's verdict is at or worse
|
|
73
|
+
than the threshold.
|
|
74
|
+
-t, --threshold <n> [DEPRECATED — removed in v0.5] Numeric risk threshold.
|
|
75
|
+
Use --ci-threshold instead. When set, exits non-zero
|
|
76
|
+
if summary.risk >= n (low risk = good).
|
|
77
|
+
--explain Print every finding, bucketed by severity (blockers /
|
|
78
|
+
should-fix / informational). Default view is the
|
|
79
|
+
compact verdict + grades + top-3-fixes view.
|
|
80
|
+
--watch [planned, v0.4.1] Re-audit on source changes. Logs
|
|
81
|
+
a "not yet implemented" notice and exits in v0.4.0.
|
|
40
82
|
-o, --output <file> Write report to file
|
|
41
83
|
--no-color Disable colored output
|
|
42
84
|
--concurrency <n> Max parallel HTTP fetches (default: 5)
|
|
@@ -62,6 +104,21 @@ Render-mode analytics (v0.3.1+)
|
|
|
62
104
|
--block-host <host> Extra host substring to block (repeatable).
|
|
63
105
|
```
|
|
64
106
|
|
|
107
|
+
## Subcommands
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
pseolint diff <baseline> <current> Diff two AuditSummary JSON reports.
|
|
111
|
+
Shows verdict + grade deltas, fixed,
|
|
112
|
+
regressed, and new findings.
|
|
113
|
+
Exits non-zero if there are new
|
|
114
|
+
blockers since baseline.
|
|
115
|
+
|
|
116
|
+
pseolint stats Aggregate local telemetry.
|
|
117
|
+
pseolint stats-export <out> Copy telemetry JSONL for sharing.
|
|
118
|
+
pseolint cache stats|prune|clear Manage the HTTP fetch cache.
|
|
119
|
+
pseolint upload <report> Push a JSON report to pseolint Pro.
|
|
120
|
+
```
|
|
121
|
+
|
|
65
122
|
Press `ctrl-C` during an audit to cancel cleanly — in-flight fetches abort,
|
|
66
123
|
partial results are discarded. A second `ctrl-C` within ~1 s forces exit.
|
|
67
124
|
|
|
@@ -98,6 +155,36 @@ pseolint https://example.com --cache --cache-ttl 30d
|
|
|
98
155
|
|
|
99
156
|
Cached entries honor `ETag` / `Last-Modified` for 304 revalidation. When servers strip these headers, entries fall back to TTL-based freshness (default 7 days). Negative responses (4xx) are cached for 24h; 5xx are never cached. Redirects are stored as pointer entries so re-runs resolve without a network round-trip.
|
|
100
157
|
|
|
158
|
+
The cache is capped at **200 MB by default** (override with `--cache-max-mb`, `0` = unlimited). After each run, oldest-mtime entries are evicted until under the cap. This keeps large pSEO sites (5k+ URLs) from filling the disk — a single uncapped crawl of a 5k-page site can reach ~1.5 GB. Manage the cache explicitly:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
pseolint cache stats # size + file count
|
|
162
|
+
pseolint cache prune --max-mb 500 # evict down to 500 MB
|
|
163
|
+
pseolint cache clear # delete everything
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
On the first run in a git repo, the CLI appends `.pseolint/` to the repo's root `.gitignore` (opt-out: `--no-gitignore`) so you don't accidentally commit the cache. It never creates a `.gitignore` file from scratch.
|
|
167
|
+
|
|
168
|
+
### Auditing a localhost dev server
|
|
169
|
+
|
|
170
|
+
Crawling `http://localhost:3000` is valid, but watch the blast radius: every fetched page hits your dev server, which typically re-queries your database on every request (Next.js dev doesn't cache like production). On pSEO sites this means a full 5k-page crawl → 5k × (queries per page) = bursty database egress. If your dev server points at production or a metered DB (e.g. Supabase on a free tier), a single careless run can exhaust the egress quota. Mitigations:
|
|
171
|
+
|
|
172
|
+
- Use `--sample-size 50` while iterating on rules; run the full crawl only before releases.
|
|
173
|
+
- Point your local dev server at a disposable DB, not production.
|
|
174
|
+
- Keep `--cache` on so re-runs read cached entries instead of re-hitting the dev server.
|
|
175
|
+
|
|
176
|
+
### Auditing a live production site
|
|
177
|
+
|
|
178
|
+
pseolint is a polite crawler by default — it sets a distinct `User-Agent`, respects `robots.txt`, and honors `Crawl-delay`. But on large pSEO sites (thousands of URLs) the origin's cache strategy is what determines whether a full audit is free or painful. Before running against production:
|
|
179
|
+
|
|
180
|
+
1. **Confirm edge caching.** `curl -I https://yoursite.com/<one-pseo-url>` on a warm URL should show `x-vercel-cache: HIT` / `cf-cache-status: HIT` / similar. If every request hits your origin and DB, a 5k-URL crawl is 5k DB round-trips.
|
|
181
|
+
2. **Add `Crawl-delay: 1` to `robots.txt`.** pseolint forces concurrency to 1 and sleeps between requests when it sees this — effectively a hard rate limit that any polite crawler will follow.
|
|
182
|
+
3. **Canary first.** Run `pseolint https://yoursite.com --sample-size 20 --concurrency 2` and watch DB metrics (active connections, query p95) for 30 seconds. If anything spikes, fix caching before the full run.
|
|
183
|
+
4. **Start conservative.** `--concurrency 2 --safe-mode saas` for the first full audit; raise only after you've confirmed cache-hit ratio.
|
|
184
|
+
5. **Allowlist the User-Agent.** If your WAF/Cloudflare rate-limits bots, whitelist `pseolint/*` or the IP you're running from — otherwise mid-crawl 429s will corrupt the report.
|
|
185
|
+
|
|
186
|
+
If pSEO pages return CDN-cached responses for normal GET requests, the audit costs you effectively zero DB load regardless of page count.
|
|
187
|
+
|
|
101
188
|
### Run state + delta mode
|
|
102
189
|
|
|
103
190
|
Persist audit state across runs for CI/monitoring:
|
|
@@ -238,7 +325,7 @@ export default {
|
|
|
238
325
|
|
|
239
326
|
Counts only — no URLs, no page content, no API keys:
|
|
240
327
|
|
|
241
|
-
- Audit: `runId`, `timestamp`, `durationMs`, `
|
|
328
|
+
- Audit: `runId`, `timestamp`, `durationMs`, `verdict`, `risk`, `pageCount`, `findingCount`, optional `cacheStats`, optional `triage` metadata (model, token counts, cache hit, cost estimate). (`score` is retained as an alias for `risk` for backward compatibility through v0.4.)
|
|
242
329
|
- Feedback: `runId`, `timestamp`, `rating`.
|
|
243
330
|
|
|
244
331
|
### View
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAyGA,wBAAsB,MAAM,CAC1B,IAAI,GAAE,MAAM,EAA0B,GACrC,OAAO,CAAC,MAAM,CAAC,CAyLjB"}
|
package/dist/cli.js
CHANGED
|
@@ -4,10 +4,21 @@ import { realpathSync } from "node:fs";
|
|
|
4
4
|
import { createRequire } from "node:module";
|
|
5
5
|
import { writeFile } from "node:fs/promises";
|
|
6
6
|
import { fileURLToPath } from "node:url";
|
|
7
|
-
import { auditSource, formatConsole, formatJson, formatMarkdown, formatHtml, } from "@pseolint/core";
|
|
7
|
+
import { auditSource, formatConsole, formatJson, formatMarkdown, formatHtml, isLocalhostUrl, OriginDegradedError, } from "@pseolint/core";
|
|
8
8
|
import { loadConfig, mergeOptions } from "./config.js";
|
|
9
9
|
const require = createRequire(import.meta.url);
|
|
10
10
|
const { version } = require("../package.json");
|
|
11
|
+
// Verdict ladder for --ci-threshold gating. Lower = better; we exit non-zero
|
|
12
|
+
// when the audit's verdict is at or worse than the configured threshold.
|
|
13
|
+
const VERDICT_RANK = {
|
|
14
|
+
ready: 0,
|
|
15
|
+
caution: 1,
|
|
16
|
+
concerning: 2,
|
|
17
|
+
critical: 3,
|
|
18
|
+
};
|
|
19
|
+
const VERDICT_LADDER = ["ready", "caution", "concerning", "critical"];
|
|
20
|
+
// Default CI threshold: exit non-zero only on `concerning` or worse.
|
|
21
|
+
const DEFAULT_CI_THRESHOLD = "concerning";
|
|
11
22
|
const formatters = {
|
|
12
23
|
console: formatConsole,
|
|
13
24
|
json: formatJson,
|
|
@@ -23,7 +34,10 @@ export async function runCli(args = process.argv.slice(2)) {
|
|
|
23
34
|
.version(version)
|
|
24
35
|
.argument("[source]", "Directory path or URL to audit")
|
|
25
36
|
.option("-f, --format <type>", "Output format: console, json, markdown, html", "console")
|
|
26
|
-
.option("-
|
|
37
|
+
.option("--ci-threshold <severity>", "Verdict severity that fails CI: ready | caution | concerning | critical (default: concerning)")
|
|
38
|
+
.option("-t, --threshold <n>", "[deprecated] Numeric risk threshold; use --ci-threshold instead")
|
|
39
|
+
.option("--explain", "Print every bucketed finding (default view shows verdict + grades + top 3 fixes)")
|
|
40
|
+
.option("--watch", "[planned, v0.4.1] Re-audit on source changes (not yet implemented)")
|
|
27
41
|
.option("-o, --output <file>", "Write report to file instead of stdout")
|
|
28
42
|
.option("--no-color", "Disable colored output")
|
|
29
43
|
.option("--concurrency <n>", "Max parallel HTTP fetches", "5")
|
|
@@ -32,10 +46,20 @@ export async function runCli(args = process.argv.slice(2)) {
|
|
|
32
46
|
.option("--ignore <patterns>", "Comma-separated glob patterns to exclude")
|
|
33
47
|
.option("--render", "Render pages in a browser before auditing")
|
|
34
48
|
.option("--browser-ws <url>", "CDP WebSocket endpoint for browser rendering")
|
|
49
|
+
.option("--analytics <mode>", "Render-mode analytics handling: block | allow | allow-first-party (default: block)", "block")
|
|
50
|
+
.option("--block-host <host>", "Extra host substring to block in render mode (repeatable)", (v, acc) => [...acc, v], [])
|
|
51
|
+
.option("--safe-mode <mode>", "Safety preset: saas (guardSsrf + tight caps) | cli (default) | dev (tiny crawl for localhost)")
|
|
52
|
+
.option("--full", "Disable the automatic 'dev' preset for localhost sources — run a full crawl")
|
|
53
|
+
.option("--strict", "Run all rules regardless of detected site type (bypass pSEO-only rule suppression on small sites)")
|
|
54
|
+
.option("--no-backpressure", "Disable the in-flight watchdog that aborts audits when origin latency or 5xx rate spikes")
|
|
55
|
+
.option("--no-respect-robots", "Audit sitemap URLs even if the target's robots.txt Disallows them")
|
|
56
|
+
.option("--no-follow-redirects", "Don't follow 3xx redirects — report them as-is")
|
|
35
57
|
.option("--no-crawl", "Disable crawl-based page discovery for URL sources")
|
|
36
58
|
.option("--data-source <file>", "JSON file with source data for content verification")
|
|
37
59
|
.option("--cache [dir]", "Enable HTTP cache (default dir: .pseolint/cache)")
|
|
38
60
|
.option("--cache-ttl <duration>", "Cache TTL for entries without validators, e.g. 7d, 1h, 30m", "7d")
|
|
61
|
+
.option("--cache-max-mb <n>", "Max cache size in MB (evicts oldest after run; 0 = unlimited). Default: 200", (v) => parseInt(v, 10))
|
|
62
|
+
.option("--no-gitignore", "Don't auto-append .pseolint/ to the repo's .gitignore")
|
|
39
63
|
.option("--strategy <random|stratified>", "Sampling strategy when --sample-size is set", "stratified")
|
|
40
64
|
.option("--max-per-template <n>", "Cap samples per URL template cluster", "0")
|
|
41
65
|
.option("--state [path]", "Enable state persistence (default path: .pseolint/state.json)")
|
|
@@ -89,6 +113,14 @@ export async function runCli(args = process.argv.slice(2)) {
|
|
|
89
113
|
exitCode = 1;
|
|
90
114
|
}
|
|
91
115
|
});
|
|
116
|
+
program
|
|
117
|
+
.command("diff <baseline> <current>")
|
|
118
|
+
.description("Diff two AuditSummary JSON reports — verdict + grade deltas, fixed/regressed/new findings")
|
|
119
|
+
.option("--no-color", "Disable colored output")
|
|
120
|
+
.action(async (baselinePath, currentPath, opts) => {
|
|
121
|
+
const { runDiffCommand } = await import("./commands/diff.js");
|
|
122
|
+
exitCode = await runDiffCommand(baselinePath, currentPath, { noColor: !opts.color });
|
|
123
|
+
});
|
|
92
124
|
program
|
|
93
125
|
.command("upload <report>")
|
|
94
126
|
.description("Upload an audit JSON report to the pseolint Pro ingestion endpoint")
|
|
@@ -111,6 +143,38 @@ export async function runCli(args = process.argv.slice(2)) {
|
|
|
111
143
|
process.exit(1);
|
|
112
144
|
}
|
|
113
145
|
});
|
|
146
|
+
const cacheCmd = program
|
|
147
|
+
.command("cache")
|
|
148
|
+
.description("Manage the HTTP fetch cache (.pseolint/cache by default)");
|
|
149
|
+
cacheCmd
|
|
150
|
+
.command("stats")
|
|
151
|
+
.description("Show cache size and file count")
|
|
152
|
+
.option("--dir <path>", "Cache directory", ".pseolint/cache")
|
|
153
|
+
.action(async (opts) => {
|
|
154
|
+
const { getCacheSizeInfo } = await import("@pseolint/core");
|
|
155
|
+
const info = await getCacheSizeInfo(opts.dir);
|
|
156
|
+
process.stdout.write(`${opts.dir}: ${info.fileCount} entries, ${(info.bytes / 1024 / 1024).toFixed(2)} MB\n`);
|
|
157
|
+
});
|
|
158
|
+
cacheCmd
|
|
159
|
+
.command("prune")
|
|
160
|
+
.description("Evict oldest entries until cache is under the size cap")
|
|
161
|
+
.option("--dir <path>", "Cache directory", ".pseolint/cache")
|
|
162
|
+
.option("--max-mb <n>", "Max size in MB (default: 200)", (v) => parseInt(v, 10), 200)
|
|
163
|
+
.action(async (opts) => {
|
|
164
|
+
const { pruneCache } = await import("@pseolint/core");
|
|
165
|
+
const result = await pruneCache(opts.dir, opts.maxMb * 1024 * 1024);
|
|
166
|
+
const freedMb = ((result.before.bytes - result.after.bytes) / 1024 / 1024).toFixed(2);
|
|
167
|
+
process.stdout.write(`${opts.dir}: freed ${freedMb} MB (${result.removedEntries} entries, ${result.removedTmpFiles} .tmp); size now ${(result.after.bytes / 1024 / 1024).toFixed(2)} MB\n`);
|
|
168
|
+
});
|
|
169
|
+
cacheCmd
|
|
170
|
+
.command("clear")
|
|
171
|
+
.description("Delete every entry in the cache directory")
|
|
172
|
+
.option("--dir <path>", "Cache directory", ".pseolint/cache")
|
|
173
|
+
.action(async (opts) => {
|
|
174
|
+
const { clearCache } = await import("@pseolint/core");
|
|
175
|
+
const { removed } = await clearCache(opts.dir);
|
|
176
|
+
process.stdout.write(`${opts.dir}: cleared ${removed} entries\n`);
|
|
177
|
+
});
|
|
114
178
|
await program.parseAsync(args, { from: "user" });
|
|
115
179
|
return exitCode;
|
|
116
180
|
}
|
|
@@ -125,10 +189,29 @@ async function runAudit(source, opts) {
|
|
|
125
189
|
process.stderr.write("Error: source argument is required. Run `pseolint --help` for usage.\n");
|
|
126
190
|
return 1;
|
|
127
191
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
192
|
+
if (opts.watch) {
|
|
193
|
+
process.stderr.write("pseolint: watch mode not yet implemented in v0.4.0; coming in v0.4.1.\n");
|
|
194
|
+
return 0;
|
|
195
|
+
}
|
|
196
|
+
// Resolve verdict-severity threshold for CI gating (v0.4).
|
|
197
|
+
// --ci-threshold takes precedence; --threshold is the deprecated numeric alias.
|
|
198
|
+
let ciThreshold = DEFAULT_CI_THRESHOLD;
|
|
199
|
+
let legacyRiskThreshold = null;
|
|
200
|
+
if (opts.ciThreshold !== undefined) {
|
|
201
|
+
if (!isVerdict(opts.ciThreshold)) {
|
|
202
|
+
console.error(`Error: --ci-threshold must be one of: ${VERDICT_LADDER.join(" | ")}, got "${opts.ciThreshold}"`);
|
|
203
|
+
return 1;
|
|
204
|
+
}
|
|
205
|
+
ciThreshold = opts.ciThreshold;
|
|
206
|
+
}
|
|
207
|
+
if (opts.threshold !== undefined) {
|
|
208
|
+
process.stderr.write(`warning: --threshold is deprecated, use --ci-threshold ${ciThreshold} instead\n`);
|
|
209
|
+
const parsed = Number(opts.threshold);
|
|
210
|
+
if (Number.isNaN(parsed)) {
|
|
211
|
+
console.error(`Error: --threshold must be a number, got "${opts.threshold}"`);
|
|
212
|
+
return 1;
|
|
213
|
+
}
|
|
214
|
+
legacyRiskThreshold = parsed;
|
|
132
215
|
}
|
|
133
216
|
const format = opts.format;
|
|
134
217
|
if (!formatters[format]) {
|
|
@@ -142,16 +225,34 @@ async function runAudit(source, opts) {
|
|
|
142
225
|
timeout: opts.timeout !== "30000" ? Number(opts.timeout) : undefined,
|
|
143
226
|
sampleSize: opts.sampleSize !== "0" ? Number(opts.sampleSize) : undefined,
|
|
144
227
|
ignore: opts.ignore ? opts.ignore.split(",").map((s) => s.trim()) : undefined,
|
|
145
|
-
render: opts.render
|
|
228
|
+
render: opts.render
|
|
229
|
+
? {
|
|
230
|
+
browserWsEndpoint: opts.browserWs,
|
|
231
|
+
analyticsMode: opts.analytics === "allow" || opts.analytics === "allow-first-party"
|
|
232
|
+
? opts.analytics
|
|
233
|
+
: "block",
|
|
234
|
+
extraBlockedHosts: opts.blockHost && opts.blockHost.length > 0 ? opts.blockHost : undefined,
|
|
235
|
+
}
|
|
236
|
+
: undefined,
|
|
146
237
|
crawlDiscovery: opts.crawl === false ? false : undefined,
|
|
147
238
|
samplingStrategy: opts.strategy === "random" ? "random" : "stratified",
|
|
148
239
|
maxPerTemplate: opts.maxPerTemplate !== "0" ? Number(opts.maxPerTemplate) : undefined,
|
|
240
|
+
safeMode: opts.safeMode === "saas" || opts.safeMode === "cli" || opts.safeMode === "dev" ? opts.safeMode : undefined,
|
|
241
|
+
autoDevPreset: opts.full ? false : undefined,
|
|
242
|
+
backpressure: opts.backpressure === false ? false : undefined,
|
|
243
|
+
respectRobotsTxt: opts.respectRobots === false ? false : undefined,
|
|
244
|
+
followRedirects: opts.followRedirects === false ? false : undefined,
|
|
245
|
+
strict: opts.strict === true ? true : undefined,
|
|
149
246
|
};
|
|
150
247
|
if (opts.cache) {
|
|
151
248
|
try {
|
|
249
|
+
const maxBytes = typeof opts.cacheMaxMb === "number" && Number.isFinite(opts.cacheMaxMb)
|
|
250
|
+
? opts.cacheMaxMb * 1024 * 1024
|
|
251
|
+
: undefined;
|
|
152
252
|
cliFlags.cache = {
|
|
153
253
|
dir: typeof opts.cache === "string" ? opts.cache : undefined,
|
|
154
254
|
ttlMs: parseDuration(opts.cacheTtl),
|
|
255
|
+
...(maxBytes !== undefined && { maxBytes }),
|
|
155
256
|
};
|
|
156
257
|
}
|
|
157
258
|
catch (err) {
|
|
@@ -217,6 +318,49 @@ async function runAudit(source, opts) {
|
|
|
217
318
|
cliFlags.telemetry = telemetry;
|
|
218
319
|
}
|
|
219
320
|
const options = mergeOptions(configFile, cliFlags);
|
|
321
|
+
// Localhost ergonomics: a cache-cold first run against `http://localhost`
|
|
322
|
+
// can thundering-herd a dev server's DB. Two mitigations — both opt-out:
|
|
323
|
+
// 1) auto-promote to the "dev" safeMode preset (tiny crawl budget)
|
|
324
|
+
// 2) default-on cache so re-runs are cheap and idempotent
|
|
325
|
+
const sourceLooksLocalhost = isLocalhostUrl(source);
|
|
326
|
+
const devPresetWillApply = sourceLooksLocalhost &&
|
|
327
|
+
options.safeMode === undefined &&
|
|
328
|
+
options.autoDevPreset !== false;
|
|
329
|
+
if (devPresetWillApply) {
|
|
330
|
+
console.error("pseolint: localhost detected — applying 'dev' preset (concurrency=1, sampleSize=25, maxCrawlDiscovered=50). Override with --full or --safe-mode cli.");
|
|
331
|
+
}
|
|
332
|
+
if (sourceLooksLocalhost && !opts.cache && options.cache === undefined) {
|
|
333
|
+
// Opt-in by default for localhost only. We don't flip this for public
|
|
334
|
+
// sources because users expect `--cache` to be explicit there.
|
|
335
|
+
try {
|
|
336
|
+
const defaultCache = { ttlMs: parseDuration(opts.cacheTtl) };
|
|
337
|
+
options.cache = defaultCache;
|
|
338
|
+
cliFlags.cache = defaultCache;
|
|
339
|
+
console.error("pseolint: localhost detected — HTTP cache enabled by default (clear .pseolint/cache to force a cold run).");
|
|
340
|
+
}
|
|
341
|
+
catch {
|
|
342
|
+
// parseDuration already validated at --cache path; swallow here.
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
// When this run will produce files under `.pseolint/`, make sure the repo's
|
|
346
|
+
// .gitignore covers it. Prevents users accidentally committing 1 GB+ of
|
|
347
|
+
// cached HTML on pSEO sites. Opt-out via `--no-gitignore`.
|
|
348
|
+
const willWriteUnderPseolint = Boolean(cliFlags.cache) ||
|
|
349
|
+
Boolean(cliFlags.state) ||
|
|
350
|
+
Boolean(cliFlags.telemetry?.enabled || cliFlags.telemetry?.path) ||
|
|
351
|
+
(cliFlags.ai?.enabled === true && cliFlags.ai?.cache !== false);
|
|
352
|
+
if (willWriteUnderPseolint && opts.gitignore !== false) {
|
|
353
|
+
try {
|
|
354
|
+
const { ensurePseolintGitignored } = await import("./ensure-gitignore.js");
|
|
355
|
+
const result = await ensurePseolintGitignored(process.cwd());
|
|
356
|
+
if (result.modified) {
|
|
357
|
+
console.error(`pseolint: added .pseolint/ to ${result.gitignorePath} (disable via --no-gitignore)`);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
catch {
|
|
361
|
+
// Non-fatal: gitignore tweak must never block an audit.
|
|
362
|
+
}
|
|
363
|
+
}
|
|
220
364
|
if (opts.dataSource) {
|
|
221
365
|
const { loadDataSource } = await import("@pseolint/core");
|
|
222
366
|
try {
|
|
@@ -230,25 +374,54 @@ async function runAudit(source, opts) {
|
|
|
230
374
|
return 1;
|
|
231
375
|
}
|
|
232
376
|
}
|
|
377
|
+
// SIGINT (ctrl-C) triggers a clean abort — in-flight fetches cancel and the
|
|
378
|
+
// audit throws AbortError instead of the process being hard-killed mid-fetch
|
|
379
|
+
// with the stream half-read. Second SIGINT within ~1s forces immediate exit.
|
|
380
|
+
const abortController = new AbortController();
|
|
381
|
+
let sigintCount = 0;
|
|
382
|
+
const sigintHandler = () => {
|
|
383
|
+
sigintCount += 1;
|
|
384
|
+
if (sigintCount === 1) {
|
|
385
|
+
console.error("\npseolint: received SIGINT, aborting audit (ctrl-C again to force exit)...");
|
|
386
|
+
abortController.abort(new Error("Aborted by SIGINT"));
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
console.error("pseolint: forcing exit.");
|
|
390
|
+
process.exit(130);
|
|
391
|
+
}
|
|
392
|
+
};
|
|
393
|
+
process.on("SIGINT", sigintHandler);
|
|
233
394
|
// Run audit
|
|
234
395
|
let summary;
|
|
235
396
|
try {
|
|
236
|
-
summary = await auditSource(source, options);
|
|
397
|
+
summary = await auditSource(source, { ...options, signal: options.signal ?? abortController.signal });
|
|
237
398
|
}
|
|
238
399
|
catch (err) {
|
|
400
|
+
if (err instanceof OriginDegradedError) {
|
|
401
|
+
console.error(`\npseolint: aborted — origin looks degraded.\n` +
|
|
402
|
+
` ${err.message}\n` +
|
|
403
|
+
` Options: wait for the origin to recover, re-run with --concurrency 1, ` +
|
|
404
|
+
`or run --no-backpressure to override (not recommended on production DBs).`);
|
|
405
|
+
return 1;
|
|
406
|
+
}
|
|
239
407
|
const message = err instanceof Error ? err.message : String(err);
|
|
240
408
|
console.error(`Error: ${message}`);
|
|
241
409
|
return 1;
|
|
242
410
|
}
|
|
411
|
+
finally {
|
|
412
|
+
process.off("SIGINT", sigintHandler);
|
|
413
|
+
}
|
|
243
414
|
if (summary.cacheStats && summary.cacheStats.total > 0) {
|
|
244
415
|
const { hits, total, bytesSavedEstimate } = summary.cacheStats;
|
|
245
416
|
const mb = (bytesSavedEstimate / (1024 * 1024)).toFixed(2);
|
|
246
417
|
console.error(`Cache: ${hits}/${total} hits (${mb} MB saved)`);
|
|
247
418
|
}
|
|
248
|
-
// Format output
|
|
419
|
+
// Format output. The console formatter accepts noColor + verbose; non-console
|
|
420
|
+
// formatters accept verbose. The formatter-rewrite agent owns these signatures.
|
|
421
|
+
const verbose = Boolean(opts.explain);
|
|
249
422
|
const output = format === "console"
|
|
250
|
-
? formatConsole(summary, { noColor: !opts.color })
|
|
251
|
-
: formatters[format](summary);
|
|
423
|
+
? formatConsole(summary, { noColor: !opts.color, verbose })
|
|
424
|
+
: formatters[format](summary, { verbose });
|
|
252
425
|
// Write or print
|
|
253
426
|
if (opts.output) {
|
|
254
427
|
const { dirname } = await import("node:path");
|
|
@@ -260,14 +433,27 @@ async function runAudit(source, opts) {
|
|
|
260
433
|
else {
|
|
261
434
|
console.log(output);
|
|
262
435
|
}
|
|
263
|
-
// Exit code based on
|
|
264
|
-
|
|
436
|
+
// Exit code based on verdict severity (v0.4) + regression.
|
|
437
|
+
// Default: --ci-threshold concerning → exit 1 if verdict is concerning or critical.
|
|
438
|
+
let exitCode = 0;
|
|
439
|
+
const verdictRank = VERDICT_RANK[summary.verdict];
|
|
440
|
+
const thresholdRank = VERDICT_RANK[ciThreshold];
|
|
441
|
+
if (verdictRank >= thresholdRank) {
|
|
442
|
+
exitCode = 1;
|
|
443
|
+
}
|
|
444
|
+
// Legacy --threshold alias: gates on summary.risk >= n (low risk = good).
|
|
445
|
+
if (legacyRiskThreshold !== null && summary.risk >= legacyRiskThreshold) {
|
|
446
|
+
exitCode = Math.max(exitCode, 1);
|
|
447
|
+
}
|
|
265
448
|
if (summary.hasRegression) {
|
|
266
449
|
console.error("Regression detected: new rule IDs fired vs prior state");
|
|
267
450
|
exitCode = Math.max(exitCode, 1);
|
|
268
451
|
}
|
|
269
452
|
return exitCode;
|
|
270
453
|
}
|
|
454
|
+
function isVerdict(v) {
|
|
455
|
+
return VERDICT_LADDER.includes(v);
|
|
456
|
+
}
|
|
271
457
|
function renderStats(stats) {
|
|
272
458
|
const NA = "—";
|
|
273
459
|
const formatDuration = (ms) => {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AuditSummary } from "@pseolint/core";
|
|
2
|
+
export interface DiffOptions {
|
|
3
|
+
noColor?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export interface DiffResult {
|
|
6
|
+
output: string;
|
|
7
|
+
newBlockerCount: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function diffSummaries(baseline: AuditSummary, current: AuditSummary, options?: DiffOptions): DiffResult;
|
|
10
|
+
export declare function runDiffCommand(baselinePath: string, currentPath: string, options?: DiffOptions): Promise<number>;
|
|
11
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAA2D,MAAM,gBAAgB,CAAC;AAsG5G,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE,WAAgB,GACxB,UAAU,CAoGZ;AAED,wBAAsB,cAAc,CAClC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,MAAM,CAAC,CA6BjB"}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -7,14 +7,24 @@ export interface CliFlags {
|
|
|
7
7
|
ignore?: string[];
|
|
8
8
|
render?: {
|
|
9
9
|
browserWsEndpoint?: string;
|
|
10
|
+
analyticsMode?: "block" | "allow" | "allow-first-party";
|
|
11
|
+
extraBlockedHosts?: string[];
|
|
10
12
|
};
|
|
11
13
|
crawlDiscovery?: boolean;
|
|
12
14
|
cache?: {
|
|
13
15
|
dir?: string;
|
|
14
16
|
ttlMs: number;
|
|
17
|
+
maxBytes?: number;
|
|
15
18
|
};
|
|
16
19
|
samplingStrategy?: "stratified" | "random";
|
|
17
20
|
maxPerTemplate?: number;
|
|
21
|
+
safeMode?: "saas" | "cli" | "dev";
|
|
22
|
+
autoDevPreset?: boolean;
|
|
23
|
+
backpressure?: boolean;
|
|
24
|
+
respectRobotsTxt?: boolean;
|
|
25
|
+
followRedirects?: boolean;
|
|
26
|
+
/** v0.4 §4.11: bypass site-classification rule suppression. */
|
|
27
|
+
strict?: boolean;
|
|
18
28
|
state?: {
|
|
19
29
|
path?: string;
|
|
20
30
|
since?: boolean;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA6FnD,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,CAUxD;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE;QACP,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,aAAa,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,mBAAmB,CAAC;QACxD,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC9B,CAAC;IACF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,gBAAgB,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,+DAA+D;IAC/D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACvE,EAAE,CAAC,EAAE;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,KAAK,CAAC;KACpC,CAAC;IACF,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;KACpC,CAAC;CACH;AAED,wBAAgB,YAAY,CAC1B,UAAU,EAAE,YAAY,EACxB,QAAQ,EAAE,QAAQ,GACjB,YAAY,CAkDd"}
|
package/dist/config.js
CHANGED
|
@@ -33,6 +33,8 @@ const auditOptionsSchema = z.object({
|
|
|
33
33
|
})).optional(),
|
|
34
34
|
render: z.object({
|
|
35
35
|
browserWsEndpoint: z.string().optional(),
|
|
36
|
+
analyticsMode: z.enum(["block", "allow", "allow-first-party"]).optional(),
|
|
37
|
+
extraBlockedHosts: z.array(z.string()).optional(),
|
|
36
38
|
}).optional(),
|
|
37
39
|
crawlDiscovery: z.boolean().optional(),
|
|
38
40
|
templateGenerated: z.boolean().optional(),
|
|
@@ -44,6 +46,7 @@ const auditOptionsSchema = z.object({
|
|
|
44
46
|
cache: z.object({
|
|
45
47
|
dir: z.string().optional(),
|
|
46
48
|
ttlMs: z.number().optional(),
|
|
49
|
+
maxBytes: z.number().optional(),
|
|
47
50
|
}).optional(),
|
|
48
51
|
state: z.object({
|
|
49
52
|
path: z.string().optional(),
|
|
@@ -52,6 +55,14 @@ const auditOptionsSchema = z.object({
|
|
|
52
55
|
}).optional(),
|
|
53
56
|
samplingStrategy: z.enum(["stratified", "random"]).optional(),
|
|
54
57
|
maxPerTemplate: z.number().optional(),
|
|
58
|
+
safeMode: z.enum(["saas", "cli", "dev"]).optional(),
|
|
59
|
+
autoDevPreset: z.boolean().optional(),
|
|
60
|
+
backpressure: z.boolean().optional(),
|
|
61
|
+
respectRobotsTxt: z.boolean().optional(),
|
|
62
|
+
followRedirects: z.boolean().optional(),
|
|
63
|
+
strict: z.boolean().optional(),
|
|
64
|
+
maxCrawlDiscovered: z.number().optional(),
|
|
65
|
+
guardSsrf: z.boolean().optional(),
|
|
55
66
|
ai: z.object({
|
|
56
67
|
enabled: z.boolean().optional(),
|
|
57
68
|
provider: z.string().optional(),
|
|
@@ -107,6 +118,18 @@ export function mergeOptions(configFile, cliFlags) {
|
|
|
107
118
|
result.samplingStrategy = cliFlags.samplingStrategy;
|
|
108
119
|
if (cliFlags.maxPerTemplate !== undefined)
|
|
109
120
|
result.maxPerTemplate = cliFlags.maxPerTemplate;
|
|
121
|
+
if (cliFlags.safeMode !== undefined)
|
|
122
|
+
result.safeMode = cliFlags.safeMode;
|
|
123
|
+
if (cliFlags.autoDevPreset !== undefined)
|
|
124
|
+
result.autoDevPreset = cliFlags.autoDevPreset;
|
|
125
|
+
if (cliFlags.backpressure !== undefined)
|
|
126
|
+
result.backpressure = cliFlags.backpressure;
|
|
127
|
+
if (cliFlags.respectRobotsTxt !== undefined)
|
|
128
|
+
result.respectRobotsTxt = cliFlags.respectRobotsTxt;
|
|
129
|
+
if (cliFlags.followRedirects !== undefined)
|
|
130
|
+
result.followRedirects = cliFlags.followRedirects;
|
|
131
|
+
if (cliFlags.strict !== undefined)
|
|
132
|
+
result.strict = cliFlags.strict;
|
|
110
133
|
if (cliFlags.state !== undefined)
|
|
111
134
|
result.state = cliFlags.state;
|
|
112
135
|
if (cliFlags.ai !== undefined) {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,WAAW,GAAG,CAAC;KAClB,MAAM,CAAC;IACN,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACrC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACpC,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7C,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1C,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1C,4BAA4B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnD,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1C,+BAA+B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtD,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1C,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/C,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1C,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1C,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5C,yBAAyB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChD,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChD,CAAC;KACD,QAAQ,EAAE,CAAC;AAEd,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,KAAK,EAAE,WAAW;IAClB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACtC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;QACxC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACrC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;KAC9E,CAAC,CAAC,CAAC,QAAQ,EAAE;IACd,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface EnsureGitignoreResult {
|
|
2
|
+
/** Absolute path to the .gitignore that was checked/modified. Null if no repo found. */
|
|
3
|
+
gitignorePath: string | null;
|
|
4
|
+
/** True when we appended .pseolint/. False when already ignored, not a repo, or skipped. */
|
|
5
|
+
modified: boolean;
|
|
6
|
+
/** Short human-readable reason, for verbose logging. */
|
|
7
|
+
reason: "appended" | "already-ignored" | "no-repo" | "no-gitignore-file" | "error";
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Ensure the nearest git repo's root `.gitignore` excludes `.pseolint/`. No-op
|
|
11
|
+
* if CWD isn't inside a git repo, or the file already ignores the folder.
|
|
12
|
+
*
|
|
13
|
+
* Never creates `.gitignore` from scratch — only appends when the file already
|
|
14
|
+
* exists. (A repo with no `.gitignore` is often intentional; we don't want to
|
|
15
|
+
* surprise users with a new tracked file.)
|
|
16
|
+
*/
|
|
17
|
+
export declare function ensurePseolintGitignored(cwd: string): Promise<EnsureGitignoreResult>;
|
|
18
|
+
//# sourceMappingURL=ensure-gitignore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensure-gitignore.d.ts","sourceRoot":"","sources":["../src/ensure-gitignore.ts"],"names":[],"mappings":"AA8CA,MAAM,WAAW,qBAAqB;IACpC,wFAAwF;IACxF,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,4FAA4F;IAC5F,QAAQ,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,MAAM,EAAE,UAAU,GAAG,iBAAiB,GAAG,SAAS,GAAG,mBAAmB,GAAG,OAAO,CAAC;CACpF;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA6B1F"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { access, appendFile, readFile, stat } from "node:fs/promises";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
const GITIGNORE_BLOCK = `
|
|
4
|
+
# pseolint runtime (cache, state, telemetry — can reach 1 GB+ on large pSEO sites)
|
|
5
|
+
.pseolint/
|
|
6
|
+
`;
|
|
7
|
+
/** Patterns that already effectively ignore `.pseolint/`. Matched line-by-line, trimmed. */
|
|
8
|
+
const ALREADY_IGNORED_PATTERNS = [
|
|
9
|
+
".pseolint",
|
|
10
|
+
".pseolint/",
|
|
11
|
+
"/.pseolint",
|
|
12
|
+
"/.pseolint/",
|
|
13
|
+
".pseolint/*",
|
|
14
|
+
"**/.pseolint",
|
|
15
|
+
"**/.pseolint/",
|
|
16
|
+
];
|
|
17
|
+
/** Walk up from `start` looking for a `.git` entry. Returns the containing dir, or null. */
|
|
18
|
+
async function findRepoRoot(start) {
|
|
19
|
+
let dir = start;
|
|
20
|
+
// Cap depth to avoid walking the whole drive on orphaned paths.
|
|
21
|
+
for (let i = 0; i < 40; i += 1) {
|
|
22
|
+
try {
|
|
23
|
+
const s = await stat(join(dir, ".git"));
|
|
24
|
+
if (s.isDirectory() || s.isFile())
|
|
25
|
+
return dir;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// .git not here — keep walking up.
|
|
29
|
+
}
|
|
30
|
+
const parent = dirname(dir);
|
|
31
|
+
if (parent === dir)
|
|
32
|
+
return null;
|
|
33
|
+
dir = parent;
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
function alreadyIgnored(contents) {
|
|
38
|
+
for (const line of contents.split(/\r?\n/)) {
|
|
39
|
+
const trimmed = line.trim();
|
|
40
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
41
|
+
continue;
|
|
42
|
+
if (ALREADY_IGNORED_PATTERNS.includes(trimmed))
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Ensure the nearest git repo's root `.gitignore` excludes `.pseolint/`. No-op
|
|
49
|
+
* if CWD isn't inside a git repo, or the file already ignores the folder.
|
|
50
|
+
*
|
|
51
|
+
* Never creates `.gitignore` from scratch — only appends when the file already
|
|
52
|
+
* exists. (A repo with no `.gitignore` is often intentional; we don't want to
|
|
53
|
+
* surprise users with a new tracked file.)
|
|
54
|
+
*/
|
|
55
|
+
export async function ensurePseolintGitignored(cwd) {
|
|
56
|
+
const root = await findRepoRoot(cwd);
|
|
57
|
+
if (!root)
|
|
58
|
+
return { gitignorePath: null, modified: false, reason: "no-repo" };
|
|
59
|
+
const gitignorePath = join(root, ".gitignore");
|
|
60
|
+
let existing;
|
|
61
|
+
try {
|
|
62
|
+
existing = await readFile(gitignorePath, "utf8");
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// No .gitignore at repo root — don't create one silently.
|
|
66
|
+
try {
|
|
67
|
+
await access(gitignorePath);
|
|
68
|
+
return { gitignorePath, modified: false, reason: "error" };
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return { gitignorePath, modified: false, reason: "no-gitignore-file" };
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (alreadyIgnored(existing)) {
|
|
75
|
+
return { gitignorePath, modified: false, reason: "already-ignored" };
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
const sep = existing.length === 0 || existing.endsWith("\n") ? "" : "\n";
|
|
79
|
+
await appendFile(gitignorePath, `${sep}${GITIGNORE_BLOCK}`, "utf8");
|
|
80
|
+
return { gitignorePath, modified: true, reason: "appended" };
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return { gitignorePath, modified: false, reason: "error" };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=ensure-gitignore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensure-gitignore.js","sourceRoot":"","sources":["../src/ensure-gitignore.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pseolint",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Programmatic SEO linter CLI — SpamBrain-proof your pSEO before you publish",
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "Programmatic SEO linter CLI — SpamBrain-proof your pSEO before you publish. v0.4 verdict ladder (ready/caution/concerning/critical) + auto site classification.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Ouranos Labs <contact@ouranos-labs.dev>",
|
|
7
7
|
"homepage": "https://pseolint.dev",
|
|
@@ -49,4 +49,4 @@
|
|
|
49
49
|
"cosmiconfig": "^9.0.1",
|
|
50
50
|
"zod": "^4.3.6"
|
|
51
51
|
}
|
|
52
|
-
}
|
|
52
|
+
}
|