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.
Files changed (98) hide show
  1. package/README.md +26 -4
  2. package/dist/claude-agent-broker.js +9 -4
  3. package/dist/dev-child.js +1868 -529
  4. package/dist/frizz.js +814 -234
  5. package/package.json +5 -3
  6. package/runtime/cc-worker/DECISIONS.md +17 -0
  7. package/runtime/cc-worker/bin/frizz-mcp.mjs +159 -174
  8. package/runtime/cc-worker/hooks/session-seed.mjs +1 -1
  9. package/web-dist/assets/{TerminalPane-CTdetDJJ.js → TerminalPane-WcpgmCA-.js} +1 -1
  10. package/web-dist/assets/{abnfDiagram-VRR7QNED-BDKrjCMs.js → abnfDiagram-VRR7QNED-Caecklbz.js} +1 -1
  11. package/web-dist/assets/architecture-TIHT7OUA-BTy2nvYL.js +1 -0
  12. package/web-dist/assets/{architectureDiagram-ZJ3FMSHR-BJebpUUM.js → architectureDiagram-ZJ3FMSHR-BEk0fg8C.js} +1 -1
  13. package/web-dist/assets/{blockDiagram-677ZJIJ3-BNbuk25k.js → blockDiagram-677ZJIJ3-B4yq3xiy.js} +1 -1
  14. package/web-dist/assets/{c4Diagram-LMCZKHZV-lCfyotdU.js → c4Diagram-LMCZKHZV-DaA5NBkz.js} +1 -1
  15. package/web-dist/assets/channel-WghlT4VS.js +1 -0
  16. package/web-dist/assets/{chunk-32BRIVSS-DP72SEkr.js → chunk-32BRIVSS-2XsSs8F_.js} +1 -1
  17. package/web-dist/assets/{chunk-52WLFC77-DxO3gN-p.js → chunk-52WLFC77-DWJfECP3.js} +1 -1
  18. package/web-dist/assets/{chunk-C7G6YPKG-BXFx9Vlr.js → chunk-C7G6YPKG-Bz07eaGt.js} +1 -1
  19. package/web-dist/assets/{chunk-EX3LRPZG-CR3sHpPf.js → chunk-EX3LRPZG-D78kZEMM.js} +1 -1
  20. package/web-dist/assets/{chunk-FWX5IMBZ-CJ8L__oG.js → chunk-FWX5IMBZ-CeCa17CW.js} +2 -2
  21. package/web-dist/assets/{chunk-HOUHSVGY-BCl3JSWr.js → chunk-HOUHSVGY-9H4GFuBa.js} +1 -1
  22. package/web-dist/assets/{chunk-ICXQ74PX-CZxFMci1.js → chunk-ICXQ74PX--Aa17r4X.js} +1 -1
  23. package/web-dist/assets/{chunk-MOJQB5TN-Ck3_47dB.js → chunk-MOJQB5TN-C3vXhsPV.js} +1 -1
  24. package/web-dist/assets/{chunk-OGEWGWER-CVXjES-F.js → chunk-OGEWGWER-G4kZRBkX.js} +1 -1
  25. package/web-dist/assets/{chunk-PUDLZKDR-JjrVgaR7.js → chunk-PUDLZKDR-DWd5kvyM.js} +1 -1
  26. package/web-dist/assets/{chunk-Q4XR5HBZ-C5YMRAQ0.js → chunk-Q4XR5HBZ-u55p39Up.js} +1 -1
  27. package/web-dist/assets/{chunk-V7JOEXUC-DK0mfUHU.js → chunk-V7JOEXUC-BU4YBmV4.js} +1 -1
  28. package/web-dist/assets/{chunk-VAUOI2AC-BKBntpid.js → chunk-VAUOI2AC-VXcmT20q.js} +1 -1
  29. package/web-dist/assets/{chunk-VR4S4FIN-zgE1dG6U.js → chunk-VR4S4FIN-CSjEXLOC.js} +1 -1
  30. package/web-dist/assets/{chunk-WYO6CB5R-CZhh1IBq.js → chunk-WYO6CB5R-4WGk2dpL.js} +1 -1
  31. package/web-dist/assets/{chunk-ZGVPDNZ5-CrNjIEem.js → chunk-ZGVPDNZ5-D5Xl8ZV6.js} +1 -1
  32. package/web-dist/assets/classDiagram-OUVF2IWQ-D21-Dy4r.js +1 -0
  33. package/web-dist/assets/classDiagram-v2-EOCWNBFH-D21-Dy4r.js +1 -0
  34. package/web-dist/assets/{cynefin-VYW2F7L2-Ca_BPfTG.js → cynefin-VYW2F7L2-O6wB49wK.js} +1 -1
  35. package/web-dist/assets/{cynefinDiagram-TSTJHNR4-CsINQf6g.js → cynefinDiagram-TSTJHNR4-pd6ZogNC.js} +1 -1
  36. package/web-dist/assets/{dagre-VKFMJZFB-CE0DYMFy.js → dagre-VKFMJZFB-D8W1S6fw.js} +1 -1
  37. package/web-dist/assets/{diagram-FQU43EPY-BqTduEYE.js → diagram-FQU43EPY-Bm1NOkHd.js} +1 -1
  38. package/web-dist/assets/{diagram-G47NLZAW-Cho718s6.js → diagram-G47NLZAW-CjwnXTIc.js} +1 -1
  39. package/web-dist/assets/{diagram-NH7WQ7WH-D0Z8t9UC.js → diagram-NH7WQ7WH-DH1jZ_mu.js} +1 -1
  40. package/web-dist/assets/{diagram-OA4YK3LP-CBacyeDx.js → diagram-OA4YK3LP-B-s969Q_.js} +1 -1
  41. package/web-dist/assets/{diagram-WEI45ONY-CozpXa4j.js → diagram-WEI45ONY-BU3lv6cL.js} +1 -1
  42. package/web-dist/assets/{ebnfDiagram-CCIWWBDH-ba4NbQQo.js → ebnfDiagram-CCIWWBDH-FsAeyqcC.js} +1 -1
  43. package/web-dist/assets/{erDiagram-Q63AITRT-B3BciOYa.js → erDiagram-Q63AITRT-BRvg5Y9d.js} +1 -1
  44. package/web-dist/assets/eventmodeling-45OFAUF4-RhX2WA7g.js +1 -0
  45. package/web-dist/assets/flowDiagram-23GEKE2U-C7N14tdV.js +1 -0
  46. package/web-dist/assets/{ganttDiagram-NO4QXBWP-lPmrRit4.js → ganttDiagram-NO4QXBWP-eATKNh9U.js} +1 -1
  47. package/web-dist/assets/{gitGraph-TEB2WS4Q-BjyclOq0.js → gitGraph-TEB2WS4Q-CNYqsua8.js} +1 -1
  48. package/web-dist/assets/{gitGraphDiagram-IHSO6WYX-pzeb4Yrw.js → gitGraphDiagram-IHSO6WYX-BUxgluf8.js} +1 -1
  49. package/web-dist/assets/index-BFuReKr0.js +368 -0
  50. package/web-dist/assets/index-BH9U3Zlg.css +1 -0
  51. package/web-dist/assets/{info-DKCQHKI2-Bwycegvf.js → info-DKCQHKI2-HsVLwo1c.js} +1 -1
  52. package/web-dist/assets/{infoDiagram-FWYZ7A6U-BCvRGj_5.js → infoDiagram-FWYZ7A6U-D7U65xDp.js} +1 -1
  53. package/web-dist/assets/{ishikawaDiagram-FXEZZL3T-Ofw1RMj3.js → ishikawaDiagram-FXEZZL3T-BsfIYXjX.js} +1 -1
  54. package/web-dist/assets/{journeyDiagram-5HDEW3XC-C5ROwFio.js → journeyDiagram-5HDEW3XC-CpkREKol.js} +1 -1
  55. package/web-dist/assets/{kanban-definition-HUTT4EX6-YLPLkpeT.js → kanban-definition-HUTT4EX6-2M3KW6Gw.js} +1 -1
  56. package/web-dist/assets/{line-KtkNqRgI.js → line-Cs7zWs24.js} +1 -1
  57. package/web-dist/assets/{mermaid-parser.core-D_FfqBe7.js → mermaid-parser.core-Dw-IECV5.js} +3 -3
  58. package/web-dist/assets/{mermaid.core-Ffv8anVf.js → mermaid.core-C1lrddjT.js} +3 -3
  59. package/web-dist/assets/{mindmap-definition-LN4V7U3C-B2jj4vfm.js → mindmap-definition-LN4V7U3C-gVS5On1g.js} +1 -1
  60. package/web-dist/assets/{packet-7NZHBO7P-BjmWHwra.js → packet-7NZHBO7P-Tti1-UWA.js} +1 -1
  61. package/web-dist/assets/{pegDiagram-2B236MQR-Dq3iJDyq.js → pegDiagram-2B236MQR-DE5in93G.js} +1 -1
  62. package/web-dist/assets/{pie-RZYD4A2V-jBbH1lv9.js → pie-RZYD4A2V-DfLNkvHl.js} +1 -1
  63. package/web-dist/assets/{pieDiagram-ENE6RG2P-C3ETW9lq.js → pieDiagram-ENE6RG2P-DcqSqJqb.js} +1 -1
  64. package/web-dist/assets/{quadrantDiagram-ABIIQ3AL-DItSmme7.js → quadrantDiagram-ABIIQ3AL-DR-nRPgN.js} +1 -1
  65. package/web-dist/assets/{radar-I7S5WNFK-6ey6crgP.js → radar-I7S5WNFK-DGLDBfPd.js} +1 -1
  66. package/web-dist/assets/{railroad-3IZDKUUU-Cii-Mn0E.js → railroad-3IZDKUUU-BaiGEHlV.js} +1 -1
  67. package/web-dist/assets/railroad-abnf-AHOZXSZD-BCeoIOWA.js +1 -0
  68. package/web-dist/assets/railroad-ebnf-EBAXGLYW-lZpXJLD8.js +1 -0
  69. package/web-dist/assets/railroad-peg-LSFZ7HO6-CaUBrHTL.js +1 -0
  70. package/web-dist/assets/{railroadDiagram-RFXS5EU6-M363ils_.js → railroadDiagram-RFXS5EU6-82aEev5_.js} +1 -1
  71. package/web-dist/assets/{requirementDiagram-TGXJPOKE-CTs2_V6T.js → requirementDiagram-TGXJPOKE-Bs8opBRj.js} +1 -1
  72. package/web-dist/assets/{sankeyDiagram-HTMAVEWB-QTLLcDPD.js → sankeyDiagram-HTMAVEWB-gOb3FIr8.js} +1 -1
  73. package/web-dist/assets/{sequenceDiagram-DBY2YBRQ-Bxw9Tr6e.js → sequenceDiagram-DBY2YBRQ-6DvjtRHR.js} +1 -1
  74. package/web-dist/assets/{stateDiagram-2N3HPSRC-BecB6roG.js → stateDiagram-2N3HPSRC-Cg2LWdUf.js} +1 -1
  75. package/web-dist/assets/stateDiagram-v2-6OUMAXLB-Digf9CWZ.js +1 -0
  76. package/web-dist/assets/{swimlanes-5IMT3BWC-COiYgS0w.js → swimlanes-5IMT3BWC-BDpPdYEl.js} +1 -1
  77. package/web-dist/assets/swimlanesDiagram-G3AALYLV-DEZRDWHA.js +8 -0
  78. package/web-dist/assets/{timeline-definition-FHXFAJF6-Ci22coeH.js → timeline-definition-FHXFAJF6-BSjfeutv.js} +1 -1
  79. package/web-dist/assets/{treeView-QDETBFTQ-4DW35czh.js → treeView-QDETBFTQ-DwgPy6V3.js} +1 -1
  80. package/web-dist/assets/{treemap-6X3UGDF4-Dq_-Z6-Y.js → treemap-6X3UGDF4-7eiifTKW.js} +1 -1
  81. package/web-dist/assets/{vennDiagram-L72KCM5P-CHQSIEYq.js → vennDiagram-L72KCM5P-9u4AhcnV.js} +1 -1
  82. package/web-dist/assets/{wardley-OPB4EBWU-Bwlh7HCY.js → wardley-OPB4EBWU-DqNb5x9U.js} +1 -1
  83. package/web-dist/assets/{wardleyDiagram-EHGQE667-DctjuPYn.js → wardleyDiagram-EHGQE667-DlJ7h3vg.js} +1 -1
  84. package/web-dist/assets/{xychartDiagram-FW5EYKEG-ZoIGosv8.js → xychartDiagram-FW5EYKEG-B_9ukg2S.js} +1 -1
  85. package/web-dist/index.html +2 -2
  86. package/web-dist/assets/architecture-TIHT7OUA-ChUMo004.js +0 -1
  87. package/web-dist/assets/channel-pr7r6raB.js +0 -1
  88. package/web-dist/assets/classDiagram-OUVF2IWQ-CvGbPMn_.js +0 -1
  89. package/web-dist/assets/classDiagram-v2-EOCWNBFH-CvGbPMn_.js +0 -1
  90. package/web-dist/assets/eventmodeling-45OFAUF4-DKmyo-jd.js +0 -1
  91. package/web-dist/assets/flowDiagram-23GEKE2U-DluCBvT4.js +0 -1
  92. package/web-dist/assets/index-BQtjYMpV.css +0 -1
  93. package/web-dist/assets/index-CLW1Q49U.js +0 -360
  94. package/web-dist/assets/railroad-abnf-AHOZXSZD-U_vb4BrX.js +0 -1
  95. package/web-dist/assets/railroad-ebnf-EBAXGLYW-BIHG7gNU.js +0 -1
  96. package/web-dist/assets/railroad-peg-LSFZ7HO6-Cpd9r-tB.js +0 -1
  97. package/web-dist/assets/stateDiagram-v2-6OUMAXLB-JXw9T96l.js +0 -1
  98. 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.3.0 ready in 4.0s
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. Frizz still has no login, so require
150
- authentication at the proxy: with Cloudflare Access, that is the whole of your access control.
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
- > **This is the part that matters: Frizz has no login, so whatever 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.
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
- // PROJECT + LOCAL by default — see ClaudeQueryStartOptions.settingSources. `[]` was correct while
20627
- // this was a standalone foundation nothing dispatched through; once the broker became the DEFAULT
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`". `"user"` stays OUT on purpose (see the field docs).
20632
- settingSources: options.settingSources ?? ["project", "local"],
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.