mulmoterminal 2.5.3 → 2.6.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 (158) hide show
  1. package/README.md +9 -9
  2. package/bin/mulmoterminal.js +4 -1
  3. package/common/toolGroups.ts +23 -5
  4. package/dist/assets/{abnfDiagram-VRR7QNED-RjiYivmv-CkfTvNiT.js → abnfDiagram-VRR7QNED-RjiYivmv-2UuooAL1.js} +1 -1
  5. package/dist/assets/architecture-TIHT7OUA-0NsD2xW1-BgkdTJQE.js +1 -0
  6. package/dist/assets/{architectureDiagram-ZJ3FMSHR-3nWA91tG-DU5fnnYi.js → architectureDiagram-ZJ3FMSHR-3nWA91tG-Cadi87eN.js} +1 -1
  7. package/dist/assets/{blockDiagram-677ZJIJ3-BPuAJQRW-DJtyRfct.js → blockDiagram-677ZJIJ3-BPuAJQRW-DqOBzK4r.js} +1 -1
  8. package/dist/assets/{c4Diagram-LMCZKHZV-C0LAqQso-CaAB4hIh.js → c4Diagram-LMCZKHZV-C0LAqQso-Czc9LUxD.js} +1 -1
  9. package/dist/assets/channel-7wUqSdoX-C1cie6OA.js +1 -0
  10. package/dist/assets/{chunk-32BRIVSS-BRrYpgtb-C2pc6s6p.js → chunk-32BRIVSS-BRrYpgtb-DPioxLNJ.js} +1 -1
  11. package/dist/assets/{chunk-52WLFC77-BJ-ss3Xr-BiDQ5LS-.js → chunk-52WLFC77-BJ-ss3Xr-BGc0pGjo.js} +1 -1
  12. package/dist/assets/{chunk-C7G6YPKG-BZEucKEL-B6NLudrF.js → chunk-C7G6YPKG-BZEucKEL-C4mkPiqB.js} +1 -1
  13. package/dist/assets/{chunk-EX3LRPZG-DLS6FBN1-Dydj9mRL.js → chunk-EX3LRPZG-DLS6FBN1-C3Wn7cGn.js} +1 -1
  14. package/dist/assets/chunk-FWX5IMBZ-DHLSFw1H-C8DnOSSj.js +2 -0
  15. package/dist/assets/{chunk-HOUHSVGY-Bhlt8hXJ-460OsWXy.js → chunk-HOUHSVGY-Bhlt8hXJ-BT_GFYXY.js} +1 -1
  16. package/dist/assets/{chunk-ICXQ74PX-DwgHBX_g-CSp9RB18.js → chunk-ICXQ74PX-DwgHBX_g-DY-sDZ2-.js} +1 -1
  17. package/dist/assets/{chunk-MOJQB5TN-CMZRaeqt-CC-mdXDP.js → chunk-MOJQB5TN-CMZRaeqt-DvOpObYg.js} +1 -1
  18. package/dist/assets/{chunk-OGEWGWER-8Qy4a8b5-nrJtDZ0I.js → chunk-OGEWGWER-8Qy4a8b5-BxAWKfDq.js} +1 -1
  19. package/dist/assets/{chunk-PUDLZKDR-DcrWQRYh-D7s7UkTC.js → chunk-PUDLZKDR-DcrWQRYh-HeYWroWP.js} +1 -1
  20. package/dist/assets/{chunk-Q4XR5HBZ-ZXVGkG8Z-Vjuup2uc.js → chunk-Q4XR5HBZ-ZXVGkG8Z-Cqn2FjJe.js} +1 -1
  21. package/dist/assets/{chunk-V7JOEXUC-DmGdheTX-V1zSMg_1.js → chunk-V7JOEXUC-DmGdheTX-WySfFBLu.js} +1 -1
  22. package/dist/assets/{chunk-VAUOI2AC-CS9QJ4yz-C1PM97Ei.js → chunk-VAUOI2AC-CS9QJ4yz-xhVI0AT_.js} +1 -1
  23. package/dist/assets/{chunk-VR4S4FIN-C6a91eNY-zf8Ln3gQ.js → chunk-VR4S4FIN-C6a91eNY-Dawtxx1M.js} +1 -1
  24. package/dist/assets/{chunk-WYO6CB5R-BlzOfotS-CgOwOaF2.js → chunk-WYO6CB5R-BlzOfotS-cPQQuq_p.js} +1 -1
  25. package/dist/assets/{chunk-ZGVPDNZ5-BYwxNFTK-C17Ongqc.js → chunk-ZGVPDNZ5-BYwxNFTK-CwEy22EH.js} +1 -1
  26. package/dist/assets/classDiagram-OUVF2IWQ-BYlRi6YQ-Do5m3IoG.js +1 -0
  27. package/dist/assets/classDiagram-v2-EOCWNBFH-BCHaYHxj-Do5m3IoG.js +1 -0
  28. package/dist/assets/cynefin-VYW2F7L2-CGYr2F6h-DwN-y4W_.js +1 -0
  29. package/dist/assets/{cynefinDiagram-TSTJHNR4-DHA9iPo--rvKNlp57.js → cynefinDiagram-TSTJHNR4-DHA9iPo--6gP3lGiQ.js} +1 -1
  30. package/dist/assets/{dagre-VKFMJZFB--oJKqXBZ-DAPicxb0.js → dagre-VKFMJZFB--oJKqXBZ-Ogb4ZCJY.js} +1 -1
  31. package/dist/assets/{diagram-FQU43EPY-CcJCB9bG-Cwk0uscZ.js → diagram-FQU43EPY-CcJCB9bG-En7Wv4VU.js} +1 -1
  32. package/dist/assets/{diagram-G47NLZAW-C_o-WGG1-CLLr3WWX.js → diagram-G47NLZAW-C_o-WGG1-CvfDKE9B.js} +1 -1
  33. package/dist/assets/{diagram-NH7WQ7WH-CXJCYvY--YbeWvGrQ.js → diagram-NH7WQ7WH-CXJCYvY--D_SuUUUL.js} +1 -1
  34. package/dist/assets/{diagram-OA4YK3LP-BMzeJ87A-CCzLGMoX.js → diagram-OA4YK3LP-BMzeJ87A-COaQX8ss.js} +1 -1
  35. package/dist/assets/{diagram-WEI45ONY-D_93NKqo-C_vctp-i.js → diagram-WEI45ONY-D_93NKqo-B5qjqS3m.js} +1 -1
  36. package/dist/assets/dist-CBx3SN5Y.js +9 -0
  37. package/dist/assets/dist-CXRReMvS.js +1 -0
  38. package/dist/assets/dist-CeY8Kgqb.js +1 -0
  39. package/dist/assets/dist-Ci7pnEU6.js +11 -0
  40. package/dist/assets/dist-DyY2Odgu.js +1 -0
  41. package/dist/assets/dist-FzB0wwv6.js +1 -0
  42. package/dist/assets/dist-IEKl3ifz.js +11 -0
  43. package/dist/assets/dist-Lnp6Clqz.js +1 -0
  44. package/dist/assets/dist-berHSMWa.js +1 -0
  45. package/dist/assets/dist-kXEjeiqx.js +2 -0
  46. package/dist/assets/{ebnfDiagram-CCIWWBDH-CVai1Ii9-C9RE0jib.js → ebnfDiagram-CCIWWBDH-CVai1Ii9-Bbl_CbGD.js} +1 -1
  47. package/dist/assets/{erDiagram-Q63AITRT-CiABnA0s-DNe_dsG7.js → erDiagram-Q63AITRT-CiABnA0s-DtNjq60k.js} +1 -1
  48. package/dist/assets/eventmodeling-45OFAUF4-CWmqhm3a-EIcAkJu9.js +1 -0
  49. package/dist/assets/flowDiagram-23GEKE2U-DKSB5AiY-BLvmawCu.js +1 -0
  50. package/dist/assets/{ganttDiagram-NO4QXBWP-DQZvdFo1-D0fBB7vz.js → ganttDiagram-NO4QXBWP-DQZvdFo1-Dtybxb5k.js} +1 -1
  51. package/dist/assets/gitGraph-TEB2WS4Q-BR9qPwdN-CWvVulXn.js +1 -0
  52. package/dist/assets/{gitGraphDiagram-IHSO6WYX-C2ovBouh-_9JEvhUj.js → gitGraphDiagram-IHSO6WYX-C2ovBouh-CibskzGI.js} +1 -1
  53. package/dist/assets/index-B1LdU5cE.js +610 -0
  54. package/dist/assets/index-Dwz79YwY.css +1 -0
  55. package/dist/assets/info-DKCQHKI2-Dplx5kMp-CBgSXevA.js +1 -0
  56. package/dist/assets/{infoDiagram-FWYZ7A6U-7UnoB5AP-sf0LZ0TR.js → infoDiagram-FWYZ7A6U-7UnoB5AP-WyZaP5rz.js} +1 -1
  57. package/dist/assets/{ishikawaDiagram-FXEZZL3T-ByUDM_N2-Dh3uJwRU.js → ishikawaDiagram-FXEZZL3T-ByUDM_N2-C_Q9CmwS.js} +1 -1
  58. package/dist/assets/{journeyDiagram-5HDEW3XC-c5xIah9o-BaIw2Adh.js → journeyDiagram-5HDEW3XC-c5xIah9o-D-Ru3_wb.js} +1 -1
  59. package/dist/assets/{kanban-definition-HUTT4EX6-Cnt6loYD-BLIQlGsE.js → kanban-definition-HUTT4EX6-Cnt6loYD-eWJL56Xd.js} +1 -1
  60. package/dist/assets/lib-CTNrhK1N.js +9 -0
  61. package/dist/assets/{line-D7ziSjKi-BnFPtJcd.js → line-D7ziSjKi-CEMKL39T.js} +1 -1
  62. package/dist/assets/{marp-JKciXjDr.js → marp-C4na0vHp.js} +37 -37
  63. package/dist/assets/{mermaid-parser.core-DxEa8E3F-CscC8Qqr.js → mermaid-parser.core-DxEa8E3F-3f1dQMCy.js} +2 -2
  64. package/dist/assets/{mermaid.core-V0OYwIz3-g362i9RA.js → mermaid.core-V0OYwIz3-Dg1HWQ_i.js} +3 -3
  65. package/dist/assets/{mindmap-definition-LN4V7U3C-CexN3O6L-CEmgqxM2.js → mindmap-definition-LN4V7U3C-CexN3O6L-CyxV57-U.js} +1 -1
  66. package/dist/assets/packet-7NZHBO7P-CQI3flND-BlXZ8rUp.js +1 -0
  67. package/dist/assets/{pegDiagram-2B236MQR-BiM4G0cW-xR2ciIPB.js → pegDiagram-2B236MQR-BiM4G0cW-B40BLiy-.js} +1 -1
  68. package/dist/assets/pie-RZYD4A2V-CnmKE2Wa-elRgXCv3.js +1 -0
  69. package/dist/assets/{pieDiagram-ENE6RG2P-B_fBBS-2-Do2rjuXg.js → pieDiagram-ENE6RG2P-B_fBBS-2-j0wsTlPA.js} +1 -1
  70. package/dist/assets/{quadrantDiagram-ABIIQ3AL-BigGVxCR-CYjBsLx8.js → quadrantDiagram-ABIIQ3AL-BigGVxCR-BVxlsDNI.js} +1 -1
  71. package/dist/assets/radar-I7S5WNFK-us6x-Z9R-BZqQUr3N.js +1 -0
  72. package/dist/assets/railroad-3IZDKUUU-BKdz6pdN-Cb5GXZCb.js +1 -0
  73. package/dist/assets/railroad-abnf-AHOZXSZD-m_CSSIfd-BddD0JXg.js +1 -0
  74. package/dist/assets/railroad-ebnf-EBAXGLYW-Nu3nAG7C-7VkImbqm.js +1 -0
  75. package/dist/assets/railroad-peg-LSFZ7HO6--Y3mD4R_-DHko1-Zq.js +1 -0
  76. package/dist/assets/{railroadDiagram-RFXS5EU6--lNIlG64-DrRDvGFv.js → railroadDiagram-RFXS5EU6--lNIlG64-7RnYoafQ.js} +1 -1
  77. package/dist/assets/{requirementDiagram-TGXJPOKE-D-B0Y5Wu-AohyoXS1.js → requirementDiagram-TGXJPOKE-D-B0Y5Wu-xH07LQI_.js} +1 -1
  78. package/dist/assets/{sankeyDiagram-HTMAVEWB-DlutaXDv-BeuhDKAh.js → sankeyDiagram-HTMAVEWB-DlutaXDv-BUmys5rr.js} +1 -1
  79. package/dist/assets/{sequenceDiagram-DBY2YBRQ-BOLgtggH-BMS6Xghs.js → sequenceDiagram-DBY2YBRQ-BOLgtggH-BYyf27T3.js} +1 -1
  80. package/dist/assets/{stateDiagram-2N3HPSRC-jf_dXUEU-1ccT8EBF.js → stateDiagram-2N3HPSRC-jf_dXUEU-DGzqzTG5.js} +1 -1
  81. package/dist/assets/stateDiagram-v2-6OUMAXLB-CuzgCL2v-DDeTaew1.js +1 -0
  82. package/dist/assets/{swimlanes-5IMT3BWC-CYjtALQH-B7FjNmUf.js → swimlanes-5IMT3BWC-CYjtALQH-BD-WjB9j.js} +1 -1
  83. package/dist/assets/swimlanesDiagram-G3AALYLV-3bmSBtKs-DZLi_c2t.js +8 -0
  84. package/dist/assets/{timeline-definition-FHXFAJF6-DYJ4oUm8-Cv5APELs.js → timeline-definition-FHXFAJF6-DYJ4oUm8-BL8HXryX.js} +1 -1
  85. package/dist/assets/treeView-QDETBFTQ-D27HWG6Q-C9kkOUqZ.js +1 -0
  86. package/dist/assets/treemap-6X3UGDF4-CmGIU3H5-zjv1syce.js +1 -0
  87. package/dist/assets/{vennDiagram-L72KCM5P-CdKAHoek-DDVhQ5s2.js → vennDiagram-L72KCM5P-CdKAHoek-_pUekkpD.js} +1 -1
  88. package/dist/assets/wardley-OPB4EBWU-CbHWsb2k-DE_WhSD_.js +1 -0
  89. package/dist/assets/{wardleyDiagram-EHGQE667-BF6c4_CW-BGrTblgg.js → wardleyDiagram-EHGQE667-BF6c4_CW-BVNPNGsg.js} +1 -1
  90. package/dist/assets/{xychartDiagram-FW5EYKEG-CGiKngj7-D9-hceiL.js → xychartDiagram-FW5EYKEG-CGiKngj7-C5EYDD6T.js} +1 -1
  91. package/dist/index.html +3 -2
  92. package/package.json +12 -1
  93. package/server/agents/codex-args.ts +30 -5
  94. package/server/agents/codex-rollout.spec.ts +46 -0
  95. package/server/agents/codex-rollout.ts +13 -23
  96. package/server/agents/probe-session.spec.ts +18 -0
  97. package/server/agents/probe-session.ts +10 -2
  98. package/server/agents/probe-transcript.spec.ts +282 -0
  99. package/server/agents/probe-transcript.ts +190 -0
  100. package/server/agents/rate-limit-persist.spec.ts +64 -0
  101. package/server/agents/rate-limit-persist.ts +21 -6
  102. package/server/agents/rate-limit-probe.spec.ts +52 -0
  103. package/server/agents/rate-limit-probe.ts +6 -2
  104. package/server/agents/rate-limit-store.spec.ts +15 -0
  105. package/server/agents/rate-limit-store.ts +8 -2
  106. package/server/agents/statusline.spec.ts +8 -3
  107. package/server/agents/statusline.ts +6 -4
  108. package/server/backends/remoteHost/firestoreSafeResult.ts +72 -0
  109. package/server/backends/remoteHost/index.ts +20 -11
  110. package/server/backends/remoteHost/presenceProbe.ts +67 -0
  111. package/server/backends/remoteHost/resilientRunner.ts +57 -0
  112. package/server/backends/remoteHost/terminalScreen.ts +13 -5
  113. package/server/config/header-title.ts +7 -1
  114. package/server/index.ts +42 -8
  115. package/server/infra/gui-mcp-registration.ts +77 -11
  116. package/server/infra/jsonl-file.ts +88 -0
  117. package/server/infra/spawnCapture.ts +1 -1
  118. package/server/routes/gui-mcp-routes.ts +5 -3
  119. package/server/routes/plugin-routes.ts +1 -1
  120. package/server/routes/ws-routes.ts +64 -17
  121. package/server/session/cost.ts +23 -10
  122. package/server/session/decision-scan.ts +2 -10
  123. package/server/session/early-frames.ts +39 -0
  124. package/server/session/last-turn.ts +6 -1
  125. package/server/session/launcher-gui-mcp.ts +55 -0
  126. package/server/session/mcp-config.ts +44 -0
  127. package/server/session/pty-spawn.ts +13 -1
  128. package/server/session/session-reads.ts +62 -50
  129. package/server/session/session-title.ts +14 -6
  130. package/server/session/spawn-claude.ts +23 -5
  131. package/server/session/spawn-codex.ts +20 -5
  132. package/server/session/summary-scan.ts +93 -0
  133. package/server/session/transcript.ts +35 -22
  134. package/dist/assets/architecture-TIHT7OUA-0NsD2xW1-F7APysNp.js +0 -1
  135. package/dist/assets/channel-7wUqSdoX-o7hjueM_.js +0 -1
  136. package/dist/assets/chunk-FWX5IMBZ-DHLSFw1H-BtzzUMmo.js +0 -2
  137. package/dist/assets/classDiagram-OUVF2IWQ-BYlRi6YQ-dAb2Nqej.js +0 -1
  138. package/dist/assets/classDiagram-v2-EOCWNBFH-BCHaYHxj-dAb2Nqej.js +0 -1
  139. package/dist/assets/cynefin-VYW2F7L2-CGYr2F6h-CcNtA1jr.js +0 -1
  140. package/dist/assets/eventmodeling-45OFAUF4-CWmqhm3a-CWY7xW6B.js +0 -1
  141. package/dist/assets/flowDiagram-23GEKE2U-DKSB5AiY-BQbNqK8I.js +0 -1
  142. package/dist/assets/gitGraph-TEB2WS4Q-BR9qPwdN-DndYDaiz.js +0 -1
  143. package/dist/assets/index-BLn_JWl1.js +0 -620
  144. package/dist/assets/index-BZb3UNXf.css +0 -1
  145. package/dist/assets/info-DKCQHKI2-Dplx5kMp-Ch8HtmdN.js +0 -1
  146. package/dist/assets/lib-BkHCzFsd.js +0 -9
  147. package/dist/assets/packet-7NZHBO7P-CQI3flND-kVLgbrf9.js +0 -1
  148. package/dist/assets/pie-RZYD4A2V-CnmKE2Wa-D1l75ZW4.js +0 -1
  149. package/dist/assets/radar-I7S5WNFK-us6x-Z9R-CgFu134o.js +0 -1
  150. package/dist/assets/railroad-3IZDKUUU-BKdz6pdN-_koCxt7R.js +0 -1
  151. package/dist/assets/railroad-abnf-AHOZXSZD-m_CSSIfd-y8_SdxMu.js +0 -1
  152. package/dist/assets/railroad-ebnf-EBAXGLYW-Nu3nAG7C-CREWWR2J.js +0 -1
  153. package/dist/assets/railroad-peg-LSFZ7HO6--Y3mD4R_-DkxX3rOi.js +0 -1
  154. package/dist/assets/stateDiagram-v2-6OUMAXLB-CuzgCL2v-COjV9W1k.js +0 -1
  155. package/dist/assets/swimlanesDiagram-G3AALYLV-3bmSBtKs-CEARqU8w.js +0 -8
  156. package/dist/assets/treeView-QDETBFTQ-D27HWG6Q-CrGq3OoF.js +0 -1
  157. package/dist/assets/treemap-6X3UGDF4-CmGIU3H5-C7DIaiQ8.js +0 -1
  158. package/dist/assets/wardley-OPB4EBWU-CbHWsb2k-WP0WCRL-.js +0 -1
