fix: address 5 edge cases from review-work findings

- C3: include command args in auto-slash-command dedup key
- H2: track completed task summaries for ALL COMPLETE message
- H9: increment tmux close retry count on re-mark
- H8: detect stale MCP connections after disconnect+reconnect race
- H8: guard disconnectedSessions growth for non-MCP sessions
- C1: await tmux cleanup in plugin dispose lifecycle
This commit is contained in:
YeonGyu-Kim
2026-03-11 20:39:03 +09:00
parent 1ede1f4e12
commit e1d864eb83
9 changed files with 53 additions and 12 deletions
+11 -4
View File
@@ -29,9 +29,16 @@ export async function getOrCreateClient(params: {
}
const expandedConfig = expandEnvVarsInObject(config)
const connectionPromise = (async () => {
let currentConnectionPromise!: Promise<Client>
currentConnectionPromise = (async () => {
const client = await createClient({ state, clientKey, info, config: expandedConfig })
const isStale = state.pendingConnections.has(clientKey) && state.pendingConnections.get(clientKey) !== currentConnectionPromise
if (isStale) {
try { await client.close() } catch {}
throw new Error(`Connection for "${info.sessionID}" was superseded by a newer connection attempt.`)
}
if (state.disconnectedSessions.has(info.sessionID)) {
await forceReconnect(state, clientKey)
throw new Error(`Session "${info.sessionID}" disconnected during MCP connection setup.`)
@@ -40,13 +47,13 @@ export async function getOrCreateClient(params: {
return client
})()
state.pendingConnections.set(clientKey, connectionPromise)
state.pendingConnections.set(clientKey, currentConnectionPromise)
try {
const client = await connectionPromise
const client = await currentConnectionPromise
return client
} finally {
if (state.pendingConnections.get(clientKey) === connectionPromise) {
if (state.pendingConnections.get(clientKey) === currentConnectionPromise) {
state.pendingConnections.delete(clientKey)
}
}