mulmoterminal 9.4.0 → 9.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/bin/agent-bins.js +1 -1
- package/bin/cli-args.js +5 -5
- package/bin/has-command.js +3 -3
- package/bin/mulmoterminal.js +2 -2
- package/bin/room.js +1 -1
- package/bin/server-supervision.js +2 -2
- package/common/agentAccounts.ts +1 -1
- package/common/collectionNotifyTarget.ts +1 -1
- package/common/collectionPortability.ts +1 -1
- package/common/customAgents.ts +1 -1
- package/common/dirConfigSource.ts +1 -1
- package/common/guiMcpAgents.ts +2 -2
- package/common/machineLoad.ts +1 -1
- package/common/mobileFiles.ts +1 -1
- package/common/playfulEffects.ts +1 -1
- package/common/promptHistory.ts +1 -1
- package/common/rawContentType.ts +1 -1
- package/common/sessionProcesses.ts +1 -1
- package/common/sourceExtensions.ts +1 -1
- package/common/survivingSessions.ts +1 -1
- package/common/toolGroups.ts +6 -2
- package/common/transcriptView.ts +1 -1
- package/common/worktreeEnv.ts +1 -1
- package/dist/assets/{abnfDiagram-YUKMZFIV-DWmlUOJW.js → abnfDiagram-YUKMZFIV-hhgBEMEq.js} +1 -1
- package/dist/assets/architecture-WOLXFQ4H-C2eqTYis.js +1 -0
- package/dist/assets/{architectureDiagram-47P4ROYG-B8Hgq4Cp.js → architectureDiagram-47P4ROYG-FsL1segb.js} +1 -1
- package/dist/assets/{blockDiagram-E7TT5TSB-CIpT6QxM.js → blockDiagram-E7TT5TSB-DzJI6I2Q.js} +1 -1
- package/dist/assets/{c4Diagram-CRA5TL53-D_pxzVdZ.js → c4Diagram-CRA5TL53-CtJiRJPi.js} +1 -1
- package/dist/assets/channel-BEijHRv-.js +1 -0
- package/dist/assets/{chunk-2BW5OAIV-CWuO4jhK.js → chunk-2BW5OAIV-DTyc1chr.js} +1 -1
- package/dist/assets/{chunk-3YJQHVM4-BZqOeXYM.js → chunk-3YJQHVM4-SZZtBSbB.js} +1 -1
- package/dist/assets/{chunk-4EA7E6EY-BZhm-tyj.js → chunk-4EA7E6EY-Dnh5IiDB.js} +1 -1
- package/dist/assets/{chunk-7TKQ45FW-DYTRQAzI.js → chunk-7TKQ45FW-xY5f-VkB.js} +1 -1
- package/dist/assets/{chunk-AW2ZBBNX-CmX9OUG5.js → chunk-AW2ZBBNX-CzNEI48Y.js} +1 -1
- package/dist/assets/{chunk-DBDB3WZW-C_kRuZ_g.js → chunk-DBDB3WZW-CBaVRp3n.js} +1 -1
- package/dist/assets/{chunk-E2ZNV5FY-PMVyl7JW.js → chunk-E2ZNV5FY-D_ZloHYl.js} +1 -1
- package/dist/assets/{chunk-EU5HNXII-D6a2T4GB.js → chunk-EU5HNXII-CM48kCcn.js} +1 -1
- package/dist/assets/{chunk-FVRAUYC3-Ci8yvNZ9.js → chunk-FVRAUYC3-Cd0tkmQC.js} +1 -1
- package/dist/assets/{chunk-HJ2JQQFS-BAo22I2g.js → chunk-HJ2JQQFS-CDIS57pJ.js} +1 -1
- package/dist/assets/{chunk-HTAEGDNF-Bztf1TF9.js → chunk-HTAEGDNF-DJINU5Vm.js} +1 -1
- package/dist/assets/{chunk-KQW6MTUR-Cpd8uLaz.js → chunk-KQW6MTUR-DPMQ4ZII.js} +1 -1
- package/dist/assets/{chunk-NTY3LDVX-DS7EozMm.js → chunk-NTY3LDVX-ABBLvDpj.js} +1 -1
- package/dist/assets/{chunk-VPRB5NB3-BsayPsyI.js → chunk-VPRB5NB3-zipI-qki.js} +1 -1
- package/dist/assets/{chunk-XC4XBNZT-B9RAkj0_.js → chunk-XC4XBNZT-BjwIS2jF.js} +1 -1
- package/dist/assets/{classDiagram-v2-K4WV4PDN-B96anFih.js → classDiagram-v2-K4WV4PDN-Bv6BEoz9.js} +1 -1
- package/dist/assets/{cynefin-EF2NZ3EQ-DaRjsqTT.js → cynefin-EF2NZ3EQ-jj2DUfug.js} +1 -1
- package/dist/assets/{cynefinDiagram-3GCD6N5R-DmaDXqwQ.js → cynefinDiagram-3GCD6N5R-DmyRL1jR.js} +1 -1
- package/dist/assets/{dagre-W4DXFKR2-CCPYaPKW.js → dagre-W4DXFKR2--qRyrnSG.js} +1 -1
- package/dist/assets/{diagram-2UJZ2QOL-Bz_0J0xb.js → diagram-2UJZ2QOL--Am2W9eP.js} +1 -1
- package/dist/assets/{diagram-OVF4WLC6-DH40v_HT.js → diagram-OVF4WLC6-CrmIKNJ_.js} +1 -1
- package/dist/assets/{diagram-PFPMY2P6-Cn3GRglb.js → diagram-PFPMY2P6-Cz4VhlvF.js} +1 -1
- package/dist/assets/{diagram-UMYRVEAY-CURAPmRP.js → diagram-UMYRVEAY-C0_OEd0T.js} +1 -1
- package/dist/assets/{diagram-YEKJPTXX-Bw5Og2wh.js → diagram-YEKJPTXX-BhLd9EOW.js} +1 -1
- package/dist/assets/{diagram-ZIFT7M5P-C2ik6BtG.js → diagram-ZIFT7M5P-tdbeX1GX.js} +1 -1
- package/dist/assets/{dist-DEidvvvo.js → dist--M5nyOuA.js} +1 -1
- package/dist/assets/{dist-yOm_Z6fs.js → dist-BV1OoWUP.js} +1 -1
- package/dist/assets/{dist-DgGnuf0W.js → dist-CsojzGtC.js} +1 -1
- package/dist/assets/{dist-Dmvf_2Tb.js → dist-E8f8sfaM.js} +1 -1
- package/dist/assets/{dist-DB5NRLDD.js → dist-N2Vfmi62.js} +1 -1
- package/dist/assets/{ebnfDiagram-VR2GEFS7-VO3gnkr0.js → ebnfDiagram-VR2GEFS7-D36sVn6o.js} +1 -1
- package/dist/assets/{elk-IJKZMXRS-BKUcx8sd.js → elk-IJKZMXRS-Db-K1ezK.js} +1 -1
- package/dist/assets/{erDiagram-O2IAPWRE-BwvCT4xl.js → erDiagram-O2IAPWRE-CaVPyGk3.js} +1 -1
- package/dist/assets/eventmodeling-K75KTNOO-DYuYDxxo.js +1 -0
- package/dist/assets/flowDiagram-OXPTDLAJ-B4CYTSfJ.js +1 -0
- package/dist/assets/{ganttDiagram-R7TSEDQI-Bvl8cC1J.js → ganttDiagram-R7TSEDQI-B_qO4Nhi.js} +1 -1
- package/dist/assets/{gitGraph-VSP46ZUC-FUMBbzG-.js → gitGraph-VSP46ZUC-DXO4HvcW.js} +1 -1
- package/dist/assets/{gitGraphDiagram-XJZIOB7I-C1qKuleL.js → gitGraphDiagram-XJZIOB7I-DeiAOFyP.js} +1 -1
- package/dist/assets/index-BHPjYPj5.css +1 -0
- package/dist/assets/{index-DzaL9uvY.js → index-DrkgQTL9.js} +362 -362
- package/dist/assets/{info-OHQRW6UA-Cx1RvS7j.js → info-OHQRW6UA-W0rraMdj.js} +1 -1
- package/dist/assets/{infoDiagram-5W2HQ5XZ-CglvBIZr.js → infoDiagram-5W2HQ5XZ-DBdrFN9s.js} +1 -1
- package/dist/assets/{ishikawaDiagram-K3B6WC7H-21mhaWkV.js → ishikawaDiagram-K3B6WC7H-DFmkMZqA.js} +1 -1
- package/dist/assets/{journeyDiagram-COXZFDF6-mjRSLdQz.js → journeyDiagram-COXZFDF6-F8WZ7LhG.js} +1 -1
- package/dist/assets/{kanban-definition-P3RFRI5V-CU9Svbw1.js → kanban-definition-P3RFRI5V-D69TK8UM.js} +1 -1
- package/dist/assets/{line-C04Tfuea.js → line-C3UxcAKj.js} +1 -1
- package/dist/assets/{manifold-9aFkM3u1.js → manifold-C4_OD6jf.js} +1 -1
- package/dist/assets/{mermaid-parser.core--3w-WUbe.js → mermaid-parser.core-D9bG0VLG.js} +3 -3
- package/dist/assets/{mermaid.core-Dd_Uhv_d.js → mermaid.core-xdDqFngm.js} +4 -4
- package/dist/assets/{mindmap-definition-LZFPQGKD-CbW_yTNZ.js → mindmap-definition-LZFPQGKD-D0XqFq8l.js} +1 -1
- package/dist/assets/{packet-JDAUHWVQ-BXURqtlo.js → packet-JDAUHWVQ-xlLarQgj.js} +1 -1
- package/dist/assets/{pegDiagram-BGZESJAR-DSEUb-Of.js → pegDiagram-BGZESJAR-CYX1PF0A.js} +1 -1
- package/dist/assets/{pie-XZMESJXO-DjJ-azB2.js → pie-XZMESJXO-4GeXkqd6.js} +1 -1
- package/dist/assets/{pieDiagram-CAPJLFHJ-scI7bSEU.js → pieDiagram-CAPJLFHJ-CHInvczR.js} +1 -1
- package/dist/assets/{quadrantDiagram-GDMTTRAM-PNFCt89r.js → quadrantDiagram-GDMTTRAM-DTNouAH7.js} +1 -1
- package/dist/assets/{radar-ABXABTNO-L-Dw6KMl.js → radar-ABXABTNO-Ccdu3jGM.js} +1 -1
- package/dist/assets/{railroad-I3PHUGI6-BEAUsBZw.js → railroad-I3PHUGI6-nD7Lif0z.js} +1 -1
- package/dist/assets/railroad-abnf-LNEFI6M7-CUhu0O-Q.js +1 -0
- package/dist/assets/railroad-ebnf-DWYD2UWJ-DtcWz2W3.js +1 -0
- package/dist/assets/railroad-peg-JR7BVNR7-uhtRt6Pv.js +1 -0
- package/dist/assets/{railroadDiagram-SM67HX2B-BGvE-m81.js → railroadDiagram-SM67HX2B-C3VcwA1y.js} +1 -1
- package/dist/assets/{requirementDiagram-X7JNWC4A-7fmJx8OJ.js → requirementDiagram-X7JNWC4A-BEJRea8N.js} +1 -1
- package/dist/assets/{sankeyDiagram-UM26HJRW-MpHXOOu7.js → sankeyDiagram-UM26HJRW-BfuAg96e.js} +1 -1
- package/dist/assets/{sequenceDiagram-ZO4K6R2Y-BZi27q-9.js → sequenceDiagram-ZO4K6R2Y-CC6kNJnO.js} +1 -1
- package/dist/assets/{stateDiagram-v2-TBUQTH76-75Ru1bh5.js → stateDiagram-v2-TBUQTH76-CLmvvBWT.js} +1 -1
- package/dist/assets/{swimlanes-N4OXWK64-CdHEof1l.js → swimlanes-N4OXWK64-BTH3MSUE.js} +1 -1
- package/dist/assets/swimlanesDiagram-K3J5GTZL-mPXto8oK.js +8 -0
- package/dist/assets/{timeline-definition-YOQAKGHF-Du_4BiF0.js → timeline-definition-YOQAKGHF-B0y0Ek2u.js} +1 -1
- package/dist/assets/{treeView-D4JQ5SDB-CgXVgqsW.js → treeView-D4JQ5SDB-Cy-ron95.js} +1 -1
- package/dist/assets/{treemap-SAJKECNS-DSBvk8eX.js → treemap-SAJKECNS-nOFGvES9.js} +1 -1
- package/dist/assets/{usecaseDiagram-VIAY4XPW-1IDwuiBz.js → usecaseDiagram-VIAY4XPW-CSx_2lRT.js} +1 -1
- package/dist/assets/{vennDiagram-BLWOH2XV-BF_DWzBo.js → vennDiagram-BLWOH2XV-BLdAnXCX.js} +1 -1
- package/dist/assets/{wardley-7MLQ67FV-DBHhJ4uQ.js → wardley-7MLQ67FV-BBijlArL.js} +1 -1
- package/dist/assets/{wardleyDiagram-YMQ3BMBF-CZDA-U1D.js → wardleyDiagram-YMQ3BMBF-C7OyXDn4.js} +1 -1
- package/dist/assets/{xychartDiagram-TAQBALBS-txrLzFhj.js → xychartDiagram-TAQBALBS-CxRLvuvo.js} +1 -1
- package/dist/index.html +2 -2
- package/docs/guide/en/v9.2.0.md +6 -0
- package/docs/guide/en/v9.5.0.md +59 -0
- package/docs/guide/en/v9.6.0.md +64 -0
- package/docs/guide/ja/v9.2.0.md +5 -0
- package/docs/guide/ja/v9.5.0.md +58 -0
- package/docs/guide/ja/v9.6.0.md +58 -0
- package/package.json +3 -1
- package/plugins/plugins.json +2 -1
- package/server/agents/agent-availability.ts +1 -1
- package/server/agents/agent-session-title.ts +10 -10
- package/server/agents/{antigravity-mcp.ts → antigravity/antigravity-mcp.ts} +6 -6
- package/server/agents/{antigravity-session.ts → antigravity/antigravity-session.ts} +2 -2
- package/server/agents/{antigravity-sessions.ts → antigravity/antigravity-sessions.ts} +3 -3
- package/server/agents/{antigravity-skills.ts → antigravity/antigravity-skills.ts} +3 -3
- package/server/agents/{antigravity-usage.ts → antigravity/antigravity-usage.ts} +2 -2
- package/server/agents/{antigravity.ts → antigravity/antigravity.ts} +1 -1
- package/server/agents/{claude-args.ts → claude/claude-args.ts} +1 -1
- package/server/agents/{claude-help-probe.ts → claude/claude-help-probe.ts} +4 -4
- package/server/agents/{claude.ts → claude/claude.ts} +2 -2
- package/server/agents/{codex-activity.ts → codex/codex-activity.ts} +4 -4
- package/server/agents/{codex-events.ts → codex/codex-events.ts} +1 -1
- package/server/agents/{codex-hook.ts → codex/codex-hook.ts} +1 -1
- package/server/agents/{codex-rate-limits.ts → codex/codex-rate-limits.ts} +3 -3
- package/server/agents/{codex-rollout.ts → codex/codex-rollout.ts} +1 -1
- package/server/agents/{codex-session.ts → codex/codex-session.ts} +4 -4
- package/server/agents/{codex-sessions.ts → codex/codex-sessions.ts} +5 -5
- package/server/agents/{codex-skills.ts → codex/codex-skills.ts} +3 -3
- package/server/agents/{codex-thread-names.ts → codex/codex-thread-names.ts} +1 -1
- package/server/agents/{codex-usage.ts → codex/codex-usage.ts} +3 -3
- package/server/agents/{codex-user-turn.ts → codex/codex-user-turn.ts} +1 -1
- package/server/agents/{codex.ts → codex/codex.ts} +1 -1
- package/server/agents/{copilot-hook.ts → copilot/copilot-hook.ts} +2 -2
- package/server/agents/{copilot-hooks-file.ts → copilot/copilot-hooks-file.ts} +8 -8
- package/server/agents/{copilot-mcp.ts → copilot/copilot-mcp.ts} +1 -1
- package/server/agents/{copilot-sessions.ts → copilot/copilot-sessions.ts} +3 -3
- package/server/agents/{copilot.ts → copilot/copilot.ts} +1 -1
- package/server/agents/{cursor-hook.ts → cursor/cursor-hook.ts} +2 -2
- package/server/agents/{cursor-hooks-file.ts → cursor/cursor-hooks-file.ts} +7 -7
- package/server/agents/{cursor-last-turn.ts → cursor/cursor-last-turn.ts} +2 -2
- package/server/agents/{cursor-mcp.ts → cursor/cursor-mcp.ts} +7 -7
- package/server/agents/{cursor-sessions.ts → cursor/cursor-sessions.ts} +3 -3
- package/server/agents/{cursor-usage.ts → cursor/cursor-usage.ts} +3 -3
- package/server/agents/{cursor.ts → cursor/cursor.ts} +1 -1
- package/server/agents/git-exclude.ts +1 -1
- package/server/agents/{grok-mcp.ts → grok/grok-mcp.ts} +4 -4
- package/server/agents/{grok-session.ts → grok/grok-session.ts} +1 -1
- package/server/agents/{grok-sessions.ts → grok/grok-sessions.ts} +4 -4
- package/server/agents/{grok-usage.ts → grok/grok-usage.ts} +4 -4
- package/server/agents/{grok.ts → grok/grok.ts} +1 -1
- package/server/agents/machine-global-hooks.ts +2 -2
- package/server/agents/{gui-mcp-bridge.ts → mcp/gui-mcp-bridge.ts} +2 -2
- package/server/agents/{mcp-config-file.ts → mcp/mcp-config-file.ts} +3 -3
- package/server/agents/{muse-mcp.ts → muse/muse-mcp.ts} +7 -7
- package/server/agents/{muse-session.ts → muse/muse-session.ts} +2 -2
- package/server/agents/{muse-usage.ts → muse/muse-usage.ts} +3 -3
- package/server/agents/{muse.ts → muse/muse.ts} +1 -1
- package/server/agents/{probe-session.spec.ts → probe/probe-session.spec.ts} +1 -1
- package/server/agents/{probe-stall.ts → probe/probe-stall.ts} +1 -1
- package/server/agents/{probe-transcript.spec.ts → probe/probe-transcript.spec.ts} +2 -2
- package/server/agents/{probe-transcript.ts → probe/probe-transcript.ts} +4 -4
- package/server/agents/{account-rate-limits.ts → rate-limit/account-rate-limits.ts} +4 -4
- package/server/agents/{rate-limit-persist.ts → rate-limit/rate-limit-persist.ts} +4 -4
- package/server/agents/{rate-limit-probe.spec.ts → rate-limit/rate-limit-probe.spec.ts} +19 -4
- package/server/agents/{rate-limit-probe.ts → rate-limit/rate-limit-probe.ts} +13 -3
- package/server/agents/{rate-limit-routes.ts → rate-limit/rate-limit-routes.ts} +1 -1
- package/server/agents/rate-limit/rate-limit-service.spec.ts +39 -0
- package/server/agents/{rate-limit-service.ts → rate-limit/rate-limit-service.ts} +17 -17
- package/server/agents/{rate-limit-store.ts → rate-limit/rate-limit-store.ts} +2 -2
- package/server/agents/registry.ts +7 -7
- package/server/agents/{token-assignment.ts → token/token-assignment.ts} +2 -2
- package/server/agents/{token-choice.ts → token/token-choice.ts} +1 -1
- package/server/agents/{token-rotation-service.ts → token/token-rotation-service.ts} +7 -7
- package/server/agents/{token-secret.ts → token/token-secret.ts} +2 -2
- package/server/backends/boot-backends.ts +15 -15
- package/server/backends/{calendarPush.ts → calendar/calendarPush.ts} +2 -2
- package/server/backends/{calendarPushResult.ts → calendar/calendarPushResult.ts} +1 -1
- package/server/backends/{calendarRefresh.ts → calendar/calendarRefresh.ts} +2 -2
- package/server/backends/{calendarRefreshResult.ts → calendar/calendarRefreshResult.ts} +1 -1
- package/server/backends/{google.ts → calendar/google.ts} +3 -3
- package/server/backends/{collectionActionGuards.ts → collections/collectionActionGuards.ts} +1 -1
- package/server/backends/{collectionActionIndex.ts → collections/collectionActionIndex.ts} +1 -1
- package/server/backends/{collectionActionIndexRoute.ts → collections/collectionActionIndexRoute.ts} +1 -1
- package/server/backends/{collectionNotifierAdapter.ts → collections/collectionNotifierAdapter.ts} +2 -2
- package/server/backends/{collectionSelfContainment.ts → collections/collectionSelfContainment.ts} +3 -3
- package/server/backends/{collectionWatchers.ts → collections/collectionWatchers.ts} +2 -2
- package/server/backends/{collections.ts → collections/collections.ts} +10 -10
- package/server/backends/{customViewRoutes.ts → collections/customViewRoutes.ts} +3 -3
- package/server/backends/{remoteView.ts → collections/remoteView.ts} +1 -1
- package/server/backends/{sharedCollections.ts → collections/sharedCollections.ts} +1 -1
- package/server/backends/{stagedSkills.ts → collections/stagedSkills.ts} +3 -3
- package/server/backends/{thumbnailStore.ts → collections/thumbnailStore.ts} +3 -3
- package/server/backends/{viewToken.ts → collections/viewToken.ts} +2 -2
- package/server/backends/{feed-worker-options.ts → feeds/feed-worker-options.ts} +1 -1
- package/server/backends/{feeds-worker.ts → feeds/feeds-worker.ts} +5 -5
- package/server/backends/{feeds.ts → feeds/feeds.ts} +4 -4
- package/server/backends/{fileChange.ts → files/fileChange.ts} +6 -6
- package/server/backends/{fileOps.ts → files/fileOps.ts} +3 -3
- package/server/backends/{files.ts → files/files.ts} +2 -2
- package/server/backends/{filesPage.ts → files/filesPage.ts} +3 -3
- package/server/backends/{openPath.ts → files/openPath.ts} +4 -4
- package/server/backends/{presentPathRoot.ts → files/presentPathRoot.ts} +4 -4
- package/server/backends/{rawServingPlan.ts → files/rawServingPlan.ts} +1 -1
- package/server/backends/{sourceEditorDispatchRoute.ts → files/sourceEditorDispatchRoute.ts} +1 -1
- package/server/backends/{storiesRoot.ts → files/storiesRoot.ts} +1 -1
- package/server/backends/{translation.ts → media/translation.ts} +2 -2
- package/server/backends/{whisper.ts → media/whisper.ts} +3 -3
- package/server/backends/notifier.ts +2 -2
- package/server/backends/{artifacts.ts → plugins/artifacts.ts} +2 -2
- package/server/backends/{deckList.ts → plugins/deckList.ts} +1 -1
- package/server/backends/{html.ts → plugins/html.ts} +6 -6
- package/server/backends/{markdown.ts → plugins/markdown.ts} +7 -7
- package/server/backends/{mulmoscript.spec.ts → plugins/mulmoscript.spec.ts} +4 -4
- package/server/backends/{mulmoscript.ts → plugins/mulmoscript.ts} +6 -6
- package/server/backends/{shapescript.ts → plugins/shapescript.ts} +4 -4
- package/server/backends/{wiki.ts → plugins/wiki.ts} +1 -1
- package/server/backends/remoteHost/commandScope.ts +1 -1
- package/server/backends/remoteHost/dirIcons.ts +1 -1
- package/server/backends/remoteHost/getCollection.spec.ts +1 -1
- package/server/backends/remoteHost/getFeed.spec.ts +1 -1
- package/server/backends/remoteHost/handlers/getCollection.ts +1 -1
- package/server/backends/remoteHost/handlers/getFeed.ts +1 -1
- package/server/backends/remoteHost/handlers/getRemoteView.ts +1 -1
- package/server/backends/remoteHost/handlers/getRemoteViewItems.ts +1 -1
- package/server/backends/remoteHost/handlers/issueWork.ts +1 -1
- package/server/backends/remoteHost/handlers/listCollectionProjects.ts +1 -1
- package/server/backends/remoteHost/handlers/listFeeds.ts +1 -1
- package/server/backends/remoteHost/handlers/listSkills.ts +3 -3
- package/server/backends/remoteHost/handlers/mobileFiles.ts +2 -2
- package/server/backends/remoteHost/handlers/mutateRemoteView.ts +2 -2
- package/server/backends/remoteHost/handlers.spec.ts +1 -1
- package/server/backends/remoteHost/hostBindings.ts +5 -5
- package/server/backends/remoteHost/hostScreens.ts +6 -6
- package/server/backends/remoteHost/hostSessionList.ts +5 -5
- package/server/backends/remoteHost/listSkillsSession.spec.ts +1 -1
- package/server/backends/remoteHost/mobileFileProject.ts +1 -1
- package/server/backends/remoteHost/mobileFileWalk.ts +2 -2
- package/server/backends/remoteHost/pluginSkills.ts +1 -1
- package/server/backends/remoteHost/sessionActivity.ts +1 -1
- package/server/backends/remoteHost/skills.ts +3 -3
- package/server/backends/remoteHost/terminalScreen.ts +1 -1
- package/server/backends/{scheduled-run.ts → scheduler/scheduled-run.ts} +1 -1
- package/server/backends/{scheduler-adapter.ts → scheduler/scheduler-adapter.ts} +1 -1
- package/server/backends/{scheduler-boot.ts → scheduler/scheduler-boot.ts} +2 -2
- package/server/backends/{scheduler-state-seed.ts → scheduler/scheduler-state-seed.ts} +1 -1
- package/server/backends/{scheduler.ts → scheduler/scheduler.ts} +3 -3
- package/server/backends/sharedApp/ensureAid.ts +1 -1
- package/server/backends/sharedApp/headlessPreview.ts +1 -1
- package/server/backends/sharedApp/participate/registry.ts +1 -1
- package/server/backends/{sharedAppPreviewRoutes.ts → sharedApp/sharedAppPreviewRoutes.ts} +11 -11
- package/server/backends/{skillCatalog.ts → skills/skillCatalog.ts} +5 -5
- package/server/backends/{skillsSh.ts → skills/skillsSh.ts} +1 -1
- package/server/backends/workspaceSetup.ts +2 -2
- package/server/blueprint/wiring.ts +3 -3
- package/server/campaign/campaign-store.ts +1 -1
- package/server/campaign/claim-rules.ts +2 -2
- package/server/cli-google.ts +2 -2
- package/server/cli-init.ts +1 -1
- package/server/config/{agent-bins.ts → agent/agent-bins.ts} +8 -8
- package/server/config/{agent-entry-routes.ts → agent/agent-entry-routes.ts} +6 -6
- package/server/config/{agent-from-argv.ts → agent/agent-from-argv.ts} +2 -2
- package/server/config/app-config.ts +3 -3
- package/server/config/config-reload.ts +2 -2
- package/server/config/config-routes.ts +12 -12
- package/server/config/config-schema.ts +1 -1
- package/server/config/{cwd-presets.ts → dir/cwd-presets.ts} +8 -8
- package/server/config/{dir-background.ts → dir/dir-background.ts} +2 -2
- package/server/config/{dir-config-edit.ts → dir/dir-config-edit.ts} +2 -2
- package/server/config/{dir-config-write.ts → dir/dir-config-write.ts} +2 -2
- package/server/config/{dir-config.ts → dir/dir-config.ts} +17 -17
- package/server/config/{dir-file.ts → dir/dir-file.ts} +1 -1
- package/server/config/{dir-icon-detect.ts → dir/dir-icon-detect.ts} +4 -4
- package/server/config/{dir-icon.ts → dir/dir-icon.ts} +1 -1
- package/server/config/{repo-json.ts → dir/repo-json.ts} +4 -4
- package/server/config/env.ts +2 -2
- package/server/config/{header-button-routes.ts → header/header-button-routes.ts} +3 -3
- package/server/config/{header-chip-routes.ts → header/header-chip-routes.ts} +3 -3
- package/server/config/{header-config.ts → header/header-config.ts} +6 -6
- package/server/config/{header-context.ts → header/header-context.ts} +7 -7
- package/server/config/{header-entry-changes.ts → header/header-entry-changes.ts} +4 -4
- package/server/config/{header-resolve.ts → header/header-resolve.ts} +1 -1
- package/server/config/{header-title.ts → header/header-title.ts} +3 -3
- package/server/config/{keymap-binding-route.ts → keymap/keymap-binding-route.ts} +4 -4
- package/server/config/{keymap-check.ts → keymap/keymap-check.ts} +2 -2
- package/server/config/launch-options.ts +1 -1
- package/server/config/on-disk-entry.ts +1 -1
- package/server/config/port-from-argv.ts +3 -3
- package/server/config/system-task-settings.ts +2 -2
- package/server/config/theme-entry-routes.ts +1 -1
- package/server/config/workspace.ts +2 -2
- package/server/config/{worktree-dir-config.ts → worktree/worktree-dir-config.ts} +5 -5
- package/server/config/{worktree-env-log.ts → worktree/worktree-env-log.ts} +1 -1
- package/server/config/{worktree-env.ts → worktree/worktree-env.ts} +4 -4
- package/server/config/{worktree-task.ts → worktree/worktree-task.ts} +2 -2
- package/server/files/documentWatch.ts +1 -1
- package/server/files/files-browse.ts +1 -1
- package/server/files/files-git-status.ts +1 -1
- package/server/files/pathContainment.ts +3 -3
- package/server/files/project-files.ts +1 -1
- package/server/files/scripts.ts +1 -1
- package/server/files/tree-ops.ts +1 -1
- package/server/files/wsl.ts +1 -1
- package/server/git/git-parse.ts +1 -1
- package/server/git/git-status.ts +1 -1
- package/server/git/issue-work.ts +2 -2
- package/server/git/kill-tree.ts +33 -0
- package/server/git/repo-dirs.ts +1 -1
- package/server/git/run-tool.ts +100 -0
- package/server/git/spawn-collect.ts +5 -21
- package/server/git/work-comment.ts +1 -1
- package/server/git/worktree-cleanup.ts +4 -4
- package/server/git/worktree-diff.ts +1 -1
- package/server/git/worktree-routes.ts +2 -2
- package/server/git/worktrees.ts +21 -50
- package/server/index.ts +63 -63
- package/server/infra/{canonical-path.ts → fs/canonical-path.ts} +1 -1
- package/server/infra/{fs-cleanup.ts → fs/fs-cleanup.ts} +1 -1
- package/server/infra/{host-state-root.ts → fs/host-state-root.ts} +1 -1
- package/server/infra/{install-bundled-skills.ts → fs/install-bundled-skills.ts} +9 -9
- package/server/infra/{jsonl-file.ts → fs/jsonl-file.ts} +1 -1
- package/server/infra/{legacy-cleanup.ts → fs/legacy-cleanup.ts} +2 -2
- package/server/infra/{own-assign.ts → fs/own-assign.ts} +1 -1
- package/server/infra/{project-root.ts → fs/project-root.ts} +2 -2
- package/server/infra/{on-listening.ts → http/on-listening.ts} +10 -10
- package/server/infra/http/switch-token-routes.ts +45 -0
- package/server/infra/{web-push.ts → http/web-push.ts} +1 -1
- package/server/infra/{gui-mcp-registration.ts → process/gui-mcp-registration.ts} +4 -4
- package/server/infra/{machine-load.ts → process/machine-load.ts} +1 -1
- package/server/infra/{process-guards.ts → process/process-guards.ts} +1 -1
- package/server/infra/{server-exit.ts → process/server-exit.ts} +1 -1
- package/server/infra/{shutdown.ts → process/shutdown.ts} +2 -2
- package/server/infra/{spawnCapture.ts → process/spawnCapture.ts} +1 -1
- package/server/infra/{tmux-routes.ts → process/tmux-routes.ts} +4 -4
- package/server/infra/{tmux.ts → process/tmux.ts} +6 -6
- package/server/infra/{collection-tool.ts → tools/collection-tool.ts} +2 -2
- package/server/infra/{collectionToolAid.ts → tools/collectionToolAid.ts} +5 -5
- package/server/infra/{collectionToolPortability.ts → tools/collectionToolPortability.ts} +2 -2
- package/server/infra/{pluginRuntime.ts → tools/pluginRuntime.ts} +4 -4
- package/server/infra/{plugins-registry.ts → tools/plugins-registry.ts} +8 -8
- package/server/infra/{shapescript-manage-tool.ts → tools/shapescript-manage-tool.ts} +3 -3
- package/server/infra/{shapescript-render-tool.ts → tools/shapescript-render-tool.ts} +2 -2
- package/server/infra/{shapescript-stl-tool.ts → tools/shapescript-stl-tool.ts} +2 -2
- package/server/infra/{shapescript-usdz-tool.ts → tools/shapescript-usdz-tool.ts} +2 -2
- package/server/infra/{shared-app-tool.ts → tools/shared-app-tool.ts} +11 -11
- package/server/infra/{use-shared-app-tool.ts → tools/use-shared-app-tool.ts} +18 -9
- package/server/mcp/broker.ts +3 -3
- package/server/mcp/gui-call-history.ts +4 -4
- package/server/rooms/rooms.ts +1 -1
- package/server/routes/app-routes.ts +72 -46
- package/server/routes/decision-routes.ts +3 -3
- package/server/routes/dir-config-entries-route.ts +4 -4
- package/server/routes/dir-config-write-route.ts +3 -3
- package/server/routes/dir-routes.ts +5 -5
- package/server/routes/gui-mcp-routes.ts +3 -3
- package/server/routes/hook-routes.ts +15 -15
- package/server/routes/issue-work-routes.ts +1 -1
- package/server/routes/load-routes.ts +1 -1
- package/server/routes/mcp-routes.ts +5 -5
- package/server/routes/plugin-routes.ts +29 -21
- package/server/routes/process-routes.ts +2 -2
- package/server/routes/session-routes.ts +19 -19
- package/server/routes/shutdown-routes.ts +1 -1
- package/server/routes/skill-catalog-routes.ts +2 -2
- package/server/routes/stampCardScope.ts +1 -1
- package/server/routes/ws-endpoint-guard.ts +9 -2
- package/server/routes/ws-routes.ts +35 -40
- package/server/session/{account-log.ts → accounts/account-log.ts} +1 -1
- package/server/session/{account-mcp.ts → accounts/account-mcp.ts} +3 -3
- package/server/session/{account-sessions.ts → accounts/account-sessions.ts} +4 -4
- package/server/session/{activity-flag.ts → activity/activity-flag.ts} +1 -1
- package/server/session/{activity-hook.ts → activity/activity-hook.ts} +1 -1
- package/server/session/{activity-state.ts → activity/activity-state.ts} +1 -1
- package/server/session/{activity-transition.ts → activity/activity-transition.ts} +2 -2
- package/server/session/{agent-badges.ts → activity/agent-badges.ts} +20 -20
- package/server/session/{codex-activity-track.ts → activity/codex-activity-track.ts} +1 -1
- package/server/session/{codex-activity-watch.ts → activity/codex-activity-watch.ts} +1 -1
- package/server/session/{completion-hooks.ts → activity/completion-hooks.ts} +1 -1
- package/server/session/{header-hook.ts → activity/header-hook.ts} +1 -1
- package/server/session/{heat-track.ts → activity/heat-track.ts} +1 -1
- package/server/session/{heat-watch.ts → activity/heat-watch.ts} +3 -3
- package/server/session/{task-push.ts → activity/task-push.ts} +8 -8
- package/server/session/{taskPushRules.ts → activity/taskPushRules.ts} +1 -1
- package/server/session/cost.ts +2 -2
- package/server/session/credentials/credential-announce.ts +22 -0
- package/server/session/credentials/credential-frame.ts +20 -0
- package/server/session/{limit-rotation.ts → credentials/limit-rotation.ts} +2 -2
- package/server/session/{rotation-notice.ts → credentials/rotation-notice.ts} +1 -0
- package/server/session/{session-credential.ts → credentials/session-credential.ts} +2 -2
- package/server/session/credentials/switch-token.ts +19 -0
- package/server/session/{token-session-log.ts → credentials/token-session-log.ts} +1 -1
- package/server/session/{token-sessions.ts → credentials/token-sessions.ts} +4 -4
- package/server/session/credentials/token-switch-pins.ts +37 -0
- package/server/session/{worktree-session-limit.ts → credentials/worktree-session-limit.ts} +4 -4
- package/server/session/{decision-digest-file.ts → decisions/decision-digest-file.ts} +2 -2
- package/server/session/{decision-digest-schedule.ts → decisions/decision-digest-schedule.ts} +2 -2
- package/server/session/{decision-digest.ts → decisions/decision-digest.ts} +1 -1
- package/server/session/{decision-scan.ts → decisions/decision-scan.ts} +6 -6
- package/server/session/{decisions.ts → decisions/decisions.ts} +3 -3
- package/server/session/dir-session.ts +5 -5
- package/server/session/lifecycle.ts +9 -9
- package/server/session/{resumable-sessions.ts → list/resumable-sessions.ts} +4 -4
- package/server/session/{session-cpu.ts → list/session-cpu.ts} +1 -1
- package/server/session/{session-list.ts → list/session-list.ts} +1 -1
- package/server/session/{session-lookup.ts → list/session-lookup.ts} +4 -4
- package/server/session/{session-memos.ts → list/session-memos.ts} +1 -1
- package/server/session/{session-processes.ts → list/session-processes.ts} +2 -2
- package/server/session/{session-title.ts → list/session-title.ts} +8 -8
- package/server/session/{sessionListTitle.ts → list/sessionListTitle.ts} +1 -1
- package/server/session/project-dir.ts +1 -1
- package/server/session/{agent-pty-start.ts → pty/agent-pty-start.ts} +3 -3
- package/server/session/{output-relay.ts → pty/output-relay.ts} +2 -2
- package/server/session/{pty-connection.ts → pty/pty-connection.ts} +7 -7
- package/server/session/{pty-exit.ts → pty/pty-exit.ts} +2 -2
- package/server/session/{pty-kill.ts → pty/pty-kill.ts} +1 -1
- package/server/session/{pty-relay.ts → pty/pty-relay.ts} +2 -2
- package/server/session/{pty-spawn.ts → pty/pty-spawn.ts} +12 -12
- package/server/session/{terminal-mode-tracker.ts → pty/terminal-mode-tracker.ts} +2 -2
- package/server/session/{terminal-replay.ts → pty/terminal-replay.ts} +1 -1
- package/server/session/{reap-idle-sessions.ts → reaping/reap-idle-sessions.ts} +5 -5
- package/server/session/{reap-schedule.ts → reaping/reap-schedule.ts} +5 -5
- package/server/session/{surviving-sessions.ts → reaping/surviving-sessions.ts} +9 -9
- package/server/session/{survivor-agent-guard.ts → reaping/survivor-agent-guard.ts} +10 -10
- package/server/session/registry.ts +9 -9
- package/server/session/{background-chat.ts → scheduled/background-chat.ts} +2 -2
- package/server/session/{scheduled-chat.ts → scheduled/scheduled-chat.ts} +3 -3
- package/server/session/{scheduled-sessions-boot.ts → scheduled/scheduled-sessions-boot.ts} +5 -5
- package/server/session/{scheduled-sessions.ts → scheduled/scheduled-sessions.ts} +3 -3
- package/server/session/{translation-submit.ts → scheduled/translation-submit.ts} +1 -1
- package/server/session/{translation-worker.ts → scheduled/translation-worker.ts} +4 -4
- package/server/session/session-cwd.ts +1 -1
- package/server/session/session-drops.ts +1 -1
- package/server/session/session-home.ts +2 -2
- package/server/session/session-reads.ts +13 -13
- package/server/session/session-settings.ts +2 -2
- package/server/session/{claude-fullscreen-env.ts → spawn/agents/claude-fullscreen-env.ts} +1 -1
- package/server/session/{claude-fullscreen.ts → spawn/agents/claude-fullscreen.ts} +1 -1
- package/server/session/{spawn-antigravity.ts → spawn/agents/spawn-antigravity.ts} +10 -10
- package/server/session/{spawn-claude.ts → spawn/agents/spawn-claude.ts} +51 -51
- package/server/session/{spawn-codex.ts → spawn/agents/spawn-codex.ts} +19 -19
- package/server/session/{spawn-copilot.ts → spawn/agents/spawn-copilot.ts} +14 -14
- package/server/session/{spawn-cursor.ts → spawn/agents/spawn-cursor.ts} +13 -13
- package/server/session/{spawn-grok.ts → spawn/agents/spawn-grok.ts} +8 -8
- package/server/session/{spawn-muse.ts → spawn/agents/spawn-muse.ts} +14 -14
- package/server/session/{draft-injection.ts → spawn/draft-injection.ts} +5 -5
- package/server/session/{issue-session-spawn.ts → spawn/issue-session-spawn.ts} +6 -6
- package/server/session/{issue-spawn-options.ts → spawn/issue-spawn-options.ts} +1 -1
- package/server/session/{launch-choice.ts → spawn/launch-choice.ts} +2 -2
- package/server/session/{mcp-config.ts → spawn/setup/mcp-config.ts} +6 -6
- package/server/session/{provider-env.ts → spawn/setup/provider-env.ts} +1 -1
- package/server/session/{spawn-directory-mcp.ts → spawn/setup/spawn-directory-mcp.ts} +6 -6
- package/server/session/{shell-command.ts → spawn/shell-command.ts} +2 -2
- package/server/session/{spawn-collection.ts → spawn/spawn-collection.ts} +3 -3
- package/server/session/{spawn-deps.ts → spawn/spawn-deps.ts} +1 -1
- package/server/session/{spawn-shell.ts → spawn/spawn-shell.ts} +8 -8
- package/server/session/{spawn-with-full-gui-claim.ts → spawn/spawn-with-full-gui-claim.ts} +2 -2
- package/server/session/{spawners.ts → spawn/spawners.ts} +7 -7
- package/server/session/{cleared-transcripts.ts → transcript/cleared-transcripts.ts} +4 -4
- package/server/session/{command-summary.ts → transcript/command-summary.ts} +3 -3
- package/server/session/{handoff-text.ts → transcript/handoff-text.ts} +1 -1
- package/server/session/{last-turn.ts → transcript/last-turn.ts} +2 -2
- package/server/session/{prompt-history.ts → transcript/prompt-history.ts} +4 -4
- package/server/session/{summary-scan.ts → transcript/summary-scan.ts} +1 -1
- package/server/session/{transcript-fold.ts → transcript/transcript-fold.ts} +2 -2
- package/server/session/{transcript-sidecar.ts → transcript/transcript-sidecar.ts} +4 -4
- package/server/session/{transcript-view-codex.ts → transcript/transcript-view-codex.ts} +3 -3
- package/server/session/{transcript-view-copilot.ts → transcript/transcript-view-copilot.ts} +3 -3
- package/server/session/{transcript-view-cursor.ts → transcript/transcript-view-cursor.ts} +3 -3
- package/server/session/{transcript-view-read.ts → transcript/transcript-view-read.ts} +13 -13
- package/server/session/{transcript-view.ts → transcript/transcript-view.ts} +3 -3
- package/server/session/{transcript.ts → transcript/transcript.ts} +4 -4
- package/server/session/types.ts +2 -2
- package/server/skills/mulmoterminal-bug-report/faq.md +2 -2
- package/server/skills/mulmoterminal-config/SKILL.md +1 -1
- package/server/whatsNew/state.ts +1 -1
- package/dist/assets/architecture-WOLXFQ4H-C2t_BQpj.js +0 -1
- package/dist/assets/channel-Ew01Cakq.js +0 -1
- package/dist/assets/eventmodeling-K75KTNOO-B1aaayRU.js +0 -1
- package/dist/assets/flowDiagram-OXPTDLAJ-DstO2g2D.js +0 -1
- package/dist/assets/index-T11EY9yc.css +0 -1
- package/dist/assets/railroad-abnf-LNEFI6M7-BkDVVs2g.js +0 -1
- package/dist/assets/railroad-ebnf-DWYD2UWJ-BxUG_HKh.js +0 -1
- package/dist/assets/railroad-peg-JR7BVNR7-D1fNBCHZ.js +0 -1
- package/dist/assets/swimlanesDiagram-K3J5GTZL-Cy_aZEXh.js +0 -8
- /package/server/agents/{antigravity-args.ts → antigravity/antigravity-args.ts} +0 -0
- /package/server/agents/{antigravity-proto.ts → antigravity/antigravity-proto.ts} +0 -0
- /package/server/agents/{claude-permission-modes.ts → claude/claude-permission-modes.ts} +0 -0
- /package/server/agents/{codex-args.ts → codex/codex-args.ts} +0 -0
- /package/server/agents/{codex-rate-limits.spec.ts → codex/codex-rate-limits.spec.ts} +0 -0
- /package/server/agents/{codex-rollout.spec.ts → codex/codex-rollout.spec.ts} +0 -0
- /package/server/agents/{codex-usage.spec.ts → codex/codex-usage.spec.ts} +0 -0
- /package/server/agents/{copilot-args.ts → copilot/copilot-args.ts} +0 -0
- /package/server/agents/{cursor-args.ts → cursor/cursor-args.ts} +0 -0
- /package/server/agents/{grok-args.ts → grok/grok-args.ts} +0 -0
- /package/server/agents/{muse-args.ts → muse/muse-args.ts} +0 -0
- /package/server/agents/{probe-session.ts → probe/probe-session.ts} +0 -0
- /package/server/agents/{probe-stall.spec.ts → probe/probe-stall.spec.ts} +0 -0
- /package/server/agents/{rate-limit-persist.spec.ts → rate-limit/rate-limit-persist.spec.ts} +0 -0
- /package/server/agents/{rate-limit-store.spec.ts → rate-limit/rate-limit-store.spec.ts} +0 -0
- /package/server/backends/{collectionActionIndex.spec.ts → collections/collectionActionIndex.spec.ts} +0 -0
- /package/server/backends/{mutateStatus.ts → collections/mutateStatus.ts} +0 -0
- /package/server/backends/{viewDataParams.ts → collections/viewDataParams.ts} +0 -0
- /package/server/backends/{viewRateLimit.ts → collections/viewRateLimit.ts} +0 -0
- /package/server/backends/{feed-summary.ts → feeds/feed-summary.ts} +0 -0
- /package/server/backends/{byte-range.ts → files/byte-range.ts} +0 -0
- /package/server/backends/{docPath.ts → files/docPath.ts} +0 -0
- /package/server/backends/{servedFileName.ts → files/servedFileName.ts} +0 -0
- /package/server/backends/{statFileOr404.ts → files/statFileOr404.ts} +0 -0
- /package/server/backends/{storiesRootSet.ts → files/storiesRootSet.ts} +0 -0
- /package/server/backends/{streamFile.ts → files/streamFile.ts} +0 -0
- /package/server/backends/{audioAdmission.ts → media/audioAdmission.ts} +0 -0
- /package/server/backends/{image-gen.ts → media/image-gen.ts} +0 -0
- /package/server/backends/{imageResult.ts → media/imageResult.ts} +0 -0
- /package/server/backends/{accounting.ts → plugins/accounting.ts} +0 -0
- /package/server/backends/{system-tasks.ts → scheduler/system-tasks.ts} +0 -0
- /package/server/backends/{worklog.ts → scheduler/worklog.ts} +0 -0
- /package/server/config/{hue-rotate.ts → dir/hue-rotate.ts} +0 -0
- /package/server/infra/{coalesce-by-key.ts → async/coalesce-by-key.ts} +0 -0
- /package/server/infra/{mapConcurrent.ts → async/mapConcurrent.ts} +0 -0
- /package/server/infra/{pubsub.ts → async/pubsub.ts} +0 -0
- /package/server/infra/{serialize-per-key.ts → async/serialize-per-key.ts} +0 -0
- /package/server/infra/{mulmoterminal-home.ts → fs/mulmoterminal-home.ts} +0 -0
- /package/server/infra/{path-within.ts → fs/path-within.ts} +0 -0
- /package/server/infra/{read-text-file.ts → fs/read-text-file.ts} +0 -0
- /package/server/infra/{split-lines.ts → fs/split-lines.ts} +0 -0
- /package/server/infra/{symlink-guard.ts → fs/symlink-guard.ts} +0 -0
- /package/server/infra/{workspace-key.ts → fs/workspace-key.ts} +0 -0
- /package/server/infra/{allowed-origin.ts → http/allowed-origin.ts} +0 -0
- /package/server/infra/{announce-listening.ts → http/announce-listening.ts} +0 -0
- /package/server/infra/{hide-error-stacks.ts → http/hide-error-stacks.ts} +0 -0
- /package/server/infra/{loopback-listener.ts → http/loopback-listener.ts} +0 -0
- /package/server/infra/{loopback.ts → http/loopback.ts} +0 -0
- /package/server/infra/{spa-fallback.ts → http/spa-fallback.ts} +0 -0
- /package/server/infra/{cmd-escape.ts → process/cmd-escape.ts} +0 -0
- /package/server/infra/{has-binary.ts → process/has-binary.ts} +0 -0
- /package/server/infra/{process-list.ts → process/process-list.ts} +0 -0
- /package/server/infra/{process-tree.ts → process/process-tree.ts} +0 -0
- /package/server/infra/{pty-env.ts → process/pty-env.ts} +0 -0
- /package/server/infra/{resolve-bin.ts → process/resolve-bin.ts} +0 -0
- /package/server/infra/{shell-quote.ts → process/shell-quote.ts} +0 -0
- /package/server/infra/{spawn-cwd.ts → process/spawn-cwd.ts} +0 -0
- /package/server/infra/{accounting-tool.ts → tools/accounting-tool.ts} +0 -0
- /package/server/infra/{host-tools.ts → tools/host-tools.ts} +0 -0
- /package/server/infra/{server-tool-load.ts → tools/server-tool-load.ts} +0 -0
- /package/server/infra/{shapescript-csg.ts → tools/shapescript-csg.ts} +0 -0
- /package/server/infra/{tool-precedence.ts → tools/tool-precedence.ts} +0 -0
- /package/server/session/{session-activity-deps.ts → activity/session-activity-deps.ts} +0 -0
- /package/server/session/{tool-hook.ts → activity/tool-hook.ts} +0 -0
- /package/server/session/{work-phase-tracker.ts → activity/work-phase-tracker.ts} +0 -0
- /package/server/session/{workPhase.ts → activity/workPhase.ts} +0 -0
- /package/server/session/{agent-conversations.ts → list/agent-conversations.ts} +0 -0
- /package/server/session/{live-sessions.ts → list/live-sessions.ts} +0 -0
- /package/server/session/{session-detail-view.ts → list/session-detail-view.ts} +0 -0
- /package/server/session/{session-resolve.ts → list/session-resolve.ts} +0 -0
- /package/server/session/{early-frames.ts → pty/early-frames.ts} +0 -0
- /package/server/session/{headlessScreen.ts → pty/headlessScreen.ts} +0 -0
- /package/server/session/{pane-mode-watch.ts → pty/pane-mode-watch.ts} +0 -0
- /package/server/session/{pty-exit-log.ts → pty/pty-exit-log.ts} +0 -0
- /package/server/session/{pty-kill-plan.ts → pty/pty-kill-plan.ts} +0 -0
- /package/server/session/{pty-scan.ts → pty/pty-scan.ts} +0 -0
- /package/server/session/{pty-text.ts → pty/pty-text.ts} +0 -0
- /package/server/session/{screen-rows.ts → pty/screen-rows.ts} +0 -0
- /package/server/session/{tmux-size-sync.ts → pty/tmux-size-sync.ts} +0 -0
- /package/server/session/{persist-drain.ts → reaping/persist-drain.ts} +0 -0
- /package/server/session/{reap-policy.ts → reaping/reap-policy.ts} +0 -0
- /package/server/session/{translation-prompt.ts → scheduled/translation-prompt.ts} +0 -0
- /package/server/session/{custom-agent-command.ts → spawn/agents/custom-agent-command.ts} +0 -0
- /package/server/session/{custom-agent-log.ts → spawn/agents/custom-agent-log.ts} +0 -0
- /package/server/session/{draft-plan.ts → spawn/draft-plan.ts} +0 -0
- /package/server/session/{failed-spawn-claim.ts → spawn/failed-spawn-claim.ts} +0 -0
- /package/server/session/{hook-settings.ts → spawn/setup/hook-settings.ts} +0 -0
- /package/server/session/{hiddenMarker.ts → transcript/hiddenMarker.ts} +0 -0
- /package/server/session/{prompt-history-memo.ts → transcript/prompt-history-memo.ts} +0 -0
package/README.md
CHANGED
|
@@ -1526,7 +1526,7 @@ one click: read the issue, cut an `issue/<number>-<slug>` worktree in your clone
|
|
|
1526
1526
|
open Claude there as a grid cell with the issue **typed into its input box but not sent**. The
|
|
1527
1527
|
**Start issues in** menu above the list picks another agent instead (and, for Claude or Codex, an
|
|
1528
1528
|
account); every agent but Claude runs the issue text at once, which the view warns about. The
|
|
1529
|
-
prompt is seeded server-side as a *draft* (`server/session/draft-injection.ts`), which waits for
|
|
1529
|
+
prompt is seeded server-side as a *draft* (`server/session/spawn/draft-injection.ts`), which waits for
|
|
1530
1530
|
claude's input box to be ready — text pushed in before that lands in the scrollback instead. A repo
|
|
1531
1531
|
with several clones asks which one the first time and remembers the answer; a repo with no clone
|
|
1532
1532
|
here disables the button and says why. Backed by `POST /api/issues/start`.
|
|
@@ -1587,7 +1587,7 @@ has been prompted once — a few seconds, not the rest of the session.
|
|
|
1587
1587
|
Antigravity's numbers are the one case read from a store with **no published format**: agy keeps
|
|
1588
1588
|
its per-generation accounting as protobuf in `~/.gemini/antigravity-cli/conversations/<id>.db`,
|
|
1589
1589
|
with no schema on disk, so the fields are identified by measurement (see
|
|
1590
|
-
`server/agents/antigravity-usage.ts`). Every layer of that reader is built to answer *nothing*
|
|
1590
|
+
`server/agents/antigravity/antigravity-usage.ts`). Every layer of that reader is built to answer *nothing*
|
|
1591
1591
|
rather than a number it is unsure of, so if a future agy release moves those fields, an
|
|
1592
1592
|
Antigravity cell falls back to showing its model alone — it will not show a wrong percentage.
|
|
1593
1593
|
|
|
@@ -1633,7 +1633,7 @@ Copilot** can. **Antigravity, Grok and Cursor** cannot — they read a file in t
|
|
|
1633
1633
|
**Muse** reads neither, which is the third route below.
|
|
1634
1634
|
|
|
1635
1635
|
**Cursor is half of each**, and the half nobody would guess is the second: it reads a file in the
|
|
1636
|
-
directory as agy does (`.cursor/mcp.json`, written by `server/agents/cursor-mcp.ts`), but it starts
|
|
1636
|
+
directory as agy does (`.cursor/mcp.json`, written by `server/agents/cursor/cursor-mcp.ts`), but it starts
|
|
1637
1637
|
that MCP server on a CURATED ENVIRONMENT rather than its own — so the group and the port travel as
|
|
1638
1638
|
ARGV, as muse's do, and the SESSION is resolved through `/api/mcp-resolve`. An agy-shaped entry (group
|
|
1639
1639
|
in `env`, port inherited) was tried first and reached the bridge with no port at all. Cursor also refuses to
|
|
@@ -1674,7 +1674,7 @@ exactly as it was. Close the cell and open a new one (or `Stop` it in Settings
|
|
|
1674
1674
|
and it comes back with the tools its directory registered.
|
|
1675
1675
|
|
|
1676
1676
|
Which route a session takes is decided by `carriesFullGuiMcp()` in
|
|
1677
|
-
`server/session/mcp-config.ts` — the single view, a cell-less chat, or anything whose cwd **is**
|
|
1677
|
+
`server/session/spawn/setup/mcp-config.ts` — the single view, a cell-less chat, or anything whose cwd **is**
|
|
1678
1678
|
the workspace take the first; anything in a project directory takes the second.
|
|
1679
1679
|
|
|
1680
1680
|
**The workspace is agent-agnostic for the agents that can RECEIVE a per-spawn config** — claude,
|
|
@@ -2016,7 +2016,7 @@ Empty output returns a `{ summary }` note rather than calling the CLI. Errors:
|
|
|
2016
2016
|
(see [Claude hook injection](#claude-hook-injection)); **Copilot's and Cursor's arrive from a
|
|
2017
2017
|
machine-global hook file** and name their agent in an `x-mt-agent: copilot|cursor` header, with the
|
|
2018
2018
|
event in `x-mt-hook` — the body is translated into the Claude shape below before anything reads it
|
|
2019
|
-
(`server/agents/{copilot,cursor}-hook.ts`), so everything downstream is written against one
|
|
2019
|
+
(`server/agents/{copilot/copilot,cursor/cursor}-hook.ts`), so everything downstream is written against one
|
|
2020
2020
|
vocabulary. A request with no `x-mt-agent` is a Claude payload and is untouched.
|
|
2021
2021
|
You normally don't call this yourself.
|
|
2022
2022
|
|
package/bin/agent-bins.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// with no tsx. The server imports from `bin/` already (bin/instances.js), so this direction is the
|
|
6
6
|
// established one.
|
|
7
7
|
//
|
|
8
|
-
// The table is duplicated knowledge by construction — `server/config/agent-bins.ts` builds the same
|
|
8
|
+
// The table is duplicated knowledge by construction — `server/config/agent/agent-bins.ts` builds the same
|
|
9
9
|
// mapping out of the adapters — so a spec pins the two together rather than a comment asking the
|
|
10
10
|
// next person to keep them in sync.
|
|
11
11
|
//
|
package/bin/cli-args.js
CHANGED
|
@@ -14,7 +14,7 @@ import { join } from "node:path";
|
|
|
14
14
|
import { NODE_DOWNLOAD_URL } from "./node-install.js";
|
|
15
15
|
|
|
16
16
|
// The v4 loopback every local client of this server dials by literal — `guiMcpUrlTemplate` in
|
|
17
|
-
// server/infra/gui-mcp-registration.ts builds `http://127.0.0.1:<port>/api/mcp/...`. Duplicated
|
|
17
|
+
// server/infra/process/gui-mcp-registration.ts builds `http://127.0.0.1:<port>/api/mcp/...`. Duplicated
|
|
18
18
|
// here because bin/ is plain JS and cannot import the server's TypeScript, and pinned by a spec
|
|
19
19
|
// the same way PORT_IN_USE_EXIT_CODE is.
|
|
20
20
|
const V4_LOOPBACK_CLIENTS_DIAL = "127.0.0.1";
|
|
@@ -120,7 +120,7 @@ export function probeFailureIsPortInUse(err) {
|
|
|
120
120
|
* `localhost`, `127.1` — and a host string has no last case. The kernel has none of that problem:
|
|
121
121
|
* measured, `listen(0,"0:0:0:0:0:0:0:0")` reports `::` and `listen(0,"localhost")` reports `::1`.
|
|
122
122
|
* The comparisons below are exact because the kernel's OUTPUT vocabulary is finite even though
|
|
123
|
-
* its input vocabulary is not. server/infra/loopback.ts made the same argument for its own
|
|
123
|
+
* its input vocabulary is not. server/infra/http/loopback.ts made the same argument for its own
|
|
124
124
|
* question: "asking after the fact answers all of them".
|
|
125
125
|
*
|
|
126
126
|
* The probe/bind race the launcher already lives with is unchanged: this narrows the window, it
|
|
@@ -149,7 +149,7 @@ export function companionHostsFor(boundAddress) {
|
|
|
149
149
|
*
|
|
150
150
|
* The authority for a name is the kernel, not this function, and the launcher asks it the only
|
|
151
151
|
* way that is exact — the child reports what `server.address()` says it bound. See
|
|
152
|
-
* server/infra/loopback.ts, which had already written the argument down for its own question.
|
|
152
|
+
* server/infra/http/loopback.ts, which had already written the argument down for its own question.
|
|
153
153
|
*/
|
|
154
154
|
export function launcherReachHost(bindHost) {
|
|
155
155
|
if (bindHost === "0.0.0.0") return "127.0.0.1";
|
|
@@ -206,7 +206,7 @@ export function launcherUrl(reachHost, port) {
|
|
|
206
206
|
* feature nothing in `bin/` mentions. Changing the URL means adding the new loopback address to
|
|
207
207
|
* that authorized-domain list first.
|
|
208
208
|
*
|
|
209
|
-
* Reachability is not the reason it is safe; #1834 is. `server/infra/loopback-listener.ts` makes
|
|
209
|
+
* Reachability is not the reason it is safe; #1834 is. `server/infra/http/loopback-listener.ts` makes
|
|
210
210
|
* this server serve `127.0.0.1` in EVERY configuration — as the primary bind, or as a second
|
|
211
211
|
* listener when the operator widens it — because eight local callers write that address as a
|
|
212
212
|
* literal. So `localhost` arrives here whatever `MULMOTERMINAL_HOST` says, falling back to v4
|
|
@@ -467,7 +467,7 @@ export function unsupportedNodeMessage(version, execPath, upgrade) {
|
|
|
467
467
|
* hands its own environment to every PTY it spawns, so a port set there reaches every terminal
|
|
468
468
|
* in every cell — which is how a raw `PORT` made a dev server started in a cell try to take
|
|
469
469
|
* MulmoTerminal's own port (#1857). Renaming it would only move that: `MULMOTERMINAL_PORT` is
|
|
470
|
-
* deliberately given to PTYs (server/session/mcp-config.ts) for the MCP URLs, so a server
|
|
470
|
+
* deliberately given to PTYs (server/session/spawn/setup/mcp-config.ts) for the MCP URLs, so a server
|
|
471
471
|
* reading it as its bind port would clash with itself the moment `yarn dev` ran inside a cell.
|
|
472
472
|
*
|
|
473
473
|
* `--agent` rides the same channel for the same reason (#2082): it is a preference, and a
|
package/bin/has-command.js
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
//
|
|
15
15
|
// A file lookup has neither problem: nothing is interpreted, it is just candidate names on disk.
|
|
16
16
|
// WHICH candidates is the whole remaining question, and it is not this file's to invent — it is
|
|
17
|
-
// `server/infra/has-binary.ts`'s, because "can we launch it" and "what would we launch" must not
|
|
17
|
+
// `server/infra/process/has-binary.ts`'s, because "can we launch it" and "what would we launch" must not
|
|
18
18
|
// answer differently. `test/bin/gate-agrees-with-spawn.spec.ts` compares the two over generated
|
|
19
19
|
// machines rather than trusting these comments.
|
|
20
20
|
//
|
|
@@ -64,7 +64,7 @@ export const extensionsFor = (platform) => (platform === "win32" ? WINDOWS_LAUNC
|
|
|
64
64
|
|
|
65
65
|
// A Windows PATH entry may be QUOTED — `"C:\Program Files\tools"` — which the shells strip and a
|
|
66
66
|
// plain join would not, leaving a path that matches nothing. Same rule as the server's
|
|
67
|
-
// `windowsSearchDirectories` (server/infra/resolve-bin.ts); `C:\Program Files` is the canonical
|
|
67
|
+
// `windowsSearchDirectories` (server/infra/process/resolve-bin.ts); `C:\Program Files` is the canonical
|
|
68
68
|
// path that needs the quotes, so this is the common case rather than an exotic one.
|
|
69
69
|
// The current directory is on neither platform's list. cmd.exe searches it and POSIX shells do
|
|
70
70
|
// not, but what launches an agent is node-pty on both — and the directory THIS process sits in is
|
|
@@ -81,7 +81,7 @@ export const searchDirectories = (platform, env) => {
|
|
|
81
81
|
};
|
|
82
82
|
|
|
83
83
|
// Can this process enumerate everything execvp would search? Two cases where it cannot, both taken
|
|
84
|
-
// from server/infra/has-binary.ts, which reasoned them out first:
|
|
84
|
+
// from server/infra/process/has-binary.ts, which reasoned them out first:
|
|
85
85
|
//
|
|
86
86
|
// - an UNSET PATH is not an empty one. execvp falls back to its own built-in default
|
|
87
87
|
// (confstr _CS_PATH), which is not readable from here.
|
package/bin/mulmoterminal.js
CHANGED
|
@@ -127,7 +127,7 @@ function readRemoteServer() {
|
|
|
127
127
|
//
|
|
128
128
|
// The override is the point rather than a detail: the gate used to look for the literal word
|
|
129
129
|
// `claude` on PATH while the server ran `process.env.CLAUDE_BIN || "claude"`
|
|
130
|
-
// (server/agents/claude.ts). A user who set CLAUDE_BIN to a real install was refused start-up by a
|
|
130
|
+
// (server/agents/claude/claude.ts). A user who set CLAUDE_BIN to a real install was refused start-up by a
|
|
131
131
|
// check asking a different question than the thing it was gating (#2082).
|
|
132
132
|
function agentInstalled(agent) {
|
|
133
133
|
const bin = agentBin(agent);
|
|
@@ -546,7 +546,7 @@ function runServer({ port, probedAddress, localhostIsUnambiguous, noOpen, launch
|
|
|
546
546
|
// The address to check is the one the CHILD REPORTS, not one derived from BIND_HOST — three
|
|
547
547
|
// rounds of review found three different spellings BIND_HOST can take that a guess gets
|
|
548
548
|
// wrong (`::` vs `::1`, `localhost` resolving per-platform, a printed `localhost` that a
|
|
549
|
-
// browser re-resolves). server/infra/loopback.ts already argued this for its own question:
|
|
549
|
+
// browser re-resolves). server/infra/http/loopback.ts already argued this for its own question:
|
|
550
550
|
// "classifying the requested string cannot be made right … asking after the fact answers all
|
|
551
551
|
// of them, because the kernel has already resolved whatever was typed" (#1876).
|
|
552
552
|
//
|
package/bin/room.js
CHANGED
|
@@ -49,7 +49,7 @@ function splitAtTerminator(args) {
|
|
|
49
49
|
|
|
50
50
|
/** The port to talk to: `--port`, else MULMOTERMINAL_PORT, else PORT, else the default.
|
|
51
51
|
*
|
|
52
|
-
* MULMOTERMINAL_PORT is what a terminal INSIDE MulmoTerminal is given (server/session/pty-spawn.ts),
|
|
52
|
+
* MULMOTERMINAL_PORT is what a terminal INSIDE MulmoTerminal is given (server/session/pty/pty-spawn.ts),
|
|
53
53
|
* and it has to be preferred: `PORT` used to carry the same answer only because the launcher
|
|
54
54
|
* exported it to every PTY, which is the leak #1857 is about. Without this, `room` run in a cell
|
|
55
55
|
* of a server on 34601 would talk to whatever holds 34567 — or to another instance entirely.
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
// otherwise. Nothing here reads a clock, a socket or a process.
|
|
17
17
|
|
|
18
18
|
/** The exit code `server/index.ts` leaves with when the port was already taken at bind time.
|
|
19
|
-
* Kept in sync with `PORT_IN_USE_EXIT_CODE` in server/infra/server-exit.ts, which a spec pins. */
|
|
19
|
+
* Kept in sync with `PORT_IN_USE_EXIT_CODE` in server/infra/process/server-exit.ts, which a spec pins. */
|
|
20
20
|
export const PORT_IN_USE_EXIT_CODE = 75;
|
|
21
21
|
|
|
22
22
|
/** How long the launcher waits before the first restart, and the ceiling the doubling stops at.
|
|
@@ -87,7 +87,7 @@ export function planAfterServerExit({ code, signal, everServed, consecutiveFailu
|
|
|
87
87
|
// A port that is taken will still be taken next time; the caller names who has it and stops.
|
|
88
88
|
if (code === PORT_IN_USE_EXIT_CODE) return { action: "port-in-use", delayMs: 0, reason: null };
|
|
89
89
|
// `mulmoterminal stop` and the browser's Stop button both SIGTERM the server, whose handler
|
|
90
|
-
// exits 0 (server/infra/shutdown.ts). Restarting that is the product's stop button not stopping.
|
|
90
|
+
// exits 0 (server/infra/process/shutdown.ts). Restarting that is the product's stop button not stopping.
|
|
91
91
|
if (code === 0) return { action: "stop", delayMs: 0, reason: null };
|
|
92
92
|
// Nothing below can be decided on a platform where a stop and a crash arrive identically, so it
|
|
93
93
|
// is not guessed at: the launcher leaves with its server, exactly as it did before (see above).
|
package/common/agentAccounts.ts
CHANGED
|
@@ -62,5 +62,5 @@ export const accountsForAgent = (accounts: readonly AgentAccount[], agent: unkno
|
|
|
62
62
|
isAccountAgent(agent) ? accounts.filter((account) => account.agent === agent) : [];
|
|
63
63
|
|
|
64
64
|
/** What a cell or a list row calls an account: its label, or the bare id once the entry has left the
|
|
65
|
-
* config (the session still runs on it — see server/session/account-log.ts). */
|
|
65
|
+
* config (the session still runs on it — see server/session/accounts/account-log.ts). */
|
|
66
66
|
export const accountLabel = (accounts: readonly AgentAccount[], id: string): string => accounts.find((account) => account.id === id)?.label ?? id;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// The navigate target a collection-completion bell carries, and the one narrowing
|
|
2
2
|
// that reads it back. Shared because BOTH sides decide from it: the server writes
|
|
3
|
-
// the target when it publishes a bell (server/backends/collectionNotifierAdapter.ts)
|
|
3
|
+
// the target when it publishes a bell (server/backends/collections/collectionNotifierAdapter.ts)
|
|
4
4
|
// and the UI reads it to accent the record's card (src/utils/collectionNotified.ts).
|
|
5
5
|
// A second copy of the literal in the reader is exactly how a writer/reader pair
|
|
6
6
|
// drifts silently — the bell keeps arriving, only the accent stops appearing.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// "Would this collection survive a clone?" — the wire shape, shared because BOTH sides decide
|
|
2
|
-
// from it: the server produces the report (server/backends/collectionSelfContainment.ts) and the
|
|
2
|
+
// from it: the server produces the report (server/backends/collections/collectionSelfContainment.ts) and the
|
|
3
3
|
// Collections pane renders it, colouring by severity and blocking on `portable`.
|
|
4
4
|
//
|
|
5
5
|
// In `common/` rather than mirrored, for the reason the layout rule gives: a second copy of a
|
package/common/customAgents.ts
CHANGED
|
@@ -29,7 +29,7 @@ import { isRecord } from "./isRecord.js";
|
|
|
29
29
|
// appended, so it must say.
|
|
30
30
|
//
|
|
31
31
|
// Claude Code is the only one today. Codex and Antigravity take a different argument set
|
|
32
|
-
// (server/agents/codex-args.ts), so adding one here means teaching the spawn to build ITS argv —
|
|
32
|
+
// (server/agents/codex/codex-args.ts), so adding one here means teaching the spawn to build ITS argv —
|
|
33
33
|
// which is why this is a list rather than a boolean.
|
|
34
34
|
export const CUSTOM_AGENT_KINDS = ["claude"] as const;
|
|
35
35
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
// which of them survived validation, and which the app doesn't read at all.
|
|
7
7
|
|
|
8
8
|
// Every key `loadDirConfig` reads. A key outside this list is a typo as far as the app is
|
|
9
|
-
// concerned, however sensible it looks — `server/config/dir-config.spec.ts` pins the two
|
|
9
|
+
// concerned, however sensible it looks — `test/server/config/dir/dir-config.spec.ts` pins the two
|
|
10
10
|
// together so a field added to the loader can't quietly go missing here.
|
|
11
11
|
export const DIR_CONFIG_KEYS = [
|
|
12
12
|
"name",
|
package/common/guiMcpAgents.ts
CHANGED
|
@@ -16,13 +16,13 @@
|
|
|
16
16
|
//
|
|
17
17
|
// Grok is out for exactly the same reason, and it is written down here rather than left to be
|
|
18
18
|
// rediscovered: `grok` has no `--mcp-config` and no `-c key=value`, only `grok mcp add` writing
|
|
19
|
-
// `~/.grok/config.toml` or `./.grok/config.toml` (server/agents/grok-mcp.ts). So a grok session in
|
|
19
|
+
// `~/.grok/config.toml` or `./.grok/config.toml` (server/agents/grok/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
22
|
//
|
|
23
23
|
// Muse is out for the same reason and reaches its tools a third way. It has no `--mcp-config` and
|
|
24
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
|
|
25
|
+
// `muse plugins install` records per MACHINE (server/agents/muse/muse-mcp.ts). So MulmoTerminal
|
|
26
26
|
// registers one plugin holding all four group servers, and each SESSION is narrowed back to what
|
|
27
27
|
// its directory switched on — by a lookup, not by the environment: a plugin's MCP server is started
|
|
28
28
|
// with a curated environment that carries nothing of ours, so the bridge resolves which session it
|
package/common/machineLoad.ts
CHANGED
|
@@ -32,7 +32,7 @@ const usableLoad = (avg1: number, avg5: number, avg15: number, cores: number): M
|
|
|
32
32
|
};
|
|
33
33
|
|
|
34
34
|
/** The reading, or null where there is nothing to report. Pure — `node:os` is touched by the one
|
|
35
|
-
* caller in `server/infra/machine-load.ts`, so every rule here stays testable without waiting for
|
|
35
|
+
* caller in `server/infra/process/machine-load.ts`, so every rule here stays testable without waiting for
|
|
36
36
|
* a machine that happens to be busy. */
|
|
37
37
|
export function machineLoadFrom(averages: readonly number[], cores: number, platform: string): MachineLoad | null {
|
|
38
38
|
if (!keepsLoadAverage(platform)) return null;
|
package/common/mobileFiles.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Declared, never discovered: a project lists the directories and extensions in its
|
|
4
4
|
// `.mulmoterminal.json` under `mobileFiles`, and nothing is visible without that. These rules are
|
|
5
5
|
// pure so the containment-adjacent decisions (which extension, which name) are testable without a
|
|
6
|
-
// filesystem; the filesystem half lives in server/config/dir-file.ts and the remote-host backend.
|
|
6
|
+
// filesystem; the filesystem half lives in server/config/dir/dir-file.ts and the remote-host backend.
|
|
7
7
|
|
|
8
8
|
export const MOBILE_FILE_KINDS = ["markdown", "html", "pdf", "image"] as const;
|
|
9
9
|
export type MobileFileKind = (typeof MOBILE_FILE_KINDS)[number];
|
package/common/playfulEffects.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// the picture and draws the level.
|
|
4
4
|
import { isRecord } from "./isRecord.js";
|
|
5
5
|
|
|
6
|
-
export const HEAT_PATTERNS = ["bomb", "volcano", "kettle", "rocket", "dynamite", "balloon", "skull", "sumo"] as const;
|
|
6
|
+
export const HEAT_PATTERNS = ["bomb", "volcano", "kettle", "rocket", "dynamite", "balloon", "skull", "sumo", "ufo"] as const;
|
|
7
7
|
export type HeatPattern = (typeof HEAT_PATTERNS)[number];
|
|
8
8
|
export const isHeatPattern = (value: unknown): value is HeatPattern => HEAT_PATTERNS.some((pattern) => pattern === value);
|
|
9
9
|
|
package/common/promptHistory.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// The wire shape of GET /api/transcript/prompts — the prompts the user sent one session (#1748).
|
|
2
2
|
//
|
|
3
3
|
// In `common/` because both sides decide from it: the server builds the window (which log it reads
|
|
4
|
-
// and how it caps is its own business, in server/session/prompt-history.ts), and the pane renders
|
|
4
|
+
// and how it caps is its own business, in server/session/transcript/prompt-history.ts), and the pane renders
|
|
5
5
|
// each field. A shape kept twice is the one that drifts.
|
|
6
6
|
|
|
7
7
|
import { isRecord } from "./isRecord";
|
package/common/rawContentType.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// What a browser is handed for a file, decided from its name alone.
|
|
2
2
|
//
|
|
3
3
|
// BOTH sides read this. The server sets it as the raw route's `Content-Type`
|
|
4
|
-
// (server/backends/rawServingPlan.ts); the terminal's file links ask the same question to decide
|
|
4
|
+
// (server/backends/files/rawServingPlan.ts); the terminal's file links ask the same question to decide
|
|
5
5
|
// where a click goes, because a type the browser cannot display is a type that turns a new tab
|
|
6
6
|
// into a silent download (#2038). Two copies of this table would send a click to a tab the server
|
|
7
7
|
// then made a download — which is the bug, arrived at from the other side.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// What the Processes page shows: each tmux session and the process tree under its panes (#2219).
|
|
2
2
|
//
|
|
3
3
|
// In `common/` because both sides decide from it: the server builds it from `ps` and tmux
|
|
4
|
-
// (server/session/session-processes.ts), and the page reads it back and highlights from it.
|
|
4
|
+
// (server/session/list/session-processes.ts), and the page reads it back and highlights from it.
|
|
5
5
|
import { isRecord } from "./isRecord.js";
|
|
6
6
|
import { isUnknownArray } from "./isUnknownArray.js";
|
|
7
7
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// Both sides of the file-path link decide something from this set, and the two decisions
|
|
5
5
|
// are different, so this is the shared CORE rather than either side's whole answer:
|
|
6
6
|
// - the server serves these as text/plain so they VIEW instead of downloading
|
|
7
|
-
// (backends/rawServingPlan.ts, which also covers docs, markup and dotfiles), and
|
|
7
|
+
// (backends/files/rawServingPlan.ts, which also covers docs, markup and dotfiles), and
|
|
8
8
|
// - the client opens these in the app's own Files view instead of a new tab
|
|
9
9
|
// (composables/terminalFilePathLinkProvider.ts, which also covers .txt).
|
|
10
10
|
// Each side adds its own extras next to its import; anything that belongs to only one of
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
// visible nowhere. This is the row that makes them visible, and endable.
|
|
7
7
|
//
|
|
8
8
|
// In `common/` because both sides decide from it: the server fills it from tmux plus its own
|
|
9
|
-
// registry (session/surviving-sessions.ts), and the section renders and acts on it
|
|
9
|
+
// registry (session/reaping/surviving-sessions.ts), and the section renders and acts on it
|
|
10
10
|
// (components/settings/SurvivingSessionsSection.vue).
|
|
11
11
|
import type { TerminalAgent } from "./sessionAgent.js";
|
|
12
12
|
|
package/common/toolGroups.ts
CHANGED
|
@@ -115,6 +115,10 @@ const GROUP_BY_TOOL = new Map<string, ToolGroup>([
|
|
|
115
115
|
|
|
116
116
|
["generateImage", "media"],
|
|
117
117
|
["presentMulmoScript", "media"],
|
|
118
|
+
// manageJingleScript writes and renders short jingles and plays them in the Canvas: audio,
|
|
119
|
+
// so media. It renders locally (ffmpeg at most) and calls nothing external; whether it joins
|
|
120
|
+
// AUTO_ALLOWED_TOOLS is left to the maintainers, so for now it keeps the permission prompt.
|
|
121
|
+
["manageJingleScript", "media"],
|
|
118
122
|
|
|
119
123
|
// useSharedApp is the participant's half of the shared-app pair, and it is NOT beside
|
|
120
124
|
// manageSharedApp in `data`. That group is the workspace's own structured data; this tool moves
|
|
@@ -166,7 +170,7 @@ export const toolGroupServerId = (group: ToolGroup): string => `mulmoterminal-${
|
|
|
166
170
|
// `--mcp-config` (claude) or `-c mcp_servers.<id>.url=` (codex), so it is ours to name.
|
|
167
171
|
//
|
|
168
172
|
// Which of the two ids a session gets is decided by `carriesFullGuiMcp` in
|
|
169
|
-
// server/session/spawn-claude.ts: the single view, a cell-less chat, and a cell whose cwd IS the
|
|
173
|
+
// server/session/spawn/agents/spawn-claude.ts: the single view, a cell-less chat, and a cell whose cwd IS the
|
|
170
174
|
// workspace carry this one; a cell in a project directory is handed no --mcp-config at all and
|
|
171
175
|
// reaches the group ids through the user's own per-folder config. Both are live, on purpose.
|
|
172
176
|
//
|
|
@@ -260,7 +264,7 @@ export const AUTO_ALLOWED_TOOLS: readonly string[] = [
|
|
|
260
264
|
* then deploy" arriving in that text is a tool call rather than a question.
|
|
261
265
|
*
|
|
262
266
|
* IT SAYS CLAUDE, AND THAT IS THE WHOLE OF ITS REACH. codex approves per SERVER — `guiMcpServers`
|
|
263
|
-
* in `server/session/mcp-config.ts` marks every attached group `autoApprove: true`, by the owner's
|
|
267
|
+
* in `server/session/spawn/setup/mcp-config.ts` marks every attached group `autoApprove: true`, by the owner's
|
|
264
268
|
* decision of 2026-07-28 — so a codex cell holding a group waves through every tool in it, this
|
|
265
269
|
* list included. That is already true of `manageSharedApp` in `data` and is now equally true of
|
|
266
270
|
* `useSharedApp` in `external`; adding the tool did not create it. It cannot be narrowed per tool
|
package/common/transcriptView.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// What a hosted agent's conversation looks like ON THE WIRE.
|
|
2
2
|
//
|
|
3
3
|
// In `common/` because both ends decide from it: the host folds an agent's JSONL (or copilot's
|
|
4
|
-
// table) into these shapes in `server/session/transcript-view.ts`, and two clients render them —
|
|
4
|
+
// table) into these shapes in `server/session/transcript/transcript-view.ts`, and two clients render them —
|
|
5
5
|
// the phone's terminal detail page over the remoteHost socket, and the browser's transcript pane
|
|
6
6
|
// over `/api/transcript/view`. Mirroring the shape into `src/` would let one side gain a status the
|
|
7
7
|
// other silently renders as nothing.
|
package/common/worktreeEnv.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// isolated by a worktree; these are not, so two trees running `yarn dev` race for one 3000.
|
|
4
4
|
//
|
|
5
5
|
// The pure half — what a slot is worth, what a slug looks like, and the shape the browser
|
|
6
|
-
// receives. Reserving lives in server/config/worktree-env.ts, which needs the disk.
|
|
6
|
+
// receives. Reserving lives in server/config/worktree/worktree-env.ts, which needs the disk.
|
|
7
7
|
|
|
8
8
|
/** How far apart two consecutive slots sit.
|
|
9
9
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as e,t}from"./mermaid-parser.core
|
|
1
|
+
import{m as e,t}from"./mermaid-parser.core-D9bG0VLG.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-CllyRBe0.js";import"./chunk-VPRB5NB3-zipI-qki.js";import{n as i,r as a,t as o}from"./chunk-AW2ZBBNX-CzNEI48Y.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-xdDqFngm.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(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=n(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=n(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=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./chunk-NGNAAXSQ-DqoPQk1a.js";import{M as e}from"./mermaid-parser.core-D9bG0VLG.js";export{e as createArchitectureServices};
|