package/README.md CHANGED
@@ -24,7 +24,7 @@ color-coded so you see at a glance which are **working**, which **need you**, an
24
24
  ping to your phone when a task finishes. One `npx` command, no Electron, no config.
25
25
 
26
26
  ```bash
27
- npx mulmoterminal # starts on http://localhost:34567 and opens your browser
27
+ npx mulmoterminal@latest # starts on http://localhost:34567 and opens your browser
28
28
  ```
29
29
 
30
30
  > **Something looks wrong?** Type `/mulmoterminal-bug-report` in any MulmoTerminal session. The
@@ -146,17 +146,17 @@ Needs **Node ≥ 22.9**, plus these CLIs on your `PATH`:
146
146
 
147
147
  The server starts without any of the non-required rows; you just lose that row's feature,
148
148
  and the header/panel for it says so. `git` and `gh` are marked required because losing them
149
- costs whole views rather than one button. `npx mulmoterminal init` (below) reports which of
149
+ costs whole views rather than one button. `npx mulmoterminal@latest init` (below) reports which of
150
150
  these it can find.
151
151
 
152
152
  ```bash
153
- npx mulmoterminal # start on http://localhost:34567 and open the browser
153
+ npx mulmoterminal@latest # start on http://localhost:34567 and open the browser
154
154
  # or install globally:
155
155
  npm install -g mulmoterminal
156
156
  mulmoterminal
157
157
  ```
