Skip to content

mulmoterminal@4.11.0

Choose a tag to compare

@isamu isamu released this 28 Aug 04:34
· 283 commits to main since this release

Highlights

A way to stop the server that works from anywhere, an update badge that can actually appear, three port bugs that had been quietly breaking local sessions, the first code for Campaign Mode, and shared-app templates that teach a look rather than leaving grey boxes.

Setup guide: Stopping it, and the ports it takes — written at release time. (日本語)

mulmoterminal stop, and a Quit button in the browser (#1820, #1823, #1824, #1825)

There was no way to stop a running server other than finding the terminal you started it in. npx mulmoterminal@latest opens a browser, so that terminal is often the one window you are not looking at — and closing the tab leaves the server running.

  • The process says its own namemulmoterminal :<port>, in both launcher and server, so ps and pkill have something to find. The port is in the name because overwriting argv erases --port and the install path, which were previously the only way to identify the process (#1823).
  • mulmoterminal stop works from any terminal (#1824). No searching was needed: the server already registers its pid under ~/.mulmoterminal/instances/ (#1061). It sends SIGTERM so the server's own handler runs — the same shutdown Ctrl+C performs — and a new GET /api/instance lets the pid be confirmed before signalling, rather than trusting a stale file.
  • Settings → Quit MulmoTerminal, and POST /api/shutdown behind it (#1825). MulmoClaude had already answered the same need, so the route name and shape were taken from there rather than invented.

The update badge can now appear at all (#1821, #1826)

The version check ran once, at boot. Under npx mulmoterminal@latest the running version is the registry's latest at that moment, so the only check that ever ran could structurally only return "you are current". The comparison logic was never broken — what was missing was a second look. It now repeats every three hours.

Three port bugs, all of them local sessions failing to reach the server

  • A widened bind cut the server off from its own sessions (#1834, #1838). Setting MULMOTERMINAL_HOST to a specific address made hooks fail on every tool call and left the GUI MCP stuck on "still connecting". The server now also listens on loopback when the primary bind does not serve it.
  • PORT was ignored, and the error message told you to use it (#1857, #1861, #1873). PORT=34601 npx mulmoterminal started on 34567. The same line was wrong in the other direction too — the launcher exported its own PORT to every cell, so a dev server started there tried to bind MulmoTerminal's port. The chosen port now travels as an argument, which argv does not pass to child processes.
  • The second-instance guard never fired on a default install (#1876, #1877). The launcher probed the :: wildcard while the server binds 127.0.0.1, and a bind only collides with the same address — so a held port read as free, a doomed server was started, and the readiness check printed "ready" over a 200 from the other server. The launcher no longer guesses which address a port means: the child reports what the kernel bound, over IPC, and every address a launch needs is checked before spawning.

Behaviour change worth knowing: the launcher may now refuse a port it used to accept, and the URL it prints is the address it checked (http://127.0.0.1:34567) rather than localhost, which resolves to either family. The setup guide covers what to do.

Campaign Mode, first code (#1815, #1816, #1817, #1837, #1841, #1845)

Groundwork for running a queue of tasks unattended, unwired: design notes under future/, a turn-correlation rule moved to common/, a task state machine, a durable append-only record, and a claim registry for path exclusivity.

The deck editor moved, the canvas keeps up with the LLM, and formulas render (#1846, #1853, #1854, #1855, #1884)

@mulmocast/deck-web was deprecated in favour of @mulmocast/beat-editor, and the mulmocast dependencies moved to the 2.x line. More visibly: an LLM rewriting a MulmoScript now updates the canvas you already have open (#1854) — previously you had to close and reopen — every beat type is editable, and a single beat can be replaced without resending the whole script (#1855). TeX formulas render in a presentDocument preview (#1884), matching what the Marp deck side already did.

Shared apps

The templates each ship a real stylesheet at a hue of their own, so generated pages arrive styled rather than as grey boxes. A project board no longer lets a registration be mistaken for a claim (#1814) — pressing 「これをやります」 before registering used to leave people believing they had taken the work. todo-board has been removed; project-board does everything it did.

Documentation

Launch demo videos embedded in the README and both guides (#1827, #1828) with a poster frame (#1842, #1847), placed after the getting-started block with a lead-in (#1839, #1840). The README's opening was reordered so the first two screens answer "what is this" and "does it work" (#1860), with the GIF ahead of the video because GitHub does not autoplay attached video (#1862).

Dependency updates: #1809, #1865, #1883.

📦 npm: mulmoterminal@4.11.0


What's Changed

  • update by @isamu in #1809
  • One parent in the preview: the pane stops differing from the live page by @snakajima in #1810
  • The pane sends a public page's move, and one vocabulary explains every refusal by @snakajima in #1811
  • Take sharedapp 0.20.0, and give the staff page its delete by @snakajima in #1813
  • refactor: ターン相関の純関数を common/ へ(#1815 PR0) by @isamu in #1817
  • A template for the board that has a roster and an owner's desk by @snakajima in #1814
  • テンプレート 7 本が、自分の紙の色を宣言する by @snakajima in #1818
  • docs: Campaign Mode の設計メモ(汎用パイプラインと grid への載せ方) by @isamu in #1816
  • 名前の無い担当行ができる穴を塞ぐ(project-board) by @snakajima in #1819
  • feat: プロセスに mulmoterminal と名乗らせる (#1820) by @isamu in #1823
  • feat: ブラウザから MulmoTerminal を止められるようにする (#1820) by @isamu in #1825
  • feat: mulmoterminal stop — どのターミナルからでも止められるようにする (#1820) by @isamu in #1824
  • feat(update-check): 稼働中も更新チェックを回す — npx @latest 起動だと badge が出る瞬間が来なかった by @isamu in #1826
  • 共有アプリのテンプレートが、見た目とフローまで教える by @snakajima in #1829
  • sharedapp 0.22.0 — メンバー自身の取り下げ by @snakajima in #1830
  • Bump @receptron/sharedapp to 0.23.0 by @snakajima in #1831
  • Stream a watching page's records into the preview pane by @snakajima in #1833
  • feat: プレビューもビューが宣言した件数上限に従う by @snakajima in #1835
  • docs(readme): embed the launch demo videos (en/ja) by @ystknsh in #1828
  • feat(campaign): タスクの状態機械(#1815 PR1a) by @isamu in #1837
  • fix: bind を広げても自分のセッションが届くよう loopback でも listen する (#1834) by @isamu in #1838
  • 追記だけのフィードを 7 つ目のテンプレートに加える by @snakajima in #1836
  • docs(guide): move the launch demo below the getting-started block and give it a lead-in by @ystknsh in #1840
  • feat: 共有アプリに参加する側の汎用ツール useSharedApp(S0-S2) by @snakajima in #1843
  • feat(campaign): キャンペーンの永続記録(#1815 PR1b) by @isamu in #1841
  • feat: 共有アプリの変化を待つ watch / unwatch by @snakajima in #1844
  • chore: mulmocast 系の依存を 2.x ラインへ揃える by @isamu in #1846
  • docs(guide): give the launch demo video a poster frame (#1842) by @ystknsh in #1847
  • docs: 共有アプリの人向けガイド(英語)と、プレビュー操作の記述を実物に合わせる by @snakajima in #1848
  • feat(campaign): パスの排他が決めること(#1815 PR1c) by @isamu in #1845
  • fix: 再 publish の暗転と、publish のゲートを名乗る check by @snakajima in #1850
  • feat: 公開したアプリが、そこに座る agent に「持ち場」を宣言できるようにする by @snakajima in #1851
  • chore: デッキエディタを @mulmocast/beat-editor へ移行する by @isamu in #1853
  • docs: 親の状態で子の create を止める refIn と、agent に owner を渡す取引 by @snakajima in #1852
  • feat: LLM がスクリプトを書き換えたらキャンバスが自動更新されるようにする by @isamu in #1854
  • chore: mulmoscript-plugin 4.4.0 を取り込む(全 beat 種別が編集可能に) by @isamu in #1855
  • docs: put the fold to work for Show HN by @snakajima in #1860
  • docs: put the gif before the video in the Demo section by @isamu in #1862
  • feat(shared-app): an eighth template, for a discussion AI agents hold by @snakajima in #1863
  • update by @isamu in #1865
  • feat: 記事を publish する側 —— useSharedApp update と slug の受け入れ by @snakajima in #1864
  • feat: 記事の長さを、送る前にホストが断る(sharedapp 0.28.0) by @snakajima in #1866
  • chore: @receptron/sharedapp を 0.29.0 に上げる by @snakajima in #1868
  • chore: @receptron/sharedapp を 0.30.0 に上げる by @snakajima in #1869
  • feat: ページから記事を直せるようにする(correct intent, ホスト側) by @snakajima in #1870
  • fix: 手元プレビューの intent ルートが correct を読めなかった by @snakajima in #1871
  • fix(cli): PORT を launcher が読み、server へは argv で渡す (#1861, #1857) by @isamu in #1873
  • chore: @receptron/sharedapp を 0.32.0 に上げる by @snakajima in #1874
  • 公開のトップページをアプリに返す(プレビュー側と計画) by @snakajima in #1881
  • chore: @receptron/sharedapp@0.34.0 by @snakajima in #1882
  • update by @isamu in #1883
  • fix(cli): 起動ポートの probe を BIND_HOST に追随させる —— 二重起動ガードが既定構成で発火していなかった (#1876) by @isamu in #1877
  • chore: @mulmoclaude/markdown-plugin@4.1.0(TeX 数式の MathJax 描画) by @snakajima in #1884

Full Changelog: 4.10.1...4.11.0