searvex-seo 0.7.0 → 1.0.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 (91) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/CHANGELOG.md +53 -0
  3. package/NOTICE +2 -0
  4. package/README.md +29 -13
  5. package/THIRD_PARTY_NOTICES.md +750 -0
  6. package/dist/analyze/audit.d.ts +4 -0
  7. package/dist/analyze/audit.js +6 -2
  8. package/dist/analyze/audit.js.map +1 -1
  9. package/dist/analyze/content.js +9 -1
  10. package/dist/analyze/content.js.map +1 -1
  11. package/dist/analyze/context.d.ts +7 -1
  12. package/dist/analyze/context.js +10 -1
  13. package/dist/analyze/context.js.map +1 -1
  14. package/dist/analyze/inventory.js +1 -1
  15. package/dist/analyze/priority.js +32 -0
  16. package/dist/analyze/priority.js.map +1 -1
  17. package/dist/analyze/structured-data.js +3 -1
  18. package/dist/analyze/structured-data.js.map +1 -1
  19. package/dist/analyze/technical.d.ts +10 -0
  20. package/dist/analyze/technical.js +41 -12
  21. package/dist/analyze/technical.js.map +1 -1
  22. package/dist/cli.js +22 -8
  23. package/dist/cli.js.map +1 -1
  24. package/dist/commands/crux.d.ts +8 -0
  25. package/dist/commands/crux.js +61 -0
  26. package/dist/commands/crux.js.map +1 -0
  27. package/dist/commands/gsc.d.ts +10 -1
  28. package/dist/commands/gsc.js +201 -35
  29. package/dist/commands/gsc.js.map +1 -1
  30. package/dist/commands/monitor.js +71 -20
  31. package/dist/commands/monitor.js.map +1 -1
  32. package/dist/commands/optimize.js +26 -4
  33. package/dist/commands/optimize.js.map +1 -1
  34. package/dist/commands/research.js +1 -1
  35. package/dist/commands/research.js.map +1 -1
  36. package/dist/commands/run.js +8 -7
  37. package/dist/commands/run.js.map +1 -1
  38. package/dist/crawl/render.d.ts +4 -0
  39. package/dist/crawl/render.js +38 -5
  40. package/dist/crawl/render.js.map +1 -1
  41. package/dist/extract/html.d.ts +5 -0
  42. package/dist/extract/html.js +10 -0
  43. package/dist/extract/html.js.map +1 -1
  44. package/dist/integrations/bing.d.ts +20 -1
  45. package/dist/integrations/bing.js +42 -2
  46. package/dist/integrations/bing.js.map +1 -1
  47. package/dist/integrations/credentials.d.ts +51 -3
  48. package/dist/integrations/credentials.js +165 -1
  49. package/dist/integrations/credentials.js.map +1 -1
  50. package/dist/integrations/crux.d.ts +5 -1
  51. package/dist/integrations/crux.js +27 -3
  52. package/dist/integrations/crux.js.map +1 -1
  53. package/dist/integrations/google-oauth.d.ts +2 -1
  54. package/dist/integrations/google-oauth.js +3 -3
  55. package/dist/integrations/google-oauth.js.map +1 -1
  56. package/dist/integrations/gsc-csv.d.ts +0 -5
  57. package/dist/integrations/gsc-csv.js +0 -14
  58. package/dist/integrations/gsc-csv.js.map +1 -1
  59. package/dist/integrations/property.d.ts +20 -0
  60. package/dist/integrations/property.js +82 -0
  61. package/dist/integrations/property.js.map +1 -1
  62. package/dist/net/fetcher.d.ts +2 -2
  63. package/dist/net/fetcher.js +1 -1
  64. package/dist/net/ssrf.js +2 -1
  65. package/dist/net/ssrf.js.map +1 -1
  66. package/dist/optimize/fixes.d.ts +2 -0
  67. package/dist/optimize/fixes.js +8 -1
  68. package/dist/optimize/fixes.js.map +1 -1
  69. package/dist/optimize/transaction.d.ts +7 -1
  70. package/dist/optimize/transaction.js +48 -21
  71. package/dist/optimize/transaction.js.map +1 -1
  72. package/dist/repo/audit.js +11 -2
  73. package/dist/repo/audit.js.map +1 -1
  74. package/dist/repo/detect.d.ts +5 -0
  75. package/dist/repo/detect.js +34 -2
  76. package/dist/repo/detect.js.map +1 -1
  77. package/dist/repo/scan.d.ts +21 -2
  78. package/dist/repo/scan.js +90 -13
  79. package/dist/repo/scan.js.map +1 -1
  80. package/dist/report/html.js +1 -1
  81. package/dist/report/markdown.d.ts +1 -1
  82. package/dist/report/markdown.js +2 -1
  83. package/dist/report/markdown.js.map +1 -1
  84. package/dist/rules/engine.js +4 -0
  85. package/dist/rules/engine.js.map +1 -1
  86. package/dist/searvex.mjs +1908 -1231
  87. package/knowledge/rules/structured-data.json +2 -1
  88. package/package.json +4 -2
  89. package/skills/monitor/SKILL.md +2 -2
  90. package/skills/research/SKILL.md +3 -0
  91. package/skills/searvex/SKILL.md +1 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "searvex",
