ponzu 1.70.0 → 1.71.1
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/README.md +1 -1
- package/dist/index.js +9 -7
- package/package.json +1 -1
- package/studio/assets/index-kF-bDYqZ.js +2361 -0
- package/studio/index.html +1 -1
- package/studio/assets/index-CumjZeuD.js +0 -2361
package/README.md
CHANGED
|
@@ -34,7 +34,7 @@ This clones the repo into `~/Ponzu/north-brook/ponzu` (or reuses the clone there
|
|
|
34
34
|
|
|
35
35
|
Or [download the Mac app](https://ponzu.design/download) (Apple silicon, signed and notarized; it updates itself). Windows (x64) and Linux (x64, an AppImage or a `.deb`) builds are in beta, on the [releases page](https://github.com/north-brook/ponzu/releases/latest); they update themselves too, and the Windows one isn't signed yet, so SmartScreen asks before its first launch. It opens `.design` folders like documents, and on first launch it sets up Claude Code, Codex and Cursor for you. There's nothing else to install or keep running.
|
|
36
36
|
|
|
37
|
-
Its home screen's **Suggested** tab proposes designs for the projects your agents worked in lately. When you open it (at most every ten minutes, and only to top it up to eight), Ponzu runs your own Claude Code (or Codex, without Claude Code) headless and read-only, on your agent's account, in two steps: a glance at each project's file list and readme, with no tools, names a few designs, then one run for each reads the code it starts from and writes its prompt. Claude Code gets only Read, Glob and Grep, Codex its read-only sandbox, and neither gets any MCP servers. You copy the prompt you like into your agent. The ideas are kept in `~/.ponzu/suggestions.json`.
|
|
37
|
+
Its home screen's **Suggested** tab proposes designs for the projects your agents worked in lately. When you open it (at most every ten minutes, and only to top it up to eight), Ponzu runs your own Claude Code (or Codex, without Claude Code) headless and read-only, on your agent's account, in two steps: a glance at each project's file list and readme, with no tools, names a few designs, then one run for each reads the code it starts from and writes its prompt. Claude Code gets only Read, Glob and Grep, Codex its read-only sandbox, and neither gets any MCP servers. You copy the prompt you like into your agent. The ideas are kept in `~/.ponzu/suggestions.json`. Your other Macs' Ponzu show theirs too, for their own projects, over your tailnet, and opening the tab asks each to look again.
|
|
38
38
|
|
|
39
39
|
The app also puts `ponzu` in your terminal, running from inside the app so it updates with it. It links the command into a folder your shell already searches that you can write to (`~/.local/bin`, `~/bin` or `/usr/local/bin`), never over another `ponzu`. If there's no such folder, choose **Ponzu › Install Terminal Command…**, which asks for your password to add it to `/usr/local/bin`.
|
|
40
40
|
|
package/dist/index.js
CHANGED
|
@@ -33422,6 +33422,7 @@ See it
|
|
|
33422
33422
|
|
|
33423
33423
|
What the person sees
|
|
33424
33424
|
- On their canvas, the load plays once when the artboard appears: when they open its page, and each time you edit it. Then a finite animation holds its end. Hovering or clicking the artboard doesn't replay it, so never tell them it will.
|
|
33425
|
+
- Their canvas plays what record shows. It holds motion still on purpose: while its window is in the background on battery, while they pan across a crowded page, for parts too small to see at their zoom, and for loops longer than 20 s on an artboard zoomed far out. If record shows the motion working and they say it doesn't play, tell the Ponzu team with send_feedback instead of reworking the design.
|
|
33425
33426
|
- A hint that fades out ends hidden, so the canvas shows nothing once it has played.
|
|
33426
33427
|
- When they need to watch the motion (an entrance to review, a hint that leaves), put a looping copy on an artboard beside the real one: animation-iteration-count: infinite, with a beat of about a second held at the end of the keyframes so each cycle reads as one play. Keep the real one finite, and say which is which in a note.
|
|
33427
33428
|
- If the motion answers something the person does, put it on :hover or :focus, so they can set it off themselves.
|
|
@@ -47009,7 +47010,7 @@ function serve(ws, opts = {}) {
|
|
|
47009
47010
|
return Response.json({ ok: true });
|
|
47010
47011
|
}
|
|
47011
47012
|
if (path === "/api/suggestions" || path === "/api/suggestions/refresh") {
|
|
47012
|
-
if (caller
|
|
47013
|
+
if (caller === "local" && !sameHostOk(req, url))
|
|
47013
47014
|
return new Response("Forbidden", { status: 403 });
|
|
47014
47015
|
const refresh = path === "/api/suggestions/refresh";
|
|
47015
47016
|
if (refresh && req.method !== "POST")
|
|
@@ -47449,7 +47450,7 @@ function serve(ws, opts = {}) {
|
|
|
47449
47450
|
function peerAllowed(req, pathname) {
|
|
47450
47451
|
if (isPage(req))
|
|
47451
47452
|
return false;
|
|
47452
|
-
if (pathname === "/api/shelf" || pathname === "/api/update/install")
|
|
47453
|
+
if (pathname === "/api/shelf" || pathname === "/api/update/install" || pathname === "/api/suggestions/refresh")
|
|
47453
47454
|
return req.method === "POST";
|
|
47454
47455
|
if (req.method !== "GET")
|
|
47455
47456
|
return false;
|
|
@@ -47461,6 +47462,7 @@ function peerAllowed(req, pathname) {
|
|
|
47461
47462
|
"/api/thumb",
|
|
47462
47463
|
"/api/info",
|
|
47463
47464
|
"/api/macs",
|
|
47465
|
+
"/api/suggestions",
|
|
47464
47466
|
"/ws"
|
|
47465
47467
|
].includes(pathname) || /^\/files\/[^/]+\/assets\/.+$/.test(pathname);
|
|
47466
47468
|
}
|
|
@@ -47487,13 +47489,13 @@ function isPage(req) {
|
|
|
47487
47489
|
}
|
|
47488
47490
|
var SHELF_ACTIONS = ["archive", "restore", "scratch", "recent"];
|
|
47489
47491
|
async function relay(req, target) {
|
|
47490
|
-
const
|
|
47491
|
-
if (req.method !== "GET" && !
|
|
47492
|
+
const post = req.method === "POST" && ["/api/shelf", "/api/suggestions/refresh"].includes(new URL(target).pathname);
|
|
47493
|
+
if (req.method !== "GET" && !post)
|
|
47492
47494
|
return new Response("Method not allowed", { status: 405 });
|
|
47493
47495
|
try {
|
|
47494
47496
|
const res = await fetch(target, {
|
|
47495
|
-
signal: AbortSignal.timeout(
|
|
47496
|
-
...
|
|
47497
|
+
signal: AbortSignal.timeout(post ? 5000 : 30000),
|
|
47498
|
+
...post ? {
|
|
47497
47499
|
method: "POST",
|
|
47498
47500
|
headers: { "content-type": "application/json" },
|
|
47499
47501
|
body: await req.text()
|
|
@@ -47638,7 +47640,7 @@ function remoteUpdater(endpoint, token) {
|
|
|
47638
47640
|
// apps/cli/package.json
|
|
47639
47641
|
var package_default = {
|
|
47640
47642
|
name: "ponzu",
|
|
47641
|
-
version: "1.
|
|
47643
|
+
version: "1.71.1",
|
|
47642
47644
|
description: "The open source canvas your agent draws on in HTML and CSS.",
|
|
47643
47645
|
type: "module",
|
|
47644
47646
|
license: "MIT",
|