From df1a18eaceb5e2f19a75043fb3f2e1d942b829f7 Mon Sep 17 00:00:00 2001 From: "prompt.ac/@jeffrey" Date: Fri, 11 Sep 2026 21:08:32 -0400 Subject: [PATCH] easel at the prompt, and a purge that reaches the host it deploys to MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Typing `easel` on aesthetic.computer did nothing — no piece by that name, so it fell through to the not-found path. It now hands over the one line that installs the terminal editor, alongside `cli` and `terminal`, which are what people actually type when they are looking for it. A notice rather than a jump. The neighbouring branches send you somewhere — menuband to menuband.app, desktop to the download piece — but a command-line tool has nowhere to be sent to, and a page whose only content is an install line is a page about a line. The line is the destination. The flash colour is set explicitly before makeFlash, which reads a module-level variable: without that the flash inherits whatever the previous command left there, which is the kind of thing that looks like a rendering bug months later. And the Cloudflare purge only ever covered the aesthetic.computer zone. prompt.ac is a separate zone, so its edge kept whatever it was holding across every deploy — including, today, a cached 404 for a tarball that the same deploy had just built. The origin was correct within seconds and the URL was wrong for five minutes, which is a shape worth not repeating: the deploy said it purged, and had, in one of the two places it serves. Co-Authored-By: Claude Opus 5 (1M context) --- lith/deploy.fish | 27 ++++++++++++------- .../aesthetic.computer/disks/prompt.mjs | 11 ++++++++ 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/lith/deploy.fish b/lith/deploy.fish index 6910e635ee..ce64746f96 100644 --- a/lith/deploy.fish +++ b/lith/deploy.fish @@ -370,17 +370,24 @@ echo -e "$GREEN-> Purging Cloudflare cache...$NC" if test -z "$CF_AUTH" echo -e "$YELLOW No Cloudflare credentials found — skipping purge (Caddy short TTL still applies).$NC" else - set CF_ZONE (curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=aesthetic.computer" \ - $CF_AUTH -H "content-type: application/json" \ - | python3 -c "import json,sys; r=json.load(sys.stdin).get('result') or []; print(r[0]['id'] if r else '')" 2>/dev/null) - if test -z "$CF_ZONE" - echo -e "$YELLOW Could not resolve zone id — skipping purge.$NC" - else - set CF_RESULT (curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$CF_ZONE/purge_cache" \ + # Every zone this deploy serves, not just the apex. prompt.ac is a separate + # Cloudflare zone, so purging aesthetic.computer left its edge holding + # whatever it had — including a cached 404 for a file that had since been + # built, which is exactly how prompt.ac/easel.tar.gz stayed missing after a + # deploy that produced it. + for CF_HOST in aesthetic.computer prompt.ac + set CF_ZONE (curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$CF_HOST" \ $CF_AUTH -H "content-type: application/json" \ - --data '{"purge_everything":true}' \ - | python3 -c "import json,sys; d=json.load(sys.stdin); print('ok' if d.get('success') else 'failed: '+str(d.get('errors')))" 2>/dev/null) - echo -e "$GREEN purge: $CF_RESULT$NC" + | python3 -c "import json,sys; r=json.load(sys.stdin).get('result') or []; print(r[0]['id'] if r else '')" 2>/dev/null) + if test -z "$CF_ZONE" + echo -e "$YELLOW $CF_HOST: could not resolve zone id — skipping.$NC" + else + set CF_RESULT (curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$CF_ZONE/purge_cache" \ + $CF_AUTH -H "content-type: application/json" \ + --data '{"purge_everything":true}' \ + | python3 -c "import json,sys; d=json.load(sys.stdin); print('ok' if d.get('success') else 'failed: '+str(d.get('errors')))" 2>/dev/null) + echo -e "$GREEN purge $CF_HOST: $CF_RESULT$NC" + end end end diff --git a/system/public/aesthetic.computer/disks/prompt.mjs b/system/public/aesthetic.computer/disks/prompt.mjs index 3e83c78b71..878a87d8f0 100644 --- a/system/public/aesthetic.computer/disks/prompt.mjs +++ b/system/public/aesthetic.computer/disks/prompt.mjs @@ -2025,6 +2025,17 @@ async function halt($, text) { if (openExternalFromIframe(menuBandUrl)) return true; jump(`out:${menuBandUrl}`); return true; + } else if (slug === "easel" || slug === "cli" || slug === "terminal") { + // 🎨 Easel — the terminal editor. A CLI cannot be jumped to, so hand over + // the one line that installs it rather than a page about a page. + notice("curl -fsSL prompt.ac/easel.sh | sh", ["white", "purple"], { + wrap: "char", + }); + // Set explicitly: makeFlash reads the module-level colour, so without this + // the flash inherits whatever the last command happened to leave there. + flashColor = [120, 80, 180]; + makeFlash($); + return true; } else if (slug === "desktop" || slug === "app" || slug === "electron") { // 💻 Jump to Desktop app download page jump("desktop"); -- 2.51.2