3
- "version": "0.7.0",
3
+ "version": "1.0.0",
4
4
  "description": "Search intelligence & optimization engine: deterministic technical SEO + GEO audits with a sourced rule base, competitor research, and safe, verified code fixes with rollback.",
5
5
  "author": { "name": "Cihan Topaç", "url": "https://github.com/cihantopac" },
6
6
  "license": "Apache-2.0",
package/CHANGELOG.md CHANGED
@@ -5,6 +5,59 @@ All notable changes to this project are documented here. The format follows
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [1.0.0] - 2026-11-01
9
+
10
+ First stable release. Every capability advertised as supported has been verified end to end; Bing Webmaster
11
+ is the one integration shipped as experimental. Evidence: [docs/release-checklist.md](docs/release-checklist.md)
12
+ and [docs/quality.md](docs/quality.md).
13
+
14
+ ### Security and data integrity
15
+ - `monitor` no longer attaches search data of another website: `--import`, `--site-url`, `SEARVEX_GSC_SITE`
16
+ and `--baseline` are checked against the monitored site; an export without a pages table needs `--property`.
17
+ - Search Console exports whose pages span several subdomains are scoped as domain properties (their totals
18
+ include every subdomain); an explicit `--property` that does not contain every exported page is refused.
19
+ - `--render`: a hard per-page deadline stops pages whose scripts never yield or allocate without bound; a
20
+ stuck browser is replaced. Local host names with a trailing dot are blocked.
21
+ - Optimizer: backups and the manifest are written before the first file (an interrupted apply is recoverable
22
+ with `rollback`, and new applies are refused until then); a failed verification never overwrites files
23
+ edited meanwhile; CRLF line endings and file modes are preserved.
24
+ - Credentials: opt-in OS keychain store (`SEARVEX_CREDENTIAL_STORE=keychain`: macOS Keychain, Secret Service,
25
+ Windows DPAPI) using the OS's own tools with secrets on stdin; entries are isolated per config directory.
26
+ Automated scans confirm that no token, key or client secret reaches output or run files.
27
+
28
+ ### Added
29
+ - `searvex bing auth|status|sites|logout` and `searvex crux auth|status|logout`: keys are entered without echo,
30
+ checked against the API and kept in the credential store instead of environment variables.
31
+ - `gsc auth` opens the browser for consent (`--no-browser` to only print the URL).
32
+ - `THIRD_PARTY_NOTICES.md` with the licence texts of all bundled runtime packages.
33
+
34
+ ### Changed
35
+ - Search Console API reports show property totals from the daily series (anonymised queries included), equal
36
+ to the CSV export of the same period. Bing reports use the daily site series for totals and explain empty
37
+ data. `bing report` requires a verified site of the account.
38
+ - "Fix first" names the likely root cause of dependent findings (e.g. a client-side language switch that
39
+ changes titles, canonicals and hreflang for renderers) and ranks it first.
40
+ - 3-letter hreflang codes without an ISO 639-1 equivalent (`ast`, `ceb`) are reported at low severity with an
41
+ explanation instead of as high-severity mistakes; a finding's severity is its most severe occurrence.
42
+ - Status commands (`gsc|bing|crux status`) exit 0 only when the integration is usable.
43
+
44
+ ### Fixed
45
+ - Repository mode: test/fixture/benchmark/example folders, HTML fragments and server template folders are not
46
+ treated as the site (a repository without a website now scores n/a); static sites in workspace folders and
47
+ locale sub-folders are found; clean URLs; sitemap URLs without a file (unless another app routes them); all
48
+ Laravel route files; Blade/PHP expressions no longer hide attributes; admin views and tests skipped; error
49
+ pages modelled as 404/500; Next.js fill images and aspect-ratio utility classes are sized; personal sites
50
+ are not asked for Organization markup.
51
+ - Website mode: pages linked only through internal redirects are not orphans; orphans are not reported on
52
+ crawls stopped at the page limit; cannibalisation candidates must share a language and exclude legal pages;
53
+ Turkish soft-404 wording is detected (Unicode-aware boundaries).
54
+
55
+ ### Verified
56
+ - Live: Search Console API (authorization, refresh, properties, pagination, reports), Search Console CSV
57
+ (real Turkish and English exports), CrUX (values identical to the raw API), Bing Webmaster (mechanics; no
58
+ site data yet). Real-world rounds on 13 public sites and 9 repositories; benchmarks to 50,000 pages;
59
+ reproducible package; clean installs on Linux, macOS and Windows.
60
+
8
61
  ## [0.7.0] - 2026-10-30
