Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ coverage
.env
.DS_Store
npm-debug.log*
*.tgz
26 changes: 26 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Changelog

## 0.1.5 - 2026-07-12

### Added

- Site Health checks, configurable alerts, and health/deployment overviews.
- SEO file and IndexNow management.
- Export cancellation, migration logs, release history, and static rollback workflows.
- Agency report PDFs, client shares, and weekly/monthly schedules.
- Mount-path management, environment custom domains, and safe custom-domain transfers.

### Changed

- Migration archives now use Static Studio's authenticated presigned multipart upload protocol. The CLI no longer receives storage credentials or depends on the AWS SDK.
- Site creation now uses Studio-generated credentials and the hardened Lagos queue contract.
- Domain, SSL, environment, redirect, user, and team operations now send the authorization context required by Lagos.
- Site listings include team-access sites while keeping embedded site metadata scoped to the authenticated user.
- WordPress roles are limited to `administrator`, `editor`, `author`, and `contributor`.

### Fixed

- CDN cache clears now authorize and purge by the site's pull zone.
- Domain mutations now require a deployed site, protect managed hostnames, and surface partial WordPress or edge-rule failures.
- Team removal now cleans up the matching site metadata record.
- Custom PageSpeed targets are rejected because Studio now tests the stored canonical site URL.
64 changes: 60 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

Command-line interface for Static Studio hosting workflows. The package is intended for humans and coding agents such as Codex or Claude Code that need a narrow, scriptable interface to the Static Studio platform.

This documentation covers release `0.1.5`.

## Install

```bash
Expand Down Expand Up @@ -31,7 +33,7 @@ Personal Access Token login for CI or agents:
static-studio login --token "$STATIC_STUDIO_ACCESS_TOKEN"
```

Generate Personal Access Tokens in the Static Studio app under **Account -> Access Token**. They require an active paid subscription; trial accounts can see the CLI option in the app, but cannot issue or exchange tokens.
Generate Personal Access Tokens in the Static Studio app under **Account -> Access Token**. Token issuance and exchange require an active subscription with quota greater than zero. Trial status alone does not categorically exclude an account; the subscription and quota checks are authoritative.

You can also skip local config entirely:

Expand All @@ -52,18 +54,55 @@ static-studio sites get <siteId>
static-studio sites basic-auth <siteId>
static-studio sites magic-login <siteId>
static-studio sites debug-log <siteId> --tail 200
static-studio sites create --name Demo --subdomain demo123
static-studio sites create --name Demo --subdomain demo123 --mount-path /blog
static-studio sites create --name Import --migration-file ./site-studio-backup.zip
static-studio sites push <siteId> full
static-studio sites push <siteId> changes
static-studio sites redeploy <siteId> --migration-file ./site-studio-backup.zip
static-studio sites cancel-export <siteId> --yes
static-studio sites migration-log <siteId>
static-studio sites releases <siteId>
static-studio sites rollback-status <siteId>
static-studio sites rollback-snapshots <siteId>
static-studio sites rollback <siteId> <snapshotId> --yes
static-studio sites delete <siteId> --yes

static-studio domains list <siteId>
static-studio domains add <siteId> example.com
static-studio domains primary <siteId> example.com
static-studio domains mount <siteId> example.com /docs
static-studio domains issue-ssl <siteId> example.com
static-studio domains transfer <sourceSiteId> <targetSiteId> example.com --yes
static-studio domains remove <siteId> example.com

static-studio health overview <siteId>
static-studio health run <siteId> --checks uptime ssl sitemap

static-studio alerts status <siteId>
static-studio alerts save <siteId> --enabled on --recipients alerts@example.com
static-studio alerts test <siteId> alerts@example.com

static-studio seo list <siteId>
static-studio seo save <siteId> robots.txt --file ./robots.txt
static-studio seo check-sitemaps <siteId>

static-studio indexnow status <siteId>
static-studio indexnow enable <siteId>
static-studio indexnow auto-submit <siteId> on
static-studio indexnow submit <siteId>

static-studio reports list <siteId>
static-studio reports get <reportId>
static-studio reports generate-pdf <reportId>
static-studio reports pdf-url <reportId>
static-studio reports shares <reportId>
static-studio reports share <reportId> --recipient client@example.com --password-env REPORT_SHARE_PASSWORD
static-studio reports revoke-share <reportId> <shareId> --yes
static-studio reports schedules <siteId>
static-studio reports schedule monthly <siteId> --name "Monthly report"
static-studio reports disable-schedule <scheduleId>
static-studio reports delete-schedule <scheduleId> --yes

