mulmoterminal 4.6.1 → 4.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 (146) hide show
  1. package/README.md +33 -6
  2. package/common/agentSessionList.ts +1 -0
  3. package/common/guiMcpAgents.ts +10 -0
  4. package/common/launchAgent.ts +1 -1
  5. package/common/modelPresets.ts +10 -0
  6. package/common/sessionAgent.ts +3 -2
  7. package/dist/assets/{abnfDiagram-VRR7QNED-WSmThe6b-CBO7sBGR.js → abnfDiagram-VRR7QNED-WSmThe6b-D7o5fw1r.js} +1 -1
  8. package/dist/assets/architecture-TIHT7OUA-Cqhmai3f-R3ZCNmlM.js +1 -0
  9. package/dist/assets/{architectureDiagram-ZJ3FMSHR-Tj3i7Oow-CYG4G6Ik.js → architectureDiagram-ZJ3FMSHR-Tj3i7Oow-qFko9kCE.js} +1 -1
  10. package/dist/assets/{blockDiagram-677ZJIJ3-c-hNYBhI-JIMzBO4l.js → blockDiagram-677ZJIJ3-c-hNYBhI-CixyWpNJ.js} +1 -1
  11. package/dist/assets/{c4Diagram-LMCZKHZV-WIGVajf5-RTNQrsuw.js → c4Diagram-LMCZKHZV-WIGVajf5-DAX3Om5N.js} +1 -1
  12. package/dist/assets/channel-OqG5cGJi-BwbBOK-P.js +1 -0
  13. package/dist/assets/{chunk-32BRIVSS-CtSq3QOR-BlWLJRiy.js → chunk-32BRIVSS-CtSq3QOR-BffBZP9f.js} +1 -1
  14. package/dist/assets/{chunk-52WLFC77-2Up0T-6t-BdzTLAmw.js → chunk-52WLFC77-2Up0T-6t-oG1jhM8x.js} +1 -1
  15. package/dist/assets/{chunk-C7G6YPKG-ivengO-7-DPCDeWnS.js → chunk-C7G6YPKG-ivengO-7-BIJz2IVz.js} +1 -1
  16. package/dist/assets/{chunk-EX3LRPZG-BHoWQ6W8-J1DVewfV.js → chunk-EX3LRPZG-BHoWQ6W8-Xx1eDNWz.js} +1 -1
  17. package/dist/assets/{chunk-FWX5IMBZ-PvRXPghr-DbyxSH7i.js → chunk-FWX5IMBZ-PvRXPghr-CsrDNNhN.js} +2 -2
  18. package/dist/assets/{chunk-HOUHSVGY-A3_zwY4q-CBRkk157.js → chunk-HOUHSVGY-A3_zwY4q-DmY2m0Ak.js} +1 -1
  19. package/dist/assets/{chunk-ICXQ74PX-vzZqgurQ-CkY3Cm-_.js → chunk-ICXQ74PX-vzZqgurQ--OQCYCJd.js} +1 -1
  20. package/dist/assets/{chunk-MOJQB5TN-CorQ_Pl1-C9s38qkp.js → chunk-MOJQB5TN-CorQ_Pl1-Bo-W29fw.js} +1 -1
  21. package/dist/assets/{chunk-OGEWGWER-BVhfs7WG-DUXfIM9n.js → chunk-OGEWGWER-BVhfs7WG-C6-xivCq.js} +1 -1
  22. package/dist/assets/{chunk-PUDLZKDR-CJo7KQJ3-J-MBRM6o.js → chunk-PUDLZKDR-CJo7KQJ3-B3NhAbN0.js} +1 -1
  23. package/dist/assets/{chunk-Q4XR5HBZ-DLkq8ZGO-sBmUgQuZ.js → chunk-Q4XR5HBZ-DLkq8ZGO-pa6s8c6B.js} +1 -1
  24. package/dist/assets/{chunk-V7JOEXUC-DqefuUOb-DFq-Kutz.js → chunk-V7JOEXUC-DqefuUOb-dAvwkopm.js} +1 -1
  25. package/dist/assets/{chunk-VAUOI2AC-BKx35BBi-Bi2sMyOB.js → chunk-VAUOI2AC-BKx35BBi-DF4roMbC.js} +1 -1
  26. package/dist/assets/{chunk-VR4S4FIN-DpJgr4Ur-0cTXBZH0.js → chunk-VR4S4FIN-DpJgr4Ur-OJFNZPOB.js} +1 -1
  27. package/dist/assets/{chunk-WYO6CB5R-nS6zX9ct-Dttxo6Qs.js → chunk-WYO6CB5R-nS6zX9ct-CEyECF4F.js} +1 -1
  28. package/dist/assets/{chunk-ZGVPDNZ5-DNtiHxpJ-B5WBta3u.js → chunk-ZGVPDNZ5-DNtiHxpJ-Du2jEWIg.js} +1 -1
  29. package/dist/assets/classDiagram-OUVF2IWQ-C6h0nbT3-9x_ObMZR.js +1 -0
  30. package/dist/assets/classDiagram-v2-EOCWNBFH-CzsXJ_wA-9x_ObMZR.js +1 -0
  31. package/dist/assets/cynefin-VYW2F7L2-DvSvuXnG-CUSoofIc.js +1 -0
  32. package/dist/assets/{cynefinDiagram-TSTJHNR4-969y1qZK-DQgX1EX-.js → cynefinDiagram-TSTJHNR4-969y1qZK-Czc3nk-B.js} +1 -1
  33. package/dist/assets/{dagre-VKFMJZFB-CZfgAZFk-BqyEfjmp.js → dagre-VKFMJZFB-CZfgAZFk-BAU9MQjJ.js} +1 -1
  34. package/dist/assets/{diagram-FQU43EPY-CSdnleGM-D1XZK34Y.js → diagram-FQU43EPY-CSdnleGM-DYTiEZKM.js} +1 -1
  35. package/dist/assets/{diagram-G47NLZAW-DKYe-Mwx-Cbz-8PBv.js → diagram-G47NLZAW-DKYe-Mwx-DDc61ZrT.js} +1 -1
  36. package/dist/assets/{diagram-NH7WQ7WH-DMasKpwa-DnEIw3Sx.js → diagram-NH7WQ7WH-DMasKpwa-urCd5zHO.js} +1 -1
  37. package/dist/assets/{diagram-OA4YK3LP-CSyc0BDR-Btj5hvma.js → diagram-OA4YK3LP-CSyc0BDR-HYgoBJgE.js} +1 -1
  38. package/dist/assets/{diagram-WEI45ONY-CcJW2fNK-C5jAHtmT.js → diagram-WEI45ONY-CcJW2fNK-DgDEbPeN.js} +1 -1
  39. package/dist/assets/{dist-BmY1PubB.js → dist-BmKUp6B_.js} +1 -1
  40. package/dist/assets/{dist-CB8qi_Y9.js → dist-C5Zo-KHU.js} +1 -1
  41. package/dist/assets/{dist-Y4oDndO9.js → dist-De7z8hYT.js} +1 -1
  42. package/dist/assets/{dist-BpSI4VvT.js → dist-DmeqT16V.js} +1 -1
  43. package/dist/assets/{ebnfDiagram-CCIWWBDH-CeBUH2N0-5KApqrGZ.js → ebnfDiagram-CCIWWBDH-CeBUH2N0-CVbiuH2Y.js} +1 -1
  44. package/dist/assets/{erDiagram-Q63AITRT-1OOp34oV-Bi3p-XfW.js → erDiagram-Q63AITRT-1OOp34oV-BaP_H4cL.js} +1 -1
  45. package/dist/assets/eventmodeling-45OFAUF4-jdctDg0T-COMVRYlu.js +1 -0
  46. package/dist/assets/flowDiagram-23GEKE2U-DK0InIny-BGzwORBA.js +1 -0
  47. package/dist/assets/{ganttDiagram-NO4QXBWP-DQT88dUZ-CuriOslb.js → ganttDiagram-NO4QXBWP-DQT88dUZ-DtByhyeF.js} +1 -1
  48. package/dist/assets/gitGraph-TEB2WS4Q-C4cKwl5j-p99B1sB1.js +1 -0
  49. package/dist/assets/{gitGraphDiagram-IHSO6WYX-CeZGS4qi-CCZTshH_.js → gitGraphDiagram-IHSO6WYX-CeZGS4qi-CVchYIt9.js} +1 -1
  50. package/dist/assets/{index-CHAgxBbv.js → index-BShBNIbp.js} +12 -12
  51. package/dist/assets/info-DKCQHKI2-DPUCBYWS-B3Xogxjv.js +1 -0
  52. package/dist/assets/{infoDiagram-FWYZ7A6U-BDt8lBTy-dGahtpJc.js → infoDiagram-FWYZ7A6U-BDt8lBTy-CissNDjy.js} +1 -1
  53. package/dist/assets/{ishikawaDiagram-FXEZZL3T-DOHYs_AA-vfSaShVr.js → ishikawaDiagram-FXEZZL3T-DOHYs_AA-CFtjTBXT.js} +1 -1
  54. package/dist/assets/{journeyDiagram-5HDEW3XC-B33IW9yy-BOhaiV65.js → journeyDiagram-5HDEW3XC-B33IW9yy-BcIIur36.js} +1 -1
  55. package/dist/assets/{kanban-definition-HUTT4EX6-Bkdm46eX-BaUbZMoA.js → kanban-definition-HUTT4EX6-Bkdm46eX-De883A50.js} +1 -1
  56. package/dist/assets/{lib-hy6qj_p5.js → lib-B-7XHKN-.js} +1 -1
  57. package/dist/assets/{line-Dy_Qlcgo-JNJrqeXG.js → line-Dy_Qlcgo-YN10axId.js} +1 -1
  58. package/dist/assets/{marp-D5gvGPP_.js → marp-jVDysiSn.js} +1 -1
  59. package/dist/assets/{mermaid-parser.core-C1baW7NG-B11a01NO.js → mermaid-parser.core-C1baW7NG-D6V0bamn.js} +2 -2
  60. package/dist/assets/{mermaid.core-C09q4TmN-Cu9Teakx.js → mermaid.core-C09q4TmN-2yfF6I6y.js} +3 -3
  61. package/dist/assets/{mindmap-definition-LN4V7U3C-bfYIhPQ0-Bf8Ao97t.js → mindmap-definition-LN4V7U3C-bfYIhPQ0-CKAbVaUS.js} +1 -1
  62. package/dist/assets/packet-7NZHBO7P-CC7His0F-DK0gG3W_.js +1 -0
  63. package/dist/assets/{pegDiagram-2B236MQR-CZQOKUMC-_HGU9_9X.js → pegDiagram-2B236MQR-CZQOKUMC-CC0RIOMO.js} +1 -1
  64. package/dist/assets/pie-RZYD4A2V-CCrcq2sL-tVbhk8PH.js +1 -0
  65. package/dist/assets/{pieDiagram-ENE6RG2P-DiVKPdHE-S_FqPflu.js → pieDiagram-ENE6RG2P-DiVKPdHE-PJb2uZUl.js} +1 -1
  66. package/dist/assets/{quadrantDiagram-ABIIQ3AL-CbPY3kXI-DpxkRpSk.js → quadrantDiagram-ABIIQ3AL-CbPY3kXI-CpeIJ5cW.js} +1 -1
  67. package/dist/assets/radar-I7S5WNFK-C5TUrpHf-C6nl9qN3.js +1 -0
  68. package/dist/assets/railroad-3IZDKUUU-CGuuFEd8-B0tG64BI.js +1 -0
  69. package/dist/assets/railroad-abnf-AHOZXSZD-DuoCSFZY-xn6rR9WF.js +1 -0
  70. package/dist/assets/railroad-ebnf-EBAXGLYW-ig-DG9e_-Cf1RsQF2.js +1 -0
  71. package/dist/assets/railroad-peg-LSFZ7HO6-BkBgpyvu-DS1TVkAn.js +1 -0
  72. package/dist/assets/{railroadDiagram-RFXS5EU6-CFRaQzr0-BDrUAcXX.js → railroadDiagram-RFXS5EU6-CFRaQzr0-_qHVckh1.js} +1 -1
  73. package/dist/assets/{requirementDiagram-TGXJPOKE-BiIDduje-DZNC6u3V.js → requirementDiagram-TGXJPOKE-BiIDduje-DGWofb8o.js} +1 -1
  74. package/dist/assets/{sankeyDiagram-HTMAVEWB-DcK87A5Y-B3nqjSin.js → sankeyDiagram-HTMAVEWB-DcK87A5Y-Bi4ngM9j.js} +1 -1
  75. package/dist/assets/{sequenceDiagram-DBY2YBRQ-DgEQYcvc-DjRWhNfq.js → sequenceDiagram-DBY2YBRQ-DgEQYcvc-D1J0YDNs.js} +1 -1
  76. package/dist/assets/{stateDiagram-2N3HPSRC-Bg7EXtW2-TOQBisWT.js → stateDiagram-2N3HPSRC-Bg7EXtW2-DAsjkoLJ.js} +1 -1
  77. package/dist/assets/stateDiagram-v2-6OUMAXLB-BjhArXP_-ByBnkuoH.js +1 -0
  78. package/dist/assets/{swimlanes-5IMT3BWC-CKORDKr0-N0ObHGIY.js → swimlanes-5IMT3BWC-CKORDKr0-DXiMSf2W.js} +1 -1
  79. package/dist/assets/swimlanesDiagram-G3AALYLV-CyvIfl1o-rxdxX3BL.js +8 -0
  80. package/dist/assets/{timeline-definition-FHXFAJF6-BM3Iky2r-BUQRFfDw.js → timeline-definition-FHXFAJF6-BM3Iky2r-DOheaxIs.js} +1 -1
  81. package/dist/assets/treeView-QDETBFTQ-CqfT0I1z-RLAgEKh2.js +1 -0
  82. package/dist/assets/treemap-6X3UGDF4-CiJkiGWo-YdjbZwx5.js +1 -0
  83. package/dist/assets/{vennDiagram-L72KCM5P-VNmAhEFP-C7cK3jF6.js → vennDiagram-L72KCM5P-VNmAhEFP-C2GWgfPO.js} +1 -1
  84. package/dist/assets/wardley-OPB4EBWU-D1tuVHAV-DfKSfsi1.js +1 -0
  85. package/dist/assets/{wardleyDiagram-EHGQE667-BkHQpyFm-C0IlB8lV.js → wardleyDiagram-EHGQE667-BkHQpyFm-C-h5twdG.js} +1 -1
  86. package/dist/assets/{xychartDiagram-FW5EYKEG-Yz-8aLqK-B5fYxzV_.js → xychartDiagram-FW5EYKEG-Yz-8aLqK-CUZcHWQQ.js} +1 -1
  87. package/dist/index.html +1 -1
  88. package/package.json +1 -1
  89. package/server/agents/claude-args.ts +21 -8
  90. package/server/agents/grok-usage.ts +1 -5
  91. package/server/agents/muse-args.ts +52 -0
  92. package/server/agents/muse-mcp.ts +236 -0
  93. package/server/agents/muse-session.ts +148 -0
  94. package/server/agents/muse-usage.ts +92 -0
  95. package/server/agents/muse.ts +7 -0
  96. package/server/agents/registry.ts +2 -0
  97. package/server/agents/types.ts +1 -1
  98. package/server/agents/usage-count.ts +18 -0
  99. package/server/backends/collections.ts +9 -3
  100. package/server/backends/remoteHost/terminalScreen.ts +1 -1
  101. package/server/index.ts +9 -0
  102. package/server/infra/process-tree.ts +37 -0
  103. package/server/infra/spawnCapture.ts +9 -2
  104. package/server/infra/tmux.ts +27 -0
  105. package/server/mcp/bridge.mjs +87 -14
  106. package/server/routes/app-routes.ts +3 -0
  107. package/server/routes/mcp-routes.ts +40 -0
  108. package/server/routes/plugin-routes.ts +11 -4
  109. package/server/routes/routeParams.ts +2 -1
  110. package/server/routes/session-routes.ts +44 -1
  111. package/server/routes/terminal-ws-path.ts +7 -1
  112. package/server/routes/ws-routes.ts +72 -7
  113. package/server/session/agent-badges.ts +45 -0
  114. package/server/session/background-chat.ts +2 -1
  115. package/server/session/bridge-session.ts +99 -0
  116. package/server/session/lifecycle.ts +4 -0
  117. package/server/session/mcp-config.ts +7 -0
  118. package/server/session/registry.ts +8 -0
  119. package/server/session/session-reads.ts +6 -5
  120. package/server/session/session-settings.ts +38 -8
  121. package/server/session/spawn-claude.ts +11 -6
  122. package/server/session/spawn-deps.ts +2 -0
  123. package/server/session/spawn-muse.ts +120 -0
  124. package/server/session/spawners.ts +2 -0
  125. package/server/session/surviving-sessions.ts +4 -3
  126. package/dist/assets/architecture-TIHT7OUA-Cqhmai3f-BVPuJja5.js +0 -1
  127. package/dist/assets/channel-OqG5cGJi-C1zDkGpX.js +0 -1
  128. package/dist/assets/classDiagram-OUVF2IWQ-C6h0nbT3-DY_MwKzV.js +0 -1
  129. package/dist/assets/classDiagram-v2-EOCWNBFH-CzsXJ_wA-DY_MwKzV.js +0 -1
  130. package/dist/assets/cynefin-VYW2F7L2-DvSvuXnG-DYKWyT7K.js +0 -1
  131. package/dist/assets/eventmodeling-45OFAUF4-jdctDg0T-03avWkxI.js +0 -1
  132. package/dist/assets/flowDiagram-23GEKE2U-DK0InIny-BZsLyoCM.js +0 -1
  133. package/dist/assets/gitGraph-TEB2WS4Q-C4cKwl5j-DOv-LqUe.js +0 -1
  134. package/dist/assets/info-DKCQHKI2-DPUCBYWS-VT49gBhu.js +0 -1
  135. package/dist/assets/packet-7NZHBO7P-CC7His0F-C2Dx0oxu.js +0 -1
  136. package/dist/assets/pie-RZYD4A2V-CCrcq2sL-ve4Gv4SX.js +0 -1
  137. package/dist/assets/radar-I7S5WNFK-C5TUrpHf-BVg_eCN-.js +0 -1
  138. package/dist/assets/railroad-3IZDKUUU-CGuuFEd8-DNXTykNc.js +0 -1
  139. package/dist/assets/railroad-abnf-AHOZXSZD-DuoCSFZY-QHTvGuQ7.js +0 -1
  140. package/dist/assets/railroad-ebnf-EBAXGLYW-ig-DG9e_-Ch6HzcZ9.js +0 -1
  141. package/dist/assets/railroad-peg-LSFZ7HO6-BkBgpyvu-hu0tLEcZ.js +0 -1
  142. package/dist/assets/stateDiagram-v2-6OUMAXLB-BjhArXP_-5o7JJSQT.js +0 -1
  143. package/dist/assets/swimlanesDiagram-G3AALYLV-CyvIfl1o-DrrXIaEK.js +0 -8
  144. package/dist/assets/treeView-QDETBFTQ-CqfT0I1z-CF75ZmbN.js +0 -1
  145. package/dist/assets/treemap-6X3UGDF4-CiJkiGWo-rxMKyn9k.js +0 -1
  146. package/dist/assets/wardley-OPB4EBWU-D1tuVHAV-CeoD2DSP.js +0 -1
