@fabiofiorita/porcelain 0.61.3 → 0.61.5

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
@@ -1,39 +1,20 @@
1
- # @fabiofiorita/porcelain (0.61.3)
1
+ # @fabiofiorita/porcelain (0.61.5)
2
2
 
3
- Headless **Porcelain** backend — the Electron-free daemon + renderer, packaged for
4
- plain Node on any machine (Linux mini-PC, cloud VM, laptop). Same credential-gated
5
- HTTP/WS surface the Mac app and browser clients already talk to.
3
+ The Electron-free Porcelain daemon and browser client, packaged for plain Node. Run it on the
4
+ machine that owns the repositories and terminals you want to review.
6
5
 
7
- ## Quick start (recommended)
6
+ ## Start and pair
8
7
 
9
- On the remote host (Node 22, git, and a C toolchain for `node-pty`):
8
+ The host needs Node 22+, Git, and a C toolchain for the first `node-pty` build:
10
9
 
11
10
  ```sh
12
- npx @fabiofiorita/porcelain@latest serve --lan --cloudflare
11
+ npx @fabiofiorita/porcelain@latest serve
12
+ npx @fabiofiorita/porcelain@latest access issue --name "My device"
13
13
  ```
14
14
 
15
- That:
16
-
17
- 1. Fetches the **latest** published package (use `@latest` so you don't stick on a
18
- stale npx cache of an older version).
19
- 2. Compiles `node-pty` for this host on first install.
20
- 3. Starts the daemon on port **43117**, with LAN access and opt-in
21
- public HTTPS through a Cloudflare tunnel.
22
- 4. Keeps host administration local; it never prints the administrator credential.
23
-
24
- Leave the process in the foreground while you work (Termius / tmux / SSH session).
25
- Ctrl+C stops it — **no systemd required**. Start it when you sit down; stop it
26
- when you're done.
27
-
28
- ### Pair a device
29
-
30
- ```sh
31
- npx @fabiofiorita/porcelain@latest access issue --name "My phone"
32
- ```
33
-
34
- Open the printed connection link in a browser, or paste it into the Mac app's
35
- **Settings → Remotes**. The link expires in 15 minutes, works once, and becomes
36
- an individually revocable device credential. Manage access only on the host:
15
+ Porcelain always binds loopback and never `0.0.0.0`. Add `--lan`, `--tailnet`, or
16
+ `--cloudflare` only for the route you intend to expose. Every client uses its own one-time pairing
17
+ link; the host administrator token is never shared. Manage paired devices on the host:
37
18
 
38
19
  ```sh
39
20
  npx @fabiofiorita/porcelain@latest access list
@@ -41,78 +22,25 @@ npx @fabiofiorita/porcelain@latest access revoke <id>
41
22
  npx @fabiofiorita/porcelain@latest share status
42
23
  ```
43
24
 