158
158
 
159
- **First-run setup (optional).** `npx mulmoterminal init` checks your environment (Node ≥ 22.9
159
+ **First-run setup (optional).** `npx mulmoterminal@latest init` checks your environment (Node ≥ 22.9
160
160
  and every CLI in the table above), seeds the launcher's **directory
161
161
  presets** from the projects in your Claude Code history, and writes `~/.mulmoterminal/config.json`.
162
162
  It's **idempotent** — re-run it any time to refresh the presets; it overwrites the managed parts
@@ -166,7 +166,7 @@ and keeps your other settings. When `claude` is installed it can hand off to the
166
166
  **Google account (optional).** Link a Google account to enable the chat's `google` tool and the
167
167
  phone's `google.calendar.*` commands: read/create events on any calendar (not just your primary),
168
168
  list the calendars you've subscribed to, and read the colour palettes. Sign in from
169
- **Settings → Google account**, or run `npx mulmoterminal google login` — the CLI is the fallback
169
+ **Settings → Google account**, or run `npx mulmoterminal@latest google login` — the CLI is the fallback
170
170
  for when you're driving MulmoTerminal from another machine, since consent finishes on a loopback
171
171
  listener and needs a browser **on the host**. Either way it needs a Desktop OAuth client JSON saved
172
172
  as `~/.secrets/client_secret_*.json`; the refresh token lands in `~/.config/mulmo/google-token.json`
@@ -200,11 +200,11 @@ directory you run the command from), `--port <n>` (default 34567), `--no-open`,
200
200
  `--version`, `--help`.