9
62
 
10
63
  ### Added
package/NOTICE CHANGED
@@ -11,6 +11,8 @@ The bundled distribution (dist/searvex.mjs) includes the following third-party s
11
11
  - robots-parser (MIT) https://github.com/samclarke/robots-parser
12
12
  - @babel/parser (MIT) https://github.com/babel/babel
13
13
 
14
+ Full licence texts of every bundled package: THIRD_PARTY_NOTICES.md.
15
+
14
16
  Rule descriptions summarise and link to official documentation from Google Search Central, Bing
15
17
  Webmaster, Yandex, schema.org, W3C, web.dev, MDN and crawler operators. Those documents remain the
16
18
  property of their respective owners.
package/README.md CHANGED
@@ -5,9 +5,10 @@ repositories for technical SEO and GEO/AEO (AI search) issues against a **source
5
5
  base**, researches competitors, and applies **safe, verified code fixes with one-command rollback**.
6
6
  It ships as a standalone CLI and as a Claude Code plugin.
7
7
 
8
- > Status: **v0.7.0 (early)**. The engine, rule base, CLI and plugin are tested (automated tests incl. Playwright rendering, CI on Linux/macOS/Windows,
9
- > real-site and real-repository validation — see [docs/quality.md](docs/quality.md)). Expect rough
10
- > edges; read [Limitations](#limitations) before relying on it.
8
+ > Status: **v1.0.0**. Tested with automated tests (incl. Playwright rendering and adversarial isolation tests),
9
+ > CI on Linux, macOS and Windows, clean installs of the packed package, and real-world validation on 13 public
10
+ > sites, 9 repositories and live Search Console / CrUX accounts — see [docs/quality.md](docs/quality.md) and
11
+ > [docs/release-checklist.md](docs/release-checklist.md). Read [Limitations](#limitations) before relying on it.
11
12
 
12
13
  ## Why Searvex
13
14
 
@@ -37,8 +38,8 @@ Competitor research and differentiation notes: [docs/research/competitors-2026-1
37
38
  (`research`).
38
39
  - Fix a small set of problems in code automatically (9 rule types: e.g. missing `lang`, viewport, robots.txt
39
40
  sitemap line, invalid hreflang codes), always as a dry-run diff first, then apply → re-verify → rollback.
40
- - Read Search Console or Bing data when you connect them yourself, and keep measured data separate from
41
- inference.
41
+ - Read Search Console data from a CSV export you download (no account needed), or from the Search Console
42
+ API (your own OAuth client) and the Bing API (experimental) when you connect them yourself, and keep measured data separate from inference.
42
43
 
43
44
  **Searvex does not:**
44
45
 
@@ -114,7 +115,7 @@ searvex connect https://example.com
114
115
  searvex gsc import performance-export.zip --audit latest # Search Console CSV export, no account access
115
116
  searvex gsc auth --client client_secret.json # your own Google OAuth "Desktop app" client
116
117
  searvex gsc report sc-domain:example.com --audit latest
117
- SEARVEX_BING_API_KEY=… searvex bing report https://example.com/
118
+ searvex bing auth && searvex bing report https://example.com/ # Bing API key, asked once (hidden input)
118
119
 
119
120
  # Inspect the rule base and re-verify its official sources
120
121
  searvex rules check-sources
@@ -129,13 +130,28 @@ Full reference: [docs/cli.md](docs/cli.md).
129
130
 
130
131
  ### Optional integrations (read-only, opt-in)
131
132
 
132
- | Variable | Enables |
133
- |---|---|
134
- | `SEARVEX_CRUX_API_KEY` | Real-user Core Web Vitals (Chrome UX Report API) |
135
- | `searvex gsc auth` (or `SEARVEX_GSC_TOKEN`) | Search Console query × page analysis, `monitor` performance |
136
- | `SEARVEX_BING_API_KEY` | Bing Webmaster Tools query × page analysis |
137
- | `searvex gsc import export.zip` | Search Console Performance CSV/ZIP exports (no account access; no query × page data) |
138
- | `npm i -D playwright` | `--render`: JavaScript rendering and raw-vs-rendered comparison |
133
+ | Variable | Enables | Status |
134
+ |---|---|---|
135
+ | `npm i -D playwright` | `--render`: JavaScript rendering and raw-vs-rendered comparison | supported |
136
+ | `searvex gsc import export.zip` | Search Console Performance CSV/ZIP exports (no account access; no query × page data) | supported² |
137
+ | `searvex gsc auth` (or `SEARVEX_GSC_TOKEN`) | Search Console query × page analysis, `monitor` performance | supported³ |
138
+ | `searvex bing auth` (or `SEARVEX_BING_API_KEY`) | Bing Webmaster Tools query × page analysis | experimental¹ |
139
+ | `searvex crux auth` (or `SEARVEX_CRUX_API_KEY`) | Real-user Core Web Vitals (Chrome UX Report API) | supported⁴ |
140
+ | `SEARVEX_CREDENTIAL_STORE=keychain` | Keep the Search Console refresh token in the OS keychain instead of a 0600 file | supported |
141
+
142
+ ¹ Experimental: implemented and tested against recorded API behaviour and synthetic exports, but not yet
143
+ verified against the live service or real exports in every UI language. Interfaces may change; please report
144
+ problems. See [docs/release-checklist.md](docs/release-checklist.md).
145
+
146
+ ² Verified with real exports downloaded in the Turkish and English Search Console UI (both give identical
147
+ results); other UI languages are recognised from published UI terms.
148
+
149
+ ³ Verified against the live Search Console API (authorization, refresh, property discovery, pagination,
150
+ reports; totals identical to the CSV export of the same period). Revocation on `gsc logout` is tested against a
151
+ mock server only.
152
+
153
+ ⁴ Verified against the live CrUX API: values identical to the raw API response; origins without enough
154
+ real-user traffic are reported as not measured.
139
155
 
140
156
  Without them, Searvex reports these metrics as **not measured** — it never estimates them.
141
157