claude-threads 1.8.0 → 1.8.2
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 +17 -0
- package/dist/index.js +12 -7
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,23 @@ 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.8.2] - 2026-04-22
|
|
9
|
+
|
|
10
|
+
### Breaking
|
|
11
|
+
- **Minimum Node.js bumped from 18 to 20.** Required by `@hono/node-server@2`. Node 18 has been past end-of-life since April 2025, so most installs are already on 20+. (#335)
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
- **Plain reply could no longer resume a paused session after bot restart** — when the bot restarted more than 2× `sessionTimeoutMinutes` after a session's last activity, `cleanStale()` soft-deleted the paused record. The reply-resume path used `load()` (which hides soft-deleted sessions), so a user reply in the thread promised by the timeout message (`send a new message to continue`) fell through to the `Mention me with your request` branch and a subsequent @mention started a fresh session, losing thread context. The 🔄 reaction path never had this problem because it reads raw data via `findByPostId`. The two resume paths now share the same visibility into the 3-day history window. (#336, thanks @shaders)
|
|
15
|
+
- **Flaky `MAX_SESSIONS Limit` integration test** — the Mattermost docker container in CI throws transient 500s on `/posts` that trigger ~1.5s of retry backoff per call. Six sequential session starts under that overhead pushed at least one `waitForSessionActive` past its 10s deadline ~30-50% of runs. The test now uses a 20s per-step budget under `CI`. The race the test guards (`maxSessions` cap, fixed in v1.7.1 / #331) is unchanged. (#337)
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- **Dependencies** — `@hono/node-server` 1.19.14 → 2.0.0 (#335), `eslint` 10.2.0 → 10.2.1, `prettier` 3.8.2 → 3.8.3, `typescript` 6.0.2 → 6.0.3, `typescript-eslint` 8.58.2 → 8.59.0 (#334).
|
|
19
|
+
|
|
20
|
+
## [1.8.1] - 2026-04-21
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
- **Interactive users silently demoted to headless when `autoUpdate` was enabled** — the auto-restart daemon runs the child as a bash background job (`&`), which leaves stdout piped and stdin detached. Ink can't render there, so the TUI dropped out without any error. Three prior patches (#287, #300, #317) each fixed the active crash mode inside the daemon path; none questioned whether interactive users should be routed through the daemon at all. The daemon is now skipped when `process.stdout.isTTY` and `--headless` isn't set. Unattended paths (explicit `--auto-restart`, `--headless`, or no TTY) still go through the daemon. (#333)
|
|
24
|
+
|
|
8
25
|
## [1.8.0] - 2026-04-21
|
|
9
26
|
|
|
10
27
|
### Added
|
package/dist/index.js
CHANGED
|
@@ -53511,6 +53511,15 @@ class SessionStore {
|
|
|
53511
53511
|
const data = this.loadRaw();
|
|
53512
53512
|
return data.sessions[sessionId];
|
|
53513
53513
|
}
|
|
53514
|
+
findByThreadIdAnyState(threadId) {
|
|
53515
|
+
const data = this.loadRaw();
|
|
53516
|
+
for (const session of Object.values(data.sessions)) {
|
|
53517
|
+
if (session.threadId === threadId) {
|
|
53518
|
+
return session;
|
|
53519
|
+
}
|
|
53520
|
+
}
|
|
53521
|
+
return;
|
|
53522
|
+
}
|
|
53514
53523
|
findByPostId(platformId, postId) {
|
|
53515
53524
|
const data = this.loadRaw();
|
|
53516
53525
|
for (const session of Object.values(data.sessions)) {
|
|
@@ -68387,13 +68396,7 @@ class SessionRegistry {
|
|
|
68387
68396
|
return this.sessionStore.findByThread(platformId, threadId);
|
|
68388
68397
|
}
|
|
68389
68398
|
getPersistedByThreadId(threadId) {
|
|
68390
|
-
|
|
68391
|
-
for (const session of all.values()) {
|
|
68392
|
-
if (session.threadId === threadId) {
|
|
68393
|
-
return session;
|
|
68394
|
-
}
|
|
68395
|
-
}
|
|
68396
|
-
return;
|
|
68399
|
+
return this.sessionStore.findByThreadIdAnyState(threadId);
|
|
68397
68400
|
}
|
|
68398
68401
|
getSessionStore() {
|
|
68399
68402
|
return this.sessionStore;
|
|
@@ -79900,6 +79903,8 @@ async function main() {
|
|
|
79900
79903
|
return false;
|
|
79901
79904
|
if (opts.autoRestart === true)
|
|
79902
79905
|
return true;
|
|
79906
|
+
if (!isHeadless && process.stdout.isTTY)
|
|
79907
|
+
return false;
|
|
79903
79908
|
if (await configExists()) {
|
|
79904
79909
|
try {
|
|
79905
79910
|
const config = loadConfigWithMigration();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-threads",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.2",
|
|
4
4
|
"description": "Share Claude Code sessions live in a Mattermost channel with interactive features",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"package.json"
|
|
64
64
|
],
|
|
65
65
|
"dependencies": {
|
|
66
|
-
"@hono/node-server": "^
|
|
66
|
+
"@hono/node-server": "^2.0.0",
|
|
67
67
|
"@inkjs/ui": "^2.0.0",
|
|
68
68
|
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
69
69
|
"@redactpii/node": "^1.0.16",
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
"yazl": "^3.3.1"
|
|
105
105
|
},
|
|
106
106
|
"engines": {
|
|
107
|
-
"node": ">=
|
|
107
|
+
"node": ">=20.0.0",
|
|
108
108
|
"bun": ">=1.2.21"
|
|
109
109
|
},
|
|
110
110
|
"lint-staged": {
|