shiply-cli 0.20.0 → 0.20.2
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/package.json +1 -1
- package/skill/SKILL.md +47 -26
package/package.json
CHANGED
package/skill/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: shiply
|
|
3
|
-
description:
|
|
3
|
+
description: "shiply is the production backend for anything an agent builds — publish any app (static or full-stack SSR, any framework) and give it a live URL, custom domain, SQL database, server functions, email, and a marketplace to sell it. Use when the user asks to publish, host, deploy, share, or update a website/page/demo/report/app, or wants a live URL for generated files. Triggers - \"publish this\", \"host this\", \"put this online\", \"give me a link\", \"update the site\", \"deploy my SvelteKit/Astro/Next.js app\", shiply."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
---
|
|
@@ -18,15 +18,17 @@ description: Publish static sites to the web instantly with shiply.now and manag
|
|
|
18
18
|
> fresh — your cached copy may be missing features like databases, projects,
|
|
19
19
|
> marketplace, or sending domains.
|
|
20
20
|
>
|
|
21
|
-
> **Last updated: 2026-06-
|
|
21
|
+
> **Last updated: 2026-06-27**
|
|
22
22
|
|
|
23
23
|
---
|
|
24
24
|
|
|
25
|
-
# shiply —
|
|
25
|
+
# shiply — the production backend for anything an agent builds
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
**What it is.** Not static hosting. shiply takes whatever you build — a static page or a full-stack app in any framework — and gives it a live URL, a custom domain, a SQL database, server functions, email (send + receive), and a marketplace to sell it. One call. No account needed to start: anonymous sites are live immediately, last 24 hours, and can be claimed to keep.
|
|
28
|
+
|
|
29
|
+
**Why use it.** Ship a complete, working product without stitching together a host + database + email + registrar + payments — it's one agent-native platform (MCP / CLI / REST parity). Hard-ceiling pricing ($0/$8/$24, no usage meter), so a spike or DDoS can never become a surprise bill for the owner.
|
|
30
|
+
|
|
31
|
+
**How (quickstart).** `shiply publish ./dir` (CLI) — or POST /api/v1/publish → PUT each file → POST finalize — returns a live URL + claimToken.
|
|
30
32
|
|
|
31
33
|
**NEVER create a new site to update an existing one. Always re-publish to the
|
|
32
34
|
same site** — otherwise you litter subdomains and lose the user's URL.
|
|
@@ -62,14 +64,25 @@ POST https://shiply.now/api/v1/auth/device/poll
|
|
|
62
64
|
```
|
|
63
65
|
|
|
64
66
|
The response is one of `{status:"pending"}` (keep polling at `interval`s),
|
|
65
|
-
`{status:"approved", api_key:"shp_...", slug_claimed:"..."}` (
|
|
66
|
-
|
|
67
|
-
click), `{status:"expired"|"denied"|"consumed"}` (stop). Cap your polling at
|
|
67
|
+
`{status:"approved", api_key:"shp_...", slug_claimed:"..."}` (PERSIST the key —
|
|
68
|
+
see "Save the key" below — the site is now permanent; Allow does both jobs in
|
|
69
|
+
one click), `{status:"expired"|"denied"|"consumed"}` (stop). Cap your polling at
|
|
68
70
|
the announced `expires_in` and respect `interval` — don't tight-loop.
|
|
69
71
|
|
|
70
72
|
After approval, every future publish uses `Authorization: Bearer <api_key>`
|
|
71
73
|
and the user's dashboard shows their sites without any further claiming.
|
|
72
74
|
|
|
75
|
+
### Save the key — so EVERY future site is seamless (do this once)
|
|
76
|
+
|
|
77
|
+
Write the key to **`~/.shiply/credentials`** as `{"apiKey":"shp_..."}` (chmod
|
|
78
|
+
600) — the exact file the shiply CLI reads. This is what makes "one Allow, ever"
|
|
79
|
+
work: from then on every publish (any site, any project, ANY FUTURE SESSION)
|
|
80
|
+
sends `Authorization: Bearer <key>` automatically and lands owned in the user's
|
|
81
|
+
dashboard — no re-authorizing, no claim step, zero clicks. An env var alone
|
|
82
|
+
(`SHIPLY_API_KEY`) works for the current shell but does NOT survive a new
|
|
83
|
+
session — the credentials file is what makes it permanent. `shiply login` writes
|
|
84
|
+
this file for you; if you publish over raw HTTP, write it yourself.
|
|
85
|
+
|
|
73
86
|
## When the user pastes you something shiply-shaped, do this
|
|
74
87
|
|
|
75
88
|
These are the patterns you will see. Match the input, run the action — do not
|
|
@@ -92,10 +105,11 @@ ask the user to repeat themselves or explain.
|
|
|
92
105
|
as `https://shiply.now/claim/<slug>?token=<claimToken>` from those fields.
|
|
93
106
|
Either way, also suggest `shiply login` so future publishes mint to their
|
|
94
107
|
account directly — that's the long-term fix and how the dashboard works.
|
|
95
|
-
- **User says "I have an API key now, use it from now on"** →
|
|
96
|
-
`
|
|
97
|
-
`Authorization: Bearer <key>` on every future publish.
|
|
98
|
-
are then permanent and appear in their dashboard
|
|
108
|
+
- **User says "I have an API key now, use it from now on"** → persist it to
|
|
109
|
+
`~/.shiply/credentials` (`{"apiKey":"shp_..."}`, chmod 600 — see "Save the
|
|
110
|
+
key" above), then send `Authorization: Bearer <key>` on every future publish.
|
|
111
|
+
All future sites are then permanent and appear in their dashboard
|
|
112
|
+
automatically — across sessions, with no re-authorizing.
|
|
99
113
|
- **User opens an `https://shiply.now/auth/XXXX-YYYY` URL you printed** → no
|
|
100
114
|
action from you; they're on the device-flow consent screen. Keep polling
|
|
101
115
|
`poll_url` (see "First publish on a new machine" above). The poll response
|
|
@@ -144,15 +158,18 @@ so repeat publishes reuse the URL automatically. `--new-site` opts out.
|
|
|
144
158
|
Gitignore `.shiply.json` in public repos. Parse `SITE_READY` / `SSL_READY`
|
|
145
159
|
lines for automation; exit code 0 = ready.
|
|
146
160
|
|
|
147
|
-
### SSR / server frameworks (live:
|
|
161
|
+
### SSR / server frameworks (live: every major JS framework)
|
|
148
162
|
|
|
149
|
-
`shiply publish` auto-detects
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
163
|
+
`shiply publish` auto-detects an SSR build and deploys the worker bundle with
|
|
164
|
+
`nodejs_compat`, serving static assets from the edge. Live and verified on prod:
|
|
165
|
+
SvelteKit (`@sveltejs/adapter-cloudflare`), Astro (`@astrojs/cloudflare`), Qwik
|
|
166
|
+
City, the Nitro family (Nuxt, SolidStart, Analog, TanStack Start), React Router
|
|
167
|
+
v7, and Next.js (via OpenNext) — plus wrangler workers (`wrangler.toml` with
|
|
168
|
+
`main` — Hono, itty-router, raw `fetch`). **Build first** (`npm run build`),
|
|
169
|
+
then `shiply publish .`. Requires sign-in + Developer plan. Force the static
|
|
170
|
+
path with `--framework=<name>`, or skip SSR detection entirely with `--no-ssr`.
|
|
171
|
+
Next.js note: plain SSR works today; ISR / on-demand revalidate is not live yet,
|
|
172
|
+
and Next 16 must build with `next build --webpack` (not Turbopack).
|
|
156
173
|
|
|
157
174
|
## Manage & verify sites (CLI)
|
|
158
175
|
|
|
@@ -763,14 +780,18 @@ MCP tool set_site_access does the same. Enforced before any content is served;
|
|
|
763
780
|
changing settings signs current visitors out. Docs: /docs/access-control
|
|
764
781
|
|
|
765
782
|
## Any static site works — frameworks + SSGs auto-detected
|
|
766
|
-
shiply hosts any static site
|
|
767
|
-
|
|
768
|
-
|
|
783
|
+
shiply hosts any static site (and full SSR apps too — see the "SSR / server
|
|
784
|
+
frameworks" section above). For a static build, publish the BUILD OUTPUT, never
|
|
785
|
+
the source: run the build, then publish the output dir with SPA mode for
|
|
786
|
+
client-routed apps. The CLI auto-detects 16+ frameworks and tells you the right command.
|
|
769
787
|
Run `shiply detect` to preview what it found without uploading.
|
|
770
788
|
- Vite (React/Vue/Svelte/Solid/Qwik): `npm run build` then `shiply publish dist --spa`
|
|
771
789
|
- Create React App: `npm run build` then `shiply publish build --spa`
|
|
772
|
-
- Next.js: set `output: "export"` in next.config, `npm run build`, then
|
|
773
|
-
`shiply publish out` (no --spa; export emits real HTML per route)
|
|
790
|
+
- Next.js (static): set `output: "export"` in next.config, `npm run build`, then
|
|
791
|
+
`shiply publish out` (no --spa; export emits real HTML per route). For full
|
|
792
|
+
Next.js SSR (via OpenNext) instead, see the "SSR / server frameworks" section
|
|
793
|
+
above — plain SSR is live (ISR/revalidate not yet; Next 16 needs
|
|
794
|
+
`next build --webpack`).
|
|
774
795
|
- Astro: `npm run build` then `shiply publish dist`
|
|
775
796
|
- SvelteKit (adapter-static): `npm run build` then `shiply publish build --spa`
|
|
776
797
|
- Nuxt: `npx nuxt generate` then `shiply publish .output/public`
|