frizz 0.3.0 → 0.5.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 +26 -4
- package/dist/claude-agent-broker.js +9 -4
- package/dist/dev-child.js +1868 -529
- package/dist/frizz.js +814 -234
- package/package.json +5 -3
- package/runtime/cc-worker/DECISIONS.md +17 -0
- package/runtime/cc-worker/bin/frizz-mcp.mjs +159 -174
- package/runtime/cc-worker/hooks/session-seed.mjs +1 -1
- package/web-dist/assets/{TerminalPane-CTdetDJJ.js → TerminalPane-WcpgmCA-.js} +1 -1
- package/web-dist/assets/{abnfDiagram-VRR7QNED-BDKrjCMs.js → abnfDiagram-VRR7QNED-Caecklbz.js} +1 -1
- package/web-dist/assets/architecture-TIHT7OUA-BTy2nvYL.js +1 -0
- package/web-dist/assets/{architectureDiagram-ZJ3FMSHR-BJebpUUM.js → architectureDiagram-ZJ3FMSHR-BEk0fg8C.js} +1 -1
- package/web-dist/assets/{blockDiagram-677ZJIJ3-BNbuk25k.js → blockDiagram-677ZJIJ3-B4yq3xiy.js} +1 -1
- package/web-dist/assets/{c4Diagram-LMCZKHZV-lCfyotdU.js → c4Diagram-LMCZKHZV-DaA5NBkz.js} +1 -1
- package/web-dist/assets/channel-WghlT4VS.js +1 -0
- package/web-dist/assets/{chunk-32BRIVSS-DP72SEkr.js → chunk-32BRIVSS-2XsSs8F_.js} +1 -1
- package/web-dist/assets/{chunk-52WLFC77-DxO3gN-p.js → chunk-52WLFC77-DWJfECP3.js} +1 -1
- package/web-dist/assets/{chunk-C7G6YPKG-BXFx9Vlr.js → chunk-C7G6YPKG-Bz07eaGt.js} +1 -1
- package/web-dist/assets/{chunk-EX3LRPZG-CR3sHpPf.js → chunk-EX3LRPZG-D78kZEMM.js} +1 -1
- package/web-dist/assets/{chunk-FWX5IMBZ-CJ8L__oG.js → chunk-FWX5IMBZ-CeCa17CW.js} +2 -2
- package/web-dist/assets/{chunk-HOUHSVGY-BCl3JSWr.js → chunk-HOUHSVGY-9H4GFuBa.js} +1 -1
- package/web-dist/assets/{chunk-ICXQ74PX-CZxFMci1.js → chunk-ICXQ74PX--Aa17r4X.js} +1 -1
- package/web-dist/assets/{chunk-MOJQB5TN-Ck3_47dB.js → chunk-MOJQB5TN-C3vXhsPV.js} +1 -1
- package/web-dist/assets/{chunk-OGEWGWER-CVXjES-F.js → chunk-OGEWGWER-G4kZRBkX.js} +1 -1
- package/web-dist/assets/{chunk-PUDLZKDR-JjrVgaR7.js → chunk-PUDLZKDR-DWd5kvyM.js} +1 -1
- package/web-dist/assets/{chunk-Q4XR5HBZ-C5YMRAQ0.js → chunk-Q4XR5HBZ-u55p39Up.js} +1 -1
- package/web-dist/assets/{chunk-V7JOEXUC-DK0mfUHU.js → chunk-V7JOEXUC-BU4YBmV4.js} +1 -1
- package/web-dist/assets/{chunk-VAUOI2AC-BKBntpid.js → chunk-VAUOI2AC-VXcmT20q.js} +1 -1
- package/web-dist/assets/{chunk-VR4S4FIN-zgE1dG6U.js → chunk-VR4S4FIN-CSjEXLOC.js} +1 -1
- package/web-dist/assets/{chunk-WYO6CB5R-CZhh1IBq.js → chunk-WYO6CB5R-4WGk2dpL.js} +1 -1
- package/web-dist/assets/{chunk-ZGVPDNZ5-CrNjIEem.js → chunk-ZGVPDNZ5-D5Xl8ZV6.js} +1 -1
- package/web-dist/assets/classDiagram-OUVF2IWQ-D21-Dy4r.js +1 -0
- package/web-dist/assets/classDiagram-v2-EOCWNBFH-D21-Dy4r.js +1 -0
- package/web-dist/assets/{cynefin-VYW2F7L2-Ca_BPfTG.js → cynefin-VYW2F7L2-O6wB49wK.js} +1 -1
- package/web-dist/assets/{cynefinDiagram-TSTJHNR4-CsINQf6g.js → cynefinDiagram-TSTJHNR4-pd6ZogNC.js} +1 -1
- package/web-dist/assets/{dagre-VKFMJZFB-CE0DYMFy.js → dagre-VKFMJZFB-D8W1S6fw.js} +1 -1
- package/web-dist/assets/{diagram-FQU43EPY-BqTduEYE.js → diagram-FQU43EPY-Bm1NOkHd.js} +1 -1
- package/web-dist/assets/{diagram-G47NLZAW-Cho718s6.js → diagram-G47NLZAW-CjwnXTIc.js} +1 -1
- package/web-dist/assets/{diagram-NH7WQ7WH-D0Z8t9UC.js → diagram-NH7WQ7WH-DH1jZ_mu.js} +1 -1
- package/web-dist/assets/{diagram-OA4YK3LP-CBacyeDx.js → diagram-OA4YK3LP-B-s969Q_.js} +1 -1
- package/web-dist/assets/{diagram-WEI45ONY-CozpXa4j.js → diagram-WEI45ONY-BU3lv6cL.js} +1 -1
- package/web-dist/assets/{ebnfDiagram-CCIWWBDH-ba4NbQQo.js → ebnfDiagram-CCIWWBDH-FsAeyqcC.js} +1 -1
- package/web-dist/assets/{erDiagram-Q63AITRT-B3BciOYa.js → erDiagram-Q63AITRT-BRvg5Y9d.js} +1 -1
- package/web-dist/assets/eventmodeling-45OFAUF4-RhX2WA7g.js +1 -0
- package/web-dist/assets/flowDiagram-23GEKE2U-C7N14tdV.js +1 -0
- package/web-dist/assets/{ganttDiagram-NO4QXBWP-lPmrRit4.js → ganttDiagram-NO4QXBWP-eATKNh9U.js} +1 -1
- package/web-dist/assets/{gitGraph-TEB2WS4Q-BjyclOq0.js → gitGraph-TEB2WS4Q-CNYqsua8.js} +1 -1
- package/web-dist/assets/{gitGraphDiagram-IHSO6WYX-pzeb4Yrw.js → gitGraphDiagram-IHSO6WYX-BUxgluf8.js} +1 -1
- package/web-dist/assets/index-BFuReKr0.js +368 -0
- package/web-dist/assets/index-BH9U3Zlg.css +1 -0
- package/web-dist/assets/{info-DKCQHKI2-Bwycegvf.js → info-DKCQHKI2-HsVLwo1c.js} +1 -1
- package/web-dist/assets/{infoDiagram-FWYZ7A6U-BCvRGj_5.js → infoDiagram-FWYZ7A6U-D7U65xDp.js} +1 -1
- package/web-dist/assets/{ishikawaDiagram-FXEZZL3T-Ofw1RMj3.js → ishikawaDiagram-FXEZZL3T-BsfIYXjX.js} +1 -1
- package/web-dist/assets/{journeyDiagram-5HDEW3XC-C5ROwFio.js → journeyDiagram-5HDEW3XC-CpkREKol.js} +1 -1
- package/web-dist/assets/{kanban-definition-HUTT4EX6-YLPLkpeT.js → kanban-definition-HUTT4EX6-2M3KW6Gw.js} +1 -1
- package/web-dist/assets/{line-KtkNqRgI.js → line-Cs7zWs24.js} +1 -1
- package/web-dist/assets/{mermaid-parser.core-D_FfqBe7.js → mermaid-parser.core-Dw-IECV5.js} +3 -3
- package/web-dist/assets/{mermaid.core-Ffv8anVf.js → mermaid.core-C1lrddjT.js} +3 -3
- package/web-dist/assets/{mindmap-definition-LN4V7U3C-B2jj4vfm.js → mindmap-definition-LN4V7U3C-gVS5On1g.js} +1 -1
- package/web-dist/assets/{packet-7NZHBO7P-BjmWHwra.js → packet-7NZHBO7P-Tti1-UWA.js} +1 -1
- package/web-dist/assets/{pegDiagram-2B236MQR-Dq3iJDyq.js → pegDiagram-2B236MQR-DE5in93G.js} +1 -1
- package/web-dist/assets/{pie-RZYD4A2V-jBbH1lv9.js → pie-RZYD4A2V-DfLNkvHl.js} +1 -1
- package/web-dist/assets/{pieDiagram-ENE6RG2P-C3ETW9lq.js → pieDiagram-ENE6RG2P-DcqSqJqb.js} +1 -1
- package/web-dist/assets/{quadrantDiagram-ABIIQ3AL-DItSmme7.js → quadrantDiagram-ABIIQ3AL-DR-nRPgN.js} +1 -1
- package/web-dist/assets/{radar-I7S5WNFK-6ey6crgP.js → radar-I7S5WNFK-DGLDBfPd.js} +1 -1
- package/web-dist/assets/{railroad-3IZDKUUU-Cii-Mn0E.js → railroad-3IZDKUUU-BaiGEHlV.js} +1 -1
- package/web-dist/assets/railroad-abnf-AHOZXSZD-BCeoIOWA.js +1 -0
- package/web-dist/assets/railroad-ebnf-EBAXGLYW-lZpXJLD8.js +1 -0
- package/web-dist/assets/railroad-peg-LSFZ7HO6-CaUBrHTL.js +1 -0
- package/web-dist/assets/{railroadDiagram-RFXS5EU6-M363ils_.js → railroadDiagram-RFXS5EU6-82aEev5_.js} +1 -1
- package/web-dist/assets/{requirementDiagram-TGXJPOKE-CTs2_V6T.js → requirementDiagram-TGXJPOKE-Bs8opBRj.js} +1 -1
- package/web-dist/assets/{sankeyDiagram-HTMAVEWB-QTLLcDPD.js → sankeyDiagram-HTMAVEWB-gOb3FIr8.js} +1 -1
- package/web-dist/assets/{sequenceDiagram-DBY2YBRQ-Bxw9Tr6e.js → sequenceDiagram-DBY2YBRQ-6DvjtRHR.js} +1 -1
- package/web-dist/assets/{stateDiagram-2N3HPSRC-BecB6roG.js → stateDiagram-2N3HPSRC-Cg2LWdUf.js} +1 -1
- package/web-dist/assets/stateDiagram-v2-6OUMAXLB-Digf9CWZ.js +1 -0
- package/web-dist/assets/{swimlanes-5IMT3BWC-COiYgS0w.js → swimlanes-5IMT3BWC-BDpPdYEl.js} +1 -1
- package/web-dist/assets/swimlanesDiagram-G3AALYLV-DEZRDWHA.js +8 -0
- package/web-dist/assets/{timeline-definition-FHXFAJF6-Ci22coeH.js → timeline-definition-FHXFAJF6-BSjfeutv.js} +1 -1
- package/web-dist/assets/{treeView-QDETBFTQ-4DW35czh.js → treeView-QDETBFTQ-DwgPy6V3.js} +1 -1
- package/web-dist/assets/{treemap-6X3UGDF4-Dq_-Z6-Y.js → treemap-6X3UGDF4-7eiifTKW.js} +1 -1
- package/web-dist/assets/{vennDiagram-L72KCM5P-CHQSIEYq.js → vennDiagram-L72KCM5P-9u4AhcnV.js} +1 -1
- package/web-dist/assets/{wardley-OPB4EBWU-Bwlh7HCY.js → wardley-OPB4EBWU-DqNb5x9U.js} +1 -1
- package/web-dist/assets/{wardleyDiagram-EHGQE667-DctjuPYn.js → wardleyDiagram-EHGQE667-DlJ7h3vg.js} +1 -1
- package/web-dist/assets/{xychartDiagram-FW5EYKEG-ZoIGosv8.js → xychartDiagram-FW5EYKEG-B_9ukg2S.js} +1 -1
- package/web-dist/index.html +2 -2
- package/web-dist/assets/architecture-TIHT7OUA-ChUMo004.js +0 -1
- package/web-dist/assets/channel-pr7r6raB.js +0 -1
- package/web-dist/assets/classDiagram-OUVF2IWQ-CvGbPMn_.js +0 -1
- package/web-dist/assets/classDiagram-v2-EOCWNBFH-CvGbPMn_.js +0 -1
- package/web-dist/assets/eventmodeling-45OFAUF4-DKmyo-jd.js +0 -1
- package/web-dist/assets/flowDiagram-23GEKE2U-DluCBvT4.js +0 -1
- package/web-dist/assets/index-BQtjYMpV.css +0 -1
- package/web-dist/assets/index-CLW1Q49U.js +0 -360
- package/web-dist/assets/railroad-abnf-AHOZXSZD-U_vb4BrX.js +0 -1
- package/web-dist/assets/railroad-ebnf-EBAXGLYW-BIHG7gNU.js +0 -1
- package/web-dist/assets/railroad-peg-LSFZ7HO6-Cpd9r-tB.js +0 -1
- package/web-dist/assets/stateDiagram-v2-6OUMAXLB-JXw9T96l.js +0 -1
- package/web-dist/assets/swimlanesDiagram-G3AALYLV--1Wv7FQQ.js +0 -8
package/README.md
CHANGED
|
@@ -33,7 +33,7 @@ Then run it in any directory — a repo, a jj checkout, or a folder of scripts.
|
|
|
33
33
|
$ cd path/to/acme
|
|
34
34
|
$ npx frizz
|
|
35
35
|
|
|
36
|
-
FRIZZ v0.
|
|
36
|
+
FRIZZ v0.4.0 ready in 4.0s
|
|
37
37
|
|
|
38
38
|
➜ Local: http://127.0.0.1:9393/project/acme/
|
|
39
39
|
➜ Project: acme — path/to/acme
|
|
@@ -122,6 +122,7 @@ $ npx frizz --help
|
|
|
122
122
|
Frizz production launcher
|
|
123
123
|
|
|
124
124
|
Usage: npx frizz [options] [repository]
|
|
125
|
+
npx frizz up serve this repo publicly, board + tunnel together
|
|
125
126
|
|
|
126
127
|
Runs the npm-resolved immutable Frizz package, then opens it in your default browser. Use frizz-dev
|
|
127
128
|
only for a source checkout.
|
|
@@ -133,6 +134,7 @@ Options:
|
|
|
133
134
|
--host [address] serve on a network address instead of loopback (bare --host means 0.0.0.0)
|
|
134
135
|
--allowed-host <name> with --host, also accept this DNS name as the board's address (repeatable)
|
|
135
136
|
--public-origin <url> serve behind a proxy/tunnel reachable at this exact origin
|
|
137
|
+
--link print a fresh single-use access link for the running board
|
|
136
138
|
--debug stream the full event feed to the terminal instead of the compact readout
|
|
137
139
|
-h, --help show this help
|
|
138
140
|
|
|
@@ -140,14 +142,16 @@ Environment:
|
|
|
140
142
|
FRIZZ_HOST same as --host
|
|
141
143
|
FRIZZ_ALLOWED_HOSTS same as --allowed-host, comma separated
|
|
142
144
|
FRIZZ_PUBLIC_ORIGIN same as --public-origin
|
|
145
|
+
FRIZZ_PUBLIC_TOKEN standing secret for HEADLESS boxes that cannot show a QR
|
|
143
146
|
|
|
144
147
|
--host puts a board that can run shell commands as you on the network, and Frizz has no login: anyone
|
|
145
148
|
who reaches the port controls it. Only do this on a network you trust. An IP address works as-is; to
|
|
146
149
|
reach the board by DNS name you must list that name with --allowed-host ("*" allows any).
|
|
147
150
|
|
|
148
151
|
--public-origin serves the board through a tunnel or reverse proxy without putting it on the LAN
|
|
149
|
-
at all — Frizz stays on loopback and the tunnel dials it.
|
|
150
|
-
|
|
152
|
+
at all — Frizz stays on loopback and the tunnel dials it. It prints a SINGLE-USE access link, and
|
|
153
|
+
shows it as a QR so you can scan it from a phone; press L for a fresh one at any time. Scanning it
|
|
154
|
+
trades the code for a session cookie, so the link itself stops working the moment it is used.
|
|
151
155
|
```
|
|
152
156
|
|
|
153
157
|
<br/>
|
|
@@ -226,7 +230,9 @@ authentication at the proxy: with Cloudflare Access, that is the whole of your a
|
|
|
226
230
|
>
|
|
227
231
|
> 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.
|
|
228
232
|
>
|
|
229
|
-
>
|
|
233
|
+
> 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.
|
|
234
|
+
|
|
235
|
+
**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.
|
|
230
236
|
|
|
231
237
|
</details>
|
|
232
238
|
|
|
@@ -271,6 +277,22 @@ Frizz has its own small vocabulary. Most of it names a feature, so this doubles
|
|
|
271
277
|
|
|
272
278
|
<br/>
|
|
273
279
|
|
|
280
|
+
<h2 align="center">Contributing</h2>
|
|
281
|
+
|
|
282
|
+
Issues and pull requests are welcome. Fork the repo, branch off `main`, and open the PR against `main` — CI runs on every pull request.
|
|
283
|
+
|
|
284
|
+
Three checks run in CI, and they need no install:
|
|
285
|
+
|
|
286
|
+
```sh
|
|
287
|
+
$ node --test board/*.test.mjs
|
|
288
|
+
$ node scripts/sync-portable-monitors.mjs --check
|
|
289
|
+
$ node --test monitors/*.test.mjs
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Everything else runs locally. Install with `pnpm install`, typecheck with `pnpm typecheck`, and run the full suite with `pnpm test` — that suite drives real agent CLIs and a real browser, which is why CI does not gate on it. Say in the PR what you ran.
|
|
293
|
+
|
|
294
|
+
<br/>
|
|
295
|
+
|
|
274
296
|
<h2 align="center">License</h2>
|
|
275
297
|
|
|
276
298
|
MIT
|
|
@@ -20623,13 +20623,18 @@ function startClaudeQuery(executablePath, options) {
|
|
|
20623
20623
|
...options.session.kind === "new" ? { sessionId } : { resume: sessionId },
|
|
20624
20624
|
canUseTool,
|
|
20625
20625
|
onElicitation,
|
|
20626
|
-
//
|
|
20627
|
-
//
|
|
20626
|
+
// EVERY scope by default — see ClaudeQueryStartOptions.settingSources. `[]` was correct while this
|
|
20627
|
+
// was a standalone foundation nothing dispatched through; once the broker became the DEFAULT
|
|
20628
20628
|
// Claude transport it silently stopped every worker from seeing the repo's own `CLAUDE.md` /
|
|
20629
20629
|
// `AGENTS.md` and its `.claude/skills`. Measured differential in the frizz repo, one variable:
|
|
20630
20630
|
// this factory answered `NO-CLAUDE-MD` where a plain `claude -p` in the same cwd answered
|
|
20631
|
-
// "# No pull requests — land on local `main`".
|
|
20632
|
-
|
|
20631
|
+
// "# No pull requests — land on local `main`". That fix restored PROJECT + LOCAL and left USER
|
|
20632
|
+
// out, which kept a second, quieter half of the same regression: the tmux transport ran plain
|
|
20633
|
+
// `claude` and got all three scopes, so a broker session was the only place the operator's
|
|
20634
|
+
// `~/.claude/settings.json` stopped applying. Measured 2026-08-16 against the maintainer's real
|
|
20635
|
+
// config, one variable: `--setting-sources=project,local` reported their `env` block UNSET where
|
|
20636
|
+
// `user,project,local` reported it applied.
|
|
20637
|
+
settingSources: options.settingSources ?? ["user", "project", "local"],
|
|
20633
20638
|
// The frizz worker environment (see ClaudeQueryStartOptions): load the local cc-worker plugin so a
|
|
20634
20639
|
// broker session gets the frizz sub-agent profiles + hooks, mount the MCP servers (frizz +
|
|
20635
20640
|
// chrome-devtools), and pre-approve them.
|