@lv24/seo 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.
- package/README.md +49 -2
- package/bin/lv24-seo.js +74 -0
- package/package.json +40 -4
package/README.md
CHANGED
|
@@ -1,3 +1,50 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @lv24/seo
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`npx` launcher for the Python package [`lv24-seo`](https://pypi.org/project/lv24-seo/) —
|
|
4
|
+
a free-first SEO control plane for humans and AI agents (Google Search Console, Yandex Webmaster,
|
|
5
|
+
Yandex Metrika, Bing/IndexNow, CrUX, PageSpeed Insights, a 30-rule technical crawl, scheduled
|
|
6
|
+
email/Telegram reports, an MCP server and agent skills).
|
|
7
|
+
|
|
8
|
+
This npm package contains **no SEO logic**. It forwards every argument to
|
|
9
|
+
`uvx --from lv24-seo lv24-seo …` (or to a `lv24-seo` binary already on `PATH`), so the CLI, its
|
|
10
|
+
`--json` envelope and the documented exit codes behave exactly as in the Python package.
|
|
11
|
+
|
|
12
|
+
## Requirements
|
|
13
|
+
|
|
14
|
+
* [uv](https://docs.astral.sh/uv/) (recommended) **or** an installed `lv24-seo` binary
|
|
15
|
+
(`pipx install lv24-seo` / `uv tool install lv24-seo`). Python itself does not need to be installed
|
|
16
|
+
when uv is present — uv downloads the right interpreter.
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npx @lv24/seo doctor --json
|
|
22
|
+
npx @lv24/seo init --property https://example.com
|
|
23
|
+
npx @lv24/seo auth set --provider gsc --stdin
|
|
24
|
+
npx @lv24/seo report weekly --json --out reports/
|
|
25
|
+
npx @lv24/seo mcp serve # stdio MCP server for Claude/OpenCode/Cursor
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The first run may take a few seconds while uv resolves and caches the Python package.
|
|
29
|
+
|
|
30
|
+
## Configuration
|
|
31
|
+
|
|
32
|
+
Tokens are read from the keychain (set them with `lv24-seo auth set`) or from `LV24_SEO_*`
|
|
33
|
+
environment variables. Nothing is written by this wrapper.
|
|
34
|
+
|
|
35
|
+
If auto-detection picks the wrong binary, point it explicitly:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
LV24_SEO_BIN=/usr/local/bin/lv24-seo npx @lv24/seo doctor
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Links
|
|
42
|
+
|
|
43
|
+
* Documentation: <https://github.com/LevapVeeskela/lv24-seo-optimizer>
|
|
44
|
+
* MCP tools and skills: see `docs/mcp.md` and `skills/` in the repository
|
|
45
|
+
* Issues: <https://github.com/LevapVeeskela/lv24-seo-optimizer/issues>
|
|
46
|
+
|
|
47
|
+
## License
|
|
48
|
+
|
|
49
|
+
Apache-2.0. Not affiliated with Google, Yandex or Microsoft; provider data belongs to the property
|
|
50
|
+
owner and is never resold.
|
package/bin/lv24-seo.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Thin launcher for the Python package `lv24-seo`.
|
|
4
|
+
*
|
|
5
|
+
* `npx @lv24/seo …` is a convenience entry point, not a second implementation: it forwards every
|
|
6
|
+
* argument to `uvx --from lv24-seo lv24-seo …` (or to an already installed `lv24-seo` binary).
|
|
7
|
+
* Exit code, stdout and stderr are passed through unchanged so agents can rely on `--json` and the
|
|
8
|
+
* documented exit codes.
|
|
9
|
+
*/
|
|
10
|
+
'use strict';
|
|
11
|
+
|
|
12
|
+
const { spawn } = require('node:child_process');
|
|
13
|
+
|
|
14
|
+
const PACKAGE = 'lv24-seo';
|
|
15
|
+
const args = process.argv.slice(2);
|
|
16
|
+
|
|
17
|
+
function candidates() {
|
|
18
|
+
const override = process.env.LV24_SEO_BIN;
|
|
19
|
+
if (override) {
|
|
20
|
+
return [{ command: override, prefix: [] }];
|
|
21
|
+
}
|
|
22
|
+
return [
|
|
23
|
+
{ command: 'uvx', prefix: ['--from', PACKAGE, PACKAGE] },
|
|
24
|
+
{ command: PACKAGE, prefix: [] },
|
|
25
|
+
];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function hint() {
|
|
29
|
+
return [
|
|
30
|
+
'lv24-seo needs uv (recommended) or an installed lv24-seo binary.',
|
|
31
|
+
'',
|
|
32
|
+
' Install uv: https://docs.astral.sh/uv/getting-started/installation/',
|
|
33
|
+
' Or install the CLI directly:',
|
|
34
|
+
' pipx install lv24-seo (or: uv tool install lv24-seo)',
|
|
35
|
+
'',
|
|
36
|
+
'Set LV24_SEO_BIN=/absolute/path/to/lv24-seo to bypass auto-detection.',
|
|
37
|
+
].join('\n');
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function run(list, index) {
|
|
41
|
+
if (index >= list.length) {
|
|
42
|
+
process.stderr.write(hint() + '\n');
|
|
43
|
+
process.exit(127);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const current = list[index];
|
|
47
|
+
const child = spawn(current.command, [...current.prefix, ...args], {
|
|
48
|
+
stdio: 'inherit',
|
|
49
|
+
env: process.env,
|
|
50
|
+
shell: false,
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
let started = false;
|
|
54
|
+
child.on('spawn', () => {
|
|
55
|
+
started = true;
|
|
56
|
+
});
|
|
57
|
+
child.on('error', (error) => {
|
|
58
|
+
if (!started && error && error.code === 'ENOENT') {
|
|
59
|
+
run(list, index + 1);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
process.stderr.write(`lv24-seo launcher: ${error.message}\n`);
|
|
63
|
+
process.exit(1);
|
|
64
|
+
});
|
|
65
|
+
child.on('exit', (code, signal) => {
|
|
66
|
+
if (signal) {
|
|
67
|
+
process.kill(process.pid, signal);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
process.exit(code === null ? 1 : code);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
run(candidates(), 0);
|
package/package.json
CHANGED
|
@@ -1,6 +1,42 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lv24/seo",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Free-first SEO control plane for humans and AI agents — npx launcher for the Python package lv24-seo (GSC, Yandex Webmaster/Metrika, Bing, CrUX, PSI, crawl, reports, MCP).",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"seo",
|
|
7
|
+
"mcp",
|
|
8
|
+
"model-context-protocol",
|
|
9
|
+
"google-search-console",
|
|
10
|
+
"yandex-webmaster",
|
|
11
|
+
"yandex-metrika",
|
|
12
|
+
"bing-webmaster",
|
|
13
|
+
"indexnow",
|
|
14
|
+
"core-web-vitals",
|
|
15
|
+
"ai-agents",
|
|
16
|
+
"cli"
|
|
17
|
+
],
|
|
18
|
+
"homepage": "https://github.com/LevapVeeskela/lv24-seo-optimizer",
|
|
19
|
+
"bugs": {
|
|
20
|
+
"url": "https://github.com/LevapVeeskela/lv24-seo-optimizer/issues"
|
|
21
|
+
},
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "git+https://github.com/LevapVeeskela/lv24-seo-optimizer.git",
|
|
25
|
+
"directory": "packages/npm"
|
|
26
|
+
},
|
|
27
|
+
"license": "Apache-2.0",
|
|
28
|
+
"author": "LV24 <paulalexeev10@gmail.com>",
|
|
29
|
+
"bin": {
|
|
30
|
+
"lv24-seo": "bin/lv24-seo.js"
|
|
31
|
+
},
|
|
32
|
+
"files": [
|
|
33
|
+
"bin/lv24-seo.js",
|
|
34
|
+
"README.md"
|
|
35
|
+
],
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=18"
|
|
38
|
+
},
|
|
39
|
+
"publishConfig": {
|
|
40
|
+
"access": "public"
|
|
41
|
+
}
|
|
42
|
+
}
|