@mulmoclaude/core 4.9.2 → 4.9.3

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.
@@ -1393,8 +1393,8 @@ treatment, and the workspace mounted if you want it to follow the port.
1393
1393
  - The platform token (bot token, app token) was revoked or regenerated.
1394
1394
  - The bridge process is not running at all. Check before assuming anything above.
1395
1395
  Since #3084 a bridge that died says why on its last line — `[<transport>]
1396
- unhandled rejection — exiting: …` or `[<transport>] uncaught exception —
1397
- exiting: …`, naming the transport. A bridge stopped on purpose names the
1396
+ unhandled rejection — exiting: …` or `[<transport>] uncaught exception —
1397
+ exiting: …`, naming the transport. A bridge stopped on purpose names the
1398
1398
  signal: Ctrl-C prints `[<transport>] SIGINT — shutting down`, while a plain
1399
1399
  `kill <pid>` sends SIGTERM and prints `[<transport>] SIGTERM — shutting down`.
1400
1400
  **No such line and the process gone** means either an older npm build (they
@@ -1498,7 +1498,7 @@ install hint alone.
1498
1498
  ### Why
1499
1499
 
1500
1500
  Two servers over one workspace overwrite each other's `.session-token`. After
1501
- that a stateless plugin dispatch authenticates cleanly against the *wrong*
1501
+ that a stateless plugin dispatch authenticates cleanly against the _wrong_
1502
1502
  server, while the session-scoped `/api/internal/tool-result` push lands where
1503
1503
  the session does not exist and is dropped — so plugin views simply never render
1504
1504
  on one of the two and nothing reports an error. The guard refuses that setup
@@ -1528,10 +1528,51 @@ means a real instance answered.
1528
1528
  To share one workspace between two servers anyway — accepting the token stomping:
1529
1529
 
1530
1530
  ```bash
1531
- MULMOCLAUDE_ALLOW_MULTIPLE_INSTANCES=1 yarn dev
1531
+ yarn dev --allow-multiple-instances # or MULMOCLAUDE_ALLOW_MULTIPLE_INSTANCES=1
1532
1532
  ```
1533
1533
 
1534
- Use the env var for `yarn dev`. The `--allow-multiple-instances` flag works on
1535
- `npx mulmoclaude` and `yarn server`, but **not** on `yarn dev`: that is a compound
1536
- `a && b && c` script, yarn appends extra args to the last command only, and the
1537
- guard that stops the launch runs in the first one.
1534
+ The flag and the env var are equivalent on `yarn dev`, `yarn server` and
1535
+ `npx mulmoclaude` alike. (Before #3113 the flag was silently dropped by `yarn dev`,
1536
+ so an older build needs the env var there.)
1537
+
1538
+ ## A bridge enabled in `config/bridges.json` is not running
1539
+
1540
+ ### Symptoms
1541
+
1542
+ The workspace has `config/bridges.json` with a bridge switched on, the server
1543
+ started fine, and no messages arrive from that platform.
1544
+
1545
+ ### Cause
1546
+
1547
+ An in-process bridge (#3080) never blocks server startup — a failure costs that
1548
+ one bridge and goes to the log. So the server looking healthy says nothing about
1549
+ the bridge. The log line names which of the three happened:
1550
+
1551
+ ```
1552
+ bridges bridge failed to start — the server continues without it
1553
+ { transportId: 'telegram', error: 'TELEGRAM_BOT_TOKEN is required. …' }
1554
+
1555
+ bridges enabled bridge cannot run in-process yet — start it with its CLI instead
1556
+ { transportId: 'slack' }
1557
+
1558
+ bridges ignoring a malformed entry in config/bridges.json
1559
+ { key: 'telegram', reason: '`enabled` must be true or false' }
1560
+ ```
1561
+
1562
+ ### Fix
1563
+
1564
+ 1. `grep bridges <the server log>` and read which of the three it is.
1565
+ 2. **Credentials missing** — they live in `.env`, not in `config/bridges.json`.
1566
+ The error text names the variable (`TELEGRAM_BOT_TOKEN`, …).
1567
+ 3. **Not converted yet** — only `telegram` runs in-process today; the other 24
1568
+ still need `yarn <name>`. See `docs/in-process-bridges.md`.
1569
+ 4. **Malformed entry** — the shape is `{ "bridges": { "<id>": { "enabled": true } } }`.
1570
+ A transport id is lowercase letters, digits and dashes.
1571
+
1572
+ Confirm with the startup line that lists what did start:
1573
+
1574
+ ```
1575
+ bridges in-process bridges running { transports: [ 'telegram' ] }
1576
+ ```
1577
+
1578
+ Absence of that line means nothing started.
@@ -23,11 +23,11 @@ The container runs with `--cap-drop ALL` and as the host user's UID/GID, so it h
23
23
 
24
24
  ## Disabling the Sandbox
25
25
 
26
- Set the environment variable `DISABLE_SANDBOX=1` to always run the agent directly on the host, even when Docker is available. Equivalently, pass the `--disable-sandbox` CLI flag — `npx mulmoclaude --disable-sandbox` or `yarn server --disable-sandbox` (**not** `yarn dev`, whose compound script drops trailing args; use the env var there). The flag form is handy on Windows PowerShell (no inline `VAR=value` syntax), in IDE / launcher run configs, and for quick ad-hoc debugging. Both set the same internal switch; the env var stays supported in parallel.
26
+ Set the environment variable `DISABLE_SANDBOX=1` to always run the agent directly on the host, even when Docker is available. Equivalently, pass the `--disable-sandbox` CLI flag — `yarn dev --disable-sandbox`, `yarn server --disable-sandbox` or `npx mulmoclaude --disable-sandbox`. The flag form is handy on Windows PowerShell (no inline `VAR=value` syntax), in IDE / launcher run configs, and for quick ad-hoc debugging. Both set the same internal switch; the env var stays supported in parallel.
27
27
 
28
28
  ## Debug aids (opt-in env vars)
29
29
 
30
- These flags exist for development / debugging only. Off by default so production runs aren't surprised. Each has an equivalent `--flag` CLI form (drop the `=1`, kebab-case the name) accepted by `npx mulmoclaude` and `yarn server` — but **not** `yarn dev`, which drops trailing args — e.g. `DISABLE_SANDBOX=1` ≡ `--disable-sandbox`, `PERSIST_TOOL_CALLS=1` ≡ `--persist-tool-calls`, `DISABLE_MACOS_REMINDER_NOTIFICATIONS=1` ≡ `--disable-macos-reminders`, `JOURNAL_FORCE_RUN_ON_STARTUP=1` ≡ `--journal-force-run`, `CHAT_INDEX_FORCE_RUN_ON_STARTUP=1` ≡ `--chat-index-force-run`. Secret-bearing vars (auth token, API keys) have no flag form on purpose — argv is visible via `ps` / shell history.
30
+ These flags exist for development / debugging only. Off by default so production runs aren't surprised. Each has an equivalent `--flag` CLI form (drop the `=1`, kebab-case the name) accepted by `yarn dev`, `yarn server` and `npx mulmoclaude` — e.g. `DISABLE_SANDBOX=1` ≡ `--disable-sandbox`, `PERSIST_TOOL_CALLS=1` ≡ `--persist-tool-calls`, `DISABLE_MACOS_REMINDER_NOTIFICATIONS=1` ≡ `--disable-macos-reminders`, `JOURNAL_FORCE_RUN_ON_STARTUP=1` ≡ `--journal-force-run`, `CHAT_INDEX_FORCE_RUN_ON_STARTUP=1` ≡ `--chat-index-force-run`. Secret-bearing vars (auth token, API keys) have no flag form on purpose — argv is visible via `ps` / shell history.
31
31
 
32
32
  - `DISABLE_SANDBOX=1` — see above. Bypasses the Docker sandbox.
33
33
  - `PERSIST_TOOL_CALLS=1` — also persist `tool_call` events to the session jsonl alongside `tool_result`. Useful for reading the args sent to a tool after the run is over (page refresh / server restart). Off by default because args can be large and may carry payload bytes (inline images, full MulmoScript JSON) you didn't expect to land in the jsonl. See [issue #1096](https://github.com/receptron/mulmoclaude/issues/1096) for the rationale.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mulmoclaude/core",
3
- "version": "4.9.2",
3
+ "version": "4.9.3",
4
4
  "description": "Shared server-side core for MulmoClaude and MulmoTerminal — the always-shipped-together subsystems consolidated behind subpath exports so the two hosts can't drift. Server-only except the browser-safe ./artifacts, ./whisper/client, ./workspace-setup/slug, ./translation/client, ./remote-view, ./remote-host and ./plugin-vue entries. All host specifics are injected.",
5
5
  "repository": {
6
6
  "type": "git",