201
201
 
202
202
  ```bash
203
- npx mulmoterminal --cwd ./my-project # work in a specific directory
203
+ npx mulmoterminal@latest --cwd ./my-project # work in a specific directory
204
204
  ```
205
205
 
206
206
  The published package ships the server (run via `tsx`) plus the pre-built web UI;
207
- `npx mulmoterminal` checks for the `claude` CLI, picks a free port, starts the
207
+ `npx mulmoterminal@latest` checks for the `claude` CLI, picks a free port, starts the
208
208
  server, and opens the browser. For local development from a clone, see
209
209
  [Running](#running).
210
210
 
@@ -426,7 +426,7 @@ Requires **Node ≥ 22.9** (uses `node --env-file-if-exists`) and the `claude` C
426
426
  ## Configuration
427
427
 
428
428
  The server is configured entirely through environment variables, optionally
429
- loaded from a `.env` file. `npx mulmoterminal` reads the `.env` **in the
429
+ loaded from a `.env` file. `npx mulmoterminal@latest` reads the `.env` **in the
430
430
  directory you run it from**; the npm scripts read the one in the repo root. The
431
431
  `.env` is optional — every variable below has a default, so the server runs
432
432
  without one.
@@ -441,7 +441,7 @@ the `claude` / `codex` sessions themselves.
441
441
  | `PORT` | `34567` | Backend HTTP/WebSocket port (prod: the URL you open). |
442
442
  | `CLIENT_PORT` | `6856` | Vite dev-server port (dev only: the URL you open with `yarn dev`). |
443
443
  | `CLAUDE_BIN` | `claude` | The Claude Code binary to spawn. On Windows a bare name is resolved on `PATH` before it reaches the PTY layer (which matches file names exactly): to the `.exe` when there is one, otherwise to the `.cmd` shim an npm-global install leaves, run through `cmd.exe`. |
444
- | `CLAUDE_CWD` | current dir | Working directory each `claude` PTY runs in; determines which project's sessions the sidebar lists. Via `npx mulmoterminal` it defaults to the directory you ran the command from (override with `--cwd <dir>`, relative allowed); when the server is run directly it falls back to `~/mulmoclaude`. A value read from `.env` must be an absolute path (`~` is not expanded). |
444
+ | `CLAUDE_CWD` | current dir | Working directory each `claude` PTY runs in; determines which project's sessions the sidebar lists. Via `npx mulmoterminal@latest` it defaults to the directory you ran the command from (override with `--cwd <dir>`, relative allowed); when the server is run directly it falls back to `~/mulmoclaude`. A value read from `.env` must be an absolute path (`~` is not expanded). |
445
445
  | `CLAUDE_PERMISSION_MODE` | `auto` | Permission mode passed to each `claude` spawn. |
446
446
  | `MT_TITLE_MODEL` | `haiku` | Model used for the cell header's AI title (a cheap/fast model summarizing the recent turns). Accepts a `--model` alias or a full model id. |
447
447
  | `CODEX_BIN` | `codex` | The Codex CLI binary to spawn. |
@@ -155,7 +155,10 @@ async function runInit(initArgs) {
155
155
  return;
156
156
  }
157
157
  if (hasClaude) log("Later: run `claude` in any project and use /mulmoterminal-config");
158
- log("Setup done. Start MulmoTerminal: npx mulmoterminal");
158
+ // Pinned to @latest: an unpinned `npx` reuses whatever it already has cached, so the very
159
+ // command printed for someone to type next would start an older version than the one they
160
+ // just set up with.
161
+ log("Setup done. Start MulmoTerminal: npx mulmoterminal@latest");
159
162
  }
