mulmoterminal 4.13.0 → 4.15.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 (166) hide show
  1. package/README.md +46 -2
  2. package/common/dirConfigSource.ts +3 -0
  3. package/common/keymap.ts +2 -1
  4. package/common/sharedAppAccess.ts +571 -0
  5. package/common/sharedAppPreview.ts +5 -3
  6. package/common/sharedAppPublicFace.ts +30 -0
  7. package/dist/assets/{AllPackages-CF2GkZ5g-CssQbjOa.js → AllPackages-CF2GkZ5g-BTu3t8zV.js} +1 -1
  8. package/dist/assets/{BaseConfiguration-CAwZOAki-Dh0EGNE9.js → BaseConfiguration-CAwZOAki-C2hyxOMT.js} +1 -1
  9. package/dist/assets/{Element-BMI7Nj5w-CqxLhpQT.js → Element-BMI7Nj5w-CX1N3WkK.js} +1 -1
  10. package/dist/assets/{Entities-C8p_0jCn-DEEX_Xry.js → Entities-C8p_0jCn-B0lpGQzn.js} +1 -1
  11. package/dist/assets/{FunctionList-YWk54TCy-D2PM4n-L.js → FunctionList-YWk54TCy-BJkakHAV.js} +1 -1
  12. package/dist/assets/{InputJax-C5dj-ntL-Cnbx6KYn.js → InputJax-C5dj-ntL-D-EU3Dqg.js} +1 -1
  13. package/dist/assets/{MathItem-YJvQL-XJ-afY01gTq.js → MathItem-YJvQL-XJ-BVTP7VA1.js} +1 -1
  14. package/dist/assets/{MmlFactory-DuXYIgx8-DpHfMoIU.js → MmlFactory-DuXYIgx8-BrNlpPo8.js} +1 -1
  15. package/dist/assets/{Options-oARQeeuT-CiIYMpYT.js → Options-oARQeeuT-BA6UMq-L.js} +1 -1
  16. package/dist/assets/{OutputJax-DfUZNNCu-B38K9BaX.js → OutputJax-DfUZNNCu-C1sWc7Zb.js} +1 -1
  17. package/dist/assets/{PrioritizedList-6lun1Xqd-Dygd27F6.js → PrioritizedList-6lun1Xqd-CuCmr3GP.js} +1 -1
  18. package/dist/assets/{Styles-BPXeoqzi-C58TnqKJ.js → Styles-BPXeoqzi-DT74Ekx7.js} +1 -1
  19. package/dist/assets/{TeXAtom-LHT3KFWH-uPYpzamN.js → TeXAtom-LHT3KFWH-BqGk-gpO.js} +1 -1
  20. package/dist/assets/{abnfDiagram-VCTEODGH-DoYNjdBB-Dai05JsH.js → abnfDiagram-VCTEODGH-DoYNjdBB-CB88QbBJ.js} +1 -1
  21. package/dist/assets/{arc-CqByPKkF-D5Jg9Zer.js → arc-CqByPKkF-CXgXnOlC.js} +1 -1
  22. package/dist/assets/architecture-7GRP2DOG-CRS69XmP-CyVV2-L-.js +1 -0
  23. package/dist/assets/{architectureDiagram-5GKGNRK7-BhcT6qS5-DipIYUA_.js → architectureDiagram-5GKGNRK7-BhcT6qS5-D8QuRnQA.js} +1 -1
  24. package/dist/assets/{assistive-mml-DXJXho4o-BRWc7vXC.js → assistive-mml-DXJXho4o-xM73QNFo.js} +1 -1
  25. package/dist/assets/{blockDiagram-I7D4REHJ-1Cng0Q4K-CmrGn63J.js → blockDiagram-I7D4REHJ-1Cng0Q4K-DAGSE0y3.js} +1 -1
  26. package/dist/assets/{c4Diagram-7LVT6UL2-CAb9c8nc-EY5oaGlv.js → c4Diagram-7LVT6UL2-CAb9c8nc-DoZWxqPB.js} +1 -1
  27. package/dist/assets/channel-BjESmYnj-DC0LjyIo.js +1 -0
  28. package/dist/assets/{chunk-2E4U76K2-CMyNbRyJ-BYHoa5DT.js → chunk-2E4U76K2-CMyNbRyJ-DGsHrczQ.js} +1 -1
  29. package/dist/assets/{chunk-4HAMMTFA-ChwfIAnF-DQUJxetY.js → chunk-4HAMMTFA-ChwfIAnF-Bt7ZheEO.js} +1 -1
  30. package/dist/assets/{chunk-75Z2AOVW-CbPA0Zt_-BKl9d-co.js → chunk-75Z2AOVW-CbPA0Zt_-E9Qt4J4K.js} +1 -1
  31. package/dist/assets/{chunk-CLGD4ZFX-CVw8XHcp-MCMGRlFw.js → chunk-CLGD4ZFX-CVw8XHcp-lV8_wKZH.js} +1 -1
  32. package/dist/assets/{chunk-DU6HZSFF-DuOx2LFX-B86yuhFX.js → chunk-DU6HZSFF-DuOx2LFX-DenO9keb.js} +1 -1
  33. package/dist/assets/{chunk-F27PBJKO-CgBMw9yN-Bq3zuyO1.js → chunk-F27PBJKO-CgBMw9yN-By3aRrhK.js} +1 -1
  34. package/dist/assets/{chunk-GMAD6QVW-JTqlimUX-BADn_t1m.js → chunk-GMAD6QVW-JTqlimUX-ChL887nj.js} +1 -1
  35. package/dist/assets/{chunk-GVQU2GXP-D6ccB4DO-D67xQv2L.js → chunk-GVQU2GXP-D6ccB4DO-B523FbDZ.js} +1 -1
  36. package/dist/assets/{chunk-IMKFNOWR-ij1DSzMb-Cdmwd2WK.js → chunk-IMKFNOWR-ij1DSzMb-DAkNoOeG.js} +1 -1
  37. package/dist/assets/{chunk-L3NEJ4N5-CUoAQVG2-Buv2AnXy.js → chunk-L3NEJ4N5-CUoAQVG2-bA6jySGk.js} +1 -1
  38. package/dist/assets/{chunk-OSK3NFVY-_VNbXQSu-C5f15YpO.js → chunk-OSK3NFVY-_VNbXQSu-DT4x86Vl.js} +1 -1
  39. package/dist/assets/{chunk-P2QGCYS3-B8lzOn3Y-B3mLNaJD.js → chunk-P2QGCYS3-B8lzOn3Y-DjhuFb1P.js} +1 -1
  40. package/dist/assets/{chunk-POPQ4Y6H-Bh_uOTmp-Dy-RhpSF.js → chunk-POPQ4Y6H-Bh_uOTmp-Bt_ynbRs.js} +1 -1
  41. package/dist/assets/{chunk-PWAF6VOD-DzjnfYSw-Br7rBQUn.js → chunk-PWAF6VOD-DzjnfYSw-Dd4fzZ6T.js} +1 -1
  42. package/dist/assets/{chunk-SHT3W25Y-B8dQLS5w-Bzrea95d.js → chunk-SHT3W25Y-B8dQLS5w-QEPPztqw.js} +1 -1
  43. package/dist/assets/{chunk-SVP7TREG-B6A-T8Th-CD7e9pDy.js → chunk-SVP7TREG-B6A-T8Th-B9z1diC8.js} +1 -1
  44. package/dist/assets/{chunk-TICWLB2K-C1kwD29l-Cqy2hS-h.js → chunk-TICWLB2K-C1kwD29l-BPE1JwDI.js} +1 -1
  45. package/dist/assets/{chunk-TLUHSLCS-DYzGlCmi-DQFOalYn.js → chunk-TLUHSLCS-DYzGlCmi-CbMzz_ug.js} +2 -2
  46. package/dist/assets/{chunk-XXDRQBXY-vg0kfC73-Beoe3hey.js → chunk-XXDRQBXY-vg0kfC73-Dk-hBdTD.js} +1 -1
  47. package/dist/assets/classDiagram-ZZMXUADV-C7gP-pUH-DC5wp21b.js +1 -0
  48. package/dist/assets/classDiagram-v2-VYDZK3BY-CUwV5k1F-DC5wp21b.js +1 -0
  49. package/dist/assets/{cose-bilkent-JH36ORCC-NuHCtE3P-CAm6fB__.js → cose-bilkent-JH36ORCC-NuHCtE3P-CWxfeA6n.js} +1 -1
  50. package/dist/assets/cynefin-OW5HDTMX-C4iKivN4-Dfu4ZK_1.js +1 -0
  51. package/dist/assets/{cynefinDiagram-5FMLGOSQ-CA7sro34-Dw8nX0TQ.js → cynefinDiagram-5FMLGOSQ-CA7sro34-CH0lPGVu.js} +1 -1
  52. package/dist/assets/{dagre-GXQ25YYZ-DOztjUR_-CLilpzZ6.js → dagre-GXQ25YYZ-DOztjUR_-D2fo3YKY.js} +1 -1
  53. package/dist/assets/{diagram-S7CK7UJ4-D_nsLfRT-AWaKWxdg.js → diagram-S7CK7UJ4-D_nsLfRT-Bqo0esbY.js} +1 -1
  54. package/dist/assets/{diagram-UQ7AKVKN-DNN-YX9a-Cxg2PCC4.js → diagram-UQ7AKVKN-DNN-YX9a-D1WAuvB6.js} +1 -1
  55. package/dist/assets/{diagram-VSXAHHWV--HENzo-l-Di3J8S1Y.js → diagram-VSXAHHWV--HENzo-l-vsznvkHz.js} +1 -1
  56. package/dist/assets/{diagram-VX7I27RA-m2m9dROj-DmZLkzRx.js → diagram-VX7I27RA-m2m9dROj-CAUGcTGr.js} +1 -1
  57. package/dist/assets/{diagram-Z3DM3KII-D4qpv4-B-BhRu_oHO.js → diagram-Z3DM3KII-D4qpv4-B-CcuKz799.js} +1 -1
  58. package/dist/assets/{dist-BA8WR926.js → dist-BtbaSZUG.js} +1 -1
  59. package/dist/assets/{dist-CgQ_oQmc.js → dist-DV9ZBwuz.js} +1 -1
  60. package/dist/assets/{dist-DeiyD9Ki-R86_Zh4z.js → dist-DeiyD9Ki-Dh8VD-Dg.js} +1 -1
  61. package/dist/assets/{dist-CSTVKEO6.js → dist-Dw9BfUg4.js} +1 -1
  62. package/dist/assets/{dist-CVpznzjS.js → dist-HR-pLpzx.js} +1 -1
  63. package/dist/assets/{ebnfDiagram-PWID7BFC-CAbv3sZg-C6XDy8ND.js → ebnfDiagram-PWID7BFC-CAbv3sZg-BuwVscQE.js} +1 -1
  64. package/dist/assets/{erDiagram-RLTQ6QDP-a10Ryh0--CbOy4ZUP.js → erDiagram-RLTQ6QDP-a10Ryh0--C3lzWBMG.js} +1 -1
  65. package/dist/assets/eventmodeling-NTZA5JFV-DhqtNS8R-C7GPfFjk.js +1 -0
  66. package/dist/assets/flowDiagram-HODETNUW-CAW_8mwY-Dd3O0Ql2.js +1 -0
  67. package/dist/assets/{ganttDiagram-EL5Y4UJY-Cb7leeOC-weDAGCBD.js → ganttDiagram-EL5Y4UJY-Cb7leeOC-CEU7UVK3.js} +1 -1
  68. package/dist/assets/gitGraph-4MIJSDKK-S_Zs6Nxs-BqbmRM3z.js +1 -0
  69. package/dist/assets/{gitGraphDiagram-WWUBYQGX-BCSbUpXG-BomL5zI6.js → gitGraphDiagram-WWUBYQGX-BCSbUpXG-bQ0ZbFrl.js} +1 -1
  70. package/dist/assets/{html-DdQiKDqM-B6wswbaV.js → html-DdQiKDqM-xhxGsr21.js} +1 -1
  71. package/dist/assets/index-C4CrAeLJ.js +1051 -0
  72. package/dist/assets/index-Dz5KMovN.css +1 -0
  73. package/dist/assets/info-A6RAGUB7-4sGJh1is-CB7tcAz2.js +1 -0
  74. package/dist/assets/{infoDiagram-27XIBGKW-BJRaZItN-DDAXs1r3.js → infoDiagram-27XIBGKW-BJRaZItN-C1KB3RM8.js} +1 -1
  75. package/dist/assets/{ishikawaDiagram-5VMMS53U-DHlFe__S-2FoUZyuK.js → ishikawaDiagram-5VMMS53U-DHlFe__S-CbXWDEUz.js} +1 -1
  76. package/dist/assets/{journeyDiagram-3NMN7TZE-BOIo3JM--CKVCefHi.js → journeyDiagram-3NMN7TZE-BOIo3JM--CEqjzRU4.js} +1 -1
  77. package/dist/assets/{kanban-definition-UXKFOSKX-yrQdG683-DLceahDo.js → kanban-definition-UXKFOSKX-yrQdG683-Dj4byHes.js} +1 -1
  78. package/dist/assets/{lengths-CvmPfBid-Bu4CQkge.js → lengths-CvmPfBid-CTRV5nvN.js} +1 -1
  79. package/dist/assets/{line-DUb1TjJS-Cy4--5UV.js → line-DUb1TjJS-DIHKahms.js} +1 -1
  80. package/dist/assets/{linear-xsuGWu5q-BtDBK8pF.js → linear-xsuGWu5q-nelm76w8.js} +1 -1
  81. package/dist/assets/{liteAdaptor-C0FQiOEx-Bo-QRNEC.js → liteAdaptor-C0FQiOEx-D8aPUGD8.js} +1 -1
  82. package/dist/assets/{marp-BNsGmsYi.js → marp-5RblDiyP.js} +1 -1
  83. package/dist/assets/{mathjax-DVEo4UYj-BDUX9u1X.js → mathjax-DVEo4UYj-CGKYNMIQ.js} +1 -1
  84. package/dist/assets/{mermaid-parser.core-fkjeiYO7-Bu045BJA.js → mermaid-parser.core-fkjeiYO7-DZ-xY0M3.js} +2 -2
  85. package/dist/assets/{mermaid.core-CZDx2Cyn-W7sMU12C.js → mermaid.core-CZDx2Cyn-D2BR-Fgf.js} +3 -3
  86. package/dist/assets/{mindmap-definition-YA3MSWOX-BpKAVyqs-B8fXczO5.js → mindmap-definition-YA3MSWOX-BpKAVyqs-DuziYdAg.js} +1 -1
  87. package/dist/assets/{mo-CrlNnGXX-DvbKdwI8.js → mo-CrlNnGXX-v7uyMnDg.js} +1 -1
  88. package/dist/assets/packet-AYTQ26CC-MQQyx8fI-C-67vaT4.js +1 -0
  89. package/dist/assets/{pegDiagram-XKGWAZYB-C7eG_Ohl-CL0sh1mk.js → pegDiagram-XKGWAZYB-C7eG_Ohl-B_1lKBZZ.js} +1 -1
  90. package/dist/assets/pie-WAS4IAKB-CyaL5i_d-38NZcO0J.js +1 -0
  91. package/dist/assets/{pieDiagram-E7YTZNPT-5f9wSfDR-CLmTFnZr.js → pieDiagram-E7YTZNPT-5f9wSfDR-BahPKQMB.js} +1 -1
  92. package/dist/assets/{quadrantDiagram-AXDQQJYC-mWeaOj5S-BUPv1MtK.js → quadrantDiagram-AXDQQJYC-mWeaOj5S-CFdn_rBp.js} +1 -1
  93. package/dist/assets/radar-RG4KPBEZ-DR-SsHDJ-B5OQd4Oe.js +1 -0
  94. package/dist/assets/railroad-74A4TZTK-C2gqsOGX-DG4ZW9q0.js +1 -0
  95. package/dist/assets/railroad-abnf-HS5TGJTU-Dpzw6P5u-DOhite6k.js +1 -0
  96. package/dist/assets/railroad-ebnf-LZEXJU2U-J_BuIrPo--8XopcaV.js +1 -0
  97. package/dist/assets/railroad-peg-WCYAUIDC-DzMStOR--BiJTLpn5.js +1 -0
  98. package/dist/assets/{railroadDiagram-O6MQD6OU-DJskhE7u-B2rIG8vE.js → railroadDiagram-O6MQD6OU-DJskhE7u-BefqE33w.js} +1 -1
  99. package/dist/assets/{requirementDiagram-BXWQKSXE-B5E0bU4h-BNG0IbS0.js → requirementDiagram-BXWQKSXE-B5E0bU4h-Ct2hTW8M.js} +1 -1
  100. package/dist/assets/{sankeyDiagram-P5KCCOFB-DS3AOTai-BmF8ArEH.js → sankeyDiagram-P5KCCOFB-DS3AOTai-DBWUiRVW.js} +1 -1
  101. package/dist/assets/{sequenceDiagram-WJ2MYXX4-Bn2L9osv-GsnV2qn4.js → sequenceDiagram-WJ2MYXX4-Bn2L9osv-BQAAMuCe.js} +1 -1
  102. package/dist/assets/{src-CLC0ddSd-Dquc25MQ.js → src-CLC0ddSd-C8OQlmHt.js} +1 -1
  103. package/dist/assets/{stateDiagram-D77RDMKH-DbtoW7HL-fgglcfel.js → stateDiagram-D77RDMKH-DbtoW7HL-DDeo48Qj.js} +1 -1
  104. package/dist/assets/stateDiagram-v2-MP3YSRHH-CX6RalKY-CDgLSY89.js +1 -0
  105. package/dist/assets/{svg-CaHU_sxA-BFRh8mf6.js → svg-CaHU_sxA-Bk35isDa.js} +1 -1
  106. package/dist/assets/{swimlanes-42K2YHIH-90h8w_3B-DFNJ2iO4.js → swimlanes-42K2YHIH-90h8w_3B-D2_Fa0_g.js} +1 -1
  107. package/dist/assets/swimlanesDiagram-VR7AAH4N-49XH_TMr-0B0NG4w_.js +8 -0
  108. package/dist/assets/{tex-B1cONMvb-DVhGZSdj.js → tex-B1cONMvb-CvplOOBt.js} +1 -1
  109. package/dist/assets/{timeline-definition-24CTP7MA-Bx3KcICO-CZbcUu5B.js → timeline-definition-24CTP7MA-Bx3KcICO-CUHisz_Z.js} +1 -1
  110. package/dist/assets/treeView-Q6P3EWNA-gFs854Sn-DIu30QI1.js +1 -0
  111. package/dist/assets/treemap-WGGIJYW6-DGh_szUA-CrzIEdPv.js +1 -0
  112. package/dist/assets/{vennDiagram-4TSXK5OY-DSexNe_H-CTFwoiwN.js → vennDiagram-4TSXK5OY-DSexNe_H-Dg9Hud0S.js} +1 -1
  113. package/dist/assets/wardley-WFR3VGLG-BVLYL3gB-uIYzBarM.js +1 -0
  114. package/dist/assets/{wardleyDiagram-VM6X3IG4-DesYYyZW-CW8HWmUS.js → wardleyDiagram-VM6X3IG4-DesYYyZW-CITDy3E3.js} +1 -1
  115. package/dist/assets/{xychartDiagram-S5SC5T6Z-dIt6pHWV-C6EUNlwK.js → xychartDiagram-S5SC5T6Z-dIt6pHWV-Co-YpFxn.js} +1 -1
  116. package/dist/index.html +2 -2
  117. package/package.json +12 -12
  118. package/server/backends/deckList.ts +142 -0
  119. package/server/backends/mulmoscript.ts +84 -0
  120. package/server/backends/sharedApp/access.ts +47 -0
  121. package/server/backends/sharedApp/context.ts +1 -1
  122. package/server/backends/sharedApp/preview.ts +2 -1
  123. package/server/backends/sharedApp/publish.ts +8 -5
  124. package/server/backends/sharedAppPreviewRoutes.ts +56 -18
  125. package/server/backends/storiesRoot.ts +29 -0
  126. package/server/config/config-routes.ts +8 -1
  127. package/server/config/config-schema.ts +32 -2
  128. package/server/config/dir-config.ts +6 -1
  129. package/server/config/header-config.ts +13 -0
  130. package/server/config/header-resolve.ts +2 -0
  131. package/server/config/worktree-dir-config.ts +3 -1
  132. package/server/infra/shared-app-tool.ts +34 -6
  133. package/server/infra/tmux-routes.ts +7 -1
  134. package/server/infra/tmux.ts +46 -2
  135. package/server/routes/dir-routes.ts +27 -2
  136. package/server/session/pty-spawn.ts +14 -2
  137. package/server/skills/mulmoterminal-config/SKILL.md +28 -2
  138. package/server/skills/mulmoterminal-dirs/SKILL.md +3 -2
  139. package/server/skills/mulmoterminal-header/SKILL.md +25 -1
  140. package/server/skills/mulmoterminal-keys/SKILL.md +6 -0
  141. package/server/skills/mulmoterminal-shared-app/SKILL.md +18 -2
  142. package/server/skills/mulmoterminal-shared-app/templates/append-feed.md +1 -1
  143. package/server/skills/mulmoterminal-shared-app/templates/magazine.md +838 -82
  144. package/dist/assets/architecture-7GRP2DOG-CRS69XmP-Bkz68tYo.js +0 -1
  145. package/dist/assets/channel-BjESmYnj-DCJo3CKJ.js +0 -1
  146. package/dist/assets/classDiagram-ZZMXUADV-C7gP-pUH-TqSfWtS1.js +0 -1
  147. package/dist/assets/classDiagram-v2-VYDZK3BY-CUwV5k1F-TqSfWtS1.js +0 -1
  148. package/dist/assets/cynefin-OW5HDTMX-C4iKivN4-9ujipUYq.js +0 -1
  149. package/dist/assets/eventmodeling-NTZA5JFV-DhqtNS8R-Dt7SIrGk.js +0 -1
  150. package/dist/assets/flowDiagram-HODETNUW-CAW_8mwY-CnOc_pLO.js +0 -1
  151. package/dist/assets/gitGraph-4MIJSDKK-S_Zs6Nxs-BfjtZvJt.js +0 -1
  152. package/dist/assets/index-B-BwWalM.css +0 -1
  153. package/dist/assets/index-Cyyg6dqf.js +0 -1051
  154. package/dist/assets/info-A6RAGUB7-4sGJh1is-B8w9oPi5.js +0 -1
  155. package/dist/assets/packet-AYTQ26CC-MQQyx8fI-DEraoKKf.js +0 -1
  156. package/dist/assets/pie-WAS4IAKB-CyaL5i_d-hVe4izaF.js +0 -1
  157. package/dist/assets/radar-RG4KPBEZ-DR-SsHDJ-CUIKMPrd.js +0 -1
  158. package/dist/assets/railroad-74A4TZTK-C2gqsOGX-Sdqv0l9F.js +0 -1
  159. package/dist/assets/railroad-abnf-HS5TGJTU-Dpzw6P5u-BWEL2Ih5.js +0 -1
  160. package/dist/assets/railroad-ebnf-LZEXJU2U-J_BuIrPo-CScwuEKP.js +0 -1
  161. package/dist/assets/railroad-peg-WCYAUIDC-DzMStOR--CUu-tzEV.js +0 -1
  162. package/dist/assets/stateDiagram-v2-MP3YSRHH-CX6RalKY-D118UaDi.js +0 -1
  163. package/dist/assets/swimlanesDiagram-VR7AAH4N-49XH_TMr-Bkt0WWk-.js +0 -8
  164. package/dist/assets/treeView-Q6P3EWNA-gFs854Sn-D7488VRG.js +0 -1
  165. package/dist/assets/treemap-WGGIJYW6-DGh_szUA-B-xoM8YR.js +0 -1
  166. package/dist/assets/wardley-WFR3VGLG-BVLYL3gB-CjcN7LrQ.js +0 -1
