mulmoterminal 2.1.0 → 2.1.1

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 (103) hide show
  1. package/README.md +23 -8
  2. package/bin/mulmoterminal.js +26 -7
  3. package/common/voiceInputStatus.ts +21 -0
  4. package/dist/assets/{abnfDiagram-VRR7QNED-RjiYivmv-BMVn5P4x.js → abnfDiagram-VRR7QNED-RjiYivmv-1RrSDjxg.js} +1 -1
  5. package/dist/assets/architecture-TIHT7OUA-0NsD2xW1-CtE1YID5.js +1 -0
  6. package/dist/assets/{architectureDiagram-ZJ3FMSHR-3nWA91tG-BaVwq5YO.js → architectureDiagram-ZJ3FMSHR-3nWA91tG-sTMTrNOq.js} +1 -1
  7. package/dist/assets/{blockDiagram-677ZJIJ3-BPuAJQRW-O8HvKllF.js → blockDiagram-677ZJIJ3-BPuAJQRW-CQmbTR0O.js} +1 -1
  8. package/dist/assets/{c4Diagram-LMCZKHZV-C0LAqQso-qV_LVJW3.js → c4Diagram-LMCZKHZV-C0LAqQso-kjKqpuxO.js} +1 -1
  9. package/dist/assets/channel-7wUqSdoX-i8mXF_QX.js +1 -0
  10. package/dist/assets/{chunk-32BRIVSS-BRrYpgtb-B9twQFRU.js → chunk-32BRIVSS-BRrYpgtb-YnuI_kVF.js} +1 -1
  11. package/dist/assets/{chunk-52WLFC77-BJ-ss3Xr-OC_lubzj.js → chunk-52WLFC77-BJ-ss3Xr-Dv-_qNms.js} +1 -1
  12. package/dist/assets/{chunk-C7G6YPKG-BZEucKEL-mCVH59ut.js → chunk-C7G6YPKG-BZEucKEL-VvGb94ad.js} +1 -1
  13. package/dist/assets/{chunk-EX3LRPZG-DLS6FBN1-CL8lofeg.js → chunk-EX3LRPZG-DLS6FBN1-Cv9JdwrA.js} +1 -1
  14. package/dist/assets/{chunk-FWX5IMBZ-DHLSFw1H-BcVi6QV6.js → chunk-FWX5IMBZ-DHLSFw1H-CFK4Xl3Y.js} +2 -2
  15. package/dist/assets/{chunk-HOUHSVGY-Bhlt8hXJ-D3M0sdaj.js → chunk-HOUHSVGY-Bhlt8hXJ-l9dGXTcV.js} +1 -1
  16. package/dist/assets/{chunk-ICXQ74PX-DwgHBX_g-9pz8KjdB.js → chunk-ICXQ74PX-DwgHBX_g-oBhC9ghH.js} +1 -1
  17. package/dist/assets/{chunk-MOJQB5TN-CMZRaeqt-DsiY753w.js → chunk-MOJQB5TN-CMZRaeqt-CKo27qok.js} +1 -1
  18. package/dist/assets/{chunk-OGEWGWER-8Qy4a8b5-DzD8vBv9.js → chunk-OGEWGWER-8Qy4a8b5-Di7gzOY_.js} +1 -1
  19. package/dist/assets/{chunk-PUDLZKDR-DcrWQRYh-B3EqHnC7.js → chunk-PUDLZKDR-DcrWQRYh-DuMYBLYy.js} +1 -1
  20. package/dist/assets/{chunk-Q4XR5HBZ-ZXVGkG8Z-DAzhqKqQ.js → chunk-Q4XR5HBZ-ZXVGkG8Z-BH8ZxP7u.js} +1 -1
  21. package/dist/assets/{chunk-V7JOEXUC-DmGdheTX-sWPxsoge.js → chunk-V7JOEXUC-DmGdheTX-e5Lem5jk.js} +1 -1
  22. package/dist/assets/{chunk-VAUOI2AC-CS9QJ4yz-C6T0-Q0n.js → chunk-VAUOI2AC-CS9QJ4yz-CfgcnwuB.js} +1 -1
  23. package/dist/assets/{chunk-VR4S4FIN-C6a91eNY-CzCW244T.js → chunk-VR4S4FIN-C6a91eNY-BcBE3OXA.js} +1 -1
  24. package/dist/assets/{chunk-WYO6CB5R-BlzOfotS-BRhqiyoJ.js → chunk-WYO6CB5R-BlzOfotS-BRwSb4rl.js} +1 -1
  25. package/dist/assets/{chunk-ZGVPDNZ5-BYwxNFTK-2uN_ofIP.js → chunk-ZGVPDNZ5-BYwxNFTK-yy_t_DUF.js} +1 -1
  26. package/dist/assets/classDiagram-OUVF2IWQ-BYlRi6YQ-BM_zLSMQ.js +1 -0
  27. package/dist/assets/classDiagram-v2-EOCWNBFH-BCHaYHxj-BM_zLSMQ.js +1 -0
  28. package/dist/assets/cynefin-VYW2F7L2-CGYr2F6h-BBb6pP0M.js +1 -0
  29. package/dist/assets/{cynefinDiagram-TSTJHNR4-DHA9iPo--rvLMXkNB.js → cynefinDiagram-TSTJHNR4-DHA9iPo--CEHib9RV.js} +1 -1
  30. package/dist/assets/{dagre-VKFMJZFB--oJKqXBZ-CGanW7aY.js → dagre-VKFMJZFB--oJKqXBZ-DufbQ1ld.js} +1 -1
  31. package/dist/assets/{diagram-FQU43EPY-CcJCB9bG-BcrxMiAD.js → diagram-FQU43EPY-CcJCB9bG-Bcp75QDM.js} +1 -1
  32. package/dist/assets/{diagram-G47NLZAW-C_o-WGG1-4PTH1NOO.js → diagram-G47NLZAW-C_o-WGG1-C_2FVIX_.js} +1 -1
  33. package/dist/assets/{diagram-NH7WQ7WH-CXJCYvY--DLVaK2vZ.js → diagram-NH7WQ7WH-CXJCYvY--B1kVCM4I.js} +1 -1
  34. package/dist/assets/{diagram-OA4YK3LP-BMzeJ87A-C0axta9a.js → diagram-OA4YK3LP-BMzeJ87A-Bd1BRg0M.js} +1 -1
  35. package/dist/assets/{diagram-WEI45ONY-D_93NKqo-3zfR6xo1.js → diagram-WEI45ONY-D_93NKqo-VJzlhYeh.js} +1 -1
  36. package/dist/assets/{ebnfDiagram-CCIWWBDH-CVai1Ii9-Bfd3ExQu.js → ebnfDiagram-CCIWWBDH-CVai1Ii9-BXziXSdO.js} +1 -1
  37. package/dist/assets/{erDiagram-Q63AITRT-CiABnA0s-BGq_5dj0.js → erDiagram-Q63AITRT-CiABnA0s-DzjaMys9.js} +1 -1
  38. package/dist/assets/eventmodeling-45OFAUF4-CWmqhm3a-C1_24lZu.js +1 -0
  39. package/dist/assets/flowDiagram-23GEKE2U-DKSB5AiY-DQrHefx7.js +1 -0
  40. package/dist/assets/{ganttDiagram-NO4QXBWP-DQZvdFo1-z8Owlyg6.js → ganttDiagram-NO4QXBWP-DQZvdFo1-DqlM0R3b.js} +1 -1
  41. package/dist/assets/gitGraph-TEB2WS4Q-BR9qPwdN-DSTb91Xn.js +1 -0
  42. package/dist/assets/{gitGraphDiagram-IHSO6WYX-C2ovBouh-BA-6Yy_K.js → gitGraphDiagram-IHSO6WYX-C2ovBouh-Dy5WrrGR.js} +1 -1
  43. package/dist/assets/{index-DbKckN7Z.js → index-D4LB9YoW.js} +168 -168
  44. package/dist/assets/info-DKCQHKI2-Dplx5kMp-Cdy5Xn2F.js +1 -0
  45. package/dist/assets/{infoDiagram-FWYZ7A6U-7UnoB5AP-BW36KQ8e.js → infoDiagram-FWYZ7A6U-7UnoB5AP-ByceYPA5.js} +1 -1
  46. package/dist/assets/{ishikawaDiagram-FXEZZL3T-ByUDM_N2-DrQDG1os.js → ishikawaDiagram-FXEZZL3T-ByUDM_N2-BZEvgyxt.js} +1 -1
  47. package/dist/assets/{journeyDiagram-5HDEW3XC-c5xIah9o-CtJ0D_mQ.js → journeyDiagram-5HDEW3XC-c5xIah9o-D3IMe-Kx.js} +1 -1
  48. package/dist/assets/{kanban-definition-HUTT4EX6-Cnt6loYD-bm-RqJor.js → kanban-definition-HUTT4EX6-Cnt6loYD-cjfYxgHr.js} +1 -1
  49. package/dist/assets/{lib-BmwIEKvb.js → lib-BP5ftgj4.js} +1 -1
  50. package/dist/assets/{line-D7ziSjKi-DrYnqDhF.js → line-D7ziSjKi-C07Dlbdw.js} +1 -1
  51. package/dist/assets/{marp-gEV1mQM4.js → marp-ytjNgY2U.js} +1 -1
  52. package/dist/assets/{mermaid-parser.core-DxEa8E3F-iymJ5XTw.js → mermaid-parser.core-DxEa8E3F-BAh0ySn4.js} +2 -2
  53. package/dist/assets/{mermaid.core-V0OYwIz3-CEFC0tc3.js → mermaid.core-V0OYwIz3-CIFgdt3N.js} +3 -3
  54. package/dist/assets/{mindmap-definition-LN4V7U3C-CexN3O6L-maxHe_oT.js → mindmap-definition-LN4V7U3C-CexN3O6L-1SEo71tq.js} +1 -1
  55. package/dist/assets/packet-7NZHBO7P-CQI3flND-BFv5gKuv.js +1 -0
  56. package/dist/assets/{pegDiagram-2B236MQR-BiM4G0cW-CrLCH9dK.js → pegDiagram-2B236MQR-BiM4G0cW-DkewOOUw.js} +1 -1
  57. package/dist/assets/pie-RZYD4A2V-CnmKE2Wa-9hvyyDzu.js +1 -0
  58. package/dist/assets/{pieDiagram-ENE6RG2P-B_fBBS-2-DVbko3rP.js → pieDiagram-ENE6RG2P-B_fBBS-2-DdJe9KqM.js} +1 -1
  59. package/dist/assets/{quadrantDiagram-ABIIQ3AL-BigGVxCR-DUwLLJXe.js → quadrantDiagram-ABIIQ3AL-BigGVxCR-C8kNdasc.js} +1 -1
  60. package/dist/assets/radar-I7S5WNFK-us6x-Z9R-DBeFDuLF.js +1 -0
  61. package/dist/assets/railroad-3IZDKUUU-BKdz6pdN-FnTYQEAW.js +1 -0
  62. package/dist/assets/railroad-abnf-AHOZXSZD-m_CSSIfd-Bo4xQewA.js +1 -0
  63. package/dist/assets/railroad-ebnf-EBAXGLYW-Nu3nAG7C-YFFxMVbA.js +1 -0
  64. package/dist/assets/railroad-peg-LSFZ7HO6--Y3mD4R_-DMzqIAqS.js +1 -0
  65. package/dist/assets/{railroadDiagram-RFXS5EU6--lNIlG64-t4pt5DRk.js → railroadDiagram-RFXS5EU6--lNIlG64-DawLoSCW.js} +1 -1
  66. package/dist/assets/{requirementDiagram-TGXJPOKE-D-B0Y5Wu-DJVGeSnt.js → requirementDiagram-TGXJPOKE-D-B0Y5Wu-BMFbGAmA.js} +1 -1
  67. package/dist/assets/{sankeyDiagram-HTMAVEWB-DlutaXDv-2m-PGq5V.js → sankeyDiagram-HTMAVEWB-DlutaXDv-Dwt5PZ2I.js} +1 -1
  68. package/dist/assets/{sequenceDiagram-DBY2YBRQ-BOLgtggH-DSwO6_CW.js → sequenceDiagram-DBY2YBRQ-BOLgtggH-yb89czG2.js} +1 -1
  69. package/dist/assets/{stateDiagram-2N3HPSRC-jf_dXUEU-DuBsukdi.js → stateDiagram-2N3HPSRC-jf_dXUEU-kqvWM0jR.js} +1 -1
  70. package/dist/assets/stateDiagram-v2-6OUMAXLB-CuzgCL2v-QnrqYDdZ.js +1 -0
  71. package/dist/assets/{swimlanes-5IMT3BWC-CYjtALQH-BwT2NtP8.js → swimlanes-5IMT3BWC-CYjtALQH-CiVWAsob.js} +1 -1
  72. package/dist/assets/swimlanesDiagram-G3AALYLV-3bmSBtKs-CE7hrF_H.js +8 -0
  73. package/dist/assets/{timeline-definition-FHXFAJF6-DYJ4oUm8-B7uglxWU.js → timeline-definition-FHXFAJF6-DYJ4oUm8-DrqIflbo.js} +1 -1
  74. package/dist/assets/treeView-QDETBFTQ-D27HWG6Q-DaEUFpbs.js +1 -0
  75. package/dist/assets/treemap-6X3UGDF4-CmGIU3H5-Cb7ZUpob.js +1 -0
  76. package/dist/assets/{vennDiagram-L72KCM5P-CdKAHoek-Bi97b0Q1.js → vennDiagram-L72KCM5P-CdKAHoek-COepU8y_.js} +1 -1
  77. package/dist/assets/wardley-OPB4EBWU-CbHWsb2k-BON96qJv.js +1 -0
  78. package/dist/assets/{wardleyDiagram-EHGQE667-BF6c4_CW-DuE3v_zR.js → wardleyDiagram-EHGQE667-BF6c4_CW-Z2AgrgfV.js} +1 -1
  79. package/dist/assets/{xychartDiagram-FW5EYKEG-CGiKngj7-B0CJGTzS.js → xychartDiagram-FW5EYKEG-CGiKngj7-ChC7g8sJ.js} +1 -1
  80. package/dist/index.html +1 -1
  81. package/package.json +1 -1
  82. package/server/backends/whisper.ts +3 -5
  83. package/dist/assets/architecture-TIHT7OUA-0NsD2xW1-JfeahpZ_.js +0 -1
  84. package/dist/assets/channel-7wUqSdoX-C4JGl6VC.js +0 -1
  85. package/dist/assets/classDiagram-OUVF2IWQ-BYlRi6YQ-DtJISQUb.js +0 -1
  86. package/dist/assets/classDiagram-v2-EOCWNBFH-BCHaYHxj-DtJISQUb.js +0 -1
  87. package/dist/assets/cynefin-VYW2F7L2-CGYr2F6h-DB6705af.js +0 -1
  88. package/dist/assets/eventmodeling-45OFAUF4-CWmqhm3a-Bl19zj9_.js +0 -1
  89. package/dist/assets/flowDiagram-23GEKE2U-DKSB5AiY-DdIGCbvn.js +0 -1
  90. package/dist/assets/gitGraph-TEB2WS4Q-BR9qPwdN-BnZW4EXW.js +0 -1
  91. package/dist/assets/info-DKCQHKI2-Dplx5kMp-CrJfKOA1.js +0 -1
  92. package/dist/assets/packet-7NZHBO7P-CQI3flND-mf_ng5Fx.js +0 -1
  93. package/dist/assets/pie-RZYD4A2V-CnmKE2Wa-CSySnxGv.js +0 -1
  94. package/dist/assets/radar-I7S5WNFK-us6x-Z9R-DfA0aimG.js +0 -1
  95. package/dist/assets/railroad-3IZDKUUU-BKdz6pdN-T35PQ5gg.js +0 -1
  96. package/dist/assets/railroad-abnf-AHOZXSZD-m_CSSIfd-DavwfL2m.js +0 -1
  97. package/dist/assets/railroad-ebnf-EBAXGLYW-Nu3nAG7C-Yk8Oj2bi.js +0 -1
  98. package/dist/assets/railroad-peg-LSFZ7HO6--Y3mD4R_-DOPPkkTw.js +0 -1
  99. package/dist/assets/stateDiagram-v2-6OUMAXLB-CuzgCL2v-BuaQTnnn.js +0 -1
  100. package/dist/assets/swimlanesDiagram-G3AALYLV-3bmSBtKs-CVMbYKXX.js +0 -8
  101. package/dist/assets/treeView-QDETBFTQ-D27HWG6Q-DSRzdn6E.js +0 -1
  102. package/dist/assets/treemap-6X3UGDF4-CmGIU3H5-pjqGjUmo.js +0 -1
  103. package/dist/assets/wardley-OPB4EBWU-CbHWsb2k-_qoOv9rX.js +0 -1
