mulmoterminal 1.6.0 → 1.7.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 (117) hide show
  1. package/README.md +27 -11
  2. package/dist/assets/{abnfDiagram-VRR7QNED-6nNByj6v-w5RLkQ22.js → abnfDiagram-VRR7QNED-6nNByj6v-BCJQa4DV.js} +1 -1
  3. package/dist/assets/architecture-TIHT7OUA-CYMWc3UT-DgJ3pu6_.js +1 -0
  4. package/dist/assets/{architectureDiagram-ZJ3FMSHR-Bgnyaj_i-D69YcDkW.js → architectureDiagram-ZJ3FMSHR-Bgnyaj_i-D_Nt7RIE.js} +1 -1
  5. package/dist/assets/{blockDiagram-677ZJIJ3-DQ35o5E4-7uQXieKy.js → blockDiagram-677ZJIJ3-DQ35o5E4-BILj_7MF.js} +1 -1
  6. package/dist/assets/{c4Diagram-LMCZKHZV-ClWZeiWo-EXpL5q8c.js → c4Diagram-LMCZKHZV-ClWZeiWo-CUaWnhEC.js} +1 -1
  7. package/dist/assets/channel-Di5rtkx0-Bi7KHChX.js +1 -0
  8. package/dist/assets/{chunk-32BRIVSS-CCt9wtYd-BBNy9Wsw.js → chunk-32BRIVSS-CCt9wtYd-CH_vt2Gl.js} +1 -1
  9. package/dist/assets/{chunk-52WLFC77-FbBbR4uI-nrizj9KQ.js → chunk-52WLFC77-FbBbR4uI-DyZrk4KQ.js} +1 -1
  10. package/dist/assets/{chunk-C7G6YPKG-C87hlS9c-BeUrCw4a.js → chunk-C7G6YPKG-C87hlS9c-CFx1Arp1.js} +1 -1
  11. package/dist/assets/{chunk-EX3LRPZG-BqGqMXLN-B6S4Nm2k.js → chunk-EX3LRPZG-BqGqMXLN-CiSc3YI0.js} +1 -1
  12. package/dist/assets/{chunk-FWX5IMBZ-BkbSAAuW-DyThgqZX.js → chunk-FWX5IMBZ-BkbSAAuW-B6Frv5LB.js} +2 -2
  13. package/dist/assets/{chunk-HOUHSVGY-Cxu0eDlh-D5RjKEII.js → chunk-HOUHSVGY-Cxu0eDlh-PsDgJqDO.js} +1 -1
  14. package/dist/assets/{chunk-ICXQ74PX-hiraF_Xj-JuRpIiaL.js → chunk-ICXQ74PX-hiraF_Xj-DYPMB6hF.js} +1 -1
  15. package/dist/assets/{chunk-MOJQB5TN-CqxshQHA-D3AD-OQe.js → chunk-MOJQB5TN-CqxshQHA-gM_q16Ft.js} +1 -1
  16. package/dist/assets/{chunk-OGEWGWER-CjCr7ceX-CqjmtDlt.js → chunk-OGEWGWER-CjCr7ceX-9qc1rmAh.js} +1 -1
  17. package/dist/assets/{chunk-PUDLZKDR-Dx6M-vz1-DnwunR7_.js → chunk-PUDLZKDR-Dx6M-vz1-CbyfAYMR.js} +1 -1
  18. package/dist/assets/{chunk-Q4XR5HBZ-CZd-9lTB-CTRA-UzE.js → chunk-Q4XR5HBZ-CZd-9lTB-CHAmO99-.js} +1 -1
  19. package/dist/assets/{chunk-V7JOEXUC-rI0xlC_O-yFVHoSz8.js → chunk-V7JOEXUC-rI0xlC_O-CpbdluPv.js} +1 -1
  20. package/dist/assets/{chunk-VAUOI2AC-DrcykVNK-Bu5JrdaI.js → chunk-VAUOI2AC-DrcykVNK-DFpod4Mi.js} +1 -1
  21. package/dist/assets/{chunk-VR4S4FIN-O6iF8Yvf-bQ7KsnFU.js → chunk-VR4S4FIN-O6iF8Yvf-BDT221yg.js} +1 -1
  22. package/dist/assets/{chunk-WYO6CB5R-B83L_z6I-Db0d_mXD.js → chunk-WYO6CB5R-B83L_z6I-Djv0Pedo.js} +1 -1
  23. package/dist/assets/{chunk-ZGVPDNZ5-BpFv9JSP-D6iQstYB.js → chunk-ZGVPDNZ5-BpFv9JSP-X8DR2YEI.js} +1 -1
  24. package/dist/assets/classDiagram-OUVF2IWQ-BgAZMSbT-B5BBPEcr.js +1 -0
  25. package/dist/assets/classDiagram-v2-EOCWNBFH-DxHTyui1-B5BBPEcr.js +1 -0
  26. package/dist/assets/cynefin-VYW2F7L2-DqA3n9nY-CNt3aNde.js +1 -0
  27. package/dist/assets/{cynefinDiagram-TSTJHNR4-x0-0sQ15-DX3rOamM.js → cynefinDiagram-TSTJHNR4-x0-0sQ15-CDpp4wje.js} +1 -1
  28. package/dist/assets/{dagre-VKFMJZFB-CQdfl-bx-CMvy6K78.js → dagre-VKFMJZFB-CQdfl-bx-MejOSRzt.js} +1 -1
  29. package/dist/assets/{diagram-FQU43EPY-BOSB6VUb-7Cloywn1.js → diagram-FQU43EPY-BOSB6VUb-B55SUPg7.js} +1 -1
  30. package/dist/assets/{diagram-G47NLZAW-DLXrcXsN-BTVMn6-x.js → diagram-G47NLZAW-DLXrcXsN-BtHyFrEv.js} +1 -1
  31. package/dist/assets/{diagram-NH7WQ7WH-BMQp1rkF-YaK2dWz0.js → diagram-NH7WQ7WH-BMQp1rkF-DAo6PIHz.js} +1 -1
  32. package/dist/assets/{diagram-OA4YK3LP-D1wQ0vUj-D3A1N794.js → diagram-OA4YK3LP-D1wQ0vUj-BOP-rGWN.js} +1 -1
  33. package/dist/assets/{diagram-WEI45ONY-RR0DpF8R-mQyI-Ztc.js → diagram-WEI45ONY-RR0DpF8R-DMkTz0bs.js} +1 -1
  34. package/dist/assets/{ebnfDiagram-CCIWWBDH-M123uVJ8-6QHlDAzo.js → ebnfDiagram-CCIWWBDH-M123uVJ8-DYQvurZD.js} +1 -1
  35. package/dist/assets/{erDiagram-Q63AITRT-BWx_-PXG-Dm9LOTEX.js → erDiagram-Q63AITRT-BWx_-PXG-NRsUZc6C.js} +1 -1
  36. package/dist/assets/eventmodeling-45OFAUF4-_BVSjAXf-DckF6nty.js +1 -0
  37. package/dist/assets/flowDiagram-23GEKE2U-BeOc_anm-BRAAyPH5.js +1 -0
  38. package/dist/assets/{ganttDiagram-NO4QXBWP-BOoJ1eTw-DF8P-WOj.js → ganttDiagram-NO4QXBWP-BOoJ1eTw-im9hAj69.js} +1 -1
  39. package/dist/assets/gitGraph-TEB2WS4Q-CH12KLTN-C3PN2LIe.js +1 -0
  40. package/dist/assets/{gitGraphDiagram-IHSO6WYX-B2CJhk_G-C1VDCiQA.js → gitGraphDiagram-IHSO6WYX-B2CJhk_G-BZV7bMgx.js} +1 -1
  41. package/dist/assets/index-Cue6y3NP.css +1 -0
  42. package/dist/assets/index-JiqffS7s.js +617 -0
  43. package/dist/assets/info-DKCQHKI2-Cbw3mbiK-BAo5Fb7g.js +1 -0
  44. package/dist/assets/{infoDiagram-FWYZ7A6U-Mp1X3pBP-BPoQawfx.js → infoDiagram-FWYZ7A6U-Mp1X3pBP-n9QeRL84.js} +1 -1
  45. package/dist/assets/{ishikawaDiagram-FXEZZL3T-BNG7tkJu-lE_jc2TT.js → ishikawaDiagram-FXEZZL3T-BNG7tkJu-BaCscIGZ.js} +1 -1
  46. package/dist/assets/{journeyDiagram-5HDEW3XC-Dbp_hY9X-CO0R6cU-.js → journeyDiagram-5HDEW3XC-Dbp_hY9X-Dt8UlK_2.js} +1 -1
  47. package/dist/assets/{kanban-definition-HUTT4EX6-DSTc5u3q-CxGAv9XA.js → kanban-definition-HUTT4EX6-DSTc5u3q-DUVHu497.js} +1 -1
  48. package/dist/assets/{lib-DRGyh9Q-.js → lib-1OP8J0D5.js} +1 -1
  49. package/dist/assets/{line-B1wBwzrY-CRPsJOzA.js → line-B1wBwzrY-BcbT6-ul.js} +1 -1
  50. package/dist/assets/{marp--aqCYout.js → marp-GfniLWYo.js} +1 -1
  51. package/dist/assets/{mermaid-parser.core-DC7NPJ_M-4_BR6vAg.js → mermaid-parser.core-DC7NPJ_M-B3PfPUiA.js} +2 -2
  52. package/dist/assets/{mermaid.core-DZM3Ha-E-QA2iKs10.js → mermaid.core-DZM3Ha-E-BWGnyKvd.js} +3 -3
  53. package/dist/assets/{mindmap-definition-LN4V7U3C-DYtgcMsY-dUsG7ytl.js → mindmap-definition-LN4V7U3C-DYtgcMsY-Bi04e3Dh.js} +1 -1
  54. package/dist/assets/packet-7NZHBO7P-lwb58iYx-B_vqCkVp.js +1 -0
  55. package/dist/assets/{pegDiagram-2B236MQR-C43eIpKM-C0qYy0kY.js → pegDiagram-2B236MQR-C43eIpKM-D5nABd5d.js} +1 -1
  56. package/dist/assets/pie-RZYD4A2V-B1UWb4Gu-CAPwLWC2.js +1 -0
  57. package/dist/assets/{pieDiagram-ENE6RG2P-BkTqgJyR-p9ruWXka.js → pieDiagram-ENE6RG2P-BkTqgJyR-BYsX0pmp.js} +1 -1
  58. package/dist/assets/{quadrantDiagram-ABIIQ3AL-Bm1Zjm45-D6JMmK1K.js → quadrantDiagram-ABIIQ3AL-Bm1Zjm45-CpkA29IU.js} +1 -1
  59. package/dist/assets/radar-I7S5WNFK-7CKcb_l--YAwbZSSO.js +1 -0
  60. package/dist/assets/railroad-3IZDKUUU-gCySKdnW-DWNa-BLR.js +1 -0
  61. package/dist/assets/railroad-abnf-AHOZXSZD-BophH4r--8kHN0m0s.js +1 -0
  62. package/dist/assets/railroad-ebnf-EBAXGLYW-AZNjl_Zu-BeQb-Rfm.js +1 -0
  63. package/dist/assets/railroad-peg-LSFZ7HO6-BSiEEyeb-fqlxInkH.js +1 -0
  64. package/dist/assets/{railroadDiagram-RFXS5EU6-BkfbdeAs-DKGrmtAb.js → railroadDiagram-RFXS5EU6-BkfbdeAs-DljCkwrn.js} +1 -1
  65. package/dist/assets/{requirementDiagram-TGXJPOKE-CrGTTjYg-_rK4hExQ.js → requirementDiagram-TGXJPOKE-CrGTTjYg-C9JLg12J.js} +1 -1
  66. package/dist/assets/{sankeyDiagram-HTMAVEWB-rWXPf03Z-CtaFLD0A.js → sankeyDiagram-HTMAVEWB-rWXPf03Z-DDL7fuaw.js} +1 -1
  67. package/dist/assets/{sequenceDiagram-DBY2YBRQ-nkJYWO2m-Cfwgbl-y.js → sequenceDiagram-DBY2YBRQ-nkJYWO2m-Pyu_gxuA.js} +1 -1
  68. package/dist/assets/{stateDiagram-2N3HPSRC-T4-clK8b-DHGQRUOm.js → stateDiagram-2N3HPSRC-T4-clK8b-CYg9qZQS.js} +1 -1
  69. package/dist/assets/stateDiagram-v2-6OUMAXLB-DIp7nhRd-DPkjtkgF.js +1 -0
  70. package/dist/assets/{swimlanes-5IMT3BWC-HmQNEntu-D869r1NM.js → swimlanes-5IMT3BWC-HmQNEntu-DEKxjcNL.js} +1 -1
  71. package/dist/assets/swimlanesDiagram-G3AALYLV-BeoZhwg7-B2wFtrEU.js +8 -0
  72. package/dist/assets/{timeline-definition-FHXFAJF6-CNc9jSTP-BeazEwi2.js → timeline-definition-FHXFAJF6-CNc9jSTP-DpFI7Gdx.js} +1 -1
  73. package/dist/assets/treeView-QDETBFTQ-nIQcG1h9-CxCShMBw.js +1 -0
  74. package/dist/assets/treemap-6X3UGDF4-BnsvC8yL-BFi0W9rh.js +1 -0
  75. package/dist/assets/{vennDiagram-L72KCM5P-Dr3pTJ_0-CMOqalF2.js → vennDiagram-L72KCM5P-Dr3pTJ_0-Dmra9rkk.js} +1 -1
  76. package/dist/assets/wardley-OPB4EBWU-8Odxkx6V-2Yl3qxOe.js +1 -0
  77. package/dist/assets/{wardleyDiagram-EHGQE667-DSFc7ZZa-CEPlNlLn.js → wardleyDiagram-EHGQE667-DSFc7ZZa-CbUid2zT.js} +1 -1
  78. package/dist/assets/{xychartDiagram-FW5EYKEG-BP0Nn4Pp-Bvdb_Uk8.js → xychartDiagram-FW5EYKEG-BP0Nn4Pp-BJc0ZRNl.js} +1 -1
  79. package/dist/index.html +2 -2
  80. package/package.json +1 -1
  81. package/server/backends/remoteHost/attachment-path.ts +31 -0
  82. package/server/backends/remoteHost/attachmentStore.ts +1 -24
  83. package/server/backends/remoteHost/sessionActivity.ts +11 -1
  84. package/server/index.ts +15 -0
  85. package/server/infra/process-guards.ts +32 -0
  86. package/server/routes/app-routes.ts +3 -0
  87. package/server/routes/hook-routes.ts +8 -0
  88. package/server/routes/session-routes.ts +5 -3
  89. package/server/routes/ws-routes.ts +14 -1
  90. package/server/session/draft-injection.ts +4 -4
  91. package/server/session/draft-plan.ts +21 -0
  92. package/server/session/lifecycle.ts +12 -3
  93. package/server/session/session-list.ts +8 -6
  94. package/server/session/work-phase-tracker.ts +56 -0
  95. package/dist/assets/architecture-TIHT7OUA-CYMWc3UT-BUaZ0MSo.js +0 -1
  96. package/dist/assets/channel-Di5rtkx0-C_m9yiey.js +0 -1
  97. package/dist/assets/classDiagram-OUVF2IWQ-BgAZMSbT-DEFx7H3k.js +0 -1
  98. package/dist/assets/classDiagram-v2-EOCWNBFH-DxHTyui1-DEFx7H3k.js +0 -1
  99. package/dist/assets/cynefin-VYW2F7L2-DqA3n9nY-BCw_wwOv.js +0 -1
  100. package/dist/assets/eventmodeling-45OFAUF4-_BVSjAXf-CAJF7-9m.js +0 -1
  101. package/dist/assets/flowDiagram-23GEKE2U-BeOc_anm-CLQEzYDX.js +0 -1
  102. package/dist/assets/gitGraph-TEB2WS4Q-CH12KLTN-CuWNblKk.js +0 -1
  103. package/dist/assets/index-BFfKUWpL.js +0 -617
  104. package/dist/assets/index-aQgV74tC.css +0 -1
  105. package/dist/assets/info-DKCQHKI2-Cbw3mbiK-rc7lkPBD.js +0 -1
  106. package/dist/assets/packet-7NZHBO7P-lwb58iYx-BRjtDgmF.js +0 -1
  107. package/dist/assets/pie-RZYD4A2V-B1UWb4Gu-DjuYUfZC.js +0 -1
  108. package/dist/assets/radar-I7S5WNFK-7CKcb_l--BSS9MxXL.js +0 -1
  109. package/dist/assets/railroad-3IZDKUUU-gCySKdnW-hpLOScUf.js +0 -1
  110. package/dist/assets/railroad-abnf-AHOZXSZD-BophH4r--D67cs0T8.js +0 -1
  111. package/dist/assets/railroad-ebnf-EBAXGLYW-AZNjl_Zu-D64IlM4-.js +0 -1
  112. package/dist/assets/railroad-peg-LSFZ7HO6-BSiEEyeb-Da5GoZb9.js +0 -1
  113. package/dist/assets/stateDiagram-v2-6OUMAXLB-DIp7nhRd-Ud1cpdGy.js +0 -1
  114. package/dist/assets/swimlanesDiagram-G3AALYLV-BeoZhwg7-DUGuyc0H.js +0 -8
  115. package/dist/assets/treeView-QDETBFTQ-nIQcG1h9-u70as5aK.js +0 -1
  116. package/dist/assets/treemap-6X3UGDF4-BnsvC8yL-CkNsgl3O.js +0 -1
  117. package/dist/assets/wardley-OPB4EBWU-8Odxkx6V-DsDgGaTC.js +0 -1