package/README.md CHANGED
@@ -101,7 +101,8 @@ the same two behind **[GraphAI](https://github.com/receptron/graphai)**. [More
101
101
  command-output explanations — so a wall of parallel agents stays legible.
102
102
  - **Make it yours.** Per-directory **themes, colors, and name badges** (`prod` in red,
103
103
  `staging` in amber), a configurable header (buttons + info chips), custom attention sounds,
104
- and Run / Skill menus to launch a project's scripts and `.claude/skills` right inside a cell.
104
+ and Run / Skill / Mulmo menus to launch a project's scripts, `.claude/skills` and decks right
105
+ inside a cell.
105
106
 
106
107
  ![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)
107
108
 
@@ -369,6 +370,7 @@ The launcher detects it and prints the exact, OS-appropriate removal command; ru
369
370
  - [Running](#running)
370
371
  - [Scripts (Run menu)](#scripts-run-menu)
371
372
  - [Skills (Skill menu)](#skills-skill-menu)
373
+ - [Decks (Mulmo menu)](#decks-mulmo-menu)
372
374
  - [Files view (browse & edit)](#files-view-browse--edit)
373
375
  - [Git worktrees & pull requests](#git-worktrees--pull-requests)
374
376
  - [Cost & token usage](#cost--token-usage)
@@ -680,7 +682,9 @@ and open-on-GitHub (🌐, git repos). Setting `buttons` (at either level) **repl
680
682
  set** with your list (it is not merged on top), so listing your own — even a **shorter** one — is how
681
683
  you drop, reorder, or swap them.
682
684
  A button has an `id`, `label`, and a `run` of `"shell"` (run a command), `"input"` (send text to the
683
- agent), or `"open"`. An `open` button targets one of `url` / `reveal` (OS file manager) / `files`
685
+ agent), `"open"`, or `"action"` (act on the cell itself — `action: "restart"` ends the agent and
686
+ starts it again in the same cell on the same conversation, which is how an MCP / config / plugin
687
+ change takes effect; it costs a resume and asks nothing first). An `open` button targets one of `url` / `reveal` (OS file manager) / `files`
684
688
  (in-app explorer) / `view` (a built-in overlay) / `terminal` (a dir → a new cell running `$SHELL`,
685
689
  opened next to the current one) / `pr: true` (open the current branch's PR — the button is hidden when
686
690
  there's no open PR) / `pickFile: true` (OS file dialog → insert the path).
@@ -1048,6 +1052,46 @@ button. Skills are discovered read-only; the menu never creates or edits them.
1048
1052
 
1049
1053
  ---
1050
1054
 
1055
+ ## Decks (Mulmo menu)
1056
+
1057
+ Beside **⚡ Skill ▾** is **⊞ Mulmo ▾** — the decks (mulmoScript presentations) this project offers,
1058
+ one click from the **Canvas**. It appears **only when there are decks to show** (none, no button),
1059
+ like the two menus next to it.
1060
+
1061
+ Picking one shows it in the Canvas beside that cell, enlarging the cell first if it was tiled.
1062
+ Nothing is typed into the session and the agent is not asked: this is a viewer, so it costs no
1063
+ tokens and works while the agent is busy.
1064
+
1065
+ **Two sources, both named — the menu never searches your disk:**
1066
+
1067
+ 1. **`artifacts/stories/` under the workspace** — where the plugin keeps the decks an agent makes.
1068
+ Always offered, nothing to configure.
1069
+ 2. **Decks you list yourself**, for one kept inside a repository:
1070
+
1071
+ ```jsonc
1072
+ // <dir>/.mulmoterminal.json
1073
+ { "decks": ["decks/launch.json", "docs/talks/retro.json"] }
1074
+ ```
1075
+
1076
+ Paths are relative to that file and must stay **inside its directory** — `../elsewhere.json` and
1077
+ absolute paths are dropped, because a config file travels with a clone. Each deck is named by its
1078
+ own `title`, or by its file name when it has none.
1079
+
1080
+ **Why you list them rather than the menu finding them:** a search does find them — along with
1081
+ everything else on disk that happens to parse as a deck. Measured on a real workspace: **250 files
1082
+ matched, 33 were the user's own decks and 217 were a checked-out repository's test fixtures and
1083
+ samples.** A menu is a short list of things you chose.
1084
+
1085
+ **Where the decks have to live:** under the workspace MulmoTerminal was started in, which is the
1086
+ directory it serves stories from. A cell opened outside it shows no button, because nothing it
1087
+ could list could be opened. Any deck you can see in the file tree is also reachable there — right-click
1088
+ a row and choose **Open in the Canvas** — with no configuration at all.
1089
+
1090
+ If a deck cannot be opened (it was deleted, or the workspace moved since startup), the cell says
1091
+ why rather than doing nothing.
1092
+
1093
+ ---
1094
+
1051
1095
  ## Files view (browse & edit)
1052
1096
 
1053
1097
  A terminal header can carry a **📁 Files** button — add it as a [header button](#header-buttons)
@@ -30,6 +30,7 @@ export const DIR_CONFIG_KEYS = [
30
30
  "buttons",
31
31
  "chips",
32
32
  "skills",
33
+ "decks",
33
34
  "provider",
34
35
  "model",
35
36
  "addDirs",
@@ -70,6 +71,7 @@ export interface DirConfigExtras {
70
71
  provider: string | null;
71
72
  model: string | null;
72
73
  skills: string[] | null;
74
+ decks: string[] | null;
73
75
  addDirs: string[] | null;
74
76
  // Tri-state on purpose: `false` is a setting this file made, and the preview has to show it as
75
77
  // one. Carried here because a boolean cannot be read back off the per-cell config the way a
@@ -91,6 +93,7 @@ export const EMPTY_DIR_CONFIG_EXTRAS: DirConfigExtras = {
91
93
  provider: null,
92
94
  model: null,
93
95
  skills: null,
96
+ decks: null,
94
97
  addDirs: null,
95
98
  appendSystemPrompt: null,
96
99
  buttonLabels: [],
package/common/keymap.ts CHANGED
@@ -21,6 +21,7 @@ export const KEYMAP_ACTIONS = [
21
21
  "terminal-new-here",
22
22
  "terminal-new-adjacent",
23
23
  "terminal-close",
24
+ "terminal-restart",
24
25
  "copy",
25
26
  "paste",
26
27
  ] as const;
@@ -48,7 +49,7 @@ export const TERMINAL_SCOPED_ACTIONS: readonly KeymapAction[] = ["copy", "paste"
48
49
  // Here rather than beside gridShortcutFor because BOTH sides decide from it: the grid dispatches on
49
50
  // it, and validateKeymap has to know that these decline the key — the handler returns WITHOUT
50
51
  // stopping the event, so a `send` on the same keystroke fires instead (codex on #1906).
51
- export const NEEDS_A_CURRENT_TERMINAL: readonly KeymapAction[] = ["zoom-next", "zoom-prev", "terminal-new-adjacent", "terminal-close"];
52
+ export const NEEDS_A_CURRENT_TERMINAL: readonly KeymapAction[] = ["zoom-next", "zoom-prev", "terminal-new-adjacent", "terminal-close", "terminal-restart"];
52
53
 
53
54
  // A key that puts BYTES into the focused terminal instead of running an app action (#1005) —
54
55
  // Cmd+Right as Ctrl+E for end-of-line, say, or Alt+B for word-back.