claude-threads 1.35.0 → 1.36.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/CHANGELOG.md +16 -0
- package/README.md +13 -0
- package/dist/index.js +5482 -5983
- package/dist/mcp/mcp-server.js +3008 -19639
- package/docs/CONFIGURATION.md +45 -0
- package/package.json +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.36.0] - 2026-09-10
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **`!usage` reports the subscription windows for the seat a thread runs on** (#523, thanks @kaza). The session window and the weekly window, as a bar with the percentage used and the time each one resets; `!usage all` does the same for every account in the `claudeAccounts` pool, which is what tells you whether the pool is actually balanced or whether one seat is carrying everything. It reuses the existing `/usage` probe rather than reading the OAuth endpoint directly, so it costs nothing and needs no extra credentials. API-key accounts report no windows and say so. Login emails stay hidden unless you set `usage.showEmails`.
|
|
14
|
+
- **`bugReports: false` removes the `!bug` path entirely** (#574). A bug report leaves the operator's infrastructure — attached screenshots go to a public anonymous file host, and the body (session context plus recent daemon log lines) becomes an issue on this project's public repository, behind best-effort redaction. `claudeCanExecute` means the agent can trigger it unprompted. Regulated deployments need one switch that closes all of it: the typed command, Claude invoking it itself, the 🐛 error reaction, the approval that files the issue, and the `!help` listing. Defaults to `true`, so nothing changes unless you set it, and it **fails closed** — a malformed value, or a bare `bugReports:`, disables the feature rather than defaulting to on.
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
- **A quiet Mattermost channel no longer reconnects in a loop** (#498, thanks @Jadefalkner). A channel with no traffic produces no WebSocket frames, and the heartbeat could not tell that apart from a dead socket: after 90 s of silence it declared the connection dead and reconnected, every 90 to 150 s, all day, each teardown a window in which a message can be missed. The heartbeat now sends a `ping` once the socket has been silent for half the interval, and the server's `pong` counts as activity, so a quiet connection stays up while a genuinely dead one is still torn down on the next tick. Verified against Mattermost 11.7.8, and a socket that accepts sends but never replies still reconnects exactly once. This is the Mattermost half; Node 22+ exposes no frame-level ping visibility to the Slack client, so #498 stays open for that.
|
|
18
|
+
- **Exhausted reconnection attempts now exit instead of leaving the process deaf** (#500, thanks @kaza). When the socket was gone for good the bot stayed alive with nothing listening, and systemd still reported the unit `active`: every health check said healthy while the bot heard nothing. It now exits, so `Restart=always` revives it, which is what every deployment already expects. A fail-loud change by design, and configurable through the reconnect policy.
|
|
19
|
+
|
|
20
|
+
## [1.35.1] - 2026-09-08
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
- **A finished session no longer leaks its event listeners** (#569, thanks @R09722akaBennett). `TypedEventEmitter.removeAllListeners()` forwarded its optional argument as an explicit `undefined`, which Node's `EventEmitter` reads as "the event named undefined", so `MessageManager.dispose()` removed nothing and every session's closures stayed alive. Invisible in CI because Bun 1.3.3 behaves differently from Node there; Bun 1.4.2 agrees with Node and fails the existing tests on the old code.
|
|
24
|
+
- **The resume notice no longer promises that interrupted work continued** (#571, thanks @kaza; item 1 of #533). After a daemon restart or a platform re-enable, a thread whose turn was in flight was told "You can continue where you left off" while nothing continued: `isProcessing` starts false and nothing is sent to the CLI. The notice now says why the resume happened and, for the two daemon-initiated cases, that anything still running did not survive; only a resume a person asked for keeps the invitation. Attribution to the session owner is gone from the boot path, where nobody was there.
|
|
25
|
+
|
|
10
26
|
## [1.35.0] - 2026-09-07
|
|
11
27
|
|
|
12
28
|
### Changed
|
package/README.md
CHANGED
|
@@ -203,6 +203,19 @@ A few more things set it apart. The full Claude Code permission model lives in t
|
|
|
203
203
|
|
|
204
204
|
This table is current as of August 2026. All of these products move quickly — if it has gone stale, [open an issue](https://github.com/anneschuth/claude-threads/issues).
|
|
205
205
|
|
|
206
|
+
## Staying connected
|
|
207
|
+
|
|
208
|
+
If the connection to Slack or Mattermost drops, the bot reconnects with
|
|
209
|
+
exponential backoff. When those attempts run out it does **not** sit there
|
|
210
|
+
alive with a dead socket — that "active but deaf" state looks healthy to a
|
|
211
|
+
supervisor and looks broken to everyone in the channel. By default it waits a
|
|
212
|
+
minute, resets, and keeps trying, which recovers on its own.
|
|
213
|
+
|
|
214
|
+
Running under systemd or another supervisor? Set `reconnectPolicy: exit` on
|
|
215
|
+
the platform and the bot shuts down cleanly and exits non-zero instead, so
|
|
216
|
+
`Restart=always` brings it back with a fresh socket. See the
|
|
217
|
+
[Configuration Reference](https://github.com/anneschuth/claude-threads/blob/main/docs/CONFIGURATION.md).
|
|
218
|
+
|
|
206
219
|
## Documentation
|
|
207
220
|
|
|
208
221
|
- **[Setup Guide](https://github.com/anneschuth/claude-threads/blob/main/SETUP_GUIDE.md)** - Creating the bot account on Mattermost or Slack, step by step
|