static-studio backups list <siteId> --refresh
static-studio backups create <siteId>
static-studio backups restore <siteId> --backup-id <backupId>
Expand Down Expand Up @@ -97,6 +136,10 @@ static-studio environments enable <siteId>
static-studio environments create <siteId> staging
static-studio environments delete <siteId> staging --yes
static-studio environments disable <siteId> --yes
static-studio environments domain-list <siteId> staging
static-studio environments domain-connect <siteId> staging staging.example.com
static-studio environments domain-ssl <siteId> staging staging.example.com
static-studio environments domain-remove <siteId> staging --yes

static-studio tags list
static-studio tags create Client --color '#3858E9'
Expand All @@ -106,6 +149,14 @@ static-studio tags remove <siteId> <tagId>
static-studio ssh add <siteId> --key-file ~/.ssh/id_ed25519.pub
```

New sites use managed Studio URLs and server-generated WordPress, Basic Auth, and secret credentials. Migration archives are uploaded with presigned multipart requests in 25 MiB parts, up to the 10 GB limit.

The `--url` option on `performance run` and `performance get` is deprecated. If supplied for compatibility, it must resolve to the site's stored URL.

WordPress role options support `administrator`, `editor`, `author`, and `contributor`; `subscriber` is not supported.

Reports and configurable Site Health alerts require the corresponding Agency entitlements. Lagos enforces these entitlements and site access for every operation.

## Documentation

Detailed CLI documentation lives in [`docs/`](docs/README.md):
Expand Down Expand Up @@ -134,8 +185,13 @@ This package is scoped and intended to be public on npm. Before publishing, make

```bash
npm login
npm version patch
npm ci
npm run typecheck
npm test
npm run build
npm audit --audit-level=high
npm pack --dry-run
npm publish --access public
```

Use `npm pack --dry-run` to inspect exactly which files will be published.
The package version and changelog must already be updated before this checklist. Use `npm version patch` when starting the next release, not after a version has been prepared.
8 changes: 5 additions & 3 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@

This directory contains the detailed reference for the `static-studio` command line interface.

These pages document release `0.1.5`.

## Documents

- [Authentication and configuration](authentication-and-configuration.md) explains install requirements, login methods, profiles, environment variables, output modes, and error behavior.
- [Command reference](command-reference.md) lists every command, argument, option, default, and important behavior exposed by the CLI.
- [Input formats and limits](input-formats-and-limits.md) documents accepted file formats, validation rules, and safety limits for uploads, bulk redirects, team invites, logs, IDs, tags, and environments.
- [Workflows](workflows.md) provides task-oriented examples for common hosting operations.
- [Input formats and limits](input-formats-and-limits.md) documents accepted file formats, validation rules, and safety limits for uploads, SEO files, alerts, reports, bulk operations, logs, IDs, tags, and environments.
- [Workflows](workflows.md) provides task-oriented examples for hosting, deployment recovery, domains, Site Health, alerts, SEO, IndexNow, and reports.

## Executable Names

Expand All @@ -34,6 +36,6 @@ For non-interactive environments, provide a Personal Access Token:
STATIC_STUDIO_ACCESS_TOKEN=... static-studio --json sites list
```

Personal Access Tokens are generated in the Static Studio app under **Account -> Access Token** and require an active paid subscription.
Personal Access Tokens are generated in the Static Studio app under **Account -> Access Token**. Issuance and exchange require an active subscription with quota greater than zero; trial status alone is not a categorical exclusion.

Use `--json` whenever another program or agent will parse the output.
2 changes: 1 addition & 1 deletion docs/authentication-and-configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ Personal Access Token login:
static-studio login --token "$STATIC_STUDIO_ACCESS_TOKEN"
```

Generate Personal Access Tokens in the Static Studio app under **Account -> Access Token**. They require an active paid subscription; free trial accounts can open the CLI token screen, but the token field and regeneration action remain locked until the account subscribes.
Generate Personal Access Tokens in the Static Studio app under **Account -> Access Token**. Issuing and exchanging a token requires a subscription whose status is `active` and whose quota is greater than zero. Trial status is not checked as a separate categorical exclusion, so an eligible trial account can use a token.

The CLI exchanges a Personal Access Token through the platform `access-token` Edge Function for a short-lived Supabase access token. Personal Access Tokens do not have refresh tokens, and the exchange response intentionally does not include one.

Expand Down
Loading
Loading