ponzu 1.70.0 → 1.71.0

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 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
@@ -47009,7 +47009,7 @@ function serve(ws, opts = {}) {
47009
47009
  return Response.json({ ok: true });
47010
47010
  }
47011
47011
  if (path === "/api/suggestions" || path === "/api/suggestions/refresh") {
47012
- if (caller !== "local" || !sameHostOk(req, url))
47012
+ if (caller === "local" && !sameHostOk(req, url))
47013
47013
  return new Response("Forbidden", { status: 403 });
47014
47014
  const refresh = path === "/api/suggestions/refresh";
47015
47015
  if (refresh && req.method !== "POST")
@@ -47449,7 +47449,7 @@ function serve(ws, opts = {}) {
47449
47449
  function peerAllowed(req, pathname) {
47450
47450
  if (isPage(req))
47451
47451
  return false;
47452
- if (pathname === "/api/shelf" || pathname === "/api/update/install")
47452
+ if (pathname === "/api/shelf" || pathname === "/api/update/install" || pathname === "/api/suggestions/refresh")
47453
47453
  return req.method === "POST";
47454
47454
  if (req.method !== "GET")
47455
47455
  return false;
@@ -47461,6 +47461,7 @@ function peerAllowed(req, pathname) {
47461
47461
  "/api/thumb",
47462
47462
  "/api/info",
47463
47463
  "/api/macs",
47464
+ "/api/suggestions",
47464
47465
  "/ws"
47465
47466
  ].includes(pathname) || /^\/files\/[^/]+\/assets\/.+$/.test(pathname);
47466
47467
  }
@@ -47487,13 +47488,13 @@ function isPage(req) {
47487
47488
  }
47488
47489
  var SHELF_ACTIONS = ["archive", "restore", "scratch", "recent"];
47489
47490
  async function relay(req, target) {
47490
- const shelf = req.method === "POST" && new URL(target).pathname === "/api/shelf";
47491
- if (req.method !== "GET" && !shelf)
47491
+ const post = req.method === "POST" && ["/api/shelf", "/api/suggestions/refresh"].includes(new URL(target).pathname);
47492
+ if (req.method !== "GET" && !post)
47492
47493
  return new Response("Method not allowed", { status: 405 });
47493
47494
  try {
47494
47495
  const res = await fetch(target, {
47495
- signal: AbortSignal.timeout(shelf ? 5000 : 30000),
47496
- ...shelf ? {
47496
+ signal: AbortSignal.timeout(post ? 5000 : 30000),
47497
+ ...post ? {
47497
47498
  method: "POST",
47498
47499
  headers: { "content-type": "application/json" },
47499
47500
  body: await req.text()
@@ -47638,7 +47639,7 @@ function remoteUpdater(endpoint, token) {
47638
47639
  // apps/cli/package.json
47639
47640
  var package_default = {
47640
47641
  name: "ponzu",
47641
- version: "1.70.0",
47642
+ version: "1.71.0",
47642
47643
  description: "The open source canvas your agent draws on in HTML and CSS.",
47643
47644
  type: "module",
47644
47645
  license: "MIT",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ponzu",
3
- "version": "1.70.0",
3
+ "version": "1.71.0",
4
4
  "description": "The open source canvas your agent draws on in HTML and CSS.",
5
5
  "license": "MIT",
6
6
  "type": "module",