package/README.md CHANGED
@@ -111,11 +111,23 @@ dotfiles are server-only. The 45 extensions both sides agree on live in
111
111
 
112
112
  ## Install & run
113
113
 
114
- Requires the [`claude`](https://claude.com/claude-code) CLI on your `PATH` and
115
- **Node ≥ 22.9**. Optional but recommended: **`tmux`** so terminals survive a server
116
- restart (see [Session persistence (tmux)](#session-persistence-tmux)), the **`gh`** CLI
117
- logged in for the PRs/Issues view and one-click PR creation, and — for Codex sessions —
118
- the **`codex`** CLI on your `PATH`.
114
+ Needs **Node ≥ 22.9**, plus these CLIs on your `PATH`:
115
+
116
+ | | Tool | What it gives you | Install |
117
+ | --- | --- | --- | --- |
118
+ | **Required** | [`claude`](https://claude.com/claude-code) | every Claude session — this app is a cockpit for it | `npm i -g @anthropic-ai/claude-code`, then run `claude` once to log in |
119
+ | **Required** | `git` | [worktree isolation](#git-worktrees--pull-requests), each cell's branch / unsaved-dot / diff readout, the PR footer | `brew install git` · `sudo apt install git` · `sudo dnf install git` · Windows: [git-scm.com](https://git-scm.com/download/win) |
120
+ | **Required** | `gh` | the cross-repo **PRs & Issues** view and one-click PR creation — it uses your `gh` login, so no token is stored | [cli.github.com](https://cli.github.com), then `gh auth login` |
121
+ | Recommended | `tmux` | [session persistence](#session-persistence-tmux) — terminals survive a server restart | `brew install tmux` · `sudo apt install tmux` · `sudo dnf install tmux` · no native Windows build (falls back to plain PTYs) |
122
+ | Optional | `codex` | [Codex sessions](#agents-claude--codex) in a cell, alongside Claude | `npm i -g @openai/codex` |
123
+ | Optional | `docker` | the experimental [Docker sandbox](#docker-sandbox-experimental-single-view) | [docs.docker.com](https://docs.docker.com/get-started/get-docker/) |
124
+ | Optional | `ffmpeg` | video rendering from the [mulmo-script panel](#wiki-collections--the-gui-panel) (its plugin ships enabled) | `brew install ffmpeg` · `sudo apt install ffmpeg` · `sudo dnf install ffmpeg` |
125
+ | Optional | `ollama` | [`claude-ollama`](https://receptron.github.io/mulmoterminal/guide/en/claude-ollama.html) — Claude Code against a fully local model | [ollama.com/download](https://ollama.com/download) |
126
+
127
+ The server starts without any of the non-required rows; you just lose that row's feature,
128
+ and the header/panel for it says so. `git` and `gh` are marked required because losing them
129
+ costs whole views rather than one button. `npx mulmoterminal init` (below) reports which of
130
+ these it can find.
119
131
 
120
132
  ```bash
121
133
  npx mulmoterminal # start on http://localhost:34567 and open the browser
@@ -124,8 +136,8 @@ npm install -g mulmoterminal
124
136
  mulmoterminal
125
137
  ```
126
138
 
127
- **First-run setup (optional).** `npx mulmoterminal init` checks your environment (Node ≥ 22.9,
128
- the `claude` CLI, plus optional `tmux` / `gh` / `codex`), seeds the launcher's **directory
139
+ **First-run setup (optional).** `npx mulmoterminal init` checks your environment (Node ≥ 22.9
140
+ and every CLI in the table above), seeds the launcher's **directory
129
141
  presets** from the projects in your Claude Code history, and writes `~/.mulmoterminal/config.json`.
130
142
  It's **idempotent** — re-run it any time to refresh the presets; it overwrites the managed parts
131
143
  and keeps your other settings. When `claude` is installed it can hand off to the
@@ -838,7 +850,10 @@ Favorited collections get their own toolbar buttons.
838
850
  - **Notifications** (🔔) — a toolbar bell with an unread badge and a dropdown of active
839
851
  notifications; click a row to jump to its session.
840
852
  - **Voice input** — dictate a prompt via on-device Whisper (`POST /api/transcribe`, macOS
841
- only; the model downloads on first use).
853
+ only; the model downloads on first use). Settings picks **the language you dictate in**
854
+ (per browser): your browser's, whisper's own per-clip detection, or a fixed one. Worth
855
+ setting — speech in a language the mic is not expecting comes back *translated* into the
856
+ one it is, so an English browser silently turned Japanese dictation into English.
842
857
  - **Remote host** — link MulmoTerminal to the companion phone client (Google sign-in) to
843
858
  watch and start sessions from your phone.
844
859
  - **Themes** — four terminal palettes (midnight / nord / daylight / solarized), your pick
@@ -76,6 +76,31 @@ function claudeInstalled() {
76
76
  return hasCommand("claude");
77
77
  }
78
78
 
79
+ // PATH tools the app shells out to; mirrors the requirements table in README.md. `required`
80
+ // ones back the core grid — without them a developer loses whole views rather than one
81
+ // feature — so a miss is an ✗, not an ○.
82
+ const PATH_TOOLS = [
83
+ { cmd: "git", versionArg: "--version", required: true, why: "worktrees, per-cell branch/diff, PR footer", hint: "brew install git · apt install git" },
84
+ { cmd: "gh", versionArg: "--version", required: true, why: "PRs & Issues view + one-click PRs", hint: "https://cli.github.com (then: gh auth login)" },
85
+ { cmd: "tmux", versionArg: "-V", required: false, why: "sessions survive a restart", hint: "brew install tmux · apt install tmux" },
86
+ { cmd: "codex", versionArg: "--version", required: false, why: "run OpenAI Codex as an agent", hint: "npm install -g @openai/codex" },
87
+ { cmd: "docker", versionArg: "--version", required: false, why: "the experimental Docker sandbox", hint: "https://docs.docker.com/get-started/get-docker/" },
88
+ {
89
+ cmd: "ffmpeg",
90
+ versionArg: "-version",
91
+ required: false,
92
+ why: "video rendering in the mulmo-script panel",
93
+ hint: "brew install ffmpeg · apt install ffmpeg",
94
+ },
95
+ { cmd: "ollama", versionArg: "--version", required: false, why: "a fully local model via claude-ollama", hint: "https://ollama.com/download" },
96
+ ];
97
+
98
+ function toolCheckLine({ cmd, versionArg, required, why, hint }) {
99
+ if (hasCommand(cmd, versionArg)) return ` ✓ ${cmd} — ${why}`;
100
+ const head = required ? ` ✗ ${cmd} — not found, needed for ${why}` : ` ○ ${cmd} — optional (${why})`;
101
+ return `${head}\n → ${hint}`;
102
+ }
103
+
79
104
  function promptYesNo(question) {
80
105
  return new Promise((res) => {
81
106
  const rl = createInterface({ input: process.stdin, output: process.stdout });
@@ -103,13 +128,7 @@ async function runInit(initArgs) {
103
128
  console.log(" → npm install -g @anthropic-ai/claude-code (then run `claude` and log in)");
104
129
  }
105
130
 
106
- for (const [cmd, versionArg, why, hint] of [
107
- ["tmux", "-V", "sessions survive a restart", "brew install tmux · apt install tmux"],
108
- ["gh", "--version", "PRs & Issues view + one-click PRs", "https://cli.github.com (then: gh auth login)"],
109
- ["codex", "--version", "run OpenAI Codex as an agent", "npm install -g @openai/codex"],
110
- ]) {
111
- console.log(hasCommand(cmd, versionArg) ? ` ✓ ${cmd} — ${why}` : ` ○ ${cmd} — optional (${why})\n → ${hint}`);
112
- }
131
+ PATH_TOOLS.forEach((tool) => console.log(toolCheckLine(tool)));
113
132
 
114
133
  // Config half: derive working-dir presets from Claude history + write config.json.
115
134
  console.log("");
@@ -0,0 +1,21 @@
1
+ // The `GET /api/transcribe/model` response. The server builds it; the UI decides the mic
2
+ // button's visibility and the settings section's from it — both sides read it, so it lives
3
+ // here rather than as one interface per side.
4
+ //
5
+ // Deliberately independent of whisper's own types: this is the API contract, and which
6
+ // package implements transcription behind it is not the UI's business. The server's
7
+ // `getVoiceInputStatus(): VoiceInputStatus` annotation is what keeps the two in step.
8
+
9
+ export type VoiceModelState = "idle" | "downloading" | "ready" | "error";
10
+
11
+ export interface VoiceInputStatus {
12
+ /** The platform and binaries are present — the mic can appear. */
13
+ capable: boolean;
14
+ model: {
15
+ name: string;
16
+ state: VoiceModelState;
17
+ /** 0..1, only while downloading and only when the size is known. */
18
+ progress?: number;
19
+ error?: string;
20
+ };
21
+ }
@@ -1 +1 @@
1
- import{n as e}from"./chunk-Y2CYZVJY-Bdt8pFDJ-DsF7k-Jl.js";import{f as t}from"./src-Brzfja-q-ch1VcTiG.js";import{_ as n,g as r}from"./mermaid-parser.core-DxEa8E3F-iymJ5XTw.js";import"./chunk-WYO6CB5R-BlzOfotS-BRhqiyoJ.js";import"./chunk-VAUOI2AC-CS9QJ4yz-C6T0-Q0n.js";import{n as i,r as a,t as o}from"./chunk-MOJQB5TN-CMZRaeqt-DsiY753w.js";import{t as s}from"./chunk-JWPE2WC7-BQ3zXr2k-DSd3Ct95.js";var c=r().RailroadAbnf.parser.LangiumParser,l=e(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=e(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=e(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=e(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=e(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=e(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=e(e=>{s(e,a),e.title&&a.setTitle(e.title),e.rules.map(e=>a.addRule(m(e)))},`populateDb`),g={parser:{parse:e(e=>{a.clear(),t.debug(`[ABNF Parser] Starting Langium parse`);let r=c.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new n(r);let i=r.value;t.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),t.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:a}},db:a,renderer:o,styles:i};export{g as diagram};
1
+ import{n as e}from"./chunk-Y2CYZVJY-Bdt8pFDJ-DsF7k-Jl.js";import{f as t}from"./src-Brzfja-q-ch1VcTiG.js";import{_ as n,g as r}from"./mermaid-parser.core-DxEa8E3F-BAh0ySn4.js";import"./chunk-WYO6CB5R-BlzOfotS-BRwSb4rl.js";import"./chunk-VAUOI2AC-CS9QJ4yz-CfgcnwuB.js";import{n as i,r as a,t as o}from"./chunk-MOJQB5TN-CMZRaeqt-CKo27qok.js";import{t as s}from"./chunk-JWPE2WC7-BQ3zXr2k-DSd3Ct95.js";var c=r().RailroadAbnf.parser.LangiumParser,l=e(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=e(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=e(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=e(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=e(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=e(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=e(e=>{s(e,a),e.title&&a.setTitle(e.title),e.rules.map(e=>a.addRule(m(e)))},`populateDb`),g={parser:{parse:e(e=>{a.clear(),t.debug(`[ABNF Parser] Starting Langium parse`);let r=c.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new n(r);let i=r.value;t.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),t.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:a}},db:a,renderer:o,styles:i};export{g as diagram};
@@ -0,0 +1 @@
1
+ import{f as e}from"./mermaid-parser.core-DxEa8E3F-BAh0ySn4.js";export{e as createArchitectureServices};