@scribe-platform/cli 0.10.0 → 0.11.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/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +25 -4
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/profile.d.ts +12 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +81 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/site.d.ts.map +1 -1
- package/dist/commands/site.js +43 -1
- package/dist/commands/site.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/client.d.ts +80 -0
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +106 -3
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/config.d.ts +53 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +116 -8
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/seo-report.d.ts +19 -0
- package/dist/lib/seo-report.d.ts.map +1 -0
- package/dist/lib/seo-report.js +79 -0
- package/dist/lib/seo-report.js.map +1 -0
- package/package.json +1 -1
- package/skills/scribe-site-builder/SKILL.md +28 -2
- package/skills/scribe-site-builder/recipes/README.md +1 -0
- package/skills/scribe-site-builder/recipes/deploy.md +41 -10
- package/skills/scribe-site-builder/recipes/forms.md +21 -1
- package/skills/scribe-site-builder/recipes/seo.md +193 -0
package/dist/lib/client.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
1
3
|
export class ScribeApiError extends Error {
|
|
2
4
|
status;
|
|
3
5
|
body;
|
|
@@ -29,11 +31,98 @@ export const REQUEST_TYPES = ['content-change', 'new-page', 'bug', 'design', 'bi
|
|
|
29
31
|
function proofPath(client, proof) {
|
|
30
32
|
return `/api/v1/proofs/${encodeURIComponent(client)}/${encodeURIComponent(proof)}`;
|
|
31
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* RFC 0025 — the environments a Site or a Scribe can belong to. Duplicated from
|
|
36
|
+
* core's `ENVIRONMENT_NAMES` rather than imported, for the same reason
|
|
37
|
+
* `CALL_OUTCOMES` and `REQUEST_STATUSES` are: this package talks to the admin
|
|
38
|
+
* over HTTP and does not depend on `@scribe-cms/core`.
|
|
39
|
+
*/
|
|
40
|
+
const ENVIRONMENT_NAMES = ['production', 'development'];
|
|
41
|
+
/**
|
|
42
|
+
* The Environment the `.scribe.yml` in `cwd` says its Site belongs to, or null
|
|
43
|
+
* when there is no file, no key, or a value this build does not know.
|
|
44
|
+
*
|
|
45
|
+
* A regex rather than a YAML parse: this package has one dependency
|
|
46
|
+
* (`commander`) and adding a parser to read one top-level scalar would be the
|
|
47
|
+
* wrong trade. Provisioning writes the key at the top level, directly after
|
|
48
|
+
* `site:`, so an indented `environment:` inside a collection cannot match.
|
|
49
|
+
*/
|
|
50
|
+
export function localSiteEnvironment(cwd = process.cwd()) {
|
|
51
|
+
try {
|
|
52
|
+
const text = readFileSync(join(cwd, '.scribe.yml'), 'utf-8');
|
|
53
|
+
const match = /^environment:[ \t]*["']?([A-Za-z-]+)["']?[ \t]*$/m.exec(text);
|
|
54
|
+
const value = match?.[1];
|
|
55
|
+
return ENVIRONMENT_NAMES.some((name) => name === value) ? value : null;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// No file, unreadable, not a Site repo — all the same answer: nothing local
|
|
59
|
+
// to compare, so say nothing rather than guess.
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
32
63
|
export class ScribeClient {
|
|
33
64
|
options;
|
|
34
65
|
constructor(options) {
|
|
35
66
|
this.options = options;
|
|
36
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* RFC 0025 — the Environment this client is pointed at, from `/api/health`.
|
|
70
|
+
*
|
|
71
|
+
* Memoized per client instance, because the only caller is the 404 path and a
|
|
72
|
+
* command that 404s in a loop should not ask fifty times. `undefined` means
|
|
73
|
+
* "not asked yet"; `null` means asked and unanswerable, which is also the
|
|
74
|
+
* answer for a Scribe too old to report the field.
|
|
75
|
+
*/
|
|
76
|
+
serverEnvironment;
|
|
77
|
+
async pointedAt() {
|
|
78
|
+
if (this.serverEnvironment !== undefined)
|
|
79
|
+
return this.serverEnvironment;
|
|
80
|
+
this.serverEnvironment = null;
|
|
81
|
+
try {
|
|
82
|
+
const res = await fetch(`${this.options.apiUrl}/api/health`);
|
|
83
|
+
const data = (await res.json());
|
|
84
|
+
if (ENVIRONMENT_NAMES.some((name) => name === data.environment)) {
|
|
85
|
+
this.serverEnvironment = data.environment;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// Unreachable or not JSON. The caller already has a real error to report;
|
|
90
|
+
// this only ever adds a sentence to it.
|
|
91
|
+
}
|
|
92
|
+
return this.serverEnvironment;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* RFC 0025's client-side half of the refusal rule: turn the server's bare 404
|
|
96
|
+
* into the error that names the mistake.
|
|
97
|
+
*
|
|
98
|
+
* The server answers **404, not 403**, deliberately — a Site in the other
|
|
99
|
+
* Environment must be indistinguishable from one that does not exist
|
|
100
|
+
* (`packages/admin/src/lib/api-key.ts`). That is the right answer to an
|
|
101
|
+
* unknown caller and a useless one to Ashley, who is standing in the Site's
|
|
102
|
+
* own repo. So the explanation is assembled here, from the two facts only this
|
|
103
|
+
* side has together: the mark in the local `.scribe.yml` (PR 4 put it in every
|
|
104
|
+
* Site repo for exactly this) and the environment `/api/health` reports.
|
|
105
|
+
*
|
|
106
|
+
* Returns null unless both are known **and** they disagree — so an ordinary
|
|
107
|
+
* 404 ("no collection owns that path") is never dressed up as an environment
|
|
108
|
+
* problem, and a CLI run outside a Site repo says nothing extra.
|
|
109
|
+
*
|
|
110
|
+
* This lives on the client rather than in a command because the **mcp package
|
|
111
|
+
* imports the CLI's compiled client** (`@scribe-platform/cli/client`), so it
|
|
112
|
+
* inherits this for free. There is nothing separate to test or to remember
|
|
113
|
+
* there.
|
|
114
|
+
*/
|
|
115
|
+
async environmentMismatchNote() {
|
|
116
|
+
const local = localSiteEnvironment();
|
|
117
|
+
if (!local)
|
|
118
|
+
return null;
|
|
119
|
+
const server = await this.pointedAt();
|
|
120
|
+
if (!server || server === local)
|
|
121
|
+
return null;
|
|
122
|
+
return (`That site belongs to ${local} and you are pointed at ${server} (${this.options.apiUrl}). ` +
|
|
123
|
+
'A Site cannot move between Environments, so this is the wrong Scribe for it — check ' +
|
|
124
|
+
'`scribe login --api-url`, or run this from the right machine.');
|
|
125
|
+
}
|
|
37
126
|
async send(method, path, body) {
|
|
38
127
|
const res = await fetch(`${this.options.apiUrl}${path}`, {
|
|
39
128
|
method,
|
|
@@ -52,10 +141,21 @@ export class ScribeClient {
|
|
|
52
141
|
const message = data && typeof data === 'object' && 'error' in data
|
|
53
142
|
? String(data.error)
|
|
54
143
|
: res.statusText;
|
|
55
|
-
throw new ScribeApiError(message, res.status, data);
|
|
144
|
+
throw new ScribeApiError(await this.explain(message, res.status), res.status, data);
|
|
56
145
|
}
|
|
57
146
|
return data;
|
|
58
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* RFC 0025 — appends the environment-mismatch sentence to a 404, when that is
|
|
150
|
+
* what the 404 is. Only 404s: it is the one status the refusal rule produces,
|
|
151
|
+
* and widening it would start explaining 401s and 409s with a guess.
|
|
152
|
+
*/
|
|
153
|
+
async explain(message, status) {
|
|
154
|
+
if (status !== 404)
|
|
155
|
+
return message;
|
|
156
|
+
const note = await this.environmentMismatchNote();
|
|
157
|
+
return note ? `${message}. ${note}` : message;
|
|
158
|
+
}
|
|
59
159
|
/**
|
|
60
160
|
* For responses that aren't JSON — today, a CSV export. A failure still
|
|
61
161
|
* arrives as a JSON `{ error }` body, so the error path parses while the
|
|
@@ -76,7 +176,7 @@ export class ScribeClient {
|
|
|
76
176
|
const message = data && typeof data === 'object' && 'error' in data
|
|
77
177
|
? String(data.error)
|
|
78
178
|
: res.statusText;
|
|
79
|
-
throw new ScribeApiError(message, res.status, data);
|
|
179
|
+
throw new ScribeApiError(await this.explain(message, res.status), res.status, data);
|
|
80
180
|
}
|
|
81
181
|
return text;
|
|
82
182
|
}
|
|
@@ -200,6 +300,9 @@ export class ScribeClient {
|
|
|
200
300
|
async verifySite(site) {
|
|
201
301
|
return this.request('POST', `/api/v1/sites/${encodeURIComponent(site)}/verify`);
|
|
202
302
|
}
|
|
303
|
+
async checkSiteSeo(site) {
|
|
304
|
+
return this.request('POST', `/api/v1/sites/${encodeURIComponent(site)}/seo`);
|
|
305
|
+
}
|
|
203
306
|
async buildRuns(site) {
|
|
204
307
|
return this.request('GET', `/api/v1/sites/${encodeURIComponent(site)}/build/status`);
|
|
205
308
|
}
|
|
@@ -314,7 +417,7 @@ export class ScribeClient {
|
|
|
314
417
|
catch {
|
|
315
418
|
// non-JSON error body; the status text will do
|
|
316
419
|
}
|
|
317
|
-
throw new ScribeApiError(message, res.status);
|
|
420
|
+
throw new ScribeApiError(await this.explain(message, res.status), res.status);
|
|
318
421
|
}
|
|
319
422
|
return new Uint8Array(await res.arrayBuffer());
|
|
320
423
|
}
|
package/dist/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -1,8 +1,61 @@
|
|
|
1
|
+
/** One environment's bindings: where the admin is, and the key to talk to it. */
|
|
1
2
|
export interface ScribeConfig {
|
|
2
3
|
token: string;
|
|
3
4
|
apiUrl: string;
|
|
4
5
|
}
|
|
6
|
+
/**
|
|
7
|
+
* Named profiles, so one machine can address more than one Scribe.
|
|
8
|
+
*
|
|
9
|
+
* RFC 0025 made `development` a real environment with its own database and
|
|
10
|
+
* GitHub org, which means there are now two admin apps a person legitimately
|
|
11
|
+
* works against. Before this, `scribe login` wrote one `{ token, apiUrl }` and
|
|
12
|
+
* pointing at the dev environment *overwrote the production login* — so the way
|
|
13
|
+
* back was to remember a URL and a key, and the failure mode of forgetting was
|
|
14
|
+
* running a command against a paying Client's Scribe believing it was dev.
|
|
15
|
+
*
|
|
16
|
+
* The active profile is stored, not passed per command, which is deliberate:
|
|
17
|
+
* an agent session started from a GUI inherits no shell exports, so a
|
|
18
|
+
* `SCRIBE_PROFILE=dev` convention would silently not apply there and every
|
|
19
|
+
* command would quietly hit production. A stored choice applies everywhere,
|
|
20
|
+
* including inside Claude Code.
|
|
21
|
+
*/
|
|
22
|
+
export interface ScribeProfiles {
|
|
23
|
+
activeProfile: string;
|
|
24
|
+
profiles: Record<string, ScribeConfig>;
|
|
25
|
+
}
|
|
26
|
+
/** What a migrated flat config becomes. Not "production" — the old file never said. */
|
|
27
|
+
export declare const DEFAULT_PROFILE = "default";
|
|
28
|
+
/**
|
|
29
|
+
* Reads the config, migrating the flat shape in memory.
|
|
30
|
+
*
|
|
31
|
+
* **In memory, not on disk.** Rewriting someone's config as a side effect of
|
|
32
|
+
* reading it would mean a `scribe site list` that happened to run from an older
|
|
33
|
+
* CLI, or a half-finished upgrade, could leave the file in a shape the other
|
|
34
|
+
* one cannot read. The migration lands the first time something writes.
|
|
35
|
+
*/
|
|
36
|
+
export declare function loadProfiles(): ScribeProfiles | null;
|
|
37
|
+
/**
|
|
38
|
+
* The profile a command should use: `SCRIBE_PROFILE` if set, else the stored
|
|
39
|
+
* active one.
|
|
40
|
+
*
|
|
41
|
+
* The env override exists for a one-off — a script, a single command against
|
|
42
|
+
* the other environment — and deliberately does **not** change what is stored.
|
|
43
|
+
* Anything that wants to switch for good says so with `scribe profile use`.
|
|
44
|
+
*/
|
|
45
|
+
export declare function activeProfileName(profiles: ScribeProfiles): string;
|
|
5
46
|
export declare function loadConfig(): ScribeConfig | null;
|
|
47
|
+
/** Writes one profile and makes it active. Used by `scribe login`. */
|
|
48
|
+
export declare function saveProfile(name: string, config: ScribeConfig): void;
|
|
49
|
+
/**
|
|
50
|
+
* Writes the **active** profile. Kept because it is a published export of
|
|
51
|
+
* `@scribe-platform/cli`; removing it would be a breaking change to the package
|
|
52
|
+
* API for the sake of an internal rename. New code wants `saveProfile`.
|
|
53
|
+
*/
|
|
6
54
|
export declare function saveConfig(config: ScribeConfig): void;
|
|
55
|
+
/** Switches the active profile. Throws when it does not exist, so a typo cannot silently pick nothing. */
|
|
56
|
+
export declare function useProfile(name: string): void;
|
|
57
|
+
export declare function removeProfile(name: string): void;
|
|
7
58
|
export declare function configPath(): string;
|
|
59
|
+
/** Last 4 characters only — enough to tell two keys apart, useless if it leaks. */
|
|
60
|
+
export declare function maskToken(token: string): string;
|
|
8
61
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,iFAAiF;AACjF,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACxC;AA0BD,uFAAuF;AACvF,eAAO,MAAM,eAAe,YAAY,CAAC;AAWzC;;;;;;;GAOG;AACH,wBAAgB,YAAY,IAAI,cAAc,GAAG,IAAI,CAqBpD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAElE;AAED,wBAAgB,UAAU,IAAI,YAAY,GAAG,IAAI,CAIhD;AAQD,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAMpE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAGrD;AAED,0GAA0G;AAC1G,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAM7C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAgBhD;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,mFAAmF;AACnF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C"}
|
package/dist/lib/config.js
CHANGED
|
@@ -1,23 +1,131 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Where the config lives. `SCRIBE_CONFIG_DIR` overrides it.
|
|
6
|
+
*
|
|
7
|
+
* The override is not a convenience — it is the only safe way to test this
|
|
8
|
+
* file. Under Jest, `os.homedir()` ignores `$HOME` and returns the real one, so
|
|
9
|
+
* a test that "points HOME at a scratch directory" silently writes over the
|
|
10
|
+
* developer's actual `~/.scribe/config.json` and destroys their production
|
|
11
|
+
* login. That happened once, on 2026-11-05, which is why this exists and why
|
|
12
|
+
* `config.test.ts` refuses to run if the resolved path is the real one.
|
|
13
|
+
*
|
|
14
|
+
* Resolved per call rather than at import for the same reason: a module-level
|
|
15
|
+
* constant bakes in whatever the environment was when the module first loaded.
|
|
16
|
+
*/
|
|
17
|
+
function configDir() {
|
|
18
|
+
const override = process.env.SCRIBE_CONFIG_DIR?.trim();
|
|
19
|
+
return override || join(homedir(), '.scribe');
|
|
20
|
+
}
|
|
21
|
+
/** What a migrated flat config becomes. Not "production" — the old file never said. */
|
|
22
|
+
export const DEFAULT_PROFILE = 'default';
|
|
23
|
+
function readRaw() {
|
|
24
|
+
if (!existsSync(configPath()))
|
|
8
25
|
return null;
|
|
9
26
|
try {
|
|
10
|
-
return JSON.parse(readFileSync(
|
|
27
|
+
return JSON.parse(readFileSync(configPath(), 'utf-8'));
|
|
11
28
|
}
|
|
12
29
|
catch {
|
|
13
30
|
return null;
|
|
14
31
|
}
|
|
15
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Reads the config, migrating the flat shape in memory.
|
|
35
|
+
*
|
|
36
|
+
* **In memory, not on disk.** Rewriting someone's config as a side effect of
|
|
37
|
+
* reading it would mean a `scribe site list` that happened to run from an older
|
|
38
|
+
* CLI, or a half-finished upgrade, could leave the file in a shape the other
|
|
39
|
+
* one cannot read. The migration lands the first time something writes.
|
|
40
|
+
*/
|
|
41
|
+
export function loadProfiles() {
|
|
42
|
+
const raw = readRaw();
|
|
43
|
+
if (!raw || typeof raw !== 'object')
|
|
44
|
+
return null;
|
|
45
|
+
const asProfiles = raw;
|
|
46
|
+
if (asProfiles.profiles && typeof asProfiles.profiles === 'object') {
|
|
47
|
+
return {
|
|
48
|
+
activeProfile: asProfiles.activeProfile ?? DEFAULT_PROFILE,
|
|
49
|
+
profiles: asProfiles.profiles,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
const legacy = raw;
|
|
53
|
+
if (typeof legacy.token === 'string' && typeof legacy.apiUrl === 'string') {
|
|
54
|
+
return {
|
|
55
|
+
activeProfile: DEFAULT_PROFILE,
|
|
56
|
+
profiles: { [DEFAULT_PROFILE]: { token: legacy.token, apiUrl: legacy.apiUrl } },
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The profile a command should use: `SCRIBE_PROFILE` if set, else the stored
|
|
63
|
+
* active one.
|
|
64
|
+
*
|
|
65
|
+
* The env override exists for a one-off — a script, a single command against
|
|
66
|
+
* the other environment — and deliberately does **not** change what is stored.
|
|
67
|
+
* Anything that wants to switch for good says so with `scribe profile use`.
|
|
68
|
+
*/
|
|
69
|
+
export function activeProfileName(profiles) {
|
|
70
|
+
return process.env.SCRIBE_PROFILE?.trim() || profiles.activeProfile;
|
|
71
|
+
}
|
|
72
|
+
export function loadConfig() {
|
|
73
|
+
const profiles = loadProfiles();
|
|
74
|
+
if (!profiles)
|
|
75
|
+
return null;
|
|
76
|
+
return profiles.profiles[activeProfileName(profiles)] ?? null;
|
|
77
|
+
}
|
|
78
|
+
function write(profiles) {
|
|
79
|
+
mkdirSync(configDir(), { recursive: true });
|
|
80
|
+
// 0600: the file holds API keys for every environment this machine can reach.
|
|
81
|
+
writeFileSync(configPath(), JSON.stringify(profiles, null, 2), { mode: 0o600 });
|
|
82
|
+
}
|
|
83
|
+
/** Writes one profile and makes it active. Used by `scribe login`. */
|
|
84
|
+
export function saveProfile(name, config) {
|
|
85
|
+
const existing = loadProfiles() ?? { activeProfile: name, profiles: {} };
|
|
86
|
+
write({
|
|
87
|
+
activeProfile: name,
|
|
88
|
+
profiles: { ...existing.profiles, [name]: config },
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Writes the **active** profile. Kept because it is a published export of
|
|
93
|
+
* `@scribe-platform/cli`; removing it would be a breaking change to the package
|
|
94
|
+
* API for the sake of an internal rename. New code wants `saveProfile`.
|
|
95
|
+
*/
|
|
16
96
|
export function saveConfig(config) {
|
|
17
|
-
|
|
18
|
-
|
|
97
|
+
const existing = loadProfiles();
|
|
98
|
+
saveProfile(existing ? activeProfileName(existing) : DEFAULT_PROFILE, config);
|
|
99
|
+
}
|
|
100
|
+
/** Switches the active profile. Throws when it does not exist, so a typo cannot silently pick nothing. */
|
|
101
|
+
export function useProfile(name) {
|
|
102
|
+
const existing = loadProfiles();
|
|
103
|
+
if (!existing || !existing.profiles[name]) {
|
|
104
|
+
throw new Error(`No profile "${name}". Run \`scribe profile list\` to see what there is.`);
|
|
105
|
+
}
|
|
106
|
+
write({ ...existing, activeProfile: name });
|
|
107
|
+
}
|
|
108
|
+
export function removeProfile(name) {
|
|
109
|
+
const existing = loadProfiles();
|
|
110
|
+
if (!existing || !existing.profiles[name])
|
|
111
|
+
throw new Error(`No profile "${name}".`);
|
|
112
|
+
const remaining = { ...existing.profiles };
|
|
113
|
+
delete remaining[name];
|
|
114
|
+
const names = Object.keys(remaining);
|
|
115
|
+
if (names.length === 0)
|
|
116
|
+
throw new Error(`"${name}" is the only profile — removing it would log this machine out.`);
|
|
117
|
+
write({
|
|
118
|
+
// Removing the active one has to leave *something* active, or every later
|
|
119
|
+
// command fails with "not logged in" on a machine that plainly is.
|
|
120
|
+
activeProfile: existing.activeProfile === name ? names[0] : existing.activeProfile,
|
|
121
|
+
profiles: remaining,
|
|
122
|
+
});
|
|
19
123
|
}
|
|
20
124
|
export function configPath() {
|
|
21
|
-
return
|
|
125
|
+
return join(configDir(), 'config.json');
|
|
126
|
+
}
|
|
127
|
+
/** Last 4 characters only — enough to tell two keys apart, useless if it leaks. */
|
|
128
|
+
export function maskToken(token) {
|
|
129
|
+
return token.length <= 4 ? '••••' : `••••${token.slice(-4)}`;
|
|
22
130
|
}
|
|
23
131
|
//# sourceMappingURL=config.js.map
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SeoReport } from './client.js';
|
|
2
|
+
/**
|
|
3
|
+
* The judgment half of RFC 0032, printed as questions rather than results.
|
|
4
|
+
*
|
|
5
|
+
* These are the audit's *highest* priority findings and a crawler cannot decide
|
|
6
|
+
* one of them. They live here, in the output, rather than only in the skill,
|
|
7
|
+
* because the output is the thing Ashley's Claude actually reads — the skill
|
|
8
|
+
* tells it to ask these, and this list is what it asks. One copy, so the two
|
|
9
|
+
* cannot drift.
|
|
10
|
+
*
|
|
11
|
+
* Phrased as questions with no right answer on purpose. "Not yet" is a real
|
|
12
|
+
* answer and the point is that it gets said out loud before a Site goes live,
|
|
13
|
+
* not that every Site has all six.
|
|
14
|
+
*/
|
|
15
|
+
export declare const JUDGMENT_QUESTIONS: readonly string[];
|
|
16
|
+
/** Whether anything actually failed. A skip never contributes. */
|
|
17
|
+
export declare function seoFailed(report: SeoReport): boolean;
|
|
18
|
+
export declare function printSeoReport(report: SeoReport, write?: (line: string) => void): void;
|
|
19
|
+
//# sourceMappingURL=seo-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo-report.d.ts","sourceRoot":"","sources":["../../src/lib/seo-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAc7C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAO/C,CAAC;AAEF,kEAAkE;AAClE,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAEpD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAkB,GAAG,IAAI,CA0CnG"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Printing an RFC 0032 SEO check.
|
|
3
|
+
*
|
|
4
|
+
* A sibling of `verify-report.ts`, and shaped like it on purpose: the two
|
|
5
|
+
* commands should read the same way, because they are the same kind of answer
|
|
6
|
+
* about two different questions. What it does *not* share is the verdict —
|
|
7
|
+
* `seoFailed` is about `SeoReport.failed` alone, and nothing here can ever
|
|
8
|
+
* contribute to an invariant failure.
|
|
9
|
+
*/
|
|
10
|
+
const MARK = { pass: '✓', fail: '✗', skip: '–' };
|
|
11
|
+
/**
|
|
12
|
+
* The judgment half of RFC 0032, printed as questions rather than results.
|
|
13
|
+
*
|
|
14
|
+
* These are the audit's *highest* priority findings and a crawler cannot decide
|
|
15
|
+
* one of them. They live here, in the output, rather than only in the skill,
|
|
16
|
+
* because the output is the thing Ashley's Claude actually reads — the skill
|
|
17
|
+
* tells it to ask these, and this list is what it asks. One copy, so the two
|
|
18
|
+
* cannot drift.
|
|
19
|
+
*
|
|
20
|
+
* Phrased as questions with no right answer on purpose. "Not yet" is a real
|
|
21
|
+
* answer and the point is that it gets said out loud before a Site goes live,
|
|
22
|
+
* not that every Site has all six.
|
|
23
|
+
*/
|
|
24
|
+
export const JUDGMENT_QUESTIONS = [
|
|
25
|
+
'Does the site say which town and area the business serves, on the pages a visitor lands on?',
|
|
26
|
+
'Is there real client proof — a name, a review, a photo of finished work — rather than a placeholder?',
|
|
27
|
+
'Is there a page for each main thing they sell, rather than one page with sections?',
|
|
28
|
+
'Does the contact form sit next to a privacy policy, if it collects a name, email or phone?',
|
|
29
|
+
'Would someone who has never heard of this business understand what it does from the home page alone?',
|
|
30
|
+
'Is the business claimed on Google with the same name, address and phone number as the site?',
|
|
31
|
+
];
|
|
32
|
+
/** Whether anything actually failed. A skip never contributes. */
|
|
33
|
+
export function seoFailed(report) {
|
|
34
|
+
return report.failed.length > 0;
|
|
35
|
+
}
|
|
36
|
+
export function printSeoReport(report, write = console.log) {
|
|
37
|
+
write(`\nChecking "${report.slug}" can be found — ${report.url}`);
|
|
38
|
+
if (report.pagesChecked.length === 0) {
|
|
39
|
+
write('\n Nothing deployed yet — no page could be fetched, so nothing was checked.');
|
|
40
|
+
for (const error of report.pageErrors)
|
|
41
|
+
write(` ${error.url} — ${error.reason}`);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
const how = report.discovery === 'sitemap' ? "from the site's own sitemap" : 'by following links from the home page';
|
|
45
|
+
const capped = report.truncated ? ', capped — more pages exist than were checked' : '';
|
|
46
|
+
write(` ${report.pagesChecked.length} page(s) checked, found ${how}${capped}\n`);
|
|
47
|
+
}
|
|
48
|
+
for (const check of report.checks) {
|
|
49
|
+
write(` ${MARK[check.state] ?? '?'} ${check.name.padEnd(12)} ${check.message}`);
|
|
50
|
+
for (const line of check.detail ?? [])
|
|
51
|
+
write(` ${line}`);
|
|
52
|
+
}
|
|
53
|
+
if (report.pagesChecked.length > 0 && report.pageErrors.length > 0) {
|
|
54
|
+
write('\n Could not be fetched (not counted either way):');
|
|
55
|
+
for (const error of report.pageErrors)
|
|
56
|
+
write(` ${error.url} — ${error.reason}`);
|
|
57
|
+
}
|
|
58
|
+
write('');
|
|
59
|
+
if (seoFailed(report)) {
|
|
60
|
+
write(` ${report.failed.length} check(s) failed: ${report.failed.join(', ')}`);
|
|
61
|
+
}
|
|
62
|
+
else if (report.pagesChecked.length === 0) {
|
|
63
|
+
write(' Nothing about the deployed site was checked. Deploy it, then run this again.');
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
const skipped = report.skipped.length > 0 ? `, ${report.skipped.length} not applicable yet` : '';
|
|
67
|
+
write(` All ${report.ran} applicable check(s) passed${skipped}.`);
|
|
68
|
+
}
|
|
69
|
+
if (!report.stored) {
|
|
70
|
+
write("\n Not recorded against this site: it is not on the client's own domain yet.");
|
|
71
|
+
}
|
|
72
|
+
// Always printed, pass or fail. The mechanical half passing is exactly when
|
|
73
|
+
// somebody is most likely to call the site finished.
|
|
74
|
+
write('\n Ask the person you are working with, because no tool can answer these:\n');
|
|
75
|
+
for (const question of JUDGMENT_QUESTIONS)
|
|
76
|
+
write(` · ${question}`);
|
|
77
|
+
write('');
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=seo-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo-report.js","sourceRoot":"","sources":["../../src/lib/seo-report.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,MAAM,IAAI,GAA2B,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAEzE;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAsB;IACnD,6FAA6F;IAC7F,sGAAsG;IACtG,oFAAoF;IACpF,4FAA4F;IAC5F,sGAAsG;IACtG,6FAA6F;CAC9F,CAAC;AAEF,kEAAkE;AAClE,MAAM,UAAU,SAAS,CAAC,MAAiB;IACzC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAiB,EAAE,QAAgC,OAAO,CAAC,GAAG;IAC3F,KAAK,CAAC,eAAe,MAAM,CAAC,IAAI,oBAAoB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IAElE,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,8EAA8E,CAAC,CAAC;QACtF,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,UAAU;YAAE,KAAK,CAAC,OAAO,KAAK,CAAC,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACrF,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GACP,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,uCAAuC,CAAC;QAC3G,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,+CAA+C,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,KAAK,CAAC,KAAK,MAAM,CAAC,YAAY,CAAC,MAAM,2BAA2B,GAAG,GAAG,MAAM,IAAI,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjF,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE;YAAE,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnE,KAAK,CAAC,oDAAoD,CAAC,CAAC;QAC5D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,UAAU;YAAE,KAAK,CAAC,OAAO,KAAK,CAAC,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,KAAK,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,qBAAqB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;SAAM,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,KAAK,CAAC,gFAAgF,CAAC,CAAC;IAC1F,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,MAAM,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;QACjG,KAAK,CAAC,SAAS,MAAM,CAAC,GAAG,8BAA8B,OAAO,GAAG,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,CAAC,+EAA+E,CAAC,CAAC;IACzF,CAAC;IAED,4EAA4E;IAC5E,qDAAqD;IACrD,KAAK,CAAC,8EAA8E,CAAC,CAAC;IACtF,KAAK,MAAM,QAAQ,IAAI,kBAAkB;QAAE,KAAK,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAC;IACtE,KAAK,CAAC,EAAE,CAAC,CAAC;AACZ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scribe-platform/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "Command-line interface for Scribe CMS \u2014 scaffold sites, edit content, and triage form submissions from the terminal",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Dave Weaver",
|
|
@@ -75,6 +75,7 @@ instead of reading all of them:
|
|
|
75
75
|
| [`recipes/collections.md`](./recipes/collections.md) | rendering editor-managed content |
|
|
76
76
|
| [`recipes/forms.md`](./recipes/forms.md) | adding one or more forms |
|
|
77
77
|
| [`recipes/deploy.md`](./recipes/deploy.md) | build/deploy setup or debugging |
|
|
78
|
+
| [`recipes/seo.md`](./recipes/seo.md) | making a site findable — sitemap, robots, canonicals, share cards, business details |
|
|
78
79
|
| [`recipes/domains.md`](./recipes/domains.md) | anything about a domain — whether the client has one, getting them one, the DNS, taking a site live on it, fixing one |
|
|
79
80
|
| [`recipes/requests.md`](./recipes/requests.md) | working the queue of jobs clients have asked the agency for |
|
|
80
81
|
| [`recipes/prospects.md`](./recipes/prospects.md) | logging calls and follow-ups on prospects (not site-building) |
|
|
@@ -155,7 +156,7 @@ Three rules, in full, because getting them wrong is expensive:
|
|
|
155
156
|
admin UI (sign in → account menu → **API Tokens** → New token). This is the
|
|
156
157
|
whole machine setup: it writes `~/.scribe/config.json`, installs this skill,
|
|
157
158
|
and turns on auto-updates. Defaults to the hosted admin at
|
|
158
|
-
`https://
|
|
159
|
+
`https://my.weaverdigital.io`; add `--api-url <url>` only to point at a
|
|
159
160
|
different instance (a local dev/Docker admin). Every other command reads that
|
|
160
161
|
config, no per-invocation `--token` flag. If a command fails with a raw `fetch failed`, that's not an API
|
|
161
162
|
error — it means `apiUrl` in that config doesn't point at anything listening;
|
|
@@ -272,7 +273,31 @@ file that the update might have changed; if you need the new text now, read
|
|
|
272
273
|
`scribe site verify my-site` runs the checks on their own, against whatever is
|
|
273
274
|
currently live. Exits non-zero on a failure, so it works in a script.
|
|
274
275
|
|
|
275
|
-
8. **
|
|
276
|
+
8. **Before going live, check the site can be found.** Only for a site that is
|
|
277
|
+
actually going on a client's domain — skip it for demos.
|
|
278
|
+
|
|
279
|
+
```
|
|
280
|
+
scribe site seo my-site
|
|
281
|
+
```
|
|
282
|
+
Eleven mechanical checks (RFC 0032): the sitemap, the robots file, each
|
|
283
|
+
page's title and description, canonicals, the card a shared link shows, the
|
|
284
|
+
business details search engines read, a reachable phone number, image alt
|
|
285
|
+
text. Each failure names [`recipes/seo.md`](./recipes/seo.md), which is how
|
|
286
|
+
to fix it. Three of them (`sitemap`, `canonical`, `indexable`) skip until the
|
|
287
|
+
site is on its domain — that is expected and not something to fix.
|
|
288
|
+
|
|
289
|
+
**Then ask her the questions the report ends with.** They are printed every
|
|
290
|
+
time, pass or fail, because no tool can answer them: is that testimonial a
|
|
291
|
+
real client, is there a page for each thing they sell, does the form need a
|
|
292
|
+
privacy policy, does the site name the town. Put them to her one at a time,
|
|
293
|
+
in her words, and fix what you can from her answers. *"Not yet"* is a real
|
|
294
|
+
answer — the point is that it is said out loud while it is still cheap.
|
|
295
|
+
|
|
296
|
+
**Do not promote until both halves have an answer.** `promote` refuses on a
|
|
297
|
+
failing check anyway, the same way it refuses when DNS is not ready. If it
|
|
298
|
+
does, fix the cause and run it again rather than reaching for `--force`.
|
|
299
|
+
|
|
300
|
+
9. **Domain cutover — only when a customer's own hostname is ready.** Skip this
|
|
276
301
|
entirely for demo sites; the GitHub Pages default already works.
|
|
277
302
|
|
|
278
303
|
If it *isn't* ready — the client may not own a domain, may not know who holds
|
|
@@ -326,6 +351,7 @@ file that the update might have changed; if you need the new text now, read
|
|
|
326
351
|
## Working an existing site
|
|
327
352
|
|
|
328
353
|
```
|
|
354
|
+
scribe site seo <site> [--json] # can it be found? run before promote
|
|
329
355
|
scribe site promote <site> --domain <domain> [--dns-only] # take it live on a real domain
|
|
330
356
|
scribe site update <site> --turnstile-key <key> # correct stored settings only
|
|
331
357
|
|
|
@@ -16,6 +16,7 @@ generated config to keep in sync.
|
|
|
16
16
|
| [`collections.md`](./collections.md) | rendering content (posts, products, events) that editors manage in Scribe |
|
|
17
17
|
| [`forms.md`](./forms.md) | putting one or more forms on the Site |
|
|
18
18
|
| [`deploy.md`](./deploy.md) | setting up or debugging the build and deploy |
|
|
19
|
+
| [`seo.md`](./seo.md) | making a site findable: sitemap, robots, canonicals, share cards, business details |
|
|
19
20
|
| [`domains.md`](./domains.md) | finding out whether a client has a domain, getting them one, the DNS, taking a Site live on it, or repairing one |
|
|
20
21
|
| [`requests.md`](./requests.md) | working the queue of jobs clients have asked the agency for |
|
|
21
22
|
| [`prospects.md`](./prospects.md) | recording and nurturing prospects in the calling pipeline |
|