package/README.md CHANGED
@@ -12,6 +12,12 @@ ping to your phone when a task finishes. One `npx` command, no Electron, no conf
12
12
  npx mulmoterminal # starts on http://localhost:34567 and opens your browser
13
13
  ```
14
14
 
15
+ - 📖 **User guide:** [English](https://receptron.github.io/mulmoterminal/guide/en/) — the
16
+ grid view, everyday workflows, the full feature list, configuration, and mobile push
17
+ notifications.
18
+ - 📖 **ユーザーガイド:** [日本語](https://receptron.github.io/mulmoterminal/guide/ja/) —
19
+ グリッドの使い方・日々のワークフロー・機能一覧・設定・スマホ通知の設定はこちら。
20
+
15
21
  ![MulmoTerminal's grid view — four live Claude sessions running side by side, each in its own color-coded project](https://raw.githubusercontent.com/receptron/mulmoterminal/main/docs/guide/images/grid-2x2-live.png)
16
22
 
17
23
  *The grid is a **cockpit for parallel agents** — here, four live Claude sessions, each in its own color-coded project. Every cell's header carries what you need to triage at a glance: **model · context %**, **token counts** (`⇡in ⇣out`), the **git branch / changes** chip, and an AI summary of what the agent is doing. A cell's **border color signals state** — working / done (blue), needs-you (amber — e.g. waiting on a permission), idle — with an attention chime so a stuck cell off-screen still pulls you back. Supervise many; only step in where you're called.*
@@ -21,14 +27,17 @@ npx mulmoterminal # starts on http://localhost:34567 and opens your brows
21
27
  - **See every agent at once.** A grid of live sessions, each cell color-coded by state —
22
28
  **working** (blue), **blocked / needs a permission** (amber), **done, unreviewed** (blue),
23
29
  **idle** — with an attention chime and a toolbar tally, so an off-screen agent that's stuck
24
- never slips past you. Stop babysitting one terminal; supervise ten.
30
+ never slips past you. Stop babysitting one terminal; supervise ten. Zoom into one and the
31
+ **cockpit roster** keeps everyone else in view — one text row per session with its AI
32
+ summary, last prompt, latest reply, and the branch's **PR phase** (draft / CI fail /
33
+ ready / merged).
25
34
  - **A GUI for your agents, not just a terminal.** Beside the terminal, a **Canvas** panel
26
35
  renders what an agent produces over MCP — **documents, forms, charts, generated images,
27
36
  HTML, collection cards** — each drawn by its own plugin. The agent doesn't just print
28
37
  text; it hands you an interface.
29
- - **Get pulled back from anywhere.** A finished background task sends a **Web Push to your
30
- phone**, and the **RemoteHost** companion lets you watch and start sessions from the phone
31
- itself — walk away, get pinged, jump back in.
38
+ - **Get pulled back from anywhere.** A finished or input-waiting — task sends a **Web Push
39
+ to your phone**, and the **RemoteHost** companion lets you watch sessions and answer with a
40
+ tap (**yes / no / continue**) from the phone itself — walk away, get pinged, jump back in.
32
41
  - **Nothing is lost on a restart.** With `tmux`, every session survives a server crash,
33
42
  restart, or `node --watch` reload — a mid-turn agent, a long build, a dev server all keep
34
43
  running and reattach when you come back.
@@ -42,6 +51,12 @@ npx mulmoterminal # starts on http://localhost:34567 and opens your brows
42
51
  `staging` in amber), a configurable header (buttons + info chips), custom attention sounds,
43
52
  and Run / Skill menus to launch a project's scripts and `.claude/skills` right inside a cell.
44
53
 
54
+ ![The cockpit roster — a one-row-per-session summary list beside the enlarged terminal](https://raw.githubusercontent.com/receptron/mulmoterminal/main/docs/guide/images/cockpit-roster.png)
55
+
56
+ *Zoomed in, the **cockpit roster** replaces thumbnails with information: every session as a
57
+ text row — directory, AI summary, your last prompt, the agent's latest reply, a status word,
58
+ and the branch's **PR phase** badge. Click a row to swap the enlarged terminal.*
59
+
45
60
  ### What it is, under the hood
46
61
 
47
62
  Each session runs as a real PTY on the server (the agent CLI in a pseudo-terminal) and is
@@ -113,8 +128,9 @@ for the details and model notes.
113
128
  > `google login`). Reading/creating events on your primary calendar keeps working without re-linking.
114
129
 
115
130
  A global install isn't auto-updated, so on startup MulmoTerminal checks npm and
116
- prints a one-line notice when a newer version is available (`npm i -g mulmoterminal`
117
- to update). Disable with `MULMOTERMINAL_NO_UPDATE_CHECK=1` (or `NO_UPDATE_NOTIFIER=1`).
131
+ prints a one-line notice when a newer version is available and the web toolbar shows a
132
+ clickable **update badge** with the exact command for your install (`npm i -g mulmoterminal`,
133
+ or `git pull` for a clone). Disable with `MULMOTERMINAL_NO_UPDATE_CHECK=1` (or `NO_UPDATE_NOTIFIER=1`).
118
134
 
119
135
  Options: `--cwd <dir>` (working directory — relative paths allowed; defaults to the
120
136
  directory you run the command from), `--port <n>` (default 34567), `--no-open`,
@@ -332,7 +348,7 @@ building the sandbox spawn, so they have no effect unless `MULMOTERMINAL_SANDBOX
332
348
  | -------- | ---------- |