160
163
 
161
164
  // `npx mulmoterminal google <command>` — Google account linking. Consent needs a
@@ -18,11 +18,24 @@ export type ToolGroup = (typeof TOOL_GROUPS)[number];
18
18
 
19
19
  export const isToolGroup = (value: unknown): value is ToolGroup => TOOL_GROUPS.some((group) => group === value);
20
20
 
21
- // The group the Canvas pane is made of. The launcher switch registers it, the panel's
22
- // availability is decided by it, and the server routes on it — named here rather than written
23
- // as `"render"` at each of those sites, so a rename cannot leave one of them silently pointing
24
- // at a group that no longer exists.
25
- export const CANVAS_TOOL_GROUP: ToolGroup = "render";
21
+ // The groups the Canvas pane is made of. The launcher offers a switch per group, the panel's
22
+ // availability is decided by them, and the server routes on them — named here rather than
23
+ // written as `"render"` / `"media"` at each of those sites, so a rename cannot leave one of them
24
+ // silently pointing at a group that no longer exists.
25
+ //
26
+ // `media` is in because its tools DRAW: generateImage and presentMulmoScript land in the same
27
+ // panel a render tool does. It is a separate switch rather than part of one because the two
28
+ // differ in what a call costs — render stops at the pane, media is slow, paid and writes files —
29
+ // and that is exactly the line the grouping exists to draw. Neither media tool is in
30
+ // AUTO_ALLOWED_TOOLS, so enabling the group still leaves Claude Code's permission prompt in
31
+ // front of the spend (same reasoning as presentDocument below).
32
+ export const CANVAS_TOOL_GROUPS: readonly ToolGroup[] = ["render", "media"];
33
+
34
+ // Does a session/directory reach the Canvas at all? Asked of the group list the server reports,
35
+ // whose members arrive as plain strings — validated rather than cast, since an unknown name from
36
+ // a newer server must not count as a canvas group.
37
+ export const hasCanvasGroup = (groups: unknown): boolean =>
38
+ Array.isArray(groups) && groups.some((group) => isToolGroup(group) && CANVAS_TOOL_GROUPS.includes(group));
26
39
 
