seo-intel 1.5.46 → 1.5.52

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/CHANGELOG.md CHANGED
@@ -1,5 +1,89 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.5.52 (2026-07-01)
4
+
5
+ ### New: per-project `sourcePath` — agent dispatch knows where the code lives
6
+ - Project configs can now declare `sourcePath` (an absolute path to the site's source — a git repo or a plain folder, both work; git-ness is auto-detected, never declared). Any local agent integration can use this to dispatch a fix directly into the right codebase instead of guessing.
7
+ - seo-intel itself self-registers its own install location to `~/.seo-intel/install.json` on every CLI run, so any local agent harness can find it without environment variables or hardcoded paths.
8
+
9
+ ### Updated: product logo — gold to intel-blue
10
+ - The product mark now uses the brand's intel-blue accent instead of gold, matching the dashboard and site. Shows up as the dashboard favicon and in the npm package.
11
+
12
+ ### New: `rescore <project> <url>` — close the agent loop
13
+ - Re-check a single URL's AI citability after a fix. Read-only re-measurement on the raw-HTML ("what bots see") lens, returning `before / after / delta` + the per-signal breakdown — so an agent (or you) can verify a change actually moved the score. Server-rendered fixes move it; JS-only fixes correctly don't.
14
+ - Available via the CLI (`--format json`) and the agent-harness (`run('rescore', project, { url })`).
15
+
16
+ ### Improved: `intel --for audit` now emits ranked opportunities
17
+ - The audit slice now includes a ranked `opportunities[]` (each tagged `side: fix | attack` with real value/status/confidence/suggested_action/proof) plus a `summary` (counts + per-signal averages) — decision-ready data any agent or dashboard can act on directly. Flows through to the MCP `get_intel` and the agent-harness automatically.
18
+
19
+ ### Renamed: `froggo.js` → `agent-harness.js`
20
+ - The agent integration entry point is now `seo-intel/agent-harness` (clearer name). The legacy `seo-intel/froggo` import still resolves to it, so existing code keeps working.
21
+
22
+ ### Claude Code plugin — install the MCP server *and* skill in one command
23
+ - Added a Claude Code plugin marketplace. Claude Code users can install seo-intel with `/plugin marketplace add Ukkometa/seo-intel` then `/plugin install seo-intel@ukkometa` — one step wires both the MCP server **and** the seo-intel skill, with no manual `claude mcp add` or config editing.
24
+ - The existing `claude mcp add seo-intel "npx seo-intel-mcp"` (and Cursor/Cline setup) still works unchanged.
25
+
26
+ ## 1.5.51 (2026-06-11)
27
+
28
+ ### Fixed — LM Studio extraction now actually works (it was silently degrading)
29
+ Local extraction via LM Studio never functioned: every page fell back to degraded (regex) mode, so entity-level signals (entity authority, intent, keywords) came back empty even when a model was loaded and serving. Four stacked bugs:
30
+
31
+ - **Preflight hit the wrong endpoint.** It probed `/api/v1/models` (LM Studio's *native* API, shape `{models:[{key}]}`) but parsed it as the OpenAI shape `{data:[{id}]}` — so it always concluded "no models loaded." Now uses the OpenAI-compatible `/v1/models`.
32
+ - **Inference hit the wrong endpoint.** It POSTed to `/api/v1/chat` (returns `400 'input' is required`). Now uses `/v1/chat/completions`.
33
+ - **Unsupported `response_format`.** It sent `{type:'json_object'}`, which LM Studio rejects (`must be 'json_schema' or 'text'`). Now sends `text` and relies on the existing JSON-extraction/repair pass.
34
+ - **A few bad pages disabled the whole model.** Content/parse failures (a small model returning unparseable JSON for one long page) were counted as host failures and retired the local model for the rest of the run. Now only *transport* failures (host unreachable/timeout/5xx) retire a host; a single unparseable page just degrades itself.
35
+
36
+ Point at a loaded LM Studio model with `LMSTUDIO_MODEL=<model-id>` (e.g. `google/gemma-4-e2b`). Note: very small models (≈2B) still struggle to emit clean JSON for very long pages — use a 4B+ extraction model (Gemma E4B, Qwen 3.5) for higher coverage, or see `seo-intel models`.
37
+
38
+ ## 1.5.50 (2026-06-11)
39
+
40
+ ### New MCP tool: `setup_project` — zero → configured → audited, entirely from chat
41
+ The last setup gap in chat-native coverage: projects could previously only be created via the CLI or web wizard. An AI agent can now take a user from nothing to a configured, crawled, audited project without leaving the conversation.
42
+
43
+ - **`setup_project(project_name, target_url, …)`** writes the same project config the wizard produces — target domain, competitors, owned domains, analysis context (industry / audience / goal), crawl budget, and extraction model. Pairs with `suggest_models` for picking the local model first.
44
+ - Refuses to overwrite an existing project unless `overwrite=true`.
45
+ - MCP server now exposes **21 tools**; the full lifecycle (set up → crawl → extract → audit → problems → fix → draft → re-audit) is reachable from any MCP host.
46
+ - Model catalog: cloud analysis entry refreshed to **Claude Opus 4.8**.
47
+
48
+ ## 1.5.49 (2026-06-08)
49
+
50
+ ### New skill: `seo-autofix` — autonomous audit → fix → verify loop
51
+ SEO Intel already reports each problem with a concrete fix **and** a verification recipe. This skill turns that into a closed loop an AI code agent runs against a repo it has checked out — with the human in exactly one place: merging and deploying the branch.
52
+
53
+ - **The loop:** `run_crawl` → `list_problems` → for each problem, map the affected URL to its source file, apply the `fix_template`, **verify against a local preview before deploying** (`crawl_site` against `localhost`), keep it only if the problem signal clears, then collect verified fixes on one branch and `mark_problem_status(fixed)`.
54
+ - **Autonomy gate:** only `fix_difficulty ≤ 2` (deterministic structural fixes — missing meta/title, missing JSON-LD, orphan links, noindex conflicts) are applied autonomously. Judgment-heavy problems (positioning, content rewrites) are summarized for the human, never auto-applied.
55
+ - **Hard rules:** verify every fix against a real crawl (a `fix_template` is guidance, the crawl is proof — unverified edits get reverted); one branch, no push to `main`, no deploy, no publishing. The blast radius is a branch the human reviews.
56
+ - Lives in `skills/seo-autofix/` — distributed via the repo / skill directories.
57
+
58
+ ### Fixed
59
+ - **CLI starts in ~100ms instead of loading the browser engine up front.** `cli.js` statically imported the crawl engine (Playwright + the HTML→markdown chain) at startup, so every command — even `seo-intel --version` — paid that import, which could stall for minutes on a cold module cache. The crawler now loads on first use (`crawl` / `run` / `scan`); all other commands skip it entirely. Measured: `--version` went from 143s (worst case observed) to ~110ms.
60
+
61
+ ## 1.5.48 (2026-06-07)
62
+
63
+ ### Local-model suggester — `seo-intel models` + `suggest_models` (MCP)
64
+ Extraction runs a small AI model once per crawled page. This makes it easy to pick the right **local** one — and is emphatic that local is the way to do it.
65
+
66
+ - **`seo-intel models`** — detects your GPU/VRAM and which models are already in Ollama, then recommends from a curated local set: **Gemma 4 E2B / E4B / 12B** and **Qwen 3.5 4B / 9B** (smallest → largest, with VRAM/speed/quality and the `ollama pull` command for each). `--format json` for machine output.
67
+ - **`suggest_models` (MCP)** — the same recommendation from any chat/agent, so an assistant can suggest a model for the user's hardware.
68
+ - **Both always carry a disclaimer: extraction should be done with a LOCAL model.** Cloud is a fallback, not the default — it sends every page's content off-machine, costs money at scale, and rate-limits, all for a task a 4–8B local model handles well, offline, with data never leaving the machine.
69
+ - Added **Gemma 4 12B** to the extraction model catalog (a quality step up from E4B that still fits ~10 GB cards).
70
+
71
+ ### Fixed
72
+ - **MCP server boot is no longer blocked by the crawler dependency chain.** The `crawl_site` tool's crawler (which pulls in `turndown`) is now loaded on first use instead of at startup. Previously, if importing `turndown` was slow on a given machine, the entire MCP server could fail to start — no tools, no banner, no handshake. Boot now completes in well under a second regardless of crawler import speed.
73
+ - **Commands no longer hang when the license or update servers are slow or unreachable.** Two startup network paths had no effective cap: the license phone-home was awaited without a hard timeout (blocking commands like `status` for up to ~10s), and background update-check fetches kept the process from exiting until the OS connect timeout. The license check is now capped at 2.5s and degrades to cached/offline behavior, and one-shot commands exit as soon as their work is done instead of waiting on lingering background requests. Activation still works normally when the server is reachable.
74
+
75
+ ## 1.5.47 (2026-06-07)
76
+
77
+ ### AI-crawler access is now part of AI citability — and the audit runs from your agent
78
+ A page can be perfectly structured and still be impossible for an AI assistant to cite — because `robots.txt` blocks the crawler. AEO now checks for exactly that.
79
+
80
+ - **New citability signal: AI-crawler access.** `seo-intel aeo <project>` fetches each target domain's `robots.txt` and detects whether answer-engine crawlers (ClaudeBot, GPTBot, OAI-SearchBot, PerplexityBot, Google-Extended, Amazonbot, DuckAssistBot, and training crawlers like CCBot / Applebot-Extended) are allowed, plus the Cloudflare `Content-Signal: ai-train=no` directive. When the assistants developers actually use are locked out, the affected pages are **capped at 30/100** — on-page quality can't help a page the AI can't read. A new "AI Crawler Access" section appears in the audit, and a high-priority `citability_gap` is written to the Intelligence Ledger per blocked domain.
81
+ - The check is the only network call AEO makes (one `robots.txt` per target domain), it's best-effort, and a missing/unreachable `robots.txt` is treated as open. The pure scorer stays offline — robots verdicts are fetched separately and passed in.
82
+ - **New MCP tool `tech_audit`** — run the technical SEO audit (titles, meta, noindex/robots conflicts, redirects, canonicals, sitemap diff) straight from any MCP host, no shelling out to the CLI.
83
+ - **New MCP tool `scan_site`** (Solo) — one-shot full audit of any domain (crawl → extract → analyze → export) as a detached background job, mirroring `seo-intel scan`.
84
+ - **`run_citability_audit` (MCP)** now performs the same AI-crawler-access check and returns an `ai_access` verdict per domain.
85
+ - **Fix: `aeo` and `gap-intel` now emit clean JSON in `--format json`.** Both commands previously regenerated the dashboard after printing the JSON, and the dashboard step's progress logs (e.g. "Topic clusters loaded…") leaked onto stdout — breaking `JSON.parse` for agents and scripts. Dashboard regeneration is now skipped in JSON mode, so stdout contains only the JSON object.
86
+
3
87
  ## 1.5.46 (2026-05-29)
4
88
 
5
89
  ### Security — the local dashboard now accepts requests from localhost only