frontpage-host 0.1.2 → 0.1.4
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/AGENTS.md +35 -8
- package/dist/commands/diff.js +24 -16
- package/dist/completions/generate.js +1 -1
- package/dist/git-blob-sha.d.ts +7 -0
- package/dist/git-blob-sha.js +14 -0
- package/dist/registry.d.ts +1 -1
- package/dist/registry.js +70 -10
- package/llms.txt +3 -2
- package/package.json +1 -1
package/AGENTS.md
CHANGED
|
@@ -66,12 +66,15 @@ frontpage use <subdomain>
|
|
|
66
66
|
|
|
67
67
|
## File sync recipe
|
|
68
68
|
|
|
69
|
-
Allowlisted roots only: `src/`, `public/`, `content/`. Other paths never sync (including
|
|
69
|
+
Allowlisted roots only: `src/`, `public/`, `content/`. Other paths never sync (including platform-owned scaffold/overlay files such as `BaseLayout.astro`, `Modules.astro`, and `src/components/extensions/**`). Do not store secrets in the site tree (`.env`, `*.pem`, `secrets/`, `credentials.json`) — the API rejects those paths.
|
|
70
70
|
|
|
71
71
|
```bash
|
|
72
|
+
# Session start / before editing: refresh if tip may have moved
|
|
73
|
+
frontpage status --json # data.tipDrift === true → must pull
|
|
74
|
+
# or just:
|
|
72
75
|
frontpage pull
|
|
73
76
|
# edit local allowlisted files
|
|
74
|
-
frontpage diff --json # data.dirty
|
|
77
|
+
frontpage diff --json # data.dirty / data.tipDrift; compares git blob SHAs (one list GET)
|
|
75
78
|
frontpage push --message "…"
|
|
76
79
|
# on exit 3 (CAS / active run): frontpage status --json → pull or wait → retry push
|
|
77
80
|
# Review at https://<subdomain>.frontpage.host
|
|
@@ -80,12 +83,35 @@ frontpage push --message "…"
|
|
|
80
83
|
|
|
81
84
|
Rules:
|
|
82
85
|
|
|
83
|
-
1. **Pull before
|
|
84
|
-
2. **
|
|
85
|
-
3.
|
|
86
|
-
4.
|
|
87
|
-
5.
|
|
88
|
-
6.
|
|
86
|
+
1. **Pull before edit** when the remote tip may have moved (UI agent, another machine, or you pushed elsewhere). Check `status --json` / `diff --json` → `tipDrift`, or pull at session start. Stale local trees are not auto-healed; CAS only blocks a bad **push**.
|
|
87
|
+
2. **Pull before push** so `baseCommitSha` is set (CAS). Still required even if you already pulled to edit.
|
|
88
|
+
3. **Do not push** while an agent run is active (`status` / `runs`).
|
|
89
|
+
4. Push updates **staging** (subdomain). Production is unchanged until someone runs `publish`.
|
|
90
|
+
5. Pushing module markup may auto-activate modules (same as the editor agent).
|
|
91
|
+
6. Binaries use base64; do not UTF-8 round-trip them.
|
|
92
|
+
7. Prefer reviewing the subdomain after push; only use `deploy wait` if you need to block until a build finishes.
|
|
93
|
+
8. The **UI / canvas agent does not use this CLI** — it edits the live tip in-process. Only CLI checkouts need `pull`.
|
|
94
|
+
|
|
95
|
+
## Site contract (Astro)
|
|
96
|
+
|
|
97
|
+
Sites are Astro 6 + Tailwind v4. More detail: `frontpage help site-building` or https://frontpage.host/developers/site-building
|
|
98
|
+
|
|
99
|
+
1. **Every page** wraps content in `<BaseLayout title="…" description="…">` (import from `src/layouts/BaseLayout.astro`).
|
|
100
|
+
2. **`src/config/site.ts`** — keep `pages` (path registry) and `nav` in sync when adding/renaming/deleting page files. Tab title comes from BaseLayout, not the `pages` map label.
|
|
101
|
+
3. **One file per URL** for similar page sets (services, guides, …). Do not default to `getStaticPaths()` over `src/data/*.ts`. Blog/news → `frontpage articles`, not a hand-rolled catalog.
|
|
102
|
+
4. **No backends / databases / fake forms or checkout.** Real forms use `<form data-fp-form="slug">` + `frontpage modules`. Refuse or use modules for payments.
|
|
103
|
+
5. **Tokens** in `src/config/tokens.ts` — keep required color/font/spacing/radii keys; style via CSS variables / token Tailwind. Setting a font token is not enough — apply `font-sans` / `font-serif` / `font-display`. No CLI font catalog yet; use existing tokens or `frontpage prompt`.
|
|
104
|
+
6. **Shared chrome** — prefer `src/components/Header.astro` + `Footer.astro` (or `chrome: { managed: true }` in `site.ts`).
|
|
105
|
+
7. **404** — customize `src/pages/404.astro` if needed; keep `frontpage:404` meta; never register `/404` in `nav`/`pages`.
|
|
106
|
+
8. **Platform-owned paths** stay off-limits (BaseLayout overlay, module/extension shells, `package.json`, …). Customer layouts like `DocsLayout` / `GuideLayout` are OK.
|
|
107
|
+
|
|
108
|
+
## Modules & articles
|
|
109
|
+
|
|
110
|
+
- Forms: `data-fp-form` markup in pages + `frontpage modules` for enable/config. No submit JS / honeypot / `action`.
|
|
111
|
+
- Articles: `frontpage articles …` for lifecycle; bodies via sync under `content/` or `articles content get|set`. Section landing is an owned `src/pages/<section>/index.astro`.
|
|
112
|
+
- Migrate a folder into Articles: prefer `frontpage prompt "migrate … into articles"` — do not invent a mass delete+write migration.
|
|
113
|
+
- Extensions: `frontpage extensions`; if LOCKED on plan, do not fake charts/etc.
|
|
114
|
+
- Media in markup: `/__media/uploads/<slug>/…` from `frontpage media` (not raw blob URLs).
|
|
89
115
|
|
|
90
116
|
## Agent prompt loop
|
|
91
117
|
|
|
@@ -189,6 +215,7 @@ Safe default after finishing work: summarize what changed and give the staging U
|
|
|
189
215
|
frontpage help
|
|
190
216
|
frontpage help --json
|
|
191
217
|
frontpage help sync
|
|
218
|
+
frontpage help site-building
|
|
192
219
|
frontpage help agent
|
|
193
220
|
frontpage doctor --json
|
|
194
221
|
```
|
package/dist/commands/diff.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { readFile, readdir
|
|
2
|
-
import { createHash } from "node:crypto";
|
|
1
|
+
import { readFile, readdir } from "node:fs/promises";
|
|
3
2
|
import { join, relative, sep } from "node:path";
|
|
4
3
|
import { resolveSlug } from "../site.js";
|
|
5
4
|
import { EXIT_OK, EXIT_USAGE, v1Get } from "../http/client.js";
|
|
6
5
|
import { emitErr, emitOk, emitUsage, isJson } from "../runtime.js";
|
|
6
|
+
import { readState } from "../state/frontpage-state.js";
|
|
7
|
+
import { gitBlobSha, isGitBlobSha } from "../git-blob-sha.js";
|
|
7
8
|
const ROOTS = ["src", "public", "content"];
|
|
8
9
|
async function walkLocal(cwd) {
|
|
9
10
|
const map = new Map();
|
|
@@ -27,7 +28,7 @@ async function walkLocal(cwd) {
|
|
|
27
28
|
if (!ROOTS.some((r) => rel === r || rel.startsWith(`${r}/`)))
|
|
28
29
|
continue;
|
|
29
30
|
const buf = await readFile(child);
|
|
30
|
-
map.set(rel,
|
|
31
|
+
map.set(rel, gitBlobSha(buf));
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
34
|
}
|
|
@@ -35,32 +36,32 @@ async function walkLocal(cwd) {
|
|
|
35
36
|
await walk(join(cwd, root));
|
|
36
37
|
return map;
|
|
37
38
|
}
|
|
38
|
-
function
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
function assertRemoteBlobShas(files) {
|
|
40
|
+
for (const f of files) {
|
|
41
|
+
if (!isGitBlobSha(f.blobSha)) {
|
|
42
|
+
throw new Error("Remote file list is missing blobSha. Upgrade Frontpage (API) — this CLI requires git blob SHAs on GET /files and will not fall back to per-file downloads.");
|
|
43
|
+
}
|
|
44
|
+
}
|
|
43
45
|
}
|
|
44
46
|
export async function runDiff(args) {
|
|
45
47
|
try {
|
|
46
48
|
const { slug } = await resolveSlug(args);
|
|
47
49
|
const cwd = process.cwd();
|
|
50
|
+
const state = await readState(cwd);
|
|
48
51
|
const local = await walkLocal(cwd);
|
|
49
52
|
const listing = await v1Get(`/api/v1/sites/${encodeURIComponent(slug)}/files`);
|
|
50
|
-
|
|
53
|
+
assertRemoteBlobShas(listing.files);
|
|
54
|
+
const remoteByPath = new Map(listing.files.map((f) => [f.path, f.blobSha]));
|
|
51
55
|
const added = [];
|
|
52
56
|
const modified = [];
|
|
53
57
|
const deleted = [];
|
|
54
58
|
for (const path of [...local.keys()].sort()) {
|
|
55
|
-
|
|
59
|
+
const remoteSha = remoteByPath.get(path);
|
|
60
|
+
if (!remoteSha) {
|
|
56
61
|
added.push(path);
|
|
57
62
|
continue;
|
|
58
63
|
}
|
|
59
|
-
|
|
60
|
-
const remote = await v1Get(`/api/v1/sites/${encodeURIComponent(slug)}/files/${encPath}`);
|
|
61
|
-
const rh = remoteHash(remote.file);
|
|
62
|
-
const lh = local.get(path);
|
|
63
|
-
if (rh !== lh)
|
|
64
|
+
if (remoteSha.toLowerCase() !== local.get(path).toLowerCase())
|
|
64
65
|
modified.push(path);
|
|
65
66
|
}
|
|
66
67
|
for (const f of listing.files) {
|
|
@@ -68,12 +69,16 @@ export async function runDiff(args) {
|
|
|
68
69
|
deleted.push(f.path);
|
|
69
70
|
}
|
|
70
71
|
const dirty = added.length + modified.length + deleted.length > 0;
|
|
71
|
-
|
|
72
|
+
const tipDrift = Boolean(state.baseCommitSha &&
|
|
73
|
+
listing.baseCommitSha &&
|
|
74
|
+
state.baseCommitSha !== listing.baseCommitSha);
|
|
72
75
|
if (isJson()) {
|
|
73
76
|
emitOk("diff", {
|
|
74
77
|
slug,
|
|
75
78
|
baseCommitSha: listing.baseCommitSha,
|
|
76
79
|
dirty,
|
|
80
|
+
tipDrift,
|
|
81
|
+
comparedWith: "blobSha",
|
|
77
82
|
added,
|
|
78
83
|
modified,
|
|
79
84
|
deleted,
|
|
@@ -92,6 +97,9 @@ export async function runDiff(args) {
|
|
|
92
97
|
else {
|
|
93
98
|
console.error(`# ${added.length + modified.length + deleted.length} difference(s) · tip ${(listing.baseCommitSha ?? "").slice(0, 7) || "?"} · A=local-only M=modified D=remote-only`);
|
|
94
99
|
}
|
|
100
|
+
if (tipDrift) {
|
|
101
|
+
console.error("# tipDrift: remote tip moved since last pull — run frontpage pull before editing further");
|
|
102
|
+
}
|
|
95
103
|
return EXIT_OK;
|
|
96
104
|
}
|
|
97
105
|
catch (err) {
|
|
@@ -14,7 +14,7 @@ _frontpage_completions() {
|
|
|
14
14
|
fi
|
|
15
15
|
local cmd="\${COMP_WORDS[1]}"
|
|
16
16
|
case "\${cmd}" in
|
|
17
|
-
help) COMPREPLY=( $(compgen -W "\${cmds} quickstart auth sync agent content history isolation exit-codes" -- "\${cur}") ) ;;
|
|
17
|
+
help) COMPREPLY=( $(compgen -W "\${cmds} quickstart auth sync site-building agent content history isolation exit-codes" -- "\${cur}") ) ;;
|
|
18
18
|
completion) COMPREPLY=( $(compgen -W "bash zsh fish" -- "\${cur}") ) ;;
|
|
19
19
|
runs) COMPREPLY=( $(compgen -W "list current wait cancel retry get" -- "\${cur}") ) ;;
|
|
20
20
|
deploy) COMPREPLY=( $(compgen -W "wait" -- "\${cur}") ) ;;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git blob object SHA-1 — same digest as `git hash-object` / GitHub tree `sha`.
|
|
3
|
+
* Header is `blob <byteLength>\0` followed by raw file bytes (not UTF-8 reinterpreted).
|
|
4
|
+
*/
|
|
5
|
+
export declare function gitBlobSha(content: Buffer): string;
|
|
6
|
+
/** True when a remote list entry carries a usable git blob SHA. */
|
|
7
|
+
export declare function isGitBlobSha(value: unknown): value is string;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
/**
|
|
3
|
+
* Git blob object SHA-1 — same digest as `git hash-object` / GitHub tree `sha`.
|
|
4
|
+
* Header is `blob <byteLength>\0` followed by raw file bytes (not UTF-8 reinterpreted).
|
|
5
|
+
*/
|
|
6
|
+
export function gitBlobSha(content) {
|
|
7
|
+
const header = Buffer.from(`blob ${content.length}\0`, "utf8");
|
|
8
|
+
return createHash("sha1").update(header).update(content).digest("hex");
|
|
9
|
+
}
|
|
10
|
+
const BLOB_SHA_RE = /^[0-9a-f]{40}$/i;
|
|
11
|
+
/** True when a remote list entry carries a usable git blob SHA. */
|
|
12
|
+
export function isGitBlobSha(value) {
|
|
13
|
+
return typeof value === "string" && BLOB_SHA_RE.test(value);
|
|
14
|
+
}
|
package/dist/registry.d.ts
CHANGED
|
@@ -14,6 +14,6 @@ export type CommandDef = {
|
|
|
14
14
|
seeAlso?: string[];
|
|
15
15
|
};
|
|
16
16
|
export declare const COMMANDS: readonly CommandDef[];
|
|
17
|
-
export declare const TOPIC_NAMES: readonly ["quickstart", "auth", "sync", "agent", "content", "history", "isolation", "exit-codes"];
|
|
17
|
+
export declare const TOPIC_NAMES: readonly ["quickstart", "auth", "sync", "site-building", "agent", "content", "history", "isolation", "exit-codes"];
|
|
18
18
|
export declare const TOPICS: Record<string, string>;
|
|
19
19
|
export declare function findCommand(name: string): CommandDef | undefined;
|
package/dist/registry.js
CHANGED
|
@@ -7,8 +7,24 @@ export const COMMANDS = [
|
|
|
7
7
|
name: "help",
|
|
8
8
|
summary: "Show available commands",
|
|
9
9
|
usage: "frontpage help [command|topic] [--json]",
|
|
10
|
-
topics: [
|
|
11
|
-
|
|
10
|
+
topics: [
|
|
11
|
+
"auth",
|
|
12
|
+
"sync",
|
|
13
|
+
"site-building",
|
|
14
|
+
"agent",
|
|
15
|
+
"content",
|
|
16
|
+
"history",
|
|
17
|
+
"isolation",
|
|
18
|
+
"exit-codes",
|
|
19
|
+
"quickstart",
|
|
20
|
+
],
|
|
21
|
+
examples: [
|
|
22
|
+
"frontpage help",
|
|
23
|
+
"frontpage help sync",
|
|
24
|
+
"frontpage help site-building",
|
|
25
|
+
"frontpage help push",
|
|
26
|
+
"frontpage help --json",
|
|
27
|
+
],
|
|
12
28
|
},
|
|
13
29
|
{
|
|
14
30
|
name: "login",
|
|
@@ -86,11 +102,14 @@ export const COMMANDS = [
|
|
|
86
102
|
},
|
|
87
103
|
{
|
|
88
104
|
name: "diff",
|
|
89
|
-
summary: "Compare local allowlisted files to the remote tip",
|
|
105
|
+
summary: "Compare local allowlisted files to the remote tip (git blob SHA)",
|
|
90
106
|
usage: "frontpage diff [--site <slug>] [--json]",
|
|
91
107
|
topics: ["sync"],
|
|
92
108
|
examples: ["frontpage diff --json"],
|
|
93
|
-
flags: [
|
|
109
|
+
flags: [
|
|
110
|
+
"--site <slug>",
|
|
111
|
+
"JSON data.dirty when local ≠ remote; data.tipDrift when last pull tip ≠ remote tip",
|
|
112
|
+
],
|
|
94
113
|
},
|
|
95
114
|
{
|
|
96
115
|
name: "ls",
|
|
@@ -288,6 +307,7 @@ export const TOPIC_NAMES = [
|
|
|
288
307
|
"quickstart",
|
|
289
308
|
"auth",
|
|
290
309
|
"sync",
|
|
310
|
+
"site-building",
|
|
291
311
|
"agent",
|
|
292
312
|
"content",
|
|
293
313
|
"history",
|
|
@@ -312,8 +332,8 @@ export const TOPICS = {
|
|
|
312
332
|
|
|
313
333
|
Staging is the subdomain. There is no separate staging-deploy step for agents.
|
|
314
334
|
Never publish/unpublish unless the user explicitly asks.
|
|
315
|
-
Agents: read AGENTS.md
|
|
316
|
-
More: frontpage help auth | sync | agent | content | history | isolation | exit-codes`,
|
|
335
|
+
Agents: read AGENTS.md + frontpage help site-building; use --json for structured I/O.
|
|
336
|
+
More: frontpage help auth | sync | site-building | agent | content | history | isolation | exit-codes`,
|
|
317
337
|
auth: `Authentication
|
|
318
338
|
1. Create a key in the Frontpage editor: profile menu → Developers
|
|
319
339
|
2. frontpage login
|
|
@@ -326,27 +346,63 @@ export const TOPICS = {
|
|
|
326
346
|
PUBLIC_CLI_ENABLED is server-side — the CLI cannot enable it.`,
|
|
327
347
|
sync: `File sync
|
|
328
348
|
frontpage use <subdomain>
|
|
349
|
+
frontpage status # tipDrift when remote moved since last pull
|
|
329
350
|
frontpage pull # downloads src/, public/, content/ into cwd
|
|
330
|
-
frontpage diff # local vs remote
|
|
351
|
+
frontpage diff # local vs remote via git blobSha (--json → dirty + tipDrift)
|
|
331
352
|
frontpage push [--message …] # uploads allowlisted files; CAS + active-run guard
|
|
332
353
|
frontpage ls [prefix]
|
|
333
354
|
frontpage cat <path>
|
|
334
355
|
frontpage search <pattern>
|
|
335
|
-
frontpage status
|
|
336
356
|
frontpage open # opens https://<slug>.frontpage.host/ (--prod is a no-op stub)
|
|
337
357
|
|
|
338
358
|
Local state: .frontpage/state.json { slug, baseCommitSha }
|
|
339
|
-
Pull
|
|
340
|
-
Do not push while the editor agent is building
|
|
359
|
+
Pull BEFORE EDITING when tip may have moved (UI agent / another checkout) — check tipDrift.
|
|
360
|
+
Pull before push so CAS has baseCommitSha. Do not push while the editor agent is building.
|
|
361
|
+
The UI/canvas agent does not use this CLI; only CLI checkouts need pull.
|
|
341
362
|
Pushing module markup may auto-activate modules (same as the agent).
|
|
342
363
|
tokens.ts may be auto-repaired at commit if it would break the build.
|
|
343
364
|
Binaries use base64 (not utf8-corrupted).
|
|
365
|
+
Platform overlay files (BaseLayout, Modules, Analytics, extensions, …) are not syncable.
|
|
366
|
+
Do not store secrets in the site tree (.env, *.pem, secrets/, credentials.json) — rejected by the API.
|
|
344
367
|
|
|
345
368
|
Staging vs production:
|
|
346
369
|
- Push/prompt/edit update STAGING: https://<subdomain>.frontpage.host
|
|
347
370
|
- No separate "deploy to staging" step for agents — review the subdomain after the build.
|
|
348
371
|
- frontpage deploy wait only waits for an in-flight build; it is NOT go-live.
|
|
349
372
|
- frontpage publish promotes staging → production (custom domain). Never publish unless asked.`,
|
|
373
|
+
"site-building": `Site building (Astro contract)
|
|
374
|
+
Stack: Astro 6 + Tailwind v4. Pages in src/pages/. Every page wraps <BaseLayout title description>.
|
|
375
|
+
Control files: src/config/tokens.ts (design tokens), src/config/site.ts (title, nav, pages map, seo).
|
|
376
|
+
|
|
377
|
+
Pages map:
|
|
378
|
+
- Add/rename/delete a page file ⇒ update pages (+ nav if needed) in the SAME change set.
|
|
379
|
+
- Real title/description live on <BaseLayout>, not as authority in the pages map.
|
|
380
|
+
- One discrete .astro file per URL for similar sets (services, guides…). Do NOT default to
|
|
381
|
+
getStaticPaths() over src/data/*.ts. Blog/news → frontpage articles.
|
|
382
|
+
|
|
383
|
+
Hard fences:
|
|
384
|
+
- No API routes, serverless backends, or databases.
|
|
385
|
+
- No fake lead forms / checkout / card fields — use data-fp-* modules + frontpage modules, or refuse.
|
|
386
|
+
- Platform-owned paths are not syncable (BaseLayout overlay, module/extension shells, package.json…).
|
|
387
|
+
- Customer layouts (DocsLayout, GuideLayout, …) are fine when site-owned.
|
|
388
|
+
|
|
389
|
+
Tokens & fonts:
|
|
390
|
+
- Keep required colors/fonts/spacing/radii keys; style via CSS variables / token Tailwind.
|
|
391
|
+
- Setting fonts.sans is not enough — apply font-sans / font-serif / font-display on elements.
|
|
392
|
+
- No frontpage fonts catalog command yet; read tokens.ts or frontpage prompt.
|
|
393
|
+
|
|
394
|
+
Chrome / SEO / 404:
|
|
395
|
+
- Prefer src/components/Header.astro + Footer.astro (or chrome: { managed: true } in site.ts).
|
|
396
|
+
- seo block in site.ts + frontpage seo get|set; customize 404.astro but keep frontpage:404 meta;
|
|
397
|
+
never put /404 in nav or pages. robots/sitemap are platform-managed.
|
|
398
|
+
|
|
399
|
+
Modules & articles (short):
|
|
400
|
+
- Forms: <form data-fp-form="slug"> with named inputs; no action/onsubmit/honeypot.
|
|
401
|
+
- Articles: frontpage articles …; migrate folders via frontpage prompt (don't invent mass delete+write).
|
|
402
|
+
- Media in markup: /__media/uploads/<slug>/… from frontpage media (not raw blob URLs).
|
|
403
|
+
|
|
404
|
+
Full guide: https://frontpage.host/developers/site-building
|
|
405
|
+
See also: frontpage help sync | content | AGENTS.md`,
|
|
350
406
|
agent: `Agent + publish
|
|
351
407
|
frontpage prompt "make the hero shorter"
|
|
352
408
|
frontpage runs # latest + active
|
|
@@ -375,8 +431,12 @@ export const TOPICS = {
|
|
|
375
431
|
frontpage settings get|set
|
|
376
432
|
frontpage edit --path / --old "…" --new "…"
|
|
377
433
|
|
|
434
|
+
Real forms (file sync): <form data-fp-form="slug"> + named inputs — no action/onsubmit/honeypot.
|
|
435
|
+
Do not fake payments/checkout. LOCKED extensions → do not fake; say plan required.
|
|
436
|
+
Migrate pages → articles: prefer frontpage prompt "migrate …" over mass delete+write.
|
|
378
437
|
edit uses click-edit (exact single occurrence), not push / gated-write.
|
|
379
438
|
Module OAuth and secret values are not exposed via the CLI.
|
|
439
|
+
Site contract: frontpage help site-building · https://frontpage.host/developers/site-building
|
|
380
440
|
Domains, billing, members, and site delete are out of v1.`,
|
|
381
441
|
history: `History
|
|
382
442
|
frontpage history [--limit 20] [--page 1]
|
package/llms.txt
CHANGED
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
- Package: frontpage-host (npm). Binary: frontpage. Do NOT install npm package "frontpage".
|
|
4
4
|
- Docs in this package: README.md, AGENTS.md (agent operating manual).
|
|
5
5
|
- Introspect: frontpage help | frontpage help --json | frontpage help <topic|command>
|
|
6
|
-
- Topics: quickstart, auth, sync, agent, content, history, isolation, exit-codes
|
|
6
|
+
- Topics: quickstart, auth, sync, site-building, agent, content, history, isolation, exit-codes
|
|
7
|
+
- Site building: frontpage help site-building — Astro pages map, BaseLayout, tokens, no backends/fake forms
|
|
7
8
|
- Auth: mint fp_live_ key in Frontpage UI (Developers); frontpage login KEY or FRONTPAGE_API_KEY
|
|
8
9
|
- Site id: subdomain only (frontpage use <subdomain>). Not custom domains.
|
|
9
10
|
- Staging: https://<subdomain>.frontpage.host — push/prompt/edit update staging; no separate staging deploy step for agents
|
|
10
11
|
- Production: custom domain after frontpage publish — NEVER publish/unpublish unless the user explicitly asks
|
|
11
|
-
- Sync: allowlist src/ public/ content/; pull → edit → push (CAS); no push during active agent run; review on subdomain
|
|
12
|
+
- Sync: allowlist src/ public/ content/; platform overlay + secret-like paths rejected; pull before edit if tip may have moved (status/diff tipDrift); pull → edit → diff (blobSha) → push (CAS); no push during active agent run; UI agent does not use CLI pull; review on subdomain
|
|
12
13
|
- Machine: global --json / --quiet; exit 0/2/3/4/5 (see help exit-codes)
|
|
13
14
|
- deploy wait = optional build wait only; it is NOT go-live / publish
|
|
14
15
|
- No runs continue, domains, billing, members, MCP, or git remotes in v1
|