frizz 0.3.0 → 0.4.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 +9 -4
  2. package/dist/claude-agent-broker.js +9 -4
  3. package/dist/dev-child.js +1783 -527
  4. package/dist/frizz.js +709 -233
  5. package/package.json +5 -3
  6. package/runtime/cc-worker/DECISIONS.md +17 -0
  7. package/runtime/cc-worker/bin/frizz-mcp.mjs +151 -174
  8. package/runtime/cc-worker/hooks/session-seed.mjs +1 -1
  9. package/web-dist/assets/{TerminalPane-CTdetDJJ.js → TerminalPane-sd3XXjx5.js} +1 -1
  10. package/web-dist/assets/{abnfDiagram-VRR7QNED-BDKrjCMs.js → abnfDiagram-VRR7QNED-Bry_FIqg.js} +1 -1
  11. package/web-dist/assets/architecture-TIHT7OUA-CoMJQ5Ya.js +1 -0
  12. package/web-dist/assets/{architectureDiagram-ZJ3FMSHR-BJebpUUM.js → architectureDiagram-ZJ3FMSHR-Baok4OeI.js} +1 -1
  13. package/web-dist/assets/{blockDiagram-677ZJIJ3-BNbuk25k.js → blockDiagram-677ZJIJ3-BgHIO9lI.js} +1 -1
  14. package/web-dist/assets/{c4Diagram-LMCZKHZV-lCfyotdU.js → c4Diagram-LMCZKHZV-rfj9Z17Z.js} +1 -1
  15. package/web-dist/assets/channel-D6uS1y7I.js +1 -0
  16. package/web-dist/assets/{chunk-32BRIVSS-DP72SEkr.js → chunk-32BRIVSS-BwaHfK1Y.js} +1 -1
  17. package/web-dist/assets/{chunk-52WLFC77-DxO3gN-p.js → chunk-52WLFC77-BmdQDZOA.js} +1 -1
  18. package/web-dist/assets/{chunk-C7G6YPKG-BXFx9Vlr.js → chunk-C7G6YPKG-ByQFjoZe.js} +1 -1
  19. package/web-dist/assets/{chunk-EX3LRPZG-CR3sHpPf.js → chunk-EX3LRPZG-DQFudBKr.js} +1 -1
  20. package/web-dist/assets/{chunk-FWX5IMBZ-CJ8L__oG.js → chunk-FWX5IMBZ-OW9qEPiq.js} +2 -2
  21. package/web-dist/assets/{chunk-HOUHSVGY-BCl3JSWr.js → chunk-HOUHSVGY-BdKLF8nO.js} +1 -1
  22. package/web-dist/assets/{chunk-ICXQ74PX-CZxFMci1.js → chunk-ICXQ74PX-C1roqKR1.js} +1 -1
  23. package/web-dist/assets/{chunk-MOJQB5TN-Ck3_47dB.js → chunk-MOJQB5TN-Cx0u1ZDK.js} +1 -1
  24. package/web-dist/assets/{chunk-OGEWGWER-CVXjES-F.js → chunk-OGEWGWER-rxv9xtNR.js} +1 -1
  25. package/web-dist/assets/{chunk-PUDLZKDR-JjrVgaR7.js → chunk-PUDLZKDR-BXWPPPPi.js} +1 -1
  26. package/web-dist/assets/{chunk-Q4XR5HBZ-C5YMRAQ0.js → chunk-Q4XR5HBZ-CpqbD101.js} +1 -1
  27. package/web-dist/assets/{chunk-V7JOEXUC-DK0mfUHU.js → chunk-V7JOEXUC-CP8_3qVt.js} +1 -1
  28. package/web-dist/assets/{chunk-VAUOI2AC-BKBntpid.js → chunk-VAUOI2AC-Dl7xahpk.js} +1 -1
  29. package/web-dist/assets/{chunk-VR4S4FIN-zgE1dG6U.js → chunk-VR4S4FIN-BKtMX64l.js} +1 -1
  30. package/web-dist/assets/{chunk-WYO6CB5R-CZhh1IBq.js → chunk-WYO6CB5R-DmLOdJcu.js} +1 -1
  31. package/web-dist/assets/{chunk-ZGVPDNZ5-CrNjIEem.js → chunk-ZGVPDNZ5-5wN7eXvS.js} +1 -1
  32. package/web-dist/assets/classDiagram-OUVF2IWQ-BW5YiBf4.js +1 -0
  33. package/web-dist/assets/classDiagram-v2-EOCWNBFH-BW5YiBf4.js +1 -0
  34. package/web-dist/assets/{cynefin-VYW2F7L2-Ca_BPfTG.js → cynefin-VYW2F7L2-DUYahBXb.js} +1 -1
  35. package/web-dist/assets/{cynefinDiagram-TSTJHNR4-CsINQf6g.js → cynefinDiagram-TSTJHNR4-Rm0i30nE.js} +1 -1
  36. package/web-dist/assets/{dagre-VKFMJZFB-CE0DYMFy.js → dagre-VKFMJZFB-3uhsB-W3.js} +1 -1
  37. package/web-dist/assets/{diagram-FQU43EPY-BqTduEYE.js → diagram-FQU43EPY-BUvflNRQ.js} +1 -1
  38. package/web-dist/assets/{diagram-G47NLZAW-Cho718s6.js → diagram-G47NLZAW-DUluIZel.js} +1 -1
  39. package/web-dist/assets/{diagram-NH7WQ7WH-D0Z8t9UC.js → diagram-NH7WQ7WH-BBrwsbed.js} +1 -1
  40. package/web-dist/assets/{diagram-OA4YK3LP-CBacyeDx.js → diagram-OA4YK3LP-DWnTQBw4.js} +1 -1
  41. package/web-dist/assets/{diagram-WEI45ONY-CozpXa4j.js → diagram-WEI45ONY-BjEavoC0.js} +1 -1
  42. package/web-dist/assets/{ebnfDiagram-CCIWWBDH-ba4NbQQo.js → ebnfDiagram-CCIWWBDH-CW4xZAZH.js} +1 -1
  43. package/web-dist/assets/{erDiagram-Q63AITRT-B3BciOYa.js → erDiagram-Q63AITRT-BemQ1R4B.js} +1 -1
  44. package/web-dist/assets/eventmodeling-45OFAUF4-BF5KB7ja.js +1 -0
  45. package/web-dist/assets/flowDiagram-23GEKE2U-BYo4Eytx.js +1 -0
  46. package/web-dist/assets/{ganttDiagram-NO4QXBWP-lPmrRit4.js → ganttDiagram-NO4QXBWP-lDdG5I_z.js} +1 -1
  47. package/web-dist/assets/{gitGraph-TEB2WS4Q-BjyclOq0.js → gitGraph-TEB2WS4Q-Bw87a_Se.js} +1 -1
  48. package/web-dist/assets/{gitGraphDiagram-IHSO6WYX-pzeb4Yrw.js → gitGraphDiagram-IHSO6WYX-B762r0yi.js} +1 -1
  49. package/web-dist/assets/index-B3QArXu2.css +1 -0
  50. package/web-dist/assets/index-CAapfhMv.js +365 -0
  51. package/web-dist/assets/{info-DKCQHKI2-Bwycegvf.js → info-DKCQHKI2-DGOv6Gx0.js} +1 -1
  52. package/web-dist/assets/{infoDiagram-FWYZ7A6U-BCvRGj_5.js → infoDiagram-FWYZ7A6U-DL92kAzf.js} +1 -1
  53. package/web-dist/assets/{ishikawaDiagram-FXEZZL3T-Ofw1RMj3.js → ishikawaDiagram-FXEZZL3T-CFYd4OtU.js} +1 -1
  54. package/web-dist/assets/{journeyDiagram-5HDEW3XC-C5ROwFio.js → journeyDiagram-5HDEW3XC-QHuYL5zq.js} +1 -1
  55. package/web-dist/assets/{kanban-definition-HUTT4EX6-YLPLkpeT.js → kanban-definition-HUTT4EX6-DwmMluQ8.js} +1 -1
  56. package/web-dist/assets/{line-KtkNqRgI.js → line-Je_PFFHm.js} +1 -1
  57. package/web-dist/assets/{mermaid-parser.core-D_FfqBe7.js → mermaid-parser.core-BeiGWsn3.js} +3 -3
  58. package/web-dist/assets/{mermaid.core-Ffv8anVf.js → mermaid.core-BP8JrW48.js} +3 -3
  59. package/web-dist/assets/{mindmap-definition-LN4V7U3C-B2jj4vfm.js → mindmap-definition-LN4V7U3C-BsmjCIrM.js} +1 -1
  60. package/web-dist/assets/{packet-7NZHBO7P-BjmWHwra.js → packet-7NZHBO7P-D6ekYYGJ.js} +1 -1
  61. package/web-dist/assets/{pegDiagram-2B236MQR-Dq3iJDyq.js → pegDiagram-2B236MQR-CQc2Kt0u.js} +1 -1
  62. package/web-dist/assets/{pie-RZYD4A2V-jBbH1lv9.js → pie-RZYD4A2V-C_45fO8J.js} +1 -1
  63. package/web-dist/assets/{pieDiagram-ENE6RG2P-C3ETW9lq.js → pieDiagram-ENE6RG2P-Dg5z6iWt.js} +1 -1
  64. package/web-dist/assets/{quadrantDiagram-ABIIQ3AL-DItSmme7.js → quadrantDiagram-ABIIQ3AL-c7gZxuCX.js} +1 -1
  65. package/web-dist/assets/{radar-I7S5WNFK-6ey6crgP.js → radar-I7S5WNFK-D80XNJQq.js} +1 -1
  66. package/web-dist/assets/{railroad-3IZDKUUU-Cii-Mn0E.js → railroad-3IZDKUUU-Brz7eZQ0.js} +1 -1
  67. package/web-dist/assets/railroad-abnf-AHOZXSZD-D44pcGhJ.js +1 -0
  68. package/web-dist/assets/railroad-ebnf-EBAXGLYW-CiWVH5SP.js +1 -0
  69. package/web-dist/assets/railroad-peg-LSFZ7HO6-Cy1B6-pN.js +1 -0
  70. package/web-dist/assets/{railroadDiagram-RFXS5EU6-M363ils_.js → railroadDiagram-RFXS5EU6-Db9K7bty.js} +1 -1
  71. package/web-dist/assets/{requirementDiagram-TGXJPOKE-CTs2_V6T.js → requirementDiagram-TGXJPOKE-m1ipMrDe.js} +1 -1
  72. package/web-dist/assets/{sankeyDiagram-HTMAVEWB-QTLLcDPD.js → sankeyDiagram-HTMAVEWB-4Zz9ry0k.js} +1 -1
  73. package/web-dist/assets/{sequenceDiagram-DBY2YBRQ-Bxw9Tr6e.js → sequenceDiagram-DBY2YBRQ-CZeGHw4X.js} +1 -1
  74. package/web-dist/assets/{stateDiagram-2N3HPSRC-BecB6roG.js → stateDiagram-2N3HPSRC-rLUVs1Pg.js} +1 -1
  75. package/web-dist/assets/stateDiagram-v2-6OUMAXLB-w7QDFEvx.js +1 -0
  76. package/web-dist/assets/{swimlanes-5IMT3BWC-COiYgS0w.js → swimlanes-5IMT3BWC-BAeBdscz.js} +1 -1
  77. package/web-dist/assets/swimlanesDiagram-G3AALYLV-UhdgWpNZ.js +8 -0
  78. package/web-dist/assets/{timeline-definition-FHXFAJF6-Ci22coeH.js → timeline-definition-FHXFAJF6-DL0eWMF-.js} +1 -1
  79. package/web-dist/assets/{treeView-QDETBFTQ-4DW35czh.js → treeView-QDETBFTQ-gEtzLMA8.js} +1 -1
  80. package/web-dist/assets/{treemap-6X3UGDF4-Dq_-Z6-Y.js → treemap-6X3UGDF4-CCym1Gz6.js} +1 -1
  81. package/web-dist/assets/{vennDiagram-L72KCM5P-CHQSIEYq.js → vennDiagram-L72KCM5P-cF97-nb5.js} +1 -1
  82. package/web-dist/assets/{wardley-OPB4EBWU-Bwlh7HCY.js → wardley-OPB4EBWU-DQJHCGbM.js} +1 -1
  83. package/web-dist/assets/{wardleyDiagram-EHGQE667-DctjuPYn.js → wardleyDiagram-EHGQE667-0CnHzXLX.js} +1 -1
  84. package/web-dist/assets/{xychartDiagram-FW5EYKEG-ZoIGosv8.js → xychartDiagram-FW5EYKEG-9YDOp4m5.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
@@ -133,6 +133,7 @@ Options:
133
133
  --host [address] serve on a network address instead of loopback (bare --host means 0.0.0.0)
134
134
  --allowed-host <name> with --host, also accept this DNS name as the board's address (repeatable)
135
135
  --public-origin <url> serve behind a proxy/tunnel reachable at this exact origin
136
+ --link print a fresh single-use access link for the running board
136
137
  --debug stream the full event feed to the terminal instead of the compact readout
137
138
  -h, --help show this help
138
139
 
@@ -140,14 +141,16 @@ Environment:
140
141
  FRIZZ_HOST same as --host
141
142
  FRIZZ_ALLOWED_HOSTS same as --allowed-host, comma separated
142
143
  FRIZZ_PUBLIC_ORIGIN same as --public-origin
144
+ FRIZZ_PUBLIC_TOKEN standing secret for HEADLESS boxes that cannot show a QR
143
145
 
144
146
  --host puts a board that can run shell commands as you on the network, and Frizz has no login: anyone
145
147
  who reaches the port controls it. Only do this on a network you trust. An IP address works as-is; to
146
148
  reach the board by DNS name you must list that name with --allowed-host ("*" allows any).
147
149
 
148
150
  --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.
151
+ at all — Frizz stays on loopback and the tunnel dials it. It prints a SINGLE-USE access link, and
152
+ shows it as a QR so you can scan it from a phone; press L for a fresh one at any time. Scanning it
153
+ trades the code for a session cookie, so the link itself stops working the moment it is used.
151
154
  ```
152
155
 
153
156
  <br/>
@@ -226,7 +229,9 @@ authentication at the proxy: with Cloudflare Access, that is the whole of your a
226
229
  >
227
230
  > 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
231
  >
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.
232
+ > 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.
233
+
234
+ **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
235
 
231
236
  </details>
232
237
 
@@ -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.