package/README.md CHANGED
@@ -1205,7 +1205,7 @@ it came from — `mcp__<id>__presentChart` in Claude Code, `mcp-<id>-presentChar
1205
1205
  also rewrites `-` in the id to `_`). So the id you register under is repeated on every tool, in
1206
1206
  every listing, for the life of the session.
1207
1207
 
1208
- MulmoTerminal delivers the GUI MCP by **two different routes**, and they do not share an id:
1208
+ MulmoTerminal delivers the GUI MCP by **three different routes**, and they do not share an id:
1209
1209
 
1210
1210
  | | Workspace cell / single view | Project-directory grid cell |
1211
1211
  |---|---|---|
@@ -1214,14 +1214,39 @@ MulmoTerminal delivers the GUI MCP by **two different routes**, and they do not
1214
1214
  | Tools carried | all of them, on one URL | only the groups that directory registered |
1215
1215
  | Tool name looks like | `mcp__mt__presentChart` | `mcp__mulmoterminal-render__presentChart` |
1216
1216
 
1217
+ The third is **Muse**, which reads neither a flag nor a file in the directory: its MCP servers are
1218
+ declared by an installed **plugin**, and `muse plugins install` records one per MACHINE. So
1219
+ MulmoTerminal registers a single `mulmoterminal` plugin holding all four group servers, and each
1220
+ session is narrowed back to what its own directory switched on — the bridge asks the server which
1221
+ session it belongs to (by its process tree) and is told which groups that session may reach. The
1222
+ servers are named by group alone, because Muse composes the tool name out of both ids:
1223
+
1224
+ | | Muse cell (anywhere) |
1225
+ |---|---|
1226
+ | How it arrives | a `mulmoterminal` plugin installed for the machine, re-registered whenever the bridge path or port changes |
1227
+ | Server id | **`render`**, `data`, `media`, `external` — inside the `mulmoterminal` plugin |
1228
+ | Tools carried | only the groups that directory registered; the rest serve an empty toolset |
1229
+ | Tool name looks like | `mcp__plugin_mulmoterminal_render__presentChart` |
1230
+
1231
+ Muse's plugin support is behind its own experimental flag (`MUSE_EXPERIMENTAL_PLUGINS`), which
1232
+ MulmoTerminal sets on the sessions it starts. A Muse build without it simply has no GUI tools —
1233
+ the registration fails with one warning and the session starts anyway.
1234
+
1235
+ **A Muse session picks its plugins up when its own process starts, and MulmoTerminal's sessions
1236
+ outlive the server.** So a Muse cell that was already running when you switched a group on — or
1237
+ when you first upgraded to a version that has this — keeps no tools until that CELL is started
1238
+ again. Restarting the server is not enough: the session is still there in tmux and gets reattached,
1239
+ exactly as it was. Close the cell and open a new one (or `Stop` it in Settings → Surviving sessions),
1240
+ and it comes back with the tools its directory registered.
1241
+
1217
1242
  Which route a session takes is decided by `carriesFullGuiMcp()` in
1218
1243
  `server/session/mcp-config.ts` — the single view, a cell-less chat, or anything whose cwd **is**
1219
1244
  the workspace take the first; anything in a project directory takes the second.
1220
1245
 
1221
1246
  **The workspace is agent-agnostic for the agents that can RECEIVE a per-spawn config** — claude and
1222
1247
  codex ask the same predicate, so two terminals in the workspace reach the same tools no matter which
1223
- of the two started them. **Antigravity and Grok cannot, and that is the exception you will meet
1224
- first:**
1248
+ of the two started them. **Antigravity, Grok and Muse cannot, and that is the exception you will
1249
+ meet first:**
1225
1250
 
1226
1251
  | Started as | In the workspace | In a project directory |
1227
1252
  |---|---|---|
@@ -1229,11 +1254,13 @@ first:**
1229
1254
  | codex cell | `mt`, every tool | the directory's registered groups |
1230
1255
  | antigravity cell | **the directory's registered groups** — nothing registered means **no GUI tools at all** | the directory's registered groups |
1231
1256
  | grok cell | **the directory's registered groups** — nothing registered means **no GUI tools at all** | the directory's registered groups |
1257
+ | muse cell | **the directory's registered groups** — nothing registered means **no GUI tools at all** | the directory's registered groups |
1232
1258
  | any launcher chip | untouched | untouched |
1233
1259
 
1234
- Neither takes an MCP flag: `agy` reads `.agents/mcp_config.json` and `grok` reads `.grok/config.toml`
1235
- in the working directory, and a file shared by every session in a directory cannot be handed to one
1236
- session and not another — so there is nothing for "this cwd is the workspace" to change. The
1260
+ None of the three takes an MCP flag: `agy` reads `.agents/mcp_config.json`, `grok` reads
1261
+ `.grok/config.toml` in the working directory, and `muse` reads a plugin installed for the whole
1262
+ machine — and neither a file shared by every session in a directory nor a machine-wide plugin can be
1263
+ handed to one session and not another — so there is nothing for "this cwd is the workspace" to change. The
1237
1264
  membership is `FULL_GUI_MCP_AGENTS` in `common/guiMcpAgents.ts`, in `common/` precisely so the
1238
1265
  launcher form and the spawn cannot disagree about it
1239
1266
  ([#1423](https://github.com/receptron/mulmoterminal/issues/1423)).
@@ -18,6 +18,7 @@ export const AGENT_SESSION_LIST_PATHS: Record<TerminalAgent, string> = {
18
18
  codex: "/api/codex/sessions",
19
19
  antigravity: "/api/antigravity/sessions",
20
20
  grok: "/api/grok/sessions",
21
+ muse: "/api/muse/sessions",
21
22
  };
22
23
 
23
24
  /** The listing URL for one agent's conversations in one directory. */
@@ -19,6 +19,16 @@
19
19
  // `~/.grok/config.toml` or `./.grok/config.toml` (server/agents/grok-mcp.ts). So a grok session in
20
20
  // the workspace gets the groups its DIRECTORY registered, and the launcher form offers it the four
21
21
  // per-group toggles — which is the truthful answer, and the one #1423 failed to give.
22
+ //
23
+ // Muse is out for the same reason and reaches its tools a third way. It has no `--mcp-config` and
24
+ // no per-directory config file either: MCP servers are declared by an installed PLUGIN, which
25
+ // `muse plugins install` records per MACHINE (server/agents/muse-mcp.ts). So MulmoTerminal
26
+ // registers one plugin holding all four group servers, and each SESSION is narrowed back to what
27
+ // its directory switched on — by a lookup, not by the environment: a plugin's MCP server is started
28
+ // with a curated environment that carries nothing of ours, so the bridge resolves which session it
29
+ // belongs to (by its process tree) and is told the groups with the answer. Do not add a bridge
30
+ // environment variable; it is dropped on the way and the failure is silent. The launcher form offers muse the same four per-group
31
+ // toggles as grok and agy, which is the truthful answer for the same reason it is theirs.
22
32
  import { type SessionAgent } from "./sessionAgent.js";
23
33
  import { isLaunchAgent } from "./launchAgent.js";
24
34
  import { customAgentFor, type AgentPick, type CustomAgent } from "./customAgents.js";
@@ -4,7 +4,7 @@
4
4
  // Deliberately NOT the configured `launchers` list: those are arbitrary user commands, and
5
5
  // the phone picks from a fixed set the host can name. "shell" is the OS default shell, the
6
6
  // same thing the header's new-terminal button opens.
7
- export const LAUNCH_AGENTS = ["shell", "claude", "codex", "antigravity", "grok"] as const;
7
+ export const LAUNCH_AGENTS = ["shell", "claude", "codex", "antigravity", "grok", "muse"] as const;
8
8
 
9
9
  export type LaunchAgent = (typeof LAUNCH_AGENTS)[number];
10
10
 
@@ -260,6 +260,16 @@ export const MODEL_PRESETS: readonly ModelPreset[] = [
260
260
  trials: measured(3, 3, 38),
261
261
  },
262
262
 
263
+ // ── Muse (Meta) ────────────────────────────────────────────────────────────────
264
+ {
265
+ provider: "meta",
266
+ id: "muse-spark-1.2-contributor",
267
+ label: "Muse Spark 1.2",
268
+ contextLength: 1_000_000,
269
+ pricePerMTok: { input: 1, output: 3 },
270
+ trials: { status: "unmeasured" },
271
+ },
272
+
263
273
  // ── Reached fine, never drove the tool loop ──────────────────────────────────
264
274
  // Kept so the list answers "what about X?" with a measurement instead of silence.
265
275
  {
@@ -1,7 +1,7 @@
1
1
  // What a remote-host session is running. The server decides it (from the PtyEntry, or from
2
2
  // what tmux says is in the pane) and the settings UI offers it as the scope for a quick
3
3
  // command, so the list of kinds is a value both sides read.
4
- export const SESSION_AGENTS = ["claude", "codex", "antigravity", "grok", "shell"] as const;
4
+ export const SESSION_AGENTS = ["claude", "codex", "antigravity", "grok", "muse", "shell"] as const;
5
5
 
6
6
  // Null anywhere this appears means the host cannot tell — a session that outlived a restart
7
7
  // exists only in tmux, and nothing recorded what launched it. That is distinct from "shell".
@@ -9,7 +9,7 @@ export type SessionAgent = (typeof SESSION_AGENTS)[number];
9
9
 
10
10
  // The agents a terminal can be LAUNCHED as, which is the session kinds minus "shell" (a shell is
11
11
  // a launcher, not an agent). Claude is first because it is the default everywhere below.
12
- export const TERMINAL_AGENTS = ["claude", "codex", "antigravity", "grok"] as const;
12
+ export const TERMINAL_AGENTS = ["claude", "codex", "antigravity", "grok", "muse"] as const;
13
13
 
14
14
  export type TerminalAgent = (typeof TERMINAL_AGENTS)[number];
15
15
 
@@ -47,6 +47,7 @@ const AGENT_BADGES: Partial<Record<TerminalAgent, AgentBadge>> = {
47
47
  codex: { full: "codex", short: "cx" },
48
48
  antigravity: { full: "agy", short: "agy" },
49
49
  grok: { full: "grok", short: "gk" },
50
+ muse: { full: "muse", short: "mu" },
50
51
  };
51
52
 
52
53
  /** How a session row announces which agent it is running, or null when it wears no badge. The one
@@ -1 +1 @@
1
- import{n as e}from"./chunk-Y2CYZVJY-Bdt8pFDJ-DsF7k-Jl.js";import{f as t}from"./src-CvsWqFln-Tc7ZSrRz.js";import{_ as n,g as r}from"./mermaid-parser.core-C1baW7NG-B11a01NO.js";import"./chunk-WYO6CB5R-nS6zX9ct-Dttxo6Qs.js";import"./chunk-VAUOI2AC-BKx35BBi-Bi2sMyOB.js";import{n as i,r as a,t as o}from"./chunk-MOJQB5TN-CorQ_Pl1-C9s38qkp.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-CvsWqFln-Tc7ZSrRz.js";import{_ as n,g as r}from"./mermaid-parser.core-C1baW7NG-D6V0bamn.js";import"./chunk-WYO6CB5R-nS6zX9ct-CEyECF4F.js";import"./chunk-VAUOI2AC-BKx35BBi-DF4roMbC.js";import{n as i,r as a,t as o}from"./chunk-MOJQB5TN-CorQ_Pl1-Bo-W29fw.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-C1baW7NG-D6V0bamn.js";export{e as createArchitectureServices};