drivethrough-cli 0.1.21 → 0.1.23
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/main.mjs +14 -8
- package/package.json +1 -1
package/dist/main.mjs
CHANGED
|
@@ -24209,7 +24209,7 @@ function registerTools(server, ctx) {
|
|
|
24209
24209
|
{
|
|
24210
24210
|
title: "Read site files & history",
|
|
24211
24211
|
description: 'Read back a deployed site: file manifest, file contents, drivethrough.json \u2014 and the site\'s version history. Use this to resume work on a site from an earlier conversation. Read the minimum you need: `find` locates text without returning file contents, `manifest_only` lists what exists, `paths` fetches only named files \u2014 a bare call inlines every text file, so reserve it for genuinely reading a whole small site. Versions: every deploy is a numbered version the platform keeps. `history: true` lists them with what each one changed (the map for revert_site), `compare: {from, to}` returns line diffs between two versions ("what did v9\u2192v10 change?"), and `version` pins any read mode to a prior version instead of the live one. Modes are exclusive per call \u2014 compare wins over history, history over find/manifest_only. Entries come back deploy_site-compatible ({path, content, encoding}); binary files are listed but only inlined when named in `paths`. For small text changes you may not need this at all \u2014 edit_site applies find/replace to the deployed files directly.',
|
|
24212
|
-
annotations: { readOnlyHint: true, openWorldHint: false },
|
|
24212
|
+
annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: false },
|
|
24213
24213
|
inputSchema: {
|
|
24214
24214
|
site: external_exports.string().describe("Site name or id"),
|
|
24215
24215
|
paths: external_exports.array(external_exports.string()).optional().describe(
|
|
@@ -24285,7 +24285,7 @@ function registerTools(server, ctx) {
|
|
|
24285
24285
|
{
|
|
24286
24286
|
title: "Preview site (screenshot)",
|
|
24287
24287
|
description: "See a deployed site the way a visitor does: renders the page in a real browser server-side and returns a screenshot image you can look at directly. You have no browser of your own \u2014 this is your only view of rendered results, so use it to verify visual work (layout, styling, animations, responsive behavior) actually shipped correctly instead of assuming it did, and to eyeball a prior `version` before reverting to it. Works on private sites; nothing becomes public. Takes a few seconds \u2014 look once after a coherent batch of changes, not after every edit. Animations: the capture happens at page load; pass wait_ms to let one settle or reach mid-cycle.",
|
|
24288
|
-
annotations: { readOnlyHint: true, openWorldHint: false },
|
|
24288
|
+
annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: false },
|
|
24289
24289
|
inputSchema: {
|
|
24290
24290
|
site: external_exports.string().describe("Site name or id"),
|
|
24291
24291
|
path: external_exports.string().optional().describe('Page to render, like "/about.html" (default "/")'),
|
|
@@ -24367,7 +24367,7 @@ function registerTools(server, ctx) {
|
|
|
24367
24367
|
{
|
|
24368
24368
|
title: "Query site database",
|
|
24369
24369
|
description: 'Read the site\'s database as its owner (read-only \u2014 writes go through write_db). Same query surface the site\'s own pages use, so what works here works there. Every row is {seq, type, parent_seq, json, created_at, updated_at}: `seq` is the row number and its permanent identity (never reused, even after a delete), `json` is the document. Newest-first is the default and always free. Filtering, sorting and search need a matching entry in the site\'s "query" block in drivethrough.json \u2014 an undeclared query is refused with the exact line to add. As the owner you get a bounded 5,000-row scan instead of a refusal, marked "partial": true, so you can look at data you have not modelled yet; a visitor page gets the refusal.',
|
|
24370
|
-
annotations: { readOnlyHint: true, openWorldHint: false },
|
|
24370
|
+
annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: false },
|
|
24371
24371
|
inputSchema: {
|
|
24372
24372
|
site: external_exports.string().describe("Site name or id"),
|
|
24373
24373
|
action: external_exports.enum(["types", "list", "get"]).describe("types = row counts per type; list = rows of a type; get = one row by seq"),
|
|
@@ -24453,7 +24453,9 @@ function registerTools(server, ctx) {
|
|
|
24453
24453
|
{
|
|
24454
24454
|
title: "Write site database",
|
|
24455
24455
|
description: "Write to the site's database as its owner: insert one row, import many, update, or delete (reads go through query_db). Rows are addressed by `seq`, the row number query_db returns. To change a few fields of a row, `update` with `merge` \u2014 only the fields that change, no fetch needed. Reserve `json` (wholesale replacement) for rewriting the whole document. To load a catalogue, use `rows` for a handful and `rows_url` for thousands \u2014 never loop insert, and never try to emit 100,000 rows yourself. Writes are validated against the types declared in the site's drivethrough.json (unknown types and mismatched fields are rejected, and a bulk import is checked in full BEFORE the first row is written, so it is all-or-nothing); pass validate: false only for a deliberate migration. Deleted and overwritten rows are gone for good \u2014 there is no version history for data, so read a row (query_db) before destructive rewrites you might need to undo. Deleting a row also deletes its children. Every write counts against the account's monthly write allowance, and an import larger than what remains is refused before anything is written.",
|
|
24456
|
-
|
|
24456
|
+
// Open-world for the same reason deploy_site is: rows_url makes the
|
|
24457
|
+
// platform fetch an arbitrary external URL server-side.
|
|
24458
|
+
annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: true },
|
|
24457
24459
|
inputSchema: {
|
|
24458
24460
|
site: external_exports.string().describe("Site name or id"),
|
|
24459
24461
|
action: external_exports.enum(["insert", "update", "delete"]).describe("What to do with the row"),
|
|
@@ -24630,7 +24632,7 @@ function registerTools(server, ctx) {
|
|
|
24630
24632
|
{
|
|
24631
24633
|
title: "List sites",
|
|
24632
24634
|
description: "List the authenticated account's sites with their addresses, visibility, and status. Pass include_deleted to also see recently deleted sites (recoverable for 30 days via restore_site).",
|
|
24633
|
-
annotations: { readOnlyHint: true, openWorldHint: false },
|
|
24635
|
+
annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: false },
|
|
24634
24636
|
inputSchema: {
|
|
24635
24637
|
include_deleted: external_exports.boolean().optional().describe("Also list deleted sites still inside their 30-day recovery window")
|
|
24636
24638
|
}
|
|
@@ -24688,7 +24690,10 @@ function registerTools(server, ctx) {
|
|
|
24688
24690
|
{
|
|
24689
24691
|
title: "Attach/detach custom domain",
|
|
24690
24692
|
description: 'Attach or detach a custom domain the user already owns (paid plans). "attach": connect the domain to the site \u2014 returns the exact DNS records to add; afterwards use check_domain {action: "connect"} for a one-click registrar link and check_domain {action: "status"} to poll until active. "detach": remove the domain from the site. The site keeps its drivethrough.site address throughout.',
|
|
24691
|
-
|
|
24693
|
+
// Open-world like check_domain: attach initiates certificate issuance
|
|
24694
|
+
// with an external CA — the pipeline check_domain "status" then polls —
|
|
24695
|
+
// and detach changes what the public domain serves.
|
|
24696
|
+
annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: true },
|
|
24692
24697
|
inputSchema: {
|
|
24693
24698
|
action: external_exports.enum(["attach", "detach"]).describe("Connect the domain, or remove it"),
|
|
24694
24699
|
site: external_exports.string().describe("Site name or id"),
|
|
@@ -28157,9 +28162,10 @@ no repo (built in chat).
|
|
|
28157
28162
|
CLI limit errors are machine-readable and include an \`url\` to relay:
|
|
28158
28163
|
\`\`\`json
|
|
28159
28164
|
{ "ok": false, "error": { "code": "plan_limit_public_sites",
|
|
28160
|
-
"message": "...", "next": "...", "url": "https://drivethrough.dev/
|
|
28165
|
+
"message": "...", "next": "...", "url": "https://drivethrough.dev/pricing?reason=public_sites" } }
|
|
28161
28166
|
\`\`\`
|
|
28162
|
-
Relay that
|
|
28167
|
+
Relay that link once, at the moment of intent \u2014 don't nag. It describes the
|
|
28168
|
+
plans; upgrading itself happens from the user's dashboard.
|
|
28163
28169
|
Custom domain (one the user already owns): \`drivethrough domain add <site> example.com\`,
|
|
28164
28170
|
then \`drivethrough domain connect <site>\` for one-click setup where supported.
|
|
28165
28171
|
|