claude-threads 1.9.1 → 1.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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,21 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.9.3] - 2026-04-24
9
+
10
+ ### Internals
11
+
12
+ - **Extracted `ReactionRouter` from `SessionManager`** into `src/session/reaction-router.ts`. The reaction dispatch logic (allowlist gate, audit log, resume-from-reaction, session-level reactions, MessageManager fallthrough) previously inlined as three private methods on `SessionManager` now lives in its own module behind an explicit `ReactionRouterDeps` interface. Pure extraction — no behavior change, no persisted-schema change. `manager.ts` dropped from 1767 to 1633 LOC. (#348)
13
+ - **Lifecycle FSM** (`src/session/lifecycle-fsm.ts`). `transitionTo()` now validates each `from → to` change against an allowed-transition table. Warn-only by default — illegal transitions log at `warn` with a structured `fsm.illegal_transition` payload and the state assignment proceeds. Set `CLAUDE_THREADS_FSM_STRICT=1` to throw instead. The transition table is derived from observed transitions in the codebase, not an idealised graph; wiring it up surfaced five legitimate transitions (`starting→paused`, `starting→interrupted`, `starting→restarting`, `paused→restarting`, `interrupted→paused`) that the original comment block didn't mention. (#349)
14
+ - **Removed `CLAUDE_THREADS_SERIALIZE_V2` rollback flag** from PR 3. `persistSession` now unconditionally goes through `MessageManager.serialize()`. One release of bake time with the parity test as guard; snapshot tests remain. (#349)
15
+ - **Removed `CLAUDE_THREADS_MCP_CONFIG_INLINE` rollback flag** from PR 2. Production always writes the MCP config to an owner-only tempfile (mode 0600); the `inline` opt on `materializeMcpConfig` stays as a test-only shortcut. (#349)
16
+
17
+ ## [1.9.2] - 2026-04-24
18
+
19
+ ### Fixed
20
+ - **Unreadable `[object ErrorEvent]` in WebSocket error logs.** Recent Node / undici deliver a browser-style `ErrorEvent` (not a plain `Error`) to `ws.onerror`, and `` `${event}` `` stringifies that wrapper to `[object ErrorEvent]` — the original failure cause was being dropped. New `formatWebSocketError(err)` helper in `src/platform/utils.ts` pulls the first usable signal (`.message` → `.error.message` → `.type (code: .code)` → `String(err)`), wired into all five WebSocket error sites across Slack + Mattermost main clients, both MCP permission-server clients, and the UI re-emit. The Slack client's rejection and re-emitted `Error` now carry the underlying message too, instead of the opaque `"Socket Mode WebSocket error"`. (#347)
21
+ - **Worktree creation under a parent branch gave a generic "Failed to create worktree" message.** When a flat branch `test` already exists and the user requests `test/add-unit-coverage`, git refuses with `fatal: 'refs/heads/test' exists; cannot create 'refs/heads/test/add-unit-coverage'`. `parseWorktreeError` now matches this specific shape and reports `Branch <parent> already exists and blocks <nested>` with the suggestion to pick a non-nested name or delete the parent branch first. (#347)
22
+
8
23
  ## [1.9.1] - 2026-04-24
9
24
 
10
25
  ### Internals