333
349
  | Frontend | Vue 3 (`<script setup>` + TypeScript), Vue Router, Vite, xterm.js (`@xterm/*`), CodeMirror 6, socket.io-client |
334
350
  | Backend | Node (ESM, TypeScript run via `tsx`), Express 5, `ws` (terminal WebSocket), `node-pty`, socket.io, `@modelcontextprotocol/sdk` (in-process GUI MCP) |
335
- | Plugins | GUI-protocol Vue plugins (`@mulmoclaude/*`, `@mulmochat-plugin/*`): markdown, form, image, chart, HTML, collection, accounting |
351
+ | Plugins | GUI-protocol Vue plugins (`@mulmoclaude/*`, `@mulmochat-plugin/*`): markdown, form, image, chart, HTML, collection, accounting, mulmoscript (MulmoCast video/slides), google |
336
352
  | Tests | Vitest + @vue/test-utils + jsdom |
337
353
 
338
354
  Requires **Node ≥ 22.9** (uses `node --env-file-if-exists`) and the `claude` CLI on `PATH`.
@@ -692,7 +708,7 @@ Each grid cell's header shows two badges for its session, refreshed when a turn
692
708
 
693
709
  - **Context badge** — e.g. `Opus · ctx 35%`: the model family plus how full its context
694
710
  window is (the *last* turn's input + cache tokens ÷ the model's window — **1M** for
695
- current-gen Opus / Sonnet / Fable, **200k** otherwise). A session running on a
711
+ current-gen Opus / Sonnet / Fable / Mythos, **200k** otherwise). A session running on a
696
712
  [provider model](#agents-claude--codex) shows that model's name and its published window
697
713
  (`Kimi K2.7 Code · ctx 12%`); a model in neither list keeps the label and hides the %,
698
714
  since the window is never guessed.
@@ -724,9 +740,9 @@ mirrors the active session, and replays history on re-select. Plugins reach the
724
740
  an **in-process MCP server** served per session at `POST /api/mcp/:sessionId` (server name
725
741
  `mulmoterminal-gui`) — which works from the host *or* the Docker sandbox (over
726
742
  `host.docker.internal`). Which plugins load is gated by `plugins/plugins.json`; the shipped
727
- set includes markdown, form, image generation (needs `GEMINI_API_KEY`), chart, HTML, and
728
- collection views. You can also merge your **own HTTP MCP servers** into the single-view
729
- session via Settings → `userMcpServers`.
743
+ set includes markdown, form, image generation (needs `GEMINI_API_KEY`), chart, HTML,
744
+ collection, and mulmoscript (MulmoCast video/slides/PDF playback) views. You can also merge
745
+ your **own HTTP MCP servers** into the single-view session via Settings → `userMcpServers`.
730
746
 
731
747
  **Wiki.** The toolbar **Wiki** button opens a read-only browser over `<workspace>/data/wiki/`
732
748
  — an **index** (tag-filterable page catalog), rendered **pages** with `[[wiki links]]` and
@@ -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-DC7NPJ_M-4_BR6vAg.js";import"./chunk-WYO6CB5R-B83L_z6I-Db0d_mXD.js";import"./chunk-VAUOI2AC-DrcykVNK-Bu5JrdaI.js";import{n as i,r as a,t as o}from"./chunk-MOJQB5TN-CqxshQHA-D3AD-OQe.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-DC7NPJ_M-B3PfPUiA.js";import"./chunk-WYO6CB5R-B83L_z6I-Djv0Pedo.js";import"./chunk-VAUOI2AC-DrcykVNK-DFpod4Mi.js";import{n as i,r as a,t as o}from"./chunk-MOJQB5TN-CqxshQHA-gM_q16Ft.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-DC7NPJ_M-B3PfPUiA.js";export{e as createArchitectureServices};