frontpage-host 0.3.10 → 0.3.11
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 +2 -0
- package/MAIL.md +23 -2
- package/PEOPLE.md +3 -1
- package/README.md +8 -0
- package/dist/commands/mail.js +24 -0
- package/dist/completions/generate.js +3 -3
- package/dist/registry.js +4 -1
- package/llms.txt +2 -0
- package/package.json +2 -2
package/AGENTS.md
CHANGED
|
@@ -297,3 +297,5 @@ For a manual group, `groups.people` accepts `availability: "all" | "available" |
|
|
|
297
297
|
`groups.update` supports optional expectedFields comparisons for independent label/color/mode/conditions/archivedAt edits; pass the original saved field values with the patch and a stable requestKey. A known absence of purchases is a non-match for last-purchase date conditions, not unknown. Before a reviewed `groups.update`, read `groups.list` and pass its `emailVersion` as optional `expectedGroup`. A 409 means the saved settings changed; read and review again before writing. Membership counts do not change this version. For the UI's Add people CSV behavior, pass `manualGroupsOnly:true` to `import.start`. The job keeps this choice and reports rows if a destination becomes conditional before processing; it never creates an include exception from that request. Retry with the same accepted key/payload, and inspect the saved job. Existing explicit advanced imports keep their prior contract when the option is omitted.
|
|
298
298
|
|
|
299
299
|
Complete Store edits: use existing items update --file with changed fields and variantUpdates. stock requires expectedStock from a fresh items get. One transaction saves all changes or none. On 409 review current stock; never silently substitute it. firstVariant plus optionNames enables versions. Keep explicit stock/variant commands for single operations. Routines add accepts --request-id UUID; reuse that ID and exact schedule after a lost response. Ordinary form edits live only in the active task; Cancel keeps input, Discard loses unfinished input. Submitted payments, imports, builds, and API-key status are separate operations.
|
|
300
|
+
|
|
301
|
+
Template history (frontpage-host 0.3.11+): read `mail template get ID` before editing. `mail template history ID --limit 20 --cursor CURSOR` pages saved copies; `mail template history-get ID --history-id COPY_ID` fetches full content. Edit any copy, then `mail template set ID --file content.json` with the stable template ID and content fields only to make a new latest copy. Last template save wins; past copies remain. Campaign and series conflict checks remain. Retry uncertain saves through `mail save` with the same requestKey and exact payload. History begins with content retained at launch; earlier overwritten edits are unavailable. See MAIL.md.
|
package/MAIL.md
CHANGED
|
@@ -25,12 +25,33 @@ Use `frontpage help mail --json` for command discovery. The existing CLI binary
|
|
|
25
25
|
|
|
26
26
|
This creates a shared template and an On series with one step. It sends nothing and enrolls no one. The first step always has zero delay. Later step delays accept integer minutes from 0 through 525600; a series has at most 12 steps.
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
Read the latest record before editing. Existing campaigns and series need `id` and `expectedUpdatedAt` from `mail email get` / `mail series get`. Existing templates use their stable `id`; their saves keep a new copy and the last save becomes current. A stale template timestamp does not block a save. To edit an existing shared template from a series, send both the complete `document` and complete pending `series` in one save, omitting `append`. **Save & return saves both**, including pending names, steps, removals and waits. To add a new step, send a new template plus the source series and `append:true`.
|
|
29
29
|
|
|
30
30
|
The response reports `complete:true` and the saved records. Keep the exact payload and requestKey after a lost response. Repeating it returns the saved IDs without adding another template or step. Do not reuse a key for different content. A 409 means the saved version changed: retain the draft, read the current records, review the changes, and use a new key for the revised save. A failed transaction saves neither half. Subject, preview text, name and valid content are required. Saving never activates a series or sends email. Queued emails keep their saved content.
|
|
31
31
|
|
|
32
32
|
The workspace's Back button returns to the source series. If template edits are unsaved, the shared modal offers Cancel or Discard and continue. Discard loses the template edits; the pending source series stays in memory while this task is open. Leaving the whole task discards its unfinished work. Save & return and Save email & add step save the template and pending series together; there is no second Save series step. A test sends only to the signed-in account in the workspace, and does not complete a step task. CLI test recipients remain explicit and subject to the existing test restrictions.
|
|
33
33
|
|
|
34
|
+
## Template history
|
|
35
|
+
|
|
36
|
+
Every template keeps its stable ID. Each save keeps a new full copy of its name, subject, preview text, blocks, alignment and declared variables. The most recent saved copy is current. Two people can save without a template conflict; the last save wins and both copies remain in history. Campaign and series conflict checks still apply.
|
|
37
|
+
|
|
38
|
+
History starts with the content present when this feature shipped. Earlier overwritten edits cannot be recovered. Creating a template keeps its first copy. History reads never send, enroll, activate or change content. Deleting a template still checks its dependencies; saved copies do not appear as separate templates or count toward the template limit.
|
|
39
|
+
|
|
40
|
+
```sh
|
|
41
|
+
frontpage mail template get TEMPLATE_ID --site YOUR_SITE --json
|
|
42
|
+
frontpage mail template history TEMPLATE_ID --limit 20 --site YOUR_SITE --json
|
|
43
|
+
frontpage mail template history TEMPLATE_ID --cursor NEXT_CURSOR --site YOUR_SITE --json
|
|
44
|
+
frontpage mail template history-get TEMPLATE_ID --history-id SAVED_COPY_ID --site YOUR_SITE --json
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
History returns `items` (ID, savedAt, name, subject), `currentId` and `nextCursor`. Fetch the next page until `nextCursor` is null. The default page size is 20, with a maximum of 100. `history-get` returns `copy` with full content and `templateId`, the stable ID. The workspace shows the same history under Sender; scrolling loads the next 20 copies.
|
|
48
|
+
|
|
49
|
+
To use an old copy, fetch it, edit it if needed, then save normally. Put only `name`, `subject`, `preheader`, `blocks` and `variables` in a JSON file, then run `frontpage mail template set TEMPLATE_ID --file content.json --site YOUR_SITE --json`. Use the stable TEMPLATE_ID, never the saved-copy ID. This creates a new latest copy; it does not change the old one. There is no separate restore command. Read `template get` before each edit so you start with current work. For response-loss retries use `mail save` with one unchanged `requestKey` and payload; replaying that save creates no duplicate copy.
|
|
50
|
+
|
|
51
|
+
Public API reads: `GET /api/v1/sites/SLUG/mail/templates/TEMPLATE_ID/history?limit=20&cursor=…` and `GET /api/v1/sites/SLUG/mail/templates/TEMPLATE_ID/history/SAVED_COPY_ID`. Viewers may read; editors and owners may save. Site access and plan checks still apply.
|
|
52
|
+
|
|
53
|
+
Agent reads: `list_mail_template_history({id,cursor?,limit?})` and `get_mail_template_history({id,historyId})`. The agent reads `get_mail_template` before editing and uses `update_mail_template({id,name,subject,preheader,blocks,variables})` with the stable ID to save edited content from any copy. `save_mail_editor` provides the same retry-safe save as the CLI. These changes do not alter queued emails or delivery checks.
|
|
54
|
+
|
|
34
55
|
## Group and stage email tasks
|
|
35
56
|
|
|
36
57
|
Group details has an Email section. It shows ordinary rules whose actual trigger is someone joining that group and whose actions send a template or start a series. It uses the same records as Rules. Saved conditions and extra actions stay visible. Moving a rule's placement does not change where it runs.
|
|
@@ -65,7 +86,7 @@ First read `groups.list`. Copy the group's `emailVersion` into `attachment.expec
|
|
|
65
86
|
|
|
66
87
|
The response returns `complete:true`, `document` and `rule`. Repeating the same requestKey and payload returns the same pair. Changed payloads conflict. A failed transaction leaves neither a new template nor a new rule. Keep the exact request after a lost response and retry it before starting another save.
|
|
67
88
|
|
|
68
|
-
To attach an existing source, omit `document`. Add either `attachment.templateId` or `attachment.seriesId` and its `expectedSourceUpdatedAt` from a fresh template/series get. A series needs at least one saved step. The result includes the source and paused rule. To edit shared content from an existing entry rule, supply the existing document with `
|
|
89
|
+
To attach an existing source, omit `document`. Add either `attachment.templateId` or `attachment.seriesId` and its `expectedSourceUpdatedAt` from a fresh template/series get. A series needs at least one saved step. The result includes the source and paused rule. To edit shared content from an existing entry rule, supply the existing document with its stable `id`, plus `attachment.ruleId` and `expectedRevision` from `rules.get`. This saves the content while leaving the rule's conditions, actions, version, enabled state, activation time and history unchanged. Stale group, stage, source or rule checks return a conflict; keep the draft and review the saved records before making a revised request.
|
|
69
90
|
|
|
70
91
|
The workspace uses the existing template editor and returns to the source group or Stages after Save email & attach to group. Unfinished group, rule, stage, picker and template edits stay in memory only. Closing the membership editor with X, Cancel, or Escape immediately discards its unapplied edits, without a confirmation. Other unfinished editors retain the shared unsaved-changes modal: Cancel keeps editing; Discard and continue loses those edits and leaves without a network request. Refresh or closing the tab discards unfinished work without a browser prompt. Clean navigation and opening saved records show no warning. There is no editor backup or Recover save action. A template task keeps its source context in memory during the active flow; a refreshed task must be reopened from its source. A self-test sends only test content and does not complete a pending group task. Retry a submitted save with the exact original key and payload after a lost response; this does not require an editor backup.
|
|
71
92
|
|
package/PEOPLE.md
CHANGED
|
@@ -739,7 +739,7 @@ First read `groups.list`. Copy the group's `emailVersion` into `attachment.expec
|
|
|
739
739
|
|
|
740
740
|
The response returns `complete:true`, `document` and `rule`. Repeating the same requestKey and payload returns the same pair. Changed payloads conflict. A failed transaction leaves neither a new template nor a new rule. Keep the exact request after a lost response and retry it before starting another save.
|
|
741
741
|
|
|
742
|
-
To attach an existing source, omit `document`. Add either `attachment.templateId` or `attachment.seriesId` and its `expectedSourceUpdatedAt` from a fresh template/series get. A series needs at least one saved step. The result includes the source and paused rule. To edit shared content from an existing entry rule, supply the existing document with `
|
|
742
|
+
To attach an existing source, omit `document`. Add either `attachment.templateId` or `attachment.seriesId` and its `expectedSourceUpdatedAt` from a fresh template/series get. A series needs at least one saved step. The result includes the source and paused rule. To edit shared content from an existing entry rule, supply the existing document with its stable `id`, plus `attachment.ruleId` and `expectedRevision` from `rules.get`. This saves the content while leaving the rule's conditions, actions, version, enabled state, activation time and history unchanged. Stale group, stage, source or rule checks return a conflict; keep the draft and review the saved records before making a revised request.
|
|
743
743
|
|
|
744
744
|
The workspace uses the existing template editor and returns to the source group or Stages after Save email & attach to group. Unfinished group, rule, stage, picker and template edits stay in memory only. Leaving uses the shared unsaved-changes modal: Cancel keeps editing; Discard and continue loses those edits and leaves without a network request. Refresh or closing the tab discards unfinished work without a browser prompt. Clean navigation and opening saved records show no warning. There is no editor backup or Recover save action. A template task keeps its source context in memory during the active flow; a refreshed task must be reopened from its source. A self-test sends only test content and does not complete a pending group task. Retry a submitted save with the exact original key and payload after a lost response; this does not require an editor backup.
|
|
745
745
|
|
|
@@ -787,3 +787,5 @@ Read tools accept `resultOffset` (default 0) and `resultLimit` (default 50, maxi
|
|
|
787
787
|
Writes are not universally idempotent. Preserve documented request keys, receipts, revisions and review tokens. After an unknown outcome, read back before creating again; retry receipt-backed operations with their exact original key and payload. Never send, enroll or activate without the user's instruction.
|
|
788
788
|
|
|
789
789
|
For MCP CSV exports, continue `contacts.export` with `textOffset` set to `textPage.nextOffset` and `expectedTextVersion` set to `textPage.version`. The tool returns bounded `csv` text and a version hash; a changed export returns a conflict instead of combining different snapshots. `textLength` defaults to 4,000 UTF-16 units and accepts up to 8,000.
|
|
790
|
+
|
|
791
|
+
Template history uses the existing Email tools. Read get_mail_template before editing. list_mail_template_history({id,cursor?,limit?}) pages copies; get_mail_template_history({id,historyId}) reads full content. Edit any copy and save through update_mail_template with the stable ID to make it latest. Both simultaneous saves remain; last template save wins. Group, rule and series checks remain. CLI equivalents and full instructions: MAIL.md, Template history.
|
package/README.md
CHANGED
|
@@ -114,3 +114,11 @@ An explicit stock target already equal to the current count is a no-op. Repeatin
|
|
|
114
114
|
### AI Support Agent
|
|
115
115
|
|
|
116
116
|
Included on Scale and internal sites after owner activation. Use `frontpage customer-inbox` for settings, knowledge and customer conversations. The command and API paths keep their existing names. See [AI Support Agent](./CUSTOMER-INBOX.md) for permissions, private guidance, takeover, verification and shared usage.
|
|
117
|
+
|
|
118
|
+
### Website models and AI credits
|
|
119
|
+
|
|
120
|
+
GPT 6 Luna is the default for new website runs. Explicit site model preferences and models pinned to existing runs stay in place. Website Luna calls use AI credits at 4× provider token cost; other website models use 1×. AI Support Agent keeps its separate Luna rate of 10×. Each customer-billed call uses its actual model, including helpers and fallbacks. A $0.01 website Luna call uses $0.04 of credits. Token counts never change. Replaying a usage receipt does not charge twice; a separate paid model attempt has its own receipt. See https://frontpage.host/developers/agent-runs for examples.
|
|
121
|
+
|
|
122
|
+
### Template history
|
|
123
|
+
|
|
124
|
+
Template history (0.3.11+): `frontpage mail template history ID` lists saved copies; `history-get ID --history-id COPY_ID` reads full content. Edit any copy and save with `template set ID --file content.json` to make it latest. Use the stable template ID, read current content before editing, and see [MAIL.md](./MAIL.md#template-history) for paging, access and retry-safe saves.
|
package/dist/commands/mail.js
CHANGED
|
@@ -181,6 +181,30 @@ export async function runMail(args) {
|
|
|
181
181
|
const plural = group === "email" ? "emails" : "templates";
|
|
182
182
|
const sub = rest[1] ?? "list";
|
|
183
183
|
const work = rest.slice(2);
|
|
184
|
+
if (group === "template" && (sub === "history" || sub === "history-get")) {
|
|
185
|
+
const id = requireId(work, "Template");
|
|
186
|
+
const historyId = takeFlag(work, "--history-id");
|
|
187
|
+
const cursor = takeFlag(work, "--cursor"), limit = takeFlag(work, "--limit");
|
|
188
|
+
assertNoUnknownFlags(work, "mail");
|
|
189
|
+
if (sub === "history-get" && (!historyId || !ID_RE.test(historyId)))
|
|
190
|
+
throw new CliHttpError("Provide --history-id UUID.", EXIT_USAGE, 0, "bad_request");
|
|
191
|
+
if (sub === "history" && historyId)
|
|
192
|
+
throw new CliHttpError("Use history-get with --history-id.", EXIT_USAGE, 0, "bad_request");
|
|
193
|
+
if (sub === "history-get" && (cursor || limit))
|
|
194
|
+
throw new CliHttpError("Paging flags belong to history.", EXIT_USAGE, 0, "bad_request");
|
|
195
|
+
const params = new URLSearchParams();
|
|
196
|
+
if (cursor)
|
|
197
|
+
params.set("cursor", cursor);
|
|
198
|
+
if (limit)
|
|
199
|
+
params.set("limit", limit);
|
|
200
|
+
const path = `${base}/templates/${id}/history${sub === "history-get" ? `/${historyId}` : params.size ? `?${params}` : ""}`;
|
|
201
|
+
const data = await v1Get(path);
|
|
202
|
+
if (isJson())
|
|
203
|
+
emitOk("mail", data);
|
|
204
|
+
else
|
|
205
|
+
console.log(JSON.stringify(data, null, 2));
|
|
206
|
+
return EXIT_OK;
|
|
207
|
+
}
|
|
184
208
|
if (sub === "list") {
|
|
185
209
|
const q = takeFlag(work, "--q");
|
|
186
210
|
const limit = takeFlag(work, "--limit");
|
|
@@ -28,7 +28,7 @@ _frontpage_completions() {
|
|
|
28
28
|
people) COMPREPLY=( $(compgen -W "overview sources groups stages membership rules attachments import person audience workspace list get add set note rm-note follow-up hide unhide export" -- "\${cur}") ) ;;
|
|
29
29
|
routines) COMPREPLY=( $(compgen -W "list get add set pause resume rm run runs" -- "\${cur}") ) ;;
|
|
30
30
|
buttons) COMPREPLY=( $(compgen -W "list get create update archive restore" -- "\${cur}") ) ;;
|
|
31
|
-
mail) COMPREPLY=( $(compgen -W "save people campaign settings email template series send sends enrolments suppress --file --q --status --type --page --limit --cursor --source --sort --availability --selected --selected-only --offset --header-align --window-start --window-end --hourly-cap --site --json" -- "\${cur}") ) ;;
|
|
31
|
+
mail) COMPREPLY=( $(compgen -W "save people campaign settings email template history history-get --history-id series send sends enrolments suppress --file --q --status --type --page --limit --cursor --source --sort --availability --selected --selected-only --offset --header-align --window-start --window-end --hourly-cap --site --json" -- "\${cur}") ) ;;
|
|
32
32
|
payments) COMPREPLY=( $(compgen -W "status settings connect availability activity buttons tax invoices recurring customers --file --operation-key --preview-hash --person --email --description --amount-cents --cadence --first-date --time-zone --due-days --no-open --site --json --yes" -- "\${cur}") ) ;;
|
|
33
33
|
store) COMPREPLY=( $(compgen -W "items variants categories settings orders import" -- "\${cur}") ) ;;
|
|
34
34
|
modules)
|
|
@@ -75,7 +75,7 @@ _frontpage() {
|
|
|
75
75
|
analytics) _values 'subcommand' dashboard summary query funnel timeseries compare sql ;;
|
|
76
76
|
people) _values 'subcommand' overview sources groups stages membership rules attachments import person audience workspace list get add set note rm-note follow-up hide unhide export ;;
|
|
77
77
|
routines) _values 'subcommand' list get add set pause resume rm run runs ;;
|
|
78
|
-
mail) _values 'subcommand' save people campaign settings email template series send sends enrolments suppress ;;
|
|
78
|
+
mail) _values 'subcommand' save people campaign settings email template history history-get --history-id series send sends enrolments suppress ;;
|
|
79
79
|
buttons) _values 'subcommand' list get create update archive restore ;;
|
|
80
80
|
payments) _values 'subcommand' status settings connect availability activity buttons tax invoices recurring customers ;;
|
|
81
81
|
store) _values 'subcommand' items variants categories settings orders import ;;
|
|
@@ -116,7 +116,7 @@ export function generateFishCompletion() {
|
|
|
116
116
|
`complete -c frontpage -n "__fish_seen_subcommand_from analytics" -a "dashboard summary query funnel timeseries compare sql"`,
|
|
117
117
|
`complete -c frontpage -n "__fish_seen_subcommand_from people" -a "overview sources groups stages membership rules attachments import person audience workspace list get add set note rm-note follow-up hide unhide export"`,
|
|
118
118
|
`complete -c frontpage -n "__fish_seen_subcommand_from routines" -a "list get add set pause resume rm run runs"`,
|
|
119
|
-
`complete -c frontpage -n "__fish_seen_subcommand_from mail" -a "save people campaign settings email template series send sends enrolments suppress"`,
|
|
119
|
+
`complete -c frontpage -n "__fish_seen_subcommand_from mail" -a "save people campaign settings email template history history-get --history-id series send sends enrolments suppress"`,
|
|
120
120
|
`complete -c frontpage -n "__fish_seen_subcommand_from buttons" -a "list get create update archive restore"`,
|
|
121
121
|
`complete -c frontpage -n "__fish_seen_subcommand_from payments" -a "status settings connect availability activity buttons tax invoices recurring customers"
|
|
122
122
|
complete -c frontpage -n "__fish_seen_subcommand_from store" -a "items variants categories settings orders import"`,
|
package/dist/registry.js
CHANGED
|
@@ -582,15 +582,18 @@ export const COMMANDS = [
|
|
|
582
582
|
"frontpage mail send --file email.json --to ada@example.com --wait",
|
|
583
583
|
"frontpage mail send template <id> --to ada@example.com --var first_name=Ada",
|
|
584
584
|
"frontpage mail series steps set <id> --file steps.json",
|
|
585
|
+
"frontpage mail template history <id> --limit 20 --json",
|
|
586
|
+
"frontpage mail template history-get <id> --history-id <saved-copy-id> --json",
|
|
585
587
|
"frontpage mail suppress add --email bounce@example.com",
|
|
586
588
|
],
|
|
587
589
|
flags: [
|
|
588
|
-
"save --file save.json: one retry-safe email/series save; existing
|
|
590
|
+
"save --file save.json: one retry-safe email/series save; existing campaigns and series need expectedUpdatedAt. Template saves keep history; last save wins. See MAIL.md.",
|
|
589
591
|
"people --q --source --sort newest|oldest|name --availability all|eligible|restricted --page --selected --selected-only.",
|
|
590
592
|
"settings set --file settings.json supports all eight fields and null resets; --header-align, --window-start, --window-end, --hourly-cap null|1..1000.",
|
|
591
593
|
"sends list --q --status --type campaign|series|confirmation|template|test|inline --page 1 --limit 20.",
|
|
592
594
|
"Series status active means On; paused/draft mean Off. Enrollment while Off waits at step 1, without sending. Existing people resume their next unsent step.",
|
|
593
595
|
"campaign preview|audience|send|get. --id DRAFT_ID, --file audience.json ({audience:{groupIds|stageIds|personIds|filters}}). send requires --request-key; reuse it after a network error. Templates/series are for automation; campaigns have separate drafts. See PEOPLE.md.",
|
|
596
|
+
"template history <id> pages saved copies with --limit (20 by default, max 100) and --cursor. history-get <id> --history-id reads full content. Use template set with the stable template ID to save edited content as latest; past copies stay unchanged. Read template get before editing. History begins with content retained when history shipped, not lost earlier edits.",
|
|
594
597
|
"email list is unsent drafts only. Sent one-offs are mail sends list",
|
|
595
598
|
"send --file is an inline one-off (no saved document)",
|
|
596
599
|
"Blocks and series steps are JSON (--file). Unknown leftover flags fail closed (exit 2)",
|
package/llms.txt
CHANGED
|
@@ -57,3 +57,5 @@ See [MAIL.md](./MAIL.md) for the complete save contract, reusable people picker
|
|
|
57
57
|
The workspace validates and saves unfinished group settings before opening email setup. CLI and agent callers use `groups.create` / `groups.update` with a stable `requestKey` before attaching; `groups.count` reads the full visible match count. Group details Email and stage email tasks use the existing `frontpage mail save` / `save_mail_editor` completion. `attachment` checks saved group/stage emailVersion, creates paused rules, supports shared-template edits with rule revisions, and recovers identical retries. Read MAIL.md, Group and stage email tasks. Template get includes ruleUsage; deletion protects paused and active rule dependencies. Creating or saving never activates, enrolls or sends.
|
|
58
58
|
|
|
59
59
|
Complete Store edits: use existing items update --file with changed fields and variantUpdates. stock requires expectedStock from a fresh items get. One transaction saves all changes or none. On 409 review current stock; never silently substitute it. firstVariant plus optionNames enables versions. Keep explicit stock/variant commands for single operations. Routines add accepts --request-id UUID; reuse that ID and exact schedule after a lost response. Ordinary form edits live only in the active task; Cancel keeps input, Discard loses unfinished input. Submitted payments, imports, builds, and API-key status are separate operations.
|
|
60
|
+
|
|
61
|
+
Template history (frontpage-host 0.3.11+): read `mail template get ID` before editing. `mail template history ID --limit 20 --cursor CURSOR` pages saved copies; `mail template history-get ID --history-id COPY_ID` fetches full content. Edit any copy, then `mail template set ID --file content.json` with the stable template ID and content fields only to make a new latest copy. Last template save wins; past copies remain. Campaign and series conflict checks remain. Retry uncertain saves through `mail save` with the same requestKey and exact payload. History begins with content retained at launch; earlier overwritten edits are unavailable. See MAIL.md.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "frontpage-host",
|
|
3
|
-
"version": "0.3.
|
|
4
|
-
"description": "Frontpage CLI
|
|
3
|
+
"version": "0.3.11",
|
|
4
|
+
"description": "Frontpage CLI — manage your site from the terminal",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"frontpage": "dist/bin.js"
|