44
- ## Host launcher
45
-
46
- ```text
47
- porcelain serve [options]
48
- porcelain access issue --name <device> [--base-url <url>]
49
- porcelain access list | revoke <id>
50
- porcelain share status
51
-
52
- --port <n> Port (default 43117)
53
- --user-data <path> Config dir (default ~/.local/share/porcelain)
54
- --tailnet Bind Tailscale interface too
55
- --lan Bind RFC1918 LAN addresses too
56
- --cloudflare Publish loopback over Cloudflare (named or quick)
57
- --allowed-origin <origin>
58
- Trust a browser Hub origin (repeat for more than one)
59
- --no-watchdog For systemd / supervisors (stdin is /dev/null)
60
- ```
25
+ For exposure flags, browser origins, systemd, updates, and troubleshooting, use the current
26
+ [remote-access guide](https://github.com/FabioFiorita/porcelain/blob/main/docs/remote-access.md) and
27
+ `porcelain --help` rather than copying a service file from an older package version.
61
28
 
62
- Porcelain always binds loopback, never `0.0.0.0`. Private listeners are explicit.
63
- Cloudflare is public HTTPS but still credential-gated. Tailscale and Cloudflare are
64
- exclusive; LAN can combine with either.
29
+ ## Agent connection
65
30
 
66
- ## Always-on (optional)
67
-
68
- If you *do* want a supervised process, use `--no-watchdog` and a unit like:
69
-
70
- ```ini
71
- [Service]
72
- Environment=PORCELAIN_USER_DATA=%h/.local/share/porcelain
73
- Environment=PORCELAIN_DAEMON_PORT=43117
74
- Environment=PORCELAIN_ALLOWED_ORIGIN=http://hub-host:43118
75
- Environment=PORCELAIN_TAILNET_BIND=1
76
- Environment=PORCELAIN_NO_STDIN_WATCHDOG=1
77
- ExecStart=/usr/bin/npx --yes @fabiofiorita/porcelain@latest serve --no-watchdog --tailnet
78
- Restart=on-failure
79
- ```
80
-
81
- Prefer a real `node` binary over Volta/fnm/nvm shims in `ExecStart` when pinning
82
- a global install instead of npx.
83
-
84
- For a browser Hub served from another origin, set `PORCELAIN_ALLOWED_ORIGIN` to that Hub's
85
- bare `http(s)` origin (repeat `--allowed-origin` for multiple Hubs; comma-separated values
86
- are accepted). Paths, credentials, wildcards, and `null` are rejected. This setting only
87
- controls CORS response headers; every API and WebSocket request remains token-gated.
88
-
89
- ## Agent access (MCP)
90
-
91
- The daemon serves the Model Context Protocol at `POST /mcp` for direct loopback agent
92
- clients without an admin token. LAN, Tailscale, Cloudflare, and proxied requests receive
93
- 404. Install the plugin through your client's native plugin manager. For an Agent Plugin client,
94
- add the repository `FabioFiorita/porcelain`; for Claude Code, use:
31
+ Install the Porcelain plugin through the agent's plugin manager. Its bundled stdio connector
32
+ forwards MCP to the matching daemon's profile-scoped local OS socket; it is not exposed through the
33
+ daemon's LAN, Tailscale, Cloudflare, or renderer HTTP routes. Claude Code can install it with:
95
34
 
96
35
  ```text
97
36
  /plugin marketplace add FabioFiorita/porcelain
98
37
  /plugin install porcelain@porcelain
99
38
  ```
100
39
 
101
- Installing the plugin is the opt-in. The endpoint is always served, so upgrading the
102
- daemon ships new tools with no per-agent configuration to rewrite.
103
-
104
- ## Requirements
105
-
106
- - **Node ≥ 22**
107
- - **git** on PATH
108
- - A **C toolchain** (make, g++, python3) — first install compiles `node-pty`
109
-
110
- ## Develop / ship from the monorepo
40
+ ## Repository packaging
111
41
 
112
42
  ```sh
113
43
  pnpm build && pnpm daemon:dist
114
- cd dist-daemon && npm publish --access public
115
44
  ```
116
45
 
117
- Assembled by `pnpm daemon:dist` from a completed `pnpm build`. Do not edit
118
- `dist-daemon/` by hand — regenerate.
46
+ `dist-daemon/` is generated from the completed product build; do not edit it by hand.
@@ -25,7 +25,7 @@ __export(protocol_exports, {
25
25
  });
26
26
  module.exports = __toCommonJS(protocol_exports);
27
27
  var import_zod = require("zod");
28
- var PROTOCOL_VERSION = 1;
28
+ var PROTOCOL_VERSION = 2;
29
29
  var PROTOCOL_VERSION_HEADER = "x-porcelain-protocol-version";
30
30
  var protocolVersionSchema = import_zod.z.literal(PROTOCOL_VERSION);
31
31
  // Annotate the CommonJS export names for ESM import in node: