Files
claude-code/src/utils/pipeMuteState.ts
claude-code-best c8d08d235b Feat/integrate lint preview (#285)
* feat: 适配 zed acp 协议

* docs: 完善 acp 文档

* feat: integrate feature branches + daemon/job 命令层级化 + 跨平台后台引擎

Cherry-picked from origin/lint/preview (637c908), excluding lint-only changes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: correct detectMimeFromBase64 to decode raw bytes from base64

Cherry-picked from origin/lint/preview (ee36954).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: daemon 子进程 spawn 跨平台修复 + CliLaunchSpec 集中化重构

Cherry-picked from origin/lint/preview (c5f52cd), excluding lint-only formatting changes.

- 新建 src/utils/cliLaunch.ts: 集中化 CLI 子进程启动层
- 修复 --daemon-worker=kind 等号格式解析
- 修复 daemon/bg fast path 缺少 setShellIfWindows()
- 修复 checkPathExists 用 existsSync 替代 execSync('dir')
- 7 个 spawn 站点迁移到 CliLaunchSpec

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: merge tsconfig.base.json into tsconfig.json with full compiler options

The cherry-pick from 637c908 dropped jsx/strict/etc settings when removing
tsconfig.base.json. This commit restores them in a single tsconfig.json.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: merge tsconfig.base.json into tsconfig.json with full compiler options

The cherry-pick from 637c908 dropped jsx/strict/etc settings when removing
tsconfig.base.json. This commit restores them in a single tsconfig.json.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 20:59:29 +08:00

79 lines
2.2 KiB
TypeScript

/**
* pipeMuteState — Master-side logical disconnect state.
*
* Tracks which slave pipes are currently "muted" (logically disconnected)
* and which have a temporary `/send` override active.
*
* This is local master state only — not part of the socket protocol.
*/
// ---------------------------------------------------------------------------
// Muted set: slaves whose business messages should be dropped by master
// ---------------------------------------------------------------------------
const _mutedPipes = new Set<string>()
export function setMasterMutedPipes(names: Iterable<string>): void {
_mutedPipes.clear()
for (const n of names) _mutedPipes.add(n)
}
export function isMasterPipeMuted(name: string): boolean {
return _mutedPipes.has(name)
}
export function removeMasterPipeMute(name: string): void {
_mutedPipes.delete(name)
}
export function clearMasterMutedPipes(): void {
_mutedPipes.clear()
}
// ---------------------------------------------------------------------------
// Send override set: slaves temporarily unmuted by explicit `/send` command.
// Override lasts until the slave emits `done` or `error`.
// ---------------------------------------------------------------------------
const _sendOverrides = new Set<string>()
let _sendOverrideVersion = 0
const _sendOverrideListeners = new Set<() => void>()
function emitSendOverrideChanged(): void {
_sendOverrideVersion += 1
for (const listener of _sendOverrideListeners) {
listener()
}
}
export function addSendOverride(name: string): void {
_sendOverrides.add(name)
emitSendOverrideChanged()
}
export function removeSendOverride(name: string): void {
if (_sendOverrides.delete(name)) {
emitSendOverrideChanged()
}
}
export function hasSendOverride(name: string): boolean {
return _sendOverrides.has(name)
}
export function clearSendOverrides(): void {
if (_sendOverrides.size > 0) {
_sendOverrides.clear()
emitSendOverrideChanged()
}
}
export function subscribeSendOverride(listener: () => void): () => void {
_sendOverrideListeners.add(listener)
return () => { _sendOverrideListeners.delete(listener) }
}
export function getSendOverrideVersion(): number {
return _sendOverrideVersion
}