mulmoterminal 1.0.0 → 1.2.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.
- package/README.md +137 -39
- package/bin/mulmoterminal.js +94 -9
- package/dist/assets/{abnfDiagram-VRR7QNED-6nNByj6v-DheBdjws.js → abnfDiagram-VRR7QNED-6nNByj6v-CK1tLzZi.js} +1 -1
- package/dist/assets/architecture-TIHT7OUA-CYMWc3UT-H5BlYssV.js +1 -0
- package/dist/assets/{architectureDiagram-ZJ3FMSHR-Bgnyaj_i-DeqjBmXv.js → architectureDiagram-ZJ3FMSHR-Bgnyaj_i-DYKRXxkz.js} +1 -1
- package/dist/assets/{blockDiagram-677ZJIJ3-DQ35o5E4-C8GJRlOG.js → blockDiagram-677ZJIJ3-DQ35o5E4-DkXlAnEd.js} +1 -1
- package/dist/assets/{c4Diagram-LMCZKHZV-ClWZeiWo-DCF_O6wa.js → c4Diagram-LMCZKHZV-ClWZeiWo-DXZ6SmWu.js} +1 -1
- package/dist/assets/channel-Di5rtkx0-B0y8mvDO.js +1 -0
- package/dist/assets/{chunk-32BRIVSS-CCt9wtYd-aqSIoPX4.js → chunk-32BRIVSS-CCt9wtYd-CzMB8O8i.js} +1 -1
- package/dist/assets/{chunk-52WLFC77-FbBbR4uI-o7EFRk-Z.js → chunk-52WLFC77-FbBbR4uI-hzUvoH_V.js} +1 -1
- package/dist/assets/{chunk-C7G6YPKG-C87hlS9c-DYk1rPGy.js → chunk-C7G6YPKG-C87hlS9c-CrQXTywZ.js} +1 -1
- package/dist/assets/{chunk-EX3LRPZG-BqGqMXLN-CFsO6w_h.js → chunk-EX3LRPZG-BqGqMXLN-BSo1BpSI.js} +1 -1
- package/dist/assets/{chunk-FWX5IMBZ-BkbSAAuW-DM_MfscO.js → chunk-FWX5IMBZ-BkbSAAuW-BN9xwFlf.js} +2 -2
- package/dist/assets/{chunk-HOUHSVGY-Cxu0eDlh-BjDbxOps.js → chunk-HOUHSVGY-Cxu0eDlh-DilYgrtR.js} +1 -1
- package/dist/assets/{chunk-ICXQ74PX-hiraF_Xj-iUcDh2Ds.js → chunk-ICXQ74PX-hiraF_Xj-Ck8cH9BW.js} +1 -1
- package/dist/assets/{chunk-MOJQB5TN-CqxshQHA-ozqXE506.js → chunk-MOJQB5TN-CqxshQHA-hb8sT9ul.js} +1 -1
- package/dist/assets/{chunk-OGEWGWER-CjCr7ceX-CVnG09pj.js → chunk-OGEWGWER-CjCr7ceX-FCREpp2S.js} +1 -1
- package/dist/assets/{chunk-PUDLZKDR-Dx6M-vz1-B421SWPj.js → chunk-PUDLZKDR-Dx6M-vz1-EOkNGOKy.js} +1 -1
- package/dist/assets/{chunk-Q4XR5HBZ-CZd-9lTB-CAiDWUlL.js → chunk-Q4XR5HBZ-CZd-9lTB-BHk1rWmk.js} +1 -1
- package/dist/assets/{chunk-V7JOEXUC-rI0xlC_O-CtYufueO.js → chunk-V7JOEXUC-rI0xlC_O-CIs_bL1j.js} +1 -1
- package/dist/assets/{chunk-VAUOI2AC-DrcykVNK-jGzw5YJX.js → chunk-VAUOI2AC-DrcykVNK-Cm1y1eF0.js} +1 -1
- package/dist/assets/{chunk-VR4S4FIN-O6iF8Yvf-BQZXqb5d.js → chunk-VR4S4FIN-O6iF8Yvf-XaMLfxHT.js} +1 -1
- package/dist/assets/{chunk-WYO6CB5R-B83L_z6I-CTQn5U85.js → chunk-WYO6CB5R-B83L_z6I-C1WGAsfM.js} +1 -1
- package/dist/assets/{chunk-ZGVPDNZ5-BpFv9JSP-B_NX0SUE.js → chunk-ZGVPDNZ5-BpFv9JSP-BKMdOjwd.js} +1 -1
- package/dist/assets/classDiagram-OUVF2IWQ-BgAZMSbT-DaE02I1I.js +1 -0
- package/dist/assets/classDiagram-v2-EOCWNBFH-DxHTyui1-DaE02I1I.js +1 -0
- package/dist/assets/cynefin-VYW2F7L2-DqA3n9nY-937NWG5-.js +1 -0
- package/dist/assets/{cynefinDiagram-TSTJHNR4-x0-0sQ15-CkdgUGoD.js → cynefinDiagram-TSTJHNR4-x0-0sQ15-vmlemYgO.js} +1 -1
- package/dist/assets/{dagre-VKFMJZFB-CQdfl-bx-FSrXzQxB.js → dagre-VKFMJZFB-CQdfl-bx-D3bMpoFr.js} +1 -1
- package/dist/assets/{diagram-FQU43EPY-BOSB6VUb-yZdPA2Rw.js → diagram-FQU43EPY-BOSB6VUb-Cb76gTiK.js} +1 -1
- package/dist/assets/{diagram-G47NLZAW-DLXrcXsN-aq_xTmel.js → diagram-G47NLZAW-DLXrcXsN-C3GKnaLY.js} +1 -1
- package/dist/assets/{diagram-NH7WQ7WH-BMQp1rkF-BkL1fZyU.js → diagram-NH7WQ7WH-BMQp1rkF-CM69Zadf.js} +1 -1
- package/dist/assets/{diagram-OA4YK3LP-D1wQ0vUj-D2NsP5qB.js → diagram-OA4YK3LP-D1wQ0vUj-C_m2O-pS.js} +1 -1
- package/dist/assets/{diagram-WEI45ONY-RR0DpF8R-v-IWOK6D.js → diagram-WEI45ONY-RR0DpF8R-CsLaijnw.js} +1 -1
- package/dist/assets/{ebnfDiagram-CCIWWBDH-M123uVJ8-CPXV_s7Q.js → ebnfDiagram-CCIWWBDH-M123uVJ8-vqN4J8aH.js} +1 -1
- package/dist/assets/{erDiagram-Q63AITRT-BWx_-PXG-DvFDPrMO.js → erDiagram-Q63AITRT-BWx_-PXG-BC2_Ti6R.js} +1 -1
- package/dist/assets/eventmodeling-45OFAUF4-_BVSjAXf-Dr1OLGHI.js +1 -0
- package/dist/assets/flowDiagram-23GEKE2U-BeOc_anm-CCLlPnCf.js +1 -0
- package/dist/assets/{ganttDiagram-NO4QXBWP-BOoJ1eTw-C8hbgKqC.js → ganttDiagram-NO4QXBWP-BOoJ1eTw-BJ8RzW36.js} +1 -1
- package/dist/assets/gitGraph-TEB2WS4Q-CH12KLTN-BGZXN91M.js +1 -0
- package/dist/assets/{gitGraphDiagram-IHSO6WYX-B2CJhk_G-B5mO0MM2.js → gitGraphDiagram-IHSO6WYX-B2CJhk_G-j7ZfRBi7.js} +1 -1
- package/dist/assets/{index-DnpR_CJG.js → index-CrPHIo_O.js} +126 -126
- package/dist/assets/index-DhfRF3g0.css +1 -0
- package/dist/assets/info-DKCQHKI2-Cbw3mbiK-U7eFrQdg.js +1 -0
- package/dist/assets/{infoDiagram-FWYZ7A6U-Mp1X3pBP-D4u3DGcy.js → infoDiagram-FWYZ7A6U-Mp1X3pBP-BcxHFEoP.js} +1 -1
- package/dist/assets/{ishikawaDiagram-FXEZZL3T-BNG7tkJu-DX6cRWKX.js → ishikawaDiagram-FXEZZL3T-BNG7tkJu-D4NHNB73.js} +1 -1
- package/dist/assets/{journeyDiagram-5HDEW3XC-Dbp_hY9X-lR-zk1P5.js → journeyDiagram-5HDEW3XC-Dbp_hY9X-C5wWotnc.js} +1 -1
- package/dist/assets/{kanban-definition-HUTT4EX6-DSTc5u3q-B8BsOJR_.js → kanban-definition-HUTT4EX6-DSTc5u3q-DaM6ePy2.js} +1 -1
- package/dist/assets/{line-B1wBwzrY-CsBjF7T-.js → line-B1wBwzrY-v5xPQ3Tb.js} +1 -1
- package/dist/assets/{marp-DZRmgRY9.js → marp-C5wXHEN-.js} +1 -1
- package/dist/assets/material-symbols-outlined-BmmV8Mzf.woff2 +0 -0
- package/dist/assets/{mermaid-parser.core-DC7NPJ_M-CcAjWs6c.js → mermaid-parser.core-DC7NPJ_M-CdLorTPK.js} +2 -2
- package/dist/assets/{mermaid.core-DZM3Ha-E-CFYYZVad.js → mermaid.core-DZM3Ha-E-H2ucOstP.js} +3 -3
- package/dist/assets/{mindmap-definition-LN4V7U3C-DYtgcMsY-BRIJMUm0.js → mindmap-definition-LN4V7U3C-DYtgcMsY-BnSgJ097.js} +1 -1
- package/dist/assets/packet-7NZHBO7P-lwb58iYx-bUMa-SyO.js +1 -0
- package/dist/assets/{pegDiagram-2B236MQR-C43eIpKM-BTRDK2Rn.js → pegDiagram-2B236MQR-C43eIpKM-mXxeIrN3.js} +1 -1
- package/dist/assets/pie-RZYD4A2V-B1UWb4Gu-BmvZFSbc.js +1 -0
- package/dist/assets/{pieDiagram-ENE6RG2P-BkTqgJyR-C0wYkdhk.js → pieDiagram-ENE6RG2P-BkTqgJyR-BHLyQX_P.js} +1 -1
- package/dist/assets/{quadrantDiagram-ABIIQ3AL-Bm1Zjm45-HKnKnEKU.js → quadrantDiagram-ABIIQ3AL-Bm1Zjm45-CwECxXwc.js} +1 -1
- package/dist/assets/radar-I7S5WNFK-7CKcb_l--D2naYxey.js +1 -0
- package/dist/assets/railroad-3IZDKUUU-gCySKdnW-BB52Xytk.js +1 -0
- package/dist/assets/railroad-abnf-AHOZXSZD-BophH4r--pKzcYmzb.js +1 -0
- package/dist/assets/railroad-ebnf-EBAXGLYW-AZNjl_Zu-BXf-VL0l.js +1 -0
- package/dist/assets/railroad-peg-LSFZ7HO6-BSiEEyeb-BtIZNBUj.js +1 -0
- package/dist/assets/{railroadDiagram-RFXS5EU6-BkfbdeAs-BxYC_fFp.js → railroadDiagram-RFXS5EU6-BkfbdeAs-RtIkhujC.js} +1 -1
- package/dist/assets/{requirementDiagram-TGXJPOKE-CrGTTjYg-B3HYTfaW.js → requirementDiagram-TGXJPOKE-CrGTTjYg-Cn_wM9GJ.js} +1 -1
- package/dist/assets/{sankeyDiagram-HTMAVEWB-rWXPf03Z-BSzqUsBJ.js → sankeyDiagram-HTMAVEWB-rWXPf03Z-B4NBlZda.js} +1 -1
- package/dist/assets/{sequenceDiagram-DBY2YBRQ-nkJYWO2m-C911Onke.js → sequenceDiagram-DBY2YBRQ-nkJYWO2m-CMIBxvlT.js} +1 -1
- package/dist/assets/{stateDiagram-2N3HPSRC-T4-clK8b-B-giNW0K.js → stateDiagram-2N3HPSRC-T4-clK8b-BAjJG2OJ.js} +1 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-DIp7nhRd-CLL8JGdr.js +1 -0
- package/dist/assets/{swimlanes-5IMT3BWC-HmQNEntu-CSiN22-5.js → swimlanes-5IMT3BWC-HmQNEntu-B75jvy7P.js} +1 -1
- package/dist/assets/swimlanesDiagram-G3AALYLV-BeoZhwg7-5UMpA0Gl.js +8 -0
- package/dist/assets/{timeline-definition-FHXFAJF6-CNc9jSTP-CIyjGbiA.js → timeline-definition-FHXFAJF6-CNc9jSTP-B1AaTzX1.js} +1 -1
- package/dist/assets/treeView-QDETBFTQ-nIQcG1h9-DRcIJuj7.js +1 -0
- package/dist/assets/treemap-6X3UGDF4-BnsvC8yL-RxH8JYse.js +1 -0
- package/dist/assets/{vennDiagram-L72KCM5P-Dr3pTJ_0-D-WU2GoG.js → vennDiagram-L72KCM5P-Dr3pTJ_0-C4GAKsik.js} +1 -1
- package/dist/assets/wardley-OPB4EBWU-8Odxkx6V-BMFgaEV7.js +1 -0
- package/dist/assets/{wardleyDiagram-EHGQE667-DSFc7ZZa-BRv4D8qc.js → wardleyDiagram-EHGQE667-DSFc7ZZa-DUTWbway.js} +1 -1
- package/dist/assets/{xychartDiagram-FW5EYKEG-BP0Nn4Pp-ByYvhjoR.js → xychartDiagram-FW5EYKEG-BP0Nn4Pp-DQTMNwv_.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +17 -17
- package/server/{codex-skills.ts → agents/codex-skills.ts} +4 -1
- package/server/backends/fileChange.ts +1 -1
- package/server/backends/notifier.ts +1 -1
- package/server/backends/remoteHost/skills.spec.ts +80 -1
- package/server/backends/remoteHost/skills.ts +78 -25
- package/server/backends/thumbnailStore.ts +1 -1
- package/server/backends/workspaceSetup.ts +1 -1
- package/server/cli-init.ts +101 -0
- package/server/{config-schema.spec.ts → config/config-schema.spec.ts} +9 -1
- package/server/{config-schema.ts → config/config-schema.ts} +15 -0
- package/server/{cwd-presets.spec.ts → config/cwd-presets.spec.ts} +43 -1
- package/server/config/cwd-presets.ts +78 -0
- package/server/{dir-config.spec.ts → config/dir-config.spec.ts} +15 -0
- package/server/{dir-config.ts → config/dir-config.ts} +15 -1
- package/server/{header-context.ts → config/header-context.ts} +3 -3
- package/server/{header-title.spec.ts → config/header-title.spec.ts} +2 -2
- package/server/{header-title.ts → config/header-title.ts} +3 -3
- package/server/{open-dir.ts → files/open-dir.ts} +1 -1
- package/server/{git-status.spec.ts → git/git-status.spec.ts} +5 -10
- package/server/index.ts +136 -51
- package/server/{install-config-skill.spec.ts → infra/install-config-skill.spec.ts} +1 -1
- package/server/{install-config-skill.ts → infra/install-config-skill.ts} +4 -3
- package/server/{plugins-registry.ts → infra/plugins-registry.ts} +5 -4
- package/server/{sandbox.ts → infra/sandbox.ts} +2 -1
- package/server/infra/tmux-routes.spec.ts +120 -0
- package/server/infra/tmux-routes.ts +46 -0
- package/server/{tmux.spec.ts → infra/tmux.spec.ts} +17 -1
- package/server/{tmux.ts → infra/tmux.ts} +13 -0
- package/server/{web-push.ts → infra/web-push.ts} +1 -1
- package/server/mcp/broker.ts +1 -1
- package/server/{command-summary.ts → session/command-summary.ts} +1 -1
- package/server/session/file-cache.spec.ts +48 -0
- package/server/session/file-cache.ts +44 -0
- package/server/{transcript.spec.ts → session/transcript.spec.ts} +45 -0
- package/server/{transcript.ts → session/transcript.ts} +30 -19
- package/server/skills/mulmoterminal-config/SKILL.md +12 -0
- package/dist/assets/architecture-TIHT7OUA-CYMWc3UT-DKr4hbNv.js +0 -1
- package/dist/assets/channel-Di5rtkx0-ENMPwr9m.js +0 -1
- package/dist/assets/classDiagram-OUVF2IWQ-BgAZMSbT-C4hmeWEb.js +0 -1
- package/dist/assets/classDiagram-v2-EOCWNBFH-DxHTyui1-C4hmeWEb.js +0 -1
- package/dist/assets/cynefin-VYW2F7L2-DqA3n9nY-GgLCM_nw.js +0 -1
- package/dist/assets/eventmodeling-45OFAUF4-_BVSjAXf-ZNaf3uDd.js +0 -1
- package/dist/assets/flowDiagram-23GEKE2U-BeOc_anm-GSALmqQ3.js +0 -1
- package/dist/assets/gitGraph-TEB2WS4Q-CH12KLTN-BGOUxFnc.js +0 -1
- package/dist/assets/index-DsRhtnU0.css +0 -1
- package/dist/assets/info-DKCQHKI2-Cbw3mbiK-HXxrjjRx.js +0 -1
- package/dist/assets/material-symbols-outlined-DKJDg2oJ.woff2 +0 -0
- package/dist/assets/packet-7NZHBO7P-lwb58iYx-DB-Dy5kn.js +0 -1
- package/dist/assets/pie-RZYD4A2V-B1UWb4Gu-DGylsaHj.js +0 -1
- package/dist/assets/radar-I7S5WNFK-7CKcb_l--DjWDNt3M.js +0 -1
- package/dist/assets/railroad-3IZDKUUU-gCySKdnW-CYIDYmq5.js +0 -1
- package/dist/assets/railroad-abnf-AHOZXSZD-BophH4r--BcibSZfl.js +0 -1
- package/dist/assets/railroad-ebnf-EBAXGLYW-AZNjl_Zu-ChODKeRY.js +0 -1
- package/dist/assets/railroad-peg-LSFZ7HO6-BSiEEyeb-5nqohbXV.js +0 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-DIp7nhRd-DuCOmOmY.js +0 -1
- package/dist/assets/swimlanesDiagram-G3AALYLV-BeoZhwg7-DG3vt7aV.js +0 -8
- package/dist/assets/treeView-QDETBFTQ-nIQcG1h9-DbwA95vD.js +0 -1
- package/dist/assets/treemap-6X3UGDF4-BnsvC8yL-DEq41o1Y.js +0 -1
- package/dist/assets/wardley-OPB4EBWU-8Odxkx6V-B-jvjF9O.js +0 -1
- package/server/cwd-presets.ts +0 -40
- /package/server/{claude-args.spec.ts → agents/claude-args.spec.ts} +0 -0
- /package/server/{claude-args.ts → agents/claude-args.ts} +0 -0
- /package/server/{codex-args.spec.ts → agents/codex-args.spec.ts} +0 -0
- /package/server/{codex-args.ts → agents/codex-args.ts} +0 -0
- /package/server/{codex-session.spec.ts → agents/codex-session.spec.ts} +0 -0
- /package/server/{codex-session.ts → agents/codex-session.ts} +0 -0
- /package/server/{codex-sessions.spec.ts → agents/codex-sessions.spec.ts} +0 -0
- /package/server/{codex-sessions.ts → agents/codex-sessions.ts} +0 -0
- /package/server/{codex-skills.spec.ts → agents/codex-skills.spec.ts} +0 -0
- /package/server/{app-config.spec.ts → config/app-config.spec.ts} +0 -0
- /package/server/{app-config.ts → config/app-config.ts} +0 -0
- /package/server/{config-routes.ts → config/config-routes.ts} +0 -0
- /package/server/{header-config.spec.ts → config/header-config.spec.ts} +0 -0
- /package/server/{header-config.ts → config/header-config.ts} +0 -0
- /package/server/{header-context.spec.ts → config/header-context.spec.ts} +0 -0
- /package/server/{header-resolve.spec.ts → config/header-resolve.spec.ts} +0 -0
- /package/server/{header-resolve.ts → config/header-resolve.ts} +0 -0
- /package/server/{files-browse.spec.ts → files/files-browse.spec.ts} +0 -0
- /package/server/{files-browse.ts → files/files-browse.ts} +0 -0
- /package/server/{open-dir.spec.ts → files/open-dir.spec.ts} +0 -0
- /package/server/{pick-file.spec.ts → files/pick-file.spec.ts} +0 -0
- /package/server/{pick-file.ts → files/pick-file.ts} +0 -0
- /package/server/{scripts.spec.ts → files/scripts.spec.ts} +0 -0
- /package/server/{scripts.ts → files/scripts.ts} +0 -0
- /package/server/{gh.ts → git/gh.ts} +0 -0
- /package/server/{git-status.ts → git/git-status.ts} +0 -0
- /package/server/{gitRemote.spec.ts → git/gitRemote.spec.ts} +0 -0
- /package/server/{gitRemote.ts → git/gitRemote.ts} +0 -0
- /package/server/{issues.spec.ts → git/issues.spec.ts} +0 -0
- /package/server/{issues.ts → git/issues.ts} +0 -0
- /package/server/{pr-for-branch.spec.ts → git/pr-for-branch.spec.ts} +0 -0
- /package/server/{pr-for-branch.ts → git/pr-for-branch.ts} +0 -0
- /package/server/{prs.spec.ts → git/prs.spec.ts} +0 -0
- /package/server/{prs.ts → git/prs.ts} +0 -0
- /package/server/{worktree-diff.spec.ts → git/worktree-diff.spec.ts} +0 -0
- /package/server/{worktree-diff.ts → git/worktree-diff.ts} +0 -0
- /package/server/{worktree-pr.spec.ts → git/worktree-pr.spec.ts} +0 -0
- /package/server/{worktree-pr.ts → git/worktree-pr.ts} +0 -0
- /package/server/{worktree-routes.spec.ts → git/worktree-routes.spec.ts} +0 -0
- /package/server/{worktree-routes.ts → git/worktree-routes.ts} +0 -0
- /package/server/{worktrees.spec.ts → git/worktrees.spec.ts} +0 -0
- /package/server/{worktrees.ts → git/worktrees.ts} +0 -0
- /package/server/{accounting-tool.ts → infra/accounting-tool.ts} +0 -0
- /package/server/{host-tools.ts → infra/host-tools.ts} +0 -0
- /package/server/{pubsub.ts → infra/pubsub.ts} +0 -0
- /package/server/{sandbox.spec.ts → infra/sandbox.spec.ts} +0 -0
- /package/server/{spa-fallback.spec.ts → infra/spa-fallback.spec.ts} +0 -0
- /package/server/{spa-fallback.ts → infra/spa-fallback.ts} +0 -0
- /package/server/{web-push.spec.ts → infra/web-push.spec.ts} +0 -0
- /package/server/{activity-hook.spec.ts → session/activity-hook.spec.ts} +0 -0
- /package/server/{activity-hook.ts → session/activity-hook.ts} +0 -0
- /package/server/{activity-state.spec.ts → session/activity-state.spec.ts} +0 -0
- /package/server/{activity-state.ts → session/activity-state.ts} +0 -0
- /package/server/{command-summary.spec.ts → session/command-summary.spec.ts} +0 -0
- /package/server/{cost.spec.ts → session/cost.spec.ts} +0 -0
- /package/server/{cost.ts → session/cost.ts} +0 -0
- /package/server/{session-resolve.spec.ts → session/session-resolve.spec.ts} +0 -0
- /package/server/{session-resolve.ts → session/session-resolve.ts} +0 -0
- /package/server/{terminal-replay.spec.ts → session/terminal-replay.spec.ts} +0 -0
- /package/server/{terminal-replay.ts → session/terminal-replay.ts} +0 -0
package/README.md
CHANGED
|
@@ -1,28 +1,57 @@
|
|
|
1
1
|
# mulmoterminal
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
3
|
+
**Run a whole team of coding agents from your browser — and actually keep up with them.**
|
|
4
|
+
|
|
5
|
+
MulmoTerminal turns [Claude Code](https://claude.com/claude-code) (and OpenAI's **Codex**)
|
|
6
|
+
into a parallel, observable workspace: many agent sessions at once in a grid, each one
|
|
7
|
+
color-coded so you see at a glance which are **working**, which **need you**, and which are
|
|
8
|
+
**done** — plus rich GUI output, git worktrees with one-click PRs, cost readouts, and a
|
|
9
|
+
ping to your phone when a task finishes. One `npx` command, no Electron, no config.
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npx mulmoterminal # starts on http://localhost:34567 and opens your browser
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Why you'll want it
|
|
16
|
+
|
|
17
|
+
- **See every agent at once.** A grid of live sessions, each cell color-coded by state —
|
|
18
|
+
**working** (blue), **blocked / needs a permission** (amber), **done, unreviewed** (blue),
|
|
19
|
+
**idle** — with an attention chime and a toolbar tally, so an off-screen agent that's stuck
|
|
20
|
+
never slips past you. Stop babysitting one terminal; supervise ten.
|
|
21
|
+
- **A GUI for your agents, not just a terminal.** Beside the terminal, a **Canvas** panel
|
|
22
|
+
renders what an agent produces over MCP — **documents, forms, charts, generated images,
|
|
23
|
+
HTML, collection cards** — each drawn by its own plugin. The agent doesn't just print
|
|
24
|
+
text; it hands you an interface.
|
|
25
|
+
- **Get pulled back from anywhere.** A finished background task sends a **Web Push to your
|
|
26
|
+
phone**, and the **RemoteHost** companion lets you watch and start sessions from the phone
|
|
27
|
+
itself — walk away, get pinged, jump back in.
|
|
28
|
+
- **Nothing is lost on a restart.** With `tmux`, every session survives a server crash,
|
|
29
|
+
restart, or `node --watch` reload — a mid-turn agent, a long build, a dev server all keep
|
|
30
|
+
running and reattach when you come back.
|
|
31
|
+
- **Ship without leaving the grid.** Each repo cell shows a **git branch chip**, isolates
|
|
32
|
+
work in a one-click **git worktree**, opens a **diff** panel, and does **commit / push /
|
|
33
|
+
open PR** — so several agents can work the same repo without colliding.
|
|
34
|
+
- **Know what it's costing.** Per-session **context %**, **token**, and **estimated $**
|
|
35
|
+
readouts, an **activity timeline** of tool calls, and **AI-summarized** cell titles and
|
|
36
|
+
command-output explanations — so a wall of parallel agents stays legible.
|
|
37
|
+
- **Make it yours.** Per-directory **themes, colors, and name badges** (`prod` in red,
|
|
38
|
+
`staging` in amber), a configurable header (buttons + info chips), custom attention sounds,
|
|
39
|
+
and Run / Skill menus to launch a project's scripts and `.claude/skills` right inside a cell.
|
|
40
|
+
|
|
41
|
+
### What it is, under the hood
|
|
42
|
+
|
|
43
|
+
Each session runs as a real PTY on the server (the agent CLI in a pseudo-terminal) and is
|
|
44
|
+
streamed to an [xterm.js](https://xtermjs.org/) terminal in the browser over a WebSocket. A
|
|
45
|
+
sidebar lists every session for the project and reflects, in real time, which are **working**
|
|
46
|
+
(the agent is thinking) and which **need attention** (waiting for input, or finished with
|
|
47
|
+
output you haven't seen) — driven by Claude/Codex activity hooks the server injects per spawn.
|
|
48
|
+
|
|
49
|
+
**Inserting a file path** — like a native terminal, you can put a file's absolute path into
|
|
50
|
+
the prompt: **drag a file** onto the terminal (works where the browser exposes the path via
|
|
51
|
+
`file://` — Firefox/Safari), or click the **📎 file button** in the terminal header, which
|
|
52
|
+
asks the local server to open the OS file dialog and inserts the chosen path (works in every
|
|
53
|
+
browser, including Chrome). The path is inserted at the cursor — it is not submitted, so you
|
|
54
|
+
can review it first.
|
|
26
55
|
|
|
27
56
|
---
|
|
28
57
|
|
|
@@ -41,6 +70,13 @@ npm install -g mulmoterminal
|
|
|
41
70
|
mulmoterminal
|
|
42
71
|
```
|
|
43
72
|
|
|
73
|
+
**First-run setup (optional).** `npx mulmoterminal init` checks your environment (Node ≥ 22.9,
|
|
74
|
+
the `claude` CLI, plus optional `tmux` / `gh` / `codex`), seeds the launcher's **directory
|
|
75
|
+
presets** from the projects in your Claude Code history, and writes `~/.mulmoterminal/config.json`.
|
|
76
|
+
It's **idempotent** — re-run it any time to refresh the presets; it overwrites the managed parts
|
|
77
|
+
and keeps your other settings. When `claude` is installed it can hand off to the
|
|
78
|
+
`/mulmoterminal-config` skill for interactive tweaks.
|
|
79
|
+
|
|
44
80
|
A global install isn't auto-updated, so on startup MulmoTerminal checks npm and
|
|
45
81
|
prints a one-line notice when a newer version is available (`npm i -g mulmoterminal`
|
|
46
82
|
to update). Disable with `MULMOTERMINAL_NO_UPDATE_CHECK=1` (or `NO_UPDATE_NOTIFIER=1`).
|
|
@@ -71,6 +107,7 @@ server, and opens the browser. For local development from a clone, see
|
|
|
71
107
|
- [Configuration](#configuration)
|
|
72
108
|
- [Running](#running)
|
|
73
109
|
- [Scripts (Run menu)](#scripts-run-menu)
|
|
110
|
+
- [Skills (Skill menu)](#skills-skill-menu)
|
|
74
111
|
- [Files view (browse & edit)](#files-view-browse--edit)
|
|
75
112
|
- [Git worktrees & pull requests](#git-worktrees--pull-requests)
|
|
76
113
|
- [Cost & token usage](#cost--token-usage)
|
|
@@ -495,6 +532,39 @@ the last 32 KB of output. See
|
|
|
495
532
|
|
|
496
533
|
---
|
|
497
534
|
|
|
535
|
+
## Skills (Skill menu)
|
|
536
|
+
|
|
537
|
+
Next to the **▶ Run ▾** dropdown, every running terminal's header has a **⚡ Skill ▾**
|
|
538
|
+
dropdown — in both the single view and each grid cell, and **only when the open
|
|
539
|
+
project has skills** (nothing discovered, no button). It lists the
|
|
540
|
+
[Claude skills](https://docs.claude.com/en/docs/claude-code/skills) discoverable for
|
|
541
|
+
that terminal's directory — both **project scope** (`<dir>/.claude/skills`) and **user
|
|
542
|
+
scope** (`~/.claude/skills`), the same skills Claude sees — and, on pick, **runs the
|
|
543
|
+
skill in that session**: it types the skill's invocation into the terminal and submits
|
|
544
|
+
it (for Claude, its `/<slug>` command; for Codex, which has no slash command, a plain
|
|
545
|
+
`Use the "<slug>" skill.` instruction). Unlike **▶ Run** — which launches a
|
|
546
|
+
`script.json` shell command in a spare cell — a skill runs **in the session you
|
|
547
|
+
picked it from**, continuing that conversation.
|
|
548
|
+
|
|
549
|
+
**Ordering:** working-dir (project) skills come **first**, then user-scope ones,
|
|
550
|
+
alphabetical within each group; a project skill of the same slug shadows the user one.
|
|
551
|
+
|
|
552
|
+
**Filtering:** add a `skills` array to the directory's
|
|
553
|
+
[`.mulmoterminal.json`](#per-directory-settings-projectmulmoterminaljson) to narrow the menu —
|
|
554
|
+
an allowlist of slugs that also sets the order (only those show, in that order). Omit
|
|
555
|
+
it to show everything.
|
|
556
|
+
|
|
557
|
+
```jsonc
|
|
558
|
+
// <dir>/.mulmoterminal.json
|
|
559
|
+
{ "skills": ["review-diff", "commit-msg"] }
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
Each menu item shows the skill's id, with its `SKILL.md` `description` as the hover
|
|
563
|
+
tooltip. A directory (or workspace) without any `.claude/skills` simply shows no
|
|
564
|
+
button. Skills are discovered read-only; the menu never creates or edits them.
|
|
565
|
+
|
|
566
|
+
---
|
|
567
|
+
|
|
498
568
|
## Files view (browse & edit)
|
|
499
569
|
|
|
500
570
|
A terminal header can carry a **📁 Files** button — add it as a [header button](#header-buttons)
|
|
@@ -683,6 +753,30 @@ position the client sends back to `/ws/run`).
|
|
|
683
753
|
A missing or invalid `script.json` is **not** an error — it yields an empty
|
|
684
754
|
`scripts` array.
|
|
685
755
|
|
|
756
|
+
### HTTP: `GET /api/skills`
|
|
757
|
+
|
|
758
|
+
The Claude skills discoverable for a terminal's chosen directory (`?cwd=<dir>`,
|
|
759
|
+
falling back to `CLAUDE_CWD`) — project scope (`<cwd>/.claude/skills`) plus user scope
|
|
760
|
+
(`~/.claude/skills`), deduped by slug (project shadows user), **working-dir skills
|
|
761
|
+
first**; see [Skills (Skill menu)](#skills-skill-menu). A `skills` allowlist in that
|
|
762
|
+
directory's `.mulmoterminal.json` narrows and reorders the result; absent → all. The
|
|
763
|
+
resolved `cwd` is echoed back. Each entry carries its `slug` (the skill invoked as
|
|
764
|
+
`/<slug>`) and the `SKILL.md` `description` (the menu tooltip).
|
|
765
|
+
|
|
766
|
+
```jsonc
|
|
767
|
+
// GET /api/skills?cwd=/Users/me/proj
|
|
768
|
+
{
|
|
769
|
+
"cwd": "/Users/me/proj",
|
|
770
|
+
"skills": [
|
|
771
|
+
{ "slug": "commit", "description": "Write a commit message" },
|
|
772
|
+
{ "slug": "review", "description": "Review the current diff" }
|
|
773
|
+
]
|
|
774
|
+
}
|
|
775
|
+
```
|
|
776
|
+
|
|
777
|
+
A directory without any discoverable skills is **not** an error — it yields an empty
|
|
778
|
+
`skills` array.
|
|
779
|
+
|
|
686
780
|
### HTTP: `POST /api/command/summarize`
|
|
687
781
|
|
|
688
782
|
Runs `claude -p` **headless** over a command cell's captured terminal output and
|
|
@@ -1025,22 +1119,26 @@ resumed session falls back to any on-disk `ai-title`.
|
|
|
1025
1119
|
server/
|
|
1026
1120
|
index.ts Express app, /api routes, upgrade routing, PTY lifecycle,
|
|
1027
1121
|
session state, hook injection, session discovery, GUI-MCP mount
|
|
1028
|
-
agents/ AgentAdapter seam
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
cost
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1122
|
+
agents/ AgentAdapter seam + per-agent args/sessions: claude.ts,
|
|
1123
|
+
codex.ts, registry.ts, claude-args.ts, codex-args.ts,
|
|
1124
|
+
codex-session(s).ts, codex-skills.ts
|
|
1125
|
+
config/ user + per-directory + header config: app-config.ts,
|
|
1126
|
+
config-routes.ts, config-schema.ts, dir-config.ts,
|
|
1127
|
+
cwd-presets.ts, header-*.ts
|
|
1128
|
+
session/ per-session transcript/activity/cost: transcript.ts,
|
|
1129
|
+
session-resolve.ts, activity-*.ts, cost.ts,
|
|
1130
|
+
command-summary.ts, terminal-replay.ts, file-cache.ts
|
|
1131
|
+
git/ git & GitHub (via gh) + worktrees: git-status.ts, gitRemote.ts,
|
|
1132
|
+
gh.ts, prs.ts, issues.ts, pr-for-branch.ts, worktrees.ts, worktree-*.ts
|
|
1133
|
+
files/ files-browse.ts (contained tree read/write), pick-file.ts,
|
|
1134
|
+
open-dir.ts, scripts.ts (Run-menu script.json loader)
|
|
1135
|
+
infra/ process/transport/misc: tmux.ts, tmux-routes.ts, sandbox.ts,
|
|
1136
|
+
pubsub.ts (socket.io /ws/pubsub), spa-fallback.ts, host-tools.ts,
|
|
1137
|
+
plugins-registry.ts, web-push.ts, install-config-skill.ts, accounting-tool.ts
|
|
1138
|
+
mcp/ per-session MCP broker
|
|
1139
|
+
backends/ wiki, collections, feeds, accounting, notifier,
|
|
1140
|
+
translation, whisper, remote-host, html, files
|
|
1141
|
+
skills/ bundled mulmoterminal-config skill assets
|
|
1044
1142
|
fix-pty-perms.js postinstall: fixes node-pty binary permissions
|
|
1045
1143
|
src/
|
|
1046
1144
|
App.vue Layout; owns the active session + single/grid view
|
package/bin/mulmoterminal.js
CHANGED
|
@@ -11,6 +11,7 @@ import { get as httpGet } from "node:http";
|
|
|
11
11
|
import { createRequire } from "node:module";
|
|
12
12
|
import { createServer } from "node:net";
|
|
13
13
|
import { dirname, join, resolve } from "node:path";
|
|
14
|
+
import { createInterface } from "node:readline";
|
|
14
15
|
import { fileURLToPath } from "node:url";
|
|
15
16
|
import { fetchLatestVersion, isNewerVersion } from "./update-check.js";
|
|
16
17
|
|
|
@@ -46,18 +47,87 @@ function checkForUpdate() {
|
|
|
46
47
|
});
|
|
47
48
|
}
|
|
48
49
|
|
|
49
|
-
|
|
50
|
+
// Detect a CLI on the user's PATH by asking for its version. Intentionally resolves from
|
|
51
|
+
// PATH — detecting the user's installed tools is the whole point of the pre-flight /
|
|
52
|
+
// `init` checks.
|
|
53
|
+
function hasCommand(cmd, versionArg = "--version") {
|
|
50
54
|
try {
|
|
51
|
-
// Intentionally resolves `claude` from the user's PATH — detecting their
|
|
52
|
-
// Claude Code CLI install is the whole point of this pre-flight check.
|
|
53
55
|
// eslint-disable-next-line sonarjs/no-os-command-from-path
|
|
54
|
-
execSync(
|
|
56
|
+
execSync(`${cmd} ${versionArg}`, { stdio: "pipe" });
|
|
55
57
|
return true;
|
|
56
58
|
} catch {
|
|
57
59
|
return false;
|
|
58
60
|
}
|
|
59
61
|
}
|
|
60
62
|
|
|
63
|
+
function claudeInstalled() {
|
|
64
|
+
return hasCommand("claude");
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function promptYesNo(question) {
|
|
68
|
+
return new Promise((res) => {
|
|
69
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
70
|
+
rl.question(question, (answer) => {
|
|
71
|
+
rl.close();
|
|
72
|
+
res(/^y(es)?$/i.test(answer.trim()));
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// `npx mulmoterminal init` — idempotent first-run setup. Environment/CLI checks + the
|
|
78
|
+
// optional interactive-config launch live here (PATH-command detection); the config
|
|
79
|
+
// derivation + write is the tsx-run server/cli-init.ts.
|
|
80
|
+
async function runInit(initArgs) {
|
|
81
|
+
log("Setting up MulmoTerminal…\n");
|
|
82
|
+
|
|
83
|
+
const [maj, min] = process.versions.node.split(".").map((n) => Number.parseInt(n, 10));
|
|
84
|
+
const nodeOk = maj > 22 || (maj === 22 && min >= 9);
|
|
85
|
+
console.log(nodeOk ? ` ✓ Node ${process.versions.node}` : ` ✗ Node ${process.versions.node} — MulmoTerminal needs ≥ 22.9`);
|
|
86
|
+
|
|
87
|
+
const hasClaude = claudeInstalled();
|
|
88
|
+
if (hasClaude) {
|
|
89
|
+
console.log(" ✓ Claude Code CLI");
|
|
90
|
+
} else {
|
|
91
|
+
console.log(" ✗ Claude Code CLI — not found");
|
|
92
|
+
console.log(" → npm install -g @anthropic-ai/claude-code (then run `claude` and log in)");
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
for (const [cmd, versionArg, why, hint] of [
|
|
96
|
+
["tmux", "-V", "sessions survive a restart", "brew install tmux · apt install tmux"],
|
|
97
|
+
["gh", "--version", "PRs & Issues view + one-click PRs", "https://cli.github.com (then: gh auth login)"],
|
|
98
|
+
["codex", "--version", "run OpenAI Codex as an agent", "npm install -g @openai/codex"],
|
|
99
|
+
]) {
|
|
100
|
+
console.log(hasCommand(cmd, versionArg) ? ` ✓ ${cmd} — ${why}` : ` ○ ${cmd} — optional (${why})\n → ${hint}`);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Config half: derive working-dir presets from Claude history + write config.json.
|
|
104
|
+
console.log("");
|
|
105
|
+
const initExit = await new Promise((res) => {
|
|
106
|
+
const child = spawn(process.execPath, ["--import", "tsx", join(PKG_DIR, "server", "cli-init.ts"), ...initArgs], {
|
|
107
|
+
cwd: PKG_DIR,
|
|
108
|
+
env: { ...process.env },
|
|
109
|
+
stdio: "inherit",
|
|
110
|
+
});
|
|
111
|
+
child.on("exit", (code) => res(code ?? 0));
|
|
112
|
+
});
|
|
113
|
+
if (initExit) {
|
|
114
|
+
process.exitCode = initExit;
|
|
115
|
+
error("Setup did not complete — see the error above.");
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Offer the interactive skill only in a real terminal; a non-TTY run (CI / piped input)
|
|
120
|
+
// must never block waiting on stdin.
|
|
121
|
+
if (hasClaude && process.stdin.isTTY && (await promptYesNo("\nConfigure interactively now with the /mulmoterminal-config skill? [y/N] "))) {
|
|
122
|
+
log("Launching Claude — use /mulmoterminal-config (or just ask it to configure MulmoTerminal).");
|
|
123
|
+
// eslint-disable-next-line sonarjs/no-os-command-from-path
|
|
124
|
+
spawn("claude", ["Use the mulmoterminal-config skill to configure MulmoTerminal."], { stdio: "inherit" });
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (hasClaude) log("Later: run `claude` in any project and use /mulmoterminal-config");
|
|
128
|
+
log("Setup done. Start MulmoTerminal: npx mulmoterminal");
|
|
129
|
+
}
|
|
130
|
+
|
|
61
131
|
function pickOpenCommand() {
|
|
62
132
|
if (process.platform === "darwin") return "open";
|
|
63
133
|
if (process.platform === "win32") return "start";
|
|
@@ -225,12 +295,15 @@ function runServer(port, noOpen, cwd, onChild) {
|
|
|
225
295
|
});
|
|
226
296
|
}
|
|
227
297
|
|
|
228
|
-
|
|
229
|
-
|
|
298
|
+
function printHelp() {
|
|
299
|
+
console.log(`
|
|
300
|
+
Usage: npx mulmoterminal [command] [options]
|
|
230
301
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
302
|
+
Commands:
|
|
303
|
+
(none) Start the server (default)
|
|
304
|
+
init First-run setup: check your environment, seed working-directory
|
|
305
|
+
presets from your Claude Code history, and write
|
|
306
|
+
~/.mulmoterminal/config.json (idempotent — safe to re-run)
|
|
234
307
|
|
|
235
308
|
Options:
|
|
236
309
|
--cwd <dir> Working directory claude runs in (default: current directory; relative paths allowed)
|
|
@@ -239,6 +312,18 @@ Options:
|
|
|
239
312
|
--version Show version
|
|
240
313
|
--help Show this help
|
|
241
314
|
`);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
async function main() {
|
|
318
|
+
const args = process.argv.slice(2);
|
|
319
|
+
|
|
320
|
+
if (args[0] === "init") {
|
|
321
|
+
await runInit(args.slice(1));
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
326
|
+
printHelp();
|
|
242
327
|
return;
|
|
243
328
|
}
|
|
244
329
|
if (args.includes("--version")) {
|
|
@@ -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-
|
|
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-CdLorTPK.js";import"./chunk-WYO6CB5R-B83L_z6I-C1WGAsfM.js";import"./chunk-VAUOI2AC-DrcykVNK-Cm1y1eF0.js";import{n as i,r as a,t as o}from"./chunk-MOJQB5TN-CqxshQHA-hb8sT9ul.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-CdLorTPK.js";export{e as createArchitectureServices};
|