27
40
  // Which group each GUI tool belongs to.
28
41
  //
@@ -60,6 +73,11 @@ const GROUP_BY_TOOL = new Map<string, ToolGroup>([
60
73
 
61
74
  export const groupOfTool = (toolName: string): ToolGroup | null => GROUP_BY_TOOL.get(toolName) ?? null;
62
75
 
76
+ // Every tool in a group, in the order declared above. The Canvas panel's empty state names them,
77
+ // so a tool added to a group here reaches that list without a second edit — the list had been
78
+ // written out by hand and named two of the four.
79
+ export const toolsInGroup = (group: ToolGroup): string[] => [...GROUP_BY_TOOL].filter(([, g]) => g === group).map(([name]) => name);
80
+
63
81
  // The MCP server id a group is expected to be registered under. `--allowedTools` matches on
64
82
  // `mcp__<server id>__<tool>`, and the id comes from the USER's config key — so this is a
65
83
  // convention the enable-it-for-this-folder affordance has to write, and a user who registers
@@ -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-CscC8Qqr.js";import"./chunk-WYO6CB5R-BlzOfotS-CgOwOaF2.js";import"./chunk-VAUOI2AC-CS9QJ4yz-C1PM97Ei.js";import{n as i,r as a,t as o}from"./chunk-MOJQB5TN-CMZRaeqt-CC-mdXDP.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-3f1dQMCy.js";import"./chunk-WYO6CB5R-BlzOfotS-cPQQuq_p.js";import"./chunk-VAUOI2AC-CS9QJ4yz-xhVI0AT_.js";import{n as i,r as a,t as o}from"./chunk-MOJQB5TN-CMZRaeqt-DvOpObYg.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-3f1dQMCy.js";export{e as createArchitectureServices};