frizz 0.7.7 → 0.7.8
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 +11 -46
- package/dist/dev-child.js +201 -63
- package/dist/frizz.js +918 -398
- package/package.json +1 -1
- package/runtime/cc-worker/DECISIONS.md +2 -1
- package/runtime/cc-worker/bin/frizz-mcp.mjs +3 -2
- package/web-dist/assets/{TerminalPane-Cb8jOFP9.js → TerminalPane-ubcEP7X3.js} +1 -1
- package/web-dist/assets/{abnfDiagram-VRR7QNED-Dtbg2eZ0.js → abnfDiagram-VRR7QNED-0brfnieb.js} +1 -1
- package/web-dist/assets/architecture-TIHT7OUA-DksosNDW.js +1 -0
- package/web-dist/assets/{architectureDiagram-ZJ3FMSHR-DzQjWW7u.js → architectureDiagram-ZJ3FMSHR-Dji-XBdF.js} +1 -1
- package/web-dist/assets/{blockDiagram-677ZJIJ3-BJnpkLMt.js → blockDiagram-677ZJIJ3-BQMyz3Q9.js} +1 -1
- package/web-dist/assets/{c4Diagram-LMCZKHZV-COdatsYu.js → c4Diagram-LMCZKHZV-BMNws0Oi.js} +1 -1
- package/web-dist/assets/channel-DqoPvfQz.js +1 -0
- package/web-dist/assets/{chunk-32BRIVSS-CORMw4Vm.js → chunk-32BRIVSS-CVv1ae7n.js} +1 -1
- package/web-dist/assets/{chunk-52WLFC77-C7lEadTg.js → chunk-52WLFC77-BYhPlKCT.js} +1 -1
- package/web-dist/assets/{chunk-C7G6YPKG-DZy4F97l.js → chunk-C7G6YPKG-Cn4HhNwb.js} +1 -1
- package/web-dist/assets/{chunk-EX3LRPZG-HynlfV9p.js → chunk-EX3LRPZG-P3ZYFC1W.js} +1 -1
- package/web-dist/assets/{chunk-FWX5IMBZ-BbwKNhKm.js → chunk-FWX5IMBZ-Ba3NpEQa.js} +2 -2
- package/web-dist/assets/{chunk-HOUHSVGY-lIhOZSmL.js → chunk-HOUHSVGY-BCWyMhwJ.js} +1 -1
- package/web-dist/assets/{chunk-ICXQ74PX-WGxaMO8c.js → chunk-ICXQ74PX-DWAAqHL7.js} +1 -1
- package/web-dist/assets/{chunk-MOJQB5TN-B-cx0f3u.js → chunk-MOJQB5TN-pc5VJ4Nq.js} +1 -1
- package/web-dist/assets/{chunk-OGEWGWER-DJceVwZH.js → chunk-OGEWGWER-DUxmbiuX.js} +1 -1
- package/web-dist/assets/{chunk-PUDLZKDR-CGwHZns8.js → chunk-PUDLZKDR-DRdZWzxX.js} +1 -1
- package/web-dist/assets/{chunk-Q4XR5HBZ-PTSWtmk1.js → chunk-Q4XR5HBZ-Bafzu7s-.js} +1 -1
- package/web-dist/assets/{chunk-V7JOEXUC-VNxHZPcf.js → chunk-V7JOEXUC-Bj0A8ftW.js} +1 -1
- package/web-dist/assets/{chunk-VAUOI2AC-ZXYCz_Aw.js → chunk-VAUOI2AC-DBgVQKIO.js} +1 -1
- package/web-dist/assets/{chunk-VR4S4FIN-9WCtmFJp.js → chunk-VR4S4FIN-DU-1KtuM.js} +1 -1
- package/web-dist/assets/{chunk-WYO6CB5R-V4EBjpmt.js → chunk-WYO6CB5R-DzVb3-Rj.js} +1 -1
- package/web-dist/assets/{chunk-ZGVPDNZ5-CPW0Z0ae.js → chunk-ZGVPDNZ5-BPKQvduj.js} +1 -1
- package/web-dist/assets/classDiagram-OUVF2IWQ-DwUs74RB.js +1 -0
- package/web-dist/assets/classDiagram-v2-EOCWNBFH-DwUs74RB.js +1 -0
- package/web-dist/assets/{cynefin-VYW2F7L2-E7PklfJD.js → cynefin-VYW2F7L2-lo8PqVCk.js} +1 -1
- package/web-dist/assets/{cynefinDiagram-TSTJHNR4-JIXAPjDf.js → cynefinDiagram-TSTJHNR4-BtQLaDV0.js} +1 -1
- package/web-dist/assets/{dagre-VKFMJZFB-DjXrdcNx.js → dagre-VKFMJZFB-BJ2-f-A0.js} +1 -1
- package/web-dist/assets/{diagram-FQU43EPY--i9i0qhm.js → diagram-FQU43EPY-CLM-8r74.js} +1 -1
- package/web-dist/assets/{diagram-G47NLZAW-DxgcENZ_.js → diagram-G47NLZAW-CfuoJGpN.js} +1 -1
- package/web-dist/assets/{diagram-NH7WQ7WH-CUy9Nr90.js → diagram-NH7WQ7WH-DfxxRwH8.js} +1 -1
- package/web-dist/assets/{diagram-OA4YK3LP-DbTbUaCb.js → diagram-OA4YK3LP-D7knxZee.js} +1 -1
- package/web-dist/assets/{diagram-WEI45ONY-2gk6xhOq.js → diagram-WEI45ONY-C2WfMXWl.js} +1 -1
- package/web-dist/assets/{ebnfDiagram-CCIWWBDH-uE2iDETg.js → ebnfDiagram-CCIWWBDH-DRSZ24tF.js} +1 -1
- package/web-dist/assets/{erDiagram-Q63AITRT-dztd4MUw.js → erDiagram-Q63AITRT-DXe0OrbY.js} +1 -1
- package/web-dist/assets/eventmodeling-45OFAUF4-CUIjQ7kE.js +1 -0
- package/web-dist/assets/flowDiagram-23GEKE2U-Dka-3F3n.js +1 -0
- package/web-dist/assets/{ganttDiagram-NO4QXBWP-DAds6Aht.js → ganttDiagram-NO4QXBWP-wGqOgjvs.js} +1 -1
- package/web-dist/assets/{gitGraph-TEB2WS4Q-Ci0XVvIa.js → gitGraph-TEB2WS4Q-BygokG6y.js} +1 -1
- package/web-dist/assets/{gitGraphDiagram-IHSO6WYX-C6FULyt8.js → gitGraphDiagram-IHSO6WYX-CV1933_M.js} +1 -1
- package/web-dist/assets/index-CmrDpsD8.css +1 -0
- package/web-dist/assets/{index-CNy5uOpI.js → index-DB1d3eMJ.js} +75 -75
- package/web-dist/assets/{info-DKCQHKI2-9N77dOiw.js → info-DKCQHKI2-DLavbzui.js} +1 -1
- package/web-dist/assets/{infoDiagram-FWYZ7A6U-BymP3PgG.js → infoDiagram-FWYZ7A6U-Biouxd9G.js} +1 -1
- package/web-dist/assets/{ishikawaDiagram-FXEZZL3T-CU_kQBz1.js → ishikawaDiagram-FXEZZL3T-DJxwwS3R.js} +1 -1
- package/web-dist/assets/{journeyDiagram-5HDEW3XC-DZN15HSd.js → journeyDiagram-5HDEW3XC-Clx_WkdW.js} +1 -1
- package/web-dist/assets/{kanban-definition-HUTT4EX6-J4wR5g_3.js → kanban-definition-HUTT4EX6-Bf7bX_96.js} +1 -1
- package/web-dist/assets/{line-SRzGpiDr.js → line-CV2v49IN.js} +1 -1
- package/web-dist/assets/{mermaid-parser.core-CGBscNGo.js → mermaid-parser.core-BPsFhEi6.js} +3 -3
- package/web-dist/assets/{mermaid.core-xNdwXb1r.js → mermaid.core-0EWDNL_R.js} +3 -3
- package/web-dist/assets/{mindmap-definition-LN4V7U3C-gR2dbzrj.js → mindmap-definition-LN4V7U3C-C1y4yy3Z.js} +1 -1
- package/web-dist/assets/{packet-7NZHBO7P-DrR4W6I3.js → packet-7NZHBO7P-CpcpxruB.js} +1 -1
- package/web-dist/assets/{pegDiagram-2B236MQR-DN7R-_t4.js → pegDiagram-2B236MQR-CVlVP4cH.js} +1 -1
- package/web-dist/assets/{pie-RZYD4A2V-C8VjQAFZ.js → pie-RZYD4A2V-BcVPOhTZ.js} +1 -1
- package/web-dist/assets/{pieDiagram-ENE6RG2P-5w64zdD1.js → pieDiagram-ENE6RG2P-DZv4Tfae.js} +1 -1
- package/web-dist/assets/{quadrantDiagram-ABIIQ3AL-B4rbezq_.js → quadrantDiagram-ABIIQ3AL-DOzS_U_a.js} +1 -1
- package/web-dist/assets/{radar-I7S5WNFK-CTbbPB8m.js → radar-I7S5WNFK-8YADxkdT.js} +1 -1
- package/web-dist/assets/{railroad-3IZDKUUU-CY1er15b.js → railroad-3IZDKUUU-DzndPrRy.js} +1 -1
- package/web-dist/assets/railroad-abnf-AHOZXSZD-CCnWa6K9.js +1 -0
- package/web-dist/assets/railroad-ebnf-EBAXGLYW-jtVdzv7e.js +1 -0
- package/web-dist/assets/railroad-peg-LSFZ7HO6-B8D6TyEe.js +1 -0
- package/web-dist/assets/{railroadDiagram-RFXS5EU6-Bx2HJ3yT.js → railroadDiagram-RFXS5EU6-CPJAH-r7.js} +1 -1
- package/web-dist/assets/{requirementDiagram-TGXJPOKE-BLK-Y2rx.js → requirementDiagram-TGXJPOKE-BVFJZfwl.js} +1 -1
- package/web-dist/assets/{sankeyDiagram-HTMAVEWB-Dk-8Miv-.js → sankeyDiagram-HTMAVEWB-CUhvFPmE.js} +1 -1
- package/web-dist/assets/{sequenceDiagram-DBY2YBRQ-DL2alfR-.js → sequenceDiagram-DBY2YBRQ-Cy9CGhNq.js} +1 -1
- package/web-dist/assets/{stateDiagram-2N3HPSRC-Bka44wf1.js → stateDiagram-2N3HPSRC-CqOnmPLp.js} +1 -1
- package/web-dist/assets/stateDiagram-v2-6OUMAXLB-DWKW-4qu.js +1 -0
- package/web-dist/assets/{swimlanes-5IMT3BWC-e0GbMwIr.js → swimlanes-5IMT3BWC-c_zBqkb9.js} +1 -1
- package/web-dist/assets/swimlanesDiagram-G3AALYLV-DZKoB7ae.js +8 -0
- package/web-dist/assets/{timeline-definition-FHXFAJF6-CT3GFq89.js → timeline-definition-FHXFAJF6-y_QM62SK.js} +1 -1
- package/web-dist/assets/{treeView-QDETBFTQ-BJauJ0bm.js → treeView-QDETBFTQ-T3y_1KXV.js} +1 -1
- package/web-dist/assets/{treemap-6X3UGDF4-DCX7A-nx.js → treemap-6X3UGDF4-CzvqucqY.js} +1 -1
- package/web-dist/assets/{vennDiagram-L72KCM5P-D4dm2iTR.js → vennDiagram-L72KCM5P-6-HNOpN0.js} +1 -1
- package/web-dist/assets/{wardley-OPB4EBWU-DklTDSId.js → wardley-OPB4EBWU-BrsaqsLL.js} +1 -1
- package/web-dist/assets/{wardleyDiagram-EHGQE667-CikP5hBd.js → wardleyDiagram-EHGQE667-Cr_rCzwd.js} +1 -1
- package/web-dist/assets/{xychartDiagram-FW5EYKEG-FXuOAFpz.js → xychartDiagram-FW5EYKEG-BnX6ccx4.js} +1 -1
- package/web-dist/index.html +2 -2
- package/web-dist/assets/architecture-TIHT7OUA-CTxVpl9_.js +0 -1
- package/web-dist/assets/channel-COS0Ygbp.js +0 -1
- package/web-dist/assets/classDiagram-OUVF2IWQ-Df5TLnrN.js +0 -1
- package/web-dist/assets/classDiagram-v2-EOCWNBFH-Df5TLnrN.js +0 -1
- package/web-dist/assets/eventmodeling-45OFAUF4-DPVPOEaJ.js +0 -1
- package/web-dist/assets/flowDiagram-23GEKE2U-BMIMgVYd.js +0 -1
- package/web-dist/assets/index-D6LsViUY.css +0 -1
- package/web-dist/assets/railroad-abnf-AHOZXSZD-DfEpkrtJ.js +0 -1
- package/web-dist/assets/railroad-ebnf-EBAXGLYW-Csunejgu.js +0 -1
- package/web-dist/assets/railroad-peg-LSFZ7HO6-BgRslbM_.js +0 -1
- package/web-dist/assets/stateDiagram-v2-6OUMAXLB-6KcScVPX.js +0 -1
- package/web-dist/assets/swimlanesDiagram-G3AALYLV-jaJhlDbE.js +0 -8
package/README.md
CHANGED
|
@@ -63,7 +63,7 @@ Frizz is a browser tab, a queue, and the agent CLIs you already pay for. It brin
|
|
|
63
63
|
- 🐙 **GitHub integration.** Browse your repo's issues and pull requests without leaving the composer, and turn a selection of them into threads. Workers can read issues, diffs, and CI on their own.
|
|
64
64
|
- 👀 **Built-in CI and PR watchers.** A worker waiting on a build or a review doesn't hand the thread back to you to be told "keep going." It watches, and picks the work back up when the run goes green or a review lands.
|
|
65
65
|
- 📝 **No magic.** A thread behaves like a Claude Code session you started yourself. Frizz adds no worktrees, no branches, no dev server, no build integration, no workflow engine to fight with.
|
|
66
|
-
- 🔒 **Local only.** No cloud, no account, no telemetry. The server binds `127.0.0.1` by default and its state lives in your user directory, never in your checkout. To reach a board from a phone,
|
|
66
|
+
- 🔒 **Local only.** No cloud, no account, no telemetry. The server binds `127.0.0.1` by default and its state lives in your user directory, never in your checkout. To reach a board from a phone, press R in its terminal — see [Remote access](docs/remote-access.md).
|
|
67
67
|
|
|
68
68
|
### Projects
|
|
69
69
|
|
|
@@ -132,11 +132,7 @@ $ npx frizz --help
|
|
|
132
132
|
|
|
133
133
|
Frizz production launcher
|
|
134
134
|
|
|
135
|
-
Usage: npx frizz [
|
|
136
|
-
|
|
137
|
-
Commands:
|
|
138
|
-
up serve at the saved public hostname and run its tunnel; asked once,
|
|
139
|
-
then remembered
|
|
135
|
+
Usage: npx frizz [options]
|
|
140
136
|
|
|
141
137
|
Run it in the directory you want to work in. One server serves EVERY project on this machine,
|
|
142
138
|
each at its own /project/<name> URL, so a second run joins the one already going. Runs the
|
|
@@ -146,28 +142,15 @@ for a source checkout.
|
|
|
146
142
|
Options:
|
|
147
143
|
--no-app print the URL without opening a browser
|
|
148
144
|
--port <port> request a fixed port for a new workspace server
|
|
149
|
-
--host [address] serve on a network address instead of loopback (bare --host means 0.0.0.0)
|
|
150
|
-
--allowed-host <name> with --host, also accept this DNS name as the board's address (repeatable)
|
|
151
|
-
--public-origin <url> serve behind a proxy/tunnel reachable at this exact origin
|
|
152
|
-
--cloud alias of up, for saved commands
|
|
153
145
|
--link print a fresh single-use access link for the running board
|
|
154
146
|
--debug stream the full event feed to the terminal instead of the compact readout
|
|
155
147
|
-h, --help show this help
|
|
156
148
|
|
|
157
|
-
Environment:
|
|
158
|
-
FRIZZ_HOST same as --host
|
|
159
|
-
FRIZZ_ALLOWED_HOSTS same as --allowed-host, comma separated
|
|
160
|
-
FRIZZ_PUBLIC_ORIGIN same as --public-origin
|
|
161
|
-
|
|
162
|
-
--host puts a board that can run shell commands as you on the network, and Frizz has no login: anyone
|
|
163
|
-
who reaches the port controls it. Only do this on a network you trust. An IP address and this
|
|
164
|
-
machine's own hostname work as-is; any other DNS name must be listed with --allowed-host ("*"
|
|
165
|
-
allows any).
|
|
166
149
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
150
|
+
To reach the board from a phone or another machine, press R in the terminal running it: a short
|
|
151
|
+
walkthrough sets up a frizz.sh name, a Cloudflare Tunnel, Tailscale, or a proxy of your own, and
|
|
152
|
+
remembers the choice, so a plain launch serves it from then on. The board stays on loopback and
|
|
153
|
+
shows a single-use sign-in link as a QR; press L for a fresh one, or run --link from another shell.
|
|
171
154
|
```
|
|
172
155
|
|
|
173
156
|
<br/>
|
|
@@ -184,7 +167,7 @@ trades the code for a session cookie, so the link itself stops working the momen
|
|
|
184
167
|
<details>
|
|
185
168
|
<summary><b>Does anything leave my machine?</b></summary>
|
|
186
169
|
|
|
187
|
-
> Nothing from Frizz. There's no account, no telemetry, and the server binds to `127.0.0.1
|
|
170
|
+
> Nothing from Frizz. There's no account, no telemetry, and the server binds to `127.0.0.1`; reaching it from another device is something you switch on yourself (press R in its terminal). The agents themselves talk to their providers, and `gh` talks to GitHub, but Frizz is a local process looking at local files.
|
|
188
171
|
|
|
189
172
|
</details>
|
|
190
173
|
|
|
@@ -219,36 +202,18 @@ trades the code for a session cookie, so the link itself stops working the momen
|
|
|
219
202
|
<details>
|
|
220
203
|
<summary><b>Can I reach it from another machine?</b></summary>
|
|
221
204
|
|
|
222
|
-
> Yes,
|
|
223
|
-
>
|
|
224
|
-
> ```sh
|
|
225
|
-
> npx frizz --host # every interface, i.e. 0.0.0.0
|
|
226
|
-
> npx frizz --host 192.168.1.5 # one interface
|
|
227
|
-
> ```
|
|
228
|
-
>
|
|
229
|
-
> Frizz prints the addresses to use and warns you as it starts. Reaching it by IP or by the machine's own hostname (`http://pupper:9393/`, `http://pupper.local:9393/`) works as-is; any other name you have to say so — `--host --allowed-host frizz.home.arpa` — because an unlisted name is how DNS rebinding gets a browser to treat an attacker's page as same-origin with your board, and the machine's own name is the one nobody off your network can point elsewhere. `FRIZZ_HOST` and `FRIZZ_ALLOWED_HOSTS` do the same thing when the launch command lives in an image or a unit file.
|
|
205
|
+
> Yes. Press **R** in the terminal running Frizz. A short walkthrough sets up one of four ways to reach the board — a name on frizz.sh, a Cloudflare Tunnel you own, Tailscale, or any proxy you run — checks what each needs, prints the commands, and remembers your choice. From then on a plain `npx frizz` serves it; pick **Off** in the same place to go back to loopback only.
|
|
230
206
|
>
|
|
231
|
-
>
|
|
207
|
+
> The board stays bound to `127.0.0.1` in every case. Something in front of it — the frizz.sh relay, the tunnel, Tailscale, your proxy — carries the traffic, and Frizz gates the first visit with a single-use sign-in link shown as a QR. Press **L** for a fresh link any time, or `npx frizz --link` from another shell (over SSH, for a headless box). See [Remote access](docs/remote-access.md) for what each option needs.
|
|
232
208
|
|
|
233
209
|
</details>
|
|
234
210
|
|
|
235
211
|
<details>
|
|
236
212
|
<summary><b>Can I reach it from anywhere, not just my LAN?</b></summary>
|
|
237
213
|
|
|
238
|
-
>
|
|
214
|
+
> Same answer: press **R** and pick a frizz.sh name, a Cloudflare Tunnel, or Tailscale. Each is reachable from anywhere the transport is — a frizz.sh name and a Cloudflare Tunnel from the open internet, Tailscale from your own devices.
|
|
239
215
|
>
|
|
240
|
-
>
|
|
241
|
-
> npx frizz --public-origin https://frizz.example.com
|
|
242
|
-
> cloudflared tunnel --url http://127.0.0.1:9393 # Frizz's port
|
|
243
|
-
> ```
|
|
244
|
-
>
|
|
245
|
-
> Frizz stays bound to `127.0.0.1` — `--public-origin` is not `--host` and does not put anything on your LAN. The tunnel runs on the same machine and dials the loopback port, so the only way in is through the tunnel. That is also what makes this the *good* remote option rather than merely a working one: the tunnel terminates TLS, so the board is a real `https://` origin and therefore a secure context, which plain `--host` over a LAN IP is not. Copy buttons and desktop notifications work again, and it works on a phone.
|
|
246
|
-
>
|
|
247
|
-
> The address you pass must be the exact origin your browser shows — scheme and host, no path. Frizz accepts that one origin, and accepts `X-Forwarded-*` only on requests that actually arrived as it.
|
|
248
|
-
>
|
|
249
|
-
> Frizz prints a **single-use** access link and renders it as a QR in your terminal, so you can scan it from a phone without typing forty characters. Scanning trades the code for a session cookie and the link immediately stops working; press **L** any time for a fresh one. A code expires in five minutes, and a spent one says so rather than failing silently.
|
|
250
|
-
|
|
251
|
-
**Even so: Frizz has no accounts, so that link — and anything you put in front of the tunnel — *is* your access control.** A bare tunnel publishes a shell-capable board to the open internet for anyone who has the URL. Require authentication at the proxy — with Cloudflare, that means a [Cloudflare Access](https://developers.cloudflare.com/cloudflare-one/policies/access/) application over the hostname, with a policy allowing only your own email, created *before* the hostname resolves. Tailscale Serve is the same idea with device identity instead of SSO. Frizz prints this warning on every launch that names a public origin, and it is not boilerplate.
|
|
216
|
+
> Frizz has no accounts, so the single-use sign-in link **is** the door: a phone that scans it gets a session; nobody else gets in. Sessions are per device and can be listed and revoked with `npx frizz --sessions` and `npx frizz --sign-out`.
|
|
252
217
|
|
|
253
218
|
</details>
|
|
254
219
|
|